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

您的位置:首頁技術(shù)文章
文章詳情頁

python tkinter實現(xiàn)連連看游戲

瀏覽:35日期:2022-07-05 11:20:22

需要自己添加圖片素材呦

python tkinter實現(xiàn)連連看游戲

運行效果:

python tkinter實現(xiàn)連連看游戲

完整代碼

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date : 2017-10-02 15:19:24# @Author : Salamander(1906747819@qq.com)# @Link : http://51lucy.comimport os, randomimport tkinter as tkimport tkinter.messageboxfrom PIL import Image, ImageTkclass MainWindow():__gameTitle = '連連看游戲'__windowWidth = 700__windowHeigth = 500__icons = []__gameSize = 10 # 游戲尺寸__iconKind = __gameSize * __gameSize / 4 # 小圖片種類數(shù)量__iconWidth = 40__iconHeight = 40__map = [] # 游戲地圖__delta = 25__isFirst = True__isGameStart = False__formerPoint = NoneEMPTY = -1NONE_LINK = 0STRAIGHT_LINK = 1ONE_CORNER_LINK = 2TWO_CORNER_LINK = 3def __init__(self):self.root = tk.Tk()self.root.title(self.__gameTitle)self.centerWindow(self.__windowWidth, self.__windowHeigth)self.root.minsize(460, 460)self.__addComponets()self.extractSmallIconList()self.root.mainloop()def __addComponets(self):self.menubar = tk.Menu(self.root, bg='lightgrey', fg='black')self.file_menu = tk.Menu(self.menubar, tearoff=0, bg='lightgrey', fg='black')self.file_menu.add_command(label='新游戲', command=self.file_new, accelerator='Ctrl+N')self.menubar.add_cascade(label='游戲', menu=self.file_menu)self.root.configure(menu=self.menubar)self.canvas = tk.Canvas(self.root, bg = ’white’, width = 450, height = 450)self.canvas.pack(side=tk.TOP, pady = 5)self.canvas.bind(’<Button-1>’, self.clickCanvas) def centerWindow(self, width, height): screenwidth = self.root.winfo_screenwidth() screenheight = self.root.winfo_screenheight() size = ’%dx%d+%d+%d’ % (width, height, (screenwidth - width)/2, (screenheight - height)/2) self.root.geometry(size)def file_new(self, event=None):self.iniMap()self.drawMap()self.__isGameStart = Truedef clickCanvas(self, event):if self.__isGameStart:point = self.getInnerPoint(Point(event.x, event.y))# 有效點擊坐標if point.isUserful() and not self.isEmptyInMap(point):if self.__isFirst:self.drawSelectedArea(point)self.__isFirst= Falseself.__formerPoint = pointelse:if self.__formerPoint.isEqual(point):self.__isFirst = Trueself.canvas.delete('rectRedOne')else:linkType = self.getLinkType(self.__formerPoint, point)if linkType[’type’] != self.NONE_LINK:# TODO Animationself.ClearLinkedBlocks(self.__formerPoint, point)self.canvas.delete('rectRedOne')self.__isFirst = Trueif self.isGameEnd():tk.messagebox.showinfo('You Win!', 'Tip')self.__isGameStart = Falseelse:self.__formerPoint = pointself.canvas.delete('rectRedOne')self.drawSelectedArea(point)# 判斷游戲是否結(jié)束def isGameEnd(self):for y in range(0, self.__gameSize):for x in range(0, self.__gameSize):if self.__map[y][x] != self.EMPTY:return Falsereturn True’’’提取小頭像數(shù)組’’’def extractSmallIconList(self):imageSouce = Image.open(r’imagesNARUTO.png’)for index in range(0, int(self.__iconKind)):region = imageSouce.crop((self.__iconWidth * index, 0, self.__iconWidth * index + self.__iconWidth - 1, self.__iconHeight - 1))self.__icons.append(ImageTk.PhotoImage(region))’’’初始化地圖 存值為0-24’’’def iniMap(self):self.__map = [] # 重置地圖tmpRecords = []records = []for i in range(0, int(self.__iconKind)):for j in range(0, 4):tmpRecords.append(i)total = self.__gameSize * self.__gameSizefor x in range(0, total):index = random.randint(0, total - x - 1)records.append(tmpRecords[index])del tmpRecords[index]# 一維數(shù)組轉(zhuǎn)為二維,y為高維度for y in range(0, self.__gameSize):for x in range(0, self.__gameSize):if x == 0:self.__map.append([])self.__map[y].append(records[x + y * self.__gameSize])’’’根據(jù)地圖繪制圖像’’’def drawMap(self):self.canvas.delete('all')for y in range(0, self.__gameSize):for x in range(0, self.__gameSize):point = self.getOuterLeftTopPoint(Point(x, y))im = self.canvas.create_image((point.x, point.y), image=self.__icons[self.__map[y][x]], anchor=’nw’, tags = ’im%d%d’ % (x, y))’’’獲取內(nèi)部坐標對應矩形左上角頂點坐標’’’def getOuterLeftTopPoint(self, point):return Point(self.getX(point.x), self.getY(point.y))’’’獲取內(nèi)部坐標對應矩形中心坐標’’’def getOuterCenterPoint(self, point):return Point(self.getX(point.x) + int(self.__iconWidth / 2), self.getY(point.y) + int(self.__iconHeight / 2))def getX(self, x):return x * self.__iconWidth + self.__deltadef getY(self, y):return y * self.__iconHeight + self.__delta’’’獲取內(nèi)部坐標’’’def getInnerPoint(self, point):x = -1y = -1for i in range(0, self.__gameSize):x1 = self.getX(i)x2 = self.getX(i + 1)if point.x >= x1 and point.x < x2:x = ifor j in range(0, self.__gameSize):j1 = self.getY(j)j2 = self.getY(j + 1)if point.y >= j1 and point.y < j2:y = jreturn Point(x, y)’’’選擇的區(qū)域變紅,point為內(nèi)部坐標’’’def drawSelectedArea(self, point):pointLT = self.getOuterLeftTopPoint(point)pointRB = self.getOuterLeftTopPoint(Point(point.x + 1, point.y + 1))self.canvas.create_rectangle(pointLT.x, pointLT.y, pointRB.x - 1, pointRB.y - 1, outline = ’red’, tags = 'rectRedOne')’’’消除連通的兩個塊’’’def ClearLinkedBlocks(self, p1, p2):self.__map[p1.y][p1.x] = self.EMPTYself.__map[p2.y][p2.x] = self.EMPTYself.canvas.delete(’im%d%d’ % (p1.x, p1.y))self.canvas.delete(’im%d%d’ % (p2.x, p2.y))’’’地圖上該點是否為空’’’def isEmptyInMap(self, point):if self.__map[point.y][point.x] == self.EMPTY:return Trueelse:return False’’’獲取兩個點連通類型’’’def getLinkType(self, p1, p2):# 首先判斷兩個方塊中圖片是否相同if self.__map[p1.y][p1.x] != self.__map[p2.y][p2.x]:return { ’type’: self.NONE_LINK }if self.isStraightLink(p1, p2):return {’type’: self.STRAIGHT_LINK}res = self.isOneCornerLink(p1, p2)if res:return {’type’: self.ONE_CORNER_LINK,’p1’: res}res = self.isTwoCornerLink(p1, p2)if res:return {’type’: self.TWO_CORNER_LINK,’p1’: res[’p1’],’p2’: res[’p2’]}return {’type’: self.NONE_LINK}’’’直連’’’def isStraightLink(self, p1, p2):start = -1end = -1# 水平if p1.y == p2.y:# 大小判斷if p2.x < p1.x:start = p2.xend = p1.xelse:start = p1.xend = p2.xfor x in range(start + 1, end):if self.__map[p1.y][x] != self.EMPTY:return Falsereturn Trueelif p1.x == p2.x:if p1.y > p2.y:start = p2.yend = p1.yelse:start = p1.yend = p2.yfor y in range(start + 1, end):if self.__map[y][p1.x] != self.EMPTY:return Falsereturn Truereturn Falsedef isOneCornerLink(self, p1, p2):pointCorner = Point(p1.x, p2.y)if self.isStraightLink(p1, pointCorner) and self.isStraightLink(pointCorner, p2) and self.isEmptyInMap(pointCorner):return pointCornerpointCorner = Point(p2.x, p1.y)if self.isStraightLink(p1, pointCorner) and self.isStraightLink(pointCorner, p2) and self.isEmptyInMap(pointCorner):return pointCornerdef isTwoCornerLink(self, p1, p2):for y in range(-1, self.__gameSize + 1):pointCorner1 = Point(p1.x, y)pointCorner2 = Point(p2.x, y)if y == p1.y or y == p2.y:continueif y == -1 or y == self.__gameSize:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner2, p2):return {’p1’: pointCorner1, ’p2’: pointCorner2}else:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner1, pointCorner2) and self.isStraightLink(pointCorner2, p2) and self.isEmptyInMap(pointCorner1) and self.isEmptyInMap(pointCorner2):return {’p1’: pointCorner1, ’p2’: pointCorner2}# 橫向判斷for x in range(-1, self.__gameSize + 1):pointCorner1 = Point(x, p1.y)pointCorner2 = Point(x, p2.y)if x == p1.x or x == p2.x:continueif x == -1 or x == self.__gameSize:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner2, p2):return {’p1’: pointCorner1, ’p2’: pointCorner2}else:if self.isStraightLink(p1, pointCorner1) and self.isStraightLink(pointCorner1, pointCorner2) and self.isStraightLink(pointCorner2, p2) and self.isEmptyInMap(pointCorner1) and self.isEmptyInMap(pointCorner2):return {’p1’: pointCorner1, ’p2’: pointCorner2}class Point():def __init__(self, x, y):self.x = xself.y = ydef isUserful(self):if self.x >= 0 and self.y >= 0:return Trueelse:return False’’’判斷兩個點是否相同’’’def isEqual(self, point):if self.x == point.x and self.y == point.y:return Trueelse:return False’’’克隆一份對象’’’def clone(self):return Point(self.x, self.y)’’’改為另一個對象’’’def changeTo(self, point):self.x = point.xself.y = point.yMainWindow()

