是弱逼综合症。
1 package TicTacToe; 2 3 /**Name: TicTacToe 4 * Author: mlxy 5 * Date: 2013-11-14 6 * Version: 0.9 7 * Memo: 异常检查没做,落子的时候超范围就报错。 8 * 电脑的AI没做,基本上三个子就能赢。 9 */ 10 11 import java.util.Scanner; 12 import java.util.Random; 13 14 public class Run { 15 16 // 数组输入和随机三个必需对象。 17 static Scanner input = new Scanner(System.in); 18 String[] panel = new String[9]; 19 Random generator = new Random(); 20 21 void drawPanel() { 22 // 读取成员变量panel来绘制棋盘。 23 24 System.out.println(panel[0] + " " + panel[1] + " " + panel[2]); 25 System.out.println(panel[3] + " " + panel[4] + " " + panel[5]); 26 System.out.println(panel[6] + " " + panel[7] + " " + panel[8]); 27 } 28 29 int playerMove(int i) { 30 // 玩家落子。简单检查格子是否已经被占用。 31 32 if (panel[i-1] == "○" || panel[i-1] == "×") { 33 System.out.println("有子。"); 34 return 0; 35 } else { 36 panel[i-1] = "○"; 37 return 1; 38 } 39 } 40 41 void comMove() { 42 // 电脑落子。随机生成0-8的整数来落子,如果已经有子就continue掉重新生成。 43 44 while (true) { 45 int location = generator.nextInt(9); 46 if (panel[location] == "○" || panel[location] == "×") { 47 continue; 48 } else { 49 panel[location] = "×"; 50 break; 51 } 52 } 53 } 54 55 int checkWin() { 56 // 虽然判断还是这么逗比,但是比之前好看多啦。 57 58 if ((panel[0] == panel[1] & panel[1]== panel[2] & panel[0] != "□") || 59 (panel[3] == panel[4] & panel[4]== panel[5] & panel[3] != "□") || 60 (panel[6] == panel[7] & panel[7]== panel[8] & panel[6] != "□") || 61 (panel[0] == panel[3] & panel[3]== panel[6] & panel[0] != "□") || 62 (panel[1] == panel[4] & panel[4]== panel[7] & panel[1] != "□") || 63 (panel[2] == panel[5] & panel[5]== panel[8] & panel[2] != "□") || 64 (panel[0] == panel[4] & panel[4]== panel[8] & panel[0] != "□") || 65 (panel[2] == panel[4] & panel[4]== panel[6] & panel[2] != "□")) { 66 return 1; 67 } else { 68 return 0; 69 } 70 } 71 72 int checkFull() { 73 // 检查棋盘是否已经被占满。 74 // 迭代棋盘内容,如果有空格子就立刻返回0。 75 76 for (int i=0; i<9; i++) { 77 if (panel[i] == "□") { 78 return 0; 79 } 80 } 81 return 1; 82 } 83 84 85 public static void main(String[] args) { 86 87 Run game = new Run(); // 88 for (int i=0; i<9; i++) { // 创建新对象并初始化棋盘内容。 89 game.panel[i] = "□"; // 90 } 91 game.drawPanel(); // 绘制棋盘。 92 93 while (true) { 94 System.out.print(" 落子(1-9):"); // 95 int playermove = input.nextInt(); // 96 if (game.playerMove(playermove) == 0) { // 获取玩家输入并检查是否已落子后重绘棋盘。 97 continue; // 98 } // 99 game.drawPanel(); // 100 101 if (game.checkWin() == 1) { // 102 System.out.println("你赢。"); // 103 break; // 进行玩家胜负判断。 104 } else if (game.checkFull() == 1) { // 105 System.out.println("平局。"); // 106 } 107 108 System.out.println(" 电脑:"); // 109 game.comMove(); // 电脑落子并重绘棋盘。 110 game.drawPanel(); // 111 112 if (game.checkWin() == 1) { // 113 System.out.println("你输。"); // 114 break; // 进行电脑胜负判断。 115 } else if (game.checkFull() == 1) { // 116 System.out.println("平局。"); // 117 } 118 } 119 } 120 }
目前最规范的一个程序。
反正能看了,来生想想怎么做AI。
用判断也可以搞定,改一改comMove方法,如果一条线上有两个玩家落的子就下到那去,不然就随机下。
但是考虑到checkWin的那个样子……
还是等找到新技术了再来改吧……