![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181052738-806724064.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181052983-887872734.png)
-------------------------
字体闪烁:
(一会儿画出,一会儿不画,线程闪烁,休眠1秒,重画)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181053286-73886398.png)
启动msp线程:
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181053552-392353911.png)
---------------------------
如何切换到游戏界面?
响应“开始新游戏”这个按钮就OK了;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181053896-1018002067.png)
让JFrame实现一个接口:
对用户不同的点击作出不同的处理
//先删除旧的开始面板
this.remove(msp);
//显示,刷新JFrame
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181054266-1912128285.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181054510-1745525113.png)
--------------------------------------
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181054744-577024944.png)
可以在玩游戏的时候暂停和继续:
思路:当用户点击暂停的时候,把子弹的速度和坦克的速度设为0,并且让坦克的方向不要变化;
--------------------------------------
记录玩家的成绩:
思路:用文件流的方式,小游戏-文件;大游戏-数据库;
CS/BS结构,保存在服务器数据库里面;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181055068-5807628.png)
------------------------------------------
做界面:
添加新功能:单写一个类,专门来记录一些设置信息:
通过面板来控制一些游戏设置;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181055369-1810984632.png)
游戏设置信息完全可以保存在缓存recoder里面;
//记录每关有多少敌人
private static int enNum=20;
private static int myLife=3;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181055760-1866572680.png)
----------------------------------------
paint 函数:
//画出提示信息坦克
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181055992-1067049486.png)
敌人坦克数量从Recoder取出;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181056220-1004348913.png)
//我的坦克
Recorder.getMyLife()
//封装成一个函数 ,画出提示信息,传一个画笔
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181056529-1713149631.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181056844-492292283.png)
//当打掉敌人一个坦克,坦克数量需要减少
hitEnemyTank判断
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181057049-406879821.png)
et.isLive=false;
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181057287-573955849.png)
public static void reduceEnNum()
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181057549-1021050455.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181057766-1280505909.png)
//画出总成绩,把成绩写进文件流里面
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181058197-1785215762.png)
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181058467-1871343607.png)
//
![](https://img2018.cnblogs.com/blog/1167156/201811/1167156-20181130181058695-1558425863.png)
//下一步,退出,暂停,重新开始;
写,读---交给Recorder函数