国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python畢設(shè)分享 記憶翻牌小游戲設(shè)計與實(shí)現(xiàn) (源碼)

這篇具有很好參考價值的文章主要介紹了python畢設(shè)分享 記憶翻牌小游戲設(shè)計與實(shí)現(xiàn) (源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


0 項(xiàng)目簡介

?? Hi,各位同學(xué)好呀,這里是L學(xué)長!

??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品

python小游戲畢設(shè) 記憶翻牌小游戲設(shè)計與實(shí)現(xiàn) (源碼)

?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分)

  • 難度系數(shù):3分

  • 工作量:3分

  • 創(chuàng)新點(diǎn):3分

  • 項(xiàng)目獲取:https://gitee.com/sinonfin/system-sharing文章來源地址http://www.zghlxwxcb.cn/news/detail-779737.html


1 游戲介紹

用python自帶的tkinter包實(shí)現(xiàn)的一個記憶翻牌小游戲。

2 實(shí)現(xiàn)效果

python小游戲平衡木小游戲設(shè)計與實(shí)現(xiàn),python
python小游戲平衡木小游戲設(shè)計與實(shí)現(xiàn),python

3 開發(fā)工具

3.1 環(huán)境配置

  • Python版本:3.6.4

  • 相關(guān)模塊:

  • pygame模塊;

  • 以及一些Python自帶的模塊。

3.2 Pygame介紹

簡介

Pygame是一系列專門為編寫電子游戲而設(shè)計的Python模塊(modules)。Pygame在已經(jīng)非常優(yōu)秀的SDL庫的基礎(chǔ)上增加了許多功能。這讓你能夠用Python語言編寫出豐富多彩的游戲程序。

Pygame可移植性高,幾乎能在任何平臺和操作系統(tǒng)上運(yùn)行。

Pygame已經(jīng)被下載過數(shù)百萬次。

Pygame免費(fèi)開源。它在LGPL許可證(Lesser General Public License,GNU寬通用公共許可證)下發(fā)行。使用Pygame,你可以創(chuàng)造出免費(fèi)開源,可共享,或者商業(yè)化的游戲。詳情請見LGPL許可證。

優(yōu)點(diǎn)

  • 能夠輕松使用多核CPU(multi core CPUs) :如今雙核CPU很常用,8核CPU在桌面系統(tǒng)中也很便宜,而利用好多核系統(tǒng),能讓你在你的游戲中實(shí)現(xiàn)更多東西。特定的pygame函數(shù)能夠釋放令人生畏的python GIL(全局解釋器鎖),這幾乎是你用C語言才能做的事。

  • 核心函數(shù)用最優(yōu)化的C語言或匯編語言編寫:C語言代碼通常比Python代碼運(yùn)行速度快10-20倍。而匯編語言編寫的代碼(assembly code)比Python甚至快到100多倍。

  • 安裝便捷:一般僅需包管理程序或二進(jìn)制系統(tǒng)程序便能安裝。

  • 真正地可移植:支持Linux (主要發(fā)行版), Windows (95, 98, ME, 2000, XP, Vista, 64-bit Windows,), Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX等操作系統(tǒng).也能支持AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS and OS/2,但是還沒有受到官方認(rèn)可。你也可以在手持設(shè)備,游戲控制臺, One Laptop Per Child (OLPC) computer項(xiàng)目的電腦等設(shè)備中使用pygame.

  • 用法簡單:無論是小孩子還是大人都能學(xué)會用pygame來制作射擊類游戲。

  • 很多Pygame游戲已發(fā)行:其中包括很多游戲大賽入圍作品、非常受歡迎的開源可分享的游戲。

  • 由你來控制主循環(huán):由你來調(diào)用pygame的函數(shù),pygame的函數(shù)并不需要調(diào)用你的函數(shù)。當(dāng)你同時還在使用其他庫來編寫各種各種的程序時,這能夠?yàn)槟闾峁O大的掌控權(quán)。

  • 不需要GUI就能使用所有函數(shù):僅在命令行中,你就可以使用pygame的某些函數(shù)來處理圖片,獲取游戲桿輸入,播放音樂……

  • 對bug反應(yīng)迅速:很多bug在被上報的1小時內(nèi)就能被我們修復(fù)。雖然有時候我們確實(shí)會卡在某一個bug上很久,但大多數(shù)時候我們都是很不錯的bug修復(fù)者。如今bug的上報已經(jīng)很少了,因?yàn)樵S多bug早已被我們修復(fù)。

  • 代碼量少:pygame并沒有數(shù)以萬計的也許你永遠(yuǎn)用不到的冗雜代碼。pygame的核心代碼一直保持著簡潔特點(diǎn),其他附加物諸如GUI庫等,都是在核心代碼之外單獨(dú)設(shè)計研發(fā)的。

  • 模塊化:你可以單獨(dú)使用pygame的某個模塊。想要換著使用一個別的聲音處理庫?沒問題。pygame的很多核心模塊支持獨(dú)立初始化與使用。

