分享一个最近做的一个用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趣味小程序:打弹珠相关推荐

  1. python恶搞小程序-知道了这个,你也能写出 Python 趣味小程序

    原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...

  2. 微信小程序 禁止弹框下面的内容滑动 弹窗禁止底部内容滚动

    我们需要解决的问题:当弹框显示的时候,弹框下面的内容不能滚动 小程序的弹框特别多,像下面这样,弹框的底部是一个可以下拉的页面,但是当弹框出现的时候,需要禁止底部的滚动,那么怎么做呢? 解决方案: 给v ...

  3. python有趣小程序-知道了这个,你也能写出 Python 趣味小程序

    原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...

  4. python趣味程序_知道了这个,你也能写出 Python 趣味小程序

    原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...

  5. 用python编写一个猜年龄的小程序-知道了这个,你也能写出 Python 趣味小程序

    原标题:知道了这个,你也能写出 Python 趣味小程序 前两天在 51CTO 看见某篇推荐博文,大概是一个 豆子比较感兴趣,在知乎和 github 上搜索了相关的源代码,发现原来实现起来非常的简单, ...

  6. 初识微信小程序第一弹

    按照惯例,写作之前先逼逼一会儿.这里不得不说最近过的有点懵,本来公司的业务需求是用hbuilder开发app,我都准备入坑了,结果临时又换成react native了,没办法啊,我就被分配到开发微信小 ...

  7. c++趣味小程序_工具类小程序10天增长103万全复盘

    本文目录: 一.100万小程序用户意味着什么 二.为什么要选择春节期间做增长 三."己亥计划"全复盘 四.活动总结及可复用经验 一.100万小程序用户意味着什么 或许对于很多公司的 ...

  8. html5底部悬浮添加到桌面,桌面小程序 在弹出的界面点击“添加到桌面”

    有个小程序怎么操作到桌面上? 欢迎来到CSS布局HTML,你是不是想把微信小程序弄到手机桌面上? 在小程序右上角有三个点点开,里面有个添加到桌面.下图以跳一跳游戏小程序为例,手机要打开快捷方式的权限. ...

  9. 微信小程序无法弹出授权登录窗口

    微信小程序开发,小程序接口问题..... 今天在写微信小程序的时候,为了获取到后台的token,必须要获取到code,encryptedData,iv ,rawData,signature五个值.co ...

  10. 暗潮:微信小程序第三弹:关于微信小程序吸粉方式的可行性分析

    2019独角兽企业重金招聘Python工程师标准>>> 今天龙哥说了,小程序上没有关注量粉丝量这回事了,只有浏览量. 可是,粉丝数只是一个指标,小程序只要打开,用户的信息咱们就可以获 ...

最新文章

  1. 分享一款超棒的jQuery旋钮插件 - jQuery knob
  2. python入门到精通需要学多久-从Python入门到精通,你只需要在马哥教育待四个月...
  3. 计算机英语翻译的典故,中国成语典故英语翻译大全
  4. trove mysql 镜像_trove 基于 centos7 制作 mysql5.6 镜像
  5. INotifyPropertyChanged 接口
  6. C++ int (*s[10])(int) 表示什么?
  7. 【嵌入式】C语言高级编程-内建函数(11)
  8. [C++] this指针
  9. python3 新式类_python新式类和旧式类区别
  10. 无人驾驶三 卡尔曼滤波及无迹卡尔曼滤波的几何意义
  11. 初中数学抽象教学的案例_初中数学课堂片段教学案例分析
  12. 给老师的作文:育儿经验-父母是孩子最好的老师
  13. EmEditor中,正则判断行中是否存在自动字符串
  14. java 取色器_Arava: 用 swing 写一个取色器
  15. 屏幕录制软件有哪些?4款超好用录屏软件下载,强烈推荐
  16. Tp5开启cookie和session安全传输secure和httponly
  17. 小明左右手分别拿两张纸牌,黑桃10和红心8,现在交换手中的牌。编写并输出互换后的结果,输出结果如图。
  18. crt 生成pem_linux下pem转crt命令_crt转pem方法
  19. VMware虚拟机关闭U盘USB自动识别
  20. 用ps制作动态的地球旋转图片

热门文章

  1. 俄罗斯一法院对谷歌处以72亿卢布罚款
  2. android 音标的抓取 腾讯在线词典API
  3. S32K144_新建KEIL工程
  4. T270731 中奖
  5. LVGL|lvgl v8教程(lvgl中文文档学习教程,开始更新lvgl v8.x文档教程,超详细)
  6. 【送你一张门票】七牛云带你去看杭州云栖大会
  7. 矩阵论极简笔记(1):如何降维度打击
  8. 如何落户北京?19年积分落户规模为6000人!
  9. linux批量化删除以某某结尾命令
  10. 关于hibernate检索策略