Java实现石头迷阵

文章介绍了如何使用Java编写一个简单的石头迷阵游戏,包括主方法、JFrame、KeyListener的实现,以及游戏中的数组操作、图像显示和键盘移动控制。

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

主方法

package Demo.youxi;
public class Text {
    public static void main(String[] args) {
        //MainFrame mainFrame = new MainFrame();
        new MainFrame();
    }
}

 实现类

package Demo.youxi;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class MainFrame extends JFrame implements KeyListener {
    static int[][] data = {
            {1,2,3,4},
            {5,6,7,8},
            {9,10,11,12},
            {13,14,15,0}
    };
    static int[][] win = {
            {1,2,3,4},
            {5,6,7,8},
            {9,10,11,12},
            {13,14,15,0}
    };
    int count;
    int X;
    int Y;
    public MainFrame() {
        //设置键盘监听
        addKeyListener(this);
        //初始化
        initFrame();
        //打乱数组
        RandomVim();
        //添加图片
        showFrame();
        //设置窗体可见
        setVisible(true);
    }
    /**
     * 设置窗体初始化*/
    public void initFrame(){
        setSize(514,595);
        setTitle("石头迷阵V1.0");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(null);
        setAlwaysOnTop(true);
        setLocationRelativeTo(null);
    }


    /**
     * 添加图片*/
    public void showFrame(){
        //移除面板所有组件
        this.getContentPane().removeAll();
        if (ver()){
            JLabel win = new JLabel(new ImageIcon("E:\\IDE\\Advanced-codes\\Advanced-codes\\day01-code\\src\\Demo\\youxi\\imag\\win.png"));
            win.setBounds(124,230,266,88);
            getContentPane().add(win);

        }
        //添加步数
        JLabel text = new JLabel("步数为"+count);
        text.setBounds(50,20,100,20);
        getContentPane().add(text);

        //创建重新游戏按钮
        JButton cont = new JButton("重新游戏");
        cont.setBounds(350,20,100,20);
        getContentPane().add(cont);
        cont.setFocusable(false);
        cont.addActionListener(actionEvent -> {

            count=0;
            initFrame();
            RandomVim();
            showFrame();
        });

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                JLabel image = new JLabel(new ImageIcon("E:\\IDE\\Advanced-codes\\Advanced-codes\\day01-code\\src\\Demo\\youxi\\imag\\"+data[i][j]+".png"));
                image.setBounds(50+100*j,90+100*i,100,100);
                getContentPane().add(image);
            }
        }
        JLabel background = new JLabel(new ImageIcon("E:\\IDE\\Advanced-codes\\Advanced-codes\\day01-code\\src\\Demo\\youxi\\imag\\background.png"));
        background.setBounds(26,30,450,484);
        getContentPane().add(background);
        //通知面板做一次刷新
        this.getContentPane().repaint();
    }
    /**
     *打乱数组*/
    public void RandomVim(){
        Random r= new Random();

        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                int RandomVimX = r.nextInt(4);
                int RandomVimY = r.nextInt(4);
                int temp = data[i][j];
                data[i][j] = data[RandomVimX][RandomVimY];
                data[RandomVimX][RandomVimY] = temp;
            }
        }
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                if (data[i][j]==0){
                    X = i;
                    Y = j;
                }
            }
        }
    }

    @Override
    public void keyTyped(KeyEvent keyEvent) {

    }

    @Override
    public void keyReleased(KeyEvent keyEvent) {

    }
    /**
    * 移动*/
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
        move(keyCode);
        showFrame();
    }
    /**
     * 判断游戏是否胜利*/
    public boolean ver(){
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                if (data[i][j]!=win[i][j]){
                    return false;
                }
            }
        }
        return true;
    }
/**
 * 键盘监听*/
    private void move(int keyCode) {
        if (ver()){
            return;
        }
        if (keyCode == 37){
            if (Y==3){
                return;
            }
            int temp = data[X][Y];
            data[X][Y] = data[X][Y+1];
            data[X][Y+1] = temp;
            Y++;
            count++;
        } else if (keyCode == 38) {
            if (X==3){
                return;
            }
            int temp = data[X][Y];
            data[X][Y] = data[X+1][Y];
            data[X+1][Y] = temp;
            X++;
            count++;
        } else if (keyCode == 39) {
            if (Y==0){
                return;
            }
            int temp = data[X][Y];
            data[X][Y] = data[X][Y-1];
            data[X][Y-1] = temp;
            Y--;
            count++;
        } else if (keyCode == 40) {
            if (X==0){
                return;
            }
            int temp = data[X][Y];
            data[X][Y] = data[X-1][Y];
            data[X-1][Y] = temp;
            X--;
            count++;
        } else if (keyCode == 90) {
            data = new int[][]{
                    {1,2,3,4},
                    {5,6,7,8},
                    {9,10,11,12},
                    {13,14,15,0}
            };
        }
    }
}

