m0_46203616 2022-09-17 10:00 采纳率: 60%
浏览 20
已结题

我想在屏幕上随机生成不同方向的Enemy,本来我是想用字典存储图片,再用random随机调用图片,但试了一下不行

我想在屏幕上随机生成不同方向的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')


  • 写回答

1条回答 默认 最新

  • Python-ZZY 2022-09-17 10:11
    关注

    出现什么错误了?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月13日
  • 已采纳回答 10月5日
  • 创建了问题 9月17日

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于#flink#的问题:关于docker部署flink集成hadoop的yarn,请教个问题flink启动yarn-session.sh连不上hadoop
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题