【源码+文档】基于java实现的捕鱼达人桌面游戏

2.游戏实现

2.1 窗口的创建

  • 只学了Java最基本的语法规则,和游戏完全不沾边,首先得创建一个窗口。学习到创建窗口的类继承于JFrame

  • 有了窗口需要画定背景,这种操作叫画板,画板不但能规定背景颜色(在构造方法中用setBackground(Color.pink)),也可以绘出图片,文字等

  • 图片的调用需要输入图片地址,返回一张图片,且在游戏中非常常见,另外把其写成ImageUtill(图片工具类)

  • 将函数入口(main函数)写在GameFrame(窗口)里

  • 学习如何绘制图片,文字。在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));

难点

  • GameFrame frame=new GameFrame();创建窗口对象后其不显示。frame.setVisible(true);需要用setVisible函数使其显示

  • GamePanel panel=new GamePanel();创建画板后窗口不发生变化

  • 在遇到IO流时报错。用图片路径获得图片时,可能有路径错误的情况,此时应有异常处理,及try和catch的运用

  • 当关闭窗口,控制台显示程序还在运行。需要在GameFrame(窗口)添加语句setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);实现自动关闭

  • 用setLocationRelativeTo(null);可以使窗口居中

2.2 鱼类的创建

  • 开始定义鱼类。所有的鱼类主要是图片不同,宽度和高度都有图片决定。所以鱼类可以不分父类子类,一个类就可以解决问题

  • 每一条鱼都独立游动,所以每一条鱼就是一个独立的线程public class Fish extends Thread{鱼类继承Thead类,在里面编写run()方法,即线程启动时执行的方法,由于鱼一直游动,将鱼游动的方法写进死循环。需要注意的是在创立鱼时需要fish.start();使线程开始

  • 需要在鱼类的成员变量里添加Random ran=new Random();随机数对象。在方法中需要用到随机数就很方便了。注:随机数对象有一个即可,多次使用均为随机值。如int index=ran.nextInt(9)+1;(1~9随机数)

  • 如何解决创建时生成随机鱼类的问题:鱼类主要是图片不同,所以在鱼类的构造方法中生成的图片随机即可

难点

  • 处理鱼类游动的问题:鱼并不是在线程里向左移动即可,想要表示出游动的动作,必须借助每一种鱼游动时的多张图片。创建集合 animation为鱼类的成员变量,在创建方法用随机数确定鱼的种类后,将鱼游动时的图片推入集合animation中。在线程run()方法中每向左移动3,就换下一张图片

  • 鱼类不游动,偶然发现拖动窗口或者拉宽窗口时鱼的图片和位置才会更新。问题所在:虽然鱼的位置和图片更新了,但是画板却没有更新。但画板和鱼是两个不同的类,如何在鱼类中更新画板呢?解决方案:将画板作为参数传进鱼类的构造方法,在鱼类的成员变量中创建一个画板对象,并将传入的画板对象在构造方法赋值给成员变量的画板对象,此时在鱼类中便可以调用画板的方法。更新语句为panel.repaint();

  • 调试过程中发现窗口并没有鱼游动。原因可能是鱼游得太快,所以在run()方法里的死循环添加线程休眠。Thread.sleep(100);(此处需要异常处理)

  • 鱼游动一步就报错且卡住。图片的路径不准确造成的,鱼的图片是19,但是游动的图片序号确实09,代码错误导致图片读取不到而报错。所以图片的地址一定要精确

  • 鱼游动时图片变形严重。将初始图片更换为游动过程的图片,且停止鱼的游动,发现图片并没有变形,但是开始游动后就有了图片变形的问题。在画板中画鱼的时候规定了宽度和高度,但是图片改变后,对象鱼的宽度和高度还是第一张图片的参数,所以出现了上述问题。解决方案:每游动一次换一张图片的时候,重新取得图片的高度和宽度

  • 所有的鱼游动都是同步的,将鱼的初始图片更改,发现游的还是同步的。将游动停止,发现初始图片的确被更改了,但游动开始又开始同步。原因是在更新图片时总是更新为第二张,导致游动一致并没有被改变。将初始图片记录为int step_num=startImg;,更新总是变成下一张图片,即解决问题

  • 虽然鱼游动不同步,但是仍然看着很假,游戏质量很差,原因是所有鱼的移动速度相同。解决方法:将鱼的游动速度创建为成员变量,在构造方法取随机值,int speed=ran.nextInt(5)+1;(偶然发现在这里可以使用前面的随机数成员变量)x-=speed;(鱼向左移动)

【源码+文档】基于java实现的捕鱼达人桌面游戏_第1张图片

 源码和文档都托管在了【WRITE-BUG数字空间】上面了,有需要的可自取~

你可能感兴趣的:(java,游戏,开发语言)