制作一个经典坦克大战

本文详细介绍了使用Python的pygame库开发的一款坦克大战游戏。涵盖了游戏元素如坦克、子弹、墙壁的创建、碰撞检测以及游戏逻辑。通过实例代码展示了游戏的初始化、事件处理、图像加载和播放音乐等功能,为读者提供了了解和学习pygame游戏开发的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.导入依赖&通用配置

import random
import sys
import time
from urllib.request import urlretrieve
import os
import pygame

SCREEN_WIDTH, SCREEN_HEIGHT = 1200, 700
MY_BIRTH_LEFT, MY_BIRTH_TOP = SCREEN_WIDTH / 2, SCREEN_HEIGHT - 60
DIRECTION = [U, D, L, R] = [ U ,  D ,  L ,  R ]
Tank_IMAGE_POSITION = r D:/tank_img
URL =  https://gitee.com/tyoui/logo/raw/master/img/

2.通用加载函数

def load_img(name_img):
    save = Tank_IMAGE_POSITION + os.sep + name_img +  .gif
    if not os.path.exists(save):
        urlretrieve(URL + name_img +  .gif , save)
    return pygame.image.load(save)

def load_music(name_music):
    save = Tank_IMAGE_POSITION + os.sep + name_music +  .wav
    if not os.path.exists(save):
        urlretrieve(URL + name_music +  .wav , save)
    pygame.mixer.music.load(save)
    pygame.mixer.music.play()

3.通用基础类

class BaseItem(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()

4.定义bullet类

class Bullet(BaseItem):
    def __init__(self, tank, window):
        super().__init__()
        self.direction = tank.direction
        self.speed = tank.speed * 3
        self.img = load_img( bullet )
        self.rect = self.img.get_rect()
        self.window = window
        self.live = True
        if self.direction == U:
            self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
            self.rect.top = tank.rect.top - self.rect.height
        elif self.direction == D:
            self.rect.left = tank.rect.left + tank.rect.width / 2 - self.rect.width / 2
            self.rect.top = tank.rect.top + tank.rect.height
        elif self.direction == L:
            self.rect.left = tank.rect.left - self.rect.width / 2 - self.rect.width / 2
            self.rect.top = tank.rect.top + tank.rect.height / 2 - self.rect.height / 2
        else:
            self.rect.left = tank.rect.left + tank.rect.width
            self.rect.top = tank.rect.top + tank.rect.height / 2 - self.rect.height / 2


    def display_bullet(self):
        self.window.blit(self.img, self.rect)

    def bullet_move(self):
        if self.direction == U:
            if self.rect.top > 0:
                self.rect.top -= self.speed
                return
        elif self.direction == D:
            if self.rect.top < SCREEN_HEIGHT:
                self.rect.top += self.speed
                return
        elif self.direction == L:
            if self.rect.left > 0:
                self.rect.left -= self.speed
                return
        else:
            if self.rect.left < SCREEN_WIDTH:
                self.rect.left += self.speed
                return
        self.live = False

    def hit_enemy_tank(self):
        for enemy in TankGame.enemy_tank_list:
            hit = pygame.sprite.collide_rect(self, enemy)
            if hit:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值