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: