⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lianliankan.java

📁 java小游戏 基础 连连看 普通界面 初学者适用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

import javax.swing.*;

import java.util.*;
public class LianLianKan {
   public static void main(String[] args){
	   /**main method*/
	 //let the player to enter the row and column of the game area********* 玩家输入游戏区域的行数和列数********
	 String sizeString=JOptionPane.showInputDialog(null,"请输入游戏区域大小[m,n](1~20):","连连看--setup",JOptionPane.QUESTION_MESSAGE);
	 StringTokenizer tokenizer=new StringTokenizer(sizeString,",");
	 int row=Integer.parseInt(tokenizer.nextToken());
	 int column=Integer.parseInt(tokenizer.nextToken());
	 //use a circulation to ensure the number of the icons is even;
	 while ((row*column)%2 !=0){
		 JOptionPane.showMessageDialog(null,"输入错误,请保证行数与列数乘积为偶数","连连看--setup",JOptionPane.QUESTION_MESSAGE);
		 sizeString=JOptionPane.showInputDialog(null,"请输入游戏区域大小[m,n](1~20):","连连看--setup",JOptionPane.QUESTION_MESSAGE);
		 tokenizer=new StringTokenizer(sizeString,",");
		 row=Integer.parseInt(tokenizer.nextToken());
		 column=Integer.parseInt(tokenizer.nextToken()); 
	 }
	 
	 //protract the game body ************绘制游戏区域********
     //set an array named 'patten'*********得到patten数组******
     String[][] patten=new String[3][10];
     String pattenString0="☆ ★ ○ ● ◇ ◆ □ ■ △ ▲ ";
     StringTokenizer patten0=new StringTokenizer(pattenString0);
     for (int i=0;i<10;i++){
     	patten[0][i]=patten0.nextToken();
     }
     String pattenString1="① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ";
     StringTokenizer patten1=new StringTokenizer(pattenString1);
     for (int i=0;i<10;i++){
     	patten[1][i]=patten1.nextToken();
     }
     String pattenString2="甲 乙 丙 丁 戊 己 庚 辛 任 癸 ";
     StringTokenizer patten2=new StringTokenizer(pattenString2);
     for (int i=0;i<10;i++){
     	patten[2][i]=patten2.nextToken();
     }    
     /***********begin to protract the game area and do the initialization 开始绘制游戏区域及初始化*/
      	 String[] markS=new String[1];
      	 markS[0]=""+0;
      	 int mark=0;
	  	 int reset=3;
	  	 int hint=5;
	     int error=0;
	     String[] mode={"向右移动","正常","向上移动","向左移动","向下移动"};
	     mark=Integer.parseInt(markS[0]);
	     String[] resetS=new String[1];
	     String[] hintS=new String[1];    	     
	     resetS[0]=""+reset;
	     hintS[0]=""+hint;
	     markS[0]=""+mark;
	     
      for (int state=1;state<=100;state++){
    	  if ((state!=1) && (state %3==1)){
    		  reset=Integer.parseInt(resetS[0]);
    		  reset++;
    		  resetS[0]=""+reset;
    		  hint=Integer.parseInt(hintS[0]);
    		  hint=hint+2;
    		  hintS[0]=""+hint;
    		  String output1="*******************************\n";
    		  output1+=" Well done!!!!\n 每通过3关,作为奖励:\n 重排数加1,提示数加2";
    		  JOptionPane.showMessageDialog(null,output1,"连连看--游戏鼓励",JOptionPane.INFORMATION_MESSAGE);
    	  }
    	  // 用循环来做关数,是每一关的ROW COLUMN 数目各加2,也是变换方式从不变,向上移,向左移,象右移,向下移,循环变换
    	  //initialization**********初始化*******
    	     String[][] playArea=new String[row][column];
    	     int [][] playAreaNumber=new int[row][column];
    	     for (int i=0;i<row;i++){
    	    	 for (int j=0;j<column;j++){
    	    		 playAreaNumber[i][j]=0;
    	    	 }
    	     }
    	     //establish a String[][] named patten to deposit the icons 
    	     //and estabish a int[][] pattenNumber to control the game ******* 创建String类型的二维数组,存储图案。***
    	     int[][] pattenNumber=new int[3][10];
    	     for (int i=0;i<3;i++){
    	    	 for (int j=0;j<10;j++){
    	    		 pattenNumber[i][j]=0;
    	    	 }
    	     }
  
    	       
     
     //use RandomPaintGameBody Class to creat stochastic twin icons ********随机生成成对的图案******
 	 RandomPaintGameBody randomPaintGameBody=new RandomPaintGameBody(row,column,playArea,patten,playAreaNumber,pattenNumber);
 	 //initialization********初始化******
     int x1,y1,x2,y2;
     String coordinateString;
     boolean endCondition=false;
     int count=0;
     /************************************************一关里游戏的循环。直至结束。*/
     while (endCondition==false){//use variable endCondition to judge whether the icons are all deleted
     //use repaint method to protract the game body and evaluate the coordinateString
    	 //****************用与绘出游戏界面,同时给coordinateString赋值******
    	 coordinateString=repaint(state,resetS,hintS,markS,row,column,playArea,playAreaNumber,patten,mode);
    	 reset=Integer.parseInt(resetS[0]);
    	 hint=Integer.parseInt(hintS[0]);
    	 mark=Integer.parseInt(markS[0]);
    	 //use is Continue to judge whether the coordinate match the delete condition****以下判断是不是输入的坐标满足消去的条件。***
    	 	if (isContinue(coordinateString,state,resetS,hintS,markS,row,column,playArea,playAreaNumber,patten)==true){
    	 		StringTokenizer coordinate=new StringTokenizer(coordinateString,",-");
    	 		x1=Integer.parseInt(coordinate.nextToken());
    	 		y1=Integer.parseInt(coordinate.nextToken());
    	 		x2=Integer.parseInt(coordinate.nextToken());
    	 		y2=Integer.parseInt(coordinate.nextToken());
     /** according to the state,different state use the different method of expunction,
               such as steadiness,upwards,downwards,leftwards,rightwards*/
     //*********************************************按照关数,不同关的消去方式不同。有向上向下向左向右等的不同区别。*/
     //*****steadiness不变
     if (state %5==1){
     mark(x1,y1,markS,playArea,patten);
     playArea[x1-1][y1-1]="    ";
     playArea[x2-1][y2-1]="    ";
     playAreaNumber[x1-1][y1-1]=0; count++;
     playAreaNumber[x2-1][y2-1]=0; count++;
     }
     //*******upwards 向上
     if (state %5==2){
    	 mark(x1,y1,markS,playArea,patten);
    	 if (y1 !=y2){
    	 for (int q=x1;q<row;q++){
    		 playArea[q-1][y1-1]=playArea[q][y1-1];
    		 playAreaNumber[q-1][y1-1]=playAreaNumber[q][y1-1];
    	  }
    	 playArea[row-1][y1-1]="    ";
    	 playAreaNumber[row-1][y1-1]=0;count++;
    	 for (int p=x2;p<row;p++){
    		 playArea[p-1][y2-1]=playArea[p][y2-1];
    		 playAreaNumber[p-1][y2-1]=playAreaNumber[p][y2-1];
    	 }
    	 playArea[row-1][y2-1]="    "; 
    	 playAreaNumber[row-1][y2-1]=0;count++;
    	 }
    	 else {
    		 if (x1<x2){
    			 for(int q=x1;q<x2;q++){
    				 playArea[q-1][y1-1]=playArea[q][y1-1];
    				 playAreaNumber[q-1][y1-1]=playAreaNumber[q][y1-1];
    			 }
    			 for(int p=x2;p<row;p++){
    				 playArea[p-2][y2-1]=playArea[p][y2-1];
    				 playAreaNumber[p-2][y2-1]=playAreaNumber[p][y2-1];
    			 }
    			 playArea[row-2][y1-1]="    ";
    			 playAreaNumber[row-2][y1-1]=0;count++;
    			 playArea[row-1][y1-1]="    "; 
    			 playAreaNumber[row-1][y1-1]=0;count++;
    		 }
    		 else if (x1>x2) {
    			 for(int q=x2;q<x1;q++){
    				 playArea[q-1][y2-1]=playArea[q][y2-1];
    				 playAreaNumber[q-1][y2-1]=playAreaNumber[q][y2-1];
    			 }
    			 for(int p=x1;p<row;p++){
    				 playArea[p-2][y1-1]=playArea[p][y1-1];
    				 playAreaNumber[p-2][y1-1]=playAreaNumber[p][y1-1];
    			 }
    			 playArea[row-2][y2-1]="    "; 
    			 playAreaNumber[row-2][y2-1]=0;count++;
    			 playArea[row-1][y2-1]="    "; 
    			 playAreaNumber[row-1][y2-1]=0;count++;
    		 }
    	 }
    	 
     }
     //*******leftwards向左
     if (state %5==3){
    	 mark(x1,y1,markS,playArea,patten);
    	 if (x1 !=x2){
    		 for (int q=y1;q<column;q++){
        		 playArea[x1-1][q-1]=playArea[x1-1][q];
        		 playAreaNumber[x1-1][q-1]=playAreaNumber[x1-1][q];
        	  }
        	 playArea[x1-1][column-1]="    "; 
        	 playAreaNumber[x1-1][column-1]=0;count++;
        	 for (int p=y2;p<column;p++){
        		 playArea[x2-1][p-1]=playArea[x2-1][p];
        		 playAreaNumber[x2-1][p-1]=playAreaNumber[x2-1][p];
        	 }
        	 playArea[x2-1][column-1]="    "; 
        	 playAreaNumber[x2-1][column-1]=0;count++;
        	 }
        	 else {
        		 if (y1<y2){
        			 for(int q=y1;q<y2;q++){
        				 playArea[x1-1][q-1]=playArea[x1-1][q];
        				 playAreaNumber[x1-1][q-1]=playAreaNumber[x1-1][q];
        			 }
        			 for(int p=y2;p<column;p++){
        				 playArea[x2-1][p-2]=playArea[x2-1][p];
        				 playAreaNumber[x2-1][p-2]=playAreaNumber[x2-1][p];
        			 }
        			 playArea[x1-1][column-2]="    "; 
        			 playAreaNumber[x1-1][column-2]=0;count++;
        			 playArea[x1-1][column-1]="    ";
        			 playAreaNumber[x1-1][column-1]=0;count++;
        		 }
        		 else if (y1>y2) {
        			 for(int q=y2;q<y1;q++){
        				 playArea[x2-1][q-1]=playArea[x2-1][q];
        				 playAreaNumber[x2-1][q-1]=playAreaNumber[x2-1][q];
        			 }
        			 for(int p=y1;p<column;p++){
        				 playArea[x1-1][p-2]=playArea[x1-1][p];
        				 playAreaNumber[x1-1][p-2]=playAreaNumber[x1-1][p];
        			 }
        			 playArea[x1-1][column-2]="    "; 
        			 playAreaNumber[x1-1][column-2]=0;count++;
        			 playArea[x1-1][column-1]="    "; 
        			 playAreaNumber[x1-1][column-1]=0;count++;
        		 }
        	 }  		 
    	 }
     //********downwards向下
     if (state %5==4){
    	 mark(x1,y1,markS,playArea,patten);
    	 if (y1 !=y2){
    	 for (int q=x1-1;q>=1;q--){
    		 playArea[q][y1-1]=playArea[q-1][y1-1];
    		 playAreaNumber[q][y1-1]=playAreaNumber[q-1][y1-1];
    	  }
    	 playArea[0][y1-1]="    ";
    	 playAreaNumber[0][y1-1]=0;count++;
    	 for (int p=x2-1;p>=1;p--){
    		 playArea[p][y2-1]=playArea[p-1][y2-1];
    		 playAreaNumber[p][y2-1]=playAreaNumber[p-1][y2-1];
    	 }
    	 playArea[0][y2-1]="    "; 
    	 playAreaNumber[0][y2-1]=0;count++;
    	 }
    	 else {
    		 if (x1>x2){
    			 for(int q=x1-1;q>x2;q--){
    				 playArea[q][y1-1]=playArea[q-1][y1-1];
    				 playAreaNumber[q][y1-1]=playAreaNumber[q-1][y1-1];
    			 }
    			 for(int p=x2;p>=2;p--){
    				 playArea[p][y2-1]=playArea[p-2][y2-1];
    				 playAreaNumber[p][y2-1]=playAreaNumber[p-2][y2-1];
    			 }
    			 playArea[0][y1-1]="    ";
    			 playAreaNumber[0][y1-1]=0;count++;
    			 playArea[1][y1-1]="    "; 
    			 playAreaNumber[1][y1-1]=0;count++;
    		 }
    		 else if (x1<x2) {
    			 for(int q=x2-1;q>x1;q--){
    				 playArea[q][y2-1]=playArea[q-1][y2-1];
    				 playAreaNumber[q][y2-1]=playAreaNumber[q-1][y2-1];
    			 }
    			 for(int p=x1;p>=2;p--){
    				 playArea[p][y1-1]=playArea[p-2][y1-1];
    				 playAreaNumber[p][y1-1]=playAreaNumber[p-2][y1-1];
    			 }
    			 playArea[0][y2-1]="    "; 
    			 playAreaNumber[0][y2-1]=0;count++;
    			 playArea[1][y2-1]="    "; 
    			 playAreaNumber[1][y2-1]=0;count++;
    		 }
    	 }
    	 
     }
     //*****************rightwards向右的。
     if (state %5==0){
    	 mark(x1,y1,markS,playArea,patten);
    	 if (x1 !=x2){
    		 for (int q=y1-1;q>=1;q--){
        		 playArea[x1-1][q]=playArea[x1-1][q-1];
        		 playAreaNumber[x1-1][q]=playAreaNumber[x1-1][q-1];
        	  }
        	 playArea[x1-1][0]="    "; 
        	 playAreaNumber[x1-1][0]=0;count++;
        	 for (int p=y2-1;p>=1;p--){
        		 playArea[x2-1][p]=playArea[x2-1][p-1];
        		 playAreaNumber[x2-1][p]=playAreaNumber[x2-1][p-1];
        	 }
        	 playArea[x2-1][0]="    "; 
        	 playAreaNumber[x2-1][0]=0;count++;
        	 }
        	 else {
        		 if (y1<y2){
        			 for(int q=y2-1;q>y1-1;q--){
        				 playArea[x1-1][q]=playArea[x1-1][q-1];
        				 playAreaNumber[x1-1][q]=playAreaNumber[x1-1][q-1];
        			 }
        			 for(int p=y1;p>=2;p--){
        				 playArea[x2-1][p]=playArea[x2-1][p-2];
        				 playAreaNumber[x2-1][p]=playAreaNumber[x2-1][p-2];
        			 }
        			 playArea[x1-1][0]="    "; 
        			 playAreaNumber[x1-1][0]=0;count++;
        			 playArea[x1-1][1]="    ";
        			 playAreaNumber[x1-1][1]=0;count++;
        		 }
        		 else if (y1>y2) {
        			 for(int q=y1-1;q>y2-1;q--){
        				 playArea[x1-1][q]=playArea[x1-1][q-1];
        				 playAreaNumber[x1-1][q]=playAreaNumber[x1-1][q-1];
        			 }
        			 for(int p=y2;p>=2;p--){
        				 playArea[x2-1][p]=playArea[x2-1][p-2];
        				 playAreaNumber[x2-1][p]=playAreaNumber[x2-1][p-2];
        			 }
        			 playArea[x1-1][0]="    "; 
        			 playAreaNumber[x1-1][0]=0;count++;
        			 playArea[x1-1][1]="    ";
        			 playAreaNumber[x1-1][1]=0;count++;
        		 }
        	 }   		 
    	 }   
     //when the icons are all deleted.
     if (count==row*column){
    	 endCondition=true;
    	 JOptionPane.showMessageDialog(null,"恭喜你通过"+state+"关!^_^\n准备进入第"+(state+1)+"关.......","连连看--过关",JOptionPane.INFORMATION_MESSAGE);
    	 row=row+2;
    	 column=column+2;
    	 	}
     	}
     }
     }
   }  
   //*****************************************************************
   //****************************************************************
   /**other methods*/
   //*********************************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -