目录前言主要设计功能截图代码实现游戏核心类钩子类总结
前言
《黄金矿工》游戏是一个经典的抓金子小游戏,它可以锻炼人的反应能力。。该游戏中,可以通过“挖矿”获得积分,游戏道具:有3瓶药水,在回收绳子抓金子的时候速度稍快点。
主要设计
设计游戏界面,用swing实现随机创建金块算法随机创建石块算法计时系统设计积分系统设计设置鼠标事件,鼠标左键出钩子;鼠标右键开始游戏,确认吃药水等功能。
功能截图
游戏开始:


抓金子

代码实现
游戏核心类
public class GameWin extends JFrame { //继承JFrame才能监听鼠标键盘事件的功能
//设置静态变量 表示游戏状态 0表示未开始 1运行中 2商店 3失败 4胜利
static int state;
//创建链表 存储金块 石块
List objectList = new ArrayList();
Bg bg = new Bg();//背景
Line line = new Line(this);//线
{
//是否可以放置
boolean isPlace = true;
//循环创建金块
for (int i = 0; i < 11; i++){
double random = Math.random();
Gold gold;//存放当前生成的金块
if (random= bg.goal){//如果当前积分大于等于目标积分
if (Bg.level==1){
state=4;
}else {
state=2;
Bg.level++;//关卡数加一
}
}else {
state=3;
}
dispose();//释放已过关窗体
GameWin gameWin = new GameWin();
gameWin.launch();//调用launch方法绘制新窗口
}
}
@Override
public void paint(Graphics g) {
//画布与窗体大小相同
offScreenImage = this.createImage(768,1000);
//给画布添加画笔
Graphics gImage = offScreenImage.getGraphics();
bg.paintSelf(gImage);
if (state == 1){
//先画物体
for(Object obj:objectList){
obj.paintSelf(gImage);
}
//后画线
line.paintSelf(gImage);
}
//将画布绘制到窗口中
g.drawImage(offScreenImage,0,0,null);
}
public static void main(String[] args) {
GameWin gameWin = new GameWin();
gameWin.launch();
}
}
钩子类
public class Line {
//线的起点坐标
int x = 380;
int y = 180;
//终点坐标
int endx = 500;
int endy = 500;
//线的长度
double length = 100;
//线长最小值
double MIN_length = 100;
//线长最大值
double MAX_length = 750;
double n = 0;
//方向参数
int dir = 1;
//状态0摇摆 状态1抓取 状态2收回 状态3抓取返回
int state;
//钩爪图片
Image hook = Toolkit.getDefaultToolkit().getImage("imgs/hook.png");
//抓取判定方法
GameWin frame;
Line(GameWin frame){
this.frame=frame;
}
//钩爪碰撞检测 检测物体是否被抓取
void logic(){
for (Object obj:this.frame.objectList){
if(endx>obj.x && endxobj.y && endyMIN_length){
length = length-5;
lines(g);
for (Object obj:this.frame.objectList){
//判断能否移动
if (obj.flag){
m=obj.m;
obj.x = endx-obj.getWidth()/2;
obj.y = endy;
if (length