2048——Java控制台版本
生活随笔
收集整理的這篇文章主要介紹了
2048——Java控制台版本
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前情提要,祝2021年的藍橋杯小伙伴成績突出。
貪心、雜湊、遞歸、分類、評分、哈希、共識、聚類、分治、啟發式、粒子群、最大期望、最小完成時間、序列最小優化。。。。算法無數,但是基礎類似,無非坐標處理。那么開啟一個坐標小游戲2048吧~
一個簡單的2048小游戲的操作提示——Java控制臺版本:
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);}} }玩法示例:輸入大小寫均可。
總結
以上是生活随笔為你收集整理的2048——Java控制台版本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 16进制
- 下一篇: Java最大公共子串(动态规划)