用Java實現(xiàn)連連看小游戲_第1頁
用Java實現(xiàn)連連看小游戲_第2頁
用Java實現(xiàn)連連看小游戲_第3頁
用Java實現(xiàn)連連看小游戲_第4頁
用Java實現(xiàn)連連看小游戲_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第用Java實現(xiàn)連連看小游戲很多人寫游戲都是從連連看或者五子棋這類的簡單小游戲入手的,最近我也嘗試著寫了一個連連看,想要再梳理一遍其中的思路。

連連看的規(guī)則

連連看要求在一定范圍內(nèi)找到兩個特征一樣并且能夠通過空白的通道在兩折(直角)以內(nèi)相連的東西,連續(xù)點擊兩個東西之后消除。

通常我們會選擇用圖片來進行匹配,這樣更直觀有趣。

如何存儲連連看的數(shù)據(jù)

使用二維數(shù)組進行存儲,每一個數(shù)組元素對應一個位置上的圖片種類。

例如我們分別用1,2,3,4代表四個不同的圖片,用0代表沒有圖片;那么二維數(shù)組{{},{},{},{}}就相應地存儲對應位置的數(shù)據(jù)。如果要對圖片進行變更(連連看中的消除),那么只需要改變該位置對應的數(shù)組元素的值就行了(在這個例子中,消除就改為0)。

如何實現(xiàn)數(shù)組數(shù)據(jù)的初始化

1、一般來說連連看開始都會隨機生成圖片,此處的隨機生成需要用到Random類里面的nextInt方法,能隨機生成給定范圍內(nèi)的隨機一個整數(shù)。

2、我們生成數(shù)組的時候要考慮一個問題:連連看相同的圖片個數(shù)是偶數(shù),這樣才不會到最后形成落單的尷尬局面。

//隨機給出數(shù)組值,初始化游戲數(shù)據(jù)

publicint[][]DATA(int[][]data){

int[][]d=data;

Randomrandom=newRandom();

for(inti=0;ii++){

d[0][i]=0;

d[7][i]=0;

}

for(inti=1;ii++){

d[i][0]=0;

d[i][7]=0;

}

for(inti=0;ii++){

intm=random.nextInt(Const.Const_TYPECOUNNT)+1;

intx1=random.nextInt(Const.COL)+1;

inty1=random.nextInt(Const.COL)+1;

while(d[x1][y1]!=0){

x1=random.nextInt(Const.COL)+1;

y1=random.nextInt(Const.COL)+1;

}

d[x1][y1]=m;

intx2=random.nextInt(Const.COL)+1;

inty2=random.nextInt(Const.COL)+1;

while(d[x2][y2]!=0){

x2=random.nextInt(Const.COL)+1;

y2=random.nextInt(Const.COL)+1;

}

d[x2][y2]=m;

}

return(d);

}

如何繪制圖片

連連看的存儲都是以int的類型存儲的,可我們要呈現(xiàn)出來的效果是一張一張的圖片

先用Image導入所有圖片,最好圖片的命名能夠用數(shù)字命名,這樣就可以批量導入了。這里就不過多贅述了,看實例代碼吧:

publicvoidinit(){

imgArr=newImage[Const.Const_TYPECOUNNT];

for(inti=0;iimgArr.length;i++){

imgArr[i]=newImageIcon("llkImage/"+i+".jpg").getImage();

}

}

關于圖片大小的調(diào)整我用的是比較原始的方法:編輯圖片本身像素大小;還可以通過drawImage來直接規(guī)定大小。

沒有重繪的窗體在我們對其進行拖動或者最小化等改變的時候會變成空白的,重繪就是將窗體的paint方法重寫,這樣對窗體的任何操作都會將paint方法重新寫一遍。也就是在屏幕上重新畫一遍。

我們的棋子都存在一個二維數(shù)組里面,那么我們就可以將棋子繪制的步驟放在重繪里面來實現(xiàn),那么棋子就跟窗體一樣,可以一直存在了,也可以根據(jù)數(shù)組的改變來改變。

