到目前為止,只有player sprite可以移動。接下來我們讓游戲里的所有塊都可以移動,有了上面的基礎,讓所有角色一起移動也非常方便。
首先,我們向Block類里增加一個新的update方法。當block_list被的*update*被調用時,block的*update*方法會自動被調用。
將下面的代碼加到Block類里:
```
def update(self):
""" Called each frame. """
# Move block down one pixel
self.rect.y += 1
```
在游戲的主循環中增加如下代碼:
```
# Call the update() method for all blocks in the block_list
block_list.update()
```
The code isn't perfect because the blocks fall off the screen and do not reappear. This code will improve the update function so that the blocks will reappear up top.
這個代碼還有一個小問題,block最終會移出screen并不再出現了。我們改一下update方法,讓block移出屏幕后再次重新定位到屏幕上。
```
def update(self):
# Move the block down one pixel
self.rect.y += 1
if self.rect.y > screen_height:
self.rect.y = random.randrange(-100, -10)
self.rect.x = random.randrange(0, screen_width)
```
## 優化游戲
到目前為止,pygame版本的吃豆子就完成了。我們可以對這個游戲做一些改動,讓它更好玩。
### 發射子彈

喜歡玩射擊游戲?我們可以將這個代碼做稍微的改動,增加一個bullets角色來代表子彈。完整的代碼如下:ProgramArcadeGames.com/python_examples/f.php?file=bullets.py
### 增加阻礙

為了增加游戲的趣味性,我們給游戲增加點障礙物。讓player不能穿過墻面,參照代碼:ProgramArcadeGames.com/python_examples/f.php?file=move_with_walls_example.py
總結起來,開發一個pygame游戲的框架如下:
```
import pygame
import random
WIDTH = 360
HEIGHT = 480
FPS = 30
# 定義顏色常量
BLACK = (0, 0, 0)
# 1. 初始化游戲
pygame.init()
pygame.mixer.init() ## For sound
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("設計游戲")
clock = pygame.time.Clock()
# 2.游戲里的所有角色
all_sprites = pygame.sprite.Group()
# 3.游戲主循環
running = True
while running:
# 4.設置游戲幀率
clock.tick(FPS)
# 5. 處理用戶輸入
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 6. 更新所有角色
all_sprites.update()
# 7. 渲染游戲背景
screen.fill(BLACK)
# 8. 渲染所有角色
all_sprites.draw(screen)
## 9. 更新游戲畫面
pygame.display.flip()
# 退出游戲
pygame.quit()
```
整個游戲開發過程如下:
1. 初始化pygame
2. 添加游戲里的sprite
3. 定義游戲主循環
4. 設置游戲幀率
5. 處理用戶輸入
6. 更新所有角色狀態
7. 重新渲染游戲窗口背景
8. 渲染所有角色
9. 更新游戲畫面
10. 退出游戲
掌握了這個框架,我們就可以完成各種各樣的游戲了。
理解了pygame的核心sprite模塊,我們就可以自己的游戲了。下節課,我們就來一起完成一個酷酷的射擊游戲。
- 課程介紹
- 搭建環境
- 什么是計算機
- 程序是怎么運行的
- 安裝python
- 項目實例-安裝IDE
- 變量和簡單數據類型
- 數據&變量
- 數字
- 字符串
- 布爾類型
- 項目實例
- 容器-列表
- 容器
- 列表
- 項目實例
- 容器-字典
- 定義字典
- 項目實例
- 數據類型總結
- 條件語句
- python條件語句
- 項目實例
- 循環語句
- for循環
- while循環
- 項目實例
- 函數
- 5.0函數定義
- 5.2函數實戰
- 6.文件系統
- 6.1 文件系統介紹&python查找文件
- 6.2 用python讀寫文件
- 7. python操作時間
- 8.面向對象
- 8.1 類和對象
- 8.2 繼承和重寫
- 8.3 面向對象項目實戰
- 9 GUI編程
- 9.1 GUI基礎
- 9.2 備忘清單GUI版
- 10.網絡
- 10.1 網絡的發展
- 10.2 python http
- 11.web開發
- 11.1 web基礎&HTML
- 11.2 CSS&JavaScript
- 11.3 網頁計算器
- 11.3 網站開發實戰-播客搭建
- 11.3 python-web
- 12. 項目實戰-數據處理
- 13. 項目實戰-AI入門
- 13.1 環境搭建
- 心得
- 13.2 Tensorflow的瓜怎么吃
- 14 pygame
- 14.1 pygame Helloworld
- 14.4 pygame 動畫基礎 Animation
- 從0開始學python第14.5節 pygame 加載圖片和聲音
- 從0開始學python第14.6節 pygame.sprite(上)
- 14.7 pygame.sprite模塊(下)
- 14.8 pygame射擊游戲(一)
- pygame射擊游戲(二)
- 14.8 pygame射擊游戲(三)
- 14.8 pygame射擊游戲(四)
- 14.8 pygame射擊游戲(五)