pygame 小游戏学习用源码
时间: 2023-09-20 07:13:05 浏览: 51
以下是一个简单的 Pygame 小游戏的源代码。这个游戏是一个简单的打飞机游戏,玩家控制一个小飞机,躲避敌机的攻击并射击它们。你可以用这个源代码作为学习 Pygame 编程的参考。
```python
import pygame
import random
# 初始化 Pygame
pygame.init()
# 定义一些常量
SCREEN_WIDTH = 480
SCREEN_HEIGHT = 800
ENEMY_COUNT = 5
FPS = 60
# 创建窗口
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('打飞机')
# 加载图片
background_image = pygame.image.load('background.png').convert()
player_image = pygame.image.load('player.png').convert_alpha()
enemy_image = pygame.image.load('enemy.png').convert_alpha()
bullet_image = pygame.image.load('bullet.png').convert_alpha()
# 定义游戏对象
class GameObject:
def __init__(self, x, y, image):
self.x = x
self.y = y
self.image = image
self.rect = self.image.get_rect()
self.rect.x = self.x
self.rect.y = self.y
def draw(self, surface):
surface.blit(self.image, (self.x, self.y))
# 定义玩家类
class Player(GameObject):
def __init__(self, x, y, image):
super().__init__(x, y, image)
self.speed = 5
self.bullets = []
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.x -= self.speed
if keys[pygame.K_RIGHT]:
self.x += self.speed
if keys[pygame.K_UP]:
self.y -= self.speed
if keys[pygame.K_DOWN]:
self.y += self.speed
if keys[pygame.K_SPACE]:
self.fire()
# 更新子弹
for bullet in self.bullets:
bullet.update()
def fire(self):
bullet = Bullet(self.x + self.rect.width / 2, self.y)
self.bullets.append(bullet)
# 定义敌机类
class Enemy(GameObject):
def __init__(self, x, y, image):
super().__init__(x, y, image)
self.speed = 3
def update(self):
self.y += self.speed
# 定义子弹类
class Bullet(GameObject):
def __init__(self, x, y):
super().__init__(x, y, bullet_image)
self.speed = 10
def update(self):
self.y -= self.speed
# 创建游戏对象
player = Player(SCREEN_WIDTH / 2 - player_image.get_rect().width / 2, SCREEN_HEIGHT - player_image.get_rect().height, player_image)
enemies = [Enemy(random.randint(0, SCREEN_WIDTH - enemy_image.get_rect().width), -enemy_image.get_rect().height, enemy_image) for i in range(ENEMY_COUNT)]
# 游戏主循环
clock = pygame.time.Clock()
while True:
# 处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# 更新游戏对象
player.update()
for enemy in enemies:
enemy.update()
# 绘制游戏对象
screen.blit(background_image, (0, 0))
player.draw(screen)
for enemy in enemies:
enemy.draw(screen)
for bullet in player.bullets:
bullet.draw(screen)
# 检测碰撞
for enemy in enemies:
if player.rect.colliderect(enemy.rect):
pygame.quit()
exit()
for bullet in player.bullets:
if bullet.rect.colliderect(enemy.rect):
enemies.remove(enemy)
player.bullets.remove(bullet)
# 更新屏幕
pygame.display.update()
# 控制帧率
clock.tick(FPS)
```
注意,这个游戏还有一些不完美的地方,比如没有限制玩家的移动范围,敌机的速度和生成位置都是固定的,没有动态变化等。你可以在这个基础上进行改进和扩展。