最小開發(fā)框架

import pygame,sys #sys是python的標(biāo)準(zhǔn)庫,提供Python運(yùn)行時環(huán)境變量的操控

pygame.init()  #內(nèi)部各功能模塊進(jìn)行初始化創(chuàng)建及變量設(shè)置,默認(rèn)調(diào)用
size = width,height = 800,600  #設(shè)置游戲窗口大小,分別是寬度和高度
screen = pygame.display.set_mode(size)  #初始化顯示窗口
pygame.display.set_caption("小游戲程序")  #設(shè)置顯示窗口的標(biāo)題內(nèi)容,是一個字符串類型
while True:  #無限循環(huán),直到Python運(yùn)行時退出結(jié)束
    for event in pygame.event.get():  #從Pygame的事件隊列中取出事件,并從隊列中刪除該事件
        if event.type == pygame.QUIT:  #獲得事件類型,并逐類響應(yīng)
            sys.exit()   #用于退出結(jié)束游戲并退出          
    pygame.display.update()  #對顯示窗口進(jìn)行更新,默認(rèn)窗口全部重繪

代碼執(zhí)行流程

python小游戲平衡木小游戲設(shè)計與實(shí)現(xiàn),python

4 具體實(shí)現(xiàn)

這里介紹一下游戲的實(shí)現(xiàn)原理。

首先,我們還是借助pygame來播放一首我們喜歡的背景音樂吧:

'''播放背景音樂'''
def playbgm(self):
    pygame.init()
    pygame.mixer.init()
    pygame.mixer.music.load(cfg.AUDIOPATHS['bgm'])
    pygame.mixer.music.play(-1, 0.0)

然后,我們初始化一下tkinter的主界面:

# 主界面句柄
self.root = Tk()
self.root.wm_title('Flip Card by Memory —— DCGAME')

并在主界面上顯示16張未被翻面的卡片:

# 游戲界面中的卡片字典
self.game_matrix = {}
# 背景圖像
self.blank_image = PhotoImage(data=cfg.IMAGEPATHS['blank'])
# 卡片背面
self.cards_back_image = PhotoImage(data=cfg.IMAGEPATHS['cards_back'])
# 所有卡片的索引
cards_list = list(range(8)) + list(range(8))
random.shuffle(cards_list)
# 在界面上顯示所有卡片的背面
for r in range(4):
    for c in range(4):
        position = f'{r}_{c}'
        self.game_matrix[position] = Label(self.root, image=self.cards_back_image)
        self.game_matrix[position].back_image = self.cards_back_image
        self.game_matrix[position].file = str(cards_list[r * 4 + c])
        self.game_matrix[position].show = False
        self.game_matrix[position].bind('<Button-1>', self.clickcallback)
        self.game_matrix[position].grid(row=r, column=c)

這16張卡片共包含8張完全不同的圖像,我們游戲的目標(biāo)就是在有限的時間內(nèi),將16張卡片中包含相同的圖像的卡片兩兩配對。匹配的規(guī)則是鼠標(biāo)連續(xù)地點(diǎn)擊兩張卡片,若卡片背面的圖像相同,則匹對成功,否則配對失敗。游戲主要考察玩家的記憶力,因?yàn)橛螒蜻€規(guī)定游戲翻開的卡片數(shù)量至多有兩張,否則一開始被點(diǎn)擊而翻開的卡片將再次被蓋上(若該張卡片沒有匹對成功)。

