会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132572个问题
WEB前端全系列/第十一阶段:Nodejs编程模块--/Less 28006楼
Python 全系列/第十阶段:Flask百战电商后台项目/Flask百战电商后台项目 28007楼

老师,我登陆页面的时候  输什么都是用户名和密码错误 代码看了和文档是一样的

public class UserLoginDaoImpl implements UserLoginDao {
    //用户数据库登陆查询
    public Users selectUsersByUsernameAndUserpwd(String username, String userpwd) {
        Users users = null ;
        Connection conn=null;
        try {
            conn = JdbcUtils.getConnection();
            PreparedStatement ps = conn.prepareStatement("select * from users where username=? and userpwd=?");
            ps.setString(1,username);   //绑定参数
            ps.setString(2,userpwd);
            ResultSet resultSet = ps.executeQuery();
            while (resultSet.next()){
                users = new Users();
                users.setUsersex(resultSet.getString("usersex"));
                users.setUserpwd(resultSet.getString("userpwd"));
                users.setUsername(resultSet.getString("username"));
                users.setUesrid(resultSet.getInt("userid"));
                users.setPhonenumber(resultSet.getString("phonenumber"));
                users.setQqnumber(resultSet.getNString("qqnumber"));
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {

        }

        return users;
    }
}
public class UserLoginServiceimpl implements UserLoginService {
    //用户登陆业务
    public Users userLogin(String username, String userpwd) {
        //实例化持久业务层
        UserLoginDao userLoginDao = new UserLoginDaoImpl();
        Users users = userLoginDao.selectUsersByUsernameAndUserpwd(username,userpwd);
        if(users == null){
            throw new UserNotFoundException("用户名或密码有误");   //自定义异常
        }
        return users;
    }
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    String username = req.getParameter("username");
    String userpwd = req.getParameter("userpwd");

    try {
        UserLoginService userLoginService = new UserLoginServiceimpl();
        Users users = userLoginService.userLogin(username,userpwd); //登陆成功返回一个user对象
        //建立客户端与服务端的会话状态
        HttpSession session = req.getSession();
        session.setAttribute(Constans.USR_SESSION_KEY,users);
        //跳转首页 ( 重定向方式 )
        resp.sendRedirect("main.jsp");
    }catch (UserNotFoundException e){
        req.setAttribute("msg",e.getMessage());
        req.getRequestDispatcher("login.jsp").forward(req,resp);
    }catch (Exception e){
        resp.sendRedirect("error.jsp");
    }
}


JAVA 全系列/第五阶段:JavaWeb开发/Web实战案例 28008楼
JAVA 全系列/第一阶段:JAVA 快速入门/飞机大战小项目训练 28009楼

QQ截图20201113103754.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>米课</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="icon" href="images/favicon.ico">
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/iconfont.css">
    <style>
        /* 导航开始 */
        .nav {
            width: 100%;
            height: 66px;
            background-color: #88c5e1;
            border-bottom: 5px solid #54abd4;
            position: fixed;
            top: 0;
            left: 0;
            z-index: 999;
        }
        .wrap {
            width: 87%;
            margin: 0 auto;
        }
        .login, .search, .nav-bar {
            height: 66px;
            float: left;
        }
        .text-input {
            width:100%;
            height: 40px;
            border: 1px solid #f5f5f5;
            box-sizing: border-box;
            padding-left: 10px;
            background-color:#f5f5f5;
            outline :none; /* 点击input时 没有边框 */
            border-radius: 2px;
            margin-top: 13px;
            transition: all .2s;
        }
        .text-input:hover {
            background-color: #fff;
            border-color: #54abd4;
        }
        .search button {
            width:40px;
            height: 34px;
            background-color:#f5f5f5;
            color:#54abd4;
            font-weight: 900;
            position: absolute;
            right: 2px;
            top: 16px;
        }
        .nav-bar>ul {
            float: right;
        }
        .nav-bar li {
            float: left;
        }
        .nav_bar a {
            color: #fff;
            padding: 10px;
            display: block;
            margin-left: 8px;
            margin-top: 12.5px;
        }
        .nav-bar-active {
            border-bottom: 2px solid #fff;
        }
        .nav-bar a:hover {
            border-bottom: 2px solid #fff;
        }
        /* phone start */
        @media screen and (max-width: 768px) {
            .login {
                width: 16%;
                background: url("images/Brand-S.png") no-repeat left center; /* 或者只写left */
                background-size: 38px;
            }
            .search {
                width: 68%;
                position: relative;
            }
            .nav-bar {
                display: none;
            }
            .btn {
                float: right;
                width: 43px;
                height: 43px;
                border: 1px solid#fff;
                color:#fff;
                line-height: 43px;
                font-weight: 700;
                font-size: 20px;
                margin-top: 10.5px;
            }
        }
        /* phone end */
        /* ipad start */
        @media screen and (min-width: 768px) and (max-width: 992px) {
            .login {
                width: 18%;
                background: url("images/Brand-M.png") no-repeat left; /* 或者只写left */
                background-size: 86px;
            }
            .search {
                width: 42%;
                position: relative;
            }
            .nav-bar {
                width: 40%;
            }
            .btn {
                display: none;
            }
        }
        /* ipad end */
        /* pc start */
        @media screen and (min-width: 992px) {
            .login {
                width: 25%;
                background: url("images/Brand.png") no-repeat left center; /* 或者只写left */
                background-size: 183px;
            }
            .search {
                width: 40%;
                position: relative;
            }
            .nav-bar {
                width: 35%;
            }
            .btn {
                display: none;
            }
        }
        /* pc end */
        /* 导航结束 */
    
        /* 登录开始 */
        .login {
            width: 100%;
            height: 460px;
            background-image: url("images/homeImg.png");
            background-repeat: no-repeat;
            background-size: 100% 100%;
            margin-top: 71px;
            padding-top: 75px;
            box-sizing: border-box;
        }
        .login-logo, .form {
            float: left;
        }
        .login-logo {
            width: 70%;
        }
        .form {
            width: 30%;
        }

        /* 登录结束 */
    
    
    
    
    </style>
</head>
<body>
    <!-- 导航开始 -->
    <div class="nav">
        <div class="wrap">
            <div class="login"></div>
            <div class="search">
                <form action="">
                    <input class="text-input" type="text" placeholder="查找课程">
                    <button class="iconfont">&#xe64d;</button>
                </form>
            </div>
            <div class="nav-bar">
                <ul>
                    <li><a class="nav-bar-active" href="#">首页</a></li>
                    <li><a href="#">课程</a></li>
                    <li><a href="#">公告</a></li>
                    <li><a href="#">登录</a></li>
                </ul>
            </div>
            <div class="btn">
                <i class="iconfont">&#xe66c;</i>
            </div>
        </div>
    </div>
    <!-- 导航结束 -->

    <!-- 登录开始 -->
    <div class="login">
        <div class="wrap">
            <div class="login-logo">
                <img src="images/MiLogo.png" alt="">
                <br>
                <img src="images/miTitle.png" alt="">
            </div>
            <div class="form"></div>
        </div>
    </div>

    <!-- 登录结束 -->
</body>
</html>

老师 您给我看看 哪错了 怎么结果是这样的

WEB前端全系列/第一阶段:HTML5+CSS3模块/商城官网项目 28011楼

老师,您好。我想请教一下。为啥我在点击加减的时候,会出现 NaN (not a number) 这样的提示?

咋解决呀?

HTML文件:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		 
		<!-- HTML和css中,不论什么形式的代码 能呈现相应的效果 以及 后期便于维护 就行 -->
		
		<title></title>
	    <link rel="stylesheet" type="text/css" href="css/reset.css"/>
		<link rel="stylesheet" type="text/css" href="css/jd.css"/>
		<link rel="stylesheet" type="text/css" href="icon/iconfont.css"/>
		
		<script type="text/javascript" src="js/02-jd的js.js"></script>
		
		<!-- js的使用 -->
		<script type="text/javascript">
			alert("欢迎进入京东页面");
		</script>
	</head>
	
	
	<body>
		<!-- 1.导航开始 -->
		<div class="nav">
			<!-- 下一行的div是用来控制居中的 -->
			<div class="warp">
				
				<ul class="nav_ul1">
					<!-- 要掌握图标的引入方法!! -->
					<li><a><i class="iconfont">&#xe614</i>京东首页</a></li>
					<li><a href="">配送到:北京</a></li>
				</ul>
					
					
				<ul class="nav_ul2">
					<li><a href="">洋洋宝贝</a><span>|</span></li>
					<li><a href="">我的订单</a><span>|</span></li>
					<li><a href="">我的京东</a><span>|</span></li>
					<li><a href="">京东会员</a><span>|</span></li>
					<li><a href="">企业采购</a><span>|</span></li>
					<li><a href="">京东手机</a><span>|</span></li>
					<li><a href="">关注京东</a><span>|</span></li>
					<li><a href="">客户服务</a><span>|</span></li>
					<li><a href="">网址导航</a><span></span></li>
				</ul>	
		    </div>
		</div>
		<!-- 导航结束 -->
		
		
		<!-- 2.搜索框开始 -->
		<div class="search">
			<div class="warp">
		        <img src="img/logo.jpg" width="200px" height="50px"/>		
				
				<!-- 下一行又开辟了一个div 方便两个及其以上的元素去浮动 -->
				<div class="search_div">
					<input type="text" class="search_text"/>
					<input type="button" value="搜索" class="search_but" />
					
				</div>
				
			</div>
			
		</div>
	    <!-- 搜索框结束 -->
		
		
		
		<!-- 3.标题开始 -->
		     <!-- 下一行中,是两个重叠div的简易写法 -->
		 <div class="title warp">
			
			 <h3>全部商品</h3>
			
			<div class="">
				<span id="">配送至:</span>
				
				<select style="height: 15px;">
					<!-- 第一个option会自动成为选择框的默认选项-->
					<option value="">昌平区</option>
					<option value="">顺义区</option>
					<option value="">大兴区</option>
					<option value="">朝阳区</option>
					<option value="">昌平区</option>
					
				</select>
			</div>
		 	
		 </div>
		
		<!-- 标题结束 -->

		
		<!-- 4.显示菜单栏的开始 -->
		<div class="tips warp">
			<ul>
				<li> <input type="checkbox"  name="fav" onclick="checkTest1(this)"/>全选</li>
				<li>商品</li>
				<li>单价</li>
				<li>数量</li>
				<li>小计</li>
				<li>操作</li>
			</ul>
		</div>
		<!-- 显示菜单栏的结束 -->
		
		
		<!-- 商品详情展示开始	 -->
		<div class="info warp">
		    <ul >
		    	<li class="info_1" ><input type="checkbox" name="fav" onclick="checkTest2()"/></li>
		    	<!-- 当指定一个width或者height时,图片会等比例进行放大或者缩小 -->
				<li class="info_2"><img src="img/img01.jpg" width="80px"></li>
		    	<li class="info_3"><a>【京东超市】desha春秋季儿童休闲服</a></li>
		    	<li class="info_4"><a>颜色:灰色+粉红</a></li>
		    	<li class="info_5">¥182.5</li>
		    	<li class="info_6">
					<button class="bot_1"  onclick="checkTest3(this,1)">-</button>
					<input type="text" value="1"/>
					<button class="bot_2" onclick="checkTest3(this,2)">+</button>
				</li>
		    	<li class="info_7">¥182.5</li>
		    	<li class="info_8">
					<a href="">删除</a><br/>
				    <a href="">已到我的关注</a>
				</li>
		    </ul>	
			
		</div>
		
		
		<div class="info warp">
		    <ul >
		    	<li class="info_1"><input type="checkbox" name="fav" onclick="checkTest2()"/></li>
		    	<!-- 当指定一个width或者height时,图片会等比例进行放大或者缩小 -->
				<li class="info_2"><img src="img/img01.jpg" width="80px"></li>
		    	<li class="info_3"><a>【京东超市】desha春秋季儿童休闲服</a></li>
		    	<li class="info_4"><a>颜色:灰色+粉红</a></li>
		    	<li class="info_5">¥182.5</li>
		    	<li class="info_6">
					<button class="bot_1">-</button>
					<input type="text" value="1"/>
					<button class="bot_2">+</button>
				</li>
		    	<li class="info_7">¥182.5</li>
		    	<li class="info_8">
					<a href="">删除</a><br/>
				    <a href="">已到我的关注</a>
				</li>
		    </ul>	
			
		</div>
		
		
		<div class="info warp">
		    <ul >
		    	<li class="info_1"><input type="checkbox" name="fav" onclick="checkTest2()"/></li>
		    	<!-- 当指定一个width或者height时,图片会等比例进行放大或者缩小 -->
				<li class="info_2"><img src="img/img01.jpg" width="80px"></li>
		    	<li class="info_3"><a>【京东超市】desha春秋季儿童休闲服</a></li>
		    	<li class="info_4"><a>颜色:灰色+粉红</a></li>
		    	<li class="info_5">¥182.5</li>
		    	<li class="info_6">
					<button class="bot_1" onclick="checkTest3()">-</button>
					<input type="text" value="1"/>
					<button class="bot_2">+</button>
				</li>
		    	<li class="info_7">¥182.5</li>
		    	<li class="info_8">
					<a href="">删除</a><br/>
				    <a href="">已到我的关注</a>
				</li>
		    </ul>	
			
		</div>
		<!-- 商品详情展示结束 -->
		
		
		<!-- 结算模块开始 -->
		    <div class="balance warp">
		    	
				<ul class="balance_ul1">
					<li>
					    <input type="checkbox" name="fav" id="" value="" onclick="checkTest1(this)"/>
						全选
					</li>
					<li><a href="">删除选中商品</a></li>
					<li><a href="">移动到我的关注</a></li>
					<li><a href="">清除下柜商品</a></li>
				</ul>
				
				
				<ul class=" balance_ul2">
					<li><a href="">已经选择<span>1</span>件商品</a></li>
					<li><a href="">总价: <span>¥12</span></a></li>
					<li><a href="">
					<!-- <input type="button" name="" id="" value="去结算" /> -->
					<button class="butt" type="button">去结算</button>
					</a></li>
				</ul>
		    </div>
		
		
		<!-- 结算模块结束 -->
		
	</body>
</html>
Javascript文件:

var fav = document.getElementsByName("fav");

function checkTest1(th){
	//检验其本身有没有被勾选啊v,  
	
	var flag = th.checked;
	
	//flag返回的值是true 或者false
	// alert(flag); 
	
	// var fav = document.getElementsByName("fav");
	
	//如果全点击全选框, 则商品的的选择框也应该画上对勾;
	//原版
	// if(flag){
	// 	for(var i in fav){
	// 		fav[i].checked = true;
	// 	}
		
		
	// }else{
	// 	for(var i in fav){
	// 		fav[i].checked = false;
	// 	}
	// }
	//升级版
	
		for(var i in fav){
			fav[i].checked = flag;
		}
	

}

//获得其本身的方法: document.getElementBy啥啥    或者   通过this 来传值


//单选决定全选操作
function checkTest2(){
	
	var flag = true;
	//如果商品栏中的框框都画上对勾之后,两个全选框框也应该有对勾
	for(var i =1;i<fav.length-1;i++){
		if(!fav[i].checked){
			flag = false;
			break;
		}
    }
	//决定勾选 全选框
	fav[0].checked = flag;
	fav[fav.length-1].checked = flag;
}



//控制数量的增和减    并且实现 ‘小计’ 的增减
function checkTest3(th,sig){
	var pre;
	
	if(sig == "1"){
		pre = th.nextElementSibling;
		if(Number(pre.value)>0){
			pre.value =Number(pre.value)-1;}
	}else{
		pre = th.previousElementSibling;
		pre.value = Number(pre.value) + 1;
	}
	
	
	//获得上一个节点
    // var pre = th.previousElementSibling;
	
	//获得上一个节点的值  注意:value是String类型的
	//var value= pre.value+1;   
	// pre.value = Number(pre.value) + 1;
	
	
	//获得下一个节点
	// var pre = th.nextElementSibling;
	// pre.value =pre.value-1;
	
	
	//实现‘小计’的增减  思想:将数量和单价相乘,赋值给‘小计’
	//获得单价
	var val = pre.parentNode.previousElementSibling.innerHTML;
	
	//数量 乘以 单价  注意:var是String类型的,需要转成数字类型的
	var zong = Number(val)*Number(pre.value);
	
	// alert(typeof(Number(val)*Number(pre.value)));  -->number
	
	//将总价 内置到 '小计'的位置   先获得 ’小计‘ 的节点
    pre.parentNode.nextElementSibling.innerHTML = zong;
		
	
	
	
}

问题如图:

G_ZM}C`8@MQWMQJ]T%A`32F.png

Python 全系列/第七阶段:网页编程基础/JavaScript 28012楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/数据结构 28013楼

老师为什么显示这种内容呢

'builtin_function_or_method' object has no attribute 'width'

image.png

这是报错信息

源码

pygame pg
time
random
screen_width=screen_height=bgcolor=pg.Color(,,)
rcolor=pg.Color(,,)
MainGame:
    window=my_tank=enemy_tankList=[]
    enemy_tankCount=myBulletList=[]
    __init__(self):
        startGame(self):
        pg.display.init()
        MainGame.window=pg.display.set_mode([screen_width,screen_height])
        MainGame.my_tank = Tank(, )
        self.creatEnemyTank()
        pg.display.set_caption()


        :
            time.sleep()
            MainGame.window.fill(bgcolor)
            self.getEvent()
            MainGame.window.blit(self.getTextSurface(%len(MainGame.enemy_tankList)),(,))
            MainGame.my_tank.displayTank()
            self.biltenemyTank()
            self.blitMyBullet()
            MainGame.my_tank.stop:
                MainGame.my_tank.move()
            pg.display.update()
creatEnemyTank(self):
        top=i range (MainGame.enemy_tankCount):
            left=random.randint(,)
            speed=random.randint(,)
            enemy=EnemyTank(left, top, speed)
            MainGame.enemy_tankList.append(enemy)
    biltenemyTank(self):
        enemyTank MainGame.enemy_tankList:
            enemyTank.displayTank()
            enemyTank.randMove()
    blitMyBullet(self):
        MyBullet MainGame.myBulletList:
            MyBullet.displayBullet()
            MyBullet.randMove()





    endGame(self):
        print()
        exit()
getTextSurface(self,text):
        pg.font.init()
        font=pg.font.SysFont(,)
        textSurface=font.render(text,,rcolor)
        textSurface
getEvent(self):
        eventList=pg.event.get()
        event eventList:
            event.type==pg.QUIT:
                self.endGame()
            event.type==pg.KEYDOWN:

                event.key==pg.K_LEFT:
                    MainGame.my_tank.stop = MainGame.my_tank.direction=print()
                event.key==pg.K_RIGHT:
                    MainGame.my_tank.stop = MainGame.my_tank.direction = print()
                event.key==pg.K_UP:
                    MainGame.my_tank.stop = MainGame.my_tank.direction = print()
                event.key==pg.K_DOWN:
                    MainGame.my_tank.stop = MainGame.my_tank.direction = print()
                event.key== pg.K_SPACE:
                    print()
                    MyBullet=Bullet(MainGame.my_tank)
                    MainGame.MyBulletList.append(MyBullet)
            event.type==pg.KEYUP:
                event.key==pg.K_UP event.key==pg.K_DOWN event.key==pg.K_LEFT event.key==pg.K_RIGHT:
                    MainGame.my_tank.stop=Tank:
__init__(self,left,top):
        self.images={:pg.image.load(),
                     : pg.image.load(),
                     : pg.image.load(),
                     : pg.image.load()}
        self.direction=self.image=self.images[self.direction]
        self.rect=self.image.get_rect()
        self.rect.top=top
        self.rect.left=left
        self.speed=self.stop=move(self):
        self.direction==:
            self.rect.left > :
                self.rect.left-=self.speed
        self.direction==:

            self.rect.left+self.rect.height<screen_width:
                self.rect.left += self.speed
        self.direction==:

            self.rect.top>:
                self.rect.top -= self.speed
        self.direction==:

            self.rect.top+ self.rect.height < screen_height:
                self.rect.top += self.speed


    shot(self):
        displayTank(self):
        self.image=self.images[self.direction]
        MainGame.window.blit(self.image,self.rect)
MyTank(Tank):
    __init__(self):
        EnemyTank(Tank):
    __init__(self,left,top,speed):
        self.images={:pg.image.load(),
                     : pg.image.load(),
                     : pg.image.load(),
                     : pg.image.load()}
        self.direction=self.randDirection()
        self.image=self.images[self.direction]
        self.rect=self.image.get_rect()
        self.rect.left=left
        self.rect.top=top
        self.rect.left=left
        self.speed=speed
        self.flag=self.step=randDirection(self):
        num=random.randint(,)
        num==:
            num==:
            num==:
            num==:
            randMove(self):
        self.step<=:
            self.direction=self.randDirection()
            self.step=:
            self.move()
            self.step-=Bullet():
    __init__(self,tank):
        self.image=pg.image.load()
        self.direction=tank.direction
        self.rect=self.image.get_rect
        self.direction==:
            self.rect.left=int(tank.rect.left+tank.rect.width/-self.rect.width/)
            self.rect.top=int(tank.rect.top-self.rect.height)
        self.direction==:
            self.rect.left=int(tank.rect.left+tank.rect.width/-self.rect.width/)
            self.rect.top=int(tank.rect.top+tank.rect.height)
        self.direction==:
            self.rect.left=int(tank.rect.left-self.rect.width/-self.rect.width/)
            self.rect.top=int(tank.rect.top+tank.tect.width/-self.rect.width/)
        self.direction==:
            self.rect.left=int(tank.rect.left+tank.rect.width)
            self.rect.top=int(tank.rect.top+tank.tect.width/-self.rect.width/)
        self.speed=move(self):
        displayBullet(self):
        MainGame.window.blit(self.image,self.rect)
Wall():
    __init(self):
        displayWall(self):
        Explore():
    __init__(self):
        displayExplore(self):
        Music():
    __init__(self):
        play(self):
        __name__==:
    MainGame().startGame()


Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 28014楼
WEB前端全系列/第六阶段:音乐社区高级项目模块/移动端:基于jQuery使用Ajax和BootStrap 28015楼

老师请问为什么会出现这样

import pygame as pg
import time
import random
screen_width=700
screen_height=500
bgcolor=pg.Color(0,0,0)
rcolor=pg.Color(255,0,0)
class MainGame:
    window=None
    my_tank=None
    enemy_tankList=[]
    enemy_tankCount=5
    def __init__(self):
        pass
    #开始游戏
    def startGame(self):
        #加载主窗口
        #初始化窗口
        pg.display.init()
        #设置窗口的显示
        MainGame.window=pg.display.set_mode([screen_width,screen_height])
        #初始化我的坦克
        MainGame.my_tank = Tank(350, 250)
        #初始化敌方坦克
        self.createEnemyTank()   #!!!就是这个地方报错,说类里找不到这个函数
        #设置窗口的标题
        pg.display.set_caption("坦克大战1.02")


        while True:
            time.sleep(0.02)
            #窗口填充色
            MainGame.window.fill(bgcolor)
            #获取事件
            self.getEvent()
            #绘制文字
            MainGame.window.blit(self.getTextSurface("敌方剩余坦克数量%d"%6),(5,5))
            MainGame.my_tank.displayTank()
            #展示敌方坦克
            self.biltenemyTank()
            #使坦克移动
            if  not MainGame.my_tank.stop:
                MainGame.my_tank.move()
            pg.display.update()
#定义敌方坦克的方法
    def creatEnemyTank(self):
        top=100
        for i in range (MainGame.enemy_tankCount):
            left=random.randint(0,600)
            speed=random.randint(1,4)
            enemy=EnemyTank(left, top, speed)
            MainGame.enemy_tankList.append(enemy)
    #显示我方坦克
    #循环遍历敌方坦克列表,展示敌方坦克
    def biltenemyTank(self):
        for enemyTank in MainGame.enemy_tankList:
            enemyTank.displayTank()




    #结束游戏
    def endGame(self):
        print("谢谢使用")
        exit()
#左上角绘制
    def getTextSurface(self,text):
        #初始化字体
        pg.font.init()
        #获取字体对象
        font=pg.font.SysFont("kaiti",18)
        #绘制文字
        textSurface=font.render(text,True,rcolor)
        return textSurface
#获取事件
    def getEvent(self):
        #获取所有事件
        eventList=pg.event.get()
        #遍历事件
        for event in eventList:
            #判断按下是什么键
            if event.type==pg.QUIT:
                self.endGame()
            #键盘的按向 上下左右
            if event.type==pg.KEYDOWN:

                if event.key==pg.K_LEFT:
                    MainGame.my_tank.stop = False
                    MainGame.my_tank.direction="L"
                    #MainGame.my_tank.move()
                    print("xiangzuo")
                elif event.key==pg.K_RIGHT:
                    MainGame.my_tank.stop = False
                    MainGame.my_tank.direction = "R"
                    #MainGame.my_tank.move()
                    print("xiang you")
                elif event.key==pg.K_UP:
                    MainGame.my_tank.stop = False
                    MainGame.my_tank.direction = "U"
                    #MainGame.my_tank.move()
                    print("xiangshang")
                elif event.key==pg.K_DOWN:
                    MainGame.my_tank.stop = False
                    MainGame.my_tank.direction = "D"
                    #MainGame.my_tank.move()
                    print("xiang xia")
                elif event.key== pg.K_SPACE:
                    print("发射子弹")
            #松开方向键 让坦克停下
            if event.type==pg.KEYUP:
                if event.key==pg.K_UP or event.key==pg.K_DOWN or event.key==pg.K_LEFT or event.key==pg.K_RIGHT:
                    MainGame.my_tank.stop=True


class Tank:
#距离左边left,距离上边top,坦克的展示初始位置,距离左边和上边
    def __init__(self,left,top):
        #"保存加载的图片"
        self.images={"U":pg.image.load("p1tankU.gif"),
                     "D": pg.image.load("p1tankD.gif"),
                     "L": pg.image.load("p1tankL.gif"),
                     "R": pg.image.load("p1tankR.gif" )}
        self.direction="U"
        self.image=self.images[self.direction]
        self.rect=self.image.get_rect()
        self.rect.top=top
        self.rect.left=left
        self.speed=1
        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.left+self.rect.height<screen_width:
                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


