井字棋

【Python入门基础】井字棋小游戏

故事扮演 提交于 2020-03-07 13:54:28
import os def print_board(board): print(board['TL'] + '|' + board['TM'] + '|' + board['TR']) print('-+-+-') print(board['ML'] + '|' + board['MM'] + '|' + board['MR']) print('-+-+-') print(board['BL'] + '|' + board['BM'] + '|' + board['BR']) def main(): init_board = { 'TL': ' ', 'TM': ' ', 'TR': ' ', 'ML': ' ', 'MM': ' ', 'MR': ' ', 'BL': ' ', 'BM': ' ', 'BR': ' ' } begin = True while begin: curr_board = init_board.copy() begin = False turn = 'x' counter = 0 os.system('clear') print_board(curr_board) while counter < 9: move = input('轮到%s走棋, 请输入位置: ' % turn) if curr_board[move] == ' ': counter +

python 井字棋(Tic Tac Toe)

浪尽此生 提交于 2020-02-05 07:19:40
说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意。另外,90%+的代码也是本人逐字逐句敲的。 minimax算法还没完全理解,所以参考了 这里 的代码,并作了修改。 特点 可以选择人人、人机、机人、机机四种对战模式之一 电脑玩家的AI使用了minimax算法,带apha-beta剪枝 电脑玩家在思考时,时时刻刻都有一个 “假想敌” 。以便使得minimax算法运转起来 代码 作者:hhh5460 时间:2017年6月26日 # 棋盘 class Board(object): def __init__(self): #self._board = '-'*9 # 坑!! self._board = ['-' for _ in range(9)] self._history = [] # 棋谱 # 按指定动作,放入棋子 def _move(self, action, take): if self._board[action] == '-': self._board[action] = take self._history.append((action, take)) # 加入棋谱 # 撤销动作,拿走棋子 def _unmove(self, action): self._board[action] = '-' self._history.pop() # 棋盘快照

1275. 找出井字棋的获胜者

