美文网首页
坦克大战思路

坦克大战思路

作者: 宝子向前冲 | 来源:发表于2022-05-21 18:59 被阅读0次

    创建窗口

    创建一个窗体类,继承Frame,(也可以不继承使用JFrame),然后在该类的构造函数中,使用Frame中的方法,设置窗体的标题,大小,位置,可显,不可改变窗体大小(注意:可以使用Toolkit方法获取屏幕的高宽;

    也可以直接写窗口的大小;setVisible()方法,显示窗体,最好写在最后面的位置)

    然后创建一个类,做主线程,在main方法里将该窗体类实例化,然后就实现了一个游戏窗体。

    添加游戏必要元素

    先在窗体类中写paint方法,这个paint方法会自动调用,在paint方法里,可以把人物,背景,各个界面的文字画出来,(可以选择不同的字体,颜色,进行美化)关于图片的添加,在该项目里新建一个包用于存图片,图片的使用,我使用的是一个工具类,我所知道的有一个方法把图片对象化的,然后找到图片的路径,对图片进行调用。(图片的实际大小和显示大小不一定一样,实际大小是你在程序中定义的,显示大小是图片本身的大小)

    控制我方坦克

    创建人物类,定义初始位置,和方向,速度,写一个构造器,这样就可以实例化的时候赋初始值了,写一个画笔的成员方法,在从窗体类中的重写paint方法里传过来画笔,这样这个成员方法也相当于重写paint方法了,再写移动方法,通过判断方法来控制移动,然后在paint方法中调用,然后就是获取方向了,可以在窗体类中添加按键监听,通过监听获取四个布尔值,四个布尔值对应着四个方向,在写一个成员方法将四个布尔值转变为方向,在人物类中写一个含参数的方法,用来获取方向进行参数的加减,启动线程,不断重画,进行移动。

    闪烁问题

    运用双缓存

    将所有的东西画在一副虚拟的图片上(和容器一样的大小),然后整个绘制到容器的画布中,一次性的显示出来;

    每一次调用repaint()方法(具有刷新页面效果的方法),先调用update()方法(清除当前显示并再调用paint()方法)。

    子弹的发射,碰撞,消失

    添加x,y等属性;添加构造方法、draw等必要方法;(实时绘制,执行完draw()语句之后立即进行渲染)根据不同的方向,进行不同的运动;按空格发射子弹,那么源头就是监听空格,构造方法来获取此时人物的位置信息的,这样我们获取了子弹的初始坐标和方向,创建一个子弹类,定义的信息和人物类差不多,创建一个子弹容器,在这里写一个方法获取子弹的初始的位置和方向,这样就可以实现按一次空格,就会往子弹容器里添加一个子弹,发射一次子弹后进行发射冷却,可以自己调节时间。关于内存溢出,在子弹类中写一个方法,通过判断子弹的位置,如果子弹的位置超出边界就消去这个子弹(容器中的子弹用getset方法来获取),然后将该方法在paint方法中调用,不断的刷新界面实现子弹的移动。然后判断子弹和界面内物体的碰撞,只要监控它们的坐标,判断是否相同,如果相同就同时消去。

    敌方坦克的产生,移动

    和控制我方坦克差不多,创建一个新的类,怪物的位置,可以通过创建一个随机类对象random,来获取随机横坐标来随机生成,

    怪物的数量多少和子弹相似,用容器的存储,这时候就要明确怪物的数量了,创建一个变量,加入if()判断当变量大于多少时,使坦克不在生成。坦克的移动可以通过获取四个随机数来随机生成的,方向转变的时间间隔相同。

    死亡,胜利,失败,暂停界面

    死亡就是判断两个坦克和子弹是否碰撞,把两个物体当作矩形,调用intersects()方法判断两个矩形是否相交。如果坦克和子弹相交及坦克死亡子弹消除;子弹和墙壁相交,两者同时消除。消除物体的方法,就是把用到它的方法从遍历paint的列表中去掉。

    胜利就是判断我方坦克是否消灭敌方所有坦克且基地保存完好。然后在paint中重新绘制游戏胜利的界面。

    失败和胜利大致相同,即我方坦克全部死亡或基地死亡时,重新绘制游戏失败界面。

    暂停模式,就是重新定义一个变量,按下暂停键时,给变量重新赋值。当变量的值为某个值时,重新绘制游戏界面,即跳转到暂停界面。并且使坦克不在生成和移动 。再次,按压下暂停键时,改为原来的值使界面转回原来界面,程序正常运行。

    优化添加特效

    写完上面的游戏就能运行了,不过还是要加一些爆炸特效和背景音乐。

    爆炸特效就是,在坦克与子弹相碰的位置连续切换绘制爆炸图片来实现。用Toolkit.getImang()方法来获取图片用for()循环进行图片转换

    添加背景音乐,创建一个新的类,用File添加音乐的绝对路径。然后在线程中用AudioSystem和AudiolnputStram处理音频文件,然后将要播放的音乐,调用到绘制画面后需要有声音的地方。

    相关文章

      网友评论

          本文标题:坦克大战思路

          本文链接:https://www.haomeiwen.com/subject/tazkprtx.html