【CS61B】Project 0 游戏2048


proj0是让我们写一个2048的游戏,大家应该都玩过,就不详细介绍了。
主要是完成这个游戏中的四个函数的实现,游戏的整体框架已经有了。

一、public static boolean emptySpaceExists(Board b)

这个函数,是用来判断游戏面板上是不是还有空格子。

这个很简单。但注意实现的时候格子在Bord类中是private类型的,无法直接调用,需要通过b.tile(i,j)函数来读取格子。

   public static boolean emptySpaceExists(Board b) {
        // TODO: Fill in this function.
        int size=b.size();
        for(int i=0;i<size;i++){
            for(int j=0;j<size;j++){
                if(b.tile(i,j)==null){
                    return true;
                }
            }
        }
        return false;
    }

二、public static boolean maxTileExists(Board b)

这个函数主要意思是让我们判断格子中是不是已经有2048这个数字了,有的话,游戏就结束。
这个在判断的时候,当时出现了一点小问题,就是我们应该判断格子的数值是否等于2048,而不是判断格子。
还有一点注意的是,不是直接判断2048,判断的是MAX_PIECE。

    public static boolean maxTileExists(Board b) {
        // TODO: Fill in this function.
        int size=b.size();
        for(int i=0;i<size;i++){
            for(int j=0;j<size;j++){
                Tile t = b.tile(i,j);
                if(t!=null && t.value()==MAX_PIECE){
                    return true;
                }
            }
        }
        return false;
    }

三、public static boolean atLeastOneMoveExists(Board b)

这个函数主要是让我们来判断这个游戏是否还可以继续:有两点

  1. 游戏面板还有空间,也就是有空格子,游戏还可以i继续。
  2. 相邻的格子有一样的,就是当前格子的上下左右有一样的就可以消除。(我在这一步犯得一个错误是,我算成四个角的格子了)
public static boolean atLeastOneMoveExists(Board b) {
        // TODO: Fill in this function.
        if (emptySpaceExists(b)) return true;
        int size=b.size();
        int dx[]={0,1,0,-1};
        int dy[]={1,0,-1,0};
        for(int col=0;col<size;col++){
            for(int row=0;row<size;row++){
                for(int move=0;move<4;move++){
                    int curvalue=b.tile(col,row).value();
                    int newcol=col+dx[move];
                    int newrow=row+dy[move];
                    if(newcol<size && newrow<size && newcol>=0 && newrow>=0){
                        Tile t=b.tile(newcol,newrow);
                        if(curvalue==t.value()){
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }

四、public boolean tilt(Side side)

最具有挑战的一个方法。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值