1. 從官網(wǎng) python.org 下載 Python 并安裝。 
如果安裝遇到問題,可來交流群討論。
2. 用 pip 安裝 pygame 模塊 
3. 編寫代碼,在窗口里顯示一張飛機(jī)圖片 import pygame
pygame.init() screen = pygame.display.set_mode((450,800), 0, 32) plane = pygame.image.load('plane.png') screen.blit(plane, (200, 400))
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() pygame.display.update()

4. 讓飛機(jī)隨著鼠標(biāo)位置進(jìn)行移動 import pygame
pygame.init() WHITE = (255, 255, 255) screen = pygame.display.set_mode((450,800), 0, 32) plane = pygame.image.load('plane.png')
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() x, y = pygame.mouse.get_pos() x -= plane.get_width()/2 y -= plane.get_height()/2 screen.fill(WHITE) screen.blit(plane, (x, y))
pygame.display.update()
5. 創(chuàng)建更多的敵機(jī),從屏幕頂部向下移動 import pygame import random
pygame.init() WHITE = (255, 255, 255) screen = pygame.display.set_mode((450,800), 0, 32) plane = pygame.image.load('plane.png')
class Enemy: def restart(self): self.x = random.randint(50, 400) self.y = random.randint(-200, -50) self.speed = random.random() * 2 + 0.5 def __init__(self): self.restart() self.image = pygame.image.load('enemy.png').convert_alpha()
def move(self): if self.y < 800: self.y += self.speed else: self.restart()
class Plane: def restart(self): self.x = 200 self.y = 600 def __init__(self): self.restart() self.image = pygame.image.load('plane.png').convert_alpha()
def move(self): x, y = pygame.mouse.get_pos() x-= self.image.get_width() / 2 y-= self.image.get_height() / 2 self.x = x self.y = y
plane = Plane() enemies = [] for i in range(5): enemies.append(Enemy())
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 繪制背景 screen.fill(WHITE) # 繪制敵機(jī) for e in enemies: e.move() screen.blit(e.image, (e.x,e.y)) # 繪制玩家 plane.move() screen.blit(plane.image, (plane.x, plane.y))
pygame.display.update()

6. 增加碰撞檢測。如果撞上敵機(jī),則游戲結(jié)束 # …… # 前略
gameover = False font = pygame.font.Font(None, 32)
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 繪制背景 screen.fill(WHITE)
if not gameover: # 繪制敵機(jī) for e in enemies: if checkCrash(e, plane): gameover = True e.move() screen.blit(e.image, (e.x,e.y)) # 繪制玩家 plane.move() screen.blit(plane.image, (plane.x, plane.y)) else: text = font.render("Game Over!", 1, (0, 0, 0)) screen.blit(text, (165, 400))
pygame.display.update()

7. 發(fā)射子彈,消滅敵機(jī) # ……
class Bullet: def __init__(self): self.x = 0 self.y = -1 self.image = pygame.image.load('bullet.png').convert_alpha() self.active = False
def move(self): if self.active: self.y -= 5 if self.y < 0: self.active = False
def restart(self): mouseX, mouseY = pygame.mouse.get_pos() self.x = mouseX - self.image.get_width() / 2 self.y = mouseY - self.image.get_height() / 2 self.active = True
# ……
def checkHit(enemy, bullet): if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and ( bullet.y > enemy.y and bullet.y < enemy.y + enemy.image.get_height() ): enemy.restart() bullet.active = False #增加返回值 return True return False
# ……
bullets = [] for i in range(10): bullets.append(Bullet()) count_b = len(bullets) index_b = 0 interval_b = 0
# ……
while True: # …… if not gameover: # 發(fā)射子彈 interval_b -= 1 if interval_b < 0: bullets[index_b].restart() interval_b = 30 index_b = (index_b + 1) % count_b for b in bullets: if b.active: for e in enemies: checkHit(e, b) b.move() screen.blit(b.image, (b.x, b.y)) # ……

8. 記錄游戲分?jǐn)?shù) # …… #分?jǐn)?shù) score = 0
while True: # …… if not gameover: # …… # 繪制敵機(jī) for e in enemies: if checkCrash(e, plane): gameover = True e.move() screen.blit(e.image, (e.x,e.y)) # 繪制玩家 plane.move() screen.blit(plane.image, (plane.x, plane.y)) #在屏幕左上角顯示分?jǐn)?shù) text = font.render("Socre: %d" % score, 1, (0, 0, 0)) screen.blit(text, (0, 0)) else: text = font.render("Game Over!", 1, (0, 0, 0)) screen.blit(text, (165, 380)) #在屏幕中央顯示分?jǐn)?shù) text = font.render("Socre: %d" % score, 1, (0, 0, 0)) screen.blit(text, (165, 420))
pygame.display.update()

9. 再增加一點(diǎn)點(diǎn)細(xì)節(jié),美化貼圖、添加音效等 ?
這樣就開發(fā)出了一個打飛機(jī)游戲,你學(xué)會了嗎? Crossin的新書《碼上行動:用ChatGPT學(xué)會Python編程》已經(jīng)上市了。本書以ChatGPT為輔助,系統(tǒng)全面地講解了如何掌握Python編程,適合Python零基礎(chǔ)入門的讀者學(xué)習(xí)。【點(diǎn)此查看詳細(xì)介紹】購買后可加入讀者交流群,Crossin為你開啟陪讀模式,解答你在閱讀本書時的一切疑問。
|