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代码分析(三)
代码剖析 在上一篇文章中,我们完成了贪吃蛇部分代码的构造.回头审视我们写的代码与思路,会发现我们遗漏了一个重要的地方,那就是:贪吃蛇的自身移动.想必大家都知道,贪吃蛇自身是会自己移动的,并且会跟随你的 ...
随机推荐
- Netty4 学习笔记之二:客户端与服务端心跳 demo
前言 在上一篇Netty demo 中,了解了Netty中的客户端和服务端之间的通信.这篇则介绍Netty中的心跳. 之前在Mina 中心跳的使用是通过继承 KeepAliveMessageFacto ...
- windows 终端命令详解
打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令后关闭cmd ...
- ListView原理
表明转载自http://blog.csdn.net/iispring/article/details/50967445 在自己定义Adapter时,我们经常会重写Adapter的getView方法,该 ...
- win8安装mysql5.5最后配置没有反应
win8安装mysql5.5最后配置没有反应 win8下安装mysql5.5一路顺利,可是到最后一步配置mysql服务及登录password后.注冊服务并启动服务界面一直没有不论什么反应: 本来以为是 ...
- .NET Core容器化@Docker
温馨提示:本文适合动手演练,效果更佳. 1. 引言 我们知道. NET Core最大的特性之一就是跨平台,而对于跨平台,似乎大家印象中就是可以在非Windows系统上部署运行.而至于如何操作,可能就 ...
- 从0引入 ASP.NET Identity Core
原文出自Rui Figueiredo的博客,原文链接<ASP.NET Identity Core From Scratch> 译者注:这篇博文发布时正值Asp.Net Core 1.1 时 ...
- Md5加密秘钥加密哈希加密
加密通用类: public class EncryptClass { /// <summary> /// 返回MD5加密字符串 /// </summary> /// <p ...
- REST设计规则
1.简介 REST(Representational State Transfer), 表述性状态转移是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格. REST只是一 ...
- 配置SQL Server on Linux(1)
1. 背景 SQL Server一般是在安装过程中进行相关的配置,安装完成之后,再去修改有一些配置就比较麻烦,比如更改SQL Server实例级别的排序规则.但在Linux下,安装过程并没有很多可以配 ...
- 「mysql优化专题」优化之路高级进阶——表的设计及优化(6)
正文:表的设计及优化(真技术文) 优化①:创建规范化表,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询需要.避免数据库操作异常的数据库设计方式.满足范式要求的表,称为规范化表,范式产生于2 ...