首页 > 其他分享 >2048

2048

时间:2023-05-24 20:03:10浏览次数:29  
标签:boardSize int 2048 ++ board col row

import java.util.*;

public class TwoZeroFourEight { // 游戏棋盘大小 private int boardSize; // 游戏棋盘 private int[][] board; // 随机数生成器 private Random rand;

// 游戏初始化
public TwoZeroFourEight(int boardSize) {
    this.boardSize = boardSize;
    this.board = new int[boardSize][boardSize];
    this.rand = new Random();
    addTile();
    addTile();
    printBoard();
}

// 在棋盘的空白位置上添加一个数(2 或 4)
private void addTile() {
    List<int[]> emptyTiles = getEmptyTiles();
    if (emptyTiles.size() > 0) {
        int[] tile = emptyTiles.get(rand.nextInt(emptyTiles.size()));
        board[tile[0]][tile[1]] = rand.nextInt(10) == 0 ? 4 : 2;
    }
}

// 打印游戏棋盘
public void printBoard() {
    System.out.println("   Score: " + getScore() + "\n");
    for (int row = 0; row < boardSize; row++) {
        System.out.print("| ");
        for (int col = 0; col < boardSize; col++) {
            System.out.print(String.format("%-5d", board[row][col]));
            System.out.print("| ");
        }
        System.out.println("\n");
    }
}

// 获取所有空白的方块
private List<int[]> getEmptyTiles() {
    List<int[]> emptyTiles = new ArrayList<>();
    for (int row = 0; row < boardSize; row++) {
        for (int col = 0; col < boardSize; col++) {
            if (board[row][col] == 0) {
                emptyTiles.add(new int[] {row, col});
            }
        }
    }
    return emptyTiles;
}

// 获取当前分数
public int getScore() {
    int score = 0;
    for (int row = 0; row < boardSize; row++) {
        for (int col = 0; col < boardSize; col++) {
            score += board[row][col];
        }
    }
    return score;
}

// 判断是否游戏结束
public boolean isGameOver() {
    if (getEmptyTiles().size() > 0) {
        return false;
    }
    for (int row = 0; row < boardSize; row++) {
        for (int col = 0; col < boardSize; col++) {
            if (row < boardSize - 1 && board[row][col] == board[row + 1][col]) {
                return false;
            }
            if (col < boardSize - 1 && board[row][col] == board[row][col + 1]) {
                return false;
            }
        }
    }
    return true;
}

// 向左移动
public void moveLeft() {
    boolean hasMoved = false;
    for (int row = 0; row < boardSize; row++) {
        int[] line = board[row];
        for (int col = 0; col < boardSize - 1; col++) {
            if (line[col] == 0) {
                continue;
            }
            for (int search = col + 1; search < boardSize; search++) {
                if (line[search] == 0) {
                    continue;
                }
                if (line[col] == line[search]) {
                    line[col] *= 2;
                    line[search] = 0;
                    hasMoved = true;
                }
                break;
            }
        }

        int[] newLine = new int[boardSize];
        int index = 0;
        for (int value : line) {
            if (value != 0) {
                newLine[index++] = value;
            }
        }
        board[row] = newLine;
        while (index < boardSize) {
            newLine[index++] = 0;
        }
    }
    if (hasMoved) {
        addTile();
    }
    printBoard();
}

// 继续实现向上、向右和向下移动的方法

// 主程序入口
public static void main(String[] args) {
    TwoZeroFourEight game = new TwoZeroFourEight(4);
    Scanner scanner = new Scanner(System.in);

    while (!game.isGameOver()) {
        System.out.println("请输入移动方向:");
        String input = scanner.nextLine();
        switch (input) {
            case "a":
                game.moveLeft();
                break;
            // 继续实现其他移动方向的操作
            default:
                System.out.println("无效的输入,请重新输入!");
                break;
        }
    }
    System.out.println("游戏结束,分数为:" + game.getScore());
    scanner.close();
}

}

标签:boardSize,int,2048,++,board,col,row
From: https://blog.51cto.com/u_16096459/6342796

相关文章

  • 高性能双麦阵列拾音束语音降噪消回音处理芯片 nr2048
       NR2048芯片采用先进的语音处理技术,芯片拥有8k-16k频率采样,旨在嘈杂环境中改进语音通话的清晰度,以及有助于改善语音识别命令输入 NR2048芯片拥有先进的双麦克风阵列拾音束成型技术可以追踪通话者的声音,过滤掉不需要的背景噪音,提供自然的声音为任何环境中的用户提供清......
  • 2048简单游戏网页版
    失业在家,做几个小游戏看看玩法:按键盘的上下左右操作   2048.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>2048小游......
  • chatgpt写程序-python小游戏-2048-pygame
    闲的没事,用chatpgt弄了个小游戏,2048,利用pygame实现,无额外贴图。只需要告诉他写个python游戏2048,只用pygame实现,不要额外贴图。然后在他暂停后说请继续,最后会有一些bug,把报......
  • c++编程,对2048小游戏的扩充
    原游戏网址:(210条消息)C++小游戏(原创)——2048_c++小游戏下载_Ziwen.紫闻的博客-CSDN博客源代码: #include<iostream>#include<stdlib.h>#include<time.h>#include<......
  • 2048
    /*************************************************stdio.h标准C语言库*#include包含库*************************************************/#define_CRT_SECURE......
  • 适合编程初学者的开源项目:小游戏2048(安卓Compose版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • 适合编程初学者的开源项目:小游戏2048(鸿蒙ArkTS版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • 适合编程初学者的开源项目:小游戏2048(微信小程序版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • 适合编程初学者的开源项目:小游戏2048(Go语言版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • 适合编程初学者的开源项目:小游戏2048(Vue版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2、相......