黑马程序员_石头迷阵小游戏

黑马程序员_石头迷阵小游戏

源代码
一些说明:

1)这些是我看b站黑马程序员的视频,自己手打的,想分享一下,如果有侵权啥的请联系我,马上删除
2)一些比较重要的我都有给注释
3)工具idea idk版本14.0.1
大年三十,祝看到这句话的人儿新年快乐

主函数:
public class APP {
    public static void main(String[] args) {
        new MainFrame();
    }
}
MainFrame:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;

public class MainFrame extends JFrame implements KeyListener, ActionListener {

    int [][] datas = new int[4][4];


    //记录空白格位置
    int x0;
    int y0;

    //记录得分
    int count = 0;

    //记录游戏状态
    int Flag = 1;


    //皮肤选项

    JMenuItem item4 = new JMenuItem("重新开始");
    JMenuItem item5 = new JMenuItem("关于我们");



    /**
     * 该方法用于初始化数据 -- datas数组进行初始化
     */
    public void initData(){
        int[] a = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

        Random  r = new Random();
        //将0~15的一维数组随机打乱
        for (int i = 0; i < a.length; i++) {
            int index = r.nextInt(a.length); // 0~15
            int tem = a[i];
            a[i] = a[index];
            a[index] = tem;
        }
        for (int i = 0; i < a.length; i++) {
            datas[i/4][i%4] = a[i];
            if (a[i] == 0){
                x0 = i/4;
                y0 = i%4;
            }
        }
    }
    /**
     * 该方法用于初始化数据 -- datas数组进行初始化
     */
    public void reitData(){
        initData();
        paintView();
    }



    //空参构造方法
    public MainFrame(){
        //初始化窗体
        initFrame();
        //初始化菜单
        initMenu();
        //初始化数据
        initData();
        //绘制界面
        paintView();

        //为窗体添加键盘监听
        this.addKeyListener(this);

        //设置窗体可见
        setVisible(true);
    }

    /**
     * 此方法用于初始化菜单(换肤、关于我们)
     */
    public void initMenu() {
        //1、2、3属于层级包含关系
        //1.创建JMenuBar (木棍)
        JMenuBar menuBar = new JMenuBar();
        //2.创建栏目对象Jmenu (换肤、关于我们)
        JMenu menu1 = new JMenu("功能");




        //3.创建JMenTtem (大蒜),提升作用域到成员变量
//        JMenuItem item1 = new JMenuItem("经典");
//        JMenuItem item2 = new JMenuItem("赛博朋克");
//        JMenuItem item3 = new JMenuItem("小屁孩风");


        //4.创建联系关系
        menuBar.add(menu1);



        menu1.add(item4);
        menu1.add(item5);

        //5.注册监听

        item4.addActionListener(this);
        item5.addActionListener(this);


        //6.给窗体对象设置菜单
//        super.setJMenuBar(menuBar);
        setJMenuBar(menuBar);
    }

    /**
     * 窗体初始化方法,所有窗体有关的设置都在这个方法中完成*/
    public  void initFrame(){

        setTitle("2048");
        setSize(514,538);
        //设置窗体居中
        setLocationRelativeTo(null);
        //设置窗体置顶
        setAlwaysOnTop(true);
        //设置窗体的关闭模式
        setDefaultCloseOperation(3);
        //通过窗体对象frame,取消默认布局
        setLayout(null);

    }


    /**
     * 此方法用于绘制游戏界面*/
    public void paintView(){
        //移除掉界面所有内容
        getContentPane().removeAll();

        //创建Jlable对象,显示图片
        if (Flag == 2){
            JLabel loseLabel = new JLabel(new ImageIcon("F:\\JAVA\\day05\\资料\\石头迷阵image\\win.png"));
            loseLabel.setBounds(124,230,266,88);
            getContentPane().add(loseLabel);
        }

        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                JLabel image = new JLabel(new ImageIcon("F:\\JAVA\\day05\\资料\\石头迷阵image\\"+datas[i][j]+".png"));
                image.setBounds(50+100*j,50+100*i,100,100);
                getContentPane().add(image);
            }
        }
