tic-tac-toe游戏代码
package com.p4f.tictactoe.demo;
import javax.swing.border.Border;
public class Board {
/**
* position
* 0 1 2
* 3 4 5
* 6 7 8
*/
private char[] position;
/**
* default constructor
*/
public Board() {
}
/**
* constructor with a string
* @param s board position
*/
public Board(String s) {
if(s == null) {
this.position = null;
} else {
this.position = s.toCharArray();
}
}
public boolean isWinForX() {
return isWinFor('X');
}
public boolean isWinForO() {
return isWinFor('O');
}
public boolean isDraw() {
// 如果既不是X赢也不是O赢那么就是平局了
return isFull() && !isWinForX() && !isWinForO();
}
/**
* 棋盘是不是满的
* @return true: 满的, false: 不是满的
*/
public boolean isFull() {
boolean t = true;
for(char c : position) {
if(c == ' ') {
return false;
}
}
return t;
}
public boolean isGameOver() {
// 如果不是平局X和O也没有赢
return isDraw() || isWinForX() || isWinForO();
}
/**
* 判断pos上是不是已经有子了
* @param pos 位置
* @return 有返回 true, 没有返回false
*/
public boolean isOccupied(int pos) {
return position[pos] != ' ';
}
public Board move(int pos, char c) {
if(isOccupied(pos)) {
return null;
} else {
char[] newCharArray = position.clone();
newCharArray[pos] = c;
return new Board(newCharArray.toString());
}
}
public void print() {
System.out.println(convertPosition(position));
}
public void printWithNumbers() {
char[] a = position.clone();
char[] temp = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8'};
for(int i=0; i<=8; i++) {
if(a[i] == ' ') {
a[i] = temp[i];
}
}
System.out.println(convertPosition(a));
}
private String convertPosition(char[] position) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(" ").append(position[0]).append(" | ").append(position[1]).append(" | ").append(position[2]).append(" \n").
append("---+---+---\n").
append(" ").append(position[3]).append(" ").append("|").append(" ").append(position[4]).append(" ").append("|").append(" ").append(position[5]).append(" \n").
append("---+---+---\n").
append(" ").append(position[6]).append(" | ").append(position[7]).append(" | ").append(position[8]).append(" ");
return stringBuilder.toString();
}
public boolean isWinFor(char c) {
boolean t = false;
if(position[0] == c && position[1] == c && position[2] == c) {
t = true;
} else if(position[3] == c && position[4] == c && position[5] == c) {
t = true;
}else if(position[6] == c && position[7] == c && position[8] == c) {
t = true;
}else if(position[0] == c && position[3] == c && position[6] == c) {
t = true;
}else if(position[1] == c && position[4] == c && position[7] == c) {
t = true;
}else if(position[2] == c && position[5] == c && position[8] == c) {
t = true;
}else if(position[0] == c && position[4] == c && position[8] == c) {
t = true;
}else if(position[2] == c && position[4] == c && position[6] == c) {
t = true;
}
return t;
}
public static void main(String[] args) {
String s = "XXXOOO X ";
new Board(s).print();
new Board(s).printWithNumbers();
}
}
package com.p4f.tictactoe.demo;
public class TreeNode {
private Board board;
private char nextTurn;
private char winFor;
/**
* default constructor
*/
public TreeNode() {
}
/**
* constructor with board
*/
public TreeNode(Board board) {
this.board = board;
}
public void setNextTurn(char nextTurn) {
// 在当前棋盘的布局下, 谁来走这一步
this.nextTurn = nextTurn;
}
public char getNextTurn() {
// 返回当前落子的人是谁
return this.nextTurn;
}
// 如果设置当前棋盘下赢的人是谁
public void setWinFor(char winFor) {
this.winFor = winFor;
}
// 返回当前赢的人是谁
public char getWinFor() {
return this.winFor;
}
public void setNextMove(int nextMove) {
// 先判断有没有空位
// 如果有空位的话
// 按照以下次序
// 下一步可以赢的
// 如果
}
public int getNextMove() {
return 0;
}
/**
* 设置子节点
* @param pos 位置
* @param child 子节点
*/
public void setChild(int pos, TreeNode child) {
}
public TreeNode getChild(int pos) {
Board nextBoard = board.move(pos, nextTurn);
TreeNode child = new TreeNode(nextBoard);
return child;
}
public Board getBoard() {
return board;
}
public void setBoard(Board board) {
this.board = board;
}
}
package com.p4f.tictactoe.demo;
public class GameTree {
private TreeNode root; // 根节点
private char[] turn; // 下棋的顺序
public GameTree(String turns) {
this.turn = turns.toCharArray();
}
public void makeGameTreeAt(TreeNode node) {
if(node.getBoard().isDraw()) {
node.setWinFor(' ');
} else if(node.getBoard().isWinForX()) {
node.setWinFor('X');
} else if(node.getBoard().isWinForO()) {
node.setWinFor('O');
} else {
if(!node.getBoard().isFull()) {
for(int i=0; i<8; i++) {
if(!node.getBoard().isOccupied(i)) {
Board board = node.getBoard().move(i, node.getNextTurn());
TreeNode child = new TreeNode(board);
makeGameTreeAt(child);
}
}
}
}
}
public char getTurn(int n) {
return turn[n];
}
public char winner() {
return ' ';
}
public void print() {
}
public void print(TreeNode node) {
}
public void printNode() {
}
}
tic-tac-toe游戏代码的更多相关文章
- POJ 2361 Tic Tac Toe
题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...
- 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe
题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...
- 【leetcode】1275. Find Winner on a Tic Tac Toe Game
题目如下: Tic-tac-toe is played by two players A and B on a 3 x 3 grid. Here are the rules of Tic-Tac-To ...
- Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy
1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...
- python 井字棋(Tic Tac Toe)
说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...
- LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game
地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...
- ACM-Team Tic Tac Toe
我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...
- Epic - Tic Tac Toe
N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If ...
- java俄罗斯方块游戏代码
java俄罗斯方块游戏代码: package com; import java.awt.Color; import java.awt.Graphics; import java.awt.event.K ...
随机推荐
- SqlMapConfig.xml详细介绍
1,连接数据库 <!--配置环境,默认的环境id为oracle --> <environments default="oracle"> <!-- 配置 ...
- PHP超全局变量$_ENV详解,及$_ENV为空的可能原因
PHP中的$_ENV存储了一些系统的环境变量,因为牵扯到实际的操作系统,所以不可能给出$_ENV的完整列表. $_ENV为空的可能原因: 你的php.ini的variables_order值为&qu ...
- mysql left join,right join,inner join的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) ...
- linux如何安装xampp,以及融合dvwa
1.官网下载:https://www.apachefriends.org/download.html 2.赋予执行权限 [admin@19-56 ~]$ chmod +x xampp-linux-x6 ...
- javascript快速入门15--节点
节点类型 DOM定义了Node的接口以及许多种节点类型来表示节点的多个方面! Document——最顶层的节点,所有的其他节点都是附属于它的. DocumentType——DTD引用(使用<!D ...
- 转:解决 java.util.MissingResourceException: Can't find bundle for base name com...config, locale zh_CN 错误
Solve java.util.MissingResourceException: Can't find bundle for base name com...config, locale zh_CN ...
- Nginx 报错413 Request Entity Too Large 上传文件过大
1.进入Nginx安装路径下的conf文件夹中(我的路径是:/usr/local/nginx/conf) 2.打开nginx.conf,在http大括号中第一行加语句:client_max_body_ ...
- Mac上安装使用Nginx
1.brew search nginx 2.brew install nginx 启动nginx ,sudo nginx ;访问localhost:8080 发现已出现nginx的欢迎页面了. 备注: ...
- 转: 私人珍藏的Chrome插件,吐血推荐
转:来自 http://stormzhang.com/devtools/2016/01/15/google-chrome-extension/
- 转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比
http://geek.csdn.net/news/detail/138968 Google近日发布了TensorFlow 1.0候选版,这第一个稳定版将是深度学习框架发展中的里程碑的一步.自Tens ...