用java做了个控制台版的2048
来源:互联网 发布:ant 打包java指定目录 编辑:程序博客网 时间:2024/05/20 19:19
玩几局2048,理解下程序执行过程,代码挺简单
但是创造2048这个游戏的人很牛。import java.util.Random;import java.util.Scanner;public class game2048 {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) {System.out.print("Input>");String line = scanner.nextLine();char direction = line.charAt(0);if ("WASD".indexOf(direction) != -1)return direction;}}/*static char getInput() {System.out.print("Input>");Scanner scanner = new Scanner(System.in);String input = scanner.nextLine();return input.charAt(0);}*/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) {int[][] board = init();while (true) {showBoard(board);char direction = acceptInput();process(board, direction);}}}
0 0
- 用java做了个控制台版的2048
- 用Java控制台应用程序做的万年历
- 用Java做了个简单的取色软件
- 用Python做的第一个小样例——控制台2048
- 来一个水果超市的案例,控制台版的,以后做个界面出来!
- 用JS做了个ListBox的简单功能
- 用TCP做了个发送文本的练习
- 用h5的白鹭引擎做了个小游戏
- 写了个计算数字的控制台程序
- 控制台版java 2048
- 昨天晚上做了个离奇的梦。。。。
- 做了个google sitemap的生成器
- 做了个打印图形的题目
- 做了个游戏导航的页面~
- 最近做了个网站 二级域名的
- 自已做了个浏览器的benchmark
- 他们做了个艰难的决定
- 做了个"开源"的梦
- win8.1 实现安装net frament3.5成功
- C2启动模式
- 面试题30——最小的k个数
- Spiral Matrix II
- 移动H5前端性能优化指南
- 用java做了个控制台版的2048
- 怎么学习一个开源框架
- UE4学习笔记9th
- hdu 5325 Crazy Bobo 拓扑排序
- HDU-5319 Painter
- Python用Bottle轻量级框架进行Web开发
- C# 导入EXCEL 报错外部表不是预期的格式错误
- Oracle 表id实现自增
- Xcode7 不能使用http网络请求