会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132384个问题

import pygame,time,random

SCREEN_WIDTH = 700

SCREEN_HEIGHT = 500

BG_COLOR=pygame.Color((0,0,0))

TEXT_COLOR=pygame.Color(255,0,0)

 

class MainGame():

    window=None

    my_tank = None

    # 存储敌方坦克的列表

    enemyTankList=[]

    #定义敌方坦克的数量

    enemyTankCount=5

    def __init__(self):

        pass

    #开始游戏

    def startGame(self):

        #加载主窗口

        #初始化主窗口

        pygame.display.init()

        #设置窗口的大小及显示

        MainGame.window=pygame.display.set_mode([SCREEN_WIDTH,SCREEN_HEIGHT])

        #初始化我方坦克

        MainGame.my_tank=Tank(350,250)

        #初始化敌方坦克,并将敌方坦克添加到列表中

        self.createEnemyTank()

 

        # 设置窗口标题

        pygame.display.set_caption("坦克大战")

        while True:

            #式坦克移动的速度慢一点

            time.sleep(0.02)

            # 设置填充色

            MainGame.window.fill(BG_COLOR)

            #获取事件

            self.getEvent()

            #绘制文字

            MainGame.window.blit(self.getTextSurface("敌方坦克剩余数量%d"%len(MainGame.enemyTankList)),(10,10))

            #调用坦克显示的方法

            MainGame.my_tank.displayTank()

            #循环遍历地方坦克列表,展示敌方坦克

            self.blitEnemyTank()

            #调用移动方法

            #如果坦克的开关是开启,才可以移动

            if not MainGame.my_tank.stop:

                MainGame.my_tank.move()

            pygame.display.update()

 

    # 初始化敌方坦克,并将敌方坦克添加到列表中

    def createEnemyTank(self):

        top=100

        #循环生成敌方坦克

        for i in range(MainGame.enemyTankCount):

            left = random.randint(0,600)

            speed = random.randint(1,4)

            enemy = EnemyTank(left,top,speed)

            MainGame.enemyTankList.append(enemy)

 

    # 循环遍历地方坦克列表,展示敌方坦克

    def blitEnemyTank(self):

        for enemyTank in MainGame.enemyTankList:

            enemyTank.displayTank()

            enemyTank.randMove()

 

    #结束游戏

    def endGame(self):

        print("再见")

        exit()

    #左上角文字的绘制

    def getTextSurface(self,text):

        #初始化字体模块

        pygame.font.init()

        #查案所有字体的名称

        #print(pygame.font.get_fonts())

        #获取字体Font对象

        font=pygame.font.SysFont('kaiti',18)

        #获取文字信息

        textSurface=font.render(text,True,TEXT_COLOR)

        return textSurface

 

        #获取事件

 

    def getEvent(self):

        #获取所有事件

        eventList = pygame.event.get()

        #遍历事件

        for event in eventList:

            #判断按下的间是关闭还是键盘按下

            #如果按退出,关闭窗口

            if event.type == pygame.QUIT:

                self.endGame()

            if event.type == pygame.KEYDOWN:

                #判断按下的键盘朝向

                if event.key == pygame.K_LEFT:

                    # 切换方向

                    MainGame.my_tank.direction = 'L'

                    #修改坦克的开关状态

                    MainGame.my_tank.stop=False

                    #MainGame.my_tank.move()

                    print('按下左键,坦克向左移动')

                elif event.key == pygame.K_RIGHT:

                    # 切换方向

                    MainGame.my_tank.direction = 'R'

                    # 修改坦克的开关状态

                    MainGame.my_tank.stop = False

                    #MainGame.my_tank.move()

                    print('按下右键,坦克向右移动')

                elif event.key == pygame.K_UP:

                    # 切换方向

                    MainGame.my_tank.direction = 'U'

                    # 修改坦克的开关状态

                    MainGame.my_tank.stop = False

                    # MainGame.my_tank.move()

                    print('按下上键,坦克向上移动')

                elif event.key == pygame.K_DOWN:

                    # 切换方向

                    MainGame.my_tank.direction = 'D'

                    # 修改坦克的开关状态

                    MainGame.my_tank.stop = False

                    # MainGame.my_tank.move()

                    print('按下左键,坦克向下移动')

                elif event.key==pygame.K_SPACE:

                    print("发射子弹")

 

 

            #松开方向键,坦克停止移动,修改坦克的开关状态

            if event.type == pygame.KEYUP:

                #判断松开是键是上下左右的时候才停止坦克移动

                if event.key==pygame.K_UP or event.key==pygame.K_LEFT or event.key==pygame.K_RIGHT or event.key==pygame.K_DOWN:

                    MainGame.my_tank.stop=True

 