    #射击
    def shot(self):
        pass
     #展示
    def displayTank(self):
        #获取展示的对象
        self.image=self.images[self.direction]
        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":pg.image.load("enemy1U.gif"),
                     "D": pg.image.load("enemy1D.gif"),
                     "L": pg.image.load("enemy1L.gif"),
                     "R": pg.image.load("enemy1R.gif" )}
        self.direction=self.randDirection()
        self.image=self.images[self.direction]
        self.rect=self.image.get_rect()
        self.rect.left=left
        self.rect.top=top
        self.rect.left=left
        self.speed=speed
        self.flag=True

    def randDirection(self):
        num=rand.randint(1,4)
        if num==1:
            return "U"
        elif num==2:
            return "D"
        elif num==3:
            return "L"
        elif num==4:
            return "R"


class Bullte():
    def __init__(self):
        pass
    #移动
    def move(self):
        pass
    #zhanshi
    def displayBullet(self):
        pass
class Wall():
    def __init(self):
        pass
    #展示墙壁的方法
    def displayWall(self):
        pass

class Explore():
    def __init__(self):
        pass
        #展示爆炸的方法
    def displayExplore(self):
        pass
class Music():
    def __init__(self):
        pass
    #播放音乐的方法
    def play(self):
        pass

if __name__=='__main__':
    MainGame().startGame()


Python 全系列/第二阶段:Python 深入与提高/游戏开发-坦克大战 28018楼
JAVA 全系列/第五阶段:JavaWeb开发/Servlet技术详解(旧) 28019楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

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