简单Java项目——黄金矿工小游戏

我们用JavaSwing写一个简单地java项目——黄金矿工,首先建一个game包,用以存放各个类。
图片素材有一个天空背景、一个地面背景、一个人物、一个勾爪、不同大小的金块、石块及药水。
抓取金块得分,抓取石块扣分,每一关刷新金块与石块的位置。

运行类

GameWin 这是主要的类,继承自JFrame,是图形用户界面的顶层容器。它管理游戏状态、渲染和用户交互。
List objectList 一个列表,存储各种游戏对象(如金块和岩石),可以与之交互。
bj 一个类的实例,表示背景或主要游戏逻辑。
line 一个类的实例,表示用于捕捉对象的线。
offScreenImage 用于双缓冲的图像,以减少渲染时的闪烁。
state 一个静态整数,表示游戏的当前状态(例如,开始、运行、成功、失败、商店)。
构造块初始化objectList添加不同类型的对象(如金块、金块2、金块3和岩石)。每种类型的数量由循环计数定义。
launch() 该方法设置JFrame的属性(大小、标题、关闭操作),并添加鼠标监听器以处理用户交互。它进入一个无限循环,不断重绘游戏并调用nextL()检查游戏状态的变化。
鼠标监听器处理不同的游戏状态

状态 事件
状态0(开始) 当右键单击时开始游戏
状态1(运行) 允许玩家与游戏互动(例如,左键单击捕捉对象)
状态2(成功) 根据鼠标点击打开商店或重新开始游戏
状态3(失败) 当左键单击时重置游戏
状态4(商店) 类似于状态3,重置游戏

nextL() 该方法检查游戏是否应该根据游戏逻辑转换到新状态(例如,玩家是否达到了目标)。如果达到了目标,则转到商店或增加等级。
paint(Graphics g) 该方法负责渲染游戏。它创建一个用于双缓冲的离屏图像,调用bj和line对象的各种绘制方法,并遍历objectList绘制每个对象。
源码

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值