捕鱼达人

(平时都是在学校搞c语言,写算法。忽然java实验课大作业让设计一个小游戏的确挺蒙的,好在我之前学习过开发微信小程序,边查文档文档边做也比较快,下面有我的源码,截图,欢迎刚接触java小游戏的朋友一起学习。)


以下才是重点

废话不多说先上效果图进入游戏
(进入游戏后的界面)

(点击左键捕到鱼的界面)

一个简单的UML类图

游戏实现(各种类)

(1)GameFrame(窗口)JFram游戏支架,用来固定游戏界面
(2)GamePanel(画板类)往窗口绘出各种表现效果
(3)ImageUtill(图片工具类)运用IO流方便图片的调用
(4)Fish(鱼类)鱼塘里的鱼(主角)
(5)Net(渔网类)展示鼠标的位置,右击可使网改变尺寸,左击进行捕鱼

实验总结

<1>窗口的建立

(1)只学了Java最基本的语法规则,和游戏完全不沾边,首先得创建一个窗口。学习到创建窗口的类继承于JFrame。
(2)有了窗口需要画定背景,这种操作叫画板,画板不但能规定背景颜色(在构造方法中用setBackground(Color.pink)),也可以绘出图片,文字等。
(3)图片的调用需要输入图片地址,返回一张图片,且在游戏中非常常见,另外把其写成ImageUtill(图片工具类)。
(4)将函数入口(main函数)写在GameFrame(窗口)里。
(5)遇到问题:GameFrame frame=new GameFrame();创建窗口对象后其不显示。frame.setVisible(true);需要用setVisible函数使其显示。
(6)遇到问题GamePanel panel=new GamePanel();创建画板后窗口不发生变化。
窗口和画板是两个独立的对象,需要在窗口中添加画板frame.add(panel);将其联系在一起。
(7)学习如何绘制图片,文字。在GamePanel(画板类)里定义public void paint(Graphics g) {在其进行绘图。背景图片:g.drawImage(bg,0,0,null);背景文字:g.drawString(“分数:0”, 20, 30);片用set···可以改变字体大小和颜色g.setColor(Color.yellow);g.setFont(new Font(“楷体”,Font.BOLD,20));
(8)遇到问题:在遇到IO流时报错。用图片路径获得图片时,可能有路径错误的情况,此时应有异常处理,及try和catch的运用。
(9)遇到问题:当关闭窗口,控制台显示程序还在运行。需要在GameFrame(窗口)添加语句setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);实现自动关闭。
(10)在学习(9)时知道了用setLocationRelativeTo(null);可以使窗口居中。

<2>鱼类的创立

