【激发兴趣】台球小游戏基础版

本文介绍了一个使用Java实现的简单台球游戏,游戏中的白球会在桌面上运动,遇到边缘反弹,未考虑桌面摩擦力及球洞。通过调整角度和速度实现白球的动态效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SXT的台球小游戏

需求

**有白球,有球桌,白球运动不会超过桌面的范围,弹到边缘会反弹**

在这里插入图片描述

//很多地方加了我自己的理解,注释比老师给的代码丰富
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;//x,y代表小球的坐标(小球最左边一点的坐标),初始坐标为(100,100)

	double degree = 3.14/3;//用弧度表示角度,此处表示,运动方向与X轴正向的夹角是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 < 0+40+40) {//40的桌子边框+40的标题栏
			degree = -degree;
		}
		
		//碰到左右边界
		if (x > 856-40-30||x < 0 + 40) {
			degree = 3.14 - degree ;
		}
	}
	
	//窗口加载
	void launchFrame() {/*按delete键时如果不小心按到insert键会导致鼠标光标从竖线变成黑方块,这时候再按一遍就好了*/
		setSize(856,500);//窗口的尺寸
		setLocation(50,50);//窗口的位置,窗口左上角的位置
		setVisible(true);//窗口是否可见?
		
		//重画窗口,每秒画25次
		while(true) {
			repaint();
			try {
				Thread.sleep(40);//40ms,1s=1000ms,1s画25次窗口
			}catch(Exception e) {
				e.printStackTrace();
			}
			
		}
		
	}//eclipse的技巧:Ctrl+Z 上一步,Ctrl+Y 下一步
	
	//main方法是程序执行的入口
	public static void main(String[]args) {
		System.out.println("游戏项目,寓教于乐!");
		BallGame2 game = new BallGame2();//new一个对象出来
		game.launchFrame();
	}
	
}

不足

1.忽略了桌面摩擦力,小球可以一直运动下去
2.没有添加球洞部分的代码,小球遇到球洞还是会反弹,不会掉下去
3.从代码来看,小球的位置坐标以最左边的点为准,而不是俯视图的圆心,在考虑运动规律时比较复杂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值