日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python井字棋代码_python井字棋算法及代码

發布時間:2023/12/20 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python井字棋代码_python井字棋算法及代码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

井字棋盤看起來像一個大的井字符號(#),有9 個空格,可以包含X、O 或

關于落子問題

由于只能采用鍵盤輸入,所以需要對棋盤進行坐標表示;

即直接用1-9個9個數字來表示位置,

7|8|9

-+-+-

4|5|6

-+-+-

1|2|3

其索引順序與數字鍵盤上的數字鍵排列一致,下棋時看著數字鍵下,較為簡便。

計算機的算法--尋找最佳落子位置

首先簡單的將棋盤劃分為三個部分——中心(1),角(4),邊(4)。

中心雖然只有一個但卻不是最重要的,三個部分落子的優先順序依次為:角、中心、邊。

因此,井字棋的計算機算法計算最佳落子位置的順序如下:

1 直接落子獲勝

2 阻止玩家獲勝

3 在角上落子

4 在中心落子

5 在邊上落子

游戲流程

1、開始

2、選子 X或者O

3、隨機先手

4、輪流下棋

5、是否分出勝負

5.1 分出勝負 跳到6

5.2 未分出勝負 跳到4

6、再來一局

6.1是, 跳到2

6.2否, 退出

游戲代碼:

import random

def printBoard(borad):

print(borad[7] + '|' + borad[8] + '|' + borad[9])

print('-+-+-')

print(borad[4] + '|' + borad[5] + '|' + borad[6])

print('-+-+-')

print(borad[1] + '|' + borad[2] + '|' + borad[3])

'''printBoard 定義了棋盤打印輸出函數

與數字鍵盤排列一致'''

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():

'''再玩一次?'''

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(board, occupy):

判斷是否獲勝

return ((board[1] == occupy and board[2] == occupy and board[3] == occupy) or

(board[4] == occupy and board[5] == occupy and board[6] == occupy) or

(board[7] == occupy and board[8] == occupy and board[9] == occupy) or

(board[1] == occupy and board[4] == occupy and board[7] == occupy) or

(board[2] == occupy and board[5] == occupy and board[8] == occupy) or

(board[3] == occupy and board[6] == occupy and board[9] == occupy) or

(board[1] == occupy and board[5] == occupy and board[9] == occupy) or

(board[3] == occupy and board[5] == occupy and board[7] == occupy))

def getBoardCopy(board):

復制一份棋盤給電腦落子使用

depuBoard = []

for i in board:

depuBoard.append(i)

return depuBoard

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 choosePossibleMoverFromList(board, moveList):

隨機返回一個可以落子的坐標,若無子可下,則返回None

possibleMoves = []

for i in moveList:

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'

'''先判斷電腦方能否通過一次落子直接獲得游戲勝利'''

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 = choosePossibleMoverFromList(board, [1, 3, 5, 7])

if move != None:

return move

'''若中心能落子,則在中心落子'''

if isSpaceFree(board, 5):

return 5

'''若邊上能落子,則在邊上落子'''

return choosePossibleMoverFromList(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 the TicTacToe game!')

while True:

update board

theBoard = [' '] * 10

playerLetter, computerLetter = inputPlayerLetter()

turn = whoGoesFirst()

print('The ' + turn + ' will go first.')

gameIsPlaying = True

while gameIsPlaying:

if turn == 'Player':

# 玩家回合

printBoard(theBoard)

move = getPlayerMove(theBoard)

makeMove(theBoard, playerLetter, move)

if isWinner(theBoard, playerLetter):

printBoard(theBoard)

print('Wow!!!You win the game!!!')

gameIsPlaying = False

else:

if isBoardFull(theBoard):

printBoard(theBoard)

print('The game is tie')

break

else:

turn = 'Computer'

else:

# 電腦回合

move = getComputerMove(theBoard, computerLetter)

makeMove(theBoard, computerLetter, move)

if isWinner(theBoard, computerLetter):

printBoard(theBoard)

print('Oh!,The computer win!,You lose.')

gameIsPlaying = False

else:

if isBoardFull(theBoard):

printBoard(theBoard)

print('The game is tie')

break

else:

turn = 'Player'

if not playAgain():

break

總結

以上是生活随笔為你收集整理的python井字棋代码_python井字棋算法及代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久国产成人精品国产成人亚洲 | 狠狠躁18三区二区一区传媒剧情 | 亚洲欧洲在线看 | 久久乐视频 | 久久九九国产视频 | 黄色免费入口 | 国产a∨精品一区二区三区仙踪林 | 久久免费av | 97超碰免费 | 亚洲第一天堂在线观看 | 亚洲专区区免费 | 男女在楼梯上高潮做啪啪 | 国产一区二区三区在线观看 | 国产成人精品在线观看 | 91涩| 国产国产精品 | 无码一区二区三区在线 | 亚洲情射 | 亚洲成人中文 | 波多野结衣a级片 | 成人av影视在线观看 | jizz日本18| 日本青青草 | 插插插综合 | 神马久久网站 | 国产精品99无码一区二区视频 | 久久一二三四区 | 妞干网这里只有精品 | 日本国产在线播放 | 国产一区免费视频 | www..com国产| 99国产精品久久久久久久成人 | 黄色大片中文字幕 | 欧美少妇精品 | 中文在线一区二区三区 | 女警白嫩翘臀呻吟迎合 | 91中出| 男女交性视频 | 国产在线高潮 | 亚洲婷婷在线观看 | 天堂在线一区二区 | 中国一级免费毛片 | 欧美在线精品一区 | 都市乱淫 | 91综合视频 | 亚洲成熟毛多妇女av毛片 | 91久操 | 色姑娘综合 | 男欢女爱久石 | 九九热九九爱 | 天天色天天操天天射 | 国模私拍一区二区三区 | 亚洲一区二区三区日韩 | 亚洲av无码专区国产乱码不卡 | 污污网站在线免费观看 | 无码视频在线观看 | 麻豆精品免费视频 | 香蕉视频91 | 黄色国产小视频 | 国产资源网站 | 尤物天堂 | 国产91精品久久久 | 日本妇乱大交xxxxx | 欧美精产国品一二三区 | 日韩精品在线观看中文字幕 | 亚洲一级中文字幕 | 中文字幕黄色片 | 操亚洲美女 | 久久久999成人 | 亚洲精品视频一区二区 | 亚洲精品影片 | 抱着老师的嫩臀猛然挺进视频 | 天天色综网 | 天天躁日日躁狠狠躁av麻豆男男 | 欧美一区二区三区在线看 | 日本加勒比在线 | 激情文学久久 | 禁漫天堂下载18 | 黑人与亚洲人色ⅹvideos | 青青草久久爱 | 夜夜爽av福利精品导航 | 精品一区二区在线观看 | 福利片在线观看 | 在线观看中文字幕视频 | 亚洲成人av电影网站 | 久久色视频 | 综合网av | 激情 亚洲 | 成人免费视频网址 | 一级特级毛片 | 中文字幕精品三区 | 亚洲风情av | av免费观看网 | 国产成人无码精品久久久久 | 99色在线视频 | 色999视频 | 神马老子午夜 | 日皮视频网站 | 免费的黄色小视频 |