桌面小球项目

桌面小球项目,第1张

桌面小球项目
//摘自 尚学堂 百战程序员 Java300集

简化的代码
MyPro01 里 new – Folder – images(与 src 同层)
src – new – class – BallGame

开头导入俩个包

import java.awt.*;						//窗口,按钮、文本框
import javax.swing.*;					//图形可视包,导入这个包后才能进行GUI图形化软件的开发

BallGame 继承 Jframe

窗口加载

void launchframe(){
	setSize(856,500);							//窗口尺寸
	setLocation(50,50);							//窗口位置(左上角)
	setVisible(true);								//显示/隐藏GUI组件的。需要显示则使用true,需要隐藏则使用false。
}

在 main 里创建对象

BallGame game = new BallGame();
game.launchframe();

②图片加载

ball.png

desk.jpg

//ball、desk俩个对象代表两张图片
Image ball = Toolkit.getDefaultToolkit().getImage("image/ball.png");
Image desk = Toolkit.getDeafultToolkit().getImage("images/desk.png");

//画窗口方法
public void paint(Graphics g){
	System.out.println("窗口被画了一次!");
	
	//先画桌面再画小球
	g.drawImage(desk,0,0,null);							//img,x,y,observer
	g.drawImage(ball,100,100,null);

③小球动起来 (关键一步)

//反复画 ball 窗口(在窗口加载项)
while(true){
	repaint();														//调用时,再调用 paint 方法
	try{
		Thread.sleep(40);									//40 ms 一秒画25次窗口
	}catch(Exception e){
		e.printStackTrace();
	}
}

//图片加载
double x = 100;
double y = 100;

//画窗口 x = x + 10;

//判断条件
boolean right = true;

//具体判断条件需要计算
if(right){
	x = x+10;
}else{
	x = x-10;
}
if(x>856){
	right = false;
}
if(x<0){
 	right = true;
 }

BallGame 最终代码

import java.awt.*;
import javax.swing.*;

public class BallGame extends Jframe {
	
	//图片加载
	Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
	Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
	
	double x = 100;				//小球横坐标
	double y = 100;				//小球纵坐标
	boolean right = true;		//方向
	
	//画窗口
	public void paint(Graphics g){
		System.out.println("窗口被画了一次");
		g.drawImage(desk,0,0,null);
		g.drawImage(ball,(int)x,(int)y,null);
		
		if(right) {
			x = x + 10;
		}
		else {
			x = x - 10;
		}
		//改变方向
		if(x>856-40-30) {		//856是窗口宽度,40是桌子边框的宽度,30是小球的直径
			right = false;
		}
		if(x<40)				//40是桌子边框的宽度
		{
			right = true;
		}
		
	}
	
	//窗口加载
	void launchframe() {
		setSize(856,500);
		setLocation(50,50);
		setVisible(true);
		
		//反复画窗口 一秒25次
		while(true) {
			repaint();
			try {
				Thread.sleep(40);
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BallGame game = new BallGame();
		game.launchframe();
	}

}

效果图

BallGame 2 加入弧度机制

double degree = 3.14 / 3;				//弧度
x = x + 10 * Math.cos(degree);
y = y + 10 * Math.sin(degree);

//判断条件
if(y>500-40-30||y<40+40){					//小球不能超出桌面宽度,弹回
	degree = -degree;
}
if(x<40||x>856-40-30){							//小球不能超出桌面长度,d回
	degree = 3.14 - degree;
}

BallGame2 最终代码

import java.awt.*;
import javax.swing.*;

public class BallGame2 extends Jframe {
	
	//图片加载
	Image ball = Toolkit.getDefaultToolkit().getImage("images/ball.png");
	Image desk = Toolkit.getDefaultToolkit().getImage("images/desk.jpg");
	
	double x = 100;				//小球横坐标
	double y = 100;				//小球纵坐标
	
	double degree = 3.14/3;		//弧度,此处就是60°
	
	//画窗口
	public void paint(Graphics g){
		System.out.println("窗口被画了一次");
		g.drawImage(desk,0,0,null);
		g.drawImage(ball,(int)x,(int)y,null);
		
		x = x + 10*Math.cos(degree);
		y = y + 10*Math.sin(degree);
		
		//碰到上下边界
		if(y>500-40-30||y<40+40) {		//500是窗口高度,40是桌子边框,30是球直径,还有一个40是标题栏高度
			degree = -degree;
		}
		
		//碰到左右边界
		if(x<40||x>856-40-30) {
			degree = 3.14 - degree;
		}
		
	}
	
	//窗口加载
	void launchframe() {
		setSize(856,500);
		setLocation(50,50);
		setVisible(true);
		
		//反复画窗口 一秒25次
		while(true) {
			repaint();
			try {
				Thread.sleep(40);
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BallGame2 game = new BallGame2();
		game.launchframe();
	}

}

效果图

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5694375.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存