黄金矿工
实现黄金矿工游戏大体可以分为4个类
1.背景类
package com.zhou.GUI;
import java.awt.*;
public class Bg {
static int level = 1;
int goal = level*15;
static int countsum = 0;
static int waternum = 3;
static boolean waterState = false;
long startTime;
long endTime;
int price = (int) (Math.random()*10+1);
boolean shop = false;
boolean gameTime(){
long time = (endTime-startTime)/1000;
return time > 30;
}
Image bg = Toolkit.getDefaultToolkit().getImage("imgs/bg.jpg");
Image bg1 = Toolkit.getDefaultToolkit().getImage("imgs/bg1.jpg");
Image bg2 = Toolkit.getDefaultToolkit().getImage("imgs/peo.png");
Image water = Toolkit.getDefaultToolkit().getImage("imgs/water.png");
void paintSelf(Graphics g){
g.drawImage(bg,0,200,null);
g.drawImage(bg1,0,0,null);
switch (GameWin.state){
case 0:
drawWord(g,80,Color.BLACK,"开始游戏",200,400);
break;
case 1:
g.drawImage(bg2,322,50,null);
drawWord(g,30,Color.black,"积分:"+countsum,30,150);
g.drawImage(water,500,100,null);
drawWord(g,30,Color.green,"*"+waternum,560,150);
drawWord(g,20,Color.black,"第"+level+"关",30,60);
drawWord(g,30,Color.black,"目标"+goal,30,110);
endTime = System.currentTimeMillis();
long time = 30-(endTime-startTime)/1000;
drawWord(g,30,Color.black,"时间剩余"+(time>=0?time:0),580,80);
break;
case 2:
g.drawImage(water,300,400,null);
drawWord(g,30,Color.green,"价格"+waternum,300,500);
drawWord(g,20,Color.black,"是否购买"+level+"关",300,550);
if(shop){
countsum = countsum-price;
waternum++;
shop = false;
GameWin.state = 1;
startTime = System.currentTimeMillis();
}
break;
case 3:
drawWord(g,80,Color.RED,"游戏失败",250,350);
drawWord(g,80,Color.RED,"积分"+countsum,250,450);
break;
case 4:
drawWord(g,80,Color.YELLOW,"游戏成功",250,350);
drawWord(g,80,Color.YELLOW,"积分"+countsum,250,450);
break;
}
}
public static void drawWord(Graphics g,int size,Color color,String str,int x,int y){
g.setColor(color);
g.setFont(new Font("仿宋",Font.BOLD,size));
g.drawString(str,x,y);
}
void reGame(){
level = 1;
goal = level*15;
countsum = 0;
int waternum = 3;
waterState = false;
}
}
2.窗口类
package com.zhou.GUI;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
public class GameWin extends JFrame {
static int state;
ArrayList<Object> objectList = new ArrayList<>();
Bg bg = new Bg();
Line line = new Line(this);
{
boolean isPlace = true;
for (int i = 0; i < Math.random()*9+3*Bg.level; i++) {
double random = Math.random();
Gold gold;
if (random<0.3)
gold = new GoldMini();
else if (random<0.7)
gold = new Gold();
else
gold = new GoldPlus();
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 < Math.random()*9+1; i++) {
boolean isRock = true;
Rock rock;
rock = new Rock();
for (Object object:objectList){
if(rock.getRec().intersects(object.getRec())){
isRock = false;
i--;
}
}
if(isRock)
objectList.add(rock);
else {
i--;
}
}
}
Image offScreenImage;
public void nextLevel(){
if(bg.gameTime()&&state==1){
if(Bg.countsum>=bg.goal){
if(Bg.level==5){
state = 4;
}
else {
state = 2;
Bg.level++;
}
}
else
state = 3;
dispose();
GameWin gameWin = new GameWin();
gameWin.lunch();
}
}
void lunch(){
this.setVisible(true);
this.setSize(768,1000);
this.setLocationRelativeTo(null);
this.setTitle("黄金矿工");
setDefaultCloseOperation(WindowConstants.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;
case 1:
if(e.getButton()==1&&line.state==0)
line.state=1;
if(e.getButton()==3&&line.state==3&&Bg.waternum>0){
Bg.waterState=true;
Bg.waternum--;
}
break;
case 2:
if(e.getButton()==1){
bg.shop = true;
}
if(e.getButton()==3){
state = 1;
bg.startTime = System.currentTimeMillis();
}
break;
case 3:
case 4:
if(e.getButton()==1){
state = 0;
bg.reGame();
line.reGame();
}
break;
}
}
});
while (true){
nextLevel();
try {
repaint();
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void paint(Graphics g){
offScreenImage = this.createImage(768,1000);
Graphics gImage = offScreenImage.getGraphics();
bg.paintSelf(gImage);
if(state==1){
for(Object object:objectList){
object.piantSelf(gImage);
}
line.paintSelf(gImage);
}
g.drawImage(offScreenImage,0,0,null);
}
public static void main(String[] args) {
GameWin gameWin = new GameWin();
gameWin.lunch();
}
}
3.勾爪(线)类
package com.zhou.GUI;
import java.awt.*;
public class Line {
int x=400;
int y=180;
int endx=500;
int endy=500;
double len = 100;
double Mixlen = 100;
double Maxlen = 750;
double n = 0;
int dir = 1;
int state;
Image hook = Toolkit.getDefaultToolkit().getImage("imgs/hook.png");
GameWin frame;
Line(GameWin frame){
this.frame = frame;
}
void logic(){
for (Object object:this.frame.objectList){
if(endx>object.x&&endx<object.x+object.width
&& endy>object.y&&endy<object.y+object.height){
state = 3;
object.flag = true;
}
}
}
void linePaint(Graphics g){
g.drawLine(x-1,y-1,endx,endy);
g.drawLine(x,y,endx,endy);
g.drawLine(x+1,y+1,endx,endy);
g.drawImage(hook,endx-36,endy-2,null);
}
void paintSelf(Graphics g){
logic();
switch (state){
case 0:
if (n<=0.1)
dir = 1;
else if(n>=0.9)
dir = -1;
n=n+0.005*dir;
endx = (int) (x+len*Math.cos(n*Math.PI));
endy = (int) (y+len*Math.sin(n*Math.PI));
g.setColor(Color.red);
linePaint(g);
break;
case 1:
if(len<=Maxlen){
len +=12;
endx = (int) (x+len*Math.cos(n*Math.PI));
endy = (int) (y+len*Math.sin(n*Math.PI));
g.setColor(Color.YELLOW);
linePaint(g);
}else {
state = 2;
}
break;
case 2:
if(len>=Mixlen){
len -=12;
endx = (int) (x+len*Math.cos(n*Math.PI));
endy = (int) (y+len*Math.sin(n*Math.PI));
g.setColor(Color.BLUE);
linePaint(g);
}else
state = 0;
break;
case 3://抓取返回
int m = 1;
if(len>=Mixlen){
len = len-10;
endx = (int) (x+len*Math.cos(n*Math.PI));
endy = (int) (y+len*Math.sin(n*Math.PI));
g.setColor(Color.PINK);
linePaint(g);
for (Object object:this.frame.objectList){
if (object.flag){
m = object.m;
object.x=endx- (object.getWidth()/2);
object.y=endy;
if(len<=Mixlen){
object.x=-150;
object.y=-150;
object.flag = false;
Bg.waterState = false;
Bg.countsum += object.getCount();
state = 0;
}
if(Bg.waterState){
if(object.type==1){
m=1;
}
if (object.type==2){
object.x=-150;
object.y=-150;
object.flag = false;
Bg.waterState = false;
state = 2;
}
}
}
}
}
try {
Thread.sleep(m);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
}
void reGame(){
n = 0;
len = 100;
}
}
4.物体类
-
父类Object package com.zhou.GUI;
import java.awt.*;
public class Object {
int x;
int y;
int width;
int height;
Image img;
boolean flag = false;
int m;
int count;
int type;
void piantSelf(Graphics g){
g.drawImage(img,x,y,null);
}
public int getWidth() {
return width;
}
public Rectangle getRec(){
return new Rectangle(x,y,width,height);
}
public int getCount(){
return count;
}
}
-
子类金块类 package com.zhou.GUI;
import java.awt.*;
public class Gold extends Object{
Gold(){
this.x = (int) (Math.random()*700);
this.y = (int) (Math.random()*550+300);
this.width = 52;
this.height = 52;
this.flag=false;
this.m = 30;
this.count = 4;
this.type = 1;
this.img = Toolkit.getDefaultToolkit().getImage("imgs/gold1.gif");
}
}
class GoldMini extends Gold {
GoldMini() {
this.width = 36;
this.height = 36;
this.m = 15;
this.count = 2;
this.img = Toolkit.getDefaultToolkit().getImage("imgs/gold0.gif");
}
}
class GoldPlus extends Gold {
GoldPlus() {
this.x = (int) (Math.random()*650);
this.width = 105;
this.height = 105;
this.m = 70;
this.count = 8;
this.img = Toolkit.getDefaultToolkit().getImage("imgs/gold2.gif");
}
}
-
石头类 package com.zhou.GUI;
import java.awt.*;
public class Rock extends Object{
Rock() {
this.x = (int) (Math.random()*700);
this.y = (int) (Math.random()*550+300);
this.width = 71;
this.height = 71;
this.flag=false;
this.m = 50;
this.count = 1;
this.type = 2;
this.img = Toolkit.getDefaultToolkit().getImage("imgs/rock1.png");
}
}
运行截图

需要使用的图片









ps
详情可以去【尚学堂】只用了2小时做出了Java黄金矿工小游戏项目_java初级项目_java练手项目_java项目实战_Java游戏开发实战教学_java小游戏_哔哩哔哩_bilibili观看;
|