洪源901 2022-10-12 22:15 采纳率: 100%
浏览 146
已结题

python运用pygame运行窗口未响应

问题遇到的现象和发生背景

编程python的坦克大战游戏,使用pygame模块 在创建游戏窗口有后会发生未响应,然后我使用pygame.QUIT.和pygame.KEYDOWN后依然未响应

用代码块功能插入代码,请勿粘贴截图

总代码:如下

import pygame
_display = pygame.display
COLOR_BLACK = pygame.Color(0, 0, 0)
verson = 'v1.042'
class MainGame():#主逻辑类的实现
    #游戏主窗口
    window = None
    SCREEN_HEIGHT = 500
    SCREEN_WIDTH = 800

    def __init__(self):
        pass
    #开始游戏方法
    def startGame(self):
        _display.init()
        # 创建窗口加载窗口(借鉴官方文档)
        MainGame.window =_display.set_mode([MainGame.SCREEN_WIDTH,MainGame.SCREEN_HEIGHT])
        #设置游戏标题
        _display.set_caption("坦克世界大战"+verson)
        #让窗口持续刷新操作
        while True:

            #给窗口完成一个颜色的填充
            MainGame.window.fill(MainGame.COLOR_BLACK)

            _display.update()

    #获取程序期间所有事件(鼠标事件,键盘事件)
    def getEvent(self):
        #1、获取所有事件
        eventList = pygame.event.get()
         #2、对事件进行判断处理(1.点击关闭按钮 2.按下键盘上的某个键)
        for event in eventList:
            #判断event.type 是否QUIT。如果是退出的话,直接调用程序结束方法
            if event.type == pygame.QUIT:
                self.endGame()
            #判断事件类型是否为按键按下,如果是继续判断按键是哪一个按键来进行对应处理
            if event.type == pygame.KEYDOWN:
                #具体是那一按键的处理
                if event.key == pygame.K_LEFT:
                     print("坦克向左掉头,移动")
                elif event.key == pygame.K_RIGHT:
                     print("坦克向右掉头,移动")
                elif event.key == pygame.K_UP:
                     print("坦克向上掉头,移动")
                elif event.key == pygame.K_DOWN:
                     print("坦克向下掉头,移动")
                elif event.key == pygame.K_SPACE:
                    print("发射子弹")
    def endGame(self):
        print("谢谢使用")
        #结束python解释器
        exit()
class Tank():
    def __init__(self):
        pass
    #坦克的移动方法
    def move(self):
        pass
    #射击方法
    def shot(self):
        pass
    #展示坦克
    def displayTank(self):
        pass
class MyTank(Tank):
    def __init__(self):
        pass
class EnemyTank(Tank):
    def __init__(self):
        pass
class Bullet():
    def __init__(self):
        pass
    #子弹的移动方法
    def move(self):
        pass
    #展示子弹的方法
    def displayBullet(self):
        pass
class Explode():
    def __init__(self):
        pass
    def displayExplode(self):
        pass
class Wall():
    def __init__(self):
        pass
    #展示墙壁的方法
    def displayWall(self):
        pass
class Music():
    def __init__(self):
        pass
    #开始播放音乐
    def play(self):
        pass
MainGame().startGame()

运行结果及报错内容

img

我的解答思路和尝试过的方法

一开始以为是pycharm上没有对应的类(像pygame一样没有安装)后来发现应该是def getEvent(self): 后的程序没有进行编译,还有
event.type == pygame.KEYDOWN: 中key的成员属性

我想要达到的结果

创建的游戏窗口响应,且对应我在键盘的操作输出对应信息。

img

  • 写回答

3条回答 默认 最新

  • 浪客 2022-10-12 22:40
    关注
    
    24行 MainGame.window.fill(COLOR_BLACK)
    后面加一句            self.getEvent()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月12日

悬赏问题

  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?