(11)开始定义鱼类。所有的鱼类主要是图片不同,宽度和高度都有图片决定。所以鱼类可以不分父类子类,一个类就可以解决问题。
(12)每一条鱼都独立游动,所以每一条鱼就是一个独立的线程public class Fish extends Thread{鱼类继承Thead类,在里面编写run()方法,即线程启动时执行的方法,由于鱼一直游动,将鱼游动的方法写进死循环。需要注意的是在创立鱼时需要fish.start();使线程开始。
(13)需要在鱼类的成员变量里添加Random ran=new Random();随机数对象。在方法中需要用到随机数就很方便了。注:随机数对象有一个即可,多次使用均为随机值。如int index=ran.nextInt(9)+1;(1~9随机数)
(14)如何解决创建时生成随机鱼类的问题:鱼类主要是图片不同,所以在鱼类的构造方法中生成的图片随机即可。
(15)处理鱼类游动的问题:鱼并不是在线程里向左移动即可,想要表示出游动的动作,必须借助每一种鱼游动时的多张图片。创建集合 animation为鱼类的成员变量,在创建方法用随机数确定鱼的种类后,将鱼游动时的图片推入集合animation中。在线程run()方法中每向左移动3,就换下一张图片。
(16)遇到问题:鱼类不游动,偶然发现拖动窗口或者拉宽窗口时鱼的图片和位置才会更新。问题所在:虽然鱼的位置和图片更新了,但是画板却没有更新。但画板和鱼是两个不同的类,如何在鱼类中更新画板呢?解决方案:将画板作为参数传进鱼类的构造方法,在鱼类的成员变量中创建一个画板对象,并将传入的画板对象在构造方法赋值给成员变量的画板对象,此时在鱼类中便可以调用画板的方法。更新语句为panel.repaint();
(17)遇到问题:调试过程中发现窗口并没有鱼游动。原因可能是鱼游得太快,所以在run()方法里的死循环添加线程休眠。Thread.sleep(100);(此处需要异常处理)
(18)遇到问题:鱼游动一步就报错且卡住。图片的路径不准确造成的,鱼的图片是19,但是游动的图片序号确实09,代码错误导致图片读取不到而报错。所以图片的地址一定要精确。
(19)遇到问题:鱼游动时图片变形严重。将初始图片更换为游动过程的图片,且停止鱼的游动,发现图片并没有变形,但是开始游动后就有了图片变形的问题。在画板中画鱼的时候规定了宽度和高度,但是图片改变后,对象鱼的宽度和高度还是第一张图片的参数,所以出现了上述问题。解决方案:每游动一次换一张图片的时候,重新取得图片的高度和宽度。
(20)遇到问题:所有的鱼游动都是同步的,将鱼的初始图片更改,发现游的还是同步的。将游动停止,发现初始图片的确被更改了,但游动开始又开始同步。原因是在更新图片时总是更新为第二张,导致游动一致并没有被改变。将初始图片记录为int step_num=startImg;,更新总是变成下一张图片,即解决问题。
(21)遇到问题:虽然鱼游动不同步,但是仍然看着很假,游戏质量很差,原因是所有鱼的移动速度相同。解决方法:将鱼的游动速度创建为成员变量,在构造方法取随机值,int speed=ran.nextInt(5)+1;(偶然发现在这里可以使用前面的随机数成员变量)x-=speed;(鱼向左移动)

<3>鱼网类的创立

(22)渔网和鱼类同样是调用图片,并呈现在画板上,大致思路一样,且需要和鱼类一样同画板建立关联关系。不同点主要在于渔网的位置应和鼠标的位置保持一致,所以需要对鼠标的动作进行监控(监控直接写在画板类中)。具体步骤:在画板类内创立鼠标监听器,在其内创立鼠标适配器,在适配器内可获取鼠标移动,移出,移入,点击等事件。并需要将鼠标配适器加入到监听器中。
注:需要在画板类内打开鼠标监听器。
(23)遇到问题:渔网的位置不在鼠标的点击处(此时网的横纵坐标定义为鼠标的坐标)。解决方法:将网的横坐标定义为(鼠标的横坐标-网宽度的一半),网的纵坐标定义为(鼠标的纵坐标-网高度的一半)。
(24)在监听器写入方法,右击触发网类的方法,改变网的大小。
(25)遇到问题:右击后网不在鼠标的点击处。解决方法:在触发右击事件时同时更新网的横纵坐标。
(26)在鼠标监听器内写入鼠标的移入移出事件,使网在鼠标移出时隐藏。

<4>捕鱼

(27)需要在鱼的线程里判断鱼是否被抓,在此之前,先给鱼类创立成员变量记录鱼是否被捕获boolean catched=false;。并且写出鱼被捕获时状态改变的方法。
(将鱼的位置改为起点,且纵坐标随机)
(28)在鼠标监听器中,判断网和每一条鱼是否有触碰(需要循环语句,判断每一条鱼),若有触碰,将鱼的catched变量改为true。
(29)遇到问题:虽然被捕的鱼被改变到初始位置,但是并没有向前移动。解决方案:将鱼的数量定义为1,然后发现鱼被捕后在起点疯狂换位置(纵坐标不断改变),且为被捕时的动画,分析出是因为虽然把鱼的位置改变,没有把鱼被捕获的状态改为false。添加语句catched=false;。


最后

另外在画板对象可以把子弹数,分数什么的进行定义,剩下的大家就自由发挥了。
我会另外在CSND上传源码,里面有捕鱼达人的图片资源,大家可以下载使用。

尝试写java小游戏(捕鱼达人)相关推荐

  1. Java小游戏——捕鱼达人

    关于"捕鱼达人"这个小游戏,不同于平时我们玩的那种,这种更加简单,易于理解.最终结果是,在屏幕上出现一个窗口,以海为背景,多种多条鱼在里面"游动",玩家通过控制 ...

  2. Java小游戏捕鱼达人

    先看下效果图: 以下是代码,若有错误欢迎指正(^_^) 另附代码下载地址:https://download.csdn.net/download/blame1/10409935 package fish ...

  3. html5小游戏主要用的js,用js+HTML5实现的小游戏-- 捕鱼达人游戏

    大家基本上都玩过捕鱼达人这款游戏吧,下面我就来一个用js+HTML5实现的小游戏 2.[代码] body, p, canvas { image-rendering: optimizeSpeed; -w ...

  4. java小游戏之捕鱼达人,学了java,妈妈不再担心我去网吧游戏厅了!

    Java小项目捕鱼达人 跪求关注,祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早上贵子,从不掉发! 捕鱼达人这款游戏,相信和我年纪相仿的朋友,肯定很熟悉.在当时半智能手机和智能手机刚刚出现 ...

  5. Java小游戏之捕鱼达人000.序章

    000 序言 0.1 吐槽 大四专业校内实习,然后没有期待中的C/C++的项目实习(是意料之中的Java 老师要求做一个Java小游戏 我就蒙了,脑海中闪现过很多念头 不是把不是把,没花钱去培训机构学 ...

  6. Java写五子棋小游戏

    Java写五子棋小游戏 最近用Java写了个五子棋小游戏,遇到了许多细节问题,在此不得不总结一下,以便有同样需求朋友参考. 1.]面板发生变化,重绘棋盘与棋局问题: 必须调用父类的paint方法,因为 ...

  7. 基于Java+Swing实现捕鱼达人游戏(含课程报告)

    基于Java+Swing实现捕鱼达人游戏(含课程报告) 一.系统介绍 1.开发背景 2.基本内容.实现方法及主要技术实现目标 3实现目标 二.功能展示 三.其他系统 四.获取源码 一.系统介绍 1.开 ...

  8. java小游戏——飞翔的小鸟(java初学作品)

    注:学习了java基础后,做出来的一个小作品,可以用来巩固学习 概述: 飞翔的小鸟能够作为Java基础的收官之作,包涵了Java很多的基础知识,在学习完Java基础后,尝试编写一些东西,能够起到很好的 ...

  9. 【Java】寒假答辩作品:Java小游戏

    文章目录 java入门小游戏[test] 游戏界面 前言 (可直接跳到程序介绍) 前期入门小项目 前期收获 后期自创关卡 熄灯问题拓展 新游戏拓展 实现切换关卡切换音乐 后续 java入门小游戏[te ...

最新文章

  1. Javascript 未结束的字符串常量
  2. js ajax 跨域问题 解决方案
  3. Go 语言能取代 Java,成为下一个 10 年的王者吗?
  4. Eclipse Maven 编译错误 Dynamic Web Module 3.0 requires Java 1.6 or newer 解决方法
  5. silverlight-Canvas中1像素的线变成了2像素
  6. C51单片机————中断系统
  7. [leetcode]5343. 多次求和构造目标数组
  8. 解决TeamViewer的“现在无法捕捉画面。可能由于快速切换或者远程桌面断开或者最小化”问题...
  9. 拓端tecdat|Excel 实例:数据进行排序和筛选
  10. Mac 从零搭建Android开发环境记录以及提高效率软件推荐
  11. jade的基本使用方法
  12. php三行情书,《三行情书》经典语录 经典三行情书 最美三行情书
  13. 基于python的网贷平台Prosper数据分析
  14. signal信号的基础知识
  15. 计算一班总分 使用的计算机公式是,班级总分统计excle!excle如图所示,怎样按照班级字段,将每班的数学语文英语分数分别求和汇总?...
  16. Qt为exe添加ico图片
  17. https://vkceyugu.cdn.bspapp.com/VKCEYUGU-5e444e88-b038-4060-8096-b66a1ee2f304/e7274947-16bb-444a-ae8
  18. ffmpeg当前版本mp4容器 支持G711修改
  19. 麻省理工学院计算机工程专业排名,麻省理工学院计算机科学与工程世界排名2018年最新排名第1(ARWU世界排名)...
  20. oracle 12c 字符集修改 AL32UTF8 改为 ZHS16GBK

热门文章

  1. 怎样做ppt如何用PPT绘制卫星轨迹图形表达?
  2. 程序员如何告别加班-加班原因总结
  3. 计算机网络——ARP协议(地址解析)原理
  4. USB3.0规范中译本 第七章 链路层(1)
  5. ArcBlock ⑧ 月报 | 异构链换币服务开发稳步推进
  6. 科研写作——常见句式(八)
  7. windows电脑之间如何快速迁移软件和环境?
  8. 【JavaSE基础】小看final关键字?教你如何深入理解和使用
  9. 京东商城店铺排名优化搜索规则及优化方向浅析
  10. 华秋亮相汽车电子研讨会,展出智能座舱方案、高可靠PCB板