1 項目簡介
?? Hi,各位同學好呀,這里是L學長!
??今天向大家分享一個今年(2022)最新完成的畢業(yè)設計項目作品
python小游戲畢設 打磚塊小游戲設計與實現
?? 學長根據實現的難度和等級對項目進行評分(最低0分,滿分5分)
-
難度系數:3分
-
工作量:3分
-
創(chuàng)新點:3分
-
項目獲?。?/strong>https://gitee.com/sinonfin/system-sharing
1 游戲介紹
利用python制作的一個打磚塊小游戲。
游戲規(guī)則:
打磚塊是一種電子游戲。屏幕上部有若干層磚塊,一個球在屏幕上方的磚塊和墻壁、屏幕下方的移動短板和兩側墻壁之間來回彈,當球碰到磚塊時,球會反彈,而磚塊會消失。玩家要控制螢幕下方的板子,讓“球”通過撞擊消去所有的“磚塊”,球碰到螢幕底邊就會消失,所有的球消失則游戲失敗。把磚塊全部消去就可以破關。
板子操作方式:按“→”向右,按“←”向左。
2 實現效果
3 開發(fā)工具
3.1 環(huán)境配置
-
Python版本:3.6.4
-
相關模塊:
-
pygame模塊;
-
以及一些Python自帶的模塊。
3.2 Pygame介紹
簡介
Pygame是一系列專門為編寫電子游戲而設計的Python模塊(modules)。Pygame在已經非常優(yōu)秀的SDL庫的基礎上增加了許多功能。這讓你能夠用Python語言編寫出豐富多彩的游戲程序。
Pygame可移植性高,幾乎能在任何平臺和操作系統上運行。
Pygame已經被下載過數百萬次。
Pygame免費開源。它在LGPL許可證(Lesser General Public License,GNU寬通用公共許可證)下發(fā)行。使用Pygame,你可以創(chuàng)造出免費開源,可共享,或者商業(yè)化的游戲。詳情請見LGPL許可證。
優(yōu)點
-
能夠輕松使用多核CPU(multi core CPUs) :如今雙核CPU很常用,8核CPU在桌面系統中也很便宜,而利用好多核系統,能讓你在你的游戲中實現更多東西。特定的pygame函數能夠釋放令人生畏的python GIL(全局解釋器鎖),這幾乎是你用C語言才能做的事。
-
核心函數用最優(yōu)化的C語言或匯編語言編寫:C語言代碼通常比Python代碼運行速度快10-20倍。而匯編語言編寫的代碼(assembly code)比Python甚至快到100多倍。
-
安裝便捷:一般僅需包管理程序或二進制系統程序便能安裝。
-
真正地可移植:支持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等操作系統.也能支持AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS and OS/2,但是還沒有受到官方認可。你也可以在手持設備,游戲控制臺, One Laptop Per Child (OLPC) computer項目的電腦等設備中使用pygame.
-
用法簡單:無論是小孩子還是大人都能學會用pygame來制作射擊類游戲。
-
很多Pygame游戲已發(fā)行:其中包括很多游戲大賽入圍作品、非常受歡迎的開源可分享的游戲。
-
由你來控制主循環(huán):由你來調用pygame的函數,pygame的函數并不需要調用你的函數。當你同時還在使用其他庫來編寫各種各種的程序時,這能夠為你提供極大的掌控權。
-
不需要GUI就能使用所有函數:僅在命令行中,你就可以使用pygame的某些函數來處理圖片,獲取游戲桿輸入,播放音樂……
-
對bug反應迅速:很多bug在被上報的1小時內就能被我們修復。雖然有時候我們確實會卡在某一個bug上很久,但大多數時候我們都是很不錯的bug修復者。如今bug的上報已經很少了,因為許多bug早已被我們修復。
-
代碼量少:pygame并沒有數以萬計的也許你永遠用不到的冗雜代碼。pygame的核心代碼一直保持著簡潔特點,其他附加物諸如GUI庫等,都是在核心代碼之外單獨設計研發(fā)的。
-
模塊化:你可以單獨使用pygame的某個模塊。想要換著使用一個別的聲音處理庫?沒問題。pygame的很多核心模塊支持獨立初始化與使用。
最小開發(fā)框架
import pygame,sys #sys是python的標準庫,提供Python運行時環(huán)境變量的操控
pygame.init() #內部各功能模塊進行初始化創(chuàng)建及變量設置,默認調用
size = width,height = 800,600 #設置游戲窗口大小,分別是寬度和高度
screen = pygame.display.set_mode(size) #初始化顯示窗口
pygame.display.set_caption("小游戲程序") #設置顯示窗口的標題內容,是一個字符串類型
while True: #無限循環(huán),直到Python運行時退出結束
for event in pygame.event.get(): #從Pygame的事件隊列中取出事件,并從隊列中刪除該事件
if event.type == pygame.QUIT: #獲得事件類型,并逐類響應
sys.exit() #用于退出結束游戲并退出
pygame.display.update() #對顯示窗口進行更新,默認窗口全部重繪
代碼執(zhí)行流程
4 具體實現
4.1 實現游戲精靈類
游戲實現起來其實非常簡單。首先,我們根據游戲規(guī)則定義3個游戲精靈類,分別是:
- 板子類;
- 球類;
- 磚塊類。
先定義游戲精靈的好處是方便后續(xù)游戲精靈類之間的碰撞檢測以及游戲精靈的操作管理等。具體而言,對于板子類,其應當具有根據玩家操作而移動等功能,其代碼實現如下:
'''板子'''
class Paddle(pygame.sprite.Sprite):
def __init__(self, x, y, width, height, SCREENWIDTH, SCREENHEIGHT, **kwargs):
pygame.sprite.Sprite.__init__(self)
self.init_state = [x, y, width, height]
self.rect = pygame.Rect(x, y, width, height)
self.base_speed = 10
self.SCREENWIDTH = SCREENWIDTH
self.SCREENHEIGHT = SCREENHEIGHT
'''移動板子'''
def move(self, direction):
if direction == 'left':
self.rect.left = max(0, self.rect.left-self.base_speed)
elif direction == 'right':
self.rect.right = min(self.SCREENWIDTH, self.rect.right+self.base_speed)
else:
raise ValueError('Paddle.move.direction unsupport <%s>...' % direction)
return True
'''綁定到屏幕上'''
def draw(self, screen, color):
pygame.draw.rect(screen, color, self.rect)
return True
'''重置'''
def reset(self):
self.rect = pygame.Rect(self.init_state[0], self.init_state[1], self.init_state[2], self.init_state[3])
return True
對于球類,則由電腦控制其移動方式(比如撞到墻自動換方向等),其代碼實現如下:
'''球'''
class Ball(pygame.sprite.Sprite):
def __init__(self, x, y, radius, SCREENWIDTH, SCREENHEIGHT, **kwargs):
pygame.sprite.Sprite.__init__(self)
self.init_state = [x, y, radius*2, radius*2]
self.rect = pygame.Rect(x, y, radius*2, radius*2)
self.base_speed = [5, 5]
self.direction = [random.choice([1, -1]), -1]
self.radius = radius
self.SCREENWIDTH = SCREENWIDTH
self.SCREENHEIGHT = SCREENHEIGHT
'''移動球'''
def move(self):
self.rect.left += self.direction[0] * self.base_speed[0]
self.rect.top += self.direction[1] * self.base_speed[1]
if self.rect.left <= 0:
self.rect.left = 0
self.direction[0] = -self.direction[0]
elif self.rect.right >= self.SCREENWIDTH:
self.rect.right = self.SCREENWIDTH
self.direction[0] = -self.direction[0]
if self.rect.top <= 0:
self.rect.top = 0
self.direction[1] = -self.direction[1]
elif self.rect.bottom >= self.SCREENHEIGHT:
return False
return True
'''改變運動速度和方向(與拍相撞時)'''
def change(self):
self.base_speed = [random.choice([4, 5, 6]), random.choice([4, 5, 6])]
self.direction = [random.choice([1, -1]), -1]
return True
'''綁定到屏幕上'''
def draw(self, screen, color):
pygame.draw.circle(screen, color, (self.rect.left+self.radius, self.rect.top+self.radius), self.radius)
return True
'''重置'''
def reset(self):
self.rect = pygame.Rect(self.init_state[0], self.init_state[1], self.init_state[2], self.init_state[3])
return True
對于磚塊類,則比較簡單,其代碼實現如下:
'''磚塊'''
class Brick(pygame.sprite.Sprite):
def __init__(self, x, y, width, height, **kwargs):
pygame.sprite.Sprite.__init__(self)
self.init_state = [x, y, width, height]
self.rect = pygame.Rect(x, y, width, height)
'''綁定到屏幕上'''
def draw(self, screen, color):
pygame.draw.rect(screen, color, self.rect)
return True
'''重置'''
def reset(self):
self.rect = pygame.Rect(self.init_state[0], self.init_state[1], self.init_state[2], self.init_state[3])
return True
然后和以前一樣,多弄幾個關卡,每個關卡地圖都用一個.level文件來設計定義,例如這樣:
其中B代表磚塊所在的位置。
4.2 實現游戲主循環(huán)
OK,接下來可以考慮實現游戲主循環(huán)了。基本的邏輯就是:
即每關結束判斷一下是過關了還是GG了,過關了就進入下一關,否則就直接進入結束界面。當然最后一關是個例外,因為結束之后肯定要進入結束界面。具體而言,主邏輯代碼實現如下:文章來源:http://www.zghlxwxcb.cn/news/detail-787383.html
def run(self):
while True:
self.__startInterface()
for idx, levelpath in enumerate(self.cfg.LEVELPATHS):
state = self.__runLevel(levelpath)
if idx == len(self.cfg.LEVELPATHS)-1:
break
if state == 'win':
self.__nextLevel()
else:
break
if state == 'fail':
self.__endInterface(False)
else:
self.__endInterface(True)
5 最后
項目獲?。?/strong>https://gitee.com/sinonfin/system-sharing文章來源地址http://www.zghlxwxcb.cn/news/detail-787383.html
到了這里,關于python項目分享 打磚塊小游戲設計與實現 (源碼)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!