婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用tkinter實現(xiàn)三子棋游戲

使用tkinter實現(xiàn)三子棋游戲

熱門標簽:電銷機器人系統(tǒng)廠家鄭州 遼寧智能外呼系統(tǒng)需要多少錢 阿里電話機器人對話 qt百度地圖標注 舉辦過冬奧會的城市地圖標注 螳螂科技外呼系統(tǒng)怎么用 正安縣地圖標注app 400電話申請資格 地圖地圖標注有嘆號

本文實例為大家分享了tkinter實現(xiàn)三子棋游戲的具體代碼,供大家參考,具體內(nèi)容如下

整體游戲很簡單。下棋,判斷勝利或者平局。沒有加入電腦下棋的算法。

游戲界面:

代碼:

import tkinter as tk
from tkinter import messagebox, Label, Button
from TicTacToeModel import TicTacToeModel
import requests
from PIL import ImageTk, Image
from io import BytesIO
 
 
class TicTacToeGUI:
 
 def __init__(self, root):
  # Create the model instance ...
  self.model = TicTacToeModel()
 
  # Create a 2D list to hold an array of buttons ...
  self.b = []
  for row in range(self.model.boardSize):
   q = []
   for col in range(self.model.boardSize):
    q.append(None)
   self.b.append(q)
  # You can now address b like a 2D matrix e.g. b[0][0]
 
  # Create the GUI .....
  menubar = tk.Menu()
 
  menubar.add_command(label='ResetGame', command=self.resetGUI)
  menubar.add_command(label='ResetImage', command=self.resetImg)
  menubar.add_command(label='Quit', command=root.destroy)
  root.config(menu=menubar)
  self.frame1 = tk.Frame(root, width=400, height=300, bg="GREY", borderwidth=2)
  self.frame2 = tk.Frame(root, width=400, height=200, bg="WHITE", borderwidth=2)
  self.createGUIAssets()
  self.createframe2()
  self.frame2.pack()
  self.frame1.pack()
 
  messagebox.showinfo("Hello", "Human player to start!")
 
 def getImg(self):
  headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
  }
  # img_src = ' https://api.ixiaowai.cn/api/api.php'
  img_src = ' https://api.ixiaowai.cn/gqapi/gqapi.php'
  response = requests.get(url=img_src, headers=headers)
  # print(response)
  image = Image.open(BytesIO(response.content))
  x, y = image.size
  y_s = 200
  x_s = int(x * y_s / y)
  img = image.resize((x_s, y_s), Image.ANTIALIAS)
  image = ImageTk.PhotoImage(img)
  return image
 
 def resetImg(self):
  self.image = self.getImg()
  self.Label.config(image=self.image)
 
 def createframe2(self):
  self.image = self.getImg()
  self.Label = tk.Label(self.frame2, image=self.image)
  self.Label.pack()
  # image.show()
 
 def createGUIAssets(self):
  for x in range(self.model.boardSize):
   self.frame1.columnconfigure(x, pad=20)
   self.frame1.grid_rowconfigure(x, pad=20)
 
  for row in range(self.model.boardSize):
   for col in range(self.model.boardSize):
    self.b[row][col] = Button(self.frame1, text='', bg='WHITE',
           relief='groove', borderwidth=20,
           height=3, width=8,
           command=lambda row=row, col=col: self.takeTurn(row, col))
    self.b[row][col].grid(row=row, column=col)
 
 def takeTurn(self, row, col):
  if not self.model.playSpace(row, col):
   return
  else:
   self.b[row][col].configure(bg="Green")
   status = self.model.checkWinStatus()
   if status == 1: # Player win
    messagebox.showinfo("Result", "Player wins!!!!")
    self.resetGUI()
   elif status == 0: # Draw
    messagebox.showinfo("Result", "Draw!!!!")
    self.resetGUI()
   elif status == -2: # On going ...
    (r, c) = self.model.computerTurn()
    self.b[r][c].configure(bg='red')
    if self.model.checkWinStatus() == -1:
     messagebox.showinfo("Result", "Computer wins!!!!")
     self.resetGUI()
   else:
    # Should not get here ...
    pass
 
 def resetGUI(self):
  for row in range(self.model.boardSize):
   for col in range(self.model.boardSize):
    self.b[row][col].configure(bg='WHITE')
  # And reset the model ...
  self.model.resetBoard()
  self.resetImg()
 
 
