Java项目实战:坦克大战(1)

 
坦克大战
单机版程序演示
  1. 能够四处移动
  2. 能够打击敌人
  3. 敌人能够移动
  4. 能够模拟爆炸
  5. 能够产生障碍
  6. 能够增长生命
项目的针对对象
³     初步掌握了 J2SE 的同学
²     掌握了常用的一些类
²     掌握了常用的一些知识点
²     写过一些学习的程序( toy program)
学习方法
³     不必太关注细节
²     不必非得把某个类所有的细节全了解清楚再动手
²     不必追求完美
²     关键是要写完,要想方设法让它运行起来
³     量变引起质变
做这个项目是为了
  1. 复习J2SE,综合运用J2SE所学的知识
  2. 初步掌握面向对象编程的基本思想
  3. 掌握Eclipse开发J2SE程序的基本方法
  4. 初步掌握Eclipse调试程序的方法
  5. 掌握编程时一些约定俗成的东西
命名 / 格式
  1. 掌握一些常用的编程方法
    1. getters setters
    2. 持有对方引用
    3. 定义常量
    4. 保留程序版本
    5. 学会版本比较
  2. 激发大家的学习兴趣
做这个项目不是为了
  1. 不是为掌握软件工程的系统理论
    1. 瀑布式
    2. 螺旋递增式
  2. 不是为了掌握专业游戏的开发方法
    1. 不应用专门的Game API
  3. 不是为了掌握专业的设计模式
    1. 没有刻意去应用设计模式
项目的注意事项
³     要敲,一定要动手敲,要一行一行跟着敲
³     看会或者听懂都不算掌握了程序
³     只有写出来才能证明你真正的掌握
³     不要照抄,不要记我做程序的步骤
³     要掌握思路
项目所用的工具
³     eclipse 3.2
³     JDK5.0 或以上
²     泛型在 5.0 后才得到支持
项目的预备知识
³     J2SE 基础知识
²     面向对象
²     I/O
²     多线程
²     GUI 初步
±     事件模型
版本 0.1
³     功能:
²     产生一个窗口
³     掌握:
²     通过 Eclipse 建立新的项目
²     为新的项目指定不同的源代码和输出目录
²     指定项目所用的 JDK 版本
²     通过 Eclipse 建立新的类
³     注意:
²     类名和方法名的命名
±     见名知意
±     类名首字母大写
±     方法名、变量名首字母小写
±     应用驼峰标识
版本 0.2
 
³     功能:
²     添加关闭窗口的事件处理
²     不允许窗口的大小改动
³     掌握:
²     匿名类的用法
±     思考:匿名类的应用场合?
°     类短小、不涉及将来的扩展、不涉及重要的业务逻辑
²     通过 Eclipse 重写父类的方法
³     注意:
²     没掌握匿名类的先照抄,不写也行
±     不影响最后的运行效果
版本 0.3
³     功能:
²     画出代表坦克的实心圆
³     掌握:
²     如何重写 paint 方法
³     注意:
²     不要改变原来的前景色
³     回顾:
²     paint(Graphics g) 方法,窗口重画时自动调用
²     x 轴、 y 轴的方向
版本 0.4
³     功能:
²     让坦克运动起来
²     步骤:
±     将位置改变为变量
±     启动线程不断重画
°     思考:为什么使用线程重画,而不是每按下一个键进行一次重画?
¯     线程重画更均匀,更能控制重画的速度。
¯     按键重画不能解决子弹自动飞行的问题。
±     每次重画改变 Tank 位置
³     掌握:
²     内部类的使用
±     思考:内部类有哪些好处?什么时候使用内部类?
°     可以方便的访问包装类的方法。不方便公开的,只为包装类服务的类应当定义为内部类。
³     注意:
²     x, y 值得含义,指的是小方块的左上角点
版本 0.41
 
功能
²     使用双缓冲消除闪烁现象
³     原因
²     刷新重画频率太快 ,paint 方法还没有完成
²     逐条显示
³     解决办法
²     将所有东西画在虚拟图片上 , 一次性显示出来
³     注意
²     如果不能理解透彻就照抄本版本代码,不影响对 J2SE 的练习功效
思考
³     把游戏窗口的大小改变为 640 X 480?
²     定义常量以应付将来的改动
版本 0.5
³     功能:
²     代码重构
±     将以后可能需要多处改变的量定义为常量
°     Frame 的宽度和高度
¯     常量名一般大写
³     注意:
²     常量一般是 public static final 的。
版本 0.6
³     功能:
²     让坦克听从我们的指挥
±     添加键盘监听器类 KeyMonitor
±     TankCient 添加键盘监听器
±     针对不同的键改变坦克的位置,与重画线程结合产生不同方向运动
³     注意:
±     switch case 语句中 break 语句的运用
±     写程序要循序渐进
思考
³     增加 100 辆坦克到游戏中
版本 0.7 重要版本
³     功能:
²     将坦克单独包装成类
²     步骤:
±     建立 Tank
±     Tank 类添加成员变量 x y
±     添加 draw 方法,使 Tank 类独立控制自己的画法
±     添加 Tank 类处理按键的方法
±     根据 Tank 类修改 TankClient
³     掌握:
²     面向对象的思考方法
±     细节隐藏、构建单独的类、首先考虑系统中有哪些类
±     合适的方法应该出现在合适的类中
思考
³     如何让坦克向 8 个方向行走 ?
版本 0.8
³     功能:
²     让主战坦克向 8 个方向行走( 1
²     步骤
±     添加记录按键状态的布尔量
±     添加代表方向的量(使用枚举)
±     根据按键状态确定 Tank 方向
±     根据方向进行下一步的移动( move
版本 0.9
³     功能:
²     让主战坦克向 8 个方向行走( 2
²     步骤
±     处理键抬起的消息
±     修改 TankClient 相关代码
版本 1.0
³     功能
²     添加子弹类
²     步骤:
±     添加 Missile
±     添加 x,y,dir 等属性以及常量
°     添加构造方法 , draw 方法等必要方法
°     根据不同方向,进行不同的运动
°     TankClient 中模拟一颗子弹
¯     new 一颗子弹出来
¯     画出来
³     注意:
²     不一定一次写到位
²     进行多次试验
²     将步骤分解开来逐一进行调试
  
版本 1.1
³     功能:
²     根据主战坦克的方向和位置,打出子弹
²     步骤
±     增加对 Ctrl 键的按键处理
±     根据 坦克打出一发子弹 这句话,来确定 Tank 中的方法 fire ,其返回值为 Missle
±     根据后返回 Tank 方向和位置设定子弹的方向和位置并 new 出来,然( fire 方法的实现)
³     注意:
²     掌握面向对象的思维方式来确定类应该具有的方法
版本 1.2
²     为了解决坦克停下也能打出炮弹的问题 画出炮筒
²     步骤
±     Tank 类增加新的属性 ptDir
±     每次 move 后根据 Tank 新的方向确定炮筒的方向
±     将炮筒用直线的形式表现出来
版本 1.3
³     功能
²     打出多发炮弹
²     步骤:
±     使用容器装炮弹
±     每当抬起 Ctrl 键就往容器中加入新的炮弹
±     逐一画出每一发炮弹
³     注意:
²     泛型的使用
版本 1.4
³     功能
²     解决炮弹不消亡的问题
²     解决坦克出界的问题
²     步骤:
±     加入控制炮弹生死的量 bLive Missle
±     当炮弹已经死去就不需要对其重画
±     当炮弹飞出边界就死亡
±     当炮弹死亡就从容器中去除
³     注意:
²     将思维转化为代码
Debug 的运用
³     一步一步跟踪代码
³     为代码设置断点
³     Step into step over 的概念
³     学会在运行过程中观测变量的值
版本 1.5
³     功能
²     画一辆敌人的坦克
²     步骤:
±     加入区别敌我的量 good
±     根据敌我的不同设置不同的颜色
±     更新 Tank 的构造函数,加入 good
±     TankClient new 出敌人的坦克并画出
版本 1.6
³     功能:
²     将敌人坦克击毙
²     分析:一颗子弹击中敌人坦克
²     步骤:
±     Missle 中加入 hitTank(Tank) 方法,返回布尔类型
±     碰撞检测的辅助类 Rectangle
±     Tank Missle 都加入 getRect 方法
±     当击中敌人坦克时,坦克被打死,子弹也死去
±     增加控制 Tank 生死的量 live
±     如果死去就不画了
³     注意:
±     不要照抄代码
±     沿着思路往里加入代码
版本 1.7
²     加入爆炸
²     步骤:
°     添加爆炸类
¯     用不同直径的圆模拟爆炸
¯     加入 live
¯     加入位置属性
¯     加入 draw 方法
°     爆炸应该存在于集合类中
¯     TankClient 加入集合
¯     将集合中的爆炸逐一画出(如果死去就去除)
°     击毙一辆坦克后应产生爆炸
¯     hitTank 时应产生爆炸
版本 1.8
³     功能:
²     添加多辆坦克
²     步骤:
±     用容器来装敌人的 Tank
±     向容器中装入多辆敌人 Tank
±     画出来
±     运行,不能打掉
°     添加 hitTanks 方法,打一系列 Tank
°     TankClient 里面每发子弹都打 tanks
版本 1.9
³     功能:
²     让敌军坦克更加智能
²     步骤:
±     让敌军坦克动起来
°     构造函数中可以指定方向
°     new 敌军坦克的时候指定敌军坦克的方向
±     让敌军坦克向随机方向移动
°     (Tank) 静态的,添加随机数产生器 java.util.Random
°     move 完成后,如果是敌军坦克的,随机产生一个数,来设定坦克下一个方向
°     Direction.values()
±     让敌军坦克向随机方向移动随机的步骤
°     添加变量,记录随机步骤
°     ==0 时,改变方向,否则,只是随机步骤递减
±     让敌军坦克发射炮弹
°     本军炮弹不打本军
°     炮弹添加好坏 bGood ,根据好坏画不同颜色
°     修改炮弹的构造方法
°     修改 Tank fire 方法
°     修改 hitTank 方法,好不能打好,坏不能打坏
±     敌军炮火不能太猛烈
版本 2.0
³     功能:
²     添加两堵墙
²     步骤:
±     Wall 类、建立 Wall 对象、画出来
±     让每一颗子弹打击每一堵墙
°     hitWall() 方法
°     注意:
¯     子弹速度不能太快,否则很容易穿过墙
±     让坦克不能穿过墙
°     记录上一次的位置 oldX, oldY
°     修改构造函数
°     每次 move 之前纪录上一次位置
°     添加 stay 方法
°     记录移动前的位置
°     当撞到时回到移动前的位置
°     当碰到墙的时候 stay
 
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
坦克大战是一款经典的游戏,下面是一个使用Java编写的简单的坦克大战游戏的示例。 首先,你需要创建一个Tank来表示坦克,这个应该包含坦克的位置、方向、速度等信息,以及坦克的移动、射击等方法。 ```java public class Tank { private int x; // 坦克的横坐标 private int y; // 坦克的纵坐标 private int direction; // 坦克的方向(0:上,1:下,2:左,3:右) private int speed; // 坦克的速度 public Tank(int x, int y, int direction, int speed) { this.x = x; this.y = y; this.direction = direction; this.speed = speed; } public void moveUp() { y -= speed; } public void moveDown() { y += speed; } public void moveLeft() { x -= speed; } public void moveRight() { x += speed; } public void fire() { // 射击的逻辑代码 } // 其他方法 } ``` 然后,你需要创建一个Game控制游戏的逻辑,包括创建坦克、敌人、地图等元素,并实现游戏的循环逻辑。 ```java public class Game { private Tank playerTank; // 玩家坦克 private List<Tank> enemyTanks; // 敌人坦克列表 private int[][] map; // 地图 private boolean gameOver; // 游戏是否结束 public Game() { // 初始化地图、玩家坦克、敌人坦克等 } public void run() { while (!gameOver) { // 处理用户输入 // 移动玩家坦克 // 移动敌人坦克 // 判断是否有坦克死亡等逻辑 // 绘制游戏界面 } } // 其他方法 } ``` 最后,你可以在游戏方法中创建一个Game对象并运行游戏。 ```java public static void main(String[] args) { Game game = new Game(); game.run(); } ``` 以上是一个简单的坦克大战游戏的示例,你可以根据自己的需求和想象进行适当的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值