Python 井字棋
# Tic Tac Toe import random def drawBoard(board): # 列印棋盤 # "board"是長度為10的列表,為了方便輸入,忽略第一個元素board[0] print('\n\n\n\n') print('\t\t\t┌─┬─┬─┐') print('\t\t\t│'+board[7]+' │'+board[8]+' │'+board[9]+' │') print('\t\t\t├─┼─┼─┤') print('\t\t\t│'+board[4]+' │'+board[5]+' │'+board[6]+' │') print('\t\t\t├─┼─┼─┤') print('\t\t\t│'+board[1]+' │'+board[2]+' │'+board[3]+' │') print('\t\t\t└─┴─┴─┘') def inputPlayerLetter(): # 讓玩家選擇棋子 # 返回一個列表,第一個是玩家的棋子,第二個是電腦的 letter = '' while not (letter == 'X' or letter == 'O'): print('Do you want to be X or O?') letter = input().upper() if letter == 'X': return ['X', 'O'] else: return ['O', 'X'] def whoGoesFirst(): # 隨機產生誰先走 if random.randint(0, 1) == 0: return 'computer' else: return 'player' def playAgain(): # 再玩一次?輸入yes或y返回True print('Do you want to play again? (yes or no)') return input().lower().startswith('y') def makeMove(board, letter, move): #落子 board[move] = letter def isWinner(bo, le): # 判斷所給的棋子是否獲勝 # 引數為棋盤上的棋子(列表)和棋子符號 # 以下是所有可能勝利的情況,共8種 return ((bo[7] == le and bo[8] == le and bo[9] == le) or (bo[4] == le and bo[5] == le and bo[6] == le) or (bo[1] == le and bo[2] == le and bo[3] == le) or (bo[7] == le and bo[4] == le and bo[1] == le) or (bo[8] == le and bo[5] == le and bo[2] == le) or (bo[9] == le and bo[6] == le and bo[3] == le) or (bo[7] == le and bo[5] == le and bo[3] == le) or (bo[9] == le and bo[5] == le and bo[1] == le)) def getBoardCopy(board): # 複製一份棋盤,供電腦落子時使用 dupeBoard = [] for i in board: dupeBoard.append(i) return dupeBoard def isSpaceFree(board, move): # 判斷這個位置是否有子,沒子返回True return board[move] == ' ' def getPlayerMove(board): # 玩家落子 move = ' ' while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board, int(move)): print('What is your next move? (1-9)') move = input() return int(move) def chooseRandomMoveFromList(board, movesList): # 隨機返回一個可以落子的座標 # 如果沒有所給的movesList中沒有可以落子的,返回None possibleMoves = [] for i in movesList: if isSpaceFree(board, i): possibleMoves.append(i) if len(possibleMoves) != 0: return random.choice(possibleMoves) else: return None def getComputerMove(board, computerLetter): # 確定電腦的落子位置 if computerLetter == 'X': playerLetter = 'O' else: playerLetter = 'X' # Tic Tac Toe AI核心演算法: # 首先判斷電腦方能否通過一次落子直接獲得遊戲勝利 for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, computerLetter, i) if isWinner(copy, computerLetter): return i # 判斷玩家下一次落子能否獲得勝利,如果能,給它堵上 for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, playerLetter, i) if isWinner(copy, playerLetter): return i # 如果角上能落子的話,在角上落子 move = chooseRandomMoveFromList(board, [1, 3, 7, 9]) if move != None: return move # 如果能在中心落子的話,在中心落子 if isSpaceFree(board, 5): return 5 # 在邊上落子 return chooseRandomMoveFromList(board, [2, 4, 6, 8]) def isBoardFull(board): # 如果棋盤滿了,返回True for i in range(1, 10): if isSpaceFree(board, i): return False return True print('Welcome to Tic Tac Toe!') while True: # 更新棋盤 theBoard = [' '] * 10 playerLetter, computerLetter = inputPlayerLetter() turn = whoGoesFirst() print('The ' + turn + ' will go first.') gameIsPlaying = True while gameIsPlaying: if turn == 'player': # 玩家回合 drawBoard(theBoard) move = getPlayerMove(theBoard) makeMove(theBoard, playerLetter, move) if isWinner(theBoard, playerLetter): drawBoard(theBoard) print('Hooray! You have won the game!') gameIsPlaying = False else: if isBoardFull(theBoard): drawBoard(theBoard) print('The game is a tie!') break else: turn = 'computer' else: # 電腦回合 move = getComputerMove(theBoard, computerLetter) makeMove(theBoard, computerLetter, move) if isWinner(theBoard, computerLetter): drawBoard(theBoard) print('The computer has beaten you! You lose.') gameIsPlaying = False else: if isBoardFull(theBoard): drawBoard(theBoard) print('The game is a tie!') break else: turn = 'player' if not playAgain(): break
相關推薦
python井字棋算法及代碼
one 鍵盤輸入 有一個 通過 數字鍵盤 boa 簡便 oss range 井字棋盤看起來像一個大的井字符號(#),有9 個空格,可以包含X、O 或關於落子問題由於只能采用鍵盤輸入,所以需要對棋盤進行坐標表示;即直接用1-9個9個數字來表示位置,7|8|9-+-+-4|5|
Python 井字棋
# Tic Tac Toe import random def drawBoard(board): # 列印棋盤 # "board"是長度為10的列表,為了方便輸入,忽略第一個元素board[0] print('\n\n\n\n') print('\t\t\t┌
Python小遊戲 井字棋(人機對戰,玩家對戰)
pan urn utf-8 erl ext print cef () nbsp # -*- coding:utf-8 -*-import timeimport random#井字棋 人機對戰def drawBoard(board): blank_board = '|
Python小遊戲----井字棋
週五晚上上了python的選修課,本來以為老師是從python的基礎語法開始的,沒想到是從turtle畫圖開始,正好補上了我以前一些不懂的地方,有人講一下還是比啃書好一點。 之前從圖書館借了一本python遊戲程式設計,看了前面幾章後就沒怎麼看了,晚上突然想看看,然後跟著教
python實現井字棋遊戲
用python實現的一個井字棋遊戲。 #Tic-Tac-Toe 井字棋遊戲 #全域性常量 X="X" O="O" EMPTY=" " #詢問是否繼續 def ask_yes_no(question): response=None; while response not i
井字棋遊戲C語言簡單思路人人對戰版(無圖形化介面))
#include<stdio.h> #include<stdlib.h> #include<conio.h> #defineROW 3 #defineLINE 3 intsymbol1, symbol2, step; char a[10]; void
[日常練習] 3. 基於井字棋遊戲的C語言實現!
井字棋算是童年課堂上的與同桌默契配合的一大樂趣...躲避著老師“關切”的目光,在眼皮底下“頂風作案”,將“燈下黑”體現的淋漓盡致!在C語言中,也算是一個小的專案,今天,我們就用C語言來實現它!!!追逐童年的一份小樂趣! 遊戲介紹: “井字棋”也稱“三子棋”,需要一個3*3的棋盤。假設
三子棋(井字棋),說沒玩過的都沒童年
這裡我建立了一個“三子棋”的專案,裡面有一個頭檔案game.h和兩個原始檔text.c 、game.c。 "text.c":text.c原始檔放的是main函式,選單列印menu函式和一個遊戲game函式; #include "game.h" void menu
Unity3d學習之路-簡單井字棋
Unity3d-簡單井字棋 作業目的:熟悉IMGUI的使用,和基礎的Unity3d操作 遊戲玩法:選擇兩個模式,1.Player vs Player 2.Computer vs Player,當其中一種棋子連成三個則這個棋子的玩家獲勝。 技術限制:僅允許使用I
用C語言實現簡單 三子棋(井字棋)小遊戲
函式頭 放在標頭檔案裡 #ifndef __GAME_H__ #define __GAME_H__ #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #inc
[文件和原始碼分享]C++實現的基於α-β剪枝演算法的井字棋遊戲
“井字棋”遊戲(又叫“三子棋”),是一款十分經典的益智小遊戲,操作簡單,娛樂性強。兩個玩家,一個打圈(O),一個打叉(X),輪流在3乘3的格上打自己的符號,最先以橫、直、斜連成一線則為勝。 如果雙方都下得正確無誤,將得和局。這種遊戲實際上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。 這種遊戲的變
用TensorFlow基於神經網路實現井字棋(含程式碼)
為了展示如何應用神經網路演算法模型,我們將使用神經網路來學習優化井字棋(Tic Tac Toe)。明確井字棋是一種決策性遊戲,並且走棋步驟優化是確定的。 開始 為了訓練神經網路模型,我們有一系列優化的不同的走棋棋譜,棋譜基於棋盤位置列表和對應的最佳落子點。考慮到棋盤的對稱性,通
C語言實現井字棋小遊戲
#include <stdio.h> #include <stdlib.h> int store[]={'_','_','_','_','_','_','_','_','_'}, shunt=1, count, i; void pr
井字棋遊戲實現-java(低階方法實現)
import java.util.Scanner; public class JingGame { final static int LENGTH=3; //棋局的長度 final static int NUM_FOR_WIN=3;//幾個子連起來贏
tictac 立體井字棋
題目描述: 你玩過井字棋遊戲嗎?它的英文名字叫做tic-tac-toe,是一個古老的博弈遊戲。遊戲在一 個3 £ 3的棋盤上進行。遊戲約定,先在同一條線(橫線、縱線或斜線)上佔有3枚棋子者得 勝。儘管現在藉助計算機可以生成這個遊戲所有可能的情況,但這個古老的遊戲從未失去它
[LeetCode] Valid Tic-Tac-Toe State 驗證井字棋狀態
A Tic-Tac-Toe board is given as a string array board. Return True if and only if it is possible to reach this board position during the course of a valid
演算法設計與分析題目練習四:井字棋(啟發式演算法)
井字棋又叫做三連棋或一連棋。顧名思義就是讓三顆棋子連成一條線就獲勝了。國外也有相似的玩法,名字叫tic-tac-toe #include <iostream> #include <string> using namespace std; /*
JavaScript-井字棋 根據棋盤和玩家,得出下一步獲勝的走法
假設我們現在有一個 3 x 3 的井字棋遊戲,我們用一個二維陣列代表棋盤,’x’ 代表玩家 X 下的棋子,’o’ 代表玩家 O 下的棋子,’e’ 代表該格沒有棋子。例如: 一個空白的棋盤以下面的二維陣列表示 [ [‘e’, ‘e’, ‘e’], [‘e’, ‘e’,
面向物件以及運用最大最小搜尋的井字棋設計(附原始碼)
一:實驗題目 井字棋遊戲設計 利用面向物件程式設計的知識,通過設計board、player、game類,實現一個具有人人對弈、人機對弈以及機機對弈的井字棋遊戲。 要求: ①對類設定和實現的要求 1.封裝:需要對遊戲中的資料進行相應的封裝保護。 在井字
三子棋,又稱井字棋的實現
編寫一個三子棋你需要知道的是需要哪些實現步驟:首先,你需要有一個棋盤,這樣你就需要編寫一個初始化棋盤的函式,並能夠將棋盤打印出來; 棋盤麼,就像這種樣子: ___|___|___ ___|___|___ | | 這個採用二維陣列就可以來實現了;