我想在屏幕上随机生成不同方向的Enemy,本来我是想用字典存储图片,再用random随机调用图片,但试了一下不行
main模块
import pygame
from tank_sprite import *
class TankGame(object):
#游戏初始化
def __init__(self):
#设置游戏窗口
self.screen=pygame.display.set_mode(SCREEN_SIZE.size)
#创建窗口标题
pygame.display.set_caption('坦克大战')
#创建游戏时钟
self.clock=pygame.time.Clock()
#创建精灵组
self.__create_sprites()
#敌机刷新时间 10s
pygame.time.set_timer(ENEMY_SHOW_TIME,1000)
#开始游戏
def star_game(self):
#游戏循环
while True:
self.screen.fill(BG_COLOR)
#设置刷新时间
self.clock.tick(GAME_TIME)
#调用事件监听
self.__event()
#调用碰撞检测
self.__check_collide()
#调用update
self.__update_sprites()
#更新屏幕显示
pygame.display.update()
#事件监听
def __event(self):
self.image_left =pygame.image.load('./images/me1_left.png')
self.image_right = pygame.image.load('./images/me1_right.png')
self.image_up = pygame.image.load('./images/me1.png')
self.image_down = pygame.image.load('./images/me1_down.png')
for event in pygame.event.get():
if event.type==pygame.QUIT:
self.__end_game()
elif event.type==ENEMY_SHOW_TIME:
enemy=Enemy()
self.enemy_group.add(enemy)
key_group=pygame.key.get_pressed()
if key_group[pygame.K_LEFT]:
self.hreo.image=self.image_left
self.hreo.rect.x += -HERO_SPEED
elif key_group[pygame.K_RIGHT]:
self.hreo.image = self.image_right
self.hreo.rect.x += HERO_SPEED
elif key_group[pygame.K_UP]:
self.hreo.image = self.image_up
self.hreo.rect.y -= HERO_SPEED
elif key_group[pygame.K_DOWN]:
self.hreo.image = self.image_down
self.hreo.rect.y += HERO_SPEED
#碰撞检测
def __check_collide(self):
pass
# 创建精灵和精灵组
def __create_sprites(self):
#创建背景精灵组
#创建英雄
self.hreo=Hreo()
self.hreo_group=pygame.sprite.Group(self.hreo)
#创建敌人
self.enemy=Enemy()
self.enemy_group=pygame.sprite.Group(self.enemy)
#更新绘制精灵组
def __update_sprites(self):
self.hreo_group.update()
self.hreo_group.draw(self.screen)
self.enemy_group.update()
self.enemy_group.draw(self.screen)
#游戏结束
def __end_game(self):
quit()
exit()
if __name__=='__main__':
TankGame().__init__()
TankGame().star_game()
sprite模块
import random
import pygame
from tank_main import *
#屏幕尺寸颜色
SCREEN_SIZE=pygame.Rect(0,0,1400,700)
BG_COLOR=(248,223,114)
#游戏时钟
GAME_TIME=60
#控制英雄移动速度
HERO_SPEED=10
#敌机出现
ENEMY_SHOW_TIME=pygame.USEREVENT
class GameSprite(pygame.sprite.Sprite):
def __init__(self,image_name,speed=1):
#调用父类初始化
super().__init__()
#加载图片
self.image=pygame.image.load(image_name)
#获取图片大小
self.rect=self.image.get_rect()
self.speed=speed
def update(self):
pass
#我方坦克
class Hreo(GameSprite):
def __init__(self):
super().__init__('./images/me1.png')
#设置初始位置
self.rect.centerx=SCREEN_SIZE.centerx
self.rect.centery=SCREEN_SIZE.centery+260
#设置初始速度为0
self.speed=0
def update(self):
#判断是否移除屏幕
if self.rect.x>=SCREEN_SIZE.width-self.rect.height:
self.rect.x=SCREEN_SIZE.width-self.rect.height
elif self.rect.x<=SCREEN_SIZE.left:
self.rect.x=SCREEN_SIZE.left
elif self.rect.y>=SCREEN_SIZE.height-self.rect.height:
self.rect.y=SCREEN_SIZE.height-self.rect.height
elif self.rect.y<=0:
self.rect.y=0
#敌方坦克
class Enemy(GameSprite):
def __init__(self):
# super().__init__('./images2/enemyTank/enemy_1_1L(1).png')
self.iamges={'L':pygame.image.load('./images2/enemyTank/enemy_1_1L(1).png'),
'R':pygame.image.load('./images2/enemyTank/enemy_1_1r(1).png'),
'U':pygame.image.load('./images2/enemyTank/enemy_1_1u(1).png'),
'D':pygame.image.load('./images2/enemyTank/enemy_1_1d(1).png')}
#根据方向获取图片
self.image1=self.iamges[self.suiji()]
self.rect=self.image1.get_rect()
self.rect.x = random.randint(50, SCREEN_SIZE.width- 50)
self.rect.y = random.randint(50, SCREEN_SIZE.height- 50)
def suiji(self):
# 方向,随机生成
num = random.randint(1, 4)
if num == 1:
self.iamges = 'U'
elif num == 2:
self.iamges = 'L'
elif num == 3:
self.iamges = 'D'
elif num == 4:
self.iamges = 'R'
def update(self):
self.rect.x+=random.randint(1, 3)
#判断是否移除屏幕
if self.rect.x >= SCREEN_SIZE.width - self.rect.height:
self.rect.x = SCREEN_SIZE.width - self.rect.height
elif self.rect.x <= SCREEN_SIZE.left:
self.rect.x = SCREEN_SIZE.left
elif self.rect.y >= SCREEN_SIZE.height - self.rect.height:
self.rect.y = SCREEN_SIZE.height - self.rect.height
elif self.rect.y <= 0:
self.rect.y = 0
#子弹精灵
class Bullets(GameSprite):
def __init__(self):
super().__init__('./images/bullet2.png')