代碼示例:

publicvoidpaint(Graphicsg){

//重繪paint方法

super.paint(g);

//

for(inti=1;iConst.COL+1;i++){

for(intj=1;jConst.ROW+1;j++){

if(data[i][j]==0){

g.setColor(newColor(69,175,198));

g.fillRect(Const.START_X+i*Const.SIZE,Const.START_Y+j*Const.SIZE,Const.SIZE,Const.SIZE);

}

else{

g.drawImage(imgArr[data[i][j]-1],Const.START_X+i*Const.SIZE,Const.START_Y+j*Const.SIZE,null);

}

}

}

連連看的實現(xiàn)算法

兩個圖片消除的方法有三種:

1.直線連接

2.一折連接

3.二折連接

其中二折連接可以找一個點既與其中一個圖片一折連接又與另一個圖片直線連接;一折連接又可以找一個點與其中一個圖片直線連接又與另一個圖片直線連接。

所以綜上所述,只需要寫出一個直線連接的判斷方法,我們所有的規(guī)則方法就都可以實現(xiàn)了。

數(shù)組的元素=0時代表這里的圖片為空,有路可走。

首先,兩個數(shù)組元素直線相連的前提是這兩個元素的橫坐標或者縱坐標相等且路徑上的數(shù)組元素全部為零。

代碼示例:

//0折點的方法

publicbooleanzero(int[][]data,intX1,intY1,intX2,intY2){

intmax;

intmin;

//x值相等

if(X1==X2){

max=Y1Y2Y1:Y2;

min=Y1Y2Y1:Y2;

for(inti=min+1;ii++){

if(data[X1][i]!=0){

returnfalse;

}

}

returntrue;

}

//y值相等

elseif(Y1==Y2){

max=X1X2X1:X2;

min=X1X2X1:X2;

for(inti=min+1;ii++){

if(data[i][Y1]!=0){

returnfalse;

}

}

returntrue;

}

elsereturnfalse;

}

//1折點的方法

publicbooleanone(int[][]data,intX1,intY1,intX2,intY2){

if((zero(data,X1,Y1,X1,Y2)zero(data,X1,Y2,X2,Y2)data[X1][Y2]==0)||(data[X2][Y1]==0zero(data,X1,Y1,X2,Y1)zero(data,X2,Y1,X2,Y2))){

returntrue;

}

returnfalse;

}

//2折點的方法

publicbooleantwo(int[][]data,intX1,intY1,intX2,intY2){

//向下尋找一個第一折點

for(inti=X1+1;i=Const.COL+1;i++){

if(zero(data,X1,Y1,i,Y1)one(data,i,Y1,X2,Y2)){

returntrue;

}

}

//向上尋找一個第一折點

for(inti=X1-1;ii--){

if(zero(data,X1,Y1,i,Y1)one(data,i,Y1,X2,Y2)){

returntrue;

}

}

//向左

for(inti=Y1-1;ii--){

if(zero(data,X1,Y1,X1,i)one(data,X1,i,X2,Y2)){

returntrue;

}

}

//向右

for(inti=Y1+1;i=Const.ROW+1;i++){

if(zero(data,X1,Y1,X1,i)one(data,X1,i,X2,Y2)){

returntrue;

}

}

returnfalse;

}

如何獲取兩次鼠標點擊的位置

廢話不多說,直接上代碼:

//鼠標點擊松開事件

publicvoidmouseReleased(MouseEvente){

intx,y;

Rulerule=newRule();

x=e.getX();

y=e.getY();

if(count%2==0){

X1=(x-Const.START_X)/Const.SIZE;

Y1=(y-Const.START_Y)/Const.SIZE;

count++;

}

else{

X2=(x-Const.START_X)/Const.SIZE;

Y2=(y-Const.START_Y)/Const.SIZE;

count++;

if(rule.judge(X1,Y1,X2,Y2,data)

(rule.zero(data,X1,Y1,X

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論