会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132444个问题
JAVA 全系列/第五阶段:JavaWeb开发/JSP技术详解(旧) 18947楼

#encoding=gbk
"""
新增功能
添加事件
    1完善敌方坦克初始化方法
    2创建敌方坦克并显示

  """
import pygame,time,random
SCREEN_WIDTH=700
SCREEN_HEIGHT=500
BG_COLOR=pygame.Color(0,100,80)
TEXT_COLOR=pygame.Color(180,0,50)
class MainGame():
    my_tank = None
    window=None                 #类对象
    #储存敌方坦克的列表
    enemyTankList=[]
    #定义敌方坦克数量
    enemyTankCount=8
    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,420)
        #初始化敌方坦克,并将敌方坦克添加到列表
        self.createEnemyTank()
        #设置窗口标题
        pygame.display.set_caption("坦克大战1.0")
        #循环显示窗口
        while True:
            #使坦克运行的慢一点(使循环速度慢一点)
            time.sleep(0.01)
            #为窗口设置颜色
            MainGame.window.fill(BG_COLOR)
            #获取事件
            self.getEvent()
            #左上窗口文字绘制
            MainGame.window.blit(self.getTextSuface("敌方剩余坦克数量%d"%50),(10,10))     #blit(将小窗口文字添加到主窗口)
            #调用坦克显示的方法
            MainGame.my_tank.displayTank()
            #循环遍历敌方坦克并展示
            self.blitEnemyTank()
            #调用移动方法
            #如果坦克移动开关开启才可以移动
            if not MainGame.my_tank.stop:
                MainGame.my_tank.move()
            #刷新显示
            pygame.display.update()
    # 初始化敌方坦克,并将敌方坦克添加到列表
    def createEnemyTank(self):
        top=20
        #循环生成敌方坦克
        for i in range(MainGame.enemyTankCount):
            #随机在x轴上生成敌方坦克
            left=random.randint(0,600)
            #随机敌方坦克速度
            speed=random.randint(2,4)
            enemy=EnemyTank(left,top,speed)
            #将敌方坦克添加到列表
            MainGame.enemyTankList.append(enemy)
    #循环遍历敌方坦克并展示
    def blitEnemyTank(self):
        for enemyTank in MainGame.enemyTankList:
            enemyTank.displayTank()
    #结束游戏
    def endGame(self):
        print("谢谢使用")
        exit()
    #左上角文字绘制
    def getTextSuface(self,text):
        #初始化文字模块
        pygame.font.init()
        #查看所有可用字体名称
        #print(pygame.font.get_fonts())
        #获取font字体对象
        font=pygame.font.SysFont("fangsong",18)
        #绘制文字信息
        textSuface=font.render(text,True,TEXT_COLOR)
        return textSuface

    #遍历事件
    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_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_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_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():
    #设置位置,距离左边left,距离上边top
    def __init__(self,left,top):
        #保存加载的图片
        self.images={"U":pygame.image.load("img/p1tankU.gif"),
                     "D":pygame.image.load("img/p1tankD.gif"),
                     "L":pygame.image.load("img/p1tankL.gif"),
                     "R":pygame.image.load("img/p1tankR.gif"),}
        #默认方向
        self.direction="U"
        #根据当前图片方向获取图片
        self.image=self.images[self.direction]
        #根据图片获取区域
        self.rect=self.image.get_rect()
        #设置区域 left和top
        self.rect.left=left
        self.rect.top=top
        #设置速度
        self.speed=2.5
        #坦克移动的开关
        self.stop=True



    #移动
    def move(self):
        #判断坦克的方向进行移动(本质是使用区域值减去速度的值来使移动成立)
        if self.direction=="L":
            if self.rect.left>0:
                self.rect.left-=self.speed
        elif self.direction=="R":
            if self.rect.right<SCREEN_WIDTH:                         #当前坦克右边所处位置小于屏幕宽度
                self.rect.right+=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

    #射击
    def shot(self):
        pass
    #显示坦克
    def displayTank(self):
        #获取展示的对象
        self.image=self.images[self.direction]
        #调用dlit方法展示
        MainGame.window.blit(self.image,self.rect)         #将小窗口图片添加到大窗口
