一、功能点
本项目分为15个功能点:1.窗口绘制2.勾爪往返旋转3.物体批量绘制4.双缓存解决闪动问题5.点和矩形碰撞检测6.多种类物体随机生成7.物体堆叠检测8.多种类抓取速度判定9.积分设置10.关卡设置11.重新开始12.单关卡倒计时13.金块的快速拉取14.石块爆破15.商店购物。
二、项目结构
代码结构:
结构体:
功能实现:
在Game类中继承JFrame,对屏幕上window的对象,能够最大化、最小化、关闭。
设置了5种游戏状态(参数为state)
0:游戏未开始
1:游戏运行中
2:进入商店
3:游戏失败
4:游戏胜利
创建石块,金块的列表集合,随机生成石块,金块,同时判断是否发生了重叠,如重叠则不可生成。
初始化窗口信息,大小、位置、标题等,根据游戏的状态应用鼠标点击,具体为左右摇摆,点击左键,抓取返回,点击右键。
当满足本关卡获胜条件,通过重复绘制图片游戏进入下一关。
调用画笔类绘制金块,石块。
三:类
主类:Game
背景类:BackGround
绳索类:Rope
父类:Object
子类:Rock,Gold
四:代码解读:
主类Game类:
public class Game extends JFrame {
//0未开始,1表示运行中,2表示商店,3表示失败,4表示胜利
static int state;
//存储金块,石块
List<Object> objectList = new ArrayList<>();
//将图片载入到程序当中
BackGround bg = new BackGround();
Rope line = new Rope(this);
{
//是否可以放置
boolean isPlace = true;
for (int i=0;i<11;i++){
double random = Math.random();
Gold gold;//存放当前生成的金块
if(random<0.3){
gold = new SmallGold();
}else if(random<0.7){
gold = new Gold();
}else {
gold = new BigGold();
}
for (Object obj:objectList){
if(gold.getRec().intersects(obj.getRec())){
//不可放置,需重新生成
isPlace = false;
i--;
}
}
if (isPlace){
objectList.add(gold);
}else {
isPlace = true;
i--;
}
}
for (int i=0;i<3;i++){
Rock rock = new Rock();
for (Object obj:objectList){
if (rock.getRec().intersects(obj.getRec())){
isPlace = false;
}
}
if (isPlace){
objectList.add(rock);
}else {
isPlace = true;
i--;
}
}
}
Image offScreenImage;
void launch(){ //初始化窗口信息
this.setVisible(true); //设置窗口是否可见
this.setSize(768,1000);//设置窗口大小
this.setLocationRelativeTo(null);//设置窗口位置,使窗口居中
this.setTitle("黄金矿工");//设置窗口标题
setDefaultCloseOperation(EXIT_ON_CLOSE);//创建关闭窗口的方法
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
switch (state){
case 0:
if (e.getButton()==3){
state = 1;
bg.startTime = System.currentTimeMillis();
}
break;
cas