zoukankan      html  css  js  c++  java
  • 我问你,一个程序发三遍是什么毛病

      是弱逼综合症。

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

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

  • 相关阅读:
    有序表的合并---顺序表实现
    有序表的合并---链表实现
    双向链表操作
    有序表的合并-用链表操作
    C语言单链表操作
    c语言顺序表操作
    c语言 取余 % 和除法 / 的应用技巧 (在取位数方面的)
    JS打印表格(HTML定义格式)
    富文本编辑器(php)
    利用formdata异步上传图片并预览图片
  • 原文地址:https://www.cnblogs.com/chihane/p/3424397.html
Copyright © 2011-2022 走看看