主頁 >  其他 > 快來看!我把小時候最喜歡的連連看游戲源代碼拿來了~

快來看!我把小時候最喜歡的連連看游戲源代碼拿來了~

2021-09-01 15:56:54 其他

哈嘍~大家好,我是恰恰,好久不見,我是一個不太喜歡玩游戲的人,但是小時候特別喜歡玩連連看,很消磨時間,所以我找來了連連看游戲的源代碼,畢竟熱愛才能學習的更久,興趣是最好的老師對吧!

另外還給同學們準備了其他學習資料,需要更多學習資料、軟體安裝包的同學可以點擊鏈接免費領取 :

https://docs.qq.com/doc/DZmpWZHpqZFFFZGhh?pub=1&dver=2.1.27114328

Python連連看小游戲源代碼,經典小游戲連連看Python源程式,連連看游戲資源包請前往:https://pan.baidu.com/s/1a5cmM8noQbGmH_WG49-maA下載,提取碼請回復:連連看提取碼,程式運行截圖:

main.py

''''''import os, randomimport tkinter as tkimport tkinter.messageboxfrom PIL import Image, ImageTk
root = tk.Tk()
class MainWindow():  __gameTitle = "連連看游戲"  __windowWidth = 700  __windowHeigth = 500  __icons = []  __gameSize = 10 # 游戲尺寸  __iconKind = __gameSize * __gameSize / 4 # 小圖片種類數量  __iconWidth = 40  __iconHeight = 40  __map = [] # 游戲地圖  __delta = 25  __isFirst = True  __isGameStart = False  __formerPoint = None  EMPTY = -1  NONE_LINK = 0  STRAIGHT_LINK = 1  ONE_CORNER_LINK = 2  TWO_CORNER_LINK = 3
  def __init__(self):    root.title(self.__gameTitle)    self.centerWindow(self.__windowWidth, self.__windowHeigth)    root.minsize(460, 460)
    self.__addComponets()    self.extractSmallIconList()


  def __addComponets(self):    self.menubar = tk.Menu(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)    root.configure(menu=self.menubar)
    self.canvas = tk.Canvas(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 = root.winfo_screenwidth()    screenheight = root.winfo_screenheight()    size = '%dx%d+%d+%d' % (width, height, (screenwidth - width)/2, (screenheight - height)/2)    root.geometry(size)

  def file_new(self, event=None):    self.iniMap()    self.drawMap()    self.__isGameStart = True
  def 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= False          self.__formerPoint = point        else:          if self.__formerPoint.isEqual(point):            self.__isFirst = True            self.canvas.delete("rectRedOne")          else:            linkType = self.getLinkType(self.__formerPoint, point)            if linkType['type'] != self.NONE_LINK:              # TODO Animation              self.ClearLinkedBlocks(self.__formerPoint, point)              self.canvas.delete("rectRedOne")              self.__isFirst = True              if self.isGameEnd():                tk.messagebox.showinfo("You Win!", "Tip")                self.__isGameStart = False            else:              self.__formerPoint = point              self.canvas.delete("rectRedOne")              self.drawSelectedArea(point)

  # 判斷游戲是否結束  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 False    return True
              
  '''  提取小頭像陣列  '''  def extractSmallIconList(self):    imageSouce = Image.open('圖片/NARUTO.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.__gameSize    for x in range(0, total):      index = random.randint(0, total - x - 1)      records.append(tmpRecords[index])      del tmpRecords[index]
    # 一維陣列轉為二維,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])
  '''  根據地圖繪制影像  '''  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))
  '''  獲取內部坐標對應矩形左上角頂點坐標  '''  def getOuterLeftTopPoint(self, point):    return Point(self.getX(point.x), self.getY(point.y))
  '''  獲取內部坐標對應矩形中心坐標  '''  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.__delta
  def getY(self, y):    return y * self.__iconHeight + self.__delta
  '''  獲取內部坐標  '''  def getInnerPoint(self, point):    x = -1    y = -1
    for i in range(0, self.__gameSize):      x1 = self.getX(i)      x2 = self.getX(i + 1)      if point.x >= x1 and point.x < x2:        x = i
    for j in range(0, self.__gameSize):      j1 = self.getY(j)      j2 = self.getY(j + 1)      if point.y >= j1 and point.y < j2:        y = j
    return Point(x, y)
  '''  選擇的區域變紅,point為內部坐標  '''  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.EMPTY    self.__map[p2.y][p2.x] = self.EMPTY    self.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 True    else:      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 = -1    end = -1    # 水平    if p1.y == p2.y:      # 大小判斷      if p2.x < p1.x:        start = p2.x        end = p1.x      else:        start = p1.x        end = p2.x      for x in range(start + 1, end):        if self.__map[p1.y][x] != self.EMPTY:          return False      return True    elif p1.x == p2.x:      if p1.y > p2.y:        start = p2.y        end = p1.y      else:        start = p1.y        end = p2.y      for y in range(start + 1, end):        if self.__map[y][p1.x] != self.EMPTY:          return False      return True    return False
  def 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 pointCorner
    pointCorner = Point(p2.x, p1.y)    if self.isStraightLink(p1, pointCorner) and self.isStraightLink(pointCorner, p2) and self.isEmptyInMap(pointCorner):      return pointCorner
  def 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:        continue      if 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:        continue      if 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 = x    self.y = y
  def isUserful(self):    if self.x >= 0 and self.y >= 0:      return True    else:      return False            '''  判斷兩個點是否相同  '''  def isEqual(self, point):    if self.x == point.x and self.y == point.y:      return True    else:      return False
  '''  克隆一份物件  '''  def clone(self):    return Point(self.x, self.y)

  '''  改為另一個物件  '''  def changeTo(self, point):    self.x = point.x    self.y = point.y
m = MainWindow()root.mainloop()


可能大多數的同學想學習Python都是想賺錢,說著聽人說學了有用,也有人是因為行業內卷,但是我還是覺得學習任何東西熱愛是最好的老師,Python可以實作很多事情,都是很有趣的,讓人很有成就感的,所以同學們要跟我一起探索Python的樂趣,熱愛它并且學會它哦~

給同學們準備了其他學習資料,需要更多學習資料、軟體安裝包的同學可以點擊鏈接免費領取 :

https://docs.qq.com/doc/DZmpWZHpqZFFFZGhh?pub=1&dver=2.1.27114328

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296678.html

標籤:其他

上一篇:【C語言專案】掃雷-滑鼠版

下一篇:佇列和堆疊------《啊哈!演算法》

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more