?? 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********* 玩家輸入游戲區(qū)域的行數和列數********
String sizeString=JOptionPane.showInputDialog(null,"請輸入游戲區(qū)域大小[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,"請輸入游戲區(qū)域大小[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 ************繪制游戲區(qū)域********
//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 開始繪制游戲區(qū)域及初始化*/
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);
}
// 用循環(huán)來做關數,是每一關的ROW COLUMN 數目各加2,也是變換方式從不變,向上移,向左移,象右移,向下移,循環(huán)變換
//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 ******* 創(chuàng)建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;
/************************************************一關里游戲的循環(huán)。直至結束。*/
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*/
//*********************************************按照關數,不同關的消去方式不同。有向上向下向左向右等的不同區(qū)別。*/
//*****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 + -