//        ImageIcon icon = new ImageIcon("F:\\JAVA\\day05\\资料\\image\\A-Background.png");
//        JLabel jl1 = new JLabel(icon);
//        jl1.setBounds(40,40,420,420);

        JLabel background = new JLabel(new ImageIcon("F:\\JAVA\\day05\\资料\\石头迷阵image\\background.png"));
        background.setBounds(40,40,420,420);

        //将创建好的Jlable对象(背景)添加到面板当中
        getContentPane().add(background);

        JLabel scoreLabel = new JLabel("步数" + count);
        scoreLabel.setBounds(50,20,100,20);
        getContentPane().add(scoreLabel);
        //刷新界面的方法
        getContentPane().repaint();
    }

    /**
     * 无法监听到上下左右、ctrl、fn。。。,无需关注*/
    @Override
    public void keyTyped(KeyEvent e) {

    }

    /**
     * 键盘被按下时,所触发的方法,在这个方法中区别上下左右按键*/
    @Override
    public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();

        CheckVictory();
        if (keyCode == 37){
            if (y0 == 3){
                return;
            }else{
                //左移动逻辑,调用左移动方法
                moveToLeft(1);
                count++;
            }

        }else if (keyCode == 38){
            if (x0 == 3){
                return;
            }else{
                //上移动逻辑
                moveTotop(1);
                count++;
            }

        }else if (keyCode == 39){
            if (y0 == 0){
                return;
            }else{
                //右移动逻辑
                moveToRight(1);
                count++;
            }

        }else if (keyCode == 40){
            if (x0 == 0){
                return;
            }else{
                //下移动逻辑
                moveToBottom(1);
                count++;
            }

        }else if (keyCode == 86 || keyCode == 118){
            cheat();
        }else {
            return;
        }
        //重新绘制界面
        paintView();
    }

    //作弊器
    public void cheat() {
        int[] c = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
        for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas.length; j++) {
                datas[i][j]=c[4*i+j];

            }
        }
        x0=3;
        y0=3;
    }

    /**
     * 此方法用于每次移动之后判断是否成功
     */
    public void CheckVictory(){
        int[] b = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
        lo:
        for (int i = 0; i < datas.length; i++) {
            for (int j = 0; j < datas.length; j++) {
                if (datas[i][j] != b[4*i+j]){
                    return;
                }
            }
        }
        Flag = 2;//表示成功了
    }

    /**
     * 此方法用于左移动*/
    public void moveToLeft(int flag) {
        datas[x0][y0] = datas[x0][y0+1];
        datas[x0][y0+1] = 0;
        y0++;
    }


    /**
     *此方法用于右移动
     */
    public void moveToRight(int flag){
        datas[x0][y0] = datas[x0][y0-1];
        datas[x0][y0-1] = 0;
        y0--;
    }



    /**
     * 此方法用于实现上移动
     */
    public void moveTotop(int flag) {
        datas[x0][y0] = datas[x0+1][y0];
        datas[x0+1][y0] = 0;
        x0++;
    }

    /**
     * 此方法用于实现下移动
     */
    public void moveToBottom(int flag) {
        datas[x0][y0] = datas[x0-1][y0];
        datas[x0-1][y0] = 0;
        x0-- ;
    }



    /**
     * 键盘被松开时触发的方法*/
    @Override
    public void keyReleased(KeyEvent e) {

    }

    /**
     * 判断换肤
     * @param e
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == item4){
            reitData();
        }else if (e.getSource() == item5){
            System.out.println("我们都是一家人,相亲相爱的一家人");
        }
        paintView();
    }
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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;//涓�紑濮嬪氨妫�祴锛屾病鏈夌Щ鍔ㄥ懡浠ょ

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值