日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python實現井字棋小游戲

瀏覽:49日期:2022-08-04 11:47:04

本文為大家分享了python實現井字棋小游戲,供大家參考,具體內容如下

周五晚上上了python的選修課,本來以為老師是從python的基礎語法開始的,沒想到是從turtle畫圖開始,正好補上了我以前一些不懂的地方,有人講一下還是比啃書好一點。

之前從圖書館借了一本python游戲編程,看了前面幾章后就沒怎么看了,晚上突然想看看,然后跟著教程寫個游戲的。最后就有了這個井字棋的誕生,其實代碼并不是很長,主要是思路,需要考慮的周全一點。代碼寫完后就和電腦下了好久的井字棋,一局都沒贏,真的是很無奈了,比不過比不過。

開發環境 :windows10 + pycharm(因為下棋時候需要輸入,sublime不知道怎么弄輸入,所以就用了pycharm)

需要用到的包也只有一個 :random

游戲的話首先要弄清楚的是游戲的流程,首先做什么然后做什么。因為井字棋相對來說不算是一個復雜的游戲,所以流程就不多講了,我首先做的是畫棋盤、電腦和玩家的棋子、誰先落子等,下面通過代碼來解釋 :

# 畫棋盤的函數,傳入一個放置棋子的列表def drawBoard(board) : print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9]) print('------------') print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6]) print('------------') print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3]) # 玩家選擇所想用的棋子種類def inputPlayerLetter() : letter = ’’ while not (letter == ’X’ or letter == ’O’) : print('Do you want to be X or O') # 自動將小寫轉化為大寫 letter = input().upper() # 如果玩家選擇的X,則自動將O賦給電腦,反之一樣 if letter == ’X’ : return [’X’,’O’] else : return [’O’,’X’] # 這里隨機生成0或者1來表示誰先落子def whoGoesFirst() : if random.randint(0,1) == 0 : return ’computer’ else : return ’player’ # 如果玩家選擇y或者Y則游戲重新開始def playAgain(): print('Do you want to play again?(yes or no)') return input().lower().startswith(’y’) # 將棋子放置到棋盤上面# board參數是儲存棋子的列表# letter參數是棋子的類型# move是選擇將棋子放在哪def makeMove(board, letter, move) : board[move] = letter # 根據井字棋規則判斷是否獲勝def isWinner(bo, le) : 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) : 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, moveList) : possibleMoves = [] for i in moveList : if isSpaceFree(board, i) : possibleMoves.append(i) if len(possibleMoves) != 0 : return random.choice(possibleMoves) else : return None

上述代碼實現了部分簡單的功能,然后是實現計算機的落子部分,畢竟是計算機,得看著不那么傻,所以下面相當于是一個小小的AI,電腦能在備份的副本上判斷,根據判斷的結果來指定落子的位置 :

# 電腦落子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 = chooseRandomMoveFromList(board,[1,3,7,9]) if move != None : return move # 如果角處已被占滿,則落子在中間位置5處 if isSpaceFree(board, 5) : return 5 # 如果角和中間都被占滿,則隨機選擇邊上落子 return chooseRandomMoveFromList(board,[2,4,6,8]) # 判斷棋盤是否已滿def isBoardFull(board) : for i in range(1,10) : if isSpaceFree(board, i) : return False return True print('Welcome to Tictactoe !!!') while True : # 初始化棋盤為空 theBoard = [’ ’] * 10 # 玩家和電腦棋子類型的選擇 playerLetter, computerLetter = inputPlayerLetter() # 先后順序的決定 turn = whoGoesFirst() print(’The ’ + turn + ’ will go first’) # 游戲開始的標志位,當游戲結束時變成False gameIsPlaying = True while gameIsPlaying : # 玩家先行 if turn == ’player’ : drawBoard(theBoard) # 獲取玩家下棋的位置 move = getPlayerMove(theBoard) # 將玩家的棋子傳入列表相應的位置 makeMove(theBoard, playerLetter, move) # 如果玩家獲勝,標志位變為False if isWinner(theBoard, playerLetter) : drawBoard(theBoard) print('You win !') gameIsPlaying = False # 否則則判斷棋盤是否已滿 else : if isBoardFull(theBoard) : drawBoard(theBoard) print('Tie') break # 若棋盤未滿,且玩家已落子,則下一次落到計算機落子 else : turn = ’computer’ # 電腦先行 else : # 電腦隨機選擇位置落子 move = getComputerMove(theBoard, computerLetter) makeMove(theBoard, computerLetter, move) # 如果電腦落子獲勝,則游戲結束 if isWinner(theBoard, computerLetter) : drawBoard(theBoard) print('You lose !') gameIsPlaying = False else : if isBoardFull(theBoard) : drawBoard(theBoard) print('Tie') break else : turn = ’player’ # 玩家沒有再次開始游戲,則跳出循環 if not playAgain(): break

