小游戏坦克大战python代码

# 初始化pygame库  
pygame.init()  
  
# 定义游戏窗口大小和标题  
WINDOW_WIDTH = 800  
WINDOW_HEIGHT = 600  
TITLE = "坦克大战"  
  
# 创建游戏窗口  
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))  
pygame.display.set_caption(TITLE)  
  
# 创建时钟对象,用于控制游戏帧率  
clock = pygame.time.Clock()  
  
# 游戏结束标志位,默认为False表示游戏未结束  
game_over = False  
  
# 游戏分数,默认为0分  
score = 0  
  
# 坦克生命值,默认为100点生命值  
health = 100  
  
# 敌人列表,用于存储敌人对象  
enemies = []  
  
# 坦克初始位置和大小,位置为(350,550),大小为50x50像素  
tank = pygame.Rect(350, 550, 50, 50)  
  
# 子弹列表,用于存储子弹对象  
bullets = []  
  
# 基地初始位置和大小,位置为(380,580),大小为100x100像素  
base = pygame.Rect(380, 580, 100, 100)  
  
# 基地生命值,默认为100点生命值  
base_health = 100  
  
# 敌人生成间隔,单位为帧数  
enemies_spawn_rate = 20  
  
# 敌人移动速度,单位为像素/帧  
enemy_speed = 5  
  
# 子弹飞行速度,单位为像素/帧  
bullet_speed = 20  
  
# 子弹半径,单位为像素,用于碰撞检测  
bullet_radius = 5  
  
# 子弹颜色为红色  
bullet_color = (255, 0, 0)  
  
# 子弹发射间隔,单位为帧数  
bullet_cooldown = 20  
  
# 第一种敌人图像文件名    注释:指定敌人图像的文件名,用于在游戏中加载敌人图像。   
enemy_type1 = "enemy1.png"
# 敌人类型2对应的图像文件名  
enemy_type2 = "enemy2.png"  
  
# 敌人类型3对应的图像文件名  
enemy_type3 = "enemy3.png"  
  
# 子弹的初始位置为坦克的中心  
bullet_spawn_x = tank.centerx  
bullet_spawn_y = tank.centery  
  
# 第一种敌人的攻击力,被第一种敌人击中减少10点生命值  
enemy_damage1 = 10  
  
# 第二种敌人的攻击力,被第二种敌人击中减少20点生命值  
enemy_damage2 = 20  
  
# 第三种敌人的攻击力,被第三种敌人击中减少30点生命值  
enemy_damage3 = 30  

# 游戏主循环  
while not game_over:  
    # 处理退出游戏事件  
    for event in pygame.event.get():  
        if event.type == pygame.QUIT:  
            game_over = True  
# 获取玩家输入  
keys = pygame.key.get_pressed()  
if keys[pygame.K_LEFT] and tank.left > 0:  
    tank.move_ip(-5, 0)  
if keys[pygame.K_RIGHT] and tank.right < WINDOW_WIDTH:  
    tank.move_ip(5, 0)  
if keys[pygame.K_SPACE] and len(bullets) < 5:  
    bullets.append(tank.copy())  
    bullets[-1].x += tank.width // 2 - bullet_radius 
    bullets[-1].y += tank.height // 2 - bullet_radius  
    bullets[-1].speed_y = -bullet_speed  
  
# 更新子弹位置和消除过期子弹 
for bullet in bullets[:]:  
    bullet.move_ip(0, bullet.speed_y)  
    if bullet.top < 0 or bullet.bottom > WINDOW_HEIGHT:  
        bullets.remove(bullet)  
bullets[:] = [bullet for bullet in bullets if bullet not in enemies]  
  
# 生成敌人  
enemy_spawn = random.randint(0, enemies_spawn_rate)  
if enemy_spawn == 0:  
    enemy_type = random.choice([enemy_type1, enemy_type2, enemy_type3])  
    enemies.append(pygame.Rect(random.randint(0, WINDOW_WIDTH - 50), random.randint(-200, -100), 50, 50))  
    enemies[-1].speed_y = enemy_speed  
    enemies[-1].type = enemy_type  
  
# 更新敌人位置和消除过期敌人  
for enemy in enemies[:]:  
    enemy.move_ip(0, enemy.speed_y)  
    if enemy.bottom > WINDOW_HEIGHT:  
        enemies.remove(enemy)  
enemies[:] = [enemy for enemy in enemies if base not in [bullet for bullet in bullets if bullet not in enemies and pygame.Rect(bullet).colliderect(enemy)]]  
  
# 检查碰撞和伤害  
for bullet in bullets:  
    for enemy in enemies:  
        if pygame.Rect(bullet).colliderect(enemy):  
            bullets.remove(bullet)  
            enemies.remove(enemy)  
            score += 10 + enemy.type[7:] if enemy in enemies[:len(enemies) // 2] else 10  
            break   # 如果子弹击中敌人,则从子弹列表和敌人列表中移除该子弹和敌人,并增加分数。同时跳出循环,继续检查其他子弹。      
       if base in [bullet for bullet in bullets if pygame.Rect(bullet).colliderect(enemy)]:  
        bullets.remove(bullet)  
        enemies.remove(enemy)  
        score += 10 + enemy.type[7:] if enemy in enemies[:len(enemies) // 2] else 10  
        break   # 如果基地被敌人击中,则从子弹列表和敌人列表中移除该子弹和敌人,并增加分数。同时跳出循环,继续检查其他敌人。  
  
# 绘制游戏画面  
screen.fill((0, 0, 0))  
pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(tank.left, tank.top, tank.width, tank.height))   # 绘制坦克  
pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(base.left, base.top, base.width, base.height))   # 绘制基地  
for bullet in bullets:  
    pygame.draw.rect(screen, bullet_color, pygame.Rect(bullet.left, bullet.top, bullet.width, bullet.height))   # 绘制子弹  
for enemy in enemies:  
    pygame.draw.rect(screen, (255, 255, 255), pygame.Rect(enemy.left, enemy.top, enemy.width, enemy.height))   # 绘制敌人  
pygame.display.update()  
  
# 控制游戏帧率  
clock.tick(60)  
  
# 游戏结束,退出游戏  
pygame.quit()

以上即是小游戏坦克大战的python代码,运行还需要安装pygame,感兴趣的伙伴可以试试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值