电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

python實現井字棋小游戲

瀏覽:19日期: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 編程
相關文章:
主站蜘蛛池模板: 长沙发电机-湖南发电机-柴油发电机供应厂家-长沙明邦智能科技 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 衬四氟_衬氟储罐_四氟储罐-无锡市氟瑞特防腐科技有限公司 | 贴片电感_贴片功率电感_贴片绕线电感_深圳市百斯特电子有限公司 贴片电容代理-三星电容-村田电容-风华电容-国巨电容-深圳市昂洋科技有限公司 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 顶呱呱交易平台-行业领先的公司资产交易服务平台 | 滁州高低温冲击试验箱厂家_安徽高低温试验箱价格|安徽希尔伯特 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | 众品家具网-家具品牌招商_家具代理加盟_家具门户的首选网络媒体。 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 机房监控|动环监控|动力环境监控系统方案产品定制厂家 - 迈世OMARA | 联系我们-腾龙公司上分客服微信19116098882 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | Honsberg流量计-Greisinger真空表-气压计-上海欧臻机电设备有限公司 | 昆山新莱洁净应用材料股份有限公司-卫生级蝶阀,无菌取样阀,不锈钢隔膜阀,换向阀,离心泵 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 重庆小面培训_重庆小面技术培训学习班哪家好【终身免费复学】 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 磁力去毛刺机_去毛刺磁力抛光机_磁力光饰机_磁力滚抛机_精密金属零件去毛刺机厂家-冠古科技 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | 鲸鱼视觉 -数字展厅多媒体互动展示制作公司 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 南京兰江泵业有限公司-水解酸化池潜水搅拌机-絮凝反应池搅拌机-好氧区潜水推进器 | 无痕胶_可移胶_无痕双面胶带_可移无痕胶厂家-东莞凯峰 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 防爆暖风机_防爆电暖器_防爆电暖风机_防爆电热油汀_南阳市中通智能科技集团有限公司 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 欧景装饰设计工程有限公司-无锡欧景装饰官网 | SF6环境监测系统-接地环流在线监测装置-瑟恩实业 | 铝合金脚手架厂家-专注高空作业平台-深圳腾达安全科技 |