Java贪吃蛇感想

  暑假敲代码的效率真的不高呀,一个这种小游戏从最开始构思到最后实施代码,从最开始的Demo版本到最后的第四版本,花了一个星期了。本想再更新一个版本,加入双人对战模式,还想写个AI版,可是我估计按照现在我这种效率又要画上好多时间了。想想还是等以后有时间再写吧。。。虽然这游戏写起来看似不难,可是对现在的我来说,还是有点考验的。中途也遇到了不少问题,遇到了不少知识盲区。我发现设计游戏有时候比敲代码还要头疼,你从最开始基本没有什么头绪的状态到后来逐步开始思考游戏的玩法,怎么去实现,制定游戏规则,敲代码,调试代码,测试游戏,发现bug,寻找bug产生原因,调试,寻求方法修复,一步一步,还是需要思考挺多东西的。还有,程序写多了,代码到了一定数量级就会发现,程序的结构也是很重要的,各功能模块怎么抽象出来,怎么实现接口,怎么调用,怎么做到尽可能精简代码,可是值得考虑的。后来调整程序结构,把整个程序分到几个源文件中,又得重新思考怎么实现,数据怎么共享。怎么用一种数据结构来表示一种现实实体也是很重要的。比如我之前写过的一个2048小游戏,用什么来表示那一个个方块呢?那时候我还没用过Java画图函数,但是那段时间在学Java GUI ,所以我自然想到用一个Button来表示一个方块,其实现在我去重新写那个游戏,我自然不会用button了,因为用button表示方块时无法在移动中出现动画效果,移动效果十分不自然,闪现的感觉。但是我当时想到那种方式能实现移动我觉得很不错了。再比如这次的蛇身体怎么表示呢,由于我最初的Demo版本蛇身体是用画图的形式实现的,所以我只需要每次记录下每个身体节点的坐标就可以实现每次重绘身体节点的时候产生移动的效果,于是我写了一个类,把横坐标和纵坐标封装进去了。后来发现这个类给我带来了很多好处,有些是我最开始都没想到的。比如后来产生食物的时候食物也需要一个坐标,等等。后来重新用图片表示身体时又在想怎么实现移动效果,发现只需要每次重新设置label的坐标即可。只不过要在重新开始前移除所有的这些label然后重新添加,重新设置坐标。再后来加入障碍物时,也就是加入很多堵墙,在想怎么表示这些墙呢,最初的墙我想只沿着网格线画一根比较粗的线条即可,后来我发现这种方式我无法实现判断蛇头撞墙,于是我改用了之前实现蛇身体的方式,该用了图片,这样一堵墙就是一个坐标数组,这样我就抽象出了墙这种实体,然后写了一个类,多堵墙就是这个类的一个数组。。。再到最后实现那个喷火功能时也思考了很久,遇到了一些bug,慢慢调试,耐心寻找原因,好在最后的效果还算满意。

  我估计自己再敲完最后几个Java程序就不会再用Java了,倒不是说永远不用,至少大学剩下两年估计不会再用了。Java确实很棒,有一点C语言或者C++基础再稍微学习一下可以很快上手的,最重要的是,Java能很快让你学会它的GUI,有了GUI就可以写很多东西了,虽然窗体程序技术含量不一定比得上C++几百行代码,但是,敲点GUI的小程序还是成就感十足的。以前敲C++时,总是在黑色的控制台输入一个东西,然后程序给你返回一个东西,感觉很无聊。有了GUI确实有趣多了,但是也会花你很多时间去关注那些不属于程序核心的东西,有时候会为了一个界面布局的美观在那里调来调去很长时间,最后才发现这不是主要的活呀。我现在还是觉得功能的实现与完善是最要的,虽然我也很关注GUI,但让我去写这东西,还是感觉很烦的。Java把很多东西给你封装好了,用起来很简单也很方便,我用Java一学期,最大的印象就是用什么就new什么,甚至可以直接new ...();连变量名都用不上了,还有用Java的时候函数参数传递都没怎么用了,很多方法的返回值都可以直接写成void了,也没了指针,引用也很少用了,这些我以前用C++时每天要接触的东西一下子感觉陌生了,而且调试都用的少了,有些时候加上一句输出就可以判断问题出在哪。可是,我愈发有种感觉,虽然Java代码一个学期的量就比之前写过的C和C++加起来还要多的多,但是总感觉没有以前写程序的那种感觉了,总有种感觉是在把别人已经实现好的东西组合起来的感觉,确实Java里很多东西我只会用,不了解太深的原理,甚至有些语法我都不是很熟悉,但是只要你有一定基础,写程序时逻辑清晰,能够用程序把你的逻辑表达出来就可以了,这不如我学习C++时候的感觉,C++的一些语法我可能一下子都看不懂,要思考很久,但是感觉看懂了就很有收获,虽然没写过太多程序,但是感觉能力在提升。于是我打算重新回到C++了,我怕我再接着用Java最后C++会忘很多,学好了C++确实其他语言上手很快。

  以上只是一个菜鸡的一己之见,忘园里大神勿喷。

最后附上我写的这个贪吃蛇最后一个版本的截图

 

 

 

 

 

 

 

 

----------------------------------------------------------

 --2018.6.26

 

补充:由于最开始写这个游戏是从demo版本的结构一点点扩充的,所以写到最后结构就变得很不合理,抽象层次不高,接口调用设计的不好,所以我最近抽时间进行了一次重构,更新到了第5版,基本上算是重新写了一遍,虽然界面没啥变化,但是程序内部结构是完全不一样了。当然也修复了原来存在的一些问题(比如:更换背景时刷新不及时,去掉或显示网格线时刷新不及时,不能同时发射多个子弹 等)AI版以及局域网下多个玩家以后抽时间写吧,这学期真没时间了。

以下是第5版“帮助”界面

 

转载于:https://www.cnblogs.com/journal-of-xjx/p/7217799.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值