📄 lianliankan.java
字号:
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 + -