模拟游戏
模拟井字棋游戏
九个格子中双方轮流落子。
其中一方画x符号,另一方画o符号。
开始时,9个格子都是空的。
程序显示当前局面,提示某一方输入落子位置,然后显示局面,再提示另一方。
当某方棋子连成直线,该方获胜!
例如:
初始:
_ _ _
_ _ _
_ _ _
o 输入位置: 1,1
o _ _
_ _ _
_ _ _
x 输入位置: 2,2
o _ _
_ x _
_ _ _
当某一方出现了3个棋子连成直线或对角线,则该方获胜
标准答案:
import java.util.*; class MyChess { private char[][] data; // 棋局 private boolean side; // 轮到哪方走棋 true: o方,false: x方 private static Scanner scan = new Scanner(System.in); public MyChess() { data = new char[3][3]; side = true; } public void show() { for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { if(data[i][j]==0) System.out.print(‘_‘); else System.out.print(data[i][j]); System.out.print(" "); } System.out.println(); } } public boolean isEnd() { //检查是否已经分出胜负 if(judge()>0) return true; // 检查是否还能走下去 for(int i=0; i<3; i++) for(int j=0; j<3; j++) { if(data[i][j]==0) return false; } return true; } // 胜负裁判 private int judge() { // 检测横线 for(int k=0; k<3; k++) { if(data[k][0] == data[k][1] && data[k][0] == data[k][2]) { if(data[k][0]==‘o‘) return 1; // o 方胜利 if(data[k][0]==‘x‘) return 2; // x 方胜利 } } // 检测竖线 for(int k=0; k<3; k++) { if(data[0][k] == data[1][k] && data[0][k] == data[2][k]) { if(data[0][k]==‘o‘) return 1; // o 方胜利 if(data[0][k]==‘x‘) return 2; // x 方胜利 } } // 检查斜线 if(data[0][0]==data[1][1] && data[0][0]==data[2][2]) { if(data[0][0]==‘o‘) return 1; // o 方胜利 if(data[0][0]==‘x‘) return 2; // x 方胜利 } if(data[0][2]==data[1][1] && data[0][2]==data[2][0]) { if(data[0][2]==‘o‘) return 1; // o 方胜利 if(data[0][2]==‘x‘) return 2; // x 方胜利 } return 0; } // 显示比赛结果 public void showResult() { switch(judge()) { case 0: System.out.println("平局!"); break; case 1: System.out.println(" o 方胜利!"); break; case 2: System.out.println(" x 方胜利!"); break; } } public void play() { for(;;) { char side_char = side? ‘o‘ : ‘x‘; System.out.print( " " + side_char + " 请输入棋子位置(行,列):"); String s = scan.nextLine(); try { String[] ss = s.split(","); int row = Integer.parseInt(ss[0])-1; // 行号 int col = Integer.parseInt(ss[1])-1; // 列号 if(data[row][col]!=0) continue; // 该位置已经有棋子 data[row][col] = side_char; // 记录落子 side = !side; break; } catch(Exception e) { } } } } public class MyTest { public static void main(String[] args) { // o x 填充游戏 /* 初始: _ _ _ _ _ _ _ _ _ o 输入位置: 1,1 o _ _ _ _ _ _ _ _ x 输入位置: 2,2 o _ _ _ x _ _ _ _ 当某一方出现了3个棋子连成直线或对角线,则该方获胜 */ MyChess a = new MyChess(); for(;;) { a.show(); // 显示局面 if(a.isEnd()) { a.showResult(); break; } a.play(); // 继续走棋 } } }
03-02自底向上风格_模拟游戏,布布扣,bubuko.com
原文:http://blog.csdn.net/u012897654/article/details/24890487