Fork me on GitHub

C# WPF坦克大战

 

wpf写的。主要是Canvas做画布 和类似的Rectangle的自定义类
采用了画面帧的思想,子弹 坦克移动 效果 都是 在主界面用一个定时器 循环,每秒60帧,这样做的好处,对比我之前做的炸弹人游戏,炸弹人是一个敌人一个移动线程,放的每颗炸弹定时爆炸也是一个线程,所以界面有好多对象,就有好多线程在运行,而采用画面帧的思想,就一个线程,搞定所有的动效,虽然 每秒运行60次,但是大大减少了线程数量。
 
 
地图有一个地图编辑器,不同颜色代表不同的砖块类型,白色为删除当前砖块,保存的时候把坐标点集合导成json,然后启动游戏时加载,加载时,把打砖块分成10个小砖块。
敌方坦克的移动方法是,判断当前地方坦克四周是否是可移动的坐标点,如果是,加入到一个数组中,然后从数组中随机一个点,最后把坦克移动到那个点。
 
游戏中的移动物体 是 来自于 复制 Rectangle的部分代码,继承Shape,然后写一个 子弹 地方坦克 玩家坦克 的父类。官方自带的类库里的Rectangle不能继承,sealead 关键字 密封了的。虽然官方也不赞同复制Rectangle的源码来作为自己的对象,但这却是我认为最快速的方法。
 
目前 只实现了 碰撞,子弹消砖块 移动 爆炸 坦克死亡 移动音效 打砖块音效 玩家发子弹音效这些基本功能。
代码写的十分混乱,只图快速完成。
如果要代码可以评论留言。

2025年5月10日补充

  把3年前的代码下载下来,发现当时的代码不仅乱,而且封装的很粗糙。这个五一假期,我把代码重构了一下,删除了很多代码,对代码重新进行了封装,并把电脑坦克增加了A*自动寻路算法。整体代码结构可以说是清晰了不少。功能上并没有增加其他的新功能。这次的重构,体会最深的还是,面向对象的设计,代码的封装,在软件开发中很重要,可以避免烂代码的产生。另外代码写得多了,这种对类的封装的能力是可以提升的。最后是对做事态度的认识,写烂代码的原因,我根据自身的实际感受,大多是自己态度问题,对代码没有很严格的要求,一味地追求快速实现功能,实现之后,觉得代码能跑就行,心头就满足了,就不会深入的去优化了。这个态度我觉得还是和自身的心力有关系。心力低的人,做任何事态度都不会太好的,心力足的人,态度自然会好很多。这个心力就好比是游戏里角色释放技能所消耗的蓝条。写代码这种事,还是对心力有一定要求的,我认为凡是从事比较偏静态的事情,都需要充足的心力,才有条件把事情做得更好。说再直白点,这个做事是要花费神的,心力低的人,没有太多的精神力可以耗费,做的每件事自然平均分配下来的精神力就要少许多,做事当然也没那么好的态度,做出事情的结果自然也是不让人满意的了。

TankWarWPFUI_V2.zip

上面的代码是2022年7月写的,代码写得十分的烂,主要是实现思路。下面的v3的代码是最近25年五一假期写的,比2022年好了很多。可以对比着看,在代码优化上也许就能多一种思路。

WpfTankGameV3.zip

 

posted @ 2021-11-26 23:52  HelloLLLLL  阅读(467)  评论(2)    收藏  举报