简单Java项目

这是一个使用Java编写的黄金矿工游戏项目,包含了游戏窗口、背景、抓取线和金块石块等元素的类。游戏有多个状态,如开始、运行、成功、失败和商店,并通过鼠标点击进行交互操作。游戏画面由各种图片素材构成,包括天空背景、人物、勾爪等。玩家通过控制勾爪抓取金块和避免石头来达到目标分数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个简单地java项目——黄金矿工,首先建一个game包。

运行

package game;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

public class GameWin extends JFrame {

    List<Object> objectList = new ArrayList<>();
    bj bj = new bj();//背景
    line line = new line(this);//抓取线
    //gold gold = new gold();//金块
    Image offScreenImage;
    public static int state;//状态——开始:0,运行:1,成功:2,失败:3,商店:4

    {
        for (int i = 0; i<1; i++) {
            objectList.add(new gold());
        }
        for (int i = 0; i<2; i++) {
            objectList.add(new gold2());
        }
        for (int i = 0; i<3; i++) {
            objectList.add(new gold3());
        }
        for (int i = 0; i<3; i++) {
            objectList.add(new rock());
        }
    }//添加被抓取元素

    void launch() {
        this.setVisible(true);
        this.setSize(666,638);
        this.setLocationRelativeTo(null);
        this.setTitle("抓住那个会动的!");
        this.setResizable(false);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        addMouseListener(new MouseAdapter() {

            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                switch(state) {
                    case 0:
                        if(e.getButton() == 3){
                            state = 1;
                            bj.start = System.currentTimeMillis();
                        }
                        break;
                    case 1:
                        if(e.getButton() == 1 && line.state == 0){
                            line.state = 1;
                        }
                        if(e.getButton() == 3 && line.state == 3&&bj.djNum>0){
                            bj.djFlag = true;
                            bj.djNum--;
                        }
                        break;
                    case 2:
                        if(e.getButton() == 1){
                            bj.shop = true;
                        }
                        if(e.getButton() == 3){
                            state = 1;
                            bj.start = System.currentTimeMillis();
                        }
                        break;
                    case 3:
                        if(e.getButton() == 1){
                            state = 0;
                            bj.reG();
                            line.reG();
                        }
                        break;
                    case 4:
                        if(e.getButton() == 1){
                            state = 0;
                            bj.reG();
                            line.reG();
                        }
                        break;
                }
            }
        });

        while(true) {
            repaint();
            nextL();
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
    public void nextL(){
        if(bj.gTime() && state == 1) {
            if (bj.count >= bj.goal) {
                if(bj.level == 5){
                    state = 4;
                }else{
                    state = 2;
                    bj.count = 0;
                    bj.level++;
                }
            }//else{
              //  state = 3;
            //}
            dispose();
            GameWin gw = new GameWin();
            gw.launch();
        }
    }
    public void paint(Graphics g){
        offScreenImage = this.createImage(666,638);
        Graphics gImage = offScreenImage.getGraphics();

        bj.begin(gImage);
        if(state == 1) {
            bj.paintBJOne(gImage);
            bj.paintBJTwo(gImage);
            bj.paintPeople(gImage);

            line.paintLine(gImage);
            for (Object Obj : objectList) {
                Obj.paintSelf(gImage);
            }
        }
            //gold.paintSelf(gImage);//金块
            g.drawImage(offScreenImage, 0, 0, null);
    }

    public static void main(String[] args){
        GameWin GW = new GameWin();
        GW.launch();
    }
}

背景类

package game;

import java.awt.*;

public class bj {
    static int level = 1;
    static int goal = level*5;
    static int count = 0;
    static int djNum = 3;
    long start;
    long end;
    static boolean djFlag = false;
    int price = 7;
    boolean shop = false;

