當前位置:編程學習大全網 - 源碼下載 - 掃雷世界源代碼

掃雷世界源代碼

導入Java . awt . *;

導入javax . swing . *;

導入Java . util . random;

導入Java . awt . event . *;

Min類擴展JPanel // lei的類

{

//備註:鼠標左鍵= 1;右鍵= 3;中間鍵= 2

private int flag = 0,statu = 0;//定義迅雷的屬性0:未打開1:打開2:標記為迅雷3:不確定。

//flag = 0不是雷霆;Flag = 1就是雷。

private int but,count = 0;//但是:按了哪個鼠標鍵?伯爵:這壹帶有多少雷?

private int mx = 0,my = 0,MW = 10;//定義地雷的坐標和寬度。

Public Min() //構造函數

{

statu = 0;

}

public Min(int f,int x,int y,int w)

//構造函數

{

flag = f;

MX = x;

my = y;

MW = w;

}

public int get flag(){ return flag;}

public int get statu(){ return statu;}

public int getMx(){ return MX;}

public int getMy(){ return my;}

public int getMw(){ return MW;}

public int get count(){ return count;}

public void set flag(int f){ flag = f;}

public void set count(int c){ count = c;}

public void setData(int f,int x,int y,int w,int s)

//傳遞值

{

flag = f;

MX =(x-1)* w;

my =(y-1)* w;

MW = w-1;

statu = s;

}

//根據鼠標點擊的不同改變光線的屬性。

public int sendKey(int key)

{

//返回值,如果遊戲結束則為-1。

int RTN = 1;

if(key == 3)

{

開關(狀態)

{

案例1:

打破;

案例二:

statu = 3;

打破;

案例三:

statu = 0;

打破;

案例0:

statu = 2;

打破;

}

RTN = 1;

}

if(key = = 1 & amp;& amp狀態== 0)

{

開關(標誌)

{

案例0:

statu = 1;

RTN = 2;

打破;

案例1:

statu = 1;

RTN =-1;

打破;

}

}

返回rtn

}

}

類DrawPanel擴展JPanel