class Tank():

    #添加距离左边,距离上边

    def __init__(self,left,top):

        self.images={

            'U':pygame.image.load('learning/img/p1tankU.gif'),

            'D':pygame.image.load('learning/img/p1tankD.gif'),

            'L':pygame.image.load('learning/img/p1tankL.gif'),

            'R':pygame.image.load('learning/img/p1tankR.gif'),

        }

        #方向

        self.direction='U'

        #根据当前图片的方向获取图片

        self.image =self.images[self.direction]

        #获取区域

        self.rect=self.image.get_rect()

        #设置区域的lefttop

        self.rect.left = left

        self.rect.top = top

        #速度

        self.speed=5

        #坦克移动的开关

        self.stop=True

 

 

    #移动

    def move(self):

        # 判断坦克的方向进行移动

        if self.direction == 'L':

            if self.rect.left>0:

                self.rect.left -= self.speed

        elif self.direction == 'U':

            if self.rect.top>0:

                self.rect.top -= self.speed

        elif self.direction == 'D':

            if self.rect.top+self.rect.height<SCREEN_HEIGHT:

                self.rect.top += self.speed

        elif self.direction == 'R':

            if self.rect.left+self.rect.height<SCREEN_WIDTH:

                self.rect.left += self.speed

 

 

    #射击

    def shot(self):

        pass

    #展示坦克的方法

    def displayTank(self):

        #获取展示的对象

        self.image=self.images[self.direction]

        #调用blit方法展示

        MainGame.window.blit(self.image,self.rect)

 

#我方坦克

class MyTank(Tank):

    def __init(self):

        pass

 

#敌方坦克

class EnemyTank(Tank):

    def __init(self,left,top,speed):

        #加载图片集

        self.imges={

            'U': pygame.image.load('learning/img/enemy1U.gif'),

            'D': pygame.image.load('learning/img/enemy1D.gif'),

            'L': pygame.image.load('learning/img/enemy1L.gif'),

            'R': pygame.image.load('learning/img/enemy1R.gif'),

        }

        #方向,随机生成敌方坦克的方向

        self.direction=self.randDirection()

        #根据方向获取图片

        self.image=self.images[self.direction]

        #区域

        self.rect=self.image.get_rect()

        #lefttop进行赋值

        self.rect.left=left

        self.rect.top=top

        #速度

        self.speed=speed

        #移动开关键

        self.flag=True

        #新增步数变量

        self.step=60

 

    def randDirection(self):

        num=random.randint(1,4)

        if num == 1:

            return'U'

        elif num == 2:

            return 'D'

        elif num == 3:

            return 'L'

        elif num == 4:

            return 'R'

 

    #敌方坦克随即移动的方法

    def randMove(self):

        if self.step<=0:

            #修改方向

            self.direction=self.randDirection()

            #让步数复位

            self.step=60

        else:

            self.move()

            #让步数递减

            self.step-=1

 

 

class Bullet():

    def __init__(self):

        pass

    #移动

    def move(self):

        pass

    #展示子弹的方法

    def displayBullet(self):

        pass

 

class Wall():

    def __init__(self):

        pass

    #展示墙壁的方法

    def displayWall(self):

        pass

 

class Explode():

    def __init__(self):

        pass

    #展示爆炸效果的方法

    def displayExplode(self):

        pass

 

class Music():

    def __init__(self):

        pass

    #播方音乐

    def play(self):

        pass

 

 

if __name__=='__main__':

    MainGame().startGame()

    #MainGame().getTextSurface()


Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 17686楼
WEB前端全系列/第十一阶段:Nodejs编程模块--/Nodejs基础 17687楼
JAVA 全系列/第一阶段:JAVA 快速入门/数组和数据存储 17689楼
Python 全系列/下架-第十二阶段:Python_大型电商项目(5天后下架)/Django项目阶段-电商项目(旧) 17690楼
Python 全系列/下架-第十二阶段:Python_大型电商项目(5天后下架)/Django项目阶段-电商项目(旧) 17691楼
JAVA 全系列/第二十三阶段:容器管理技术/Docker 17695楼
JAVA 全系列/第十三阶段:高性能数据处理、NoSQL、分库分表/MyCat 17696楼

22-Aug-2021 22:19:30.871 警告 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesJdbc Web应用程序 [ROOT] 注册了JDBC驱动程序 [com.mysql.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册。

[2021-08-22 10:19:30,891] Artifact ssmdemo:war exploded: Error during artifact deployment. See server log for details.

22-Aug-2021 22:19:35.281 信息 [mysql-cj-abandoned-connection-cleanup] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。

java.lang.IllegalStateException: 非法访问:此Web应用程序实例已停止。无法加载[]。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。

at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1385)

at org.apache.catalina.loader.WebappClassLoaderBase.getResource(WebappClassLoaderBase.java:1038)

at com.mysql.jdbc.AbandonedConnectionCleanupThread.checkThreadContextClassLoader(AbandonedConnectionCleanupThread.java:112)

at com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionCleanupThread.java:79)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)

at java.base/java.lang.Thread.run(Thread.java:830)

老师,一启动就报这个异常,将老师发的源码和我的代码比对也没发现不同的地方,请问这是什么问题啊

JAVA 全系列/第六阶段:项目管理与SSM框架/SpringMVC 17698楼
JAVA 全系列/第三阶段:数据库编程/SQL 语言 17699楼
Python 全系列/第十阶段:Flask百战电商后台项目/Flask百战电商后台项目 17700楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637