博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我问你,一个程序发三遍是什么毛病
阅读量:4487 次
发布时间:2019-06-08

本文共 4404 字,大约阅读时间需要 14 分钟。

  是弱逼综合症。

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

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

转载于:https://www.cnblogs.com/chihane/p/3424397.html

你可能感兴趣的文章
Oralce 处理字符串函数
查看>>
Flex4 饼图样式(颜色渐变,点击分离,环形)
查看>>
28个Unix/Linux的命令行神器
查看>>
pb11.5破解补丁
查看>>
struts2下 数据转换器
查看>>
比特信 介绍
查看>>
ubuntu 16.04 Samba 匿名配置
查看>>
document handling
查看>>
Spring的核心容器
查看>>
Spoken English Practice(If you fail to do as I say, I will take you suffer.)
查看>>
日志分析方法
查看>>
Angular
查看>>
如何使用maven 打包源代码呢?
查看>>
python使用mysql数据库
查看>>
Linux下切换python版本
查看>>
snmptrap、snmpinform和snmptrapd的详细介绍及其用法
查看>>
JavaScript初阶(三)--------函数、闭包、立即执行函数
查看>>
linux的系统调优
查看>>
mysql之pymsql的使用
查看>>
博客园小技巧
查看>>