{

private int i,j;

private int f = 0;//如果f = 1,則遊戲結束,如果f =2,則獲勝

private int chx = 0,chy = 0;//專門記錄坐標x和y的值。

private int msum = 6,ksum = 0;//msum:地雷數量,ksum:標記的地雷數量。

private int bx = 10,by = 10,bw = 40//bx,by:棋盤的大小,bw:棋子的大小。

公共最小板[][] = {

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、{新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、新Min()、

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

{新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值()、新最小值(),

};

//用坐標ax和ay畫出該區域的雷的狀態。

公共空繪制(Graphics g,int ax,int ay)

{

int x,y,w;//坐標x,y;和寬度:w

int s,c,flag//狀態;雷聲的數量;

int CX = bw/2-4;

int cy = bw/2+4;

x = board[ax][ay]。getMx();

y = board[ax][ay]。getMy();

w = board[ax][ay]。getMw();

s = board[ax][ay]。get statu();

c = board[ax][ay]。getCount();

flag= board[ax][ay]。get flag();

開關

{

案例0: //沒有打開狀態。

{

g . set color(color . black);

g.fillRect(x,y,w,w);

打破;

}

案例1: //打開狀態

{

g . set color(color . blue);

g.fillRect(x,y,w,w);

如果(c!= 0 & amp& ampFlag == 0) //這裏沒有打雷。

{

g . set color(color . red);

g.drawString(String.valueOf(c),x + cx,y+cy);

}

If(flag == 1) //這裏有雷。

{

g . set color(color . red);

g.fillRect(x,y,w,w);

g . set color(color . blue);

G.drawString("雷",x+cx,y+cy);

}

打破;

}

情況2: //地雷標記狀態

{

g . set color(color . green);

g.fillRect(x,y,w,w);

g . set color(color . blue);

G.drawString ("flag ",x+cx,y+cy);

打破;

}

情況3: //不確定狀態

{

g . set color(color . black);

g.fillRect(x,y,w,w);

g . set color(color . red);

g .拉繩("?,x + cx,y+cy);

打破;

}

默認值:

打破;

}

}

//無繪圖儀繪圖功能:用坐標ax,ay繪制雷霆的狀態和圖形。

公共無效提取(int ax,int ay)

{

圖形g;

g = this . get graphics();

draw(g,ax,ay);

}

//打開周圍沒有雷的地方,點擊左鍵觸發繪畫區域。

public int openNoMin(int ax,int ay)

{

int i,j;

if(ax & lt;1 | | ay & lt;1 | | ax & gt;bx | | ay & gtby)返回0;//鼠標點擊的區域越界。

if(板[ax][ay]。getStatu()!= 0)返回0;//如果此區域已打開,則返回。

木板[ax][ay]。sendKey(1);//如果返回值等於-1,遊戲結束。

draw(ax,ay);

if(板[ax][ay]。getFlag() == 1)

//如果遊戲結束了,就把雷霆全部展現出來。

{

for(I = 1;我& lt= bxi++)

{

for(j = 1;j & lt= byj++)

{

if(棋盤[i][j]。getFlag() == 1)

{

理事會[i][j]。sendKey(1);

draw(i,j);

}

}

}

return-1;

}

//如果遊戲沒有結束。

if(板[ax][ay]。getCount()& gt;0)

{

ksum++;

返回1;//如果周圍有雷,就不需要開圍了。

}

if(板[ax][ay]。getCount()= = 0 & amp;& amp木板[ax][ay]。getFlag() == 0)

//周圍沒有打雷。打開周圍直到有雷聲。

{

openNoMin(ax-1,ay-1);openNoMin(ax,ay-1);openNoMin(ax+1,ay-1);

openNoMin(ax-1,ay);openNoMin(ax+1,ay);

openNoMin(ax-1,ay+1);openNoMin(ax,ay+1);openNoMin(ax+1,ay+1);

}

ksum++;

返回1;

}

//計算坐標x和y周圍的雷數。

public int getCount(int ai,int aj)

{

int sum = 0;

if(板[ai][aj]。getFlag() == 1)

{

返回總和;

}

if(ai & gt;1。& ampaj & gt1。& ampai & ltbx & amp& ampaj & lt由)

{

sum = board[ai-1][aj-1]。get flag()+board[ai][aj-1]。get flag()+board[ai+1][aj-1]。getFlag()+

板[ai-1][aj ]。get flag()+board[ai+1][aj]。getFlag()+

板[ai-1][aj+1]。get flag()+board[ai][aj+1]。get flag()+board[ai+1][aj+1]。get flag();

}

if(ai = = 1 & amp;& ampaj==1)

{

sum = board[ai+1][aj ]。getFlag()+

棋盤[ai][aj+1]。get flag()+board[ai+1][aj+1]。get flag();

}

if(ai = = 1 & amp;& ampaj==by)

{

sum = board[ai][aj-1]。get flag()+board[ai+1][aj-1]。getFlag()+

板[ai+1][aj ]。get flag();

}

if(ai = = bx & amp;& ampaj==1)

{

sum = board[ai-1][aj ]。getFlag()+

板[ai-1][aj+1]。get flag()+board[ai][aj+1]。get flag();

}

if(ai = = bx & amp;& ampaj==by)

{

sum = board[ai-1][aj-1]。get flag()+board[ai][aj-1]。getFlag()+

板[ai-1][aj ]。get flag();

}

if(ai = = 1 & amp;& ampaj & gt1。& ampaj & lt由)

{

sum = board[ai][aj-1]。get flag()+board[ai+1][aj-1]。getFlag()+

板[ai+1][aj ]。getFlag()+

棋盤[ai][aj+1]。get flag()+board[ai+1][aj+1]。get flag();

}

if(ai = = bx & amp;& ampaj & gt1。& ampaj & lt由)

{

sum = board[ai-1][aj-1]。get flag()+board[ai][aj-1]。getFlag()+

板[ai-1][aj ]。getFlag()+

板[ai-1][aj+1]。get flag()+board[ai][aj+1]。get flag();

}

if(ai & gt;1。& ampai & ltbx & amp& ampaj==1)

{

sum = board[ai-1][aj ]。get flag()+board[ai+1][aj]。getFlag()+

板[ai-1][aj+1]。get flag()+board[ai][aj+1]。get flag()+board[ai+1][aj+1]。get flag();

}

if(ai & gt;1。& ampai & ltbx & amp& ampaj==by)

{

sum = board[ai-1][aj-1]。get flag()+board[ai][aj-1]。get flag()+board[ai+1][aj-1]。getFlag()+

板[ai-1][aj ]。get flag()+board[ai+1][aj]。get flag();

}

返回總和;

}

//傳入參數:多少列,多少行,寬度,雷數。

public void initMin(int ax,int ay,int aw,int as)

{

int k = 1;//指示生成哪個礦。

隨機r;//隨機數

f = 0;//f=0表示遊戲還沒有結束。

ksum = 0;

bx = ax

by = ay

bw = aw

msum = as

r = new Random();

//初始化底盤的值。

for(I = 1;我& lt= bxi++)

{

for(j = 1;j & lt= byj++)

{

理事會[i][j]。setData(0,I,j,bw,0);

}

}

//隨機生成雷霆

while(k & lt;= msum)

{

I = r . nextint(bx)+1;

j = r . nextint(by)+1;

if(棋盤[i][j]。getFlag()!= 1)

{

理事會[i][j]。set flag(1);

k++;

}

}

//無雷區周圍有幾個地雷。初始化它們的值。

for(I = 1;我& lt= bxi++)

{

for(j = 1;j & lt= byj++)

{

理事會[i][j]。setCount(getCount(i,j));

}

}

set background(color . white);

repaint();

}

//構造函數

公共繪圖面板(int ax,int ay,int aw,int as)

{

initMin(ax,ay,aw,as);

addMouseListener(新的MouseAdapter()

{

公共void mousePressed(MouseEvent me)

{

int r;

如果(f!= 0)返回;//如果遊戲結束,返回。

CHX = me . getx();

chy = me . gety();

if(me.getButton()!= 1)

{

板[CHX/bw+1][chy/bw+1]。sendKey(me . get button());

draw(chx/bw+1,chy/bw+1);

}

else if(me.getButton() == 1)

{

if(openNoMin(chx/bw+1,chy/bw+1) == -1)

{

f = 1;

repaint();

}

else if ( ksum + msum == bx*by)

{

f = 2;

repaint();

}

}

}

}

);

}

//重新繪制所有圖形,包括壹些修飾過的圖形。

公共空白油漆(圖形g)

{

int x,y,w;

int s;

int CX = bw/2-4;

int cy = bw/2+4;

g.clearRect(0,0,600,600);

for(I = 1;我& lt= bxi++)

{

for(j = 1;j & lt= byj++)

{

draw(g,I,j);

}

}

如果(f == 1)

{

字體f =新字體(" 11 ",1,70);

font fo = g . get font();

g . set color(color . white);

g . set font(f);

//g . setsize();

g.drawString(“遊戲結束”,0,200);

g . set font(fo);

}

如果(f == 2)

{

字體f =新字體(" 11 ",1,70);

font fo = g . get font();

g . set color(color . white);

g . set font(f);

//g . setsize();

g.drawString("妳贏了!",0,200);

g . set font(fo);

}

}

};

//主類和程序的入口

公共類Mine擴展JFrame實現ActionListener

{

container CP = getContentPane();

JButton Bt = new JButton(" opening ");

Label l1 =新標簽("列:");

Label l2 =新標簽(" line:");

Label l3 =新標簽(" width:");

標簽l4 =新標簽(“雷數:“);

TextField TF 1 = new TextField(" 10 ",2);//列

TextField tf2 = new TextField(" 10 ",2);//線

TextField tf3 = new TextField("40 ",2);//寬度

TextField tf4 = new TextField(" 15 ",2);//雷霆的數量

int x=10,y=10,w=40,sum = 15;

DrawPanel dp =新DrawPanel(x,y,w,sum);

公共礦山()

{

set background(color . white);

cp.setLayout(空);

CP . add(DP);

CP . add(Bt);

CP . add(TF 1);

CP . add(tf2);

CP . add(tf3);

CP . add(tf4);

CP . add(l 1);

CP . add(L2);

CP . add(L3);

CP . add(l4);

l1.setBounds(20,10,20,20);

tf1.setBounds(40,10,20,20);

l2.setBounds(70,10,20,20);

tf2.setBounds(90,10,20,20);

l3.setBounds(120,10,40,20);

tf3.setBounds(160,10,20,20);

l4.setBounds(190,10,60,20);

tf4.setBounds(250,10,20,20);

bt.setBounds(300,10,80,20);

dp.setBounds(20,40,x*w,y * w);

setResizable(false);

setSize(x*w+40,y * w+80);

SetTitle("排雷");

show();

Bt . addactionlistener(this);

addWindowListener(新WindowAdapter()

{公共void窗口關閉(WindowEvent e)

{ system . exit(0);}

}

);

}

公共無效操作已執行(操作事件e)

{

if(e.getSource() == bt)

{

//x = integer . parse int(TF 1 . gettext());

//y = integer . parse int(tf2 . gettext());

//w = integer . parse int(tf3 . gettext());

sum = integer . parse int(tf4 . gettext());

setSize(x*w+40,y * w+80);

dp.setBounds(20,40,x*w,y * w);

show();

dp.initMin(x,y,w,sum);

}

}

公共靜態void main(String args[])

{

新礦();

}

};

  • 上一篇:內存中存放的只有程序代碼
  • 下一篇:如意算命軟件 2010 3.0
  • copyright 2024編程學習大全網