zoukankan      html  css  js  c++  java
  • 【Java】寒假答辩作品: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();

    就能随时停下。

    这时候我就基本完成了剩余内容:不同关卡不同音乐,音乐可开关,开关按钮状态会改变。

    后续

    待更

  • 相关阅读:
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    《算法竞赛入门经典》 例题35 生成元 (Digit Generator, ACM ICPC Seoul 2005,UVa)
    SVN分支
    SVN分支
    SVN 版本回退
    SVN 版本回退
    如何在excel中取消合并单元格后内容自动填充?
    如何在excel中取消合并单元格后内容自动填充?
    如何让自己像打王者荣耀一样发了疯、拼了命的学习?
  • 原文地址:https://www.cnblogs.com/404name/p/12345428.html
Copyright © 2011-2022 走看看