Java制作2048游戏

        2048是什么? 2048 是一款流行的单人益智游戏,其目标是在网格上滑动编号的图块,合并具有相同数字的图块以达到 2048 及以上。

        我该如何玩2048? 您可以使用键盘上的箭头键或在支持触摸的设备上滑动,以四个方向滑动网格上的图块:上、下、左、右。 当两个相同数字的方块碰撞时,它们会合并成一个,并且它们的价值会加倍。 ...

        当我到达 2048 时会发生什么? 当您达到 2048 块时,您可以选择继续玩并瞄准更高的数字,或者您可以考虑游戏获胜并开始新游戏。

        有赢得2048的策略吗? 虽然没有保证每次都会获胜的策略,但一些技巧包括专注于合并更大的数字,为瓷砖移动创建清晰的路径,以及避免太快填满棋盘。

        这就是2048游戏~


        话不多说,直接启动,做一个略有简略但五脏俱全的小游戏版本

首先是我们的用户信息

public class UserInfo {
    private static int score;
    public String name;
    public UserInfo(String name) {
        this.name = name;
    }
    public static int getScore() {
        return score;
    }
    public static void setScore(int score) {
        UserInfo.score = score;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public static void addScore(int i){
        UserInfo.score+=i;
    }
}

很好,接下来我们应该摆出我们的胜利条件:

出现2048,然后我们会出现以下提示页面

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class winplay extends JFrame{
    public winplay(){
        UserInfo.addScore(5000);
        JOptionPane.showMessageDialog(null, 
        "游戏胜利,你的评分已出炉:"+UserInfo.getScore(),
        "胜利2048!",
        JOptionPane.INFORMATION_MESSAGE);
    }
}

接下来是我们的判断失败条件:

没有出现2048且每个方向上都无法移动

其中interplay这个类中包含了一个checkifvary方法,用来判断如果点击上下左右键,页面中方格布局是否会发生改变,如果不变,则移动无效。

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class overplay extends JFrame{
    public overplay(){
        JOptionPane.showMessageDialog(null, 
        "游戏结束,你的评分已出炉:"+UserInfo.getScore(),
        "结束啦",
        JOptionPane.INFORMATION_MESSAGE);
    }
    public static boolean finditOver(int[][] a){
        return (interplay.checkifvary(a,1)
        ||interplay.checkifvary(a,2)
        ||interplay.checkifvary(a,3)
        ||interplay.checkifvary(a,4));
    }
}

接下来是我们2048的主干部分,代码如下:

方法:

Ramdom2:随机生成2,如果方格已满,则游戏结束

isFull:判断是否已满

find2048:寻找是否已出现2048

phase1,2,3,4:分别对应上下左右的移动情形

checkifvary:移动是否为有效


public class interplay {
    int[][] a={
  {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};
    public static final int ROW=4;
    public static final int COLUMN=4;
    public static void Ramdom2(int[][] a){
        int count =0;
        int[] b=new int[16];
        for(int i=0;i<ROW;i++){
            for(int j=0;j<COLUMN;j++){
                if(a[i][j]==0){
                    b[count]=i*4+j;
                    count++;
                }
            }
        }
        long l = System.currentTimeMillis();
  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值