最近在带NCT2级的课程,孩子们开始学习比较大的项目,今天记录一个小飞机游戏的模板代码:
完成功能:五颜六色的陨石下落,五颜六色的子弹飞出去,小飞机左右移动。
成果图,如下
废话不多说,上代码:
import pygame
import random
#定义屏幕宽,高
WIDTH = 480
HEIGHT = 600
#创建颜色
COLOR_GREEN = (0, 255, 0)
COLOR_BLACK = (0, 0, 0)
COLOR_RED = (255, 0, 0)
COLOR_YELLOW = (255, 255, 0)
#刷新频率
FPS = 60
#初始化
pygame.init()
#定义精灵区域
# 1. 定义飞机精灵
class Player(pygame.sprite.Sprite):
def __init__(self):
# 完成精灵初始化
pygame.sprite.Sprite.__init__(self)
# 初始化精灵图像
self.image = pygame.Surface((50,50))
self.image.fill(COLOR_GREEN)
self.rect = self.image.get_rect()
#设置长方形中心的X,Y值
self.rect.centerx = WIDTH / 2
self.rect.centery = HEIGHT - 10
def update(self):
self.speedx = 0
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.speedx = -8
if keys[pygame.K_RIGHT]:
self.speedy = 8
self.rect.x += self.speedx
if self.rect.right > WIDTH:
self.rect.right = WIDTH
if self.rect.left < 0:
self.rect.left = 0
#2. 定义陨石精灵
class Meteorite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
#定义陨石的图形
self.image = pygame.Surface((30, 40))
# 五颜六色的陨石
self.image.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
self.rect = self.image.get_rect()
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, 40)
#设定运行速度
self.speedy = random.randrange(1, 8)
self.speedx = random.randrange(-3, 3)
def update(self):
self.rect.x += self.speedx
self.rect.y += self.speedy
# 检查是否出边界
if self.rect.top > HEIGHT + 10 or self.rect.left < -30 or self.rect.right > WIDTH + 30:
self.rect.x = random.randrange(WIDTH - self.rect.width)
self.rect.y = random.randrange(-100, -40)
class Bullet(pygame.sprite.Sprite):
def __init__(self,x,y):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.Surface((10,20))
self.image.fill((random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)))
self.rect = self.image.get_rect()
# 设置出现的位置
self.rect.y = y
self.rect.centerx = x
self.speedy = -10
def update(self):
self.rect.y += self.speedy
# 子弹超出屏幕检测
if self.rect.bottom < 0:
self.kill()
# 设置屏幕
screen = pygame.display.set_mode((WIDTH,HEIGHT))
clock = pygame.time.Clock()
# 定义一个飞机对象
player = Player()
all_sprites = pygame.sprite.Group()
all_sprites.add(player)
for i in range(10):
met = Meteorite()
all_sprites.add(met)
running = True
while running:
clock.tick(FPS)
screen.fill(COLOR_BLACK)
all_sprites.update()
all_sprites.draw(screen)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
player.shoot()
if event.key == pygame.K_ESCAPE:
running = False
pygame.quit()