def main():
 win = tk.Tk() # Create a window
 win.title("noughts-and-crosses") # Set window title
 win.geometry("400x580") # Set window size
 win.resizable(False, False) # Both x and y dimensions ...
 
 # Create the GUI as a Frame
 # and attach it to the window ...
 myApp = TicTacToeGUI(win)
 
 # Call the GUI mainloop ...
 win.mainloop()
 
 
if __name__ == "__main__":
 main()

TicTacToeModel:

import numpy as np
import random
 
 
class TicTacToeModel:
 """ The board is represented as 2D numpy array.
  A player marks their space with a 1, the
  computer with a -1"""
 
 def __init__(self):
  """Create the board as a 2D matrix"""
  self.resetBoard()
 
 def resetBoard(self):
  self.boardSize = 3
  a = (self.boardSize, self.boardSize)
  self.board = np.zeros(a)
 
 def playSpace(self, row, col):
  """User plays a space
  Return True if space can be played, False otherwise"""
  if row > self.boardSize or row  0 \

    or col > self.boardSize or col  0:
   return False
  else:
   # Check if space is occupied ...
   if self.board[row][col] != 0:
    return False
   else:
    self.board[row][col] = 1
    return True
 
 def checkWinStatus(self):
  """ Looks for 3 in a row, column or diagonal
   Return 0 if draw, 1 if the player has won
   and -1 if the computer has won, and -2 is the game is
   ongoing"""
  # Check the columns ...
  for row in range(self.boardSize):
   sum = 0
   for col in range(self.boardSize):
    sum += self.board[row][col]
   if sum == 3:
    return 1
   elif sum == -3:
    return -1
  # Check the rows ...
  for col in range(self.boardSize):
   sum = 0
   for row in range(self.boardSize):
    sum += self.board[row][col]
   if sum == 3:
    return 1
   elif sum == -3:
    return -1
 
  # Check the diagonals ...
  sum1 = 0
  sum2 = 0
  for diag in range(self.boardSize):
   sum1 += self.board[diag][diag]
   sum2 += self.board[diag][self.boardSize - 1 - diag]
  if sum1 == 3 or sum2 == 3:
   return 1
  elif sum1 == -3 or sum2 == -3:
   return -1
 
  # Check for incomplete game ...
  for row in range(self.boardSize):
   for col in range(self.boardSize):
    if self.board[row][col] == 0:
     return -2
 
  # If we get here, it's a draw ...
  return 0
 
 def computerTurn(self):
  """ The computer chooses an unoccupied
   space at random. Returns a tuple
   (row, col) when chosen"""
  # To prevent infinite loops ....
  if self.checkWinStatus() != -2:
   return (-1, -1)
  played = False
 
  while played == False:
   row = random.randrange(self.boardSize)
   col = random.randrange(self.boardSize)
   if self.board[row][col] == 0:
    self.board[row][col] = -1
    played = True
 
  return (row, col)
 
 
def main():
 # Basic check that the game works ...
 # You can expand this if you like ...
 game = TicTacToeModel()
 
 game.playSpace(0, 0)
 (r, c) = game.computerTurn()
 print(game.board)
 print(game.checkWinStatus())
 
 
if __name__ == "__main__":
 main()

更多關(guān)于python游戲的精彩文章請點擊查看以下專題:

python俄羅斯方塊游戲集合

python經(jīng)典小游戲匯總