    Image bbj = Toolkit.getDefaultToolkit().getImage("goldP/bbj.jpg");
    Image bj = Toolkit.getDefaultToolkit().getImage("goldP/bjD.jpg");
    Image bj2 = Toolkit.getDefaultToolkit().getImage("goldP/bjT.jpg");
    Image peo = Toolkit.getDefaultToolkit().getImage("goldP/peo.png");
    Image dj = Toolkit.getDefaultToolkit().getImage("goldP/dj.jpg");
    void begin (Graphics g){
        switch(GameWin.state) {
            case 0:
                g.drawImage(bbj, 0, 0, null);
                drawWord(g, 40, Color.black, "单击右键开始游戏", 140, 330);
                break;
        }

    }
    void paintBJOne (Graphics g){
        switch(GameWin.state) {
            case 1:
                g.drawImage(bj, 0, 138, null);
                break;
        }

    }
    void paintBJTwo (Graphics g){
        switch(GameWin.state) {
            case 1:
                g.drawImage(bj2, 0, 0, null);
                drawWord(g, 30, Color.black, "总分:" + count, 30, 90);
                g.drawImage(dj, 535, 70, null);
                drawWord(g, 30, Color.black, "*" + djNum, 590, 100);
                drawWord(g, 20, Color.black, "第" + level + "关", 30, 60);
                drawWord(g, 20, Color.black, "目标积分:" + level * 5, 100, 60);
                end = System.currentTimeMillis();
                long time = 20-(end-start)/1000;
                drawWord(g, 30, Color.black, "时间" + (time>0?time:0)+"秒", 500, 60);
                break;
            case 2:
                g.drawImage(dj, 300, 300, null);
                drawWord(g, 30, Color.black, "价格" + price, 400, 315);
                drawWord(g, 30, Color.black, "是否购买", 355, 330);
                if(shop) {
                    count = count-price;
                    djNum++;
                    shop = false;
                    GameWin.state = 1;
                    start = System.currentTimeMillis();
                }
                break;
            case 3:
                g.drawImage(bbj, 0, 0, null);
                drawWord(g, 40, Color.black, "失败", 140, 330);
                drawWord(g, 30, Color.black, "总分:" + count, 30, 90);
                break;
            case 4:
                g.drawImage(bbj, 0, 0, null);
                drawWord(g, 40, Color.black, "通关", 140, 330);
                break;
        }
    }
    void paintPeople (Graphics g){
        switch(GameWin.state) {
            case 1:
                g.drawImage(peo, 309, 82, null);
                break;
        }
    }
    boolean gTime() {//倒计时
        long t = (end-start)/1000;
        if(t>20){
            return true;
        }
        return false;
    }
    void reG() {
        level = 1;
        goal = level*5;
        count = 0;
        djNum = 3;
        djFlag = false;
    }
    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);
    }
}

抓取线及抓取类

package game;

import java.awt.*;

public class line {
     int xb = 339;
     int yb = 138;

     int xe = 500;
     int ye = 500;

     double length = 50;
     double minL = 50;
     double maxL = 600;
     double angle = 0;

     int dir = 1;

     int state;
     Image hook = Toolkit.getDefaultToolkit().getImage("goldP/hook.jpg");

     GameWin frame;
     line(GameWin frame) {
          this.frame = frame;
     }

     void logic() {
          for(Object Obj:this.frame.objectList) {
               if (xe > Obj.x && xe < Obj.x + Obj.width
                       && ye > Obj.y && ye < Obj.y + Obj.height) {
                    state = 3;
                    Obj.flag = true;
               }
          }
     }