上述所有代碼實現了井字棋的人機對戰,整合起來就可以玩了,反正我是沒有下贏過的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲婷婷免费| 日韩精品三级| 久久av国产紧身裤| 国产欧美一级| 精品一区二区三区中文字幕| 国产videos久久| 欧洲一区二区三区精品| 日韩精品水蜜桃| 亚洲国产一区二区在线观看| 巨乳诱惑日韩免费av| 视频精品一区| 视频一区日韩精品| 国产精品欧美日韩一区| 精品免费av| 亚洲午夜在线| 亚洲麻豆一区| 免费日韩一区二区三区| 久久久久久自在自线| 中文另类视频| 影音国产精品| 欧美三级第一页| 国产资源在线观看入口av| 欧美日韩精品在线一区| 亚洲一区黄色| 国产欧美一区二区精品久久久| 精品国内亚洲2022精品成人| 福利在线免费视频| 国产精品毛片在线看| 清纯唯美亚洲综合一区| 日韩av在线播放网址| 黄色日韩在线| 国产精品一区二区三区av| 欧美日韩视频网站| 一区二区三区国产在线| 久久久亚洲欧洲日产| 欧美肉体xxxx裸体137大胆| 亚洲精品一级| 亚洲精品88| 视频一区二区不卡| 久久免费影院| 激情五月色综合国产精品| 亚洲精品乱码久久久久久蜜桃麻豆| 精品视频自拍| 免费成人性网站| 岛国av在线网站| 日韩精品一区二区三区av | 亚洲欧美日韩在线观看a三区| 国产精品一级| 老色鬼久久亚洲一区二区| 天堂√8在线中文| 日本少妇精品亚洲第一区| 久久精品国产68国产精品亚洲| 欧美久久精品| 日韩在线一区二区| 久久国产66| 视频一区日韩精品| 婷婷亚洲五月| 精品久久免费| 好看不卡的中文字幕| 国产剧情一区二区在线观看| 欧美亚洲自偷自偷| 精品一区毛片| 韩国一区二区三区视频| 在线日韩成人| 蜜桃精品在线| 久久亚洲国产精品尤物| 日精品一区二区三区| 午夜精品亚洲| 日韩黄色大片| 日韩精品国产欧美| 亚洲欧美久久| 91九色精品| 日韩免费高清| 精品国产一区二区三区av片| 91亚洲精品视频在线观看 | 日韩精品电影一区亚洲| 亚洲少妇一区| 精品在线99| 欧美69视频| 欧美三区四区| www在线观看黄色| 精品国产一区二区三区噜噜噜| 色8久久久久| 免费欧美日韩| 欧美日韩国产一区精品一区| 国产高潮在线| 精品国产一区二区三区噜噜噜| 国产日韩欧美中文在线| 日韩不卡在线观看日韩不卡视频| 一区二区三区网站| 亚洲乱码视频| 亚洲天堂av资源在线观看| 亚洲激情国产| 红桃视频国产精品| 午夜欧美精品久久久久久久| 久久中文字幕二区| 亚洲性色视频| 午夜久久tv| 国产一在线精品一区在线观看| 欧美日韩免费观看视频| 日韩电影免费网址| 99久久夜色精品国产亚洲1000部| 久久婷婷一区| 一本一道久久a久久精品蜜桃| 亚洲无线一线二线三线区别av| 久久久久国产精品一区二区| 香蕉精品视频在线观看| 亚洲一区区二区| 亚洲视频国产精品| 久久精品99久久久| 国产精品videossex| 免费亚洲一区| 日本黄色精品| 日韩啪啪电影网| 久久网站免费观看| av高清一区| 在线亚洲国产精品网站| 亚洲婷婷丁香| 国产精品qvod| 成人国产精品久久| 日本欧美不卡| 在线日韩成人| 国产精品videosex极品| 日韩不卡免费高清视频| 99精品视频在线| 亚洲精品影院在线观看| 老司机精品视频网| 成人看片网站| 欧美天堂亚洲电影院在线观看| 亚洲资源网站| 久久婷婷国产| 在线成人直播| 国产图片一区| 日韩精品中文字幕第1页| 欧洲激情综合| 日韩1区2区日韩1区2区| 精品国产精品国产偷麻豆| 欧美亚洲在线日韩| 日韩一区二区三区精品| 精品黄色一级片| 午夜日韩在线| 国产精品久久久网站| 国产v综合v| 欧美精品导航| japanese国产精品| 欧美日一区二区三区在线观看国产免| 麻豆理论在线观看| 一区二区亚洲视频| 国产成年精品| 亚洲精品伦理| 亚洲一级少妇| 亚洲欧洲国产精品一区| 狠狠躁少妇一区二区三区| 首页欧美精品中文字幕| 精品99在线| 亚洲久草在线| 精精国产xxxx视频在线野外 | 久久高清精品| 欧美三区不卡| 国产亚洲激情| 日韩中文字幕麻豆| 日本а中文在线天堂| 欧美日本一区| 亚洲综合日本| 国内自拍视频一区二区三区| 日韩专区欧美专区| 久久天堂av| 欧美黄页在线免费观看| 精品国产亚洲日本| 亚洲字幕久久| 国产综合婷婷| 精品日韩一区| 亚洲一区导航| 黑丝一区二区三区| 麻豆国产在线| 国产精品免费不| 石原莉奈在线亚洲二区| 99香蕉国产精品偷在线观看 | 五月激激激综合网色播| 久久高清免费| 国产激情在线播放| 日韩国产91| 视频在线观看91| 久久精选视频| 久久精品一区二区三区中文字幕| 亚洲一区二区小说| 99亚洲视频| 99久久久久| 久久天堂av| 欧美羞羞视频| 日韩成人精品一区二区| 亚洲精品1区2区| 欧美日韩在线二区| 日韩在线短视频| 正在播放日韩精品| 国产一区二区三区天码| 欧美影院视频| 日韩激情综合| 日韩国产精品久久久久久亚洲| 首页国产欧美久久|