Python小游戏——雷霆战机

import pygame
import random

# 初始化
pygame.init()

# 定义游戏窗口大小
window_width = 800
window_height = 600

# 创建游戏窗口
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("雷霆战机")

# 加载图片
player_img = pygame.image.load("player.png")
enemy_img = pygame.image.load("enemy.png")
bullet_img = pygame.image.load("bullet.png")

# 获取图片大小
player_width = player_img.get_width()
player_height = player_img.get_height()
enemy_width = enemy_img.get_width()
enemy_height = enemy_img.get_height()
bullet_width = bullet_img.get_width()
bullet_height = bullet_img.get_height()

# 设置游戏速度
clock = pygame.time.Clock()
game_speed = 30

# 定义玩家、敌人和子弹的初始位置
player_x = window_width / 2 - player_width / 2
player_y = window_height - player_height
enemy_x = random.randint(0, window_width - enemy_width)
enemy_y = 0
bullet_x = 0
bullet_y = window_height
bullet_state = "ready"

# 定义玩家、敌人和子弹的移动速度
player_speed = 5
enemy_speed = 3
bullet_speed = 7

# 定义得分
score = 0

# 定义字体
font = pygame.font.Font(None, 36)

# 定义游戏结束标志
game_over = False

# 游戏循环
while not game_over:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True

        # 处理玩家移动事件
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= player_speed
            elif event.key == pygame.K_RIGHT:
                player_x += player_speed
            elif event.key == pygame.K_SPACE and bullet_state == "ready":
                # 发射子弹
                bullet_x = player_x + player_width / 2 - bullet_width / 2
                bullet_y = player_y
                bullet_state = "fire"

    # 更新玩家、敌人和子弹的位置
    player_x = max(0, min(window_width - player_width, player_x))
    enemy_y += enemy_speed
    bullet_y -= bullet_speed

    # 检测碰撞
    if bullet_state == "fire" and bullet_y <= enemy_y + enemy_height:
        if bullet_x >= enemy_x and bullet_x <= enemy_x + enemy_width:
            # 子弹击中敌人
            bullet_state = "ready"
            enemy_x = random.randint(0, window_width - enemy_width)
            enemy_y = 0
            score += 1

    if enemy_y >= window_height:
        # 敌人飞过屏幕底部
        enemy_x = random.randint(0, window_width - enemy_width)
        enemy_y = 0
        score -= 1

    # 绘制画面
    window.fill((255, 255, 255))
    window.blit(player_img, (player_x, player_y))
    window.blit(enemy_img, (enemy_x, enemy_y))
    window.blit(bullet_img, (bullet_x, bullet_y))

    # 绘制得分
    score_text = font.render("Score: " + str(score), True, (0, 0, 0))
    window.blit(score_text, (10, 10))

    pygame.display.update()
    clock.tick(game_speed)

# 退出游戏
pygame.quit()

以上代码是一个简单的雷霆战机小游戏的Python代码

请注意,以上代码仅为一个简单的示例,实际游戏可以根据需求进行更复杂的设置和功能。另外,游戏中使用的图片需要事先准备好并保存在与代码文件相同的目录下,分别命名为"player.png"、"enemy.png"和"bullet.png"。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这是一个简单的雷霆战机小游戏,使用Python编写。 ``` import pygame import random # 初始化游戏 pygame.init() # 设置游戏窗口大小和标题 screen_width = 600 screen_height = 800 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("雷霆战机") # 加载游戏背景 background = pygame.image.load("background.png").convert() # 加载玩家飞机 player_img = pygame.image.load("player.png").convert() player_img.set_colorkey((255, 255, 255)) # 设置透明色 player_rect = player_img.get_rect() player_rect.centerx = screen_width // 2 player_rect.bottom = screen_height - 10 # 设置玩家飞机的移动速度 player_speed = 5 # 加载敌机 enemy_imgs = [ pygame.image.load("enemy1.png").convert(), pygame.image.load("enemy2.png").convert(), pygame.image.load("enemy3.png").convert(), ] for enemy_img in enemy_imgs: enemy_img.set_colorkey((255, 255, 255)) enemy_rects = [] for i in range(10): enemy_img = random.choice(enemy_imgs) enemy_rect = enemy_img.get_rect() enemy_rect.centerx = random.randint(0, screen_width) enemy_rect.bottom = random.randint(-1000, -100) enemy_rects.append(enemy_rect) # 设置敌机的移动速度 enemy_speed = 3 # 加载子弹 bullet_img = pygame.image.load("bullet.png").convert() bullet_img.set_colorkey((255, 255, 255)) bullet_rect = bullet_img.get_rect() # 设置子弹的移动速度 bullet_speed = 10 # 记录玩家得分 score = 0 # 加载游戏音效 shoot_sound = pygame.mixer.Sound("shoot.wav") explode_sound = pygame.mixer.Sound("explode.wav") # 设置游戏循环 running = True while running: # 处理游戏事件 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: running = False # 处理玩家控制 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT] and player_rect.left > 0: player_rect.move_ip(-player_speed, 0) if keys[pygame.K_RIGHT] and player_rect.right < screen_width: player_rect.move_ip(player_speed, 0) if keys[pygame.K_UP] and player_rect.top > 0: player_rect.move_ip(0, -player_speed) if keys[pygame.K_DOWN] and player_rect.bottom < screen_height: player_rect.move_ip(0, player_speed) if keys[pygame.K_SPACE]: # 发射子弹 bullet_rect.centerx = player_rect.centerx bullet_rect.bottom = player_rect.top shoot_sound.play() # 移动敌机 for enemy_rect in enemy_rects: enemy_rect.move_ip(0, enemy_speed) if enemy_rect.top > screen_height: enemy_rect.centerx = random.randint(0, screen_width) enemy_rect.bottom = random.randint(-1000, -100) # 移动子弹 bullet_rect.move_ip(0, -bullet_speed) # 检测子弹是否击中敌机 for enemy_rect in enemy_rects: if bullet_rect.colliderect(enemy_rect): enemy_rect.centerx = random.randint(0, screen_width) enemy_rect.bottom = random.randint(-1000, -100) bullet_rect.bottom = player_rect.top score += 1 explode_sound.play() # 绘制游戏界面 screen.blit(background, (0, 0)) screen.blit(player_img, player_rect) for enemy_rect, enemy_img in zip(enemy_rects, enemy_imgs): screen.blit(enemy_img, enemy_rect) screen.blit(bullet_img, bullet_rect) font = pygame.font.Font(None, 36) score_text = font.render("Score: {}".format(score), True, (255, 255, 255)) screen.blit(score_text, (10, 10)) # 更新游戏界面 pygame.display.update() # 结束游戏 pygame.quit() ``` 游戏玩法: 玩家通过键盘控制飞机移动,空格键发射子弹。敌机会从屏幕上方随机出现并向下移动,玩家需要控制飞机躲避敌机并尽可能地击落它们。当子弹击中敌机时,敌机会随机出现在屏幕上方并加分。游戏结束条件为玩家飞机被敌机撞击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值