接著,我們來定義一些有用的變量:

# 已經(jīng)顯示正面的卡片
self.shown_cards = []
# 場上存在的卡片數(shù)量
self.num_existing_cards = len(cards_list)
# 顯示游戲剩余時間
self.num_seconds = 30
self.time = Label(self.root, text=f'Time Left: {self.num_seconds}')
self.time.grid(row=6, column=3, columnspan=2)

并讓界面一開始可以出現(xiàn)在電腦屏幕的居中位置:

居中顯示

self.root.withdraw()
self.root.update_idletasks()
x = (self.root.winfo_screenwidth() - self.root.winfo_reqwidth()) / 2
y = (self.root.winfo_screenheight() - self.root.winfo_reqheight()) / 2
self.root.geometry('+%d+%d' % (x, y))
self.root.deiconify()

由于是在有限的時間內(nèi)完成所有卡片的匹對,所以我們來寫一個定時函數(shù),并實(shí)時等更新顯示當(dāng)前游戲的剩余時間:

'''計時'''
def tick(self):
    if self.num_existing_cards == 0: return
    if self.num_seconds != 0:
        self.num_seconds -= 1
        self.time['text'] = f'Time Left: {self.num_seconds}'
        self.time.after(1000, self.tick)
    else:
        is_restart = messagebox.askyesno('Game Over', 'You fail since time up, do you want to play again?')
        if is_restart: self.restart()
        else: self.root.destroy()

最后,我們在鼠標(biāo)左鍵點(diǎn)擊卡片時,用代碼定義一下游戲的響應(yīng)規(guī)則,以實(shí)現(xiàn)我們想要的功能:

'''點(diǎn)擊回調(diào)函數(shù)'''
def clickcallback(self, event):
    card = event.widget
    if card.show: return
    # 之前沒有卡片被翻開
    if len(self.shown_cards) == 0:
        self.shown_cards.append(card)
        image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png')))
        card.configure(image=image)
        card.show_image = image
        card.show = True
    # 之前只有一張卡片被翻開
    elif len(self.shown_cards) == 1:
        # --之前翻開的卡片和現(xiàn)在的卡片一樣
        if self.shown_cards[0].file == card.file:
            def delaycallback():
                self.shown_cards[0].configure(image=self.blank_image)
                self.shown_cards[0].blank_image = self.blank_image
                card.configure(image=self.blank_image)
                card.blank_image = self.blank_image
                self.shown_cards.pop(0)
                self.score_sound.play()
            self.num_existing_cards -= 2
            image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png')))
            card.configure(image=image)
            card.show_image = image
            card.show = True
            card.after(300, delaycallback)
        # --之前翻開的卡片和現(xiàn)在的卡片不一樣
        else:
            self.shown_cards.append(card)
            image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png')))
            card.configure(image=image)
            card.show_image = image
            card.show = True
    # 之前有兩張卡片被翻開
    elif len(self.shown_cards) == 2:
        # --之前翻開的第一張卡片和現(xiàn)在的卡片一樣
        if self.shown_cards[0].file == card.file:
            def delaycallback():
                self.shown_cards[0].configure(image=self.blank_image)
                self.shown_cards[0].blank_image = self.blank_image
                card.configure(image=self.blank_image)
                card.blank_image = self.blank_image
                self.shown_cards.pop(0)
                self.score_sound.play()
            self.num_existing_cards -= 2
            image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png')))
            card.configure(image=image)
            card.show_image = image
            card.show = True
            card.after(300, delaycallback)
        # --之前翻開的第二張卡片和現(xiàn)在的卡片一樣
        elif self.shown_cards[1].file == card.file:
            def delaycallback():
                self.shown_cards[1].configure(image=self.blank_image)
                self.shown_cards[1].blank_image = self.blank_image
                card.configure(image=self.blank_image)
                card.blank_image = self.blank_image
                self.shown_cards.pop(1)
                self.score_sound.play()
            self.num_existing_cards -= 2
            image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png')))
            card.configure(image=image)
            card.show_image = image
            card.show = True
            card.after(300, delaycallback)
        # --之前翻開的卡片和現(xiàn)在的卡片都不一樣
        else:
            self.shown_cards.append(card)
            self.shown_cards[0].configure(image=self.cards_back_image)
            self.shown_cards[0].show = False
            self.shown_cards.pop(0)
            image = ImageTk.PhotoImage(Image.open(os.path.join(self.card_dir, card.file+'.png')))
            self.shown_cards[-1].configure(image=image)
            self.shown_cards[-1].show_image = image
            self.shown_cards[-1].show = True
    # 判斷游戲是否已經(jīng)勝利
    if self.num_existing_cards == 0:
        is_restart = messagebox.askyesno('Game Over', 'Congratulations, you win, do you want to play again?')
        if is_restart: self.restart()
        else: self.root.destroy()

