Java基础入门+《特殊的小鸟游戏项目》实战

Java基础-软件配置

1. 开发工具安装配置

Eclipse (2020-06)

下载地址:官网(https://www.eclipse.org/downloads/)

参考教程:(https://blog.csdn.net/qq_44697728/article/details/116142946)

下载压缩包解压即可

JDK (1.8)

下载地址:官网(https://www.oracle.com/java/technologies/downloads/)

参考教程:(https://blog.csdn.net/weixin_37601546/article/details/88623530)

配置环境变量:path(将jdk的绝对路径添加进去)

cmd命令:java、javac、javac -version(检测环境是否安装完成)

2. 注释设置

打开eclipse,Window->perferences->Java->Code Style->comments->Types

3. 项目业务

检测开发环境:JDK

  • 设置path路径
  • cmd命令测试

检测开发工具:eclipse

4.实战— 特殊的小鸟项目(FlyBird)

4.1 创建包

​ 包名采用四级结构,为**【域名.开发者自定义名.项目名.项目模块】**

​ 包名:com.jy.flybird.mainview

作用:

  • 和电脑上的文件夹作用一样,分类管理
  • 项目所属—版权
4.2创建类
4.2.1 World类
World类:绘制主场景
/**
 * 	
 * @author WCS
 * @version V.1.0.1
 * @date 2021-11-30 05:11
 * 	需求:游戏的主场景
 * 	思路分析:
 *		欢迎界面
 * 		主游戏界面
 * 			背景
 * 			滚动的地面
 * 			飞翔的小鸟
 * 			移动的柱子
 * 			变化的分数
 * 		结束界面
 * 
 * 		点击事件:
 * 			开始	切换到游戏界面
 * 			游戏结束	切换到开始
 * 			点击控制小鸟飞
 * 		闯关之后--分数加1
 * 		撞击结束
 * 
 * 		添加声音
 * 
 * 		完成任务顺序:
 * 			1)建立窗体--绘制背景
 * 				JFrame类
 * 				Jpanel类---绘制面板--画布
 * 				ImageIO--读取图片
 * 				BufferedImage--暂时存储读取的图片资源
 * 	问题汇总:  
 *
 */

加载图片存储缓冲区

BufferedImage bg=null;

加载图片

bg=ImageIO.read(this.getClass().getResource("bg.png"));

重写画板方法,快捷方式Source->Override/Implement Methods ->Jcomponent->paint()

@Override
	public void paint(Graphics g) {
		// 将画笔变成2D
		Graphics2D g2 = (Graphics2D) g;
		// 绘制背景
		g2.drawImage(bg, 0, 0, null);
	}

编写main()方法

public static void main(String[] args) throws Exception {
		//创建窗体
		JFrame jf=new JFrame();
		//设置窗体大小
		jf.setBounds(100, 100, 320, 480);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置不可以改变大小
		jf.setResizable(false);
		//创建当前画布
		World w = new World();
		//添加到窗体
		jf.add(w);
		//显示窗体
		jf.setVisible(true);
	}
4.2.2 Ground类
Ground类:绘制地面
/**
 * 	
 * @author WCS
 * @version V.1.0.1
 * @date 2021-12-01 02:09
 * 	需求:绘制地面
 * 		缓冲区临时存储
 * 		获取图片--构造方法
 * 		绘制图片
 * 
 * 		让图片动起来
 * 
 * 	思路分析:
 * 	问题汇总:  
 *
 */
// 定义缓冲区
	BufferedImage gimage = null;

	/**
	 * 构造方法 初始化加载数据
	 * 
	 * @throws IOException
	 */
	public Ground() throws IOException {
		// 加载资源信息,存入缓冲区
		gimage = ImageIO.read(this.getClass().getResource("ground.png"));
	}

	// 绘制图片
	public void paint(Graphics2D g) {
		// 绘制背景
		g.drawImage(gimage, 0, 0, null);

	}

在World类中引入Ground

//引入地面
Ground ground = null;
//创建地面
ground = new Ground();

在paint()方法中添加

//绘制地面
ground.paint(g2);

改变地面位置,首先设置变量x,y接收坐标,然后设置变量width和height获取地面大小。

// 定义变量接收坐标
	int x = 0;
	int y = 0;
// 获取地面的大小
	int width = 0;
	int height = 0;

在构造方法中调用变量

// 初始化坐标
	this.x = 0;
	this.y = 400;
// 获取宽高
	this.width = gimage.getWidth();
	this.height = gimage.getHeight();

改变坐标,使其移动。

/**
 * 改变坐标
 */
public void step() {
	//坐标减小
	x--;
	//判断
	if (x<360-this.width) {
		//重新开始
		x=0;
	}
}

在World类中添加action()方法,执行动作。

/**
 * 执行动作
 * @throws InterruptedException 
 */
public void action() throws InterruptedException {
	//循环一直变化
	while (true) {
		//改变地面坐标
		ground.step();
		//放慢变化时间
		Thread.sleep(500/60);
		//重复绘制
		this.repaint();
	}
}

最后,在main()方法中调用此方法,即可。

4.3.3 Bird类
Bird类:绘制小鸟
package com.jy.flybird.mainview;

/**
 * 	
 * @author WCS
 * @version V.1.0.1
 * @date 2021-12-01 02:30
 * 	需求:将小鸟引入游戏主场景
 * 		小鸟飞翔
 * 		撞击
 * 	思路分析:
 * 	问题汇总:  
 *
 */
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;


public class Bird {

	// 定义获取所有小鸟图片
	BufferedImage[] birdimgs = new BufferedImage[3];
	//定义存储当前显示的小鸟图片
	BufferedImage bimage=null;
	//定义变量控制索引
	int index=0;
	//定义坐标
	int x=0;
	int y=0;
	//定义宽高
	int width=0;
	int height=0;
	//定义自由落体运动参数
	int g=0;
	double t=0;
	double v0=0;
	//角度
	double angle=0;
	/**
	 * 构造方法 初始化加载数据
	 * 
	 * @throws IOException
	 */
	public Bird() throws IOException {
		// 加载资源信息,存入缓冲区
		birdimgs[0] = ImageIO.read(this.getClass().getResource("0.png"));
		birdimgs[1] = ImageIO.read(this.getClass().getResource("1.png"));
		birdimgs[2] = ImageIO.read(this.getClass().getResource("2.png"));
		//初始图片
		this.bimage=birdimgs[0];
		//获取坐标
		x=100;
		y=200;
		//获取宽高
		this.width=bimage.getWidth();
		this.height=bimage.getHeight();
		//初始化
		this.g=4;
		this.t=0.25;
		this.v0=20;
	}

	// 绘制图片
	public void paint(Graphics2D g) {
		//图片旋转
		g.rotate(-angle,x,y);
		// 绘制背景
		g.drawImage(bimage, x-this.width/2, y-this.height/2, null);
		
		g.rotate(angle,x,y);
	}
	
	/**
	 * 添加动作
	 */
	public void step() {
		//模拟小鸟的飞翔状态
		//变化后的速度
		double v=v0-g*t;
		//每个时间间隔内加速度运行长度
		double l=v*t-0.5*g*t*t;
		//修改
		v0=v;
		//修改小鸟的纵坐标
		y=y-(int)l;
		//获取角度
		angle=Math.atan(l/10);
		//改变索引
		index++;
		//判断
		if (index==3) {
			index=0;
		}
		//切换绘制的图标
		this.bimage=birdimgs[index];
		
	}
	/**
	 * 
	 */
	public void birdfly() {
		v0=20;

	}

}
4.2.4 Column类
Column类:绘制柱子
package com.jy.flybird.mainview;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

/**
 * 
 * @author WCS
 * @version V.1.0.1
 * @date 2021-12-01 02:32 
 * 需求: 
 * 	将柱子绘制到主页面 
 * 思路分析:
 * 问题汇总:
 *
 */
public class Column {

	// 定义缓冲区
	BufferedImage cimage = null;
	// 获取柱子的宽高
	int width = 0;
	int height = 0;
	//定义坐标位置
	int x = 0;
	int y = 0;
	//获取随机数对象
	Random random = new Random();
	/**
	 * 构造方法 初始化加载数据
	 * 
	 * @throws IOException
	 */
	public Column(int x) throws IOException {
		// 加载资源信息,存入缓冲区
		cimage = ImageIO.read(this.getClass().getResource("column.png"));
		// 获取宽高
		this.width = cimage.getWidth();
		this.height = cimage.getHeight();
		//获取坐标
		this.x=x;
		this.y=140+random.nextInt(120);
	}

	// 绘制图片
	public void paint(Graphics2D g) {
		// 绘制背景
		g.drawImage(cimage,x-this.width/2, y-this.height/2, null);
	}

	/**
	 * 柱子动起来
	 */
	public void step() {
		//坐标改变
		x--;
		//判断
		if (x<-this.width) {
			x=320;
			this.y=140+random.nextInt(120);
		}
	}
}
4.2.5 World类(更新完善)
World类
package com.jy.flybird.mainview;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 * 
 * @author WCS
 * @version V.1.0.1
 * @date 2021-11-30 05:11 
 * 	需求:游戏的主场景 
 * 	思路分析: 欢迎界面 
 * 			主游戏界面 
 * 			背景 
 * 				滚动的地面 
 * 				飞翔的小鸟 
 * 				移动的柱子 
 * 				变化的分数
 *       	结束界面
 *       	点击事件: 
 *       		开始 切换到游戏界面
 *        		游戏结束 切换到开始
 *         		点击控制小鸟飞 
 *         		闯关之后--分数加1 
 *         		撞击结束
 *       	添加声音
 * 
 * 	完成任务顺序: 
 * 			1)建立窗体--绘制背景 
 * 				JFrame类 
 * 				Jpanel类---绘制面板--画布 
 * 				ImageIO--读取图片
 * 				BufferedImage--暂时存储读取的图片资源 
 * 问题汇总:
 *
 */
public class World extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	// 加载图片存储缓冲区
	BufferedImage bg = null;
	//引入地面
	Ground ground = null;
	//引入小鸟
	Bird bird = null;
	//引入柱子
	Column column1 =null;
	Column column2 =null;

	/**
	 * 构造方法
	 * 
	 * @throws Exception
	 */
	public World() throws Exception {
		// 加载图片资源
		bg = ImageIO.read(this.getClass().getResource("bg.png"));
		//创建地面
		ground = new Ground();
		//创建小鸟
		bird = new Bird();
		//创建柱子
		column1 = new Column(320+100);
		column2 = new Column(320+100+180);
	}

	// 绘制
	@Override
	public void paint(Graphics g) {
		// 将画笔变成2D
		Graphics2D g2 = (Graphics2D) g;
		// 绘制背景
		g2.drawImage(bg, 0, 0, null);
		//绘制柱子
		column1.paint(g2);
		column2.paint(g2);
		//绘制地面
		ground.paint(g2);
		//绘制小鸟
		bird.paint(g2);
		

	}
	/**
	 * 执行动作
	 * @throws InterruptedException 
	 */
	public void action() throws InterruptedException {
		//添加点击事件
		this.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				bird.birdfly();
			}
			
		});
		//循环一直变化
		while (true) {
			//改变地面坐标
			ground.step();
			//小鸟飞翔
			bird.step();
			//柱子移动
			column1.step();
			column2.step();
			//放慢变化时间
			Thread.sleep(1000/60);
			//重复绘制
			this.repaint();
		}
	}
	/**
	 * 
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		//创建窗体
		JFrame jf=new JFrame("特殊的小鸟");
		//设置窗体大小
		jf.setBounds(100, 100, 320, 480);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//设置不可以改变大小
		jf.setResizable(false);
		//创建当前画布
		World w = new World();
		//添加到窗体
		jf.add(w);
		//显示窗体
		jf.setVisible(true);
		//调用动作方法
		w.action();
		
	}

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值