     void paintLine(Graphics g) {
          logic();

          switch (state) {
               case 0:
                    if(angle<0) {
                         dir = 1;
                    }else if(angle>1){
                         dir = -1;
                    }

                    angle = angle+0.005*dir;

                    xe = (int) (xb+length*Math.cos(angle*Math.PI));
                    ye = (int) (yb+length*Math.sin(angle*Math.PI));

                    g.setColor(Color.black);
                    g.drawLine(xb, yb, xe, ye);
                    g.drawImage(hook,xe-36,ye,null);
                    break;
               case 1:
                    if(length<maxL){
                         length = length+5;

                         xe = (int) (xb+length*Math.cos(angle*Math.PI));
                         ye = (int) (yb+length*Math.sin(angle*Math.PI));

                         g.setColor(Color.black);
                         g.drawLine(xb-1, yb, xe-1, ye);
                         g.drawLine(xb+1, yb, xe+1, ye);
                         g.drawLine(xb, yb, xe, ye);
                         g.drawImage(hook,xe-36,ye,null);
                    }else {
                         state = 2;
                    }
                    break;
               case 2:
                    if(length>minL){
                         length = length-5;

                         xe = (int) (xb+length*Math.cos(angle*Math.PI));
                         ye = (int) (yb+length*Math.sin(angle*Math.PI));

                         g.setColor(Color.black);
                         g.drawLine(xb-1, yb, xe-1, ye);
                         g.drawLine(xb+1, yb, xe+1, ye);
                         g.drawLine(xb, yb, xe, ye);
                         g.drawImage(hook,xe-36,ye,null);
                    }else {
                         state = 0;
                    }
                    break;
               case 3:
                    int m = 1;
                    if(length>50){
                         length = length-5;

                         xe = (int) (xb+length*Math.cos(angle*Math.PI));
                         ye = (int) (yb+length*Math.sin(angle*Math.PI));

                         g.setColor(Color.black);
                         g.drawLine(xb-1, yb, xe-1, ye);
                         g.drawLine(xb+1, yb, xe+1, ye);
                         g.drawLine(xb, yb, xe, ye);
                         for(Object Obj:this.frame.objectList) {
                              if(Obj.flag){
                                   m = Obj.m;
                                   Obj.x = xe - Obj.getWidth()/2;
                                   Obj.y = ye;
                                   if(length <= 50) {
                                        Obj.x = -150;
                                        Obj.y = -150;
                                        Obj.flag = false;
                                        bj.djFlag = false;
                                        bj.count += Obj.count;
                                        state = 0;
                                   }
                                   if(bj.djFlag){
                                        if(Obj.type == 0){
                                             m = 1;
                                        }
                                        if(Obj.type == 1){
                                             Obj.x = -150;
                                             Obj.y = -150;
                                             Obj.flag = false;
                                             bj.djFlag = false;
                                             state = 2;
                                        }
                                   }
                              }
                         }
                    }
                    try {
                         Thread.sleep(m);
                    } catch (InterruptedException e) {
                         e.printStackTrace();
                    }
                    break;
          }
     }
     void reG() {
          length = 50;
          angle = 0;
     }
}

金块及石块类

package game;

import java.awt.*;

public class Object {
    boolean flag;
    int x;
    int y;
    int width;
    int height;
    int m;
    int count;
    int type;  //动:0,静:1
    Image img;
    void paintSelf(Graphics g)  {
        g.drawImage(img,x,y,null);
    }
    public int getWidth() {
        return  width;
    }

}
package game;

import java.awt.*;

public class gold extends Object {

    boolean flag = false;

    gold() {
        this.x = (int)(Math.random()*660);
        this.y = (int)(Math.random()*400+200);
        this.width = 50;
        this.height = 50;
        this.m = 50;
        this.flag = false;
        this.count = 8;
        this.type = 0;
        this.img = Toolkit.getDefaultToolkit().getImage("goldP/gold3.gif");
    }
}
package game;

import java.awt.*;

public class rock extends Object{
    boolean flag = false;

    rock() {
        this.x = (int)(Math.random()*660);
        this.y = (int)(Math.random()*400+200);
        this.width = 52;
        this.height = 52;
        this.m = 100;
        this.count = -10086;
        this.type = 1;
        this.flag = false;
        this.img = Toolkit.getDefaultToolkit().getImage("goldP/rock1.png");
    }
}

图片素材有一个天空背景、一个地面背景、一个人物、一个勾爪、不同大小的金块、石块及药水。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值