基于Java的石头迷阵小游戏的设计与实现


效果图如图所示:
在这里插入图片描述

1 搭建游戏主界面

知识点:

  1. JFrame 最外层窗体,菜单图片文字添加到JFrame当中的
  2. JMenuBar 菜单栏,菜单上可以添加很多选项,如功能、关于,并且每个选项下面有很多条目进行选择
  3. JLabel 展示图片,设置图片的位置和大小

1.1 用JFrame类来创建窗体 (知识点继承)

JFrame类是Java提供的,我们无法改动其中的代码,如果想要在原有的基础上添加额外的功能,可以使用继承
并在构造方法中初始化界面
在这里插入图片描述

import javax.swing.*;

public class MyJFrame extends JFrame {
   
    public MyJFrame() {
   
        //把当前窗体的宽高进行了设置
        this.setSize(514, 595);
        //把当前窗体的标题进行了设置
        this.setTitle("石头迷阵单机版 V1.0");
        //把当前窗体的关闭模式进行了设置
        this.setDefaultCloseOperation(3);
        //让当前窗体可以写到屏幕的正中央
        this.setLocationRelativeTo(null);
        //让当前窗体可以置顶
        this.setAlwaysOnTop(true);
        //让当前窗体可以展示出来
        this.setVisible(true);
    }
}

public class App3 {
   
    public static void main(String[] args) {
   
        //1.启动主界面
        MyJFrame jFrame = new MyJFrame();
     }
}

1.2 菜单制作JMenuBar

在这里插入图片描述

private void initMenu() {
   
    //1.创建一个菜单对象
    JMenuBar jMenuBar = new JMenuBar();
    //2.设置菜单的宽高
    jMenuBar.setSize(514,20);
    //3.创建一个选项
    JMenu jMenu1 = new JMenu("功能");
    JMenu jMenu2 = new JMenu("关于");
    //4.创建两个条目
    jMenuItem1 = new JMenuItem("重新游戏");
    jMenuItem2 = new JMenuItem("联系我们");
    //5.把条目添加到选项当中
    jMenu1.add(jMenuItem1);
    jMenu2.add(jMenuItem2);
    //6.把选项添加到菜单当中
    jMenuBar.add(jMenu1);
    jMenuBar.add(jMenu2);
    //7.把菜单添加到最外层的窗体当中
    this.setJMenuBar(jMenuBar);
}

1.3 添加图片

在这里插入图片描述

//添加一张图片
ImageIcon imageIcon = new ImageIcon("image\\1.png");
//创建一个JLabel对象,利用JLabel对象来设置图片的位置和宽高
JLabel jLabel = new JLabel(imageIcon);
//设置jLabel的位置和宽高
//第一个参数,第二个参数表示位置
//第三个参数,第四个参数表示宽高
jLabel.setBounds(0,0,100,100);
//把JLabel添加到整个窗体当中
this.add(jLabel);

通过构建二维数组,加入4*4的图片到界面中
方法思想:

  1. 构造容量为4*4的一维数组,并打乱
  2. 构造4*4的二维数组,通过乱序的一维数组进行初始化,形成随机的二维数组
  3. 最后通过图片下标加入到窗体中

1.4 代码

至此一个完整的界面绘制成功,但是还未添加功能

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

public class MyJFrame extends JFrame {
   
    //定义一个二维数组方便管理数据
    private int[][] data = new int[4][4];

    public MyJFrame() {
   
        //添加窗体
        initFrame();
        //添加菜单
        initMenu();
        //添加图片
        initImage();

        //让当前窗体可以展示出来
        this.setVisible(true);
    }

    private void initImage() {
   
        //随机二位数组data取得随机的imgIndex
        initData();
        //创建随机的4*4图片
        for (int i = 0; i < data.length; i++) {
   
            for (int j = 0; j < data[i].length; j++) {
   
                int imgIndex = data[i][j];
                //第0号图片不放,放15张图片
                if (imgIndex != 0) {
   
                    ImageIcon imageIcon = new ImageIcon("image\\"+imgIndex+".png");
                    JLabel jLabel = new JLabel(imageIcon);
                    jLabel.setBounds(j*100+50,i*100+90,100,100);
                    this.add(jLabel);
                }
            }
        }

		//添加背景图片
        ImageIcon background = new ImageIcon("image\\background.png");
        JLabel backgroundJLabel = new JLabel(background);
        backgroundJLabel.setBounds(26,30,450,484);
        this.add(backgroundJLabel);
    }

    /**
     * 用随机的二维数组代表图片下标,从而生成随机的4*4的图片
     * 先构造随机的4*4的一维数组,然后将每一个随机的数赋值到二维数组中
     */
    private void initData() {
   
        int[] tmp = {
   0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

        //打乱tmp一位数组,通过随机下标,使之成为一维随机数组
        for (int i = 0; i < tmp.length; i++) {
   
            //2.获取数组中的一个随机索引
            Random r = 
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值