本章,我将给大家展示并解析我所做的简易五子棋游戏。
首先,要做一个五子棋游戏,我们要列出流程是什么:
1.首先,我们需要创建一个棋盘,这里我用了二维数组来创建棋盘。
2.棋盘创建好了以后,就可以在棋盘上下棋了,所以,第二步开始游戏,黑白双方开始下棋。
3.在每一步棋下完以后进行判断,是否有五个棋子连一起。
4.如果某一方胜利,询问用户是否继续比赛。
流程分析好了以后,接下来咱们就要分析如何设计程序了:
1.首先,先将我们经常使用的常量或变量定义为全局变量,这样方便函数调用,不用给函数传参。
public static String[][] board; //棋盘
public static String BLACK_CHESS="O"; //黑棋为 O
public static String WHITE_CHESS="X"; //白棋为 X
public static int count=0; //count来判断是黑方下棋还是白方下棋
public static Scanner scanner=new Scanner(System.in);//用来输入下棋的位置
主函数:
public static void main(String[] args){
initBoard(); //初始化棋盘
printBoard(); //打印棋盘
startGame(); //开始游戏
isReplay();
}
2.创建棋盘。这里我定义了一个二维数组,并且给数组的每行每列定义了标识,以便用户方面下棋。
public static void initBoard(){
board=new String[16][16];
for(int i=0;i<=15;i++){
for(int j=0;j<=15;j++){
board[i][j]="+";
}
}
}
3.定义一个打印棋盘的函数,方便我们观察棋盘。
public static void printBoard(){
//输出的列提示,用字母提示
System.out.print(" ");
for(int i=0;i<board[0].length;i++){
System.out.print((char)('A'+i)+" ");
}
System.out.println();
for(int i=0;i<=15;i++){
//输入的行提示,用字母提示
System.out.print((char)('A'+i)+" ");
for(int j=0;j<=15;j++){
System.out.print(board[i][j]+" ");
}
System.out.println();
}
4.棋盘创建好了,游戏开始。
public static void startGame(){
while(true){
//开始下棋
if(count%2==0){
System.out.print("请黑方下棋:");
putDownChess(BLACK_CHESS);
}else{
System.out.print("请白方下棋:");
putDownChess(WHITE_CHESS);
}
//判断是否结束
if(isWin()){
System.out.println( (count%2==0 ? "白方" : "黑方") + "胜利!");
break;
}
}
}
5.接下来,我们来定义下棋的函数。
public static void putDownChess(String s){
int x=scanner.next().charAt(0)-'A'; //用户输入A-P
int y=scanner.next().charAt(0)-'A';
if(board[x][y]!="+"){
return;
}
if(s==BLACK_CHESS){
board[x][y]="O";
count++;
}else{
board[x][y]="X";
count++;
}
printBoard();
}
6.接下来,我们就需要定义一个函数,判断是否结束游戏。
public static boolean isWin(){
for(int i=0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
//判断右边
if(j<=board.length-5&&board[i][j]!="+"){
boolean flag=true;
for(int r=j+1;r<=j+4;r++){
if(board[i][j]!=board[i][r]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
//判断下边
if(i<=board.length-5&&board[i][j]!="+"){
boolean flag=true;
for(int c=i+1;c<=i+4;c++){
if(board[i][j]!=board[c][j]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
//判断右下
if(j<=board.length-5&&i<=board.length-5&&board[i][j]!="+"){
boolean flag=true;
for(int r=j+1,c=i+1;r<=j+4;r++,c++){
if(board[i][j]!=board[c][r]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
//判断右上
if(i>=4&&j<=board.length-5&&board[i][j]!="+"){
boolean flag=true;
for(int c=i-1,r=j+1;r<=j+4;r++,c++){
if(board[i][j]!=board[c][r]){
flag=false;
break;
}
}
if(flag){
return true;
}
}
}
}
return false;
}
7.判断是否和局。
public static boolean peace(){
boolean pe=true;
for(int i=0;i<board.length;i++){
for(int j=0;j<board[i].length;j++){
if(board[i][j]=="+"){
pe=false;
}
}
}
return pe;
}
8.询问用户是否再来一局。
public static void isReplay(){
while(true){
System.out.print("Do you want to play again?Please enter true or false:");
boolean re=scanner.nextBoolean();
if(re){
initBoard();
printBoard();
startGame();
}else{
System.out.println("Bye! Bye!");
return;
}
}
}
我所做的五子棋游戏可能还有一些地方不够好,希望大家提出一些好的建议。