ok,大功告成。代碼邏輯比較簡單,就不展開講啦,小伙伴們簡單看下,肯定就能看懂啦。

5 最后

項(xiàng)目獲?。?/strong>https://gitee.com/sinonfin/system-sharing

到了這里,關(guān)于python畢設(shè)分享 記憶翻牌小游戲設(shè)計與實(shí)現(xiàn) (源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python畢設(shè)分享 走迷宮小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 走迷宮小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 走迷宮小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲取: htt

    2024年01月21日
    瀏覽(28)
  • python畢設(shè)分享 消消樂小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 消消樂小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 消消樂小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?htt

    2024年02月04日
    瀏覽(23)
  • python畢設(shè)分享 打磚塊小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 打磚塊小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 打磚塊小游戲設(shè)計與實(shí)現(xiàn) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):3分 項(xiàng)目獲?。?https://gite

    2024年02月03日
    瀏覽(24)
  • python畢設(shè)分享 俄羅斯方塊小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 俄羅斯方塊小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 俄羅斯方塊小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?/p>

    2024年02月03日
    瀏覽(25)
  • python畢設(shè)分享 外星人入侵小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 外星人入侵小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 外星人入侵小游戲設(shè)計與實(shí)現(xiàn) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?https://gitee.com/sinonfin/s

    2024年02月05日
    瀏覽(27)
  • 【unity3D】unity記憶翻牌小游戲教程(簡單詳細(xì))

    【unity3D】unity記憶翻牌小游戲教程(簡單詳細(xì))

    游戲開發(fā)的 學(xué)習(xí)記錄 ⑨ (最近在做得游戲里想加一個類似于記憶翻牌小游戲得部分,然后在網(wǎng)上收集了資料學(xué)習(xí)了一下,學(xué)會后寫下這份制作記錄,希望可以幫到你~) ??一位大佬的博客,寫的很詳細(xì):【Unity3D游戲教程】記憶翻牌游戲 (大家可以先看大佬這篇,我寫這篇

    2024年02月07日
    瀏覽(194)
  • python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計與實(shí)現(xiàn) (源碼)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 仿谷歌瀏覽器小恐龍小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)

    2024年02月03日
    瀏覽(30)
  • python畢設(shè)分享 python坦克大戰(zhàn)小游戲

    python畢設(shè)分享 python坦克大戰(zhàn)小游戲

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 坦克大戰(zhàn)小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?/p>

    2024年02月03日
    瀏覽(32)
  • python畢設(shè)分享 python炸彈人小游戲

    python畢設(shè)分享 python炸彈人小游戲

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 **python小游戲畢設(shè) 炸彈人小游戲設(shè)計與實(shí)現(xiàn) ** ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲取: https:/

    2024年01月25日
    瀏覽(16)
  • python畢設(shè)分享 python推箱子小游戲

    python畢設(shè)分享 python推箱子小游戲

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計項(xiàng)目作品 python小游戲畢設(shè) 推箱子小游戲設(shè)計與實(shí)現(xiàn) (源碼) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):4分 項(xiàng)目獲?。?htt

    2024年02月05日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包