我问你,一个程序发三遍是什么毛病

  是弱逼综合症。

  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("\n落子(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("\n电脑:");            //

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的那个样子……

  还是等找到新技术了再来改吧……

你可能感兴趣的:(程序)