java基于swing实现的连连看代码
本文实例讲述了java基于swing实现连连看代码。分享给大家供大家参考。
主要功能代码如下:
packagellkan;
importjavax.swing.*; importjava.awt.*; importjava.awt.event.*; /** *连连看游戏 *@authorAdministrator *2014年10月17日 */ publicclassMainGameimplementsActionListener{ JFramemainFrame;//主面板 ContainerthisContainer; JPanelcenterPanel,southPanel,northPanel;//子面板 JButtondiamondsButton[][]=newJButton[6][5];//游戏按钮数组 JButtonexitButton,resetButton,newlyButton;//退出,重列,重新开始按钮 JLabelfractionLable=newJLabel("0");//分数标签 JButtonfirstButton,secondButton;//分别记录两次被选中的按钮 intgrid[][]=newint[8][7];//储存游戏按钮位置 staticbooleanpressInformation=false;//判断是否有按钮被选中 intx0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV;//游戏按钮的位置坐标 inti,j,k,n;//消除方法控制
publicvoidinit(){ mainFrame=newJFrame("连连看游戏"); thisContainer=mainFrame.getContentPane(); thisContainer.setLayout(newBorderLayout()); centerPanel=newJPanel(); southPanel=newJPanel(); northPanel=newJPanel(); thisContainer.add(centerPanel,"Center"); thisContainer.add(southPanel,"South"); thisContainer.add(northPanel,"North"); centerPanel.setLayout(newGridLayout(6,5)); for(intcols=0;cols<6;cols++){ for(introws=0;rows<5;rows++){ diamondsButton[cols][rows]=newJButton( String.valueOf(grid[cols+1][rows+1])); diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } } exitButton=newJButton("退出"); exitButton.addActionListener(this); resetButton=newJButton("重列"); resetButton.addActionListener(this); newlyButton=newJButton("再来一局"); newlyButton.addActionListener(this); southPanel.add(exitButton); southPanel.add(resetButton); southPanel.add(newlyButton); fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable .getText()))); northPanel.add(fractionLable); mainFrame.setBounds(280,100,500,450); mainFrame.setVisible(true); }
publicvoidrandomBuild(){ intrandoms,cols,rows; for(inttwins=1;twins<=15;twins++){ randoms=(int)(Math.random()*25+1); for(intalike=1;alike<=2;alike++){ cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); while(grid[cols][rows]!=0){ cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); } this.grid[cols][rows]=randoms; } } }
publicvoidfraction(){ fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable .getText())+100)); }
publicvoidreload(){ intsave[]=newint[30]; intn=0,cols,rows; intgrid[][]=newint[8][7]; for(inti=0;i<=6;i++){ for(intj=0;j<=5;j++){ if(this.grid[i][j]!=0){ save[n]=this.grid[i][j]; n++; } } } n=n-1; this.grid=grid; while(n>=0){ cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); while(grid[cols][rows]!=0){ cols=(int)(Math.random()*6+1); rows=(int)(Math.random()*5+1); } this.grid[cols][rows]=save[n]; n--; } mainFrame.setVisible(false); pressInformation=false;//这里一定要将按钮点击信息归为初始 init(); for(inti=0;i<6;i++){ for(intj=0;j<5;j++){ if(grid[i+1][j+1]==0) diamondsButton[i][j].setVisible(false); } } }
publicvoidestimateEven(intplaceX,intplaceY,JButtonbz){ if(pressInformation==false){ x=placeX; y=placeY; secondMsg=grid[x][y]; secondButton=bz; pressInformation=true; }else{ x0=x; y0=y; fristMsg=secondMsg; firstButton=secondButton; x=placeX; y=placeY; secondMsg=grid[x][y]; secondButton=bz; if(fristMsg==secondMsg&&secondButton!=firstButton){ xiao(); } } }
publicvoidxiao(){//相同的情况下能不能消去。仔细分析,不一条条注释 if((x0==x&&(y0==y+1||y0==y-1)) ||((x0==x+1||x0==x-1)&&(y0==y))){//判断是否相邻 remove(); }else{ for(j=0;j<7;j++){ if(grid[x0][j]==0){//判断第一个按钮同行哪个按钮为空 if(y>j){//如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边 for(i=y-1;i>=j;i--){//判断第二按钮左侧直到第一按钮中间有没有按钮 if(grid[x][i]!=0){ k=0; break; }else{ k=1; }//K=1说明通过了第一次验证 } if(k==1){ linePassOne(); } } if(y<j){//如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边 for(i=y+1;i<=j;i++){//判断第二按钮左侧直到第一按钮中间有没有按钮 if(grid[x][i]!=0){ k=0; break; }else{ k=1; } } if(k==1){ linePassOne(); } } if(y==j){ linePassOne(); } } if(k==2){ if(x0==x){ remove(); } if(x0<x){ for(n=x0;n<=x-1;n++){ if(grid[n][j]!=0){ k=0; break; } if(grid[n][j]==0&&n==x-1){ remove(); } } } if(x0>x){ for(n=x0;n>=x+1;n--){ if(grid[n][j]!=0){ k=0; break; } if(grid[n][j]==0&&n==x+1){ remove(); } } } } } for(i=0;i<8;i++){//列 if(grid[i][y0]==0){ if(x>i){ for(j=x-1;j>=i;j--){ if(grid[j][y]!=0){ k=0; break; }else{ k=1; } } if(k==1){ rowPassOne(); } } if(x<i){ for(j=x+1;j<=i;j++){ if(grid[j][y]!=0){ k=0; break; }else{ k=1; } } if(k==1){ rowPassOne(); } } if(x==i){ rowPassOne(); } } if(k==2){ if(y0==y){ remove(); } if(y0<y){ for(n=y0;n<=y-1;n++){ if(grid[i][n]!=0){ k=0; break; } if(grid[i][n]==0&&n==y-1){ remove(); } } } if(y0>y){ for(n=y0;n>=y+1;n--){ if(grid[i][n]!=0){ k=0; break; } if(grid[i][n]==0&&n==y+1){ remove(); } } } } } } }
publicvoidlinePassOne(){ if(y0>j){//第一按钮同行空按钮在左边 for(i=y0-1;i>=j;i--){//判断第一按钮同左侧空按钮之间有没按钮 if(grid[x0][i]!=0){ k=0; break; }else{ k=2; }//K=2说明通过了第二次验证 } } if(y0<j){//第一按钮同行空按钮在与第二按钮之间 for(i=y0+1;i<=j;i++){ if(grid[x0][i]!=0){ k=0; break; }else{ k=2; } } } }
publicvoidrowPassOne(){ if(x0>i){ for(j=x0-1;j>=i;j--){ if(grid[j][y0]!=0){ k=0; break; }else{ k=2; } } } if(x0<i){ for(j=x0+1;j<=i;j++){ if(grid[j][y0]!=0){ k=0; break; }else{ k=2; } } } }
publicvoidremove(){ firstButton.setVisible(false); secondButton.setVisible(false); fraction(); pressInformation=false; k=0; grid[x0][y0]=0; grid[x][y]=0; }
publicvoidactionPerformed(ActionEvente){ &n