暑假敲代码的效率真的不高呀,一个这种小游戏从最开始构思到最后实施代码,从最开始的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++确实其他语言上手很快。

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

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

Java贪吃蛇感想的更多相关文章

  1. java贪吃蛇

    这个贪吃蛇有很多功能没有实现,比如说穿墙(本来可以实现,但是穿墙后,就会出现坐标混乱,吃不到食物了),还有碰到自己的身体死亡的情况也没有实现,现在我知道如何判断是否碰到身体,但是,我不知道,如何处理碰 ...

  2. Java贪吃蛇游戏

    package snake.game; import java.awt.CardLayout; import java.awt.Color; import java.awt.Graphics;   i ...

  3. Java贪吃蛇小游戏

    贪吃蛇 思路 首先构思游戏布局,计算合理的坐标系. 绘制静态数据(广告.初始小蛇.提示信息.棋盘) 添加键盘监听事件,改变游戏状态以及小蛇运动方向 添加定时器,让小蛇在一段时间内移动一定的距离 随机产 ...

  4. java贪吃蛇小游戏详解

    https://blog.csdn.net/u011622021/article/details/81162083

  5. Java经典小游戏——贪吃蛇简单实现(附源码)

    一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...

  6. 关于用Java写的贪吃蛇游戏的一些感想

    学习Java有那么一个月了,兴趣还是挺高的.然而最近老师布置的一个迷宫问题,着实让我头疼了一两个礼拜,以至于身心疲惫,困扰不安.无奈,暂且先放下这个迷宫问题,写个简单点的贪吃蛇程序,以此来提高低落的情 ...

  7. 贪吃蛇的java代码分析(一)

    自我审视 最近自己学习java已经有了一个多月的时间,从一开始对变量常量的概念一无所知,到现在能勉强写几个小程序玩玩,已经有了长足的进步.今天没有去学习,学校里要进行毕业答辩和拍毕业照了,于是请了几天 ...

  8. 贪吃蛇的java代码分析(二)

    代码剖析 贪吃蛇是一款十分经典的小游戏,对初入coding的朋友来说,拿贪吃蛇这样一个案例来练手十分合适,并不高的难度和成功后的成就感都是学习所必须的.下面我将依照我当时的思路,来逐步分析实现的整个过 ...

  9. 贪吃蛇的java代码分析(三)

    代码剖析 在上一篇文章中,我们完成了贪吃蛇部分代码的构造.回头审视我们写的代码与思路,会发现我们遗漏了一个重要的地方,那就是:贪吃蛇的自身移动.想必大家都知道,贪吃蛇自身是会自己移动的,并且会跟随你的 ...

随机推荐

  1. oracle 恢复数据到某个时间点

    delete from tablename;insert into tablename select * from tablename as of timestamp to_timestamp('20 ...

  2. js获取地址栏URL上的参数

    获取地址栏上的URL参数现在最简单通用的方法应该就是下面这种了. function getUrlParam (name) { var reg = new RegExp('(^|&)' + na ...

  3. 关于C#中函数的认识

    对于C#语言中的函数,大概分之为函数的声明及其调用. 函数的声明: 1.函数的声明是指给一段代码取名称. 2.函数的声明位置必须在类中. 3.函数声明的语法: 函数声明的语法:static void ...

  4. Codeforces 149 E. Martian Strings

    正反两遍扩展KMP,维护公共长度为L时.出如今最左边和最右边的位置. . .. 然后枚举推断... E. Martian Strings time limit per test 2 seconds m ...

  5. Winform开发框架中工作流模块的业务表单开发

    在我们开发工作流的时候,往往需要设计到具体业务表单信息的编辑,有些是采用动态编辑的,有些则是在开发过程中处理的,各有各的优点,动态编辑的则方便维护各种各样的表单,但是数据的绑定及处理则比较麻烦,而自定 ...

  6. org.elasticsearch.transport.ReceiveTimeoutTransportException[cluster:monitor/nodes/liveness] request_id [31] timed out after [5000ms]

    ES连接超时,异常信息 2017-09-07 10:42:45.042 [elasticsearch[Bantam][transport_client_worker][T#17]{New I/O wo ...

  7. 使用soap实现简单webservice

    在网上看到一些关于用soap实现简单webservice的一些知识,简单整理一下希望对大家有所帮助. 可以给大家看一下我的简单实现的列子,Soap,大家可以到Github上自行下载. 首先说一下web ...

  8. 苹果审核返回崩溃日志 iOS .crash文件处理 symbolicatecrash.  困扰我多年的牛皮癣根治了 看到这篇文章拿过来用下

    AppStore审核被拒,返回crashLog.txt文件,可是打开后都是十六进制的地址,我们可以使用Xcode自带的 symbolicatecrash 解析得到我们需要的详细崩溃信息crashLog ...

  9. 【正则表达式】匹配时间格式:hh:mm或h:m

    ^(0?[0-9]|1[0-9]|2[0-3]):(0?[0-9]|[1-5][0-9])$

  10. HTML基础教程-元素

    HTML 元素 HTML 文档是由 HTML 元素定义的. HTML 元素 HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 注释:开始标签常被称为开放标签 ...