android 游戏源码,宝石迷阵。 package wealk.android.jewels; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import javax.microedition.khronos.opengles.GL10; import org.anddev.andengine.audio.sound.Sound; import org.anddev.andengine.audio.sound.SoundFactory; import org.anddev.andengine.engine.Engine; import org.anddev.andengine.engine.camera.Camera; import org.anddev.andengine.engine.handler.IUpdateHandler; import org.anddev.andengine.engine.handler.timer.ITimerCallback; import org.anddev.andengine.engine.handler.timer.TimerHandler; import org.anddev.andengine.engine.options.EngineOptions; import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation; import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy; import org.anddev.andengine.entity.scene.Scene; import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener; import org.anddev.andengine.entity.shape.modifier.AlphaModifier; import org.anddev.andengine.entity.shape.modifier.LoopShapeModifier; import org.anddev.andengine.entity.shape.modifier.RotationModifier; import org.anddev.andengine.entity.shape.modifier.ScaleModifier; import org.anddev.andengine.entity.shape.modifier.SequenceShapeModifier; import org.anddev.andengine.entity.sprite.Sprite; import org.anddev.andengine.entity.text.ChangeableText; import org.anddev.andengine.entity.text.Text; import org.anddev.andengine.input.touch.TouchEvent; import org.anddev.andengine.opengl.font.Font; import org.anddev.andengine.opengl.font.FontFactory; import org.anddev.andengine.opengl.texture.Texture; import org.anddev.andengine.opengl.texture.TextureOptions; import org.anddev.andengine.opengl.texture.region.TextureRegion; import org.anddev.andengine.opengl.texture.region.TextureRegionFactory; import org.anddev.andengine.ui.activity.BaseGameActivity; import org.anddev.andengine.util.Debug; import org.anddev.andengine.util.HorizontalAlign; import org.anddev.andengine.util.MathUtils; import wealk.android.jewels.constants.IConstants; import wealk.android.jewels.entity.BackgroundCell; import wealk.android.jewels.entity.BorderSprite; import wealk.android.jewels.entity.JewelSprite; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.graphics.Typeface; import android.os.Handler; import android.os.Message; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.Toast; /** * @author Qingfeng * @time 2010-11-03 ~ 2010 */ public class Jewels extends BaseGameActivity implements IOnSceneTouchListener, IConstants { // =========================================================== // Constants // =========================================================== /**灞忓箷灏哄**/ private static final int CAMERA_WIDTH = 320; private static final int CAMERA_HEIGHT = 480; /**鍦烘櫙鍒嗗眰**/ private static final int LAYER_BACKGROUND = 0; private static final int LAYER_BG_CELL = LAYER_BACKGROUND + 1; private static final int LAYER_JEWELS = LAYER_BG_CELL + 1; private static final int LAYER_SCORE = LAYER_JEWELS + 1; // =========================================================== // Fields // =========================================================== private Camera mCamera;//闀滃ご protected Scene mMainScene;//涓诲満鏅� /**娓告垙妯″紡**/ private String mGameModel; /**娓告垙鐘舵�**/ private boolean mGameRunning;//娓告垙鐨勬�寮�叧(鍙鐞嗘潵鐢点�浠诲姟鍒囨崲绛� private boolean mIsSwaping;//浜ゆ崲鐘舵� private final int MOVE_UP = 1;//涓婄Щ private final int MOVE_DOWN = 2;//涓嬬Щ private final int MOVE_LEFT = 3;//宸︾Щ private final int MOVE_RIGHT = 4;//鍙崇Щ private final int FALL = 5;//涓嬭惤 private final int DEAD = 6;//姝诲眬 private final int CHECK = 0;//鎵ц妫�祴 private int STATE = CHECK;//涓�紑濮嬪氨妫�祴锛屾病鏈夌Щ鍔ㄥ懡浠ょ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值