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

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

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

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

需要自己添加圖片素材呦

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

運(yùn)行效果:

python tkinter實(shí)現(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 # 小圖片種類(lèi)數(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))# 有效點(diǎn)擊坐標(biāo)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為高維度f(wàn)or 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)部坐標(biāo)對(duì)應(yīng)矩形左上角頂點(diǎn)坐標(biāo)’’’def getOuterLeftTopPoint(self, point):return Point(self.getX(point.x), self.getY(point.y))’’’獲取內(nèi)部坐標(biāo)對(duì)應(yīng)矩形中心坐標(biāo)’’’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)部坐標(biāo)’’’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)部坐標(biāo)’’’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')’’’消除連通的兩個(gè)塊’’’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))’’’地圖上該點(diǎn)是否為空’’’def isEmptyInMap(self, point):if self.__map[point.y][point.x] == self.EMPTY:return Trueelse:return False’’’獲取兩個(gè)點(diǎn)連通類(lèi)型’’’def getLinkType(self, p1, p2):# 首先判斷兩個(gè)方塊中圖片是否相同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’’’判斷兩個(gè)點(diǎn)是否相同’’’def isEqual(self, point):if self.x == point.x and self.y == point.y:return Trueelse:return False’’’克隆一份對(duì)象’’’def clone(self):return Point(self.x, self.y)’’’改為另一個(gè)對(duì)象’’’def changeTo(self, point):self.x = point.xself.y = point.yMainWindow()

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

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩激情精品| 国产成人免费视频网站视频社区| 久久99国产精品视频| 精品国产免费人成网站| 国产综合婷婷| 婷婷综合成人| 国产精品久久久久蜜臀| 日本激情一区| 91精品国产成人观看| 久久美女性网| 欧美韩日一区| 国产精品女主播一区二区三区| 日韩中文字幕区一区有砖一区 | 麻豆9191精品国产| 亚洲毛片在线| 日韩av免费大片| 亚洲一区亚洲| 久久国产人妖系列| 亚洲一级特黄| 国产精品成人自拍| 91精品二区| 精品入口麻豆88视频| 在线手机中文字幕| 午夜亚洲精品| 日本欧美国产| 视频一区中文字幕精品| 日韩av在线播放网址| 羞羞答答国产精品www一本| 久久av综合| 亚洲精品进入| 免费视频国产一区| 美女视频黄久久| 视频一区二区三区中文字幕| 国产欧美日韩一区二区三区在线| 人人香蕉久久| 久久久久亚洲精品中文字幕| 亚洲欧美网站| 日韩av专区| 欧美天堂在线| 免费美女久久99| 在线一区欧美| 91精品一区二区三区综合在线爱| 日韩1区2区3区| 欧美日中文字幕| 欧美黄色一区| 日本不卡视频在线观看| 在线精品小视频| 国产精品高颜值在线观看| 久久先锋影音| 99国产精品一区二区| 欧美亚洲专区| 亚洲精品乱码| 裤袜国产欧美精品一区| 久久一区视频| 精品99在线| 国产 日韩 欧美 综合 一区| 久久精品国产亚洲aⅴ| 日本成人在线网站| 亚洲毛片在线免费| 免费久久精品| 婷婷成人基地| 日韩午夜精品| 国产农村妇女精品一二区| 欧美激情aⅴ一区二区三区| 伊人www22综合色| 亚洲激情婷婷| 亚洲午夜国产成人| 日韩大片在线观看| 色婷婷综合网| 久久人人88| 欧美亚洲国产一区| 欧美午夜精品一区二区三区电影| 91嫩草亚洲精品| 精品久久97| 老鸭窝一区二区久久精品| 粉嫩av一区二区三区四区五区 | 欧美日韩四区| 日韩极品在线观看| 精品久久一区| 国产亚洲毛片| 国产精品.xx视频.xxtv| 天堂中文在线播放| 亚洲制服欧美另类| 成人精品视频| 亚洲永久精品唐人导航网址| 精品午夜久久| 一区二区电影在线观看| 精品久久一区| 亚洲在线网站| 福利一区在线| 伊人精品久久| 韩国一区二区三区视频| 亚洲免费在线| 日韩大片在线观看| 亚洲精一区二区三区| 欧美韩日一区| 日本成人在线不卡视频| 亚洲小说欧美另类婷婷| 麻豆一区在线| 日韩精品一页| 国产专区一区| 丰满少妇一区| 日韩精品a在线观看91| 欧美日韩黑人| 国产欧美啪啪| 亚洲欧洲免费| 午夜欧美视频| 亚洲二区视频| 久久久水蜜桃av免费网站| 久久wwww| 国产剧情在线观看一区| 日韩精品福利一区二区三区| 99国产一区| 黄色欧美日韩| 久久精品国产亚洲夜色av网站| 国产成人1区| 国产欧美日韩精品高清二区综合区| 免费日韩一区二区三区| 香蕉成人av| 亚洲女同中文字幕| 日本欧美一区| 免费污视频在线一区| 久久蜜桃精品| 好吊一区二区三区| 91久久在线| 日本不卡一二三区黄网| 国产视频一区二| 精品视频自拍| 四虎4545www国产精品 | 日本成人在线视频网站| 六月天综合网| 亚洲精品九九| 国产精品网在线观看| 老司机免费视频一区二区| 老色鬼精品视频在线观看播放| 国产精品mm| 久久夜夜操妹子| 亚洲综合专区| 久久精品国产久精国产爱| 日韩欧美午夜| 亚洲香蕉久久| 91精品韩国| 亚洲久草在线| 成人综合一区| 日韩在线播放一区二区| 亚洲2区在线| 97在线精品| 日韩一区二区三区精品视频第3页| 久久精品人人| 亚洲一区二区网站| 99久久久久久中文字幕一区| 亚洲午夜免费| 日韩在线高清| 国产乱子精品一区二区在线观看| 欧美精品资源| 国产精品午夜一区二区三区| 天堂网在线观看国产精品| 国产精品一线| 首页国产欧美日韩丝袜| 成人一区而且| 国产精品一区二区免费福利视频| 国产精品探花在线观看| 国产综合欧美| 国产一二在线播放| 国产精品大片| 亚洲精品影视| 蜜桃久久av| 精品一区在线| 成人精品天堂一区二区三区| 国产亚洲精品美女久久| 亚洲最新av| 黑丝一区二区| 国产在线|日韩| 国产一区三区在线播放| 国产精品xxx在线观看| 亚洲精品中文字幕99999| 中文字幕成在线观看| 精品国产亚洲一区二区三区在线 | 国产精品亚洲综合在线观看| 伊人精品久久| 综合一区二区三区| 亚洲精品中文字幕99999| 日韩国产一区二| 国产精品探花在线观看| 日本蜜桃在线观看视频| 蜜桃视频欧美| 日韩高清中文字幕一区| 亚欧成人精品| 日本久久综合| 久久亚洲视频| 麻豆国产91在线播放| 美女网站一区| 欧美亚洲色图校园春色| 欧美日韩视频免费观看| 婷婷五月色综合香五月| 中文字幕一区日韩精品| 蜜臀久久99精品久久久画质超高清| 久久久人人人| 欧洲激情综合| 黄色亚洲在线|