華容道 ( java)


          java老師布置這華容道的題,大概有兩個多禮拜了,上機的時候,一班的同學做出來了,心里感覺很...  所以清明回家,就研究了研究。因為以前上過c++的選修課,所以對類的什么有那么一點點了解,對java也不熟悉,反正就這么用eclipse做出來了,哪里做的不好了,希望能指正。

         華容道:

         大體思路說一下:有個people類,和棋盤類,棋盤上將每個人名放好,然后根據移動規則來移動,當曹操移到下面就贏了。

         people類:

package people;

import java.util.Scanner;

public class people {
String name;
int state;//狀態,在移動時候將狀態一樣的一塊移動
people(String c,int s)   //構造函數
{
this.name=c;
state=s;

}
static void JudgeName(String name)  //判斷名字是否輸入正確
{
int a=1;
while(a==1)
{
switch(name)
{
case"曹操":a=0;break;
case"張飛":a=0;break;
case"趙雲":a=0;break;
case"黃忠":a=0;break;
case"關羽":a=0;break;
case"馬超":a=0;break;
case"兵":a=0;break;
case"士":a=0;break;
case"衛":a=0;break;
case"卒":a=0;break;
default:
{
System.out.println("名字輸入錯誤,請重新輸入:");
Scanner reader= new Scanner(System.in);
name=reader.next();
JudgeName(name);
reader.close();
}
}
}
}
}

chessboard類:

package people;

public class Chessboard {

people[][] Board=new people[4][5]; //申請了一個people類型的棋盤
Chessboard()
{
Board[1][4]=new people("曹",0);
Board[2][4]=new people("操",0);
Board[0][4]=new people("趙",1);
Board[0][3]=new people("雲",1);
Board[0][2]=new people("黃",2);
Board[0][1]=new people("忠",2);
Board[0][0]=new people("兵",3);
Board[1][2]=new people("馬",4);
Board[2][2]=new people("超",4);
Board[1][1]=new people("衛",5);
Board[2][1]=new people("士",6);
Board[3][4]=new people("關",7);
Board[3][3]=new people("羽",7);
Board[3][2]=new people("張",8);
Board[3][1]=new people("飛",8);
Board[3][0]=new people("卒",9);
Board[1][3]=new people(" ",10);
Board[2][3]=new people(" ",11);
Board[1][0]=new people(" ",12);
Board[2][0]=new people(" ",13);

}
void print()//輸出
{
for(int j=4;j>=0;j--)
{ for(int i=0;i<4;i++)
{ System.out.printf(" "+Board[i][j].name);
}
System.out.println();
}
System.out.println();
}

boolean win() //贏得條件
{
if(Board[1][1].name=="曹"&&Board[2][1].name=="操")
{
return true;
}
else return false;

}
boolean judgemove(int i,int j,String dir)//判斷是否符合移動的條件
{
switch(dir){
case"左":
{ if(i<0||i>4||j<0||j>5||Board[i-1][j].name==" ")
{
return false;
}
else
return true;}


case"右":{ if(i<0||i>4||j<0||j>5||Board[i+1][j].name==" ")
{
return false;
}
else
return true;}
case"上":
{ if(i<0||i>4||j<0||j>5||Board[i][j+1].name==" ")
{
return false;
}
else
return true;}
case"下":
{ if(i<0||i>4||j<0||j>5||Board[i][j-1].name==" ")
{
return false;
}
else
return true;}
}

return false;


}
boolean move(String dir,int i,int j)//判斷是否能移動
{
switch(dir)
{
case "左":if(judgemove(i,j,dir))
{
return false;
}
else
{
Board[i-1][j].name=Board[i][j].name;
Board[i][j].name=" ";
return true;
}
case "右":if(judgemove(i,j,dir))
{
return false;
}
else
{
Board[i+1][j].name=Board[i][j].name;
Board[i][j].name=" ";
return true;
}
case "上":if(judgemove(i,j,dir))
{
return false;

}
else
{ Board[i][j+1].name=Board[i][j].name;
Board[i][j].name=" ";
return true;
}
case "下":if(judgemove(i,j,dir))
{
return false;

}
else
{
Board[i][j-1].name=Board[i][j].name;
Board[i][j].name=" ";
return true;
}
default:return false;
}
}
void findname(String name1,String name2,String dir)//在棋盤里找出要移動的棋子且名字不是一個字
{

loop: for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
if(Board[i][j].name.equals(name1))
{

for(int m=0;m<4;m++)
{
for(int k=0;k<5;k++)
{
if(Board[m][k].name.equals(name2))
{

if(Board[i][j].state==Board[i][j-1].state&&Board[i][j].state!=Board[i+1][j-1].state)
{ if( move(dir,m,k)&& move(dir,i,j))
;
else System.out.println("不能移動");
}
if(Board[i][j].name=="曹"&&Board[i+1][j].name=="操")

if( move(dir,i,j-1)&&move(dir,i,j)&&move(dir,i+1,j-1)&&move(dir,i+1,j))
;
else System.out.println("不能移動");
}
else
{
if( move(dir,i,j)&& move(dir,m,k))
;

}
break loop;
}
}
}
}
}
}
}
void findname1(String name1,String dir)//當名字只有一個字的時候移動的情況
{
loop1: for(int i=0;i<4;i++)
{
for(int j=0;j<5;j++)
{
if(Board[i][j].name.equals(name1))
{
move(dir,i,j);
break loop1;
}
}
}
}
}
主類:

package people;

import java.util.Scanner;


public class Mainpro {
public static void main(String[] args)
{
Chessboard Board=new Chessboard();
Board.print();
while(!Board.win())
{
System.out.println("請輸入你要移動人物");
Scanner reader = new Scanner(System.in);
String name=reader.next();
people.JudgeName(name);
if(name.length()==2)
{ String name1=name.substring(0,1);
String name2=name.substring(1,2);
System.out.println("請輸入你要移動方向");
String a=reader.next();
Board.findname(name1,name2,a);
}
else
{
String name1=name.substring(0,1);
System.out.println("請輸入你要移動方向");
String a=reader.next();
Board.findname1(name1,a);
}
Board.print();
}
}
}

 運行結果:

 


                                                                                                                                                                    20150405

                                                                                                                                                                    by:暖暖要堅持


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM