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++确实其他语言上手很快。
以上只是一个菜鸡的一己之见,忘园里大神勿喷。
最后附上我写的这个贪吃蛇最后一个版本的截图
Java贪吃蛇感想的更多相关文章
- java贪吃蛇
这个贪吃蛇有很多功能没有实现,比如说穿墙(本来可以实现,但是穿墙后,就会出现坐标混乱,吃不到食物了),还有碰到自己的身体死亡的情况也没有实现,现在我知道如何判断是否碰到身体,但是,我不知道,如何处理碰 ...
- Java贪吃蛇游戏
package snake.game; import java.awt.CardLayout; import java.awt.Color; import java.awt.Graphics; i ...
- Java贪吃蛇小游戏
贪吃蛇 思路 首先构思游戏布局,计算合理的坐标系. 绘制静态数据(广告.初始小蛇.提示信息.棋盘) 添加键盘监听事件,改变游戏状态以及小蛇运动方向 添加定时器,让小蛇在一段时间内移动一定的距离 随机产 ...
- java贪吃蛇小游戏详解
https://blog.csdn.net/u011622021/article/details/81162083
- Java经典小游戏——贪吃蛇简单实现(附源码)
一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...
- 关于用Java写的贪吃蛇游戏的一些感想
学习Java有那么一个月了,兴趣还是挺高的.然而最近老师布置的一个迷宫问题,着实让我头疼了一两个礼拜,以至于身心疲惫,困扰不安.无奈,暂且先放下这个迷宫问题,写个简单点的贪吃蛇程序,以此来提高低落的情 ...
- 贪吃蛇的java代码分析(一)
自我审视 最近自己学习java已经有了一个多月的时间,从一开始对变量常量的概念一无所知,到现在能勉强写几个小程序玩玩,已经有了长足的进步.今天没有去学习,学校里要进行毕业答辩和拍毕业照了,于是请了几天 ...
- 贪吃蛇的java代码分析(二)
代码剖析 贪吃蛇是一款十分经典的小游戏,对初入coding的朋友来说,拿贪吃蛇这样一个案例来练手十分合适,并不高的难度和成功后的成就感都是学习所必须的.下面我将依照我当时的思路,来逐步分析实现的整个过 ...
- 贪吃蛇的java代码分析(三)
代码剖析 在上一篇文章中,我们完成了贪吃蛇部分代码的构造.回头审视我们写的代码与思路,会发现我们遗漏了一个重要的地方,那就是:贪吃蛇的自身移动.想必大家都知道,贪吃蛇自身是会自己移动的,并且会跟随你的 ...
随机推荐
- 【Java入门提高篇】Day6 Java内部类——成员内部类
内部类是什么,简单来说,就是定义在类内部的类(一本正经的说着废话). 一个正经的内部类是长这样的: public class Outer { class Inner{ } } 这是为了演示而写的类,没 ...
- Codeforces 482B Interesting Array
题意:构造一个长度为n的序列,使其满足m个形式如下如下约束:a[l]&a[l+1]&a[l+2]&....&a[r]=q 从Dalao的博客上看到这题,决定去水水.做法 ...
- string的内存管理问题
string的内存管理是通过仅仅增不减的方式进行的,string的clear方法不会真正的释放内存,假设须要真正的释放内存可以连续调用string的这两个方法.resize(0),reserve(). ...
- Explicit Semantic Analysis (ESA)
有别于LSA (Latent Semantic Analysis), 下列文章提出一种ESA (Explicit Semantic Analysis), 并介绍怎样使用ESA来进行语义相关性和文本分类 ...
- D01 Elon Mulsk The future we're building — and boring
摘要:精选TED. 每个音频不超过2分钟,学英语和吸收伟大思想两不误 音频: https://n1audio.hjfile.cn/st/fb5ace6f-7b63-439d-954c-c4539c1f ...
- OpenTK教程-0序言
记得很久之前,我写过一个基于.NET的3D开发框架/工具比较.当时选定的技术是WPF.但是随着项目发展,需要处理的图形数量越来越多,基于WPF的处理起来性能有问题,最后还是使用了基于OpenTK的解决 ...
- gunicorn Arbiter 源码解析
如前文所述,Arbiter是gunicorn master进程的核心.Arbiter主要负责管理worker进程,包括启动.监控.杀掉Worker进程:同时,Arbiter在某些信号发生的时候还可以热 ...
- java什么叫线程安全?什么叫不安全?
就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问 什么叫线程安全: 如果你的代码所在的 ...
- Jenkins in OpenCASCADE
Jenkins in OpenCASCADE eryar@163.com Abstract. Jenkins是一个开源软件项目,是基于Java开发的一个持续集成工具,用于监控持续复制的工作,旨在提供一 ...
- Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?
在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanc ...