弹力弹珠java_Java趣味小程序:打弹珠
分享一个最近做的一个用swing做的小程序,类似于打砖块。单击开始,单击暂停,再次单击继续游戏,鼠标离开窗口暂停。鼠标移动控制挡板,小球落到挡板上反弹,落到底部生命值扣一,每击中一个成绩加一。初学者可以写一写,就当做一个小练习。
第一个类:窗口类,用JFrame画的窗口。
import javax.swing.JFrame;
public class BallJframe {
// 创建一个窗体对象
JFrame frame = new JFrame();
// 自定义方法为窗体设置属性
public void init() {
// 设置标题
frame.setTitle("打弹珠");
// 设置窗体大小、位置
frame.setBounds(200, 100, 800, 600);
// 设置默认关闭方式
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建画布对象
BallJpanel jp = new BallJpanel();
// 将画布类对象添加到窗体中
frame.add(jp);
// 设置窗口可见
frame.setVisible(true);
}
public static void main(String[] args) {
BallJframe bf = new BallJframe();
bf.init();
}
}
第二个类:面板类,用线程与鼠标监听器来实现功能。
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
public class BallJpanel extends JPanel implements MouseMotionListener,
MouseListener {
// 定义挡板的坐标
static int dx = 200, dy = 550;
//成绩
static int score = 0;
//球速
static int n=10;
//生命值
static int hp=n;
//游戏速度
int speed = 5;
//开始状态
static final int START = 0;
//运行状态
static final int RUNNING = 1;
//暂停状态
static final int PASS = 2;
//结束状态
static final int OVER=3;
//当前的运动状态
int state = START;
//创建List集合存储Ball类
Listlist = new ArrayList();
public BallJpanel() {
// 添加小球类
for(int i=0;i= 40) {
speed = 4;
}
if (score >= 60) {
speed = 3;
}
if (score >= 80) {
speed = 2;
}
if (score >= 100) {
speed = 1;
}
}
public void move() {
new Thread() {
public void run() {
while (true) {
//当运行时
if (state == RUNNING) {
for(int i=0;i= 800 - 116) {
dx = 684;
}
repaint();
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
//开始时单击鼠标运行 运行时单击鼠标暂停 暂停时单击鼠标运行
if (state == START) {
state = RUNNING;
} else if (state == RUNNING) {
state = PASS;
} else if(state==PASS){
state = RUNNING;
}else if(state==OVER){
state=START;
//重置小球的坐标
for(int i=0;i
第三个类:小球类,小球的坐标、半径、运动方向、移动、越界处理、碰撞检测及碰撞后的反弹。
public class Ball {
// 定义小球的运动方向
public static final int LEFT_UP = 0;
public static final int LEFT_DOWN = 1;
public static final int RIGHT_UP = 2;
public static final int RIGHT_DOWN = 3;
// 定义小球当前的运动方向
private int f = LEFT_UP;
// 定义小球的坐标
private int x, y;
// 定义小球的半径
private int r;
public Ball() {
x = (int) (Math.random() * 800);
y = (int) (Math.random() * 400);
r = 10;
int ran = (int) (Math.random() * 2);
if (ran == 0) {
f = LEFT_UP;
} else if (ran == 1) {
f = RIGHT_UP;
}
}
public Ball(int x, int y, int r, int f) {
super();
this.x = x;
this.y = y;
this.r = r;
this.f = f;
}
public int getF() {
return f;
}
public void setF(int f) {
this.f = f;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public int getR() {
return r;
}
public void setR(int r) {
this.r = r;
}
//小球移动
public void ballMove() {
if (f == LEFT_UP) {
x--;
y--;
}
if (f == LEFT_DOWN) {
x--;
y++;
}
if (f == RIGHT_UP) {
x++;
y--;
}
if (f == RIGHT_DOWN) {
x++;
y++;
}
}
// 小球越界处理
public void ballBorder() {
if (y <= 0) {
if (f == LEFT_UP) {
f = LEFT_DOWN;
}
if (f == RIGHT_UP) {
f = RIGHT_DOWN;
}
}
if (x <= 0) {
if (f == LEFT_UP) {
f = RIGHT_UP;
}
if (f == LEFT_DOWN) {
f = RIGHT_DOWN;
}
}
// 小球碰到挡板
if (y >= BallJpanel.dy - 2 * r) {
if (x >= BallJpanel.dx && x <= BallJpanel.dx + 100) {
if (f == LEFT_DOWN) {
f = LEFT_UP;
}
if (f == RIGHT_DOWN) {
f = RIGHT_UP;
}
y-=3;
BallJpanel.score++;
} else if (y == 600 - 2 * r - 40) {
BallJpanel.hp--;
} else if (y > 600 - 2 * r - 40) {
x = 900;
y = 900;
}
}
if (x >= 800 - 2 * r - 15) {
if (f == RIGHT_UP) {
f = LEFT_UP;
}
if (f == RIGHT_DOWN) {
f = LEFT_DOWN;
}
}
}
//小球碰撞检测
public boolean isCrash(Ball ball){
int lx = Math.abs(x+r-(ball.x+ball.r));
int ly = Math.abs(y+r-(ball.y+ball.r));
boolean h = lx<=(r+ball.r)&&ly<=(r+ball.r);
return h;
}
//小球碰撞反弹
public void ballCrash(Ball another) {
if(isCrash(another)){
x++;
y++;
int temp = this.f;
this.f = another.f;
another.f = temp;
}
}
// 重置小球的位置
public void reset() {
x = (int) (Math.random() * 800);
y = (int) (Math.random() * 500);
int ran = (int) (Math.random() * 2);
if (ran == 0) {
f = LEFT_UP;
} else if (ran == 1) {
f = RIGHT_UP;
}
}
}
弹力弹珠java_Java趣味小程序:打弹珠相关推荐
- python恶搞小程序-知道了这个,你也能写出 Python 趣味小程序
原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...
- 微信小程序 禁止弹框下面的内容滑动 弹窗禁止底部内容滚动
我们需要解决的问题:当弹框显示的时候,弹框下面的内容不能滚动 小程序的弹框特别多,像下面这样,弹框的底部是一个可以下拉的页面,但是当弹框出现的时候,需要禁止底部的滚动,那么怎么做呢? 解决方案: 给v ...
- python有趣小程序-知道了这个,你也能写出 Python 趣味小程序
原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...
- python趣味程序_知道了这个,你也能写出 Python 趣味小程序
原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...
- 用python编写一个猜年龄的小程序-知道了这个,你也能写出 Python 趣味小程序
原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...
- 初识微信小程序第一弹
按照惯例,写作之前先逼逼一会儿.这里不得不说最近过的有点懵,本来公司的业务需求是用hbuilder开发app,我都准备入坑了,结果临时又换成react native了,没办法啊,我就被分配到开发微信小 ...
- c++趣味小程序_工具类小程序10天增长103万全复盘
本文目录: 一.100万小程序用户意味着什么 二.为什么要选择春节期间做增长 三."己亥计划"全复盘 四.活动总结及可复用经验 一.100万小程序用户意味着什么 或许对于很多公司的 ...
- html5底部悬浮添加到桌面,桌面小程序 在弹出的界面点击“添加到桌面”
有个小程序怎么操作到桌面上? 欢迎来到CSS布局HTML,你是不是想把微信小程序弄到手机桌面上? 在小程序右上角有三个点点开,里面有个添加到桌面.下图以跳一跳游戏小程序为例,手机要打开快捷方式的权限. ...
- 微信小程序无法弹出授权登录窗口
微信小程序开发,小程序接口问题..... 今天在写微信小程序的时候,为了获取到后台的token,必须要获取到code,encryptedData,iv ,rawData,signature五个值.co ...
- 暗潮:微信小程序第三弹:关于微信小程序吸粉方式的可行性分析
2019独角兽企业重金招聘Python工程师标准>>> 今天龙哥说了,小程序上没有关注量粉丝量这回事了,只有浏览量. 可是,粉丝数只是一个指标,小程序只要打开,用户的信息咱们就可以获 ...
最新文章
- 分享一款超棒的jQuery旋钮插件 - jQuery knob
- python入门到精通需要学多久-从Python入门到精通,你只需要在马哥教育待四个月...
- 计算机英语翻译的典故,中国成语典故英语翻译大全
- trove mysql 镜像_trove 基于 centos7 制作 mysql5.6 镜像
- INotifyPropertyChanged 接口
- C++ int (*s[10])(int) 表示什么?
- 【嵌入式】C语言高级编程-内建函数(11)
- [C++] this指针
- python3 新式类_python新式类和旧式类区别
- 无人驾驶三 卡尔曼滤波及无迹卡尔曼滤波的几何意义
- 初中数学抽象教学的案例_初中数学课堂片段教学案例分析
- 给老师的作文:育儿经验-父母是孩子最好的老师
- EmEditor中,正则判断行中是否存在自动字符串
- java 取色器_Arava: 用 swing 写一个取色器
- 屏幕录制软件有哪些?4款超好用录屏软件下载,强烈推荐
- Tp5开启cookie和session安全传输secure和httponly
- 小明左右手分别拿两张纸牌,黑桃10和红心8,现在交换手中的牌。编写并输出互换后的结果,输出结果如图。
- crt 生成pem_linux下pem转crt命令_crt转pem方法
- VMware虚拟机关闭U盘USB自动识别
- 用ps制作动态的地球旋转图片