您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Python Pygame如何實現打磚塊游戲”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Python Pygame如何實現打磚塊游戲”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
Python版本:3.6.4
相關模塊:
pygame模塊;
以及一些Python自帶的模塊。
安裝Python并添加到環境變量,pip安裝需要的相關模塊即可。
在cmd窗口運行Game18.py文件即可。
效果如下:
視頻鏈接
游戲規則(摘自維基百科):
打磚塊是一種電子游戲。屏幕上部有若干層磚塊,一個球在屏幕上方的磚塊和墻壁、屏幕下方的移動短板和兩側墻壁之間來回彈,當球碰到磚塊時,球會反彈,而磚塊會消失。玩家要控制螢幕下方的板子,讓“球”通過撞擊消去所有的“磚塊”,球碰到螢幕底邊就會消失,所有的球消失則游戲失敗。把磚塊全部消去就可以破關。
板子操作方式:按“→”向右,按“←”向左。
逐步實現:
游戲實現起來其實非常簡單。首先,我們根據游戲規則定義3個游戲精靈類,分別是:
板子類;
球類;
磚塊類。
先定義游戲精靈的好處是方便后續游戲精靈類之間的碰撞檢測以及游戲精靈的操作管理等。具體而言,對于板子類,其應當具有根據玩家操作而移動等功能,其代碼實現如下:
'''板子''' 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代表磚塊所在的位置。
OK,接下來可以考慮實現游戲主循環了。基本的邏輯就是:
即每關結束判斷一下是過關了還是GG了,過關了就進入下一關,否則就直接進入結束界面。當然最后一關是個例外,因為結束之后肯定要進入結束界面。具體而言,主邏輯代碼實現如下:
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)
讀到這里,這篇“Python Pygame如何實現打磚塊游戲”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。