用java做一个2048小游戏

博主分享了自己在忙碌学习中尝试用Java编写2048小游戏的经历。尽管Java Swing尚在学习阶段,但博主希望通过实践来深化理解。文章概述了初步的需求分析,包括组件位置设置、双面板的可视化及秒表制作等,反映出初学者边学边做的探索过程。
摘要由CSDN通过智能技术生成

昨天,自己突发奇想,能不能在忙碌的学习里抽一点时间来做一点事情,然后,我就有了一个要做一个2048小游戏的想法。说真的,java我已经认真学习了一段时间了,现在也刚刚学到Swing,虽然做这个2048还有很多东西没有学习过,但是,一边学一边做才是我们菜鸟的样子吧。

做这个东西,自己没有什么经验,我是这样想的:先做个需求出来吧,然后就有了第一部分的需求了;再按照需求,把开始部分想法做出来。

package My2048;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Text {
	public static void main(String[] args) {
		new Text();
	}

	/*
	 * 1.先做界面
	 * 2.做一个面板1,存放游戏里面移动的数字的地方(先用按钮代替)
	 * 3.再做一个面板2,里面是有开始,暂停,结束按钮,游戏分数,游戏时间
	 */
	public Text() {
		JFrame frame = new JFrame();
		// 标题
		frame.setTitle("我的2048
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是 Java 实现的 2048 小游戏代码: ```java import java.util.*; public class Game2048 { private final int size = 4; private int[][] grid; private Random rand; public Game2048() { grid = new int[size][size]; rand = new Random(); addRandomTile(); addRandomTile(); } private void addRandomTile() { List<int[]> emptyCells = new ArrayList<>(); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (grid[i][j] == 0) { emptyCells.add(new int[]{i, j}); } } } if (!emptyCells.isEmpty()) { int[] chosenCell = emptyCells.get(rand.nextInt(emptyCells.size())); grid[chosenCell[0]][chosenCell[1]] = (rand.nextDouble() < 0.9) ? 2 : 4; } } public void move(Direction direction) { boolean hasMoved = false; switch (direction) { case UP: for (int j = 0; j < size; j++) { int[] col = getColumn(j); int[] newCol = merge(col); setColumn(j, newCol); if (!hasMoved && !Arrays.equals(col, newCol)) { hasMoved = true; } } break; case DOWN: for (int j = 0; j < size; j++) { int[] col = getColumn(j); int[] newCol = merge(reverse(col)); setColumn(j, reverse(newCol)); if (!hasMoved && !Arrays.equals(col, newCol)) { hasMoved = true; } } break; case LEFT: for (int i = 0; i < size; i++) { int[] row = getRow(i); int[] newRow = merge(row); setRow(i, newRow); if (!hasMoved && !Arrays.equals(row, newRow)) { hasMoved = true; } } break; case RIGHT: for (int i = 0; i < size; i++) { int[] row = getRow(i); int[] newRow = merge(reverse(row)); setRow(i, reverse(newRow)); if (!hasMoved && !Arrays.equals(row, newRow)) { hasMoved = true; } } break; } if (hasMoved) { addRandomTile(); } } private int[] getColumn(int j) { int[] col = new int[size]; for (int i = 0; i < size; i++) { col[i] = grid[i][j]; } return col; } private void setColumn(int j, int[] col) { for (int i = 0; i < size; i++) { grid[i][j] = col[i]; } } private int[] getRow(int i) { return grid[i]; } private void setRow(int i, int[] row) { grid[i] = row; } private int[] merge(int[] cells) { int[] newCells = new int[size]; int writePos = 0; for (int i = 0; i < size; i++) { if (cells[i] != 0) { if (writePos > 0 && newCells[writePos - 1] == cells[i]) { newCells[writePos - 1] *= 2; } else { newCells[writePos++] = cells[i]; } } } return newCells; } private int[] reverse(int[] cells) { int[] newCells = new int[size]; for (int i = 0; i < size; i++) { newCells[i] = cells[size - i - 1]; } return newCells; } public boolean isGameOver() { if (getEmptyCells().size() > 0) { return false; } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { int cellValue = grid[i][j]; if (i > 0 && grid[i - 1][j] == cellValue) { return false; } if (i < size - 1 && grid[i + 1][j] == cellValue) { return false; } if (j > 0 && grid[i][j - 1] == cellValue) { return false; } if (j < size - 1 && grid[i][j + 1] == cellValue) { return false; } } } return true; } private List<int[]> getEmptyCells() { List<int[]> emptyCells = new ArrayList<>(); for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { if (grid[i][j] == 0) { emptyCells.add(new int[]{i, j}); } } } return emptyCells; } public void print() { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { System.out.print(grid[i][j] + "\t"); } System.out.println(); } } public static void main(String[] args) { Game2048 game = new Game2048(); Scanner scanner = new Scanner(System.in); while (!game.isGameOver()) { game.print(); System.out.print("Enter direction (up/down/left/right): "); String input = scanner.nextLine(); switch (input) { case "up": game.move(Direction.UP); break; case "down": game.move(Direction.DOWN); break; case "left": game.move(Direction.LEFT); break; case "right": game.move(Direction.RIGHT); break; default: System.out.println("Invalid input"); break; } } System.out.println("Game over!"); game.print(); } private enum Direction { UP, DOWN, LEFT, RIGHT } } ``` 以上代码实现了 2048 小游戏的核心逻辑,包括添加随机方块、合并方块、移动方块、判断是否结束等功能,并提供了一个简单的命令行界面供玩家操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值