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

  是弱逼综合症。

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

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

posted @ 2013-11-14 22:29  Chihane  阅读(157)  评论(0编辑  收藏  举报