以上就是python tkinter實現(xiàn)連連看游戲的詳細內(nèi)容,更多關(guān)于python tkinter連連看的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
裤袜国产欧美精品一区| 久久久国产精品一区二区中文| 美女一区网站| 日韩精彩视频在线观看| 综合视频一区| 中文无码日韩欧| 亚洲婷婷丁香| 日韩黄色在线观看| 日本精品在线播放| 日韩精品一区二区三区中文| 青草国产精品久久久久久| 久久国产人妖系列| 国产乱码精品一区二区亚洲| 麻豆高清免费国产一区| 欧美一级鲁丝片| 免费日韩精品中文字幕视频在线| 在线精品一区| 国产精品蜜月aⅴ在线| 欧美精品91| 伊人久久大香线蕉av不卡| 三级在线观看一区二区| 国产日韩一区二区三区在线| 国产成人精品三级高清久久91| 久久中文字幕av| 涩涩涩久久久成人精品| 国产精久久一区二区| 欧美国产91| 欧美日韩夜夜| 神马午夜久久| 日本亚洲最大的色成网站www | 亚洲人www| 丰满少妇一区| 老司机精品久久| 久久亚洲黄色| 综合激情视频| 蜜桃av.网站在线观看| 日韩精品a在线观看91| 日本欧美不卡| 国产日韩一区二区三区在线| 99久久九九| 国产日本久久| 在线视频精品| 99精品视频在线| 91嫩草精品| 在线成人动漫av| 久久精品三级| 欧美日韩精品一区二区三区视频| 亚洲五月婷婷| av高清不卡| 免费在线亚洲欧美| 欧美综合社区国产| 久久亚洲视频| 欧美1级日本1级| 精品视频自拍| 国产精品.xx视频.xxtv| 国产精品毛片| 999久久久91| av最新在线| 国产精品久久久久久久久久妞妞| 久久青草久久| 久久国产日韩| 久久国产电影| 午夜欧美精品| 国产视频欧美| 午夜在线一区| 亚洲图片久久| 国产探花一区| 国产一区二区三区日韩精品 | 噜噜噜久久亚洲精品国产品小说| 亚洲女同av| 成人片免费看| 成人午夜亚洲| 久久精品在线| 首页国产欧美久久| 亚洲精选成人| 欧美天堂一区二区| 国产精品自拍区| 欧美激情五月| a天堂资源在线| 99成人在线视频| 久久成人精品| 热久久久久久| 国产videos久久| 国产一区日韩欧美| 久久福利影视| 国产精品丝袜在线播放| 国产视频一区二区在线播放| 精品资源在线| 99在线|亚洲一区二区| 久久国产人妖系列| 裤袜国产欧美精品一区| 亚洲激情国产| 日本精品国产| 999国产精品999久久久久久| 亚洲九九精品| 伊伊综合在线| 国产日韩欧美一区在线| 欧美日韩色图| 欧美国产三级| 欧美日韩四区| 精品久久影院| 国产精品呻吟| 国产日韩免费| 亚洲欧美成人综合| 国产精品白丝久久av网站| 国产二区精品| 国产一区二区三区日韩精品| 中文不卡在线| 日韩在线观看不卡| 国产精品网站在线看| 免费中文字幕日韩欧美| 日韩a一区二区| 国产精品久久久久久妇女| 视频一区视频二区中文字幕| 欧产日产国产精品视频| 国产精品久久国产愉拍| 欧美日韩国产综合网| 久久一区欧美| 国产欧美日韩在线一区二区 | 欧美精品1区| 欧美午夜网站| 国产人成精品一区二区三| 亚洲视频电影在线| 久久性天堂网| 午夜在线播放视频欧美| 国内激情久久| 国产精品av一区二区| 日韩一区二区在线免费| 久久亚洲资源中文字| **爰片久久毛片| 欧美日本精品| 免费看一区二区三区| 国产高清亚洲| 国产成人精选| 亚洲第一区色| 每日更新成人在线视频| 噜噜噜躁狠狠躁狠狠精品视频| 性一交一乱一区二区洋洋av| 久热re这里精品视频在线6| 美国三级日本三级久久99| 亚洲主播在线| 日本不卡视频在线观看 | 国产精品99精品一区二区三区∴| 国产美女撒尿一区二区| 国产精品欧美日韩一区| 国内揄拍国内精品久久| 中文字幕在线看片| 欧美亚洲精品在线| 亚洲深夜福利在线观看| 国产精品亚洲产品| 日韩福利一区| 亚洲在线一区| 日本aⅴ亚洲精品中文乱码| 91精品国产经典在线观看 | 久久精品123| 一区二区亚洲视频| 欧美视频二区| 中文字幕成在线观看| 欧美日韩视频| 国产精品美女久久久久久不卡| 中文字幕系列一区| 日本va欧美va瓶| 欧美色图国产精品| 91精品国产经典在线观看| 久久婷婷丁香| 欧美激情亚洲| 一本综合精品| 日韩中文在线播放| 日韩av影院| 欧美日韩三区| 黄色在线网站噜噜噜| 日av在线不卡| 亚洲一级少妇| 国产一区福利| 欧美日韩一区自拍| 蜜桃视频欧美| 精品一区二区三区四区五区| 久久成人精品| 欧美亚洲国产激情| 成人国产精选| 国产免费av国片精品草莓男男| 久久国产精品99国产| 久久青草久久| 日韩免费av| 久久精品国产精品亚洲毛片| 亚洲人成在线影院| 亚洲先锋成人| 国产精品成久久久久| 久久99精品久久久野外观看| 91精品国产经典在线观看 | 久久只有精品| 日本视频在线一区| 中文字幕日韩亚洲| 欧美精选一区二区三区| 国产精品99一区二区| 99精品在线| re久久精品视频| 午夜在线播放视频欧美| 亚洲成人免费| 国产精品女主播一区二区三区|