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

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

python實現井字棋小游戲

瀏覽:46日期: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久久,三上悠亚国产精品一区二区三区
国产亚洲精品美女久久久久久久久久| 国产精品香蕉| 成人污污视频| 麻豆91精品视频| 狂野欧美性猛交xxxx| 美女精品久久| 日本一二区不卡| 精精国产xxxx视频在线野外| 日韩精品电影| 日本久久精品| 香蕉成人av| 精品1区2区3区4区| 亚洲人妖在线| 国产精品激情| 色偷偷偷在线视频播放| 亚洲午夜在线| 亚洲一区二区小说| 国产精品一区二区精品视频观看| 麻豆精品av| 丝袜美腿诱惑一区二区三区| 婷婷亚洲五月| 亚洲人成亚洲精品| 欧美日韩一区自拍| 国产一区国产二区国产三区| 国产精品原创| 99精品视频精品精品视频| 91九色精品| 亚洲精品在线国产| 国产精品宾馆| 91看片一区| 乱人伦精品视频在线观看| 奇米777国产一区国产二区| 麻豆国产一区| 香蕉成人av| 蜜桃视频第一区免费观看| 欧美亚洲综合视频| 成午夜精品一区二区三区软件| 极品日韩av| 日韩av在线播放中文字幕| 精品国产乱码| 日韩精品诱惑一区?区三区| 亚洲欧美日韩国产| 日本一不卡视频| 国产成人精品福利| 欧美特黄一级| 国产香蕉精品| 国产在线不卡| 国产乱码精品一区二区三区四区 | 久久精品主播| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美精品91| 激情综合在线| 国产欧美日韩免费观看| 91视频一区| 热久久久久久久| 精品中文字幕一区二区三区| 亚洲免费播放| 麻豆国产精品| 亚洲欧美日韩国产| 国产一区二区三区91| 蜜桃久久久久久久| 中文字幕人成乱码在线观看 | 亚洲国产成人二区| 深夜福利亚洲| 久久国产主播| 日韩精彩视频在线观看| 久久青草久久| 国产麻豆一区二区三区| 日韩一级网站| 国内不卡的一区二区三区中文字幕| 亚洲视频www| 色婷婷色综合| 日韩在线网址| 夜夜嗨一区二区| 日韩综合在线| 国产欧美69| 一本综合精品| 极品日韩av| 国产成人精品免费视| 日韩欧美中文字幕在线视频| 日韩精品首页| 国产极品模特精品一二| 蜜桃91丨九色丨蝌蚪91桃色| 精精国产xxxx视频在线野外| 久久超碰99| 亚洲精品一二三**| 一区免费视频| 欧美精选视频一区二区| 久久午夜影院| 欧美日本二区| 亚洲区第一页| 亚洲免费中文| 欧洲毛片在线视频免费观看| 亚洲女同av| 国产一区二区三区四区| 日韩超碰人人爽人人做人人添| 精品一区亚洲| av在线最新| 你懂的国产精品| 国产视频网站一区二区三区| 免费在线看一区| 激情欧美一区二区三区| 日韩国产专区| 国内精品美女在线观看| 国产福利资源一区| 国产精品一页| 国产日韩中文在线中文字幕| 亚洲v天堂v手机在线| 日韩精品一卡二卡三卡四卡无卡| 最新亚洲一区| 精品中文字幕一区二区三区av| 中文字幕在线看片| 国产一区二区三区不卡视频网站| 免费在线欧美黄色| 久久三级毛片| 精品国产a一区二区三区v免费| 国产精品探花在线观看| 欧美日本三区| 91av一区| 91欧美极品| 欧美日韩中文| 国产精品毛片视频| 欧美a一区二区| 大香伊人久久精品一区二区| 久久久久久色 | 日韩欧美在线中字| 日本精品黄色| 欧美三区四区| 国产精品av一区二区| 激情五月综合| 国产精品三上| 婷婷精品在线| 欧美日一区二区三区在线观看国产免| 91免费精品国偷自产在线在线| 国产日韩一区二区三免费高清| 日本精品另类| 欧美国产中文高清| 麻豆视频在线看| 今天的高清视频免费播放成人| 日韩视频在线一区二区三区 | 成人片免费看| 久久精品国产亚洲夜色av网站| 99久久久久| 国产亚洲亚洲| 日韩激情综合| 久久免费影院| 久久国产中文字幕| 久久国产精品久久w女人spa| 色综合视频一区二区三区日韩| 91免费精品国偷自产在线在线| 国产精品a级| 亚洲1234区| 国产精品美女久久久| 日韩中文字幕| 国产一区二区三区久久| 亚洲视频综合| 在线精品视频在线观看高清| 中文字幕亚洲影视| 国产欧美高清| 精精国产xxxx视频在线播放 | 日韩欧美另类中文字幕| 麻豆国产精品一区二区三区| 精品三级久久| 在线亚洲观看| 欧美日韩一区二区三区四区在线观看| 久久精品国产免费| 欧美99久久| 欧美视频二区| 天堂√8在线中文| 欧美一级专区| 老司机精品视频在线播放| 99久久夜色精品国产亚洲1000部| 视频一区在线视频| 欧美精品二区| 激情综合在线| 久久国产视频网| 视频二区不卡| 日本亚洲三级在线| 日韩精品专区| 日本一区二区三区视频在线看| 久久久久久色| 久久免费黄色| 日韩精品第一| 成人国产综合| aa国产精品| 国产成人精品一区二区免费看京| 国产高清一区| 国产精品玖玖玖在线资源| 久久蜜桃av| 免费在线亚洲欧美| 日韩影院精彩在线| 午夜影院一区| 国产欧美一区二区三区精品观看 | 欧美91精品| 久久的色偷偷| 日韩中文字幕麻豆| 久久精品一本| 亚洲人成亚洲精品| 亚洲午夜av| 久久69成人|