寒假答辩作品:Java小游戏
java入门小游戏【test】
游戏界面
github地址: https://github.com/404name/WinterReplyWorks
网盘(提取码pzgt):https://pan.baidu.com/s/1-JoHOCKYl_56fKCzhEmMvg
前言 (可直接跳到程序介绍)
前期入门小项目
过年这段时间在家写了两个C语言的大程序,当初在学校立的flag就是用C写一个游戏,一个程序。
游戏完成了:https://www.cnblogs.com/404name/p/12234419.html感觉想法很好,但就是操控有点麻烦。
而另一个程就另作他用了,所以就不介绍了。
之前学过python,但没什么实质性的作品,为此思考寒假其实还是什么都没学到的。仔细思考了很久。
还是决定走java,贴切目前学过的C,看基础部分实在没意思,在家也不是沉得心去琢磨java的基础用
法,就想着直接上项目吧。因为C++面向对象的编程其实我也是没太多接触的,当接手项目时其实自己
也是很懵的。这时候我开始在github上找我能接受理解的小项目,然后正巧在b站
看到了这个教学,然后就开始跟着去了解java的一些操作。
这时候才发现,java其实本质和C还是大不一样的。
几小时能看完的视频,我大概跟着弄了一天(配置环境,查找用法,de莫名其妙的bug);
终于在晚上成功用exe4j打包出了我的第一个简易的JAVA小游戏。
这个大概就是个熄灯问题的游戏,你点击一个地方,他的上下左右中间都会改变一个面,然后要实现全部
翻回来,为此我还临时写了个C语言代码去跑结果。(C语言程序也在游戏包里面)。
前期收获
大概明白了,入门阶段遇到的bug是最手足无措的,编译器界面莫名其妙给你报错,百度还是一些看不懂的名词,哈哈太刺激了。。
我还在教学视频了发现了许多不足,比如他点一个地方会改变上下左右中间5个,然后比如角落他只会
改变 3个 或者 4个,因为他建立的是一维数组,他居然用了将近70行的枚举去枚举每一类。
然而只要把一维转成二维(二维数组本质其实就是一维),然后加个next【5】【2】移动判断,10行
就能解决。但可能是讲给初学者听的,所以就怎么简单怎么来,但,,这里也是我唯一可以体现我学
过编程的地方,后面就全部都是惊讶与自闭了。
我最佩服的面对对象编程就是这个:
Start_click listener = new Start_click(); // 实例化监听器
JButton reset = new JButton("重置");
reset.addActionListener(listener);
简直了!!把鼠标实体化,然后把鼠标加在一个按钮上,然后只要判断if(e.getSource() == reset)
就能轻松的实现交互,想起来我C语言都是要先另建立一个map储存数据,然后再读取返回,而java直
接短短3行就能搞定。
然后感觉打开了新世界大门,十分佩服以前的人能把底层代码一步步进化到封装的对象和类操作。
再进化下感觉直接说 把监听器加在新键按钮上 编译器都能实现。
这里我学会了好多东西,建立窗口,把对象像拼积木一样搭载在上面,学习ps切割图片,学习如何打包。
当然也遇到了许多困难。
比如很自闭的搞不清包,类,static,public。
一开始也搞不清这个java怎么走的流程(看教学视频“哦,这是主方法,调用另一个java的.......哦,我懂了”,然后来写程序时“这特么是什么,这怎么结束啊,这到底怎么走的啊......”)
最神奇的是我搞不清图片怎么操作(后来才搞清)
就这样我大概写完了最初的框架(这里能播放音乐,实现效果,和教学视频的一模一样了。mid格式的音乐,1分钟的歌曲他能给压缩到3kb,神了,然而音质,,绝了)
这里仅仅实现了,我游戏第七关的效果。后来就进入了自闭的自己创造模式了。
后期自创关卡
熄灯问题拓展
就自己会基础操作后,就跃跃欲试。这时候我的文件是 一个mygame.java,一个music.java
我先是尝试在基础原来关卡的基础上改变下熄灯方式,这不就来了几个关卡了嘛。
原先是点一个地方 改变上下左右自身,通过巧妙的控制next数组,就轻松的写出了几个关卡,但问题
来了,怎么跳关卡?要说是在C语言里面,我能拿出好几种方案,但一到这里,我连函数递归啥的都搞
不清了,原因是监听器太混淆视听了,我一个函数只会走一次,但监听器在上面,它就总都会反应
(其实就是我没及时删除监听器),导致切换关卡25个方格变成50个,还弹出了新的窗口,按键还没
用。这就很绝望,然后各种失败后,才搞懂了,应该跨文件调用初始的jf窗口,然后设置静态等等。
但这里也只是开头,马上我把设置的4个关卡发现,4个java是多余的,合并了一下,因为是同类游戏。
新游戏拓展
后来我就在想什么游戏可以搭在这个框架上,显然我想到了以前老手机上的一个游戏九宫格拼图。
直接上图,只要改变一下熄灯规则就变成新游戏了!原本的是按下一个按钮检索上下左右自身是否合
法,然后改变图片,这些图片是固定好的。而我只要变成检索上下左右是否有 空白图标的就交换就实
现了游戏。然后问题是怎么随机初始化游戏,有没有什么算法可以实现25个数随机填入25个空。
后来放弃了,因为它会卡位,就像魔方,你必须在它还原的基础上打乱它,它才能还原。把它拆卸后随机
重装是很难复位的,或许有时候也不能复位。所以随机方法就是系统后台在它还原的基础上随便按下100-1000次
思路我有,就随机生成一个1-5的数对应方向,每次交换一个位置后,自动挪到下一个可移动位置再重复循环。
但毕竟是新语言,不能像C一样能达到想到啥干啥。
所以我放弃了,使用了固定的开局。
但作为新时代的bug maker,怎么能一个一个的人工随机填入呢。
我使用的是差位填入,就是还原图往后移动几格的基础上人工交换1 2个就行了。
然后我加入9 宫格 16宫格,ps切好的图片,下一关按钮, 计步器按钮。实现起来简直简单的不要。这时候7 + 1个关卡就写完了。
实现切换关卡切换音乐
但是,这么丰富的内容,怎么能搭配mid格式的音乐呢。
这时候我又掉进了另一个坑,在各种博客辗转,加载了jar包,试过提高mid音质,都没用。
我那时候就想找一个直接调用 函数名(地址) 就能播放的简单代码。最后唯一找到的还是wav格
式播放器,纯代码实现,但问题来了,我看不懂。。我music song = new music; song.play();
它就播放了,还停不下来,还只能在源文件里改动。那岂不是我要写8个音乐源文件?
后来自己一步步尝试改造,终于在它的基础上写出了我想要的音乐类。而且直接调用song.aay.stop();
就能随时停下。
这时候我就基本完成了剩余内容:不同关卡不同音乐,音乐可开关,开关按钮状态会改变。
后续
待更
寒假答辩作品:Java小游戏的更多相关文章
- 寒假答辩作品——掘地求升C语言版
寒假答辩—掘地求升(C语言版) 前言 这个是作为寒假答辩作品写的. 之前考虑过用Unity写个游戏,但毕竟不熟悉C#,感觉几乎都是在套模板,而且写着不顺手,有想法却只能 看着C#发呆,很是无奈,所以决 ...
- 猜生日 Java小游戏
最近看到一个很有趣的小游戏: 询问朋友5个问题,找到他出生在一个月的哪一天.每个问题都是询问他的生日是否是5个数字集合中的一个. 这5个集合分别是: set1:1 3 5 7 9 11 13 15 1 ...
- Java小游戏
这是一个飞机躲避子弹的小游戏,其中有许多干货 这是蒟蒻我第二次做,请各位大佬多多指教 目录 1.游戏主窗口的创建 2.图形绘制_文本绘制_颜色改变_图像对象的加载 3.线程内部类实现动画 4.游戏物体 ...
- java小游戏代码
一. 需求分析 曾几何时,游戏是海洛因的代名词,让人与玩物丧志联系在一起.一度遭到社会反感和家长抵制.可是.随着互联网的发展,和游戏潜在优点被发现.游戏的价值開始逐渐被社会认可,人们開始接受.认识和了 ...
- JAVA小游戏之两个物体碰撞产生的碰撞检测
首先必须了解两个物体,在移动时,会有怎样的效果,比如沪我们小时候耍过的坦克大战.看起来很简单,但是写起代码来,复杂的要多: 下面举个例子: // 构造一个新的 Rectangle,其左上角的坐标为 ( ...
- Java小游戏贪吃蛇
package snake; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java ...
- Java 小游戏 - 井字棋 v1.0 (初步完成) (2018.4.16更新)
井字棋游戏初步完成 实现功能:输入位置数据->打印棋盘->判断是否胜利->继续游戏/退出游戏 缺点:没有清屏函数 判断胜利方法太过无脑 package MYGAME; ...
- 制作的第一个java小游戏
package java1; import java.awt.*; public class java1 extends Frame { //球桌和桌球图片 Image ball = Toolkit. ...
- java小游戏java九宫格
问题来源于吾爱破解https://www.52pojie.cn/thread-1484202-1-1.html 编程目标一:根据下面的"游戏说明",实现该游戏程序,完成响应用户的输 ...
随机推荐
- pom文件继承与聚合
1.简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId和version等Maven项目必须的元素:可以配置Mave ...
- Vue 编程式的导航
1.应用场景 在同一路由的情况下,不同的参数之间进行切换 注意:别忘记初始化路由页面 2.用法 a.定义方法 b.实现方法 c.初始化路由页面 3.案例 <template> <di ...
- 【洛谷4424】[HNOI_AHOI2018]寻宝游戏(我也不知道括号里该写啥)
题目 洛谷 4424 分析 感觉思路比较神仙. 对于按位与和按位或两种运算,显然每一位是独立的,可以分开考虑. 对于某一位,「与 \(0\)」会将这一位变成 \(0\),「或 \(1\)」会将这一位变 ...
- scikit-learn基础
一.scikit-learn基础 sklearn.ensemble模块有两种基于决策树的算法----随机森林和极端随机树
- spring.net 基础 1
Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序 1: 在2004年初,Martin Fowler曾经问他网站的读者:当我们谈到控制反转时,"问题是, ...
- MATLAB2017 下载及安装教程
全文借鉴于软件安装管家 链接: https://pan.baidu.com/s/1-X1Hg35bDG1G1AX4MnHxnA 提取码: ri88 复制这段内容后打开百度网盘手机App,操作更方便哦 ...
- Client API Object Model - Form Context
FormContext 提供界面或者界面上控件的的引用. 比如说 quick view control, row in an editable grid 等等. Xrm.Page 和 getFormC ...
- Java 使用 UnixSocket 调用 Docker API
在 Docker 官网查阅 API 调用方式 例如:查询正在运行的容器列表,HTTP 方式如下: $ curl --unix-socket /var/run/docker.sock http:/v1. ...
- AVLtree(C++实现)有统一的旋转操作
在学习完AVLtree之后,我发现,左旋,右旋均可以采用统一的旋转方式来实现,所以把代码贴在下面 代码是完整的AVLTree实现 C++标准为C++11 在ubuntu 18.04下通过编译和调试 / ...
- Linux防火墙之iptables入门
一.防火墙的概念 什么是防火墙?防火墙是一台或一组设备,用以在网络间实施访问控制策略:事实上一个防火墙能够包含OSI模型中的很多层,并且可能会涉及进行数据包过滤的设备,它可以实施数据包检查和过滤,在更 ...