2048——Java控制台版本

举报
红目香薰 发表于 2022/01/21 22:22:53 2022/01/21
【摘要】 前情提要,祝2021年的蓝桥杯小伙伴成绩突出。 贪心、杂凑、递归、分类、评分、哈希、共识、聚类、分治、启发式、粒子群、最大期望、最小完成时间、序列最小优化。。。。算法无数,但是基础类似,无非坐标处理。那么开启一个坐标小游戏2048吧~ 一个简单的2048小游戏的操作提示——Java控制台版本: import java.uti...

前情提要,祝2021年的蓝桥杯小伙伴成绩突出。

贪心、杂凑、递归、分类、评分、哈希、共识、聚类、分治、启发式、粒子群、最大期望、最小完成时间、序列最小优化。。。。算法无数,但是基础类似,无非坐标处理。那么开启一个坐标小游戏2048吧~


一个简单的2048小游戏的操作提示——Java控制台版本:


  
  1. import java.util.Random;
  2. import java.util.Scanner;
  3. /**
  4. *
  5. * @author 老师付 2021年5月29日15:05:21
  6. */
  7. public class Action {
  8. static Random random = new Random();
  9. static Scanner scanner = new Scanner(System.in);
  10. private static boolean isNotFull(int[][] board) {
  11. for (int[] ia : board)
  12. for (int i : ia)
  13. if (i == 0)
  14. return true;
  15. return false;
  16. }
  17. private static void generate(int[][] board) {
  18. assert isNotFull(board);
  19. while (true) {
  20. int number = random.nextInt(16);
  21. int row = number / 4;
  22. int col = number % 4;
  23. if (board[row][col] == 0) {
  24. board[row][col] = System.currentTimeMillis() % 2 == 0 ? 2 : 4;
  25. break;
  26. }
  27. }
  28. }
  29. static int[][] init() {
  30. int[][] numArray = new int[4][4];
  31. generate(numArray);
  32. generate(numArray);
  33. return numArray;
  34. }
  35. static void showBoard(int[][] board) {
  36. for (int[] numArray : board) {
  37. for (int i : numArray) {
  38. if (i == 0) {
  39. System.out.printf("%4s", ".");
  40. } else {
  41. System.out.printf("%4s", i);
  42. }
  43. }
  44. System.out.println();
  45. }
  46. }
  47. static char acceptInput() {
  48. while (true) {
  49. String line = scanner.nextLine().toLowerCase();
  50. char direction = line.charAt(0);
  51. if ("wasdWASD".indexOf(direction) != -1) {
  52. return direction;
  53. }else {
  54. System.out.println("请按要求输入操作指令:");
  55. System.out.println("up:w/W");
  56. System.out.println("left:a/A");
  57. System.out.println("down:s/S");
  58. System.out.println("right:d/D");
  59. }
  60. }
  61. }
  62. static void downBlock(int[][] numArray) {
  63. for (int i = 0; i < 4; i++) {
  64. for (int k = 0; k < 3; k++) {
  65. for (int j = 3; j > 0; j--) {
  66. if (numArray[j][i] == 0) {
  67. numArray[j][i] = numArray[j - 1][i];
  68. numArray[j - 1][i] = 0;
  69. }
  70. }
  71. for (int j = 3; j > 0; j--) {
  72. if (numArray[j][i] == numArray[j - 1][i]) {
  73. numArray[j][i] = 2 * numArray[j][i];
  74. numArray[j - 1][i] = 0;
  75. }
  76. }
  77. }
  78. }
  79. generate(numArray);
  80. }
  81. static void upBlock(int[][] numArray) {
  82. for (int i = 0; i < 4; i++) {
  83. for (int k = 0; k < 3; k++) {
  84. for (int j = 0; j < 3; j++) {
  85. if (numArray[j][i] == 0) {
  86. numArray[j][i] = numArray[j + 1][i];
  87. numArray[j + 1][i] = 0;
  88. }
  89. }
  90. for (int j = 0; j < 3; j++) {
  91. if (numArray[j][i] == numArray[j + 1][i]) {
  92. numArray[j][i] = 2 * numArray[j][i];
  93. numArray[j + 1][i] = 0;
  94. }
  95. }
  96. }
  97. }
  98. generate(numArray);
  99. }
  100. static void leftBlock(int[][] numArray) {
  101. for (int i = 0; i < 4; i++) {
  102. for (int k = 0; k < 3; k++) {
  103. for (int j = 0; j < 3; j++) {
  104. if (numArray[i][j] == 0) {
  105. numArray[i][j] = numArray[i][j + 1];
  106. numArray[i][j + 1] = 0;
  107. }
  108. }
  109. for (int j = 0; j < 3; j++) {
  110. if (numArray[i][j] == numArray[i][j + 1]) {
  111. numArray[i][j] = 2 * numArray[i][j];
  112. numArray[i][j + 1] = 0;
  113. }
  114. }
  115. }
  116. }
  117. generate(numArray);
  118. }
  119. static void rightBlock(int[][] numArray) {
  120. for (int i = 0; i < 4; i++) {
  121. for (int k = 0; k < 3; k++) {
  122. for (int j = 3; j > 0; j--) {
  123. if (numArray[i][j] == 0) {
  124. numArray[i][j] = numArray[i][j - 1];
  125. numArray[i][j - 1] = 0;
  126. }
  127. }
  128. for (int j = 3; j > 0; j--) {
  129. if (numArray[i][j] == numArray[i][j - 1]) {
  130. numArray[i][j] = 2 * numArray[i][j];
  131. numArray[i][j - 1] = 0;
  132. }
  133. }
  134. }
  135. }
  136. generate(numArray);
  137. }
  138. static void process(int[][] board, char direction) {
  139. switch (direction) {
  140. case 'w':
  141. upBlock(board);
  142. break;
  143. case 'a':
  144. leftBlock(board);
  145. break;
  146. case 's':
  147. downBlock(board);
  148. break;
  149. case 'd':
  150. rightBlock(board);
  151. break;
  152. }
  153. }
  154. public static void main(String[] args) {
  155. System.out.println("游戏开始:请按照操作提示游戏:");
  156. System.out.println("up:w/W");
  157. System.out.println("left:a/A");
  158. System.out.println("down:s/S");
  159. System.out.println("right:d/D");
  160. int[][] board = init();
  161. while (true) {
  162. showBoard(board);
  163. char direction = acceptInput();
  164. process(board, direction);
  165. }
  166. }
  167. }

玩法示例:输入大小写均可。

文章来源: laoshifu.blog.csdn.net,作者:红目香薰,版权归原作者所有,如需转载,请联系作者。

原文链接:laoshifu.blog.csdn.net/article/details/117385909

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。