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"))); //设置窗体的图标
}
}