用Python做一个魂斗罗
时间: 2023-11-19 20:14:21 浏览: 107
魂斗罗是一个比较复杂的游戏,需要使用比较高级的图形库和游戏引擎来实现。下面是一个简化版的魂斗罗游戏,可以用 Python 的 Pygame 模块来实现。
游戏规则:
1. 玩家操控角色在地图上移动,同时可以发射子弹击败敌人。
2. 敌人会向角色发射子弹,如果角色被敌人的子弹击中或者与敌人接触,游戏结束。
3. 当敌人全部被消灭后,游戏胜利。
下面是代码实现:
```python
import pygame
import random
# 初始化 Pygame
pygame.init()
# 设置游戏窗口大小
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption("魂斗罗")
# 加载游戏图片资源
bg_img = pygame.image.load('bg.jpg')
player_img = pygame.image.load('player.png')
bullet_img = pygame.image.load('bullet.png')
enemy_img = pygame.image.load('enemy.png')
enemy_bullet_img = pygame.image.load('enemy_bullet.png')
# 设置游戏音效
pygame.mixer.music.load('bg_music.mp3')
pygame.mixer.music.play(-1)
bullet_sound = pygame.mixer.Sound('bullet.wav')
enemy_sound = pygame.mixer.Sound('enemy.wav')
# 设置游戏时钟
clock = pygame.time.Clock()
# 定义角色类
class Player:
def __init__(self, x, y):
self.x = x
self.y = y
self.speed = 5
self.bullets = []
self.img = pygame.transform.scale(player_img, (48, 48))
self.rect = self.img.get_rect()
self.rect.x = self.x
self.rect.y = self.y
# 移动角色
def move(self, dx, dy):
self.x += dx * self.speed
self.y += dy * self.speed
self.rect.x = self.x
self.rect.y = self.y
# 发射子弹
def shoot(self):
bullet = Bullet(self.x + 20, self.y)
self.bullets.append(bullet)
bullet_sound.play()
# 更新角色状态
def update(self):
for bullet in self.bullets:
bullet.update()
if bullet.y < -10:
self.bullets.remove(bullet)
# 定义子弹类
class Bullet:
def __init__(self, x, y):
self.x = x
self.y = y
self.speed = 10
self.img = pygame.transform.scale(bullet_img, (16, 16))
self.rect = self.img.get_rect()
self.rect.x = self.x
self.rect.y = self.y
# 移动子弹
def update(self):
self.y -= self.speed
self.rect.y = self.y
# 定义敌人类
class Enemy:
def __init__(self, x, y):
self.x = x
self.y = y
self.speed = 2
self.bullets = []
self.img = pygame.transform.scale(enemy_img, (48, 48))
self.rect = self.img.get_rect()
self.rect.x = self.x
self.rect.y = self.y
self.direction = random.choice(['left', 'right'])
# 移动敌人
def move(self):
if self.direction == 'left':
self.x -= self.speed
else:
self.x += self.speed
self.rect.x = self.x
# 发射子弹
def shoot(self):
bullet = Bullet(self.x + 20, self.y + 40)
self.bullets.append(bullet)
enemy_sound.play()
# 更新敌人状态
def update(self):
self.move()
for bullet in self.bullets:
bullet.update()
if bullet.y > 490:
self.bullets.remove(bullet)
# 定义敌人子弹类
class EnemyBullet(Bullet):
def __init__(self, x, y):
super().__init__(x, y)
self.speed = 5
self.img = pygame.transform.scale(enemy_bullet_img, (16, 16))
# 创建角色和敌人
player = Player(300, 400)
enemies = []
for i in range(5):
enemy = Enemy(random.randint(50, 570), random.randint(50, 100))
enemies.append(enemy)
# 游戏主循环
while True:
# 处理游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
player.shoot()
# 处理角色移动
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player.x > 0:
player.move(-1, 0)
elif keys[pygame.K_RIGHT] and player.x < 592:
player.move(1, 0)
elif keys[pygame.K_UP] and player.y > 0:
player.move(0, -1)
elif keys[pygame.K_DOWN] and player.y < 432:
player.move(0, 1)
# 移动敌人并处理敌人子弹
for enemy in enemies:
enemy.move()
if random.randint(0, 100) < 1:
enemy.shoot()
for bullet in enemy.bullets:
if bullet.rect.colliderect(player.rect):
pygame.quit()
exit()
bullet.update()
if bullet.y > 490:
enemy.bullets.remove(bullet)
# 处理角色子弹和敌人碰撞
for bullet in player.bullets:
for enemy in enemies:
if bullet.rect.colliderect(enemy.rect):
enemies.remove(enemy)
player.bullets.remove(bullet)
break
# 更新角色和敌人状态
player.update()
for enemy in enemies:
enemy.update()
# 绘制游戏界面
screen.blit(bg_img, (0, 0))
screen.blit(player.img, (player.x, player.y))
for bullet in player.bullets:
screen.blit(bullet.img, (bullet.x, bullet.y))
for enemy in enemies:
screen.blit(enemy.img, (enemy.x, enemy.y))
for bullet in enemy.bullets:
screen.blit(bullet.img, (bullet.x, bullet.y))
pygame.display.update()
# 控制游戏帧率
clock.tick(60)
```
希望这个简化版的魂斗罗游戏能为您带来一些乐趣!注意,这个游戏只是一个示例,还有很多需要改进的地方,例如增加更多关卡、角色动画、音效等。
阅读全文