我們在pycharm里新建一個工程,起名字為star-wars。工程創建好后,我們新建一個src文件夾用來存放代碼。接下來在src下創建Main.py,代碼如下:
```
import pygame
from src.plane import plane
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()
```
我們運行Main.py,游戲效果如下:

## 定義飛機類
定義完游戲主框架后,我們來創建自己的飛機類,我們新增一個python文件,起名字為plane。plane代碼如下:
```
import pygame
class Plane(pygame.sprite.Sprite):
def __init__(self):
super(plane, self).__init__()
self.image = pygame.image.load('../assets/plane1.png')
self.rect = self.image.get_rect()
def update(self, *args):
self.rect.x = self.rect.x - 1
```
在main.py里,做如下更改:
1)我們在代碼的最上面引入plane`from src.plane import plane`。
2)往all_sprite里增加我們的plane
```
plane = Plane()
all_sprites.add(plane)
```
此時,游戲運行效果如下:

## 飛機上下左右移動
接下來,我們用鍵盤的上下左右鍵來移動飛機。
1)修改plane類,在里面增加上下左右移動方法。
```
def update(self, *args):
pass
def move_up(self):
self.rect.y -= self.speed
def move_down(self):
self.rect.y += self.speed
def move_right(self):
self.rect.x += self.speed
def move_left(self):
self.rect.x -= self.speed
```
2)在Main.py里獲取用戶按下的按鍵
```
# 獲得用戶所有的鍵盤輸入序列(如果用戶通過鍵盤發出“向上”的指令,其他類似)
key_pressed = pygame.key.get_pressed()
```
3)在代碼開頭引入pygame的按鍵常量:`from pygame.locals import *
` ,根據按鍵不同來調用plane的移動方法
```
if key_pressed[K_w] or key_pressed[K_UP]:
plane.move_up()
if key_pressed[K_s] or key_pressed[K_DOWN]:
plane.move_down()
if key_pressed[K_a] or key_pressed[K_LEFT]:
plane.move_left()
if key_pressed[K_d] or key_pressed[K_RIGHT]:
plane.move_right()
```
此時,游戲效果如下:

為了防止飛機飛出屏幕,我們做一下邊界檢查:
1)plane類:
```
def move_up(self):
if self.rect.y > 0:
self.rect.y -= self.speed
else:
self.rect.y = 0
def move_down(self):
# 注意這里還有一個飛機本身的高度
if self.rect.y < self.bg_size[1] - 60:
self.rect.y += self.speed
else:
self.rect.y = self.bg_size[1] - 60
def move_left(self):
if self.rect.x > 0:
self.rect.x -= self.speed
else:
self.rect.x = 0
def move_right(self):
# 注意這里還有一個飛機本身的寬度
if self.rect.x < self.bg_size[0] - 60:
self.rect.x += self.speed
else:
self.rect.x = self.bg_size[0] - 60
```
2)main.py
```
plane = Plane((WIDTH, HEIGHT))
all_sprites.add(plane)
```
下節課,我們來完成添加子彈和敵艦。
- 課程介紹
- 搭建環境
- 什么是計算機
- 程序是怎么運行的
- 安裝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射擊游戲(五)