Java【swing】-捕鱼达人项目(1)

Java面向对象的编程思想

  • 对象:“万物皆对象”,任何一个合理的事物都可以理解为是一个对象

现实 -> 对象
Java -> 类(Class)
学生 -> public class Student { … }
特征 => 属性
行为 => 方法

代码部分:

Student.java

/**
 * 学生对象 -Student
 * 对象 -类Class
 * @author Katrina
 */
public class Student {
	
	//特征 --属性
	int id; //学号   
	String name; //姓名
	int age; //年龄
	
	/**
	 * 构造方法/构造器
	 */
	public Student() {
		System.out.println("我是构造方法");
		id = 1001;
		name = "张三";
		age = 30;
	}
	
	//行为 --方法
	
	/**
	 * 学习的行为
	 */
	public void study() {
		System.out.println("学习...");
	}
	
	/**
	 * 吃饭的行为
	 */
	public void eat() {
		System.out.println("吃饭...");
	}
	
}

Test.java

/**
 * 测试类 -测试Student类
 * @author Katrina
 */
public class Test {
	
	public static void main(String[] args) {
		//创建Student类
		Student stu=new Student(); //底层自动执行构造方法中的内容
		//对于Student类中的特征和普通方法,需要通过stu来调用
		System.out.println(stu.age);
		stu.study();
		stu.eat();
	}
	
}
效果图:

在这里插入图片描述

思路

  • 1)做出游戏的窗体界面
  • 2)在窗体界面上实现游戏的背景
  • 3)在游戏中完成一条静止不动的鱼
  • 4)实现一条鱼直线往前游
  • 5)实现一条鱼的动画效果
  • 6)多条鱼的功能
  • 7)渔网的功能(移动、捕鱼)
  • 8)大炮的功能
  • 9)大炮发射子弹
  • 10)子弹击中鱼的功能

捕鱼达人游戏中对象有哪些?

  • 鱼 -> public class Fish { … }
  • 渔网 -> public class Net { … }
  • 大炮 -> public class Barrel { … }
  • 子弹 -> public class Bullet { … }
  • 池塘 -> public class Pool { … }

注意:顺序为池塘 -> 鱼 -> 渔网 -> 大炮 -> 子弹

做出游戏的窗体界面

JFrame:窗体/界面 【墙】

import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
/**
 * 启动捕鱼达人游戏的主类
 * @author Katrina
 */
public class Start {
	
	//main方法 -- 主方法
	public static void main(String[] args) throws IOException {
		//创建捕鱼达人游戏界面的窗体  JFrame
		JFrame w = new JFrame();
		
		w.setVisible(true); //设置窗体可见【true可见;false不可见(默认)】
		w.setSize(1000, 700); //设置窗体的大小 (宽度,高度)
		w.setLocation(400, 100); //设置窗体的位置(距离左边的长度,距离顶部的长度)
		w.setTitle("我的捕鱼达人"); //设置窗体的标题
		w.setResizable(false); //设置窗体的大小不可改变【true可以改变(默认);false不可以改变】
		w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭窗体的运行后台
		//使用ImageIO类中的read方法读取图片,图片的读取要以File文件的方式读
		w.setIconImage(ImageIO.read(new File("images/5.png"))); //设置窗体的图标
	}
	
}

效果图:

在这里插入图片描述

在窗体界面上实现游戏的背景

将背景图片放到面板中显示

图片 -> 标签(JLabel)【可存文字或图片】 -> 面板(JPanel)【小板子】 -> 窗体/界面(JFrame)【墙】

带有文字的标签放到面板

在这里插入图片描述

效果图:

在这里插入图片描述

带有图片的标签放到面板

在这里插入图片描述

效果图:

在这里插入图片描述
注意:由于在本项目中,目的是实现动画效果,故采用本方法不可取

代码部分:

import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
 * 启动捕鱼达人游戏的主类
 * @author Katrina
 */
public class Start {
	
	//main方法 -- 主方法
	public static void main(String[] args) throws IOException {
		//创建捕鱼达人游戏界面的窗体  JFrame
		JFrame w = new JFrame();
		
		//创建面板 --小板子
		JPanel p = new JPanel();
		//创建标签JLabel --显示文字 
		JLabel label = new JLabel("Hello World!");
		//创建标签JLabel --显示图片,图片放到图标(ImageIcon)上
		JLabel label1 = new JLabel(new ImageIcon("images/bg.jpg"));
		
		p.add(label); //将带有文字的标签放到面板中
		p.add(label1); //将带有图片的标签放到面板中
		w.add(p); //将面板放到窗体中
		
		w.setVisible(true); //设置窗体可见【true可见;false不可见(默认)】
		w.setSize(1000, 700); //设置窗体的大小 (宽度,高度)
		w.setLocation(400, 100); //设置窗体的位置(距离左边的长度,距离顶部的长度)
		w.setTitle("我的捕鱼达人"); //设置窗体的标题
		w.setResizable(false); //设置窗体的大小不可改变【true可以改变(默认);false不可以改变】
		w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭窗体的运行后台
		//使用ImageIO类中的read方法读取图片,图片的读取要以File文件的方式读
		w.setIconImage(ImageIO.read(new File("images/5.png"))); //设置窗体的图标
	}
	
}

