欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java控制台版2048:重新打造

最编程 2024-08-15 10:07:25
...
import java.util.Random;
import java.util.Scanner;

/**
*
* @author 老师付 2021年5月29日15:05:21
*/
public class Action {
static Random random = new Random();
static Scanner scanner = new Scanner(System.in);

private static boolean isNotFull(int[][] board) {
for (int[] ia : board)
for (int i : ia)
if (i == 0)
return true;
return false;
}

private static void generate(int[][] board) {
assert isNotFull(board);
while (true) {
int number = random.nextInt(16);
int row = number / 4;
int col = number % 4;
if (board[row][col] == 0) {
board[row][col] = System.currentTimeMillis() % 2 == 0 ? 2 : 4;
break;
}
}
}

static int[][] init() {
int[][] numArray = new int[4][4];
generate(numArray);
generate(numArray);
return numArray;
}

static void showBoard(int[][] board) {
for (int[] numArray : board) {
for (int i : numArray) {
if (i == 0) {
System.out.printf("%4s", ".");
} else {
System.out.printf("%4s", i);
}
}
System.out.println();
}
}

static char acceptInput() {
while (true) {
String line = scanner.nextLine().toLowerCase();
char direction = line.charAt(0);
if ("wasdWASD".indexOf(direction) != -1) {
return direction;
}else {
System.out.println("请按要求输入操作指令:");
System.out.println("up:w/W");
System.out.println("left:a/A");
System.out.println("down:s/S");
System.out.println("right:d/D");
}
}
}

static void downBlock(int[][] numArray) {
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 3; k++) {
for (int j = 3; j > 0; j--) {
if (numArray[j][i] == 0) {
numArray[j][i] = numArray[j - 1][i];
numArray[j - 1][i] = 0;
}
}

for (int j = 3; j > 0; j--) {
if (numArray[j][i] == numArray[j - 1][i]) {
numArray[j][i] = 2 * numArray[j][i];
numArray[j - 1][i] = 0;
}
}
}
}
generate(numArray);
}

static void upBlock(int[][] numArray) {
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 3; k++) {
for (int j = 0; j < 3; j++) {
if (numArray[j][i] == 0) {
numArray[j][i] = numArray[j + 1][i];
numArray[j + 1][i] = 0;
}
}

for (int j = 0; j < 3; j++) {
if (numArray[j][i] == numArray[j + 1][i]) {
numArray[j][i] = 2 * numArray[j][i];
numArray[j + 1][i] = 0;
}
}
}
}
generate(numArray);
}

static void leftBlock(int[][] numArray) {
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 3; k++) {
for (int j = 0; j < 3; j++) {
if (numArray[i][j] == 0) {
numArray[i][j] = numArray[i][j + 1];
numArray[i][j + 1] = 0;
}
}

for (int j = 0; j < 3; j++) {
if (numArray[i][j] == numArray[i][j + 1]) {
numArray[i][j] = 2 * numArray[i][j];
numArray[i][j + 1] = 0;
}
}
}
}
generate(numArray);
}

static void rightBlock(int[][] numArray) {
for (int i = 0; i < 4; i++) {
for (int k = 0; k < 3; k++) {
for (int j = 3; j > 0; j--) {
if (numArray[i][j] == 0) {
numArray[i][j] = numArray[i][j - 1];
numArray[i][j - 1] = 0;
}
}

for (int j = 3; j > 0; j--) {
if (numArray[i][j] == numArray[i][j - 1]) {
numArray[i][j] = 2 * numArray[i][j];
numArray[i][j - 1] = 0;
}
}
}
}
generate(numArray);
}

static void process(int[][] board, char direction) {
switch (direction) {
case 'w':
upBlock(board);
break;
case 'a':
leftBlock(board);
break;
case 's':
downBlock(board);
break;
case 'd':
rightBlock(board);
break;
}
}

public static void main(String[] args) {
System.out.println("游戏开始:请按照操作提示游戏:");
System.out.println("up:w/W");
System.out.println("left:a/A");
System.out.println("down:s/S");
System.out.println("right:d/D");
int[][] board = init();
while (true) {
showBoard(board);
char direction = acceptInput();
process(board, direction);
}
}
}