#我方坦克
class myTank(Tank):
    def __init__(self):
        pass

#敌方坦克
class EnemyTank(Tank):
    def __init__(self,left,top,speed):
        #加载图片集
        self.images={"U":pygame.image.load("img/enemy1U.gif"),
                     "D": pygame.image.load("img/enemy1D.gif"),
                     "R": pygame.image.load("img/enemy1R.gif"),
                     "L": pygame.image.load("img/enemy1L.gif"),
                     }
        #随机生成坦克方向
        self.direction=self.randDirection()
        #根据方向获取图片
        self.image=self.images[self.direction]
        #定义区域
        self.rect=self.image.get_rect()
        #对left和top进行赋值
        self.rect.left=left
        self.rect.top=top
        #对速度惊醒赋值
        self.speed=speed
        #移动键开关
        self.stop=True
    #随机生成坦克方向的方法
    def randDirection(self):
        num=random.randint(1,8)
        if num==1 and 5:
            return "U"
        elif num==2 and 6:
            return "L"
        elif num==3 and 7:
            return "R"
        elif num==4 and 8:
            return "D"


class Bullet():
    def __init__(self):
        pass
    #子弹移动
    def moveBullte(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 playMusic(self):
        pass
if __name__=="__main__":
    MainGame().startGame()
    #MainGame().getTextSuface()

搜狗截图20210724191347.png

老师,这是怎么回事,字典为空,我找不到哪儿没对

Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 18948楼

webdemo.zip

老师我这点击查询 直接浏览器直接报错了  麻烦老师帮我看下

Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
	java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.
		at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:418)
		at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260)
		at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
		at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
		at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
		at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
		at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
		at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
		at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
		at java.base/java.lang.Thread.run(Thread.java:834)
Sat Jul 24 17:38:22 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Sat Jul 24 17:38:33 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
org.apache.jasper.JasperException: /usermanager/viewUser.jsp (行.: [41], 列: [8]) According to TLD or attribute directive in tag file, attribute [items] does not accept any expressions
	at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:42)
	at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:292)
	at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:115)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.checkXmlAttributes(Validator.java:1250)
	at org.apache.jasper.compiler.Validator$ValidateVisitor.visit(Validator.java:888)
	at org.apache.jasper.compiler.Node$CustomTag.accept(Node.java:1544)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2389)
	at org.apache.jasper.compiler.Node$Visitor.visitBody(Node.java:2441)
	at org.apache.jasper.compiler.Node$Visitor.visit(Node.java:2447)
	at org.apache.jasper.compiler.Node$Root.accept(Node.java:470)
	at org.apache.jasper.compiler.Node$Nodes.visit(Node.java:2389)
	at org.apache.jasper.compiler.Validator.validateExDirectives(Validator.java:1857)
	at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:224)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:386)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:362)
	at org.apache.jasper.compiler.Compiler.compile(Compiler.java:346)
	at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:605)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:400)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:712)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:459)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:384)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
	at com.bjsxt.web.servlet.UserManagerServlet.findUser(UserManagerServlet.java:54)
	at com.bjsxt.web.servlet.UserManagerServlet.doPost(UserManagerServlet.java:31)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at com.bjsxt.web.filter.UserLoginFilter.doFilter(UserLoginFilter.java:29)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:834)


image.png

JAVA 全系列/第五阶段:JavaWeb开发/Web实战案例 18949楼
Python 全系列/第一阶段:Python入门/编程基本概念 18952楼
JAVA 全系列/(旧的隐藏)第二十一阶段:百战商城项目(Spring Cloud最新架构)/百战商城项目 18954楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 18955楼
JAVA 全系列/第一阶段:JAVA 快速入门/IDEA的使用和第一个java项目 18956楼
JAVA 全系列/第三阶段:数据库编程/MySQL数据库的使用 18959楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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