借助于面板的绘画功能,将图片画出来

定义一个类,继承JPanel

如何实现游戏界面中背景的功能?

  • step1:新建一个类为Pool,表示池塘对象
  • step2:在Pool类的特征处,定义特征:池塘的环境bg
  • step3:在Pool类中定义构造方法,在构造方法中完成对
    特征bg的赋值
  • step4:让Pool继承JPanel
  • step5:在Pool的行为处,调出paint方法,在paint方法
    中使用画笔g将背景bg画在池塘中。
  • step6:在Start类中,创建池塘Pool类,并添加到窗体中

练习:通过自己理解,完成在池塘的任意位置画出一条静止不动的鱼

代码部分:

Pool.java
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
/**
 * 池塘对象
 * - 让Pool类继承JPanel,JPanel看成是一个带画笔的画板,让Pool类继承之后,就可以在Pool类绘画了
 * @author Katrina
 */
public class Pool extends JPanel {
	
	//特征 --属性
	//1、池塘的环境(水、水草、岩石) --一张背景图片
	//int表示整数类型、double表示小数类型 ;BufferedImage是Java提供的一个类,主要用于表示图片的类型
	BufferedImage bg;
	//2、多条鱼
	//3、渔网
	//4、大炮
	//5、子弹
	
	/**
	 * 构造方法 --构造器
	 * 功能:对特征进行赋值
	 * 语法:以public开始,构造方法的方法名和类名一致,构造方法没有返回值,连void也没有
	 * 执行时机:当创建池塘对象new Pool(),底层自动调用该构造方法
	 * @throws IOException
	 */
	public Pool() throws IOException {
		//从images文件夹中读取bg.jpg图片,然后对特征bg的赋值
		bg=ImageIO.read(new File("images/bg.jpg"));
	}
	
	/**
	 * 行为 --方法(普通方法)
	 * 调出paint方法   -- 绘画的行为     Alt+/
	 */
	public void paint(Graphics g) {
		//使用画笔g将特征bg画在池塘中
		//参数1:所画的哪张图片  
		//参数2和3:所画图片左上角的坐标(x和y)
		//参数4和5:所画图片的大小(宽度和高度)  
		//参数6:无意义null值
		g.drawImage(bg, 0, 0, 1000, 700, null);
	}
	
}
Start.java
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
 * 启动捕鱼达人游戏的主类
 * @author Katrina
 */
public class Start {
	
	//main方法 -- 主方法
	public static void main(String[] args) throws IOException {
		//创建捕鱼达人游戏界面的窗体  JFrame
		JFrame w = new JFrame();
		
		//创建池塘对象 -newPool,在把创建的池塘添加到窗体中
		Pool pl = new Pool();
		w.add(pl);
		
		//创建面板 --小板子
//		JPanel p = new JPanel();
		//创建标签JLabel --显示文字 
//		JLabel label = new JLabel("Hello World!");
		//创建标签JLabel --显示图片,图片放到图标(ImageIcon)上
//		JLabel label1 = new JLabel(new ImageIcon("images/bg.jpg"));
		
//		p.add(label); //将带有文字的标签放到面板中
//		p.add(label1); //将带有图片的标签放到面板中
//		w.add(p); //将面板放到窗体中
		
		w.setVisible(true); //设置窗体可见【true可见;false不可见(默认)】
		w.setSize(1000, 700); //设置窗体的大小 (宽度,高度)
		w.setLocation(400, 100); //设置窗体的位置(距离左边的长度,距离顶部的长度)
		w.setTitle("我的捕鱼达人"); //设置窗体的标题
		w.setResizable(false); //设置窗体的大小不可改变【true可以改变(默认);false不可以改变】
		w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭窗体的运行后台
		//使用ImageIO类中的read方法读取图片,图片的读取要以File文件的方式读
		w.setIconImage(ImageIO.read(new File("images/5.png"))); //设置窗体的图标
	}
	
}
效果图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值