qq_41955956 2020-05-20 19:43 采纳率: 0%
浏览 334

用python做坦克大战游戏,程序运行后,无论按哪个键,坦克都只会向上移动。以下代码有什么问题?

# encoding=UTF-8
import pygame,sys
from pygame.locals import *

class TankMain(object):
    """弹出坦克大战的主窗口"""
    width=600
    height=500
    # 开始游戏的方法
    def start_game(self):
        # pygame模块初始化,加载系统资源(如系统的字体)
        pygame.init()
        screen=pygame.display.set_mode((TankMain.width,TankMain.height),0,32)
        #给窗口设置一个标题
        pygame.display.set_caption('坦克大战')
        my_tank=MyTank(screen)
        while True:
            #color RGB(255,255,255)
            screen.fill((0,0,0))
            screen.blit(self.write_text(),(0,5))
            self.get_event(my_tank)
            my_tank.display()
            pygame.display.update()

    def get_event(self,my_tank):
        for event in pygame.event.get():
            if event.type == QUIT:
                self.stop_game()
            if event.type == KEYDOWN:
                if event.key == K_LEFT or event.key==K_a:
                    my_tank.directon='L'
                    my_tank.move()
                if event.key == K_UP or event.key==K_w:
                    my_tank.directon = 'U'
                    my_tank.move()
                if event.key == K_DOWN or event.key==K_s:
                    my_tank.directon = 'D'
                    my_tank.move()
                if event.key == K_RIGHT or event.key==K_d:
                    my_tank.directon='R'
                    my_tank.move()
                if event.key == K_ESCAPE:
                    self.stop_game()

    # 关闭游戏的方法
    def stop_game(self):
        sys.exit()

    def write_text(self):
        font=pygame.font.SysFont('方正兰亭超细黑简体',20)#定义一个字体
        text_sf=font.render('敌方坦克数量为:5',True,(255,0,0))#根据字体创建一个文字的图像
        return text_sf

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


class Tank(BaseItem):
    width = 50
    height = 50
    def __init__(self,screen,left,top):
        super().__init__()
        self.screen=screen#坦克在移动中需要用到当前游戏的屏幕窗口
        self.direction='U'#坦克的方向,默认向下
        self.speed=5# 坦克移动的速度
        self.images={}#坦克的所有图片
        self.images['L']=pygame.image.load('tankwar-images/mytankL.gif')
        self.images['R']=pygame.image.load('tankwar-images/mytankR.gif')
        self.images['D']=pygame.image.load('tankwar-images/mytankD.gif')
        self.images['U']=pygame.image.load('tankwar-images/mytankU.gif')
        self.image=self.images[self.direction]#坦克的图片由方向决定
        self.rect=self.image.get_rect()
        self.rect.left=left
        self.rect.top=top

    def display(self):
        self.image=self.images[self.direction]# 这里如果不定义,那么坦克的方向永远保持默认向下
        self.screen.blit(self.image,self.rect)

    def move(self):
        pass
    def fire(self):
        pass
class MyTank(Tank):
    def __init__(self,screen):
        super().__init__(screen,275,400)
    def move(self):
        if self.direction=='L':
            if self.rect.left>0:
                self.rect.left-=self.speed
            else:
                self.rect.left=0
        elif self.direction=='R':
            if self.rect.righttanke<TankMain.width:
                self.rect.right+=self.speed
            else:
                self.rect.right=TankMain.width
        elif self.direction=='U':
            if self.rect.top>0:
                self.rect.top-=self.speed
            else:
                self.rect.top=0
        elif self.direction=='D':
            if self.rect.bottom<TankMain.height:
                self.rect.bottom+=self.speed
            else:
                self.rect.bottom=TankMain.height


game = TankMain()
game.start_game()
  • 写回答

1条回答 默认 最新

  • zqbnqsdsmd 2020-05-21 09:05
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题