python微信跳一跳游戲集合

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python版本五子棋的實現(xiàn)代碼
  • 用Python編寫一個國際象棋AI程序
  • python實現(xiàn)五子棋小游戲
  • python pygame實現(xiàn)五子棋小游戲
  • python實現(xiàn)井字棋游戲
  • Python實現(xiàn)的井字棋(Tic Tac Toe)游戲示例
  • python實現(xiàn)簡單五子棋游戲
  • python實現(xiàn)五子棋小程序
  • 使用python實現(xiàn)簡單五子棋游戲
  • python實現(xiàn)五子棋游戲

標簽:信陽 昭通 淘寶好評回訪 興安盟 隨州 合肥 濟源 阜新

巨人網(wǎng)絡(luò)通訊聲明:本文標題《使用tkinter實現(xiàn)三子棋游戲》,本文關(guān)鍵詞  使用,tkinter,實現(xiàn),三子,棋,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《使用tkinter實現(xiàn)三子棋游戲》相關(guān)的同類信息!
  • 本頁收集關(guān)于使用tkinter實現(xiàn)三子棋游戲的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产高清不卡一区二区| 国产99久久久精品| 国产美女精品一区二区三区| 欧美日韩国产一二三| 一区二区三区中文字幕在线观看| 韩国一区二区三区| 2020国产精品| 成人高清视频在线| 国产精品久线观看视频| 成a人片国产精品| 国产精品久久久久久久久免费丝袜| 国产+成+人+亚洲欧洲自线| 精品美女一区二区| 国产一区免费电影| 国产亚洲欧美日韩在线一区| 麻豆精品视频在线观看| 日韩欧美视频在线| 丁香啪啪综合成人亚洲小说| 亚洲国产精品t66y| 一本大道久久a久久综合婷婷| 欧美精品一区二区三区视频| 粉嫩一区二区三区在线看| 亚洲影院久久精品| 久久久久国产精品人| 国产激情一区二区三区| 国产精品私人自拍| 欧美精品免费视频| 蜜臀av性久久久久av蜜臀妖精| 欧美r级电影在线观看| 免费看黄色91| 国产精品久久久久桃色tv| 韩国v欧美v亚洲v日本v| 久久国产三级精品| 精品久久久久久久久久久久久久久久久 | 国产成人欧美日韩在线电影| 在线精品视频一区二区三四| 国产一区二区三区在线观看免费| 91国偷自产一区二区三区成为亚洲经典 | 亚洲国产中文字幕| 久久免费美女视频| 日本不卡在线视频| 99国产欧美另类久久久精品| 久久成人免费电影| 欧美va在线播放| 欧美色电影在线| 亚洲免费电影在线| 国产农村妇女毛片精品久久麻豆| 国产一区在线观看视频| 日本不卡在线视频| 日韩一区二区不卡| 国产一区二区三区免费播放| 夜夜揉揉日日人人青青一国产精品| 奇米亚洲午夜久久精品| 亚洲成人精品影院| 91首页免费视频| 成人av资源站| 亚洲精品乱码久久久久久久久 | 精品国产sm最大网站免费看| 亚洲色图在线视频| 欧美日韩中文精品| 午夜视频一区二区| 欧美tickle裸体挠脚心vk| 日韩丝袜美女视频| 欧美精品久久天天躁| 偷窥国产亚洲免费视频| 午夜视频一区在线观看| 6080yy午夜一二三区久久| 欧美日精品一区视频| 日本不卡视频在线| 美女在线观看视频一区二区| 欧美日韩视频在线一区二区| 色视频成人在线观看免| 性做久久久久久| 一区二区三区加勒比av| 欧美性色aⅴ视频一区日韩精品| 成人av网址在线观看| 色综合久久中文字幕| 亚洲码国产岛国毛片在线| 亚洲一区二区三区四区在线免费观看| 在线观看一区二区精品视频| 5858s免费视频成人| 美美哒免费高清在线观看视频一区二区| 三级欧美在线一区| 中文字幕国产一区| 亚洲精品欧美在线| 日韩免费高清av| 亚洲亚洲精品在线观看| 亚洲国产视频直播| 国产婷婷色一区二区三区在线| 中文字幕乱码亚洲精品一区| 欧美专区亚洲专区| 久久久综合网站| 色综合天天狠狠| 色呦呦一区二区三区| 精品影视av免费| 性欧美疯狂xxxxbbbb| 国产色一区二区| 亚洲最大成人网4388xx| 欧美男人的天堂一二区| 亚洲免费色视频| 免费在线欧美视频| 一区二区三区欧美| 国产成人综合在线| 蜜桃91丨九色丨蝌蚪91桃色| 91性感美女视频| 成人一区二区在线观看| www.欧美日韩| 国产·精品毛片| 欧美精品电影在线播放| 色网站国产精品| 日韩一区二区视频| 久久国产精品露脸对白| 日本乱人伦一区| 99久久久无码国产精品| 911国产精品| 亚洲理论在线观看| 精品一区二区三区免费观看| 北岛玲一区二区三区四区| 免费不卡在线视频| 欧美性做爰猛烈叫床潮| 国产经典欧美精品| 久久这里只精品最新地址| 欧美日韩在线不卡| 中文字幕日韩欧美一区二区三区| 69成人精品免费视频| 亚洲大片精品永久免费| 五月天丁香久久| 欧美亚洲日本国产| 欧美视频一区二区在线观看| 国产日产欧美一区二区视频| 欧美成人激情免费网| 日本aⅴ亚洲精品中文乱码| 久久成人免费电影| 欧美一区二区三区在线电影| 日韩欧美在线观看一区二区三区| 午夜激情一区二区| 最新欧美精品一区二区三区| 成人免费三级在线| 在线观看av一区二区| 亚洲精品视频在线观看网站| 亚洲一二三区不卡| 欧美亚洲日本一区| 欧美日韩极品在线观看一区| 国产精品盗摄一区二区三区| 亚洲激情第一区| 色婷婷av一区二区三区gif| 在线中文字幕不卡| 亚洲一区二区三区中文字幕| 青青国产91久久久久久| 精品免费99久久| 国产精品视频线看| 欧洲一区二区三区在线| 亚洲国产精品精华液网站| 亚洲gay无套男同| 亚洲欧洲日韩在线| 99视频热这里只有精品免费| 99精品桃花视频在线观看| 色88888久久久久久影院野外| 欧美一级日韩一级| 国产精品对白交换视频| 蜜臀av亚洲一区中文字幕| 成+人+亚洲+综合天堂| 岛国精品在线播放| 欧美激情艳妇裸体舞| fc2成人免费人成在线观看播放| 国产精品538一区二区在线| 亚洲电影中文字幕在线观看| 丁香婷婷综合激情五月色| 久久网站最新地址| 成人v精品蜜桃久久一区| 欧美一区二区三区不卡| 亚洲欧美激情视频在线观看一区二区三区| 欧美天天综合网| 蜜臀av国产精品久久久久| 久久国产精品色| 亚洲综合色成人| 欧美人与性动xxxx| 高清不卡在线观看| 精品亚洲成a人| 欧美一区二区三区在线观看视频| 欧美日韩美少妇| 国产99精品国产| 精品系列免费在线观看| 日本一二三不卡| 亚洲免费伊人电影| 欧美午夜电影网| 不卡的av电影| 欧美精品日韩综合在线| 久久久精品中文字幕麻豆发布| 亚洲视频免费在线| 日韩精品一区二区三区在线观看 | 色呦呦一区二区三区| 26uuu国产电影一区二区| 91高清视频免费看| 亚洲欧洲精品天堂一级| 欧美一级夜夜爽| 日韩国产欧美一区二区三区| 亚洲精品免费电影| 日本电影亚洲天堂一区| a级精品国产片在线观看|