不想你离开。 提交于 2020-02-02 17:29:04
解题思路: 1.按照题目的意思,A、B一定不会走已经走过的位置,所以遍历数组,由于遵守先A后B,所以偶数项就是A走的棋子,存入A数组中,同时将A中的此点置为1,其他存入B数组中 2.满足获胜的条件只有8种,分别是A或B的横坐标或纵坐标相等的点,斜对角线上的点,由于A中各点一定不相等,所以满足A获胜的条件必然是A中只有3点而每一点的范围是0~2,所以可以通过判断A中的数组元素相加是否为3来判断 3.如果没有找到A活B获胜的条件,就判断原数组的行是否小于9,如果小于9,说明还没下完,可以继续 4.如果没找到获胜者且行数大于等于9,说明两者平局 代码实现: class Solution { public String tictactoe(int[][] moves) { int len=moves.length; int[][] A=new int[3][3]; int[][] B=new int[3][3]; for(int i=0;i<len;++i){ if((i&0x01)==0){ A[moves[i][0]][moves[i][1]]=1; } else{ B[moves[i][0]][moves[i][1]]=1; } } //横(纵)坐标相等的点 for (int i = 0; i < 3; i++) { if(A[i][0] + A[i][1] + A[i][2] ==

c++学习心得4:井字棋游戏

淺唱寂寞╮ 提交于 2019-12-22 23:33:03
一、头文件 # define _CRT_SECURE_NO_WARNINGS 1 # include <stdio.h> # include <time.h> # include <stdlib.h> # define ROW 3 # define COL 3 void InitBoard ( char board [ ROW ] [ COL ] ) ; void ShowBoard ( char board [ ROW ] [ COL ] ) ; void Human ( char board [ ROW ] [ COL ] ) ; void Computer ( char board [ ROW ] [ COL ] ) ; int Judge ( char board [ ROW ] [ COL ] ) ; 二、游戏 # include "game.h" void InitBoard ( char board [ ROW ] [ COL ] ) { int i = 0 ; int j = 0 ; for ( i = 0 ; i < ROW ; i ++ ) { for ( j = 0 ; j < COL ; j ++ ) { board [ i ] [ j ] = ' ' ; } } } void ShowBoard ( char board [ ROW ] [ COL ] )

LeetCode 周赛 165周

时光怂恿深爱的人放手 提交于 2019-12-17 02:55:31
LeetCode 周赛 165周 LeetCode 周赛 165周 整理 第一题 井字棋 问题描述 参考代码 第二题 分配优化问题(番茄 和 奶酪) 问题描述 参考代码 第三题 矩阵 问题描述 参考代码 第四题 字符串相关 问题描述 参考代码 LeetCode 周赛 165周 整理 这里对 LeetCode 165周的周赛, 进行整理. 注意所有的题目均来自 LeetCode,其中解题的算法,为参考人员的满分算法。(这里只是借鉴,学习,如有侵权请@我本人,本人会第一时间处理) 关于这份试题,我仍然会再出一份解析(不久的将来 ) 第一题 井字棋 问题描述 A 和 B 在一个 3 x 3 的网格上玩井字棋。 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上。 第一个玩家 A 总是用 “X” 作为棋子,而第二个玩家 B 总是用 “O” 作为棋子。 “X” 和 “O” 只能放在空方格中,而不能放在已经被占用的方格上。 只要有 3 个相同的(非空)棋子排成一条直线(行、列、对角线)时,游戏结束。 如果所有方块都放满棋子(不为空),游戏也会结束。 游戏结束后,棋子无法再进行任何移动。 给你一个数组 moves,其中每个元素是大小为 2 的另一个数组(元素分别对应网格的行和列),它按照 A 和 B 的行动顺序(先 A 后 B)记录了两人各自的棋子位置。 如果游戏存在获胜者(A 或

LeetCode 第 165 场周赛

你说的曾经没有我的故事 提交于 2019-12-06 06:56:40
LeetCode 第 165 场周赛 C 暴力做的,只能说数据不充分 找出井字棋的获胜者4 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III 题目描述 Description A 和 B 在一个 3 x 3 的网格上玩井字棋。 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上。 第一个玩家 A 总是用 "X" 作为棋子,而第二个玩家 B 总是用 "O" 作为棋子。 "X" 和 "O" 只能放在空方格中,而不能放在已经被占用的方格上。 只要有 3 个相同的(非空)棋子排成一条直线(行、列、对角线)时,游戏结束。 如果所有方块都放满棋子(不为空),游戏也会结束。 游戏结束后,棋子无法再进行任何移动。 给你一个数组 moves,其中每个元素是大小为 2 的另一个数组(元素分别对应网格的行和列),它按照 A 和 B 的行动顺序(先 A 后 B)记录了两人各自的棋子位置。 如果游戏存在获胜者(A 或 B),就返回该游戏的获胜者;如果游戏以平局结束,则返回 "Draw";如果仍会有行动(游戏未结束),则返回 "Pending"。 你可以假设 moves 都 有效(遵循井字棋规则),网格最初是空的,A 将先行动。 样例输入与样例输出 Sample Input and Sample

【牛客网】井字棋

匿名 (未验证) 提交于 2019-12-02 23:36:01
题目描述 对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。 给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代 表是对方玩家的棋子。 测试样例: [[1,0,1],[1,-1,-1],[1,-1,0]] 返回:true 解题思路 井字棋有四种情况表示当前玩家获胜,1代表当前玩家棋子 1. 行全为1, 即行的和为3 2. 列全为1, 列的和为 3 3. 主对角全为1, 对角和为3 4. 副对角全为1, 对角和为3 5. 如果扩展为N*N的话,判断和是否等于N,下 面代码适用任何情况 完整代码 class Board { public : bool checkWon ( vector < vector <int> > board ) { if (( board [ 0 ][ 0 ]+ board [ 1 ][ 1 ]+ board [ 2 ][ 2 ])== 3 ) //正对角线 return true ; if (( board [ 0 ][ 2 ]+ board [ 1 ][ 1 ]+ board [ 2 ][ 0 ])== 3 ) //反对角线 return true ; for ( int i = 0 ; i < 3 ; i ++) { int a = 0 ; int b = 0 ; for ( int j