java实现2048

本文介绍如何使用Java编程实现经典游戏2048。通过调整row和col参数改变棋盘大小,按'a'键电脑会根据上左下右规则自动玩至游戏结束。目前在棋盘尺寸较大时存在效率问题。游戏的移动操作遵循先合并再移动的策略,代码简洁易懂,可以直接在main函数中运行。
摘要由CSDN通过智能技术生成

修改row和col可以改变大小,如果棋盘太小可以更改frame的长和宽

按 a 可以让电脑按上左下右的规则一直运行到游戏结束 // 暂时不知道怎么变成动态的,并且row和col大于6时就会运行很久

上下左右都是通过 先合并,再移动 的方式实现的 // 可能比较复杂

这是类的代码,要运行直接再main函数里面实例化对象就行了

package com.game.frame;

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class GameFrame implements KeyListener {
	private static final int row = 4;
	private static final int col = 4;
	private static final int totalNum = 12;
	
	int aiCount = 0;
	
	long Score = 0;
	
	Font fontSongti = new Font("宋体", Font.BOLD, 24); // 加粗

	Color backgroundColor = new Color(188, 177, 159);
	Color numberColor[] = new Color[totalNum];

	long[] gameBoard = new long[row * col];
	JFrame frame = new JFrame("2048");
	JLabel[] jl = new JLabel[row * col];
	JPanel jp = new JPanel();
	boolean moved = false;

	public GameFrame() {
		// 初始化棋盘
		initGameBoard();
		
		// 初始化各种颜色
		setColor();
		
		// 设置窗体属性
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭就结束程序
		jp.setLayout(new GridLayout(row, col, 10, 10));
		jp.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
		jp.setBackground(backgroundColor);
		
		frame.setVisible(true);
		frame.setSize(600, 600);
		frame.setResizable(false); // 无法最大化
		frame.setLocationRelativeTo(null); // 居中显示
		frame.setFocusable(true);
		
		// 添加组件
		frame.add(jp);
		loadBoard();
		frame.addKeyListener(this);
	}

	public void initGameBoard() {
		for (int i = 0; i < row * col; ++i) {
			gameBoard[i] = 0;
		}
		// 随机生成两个地方
		generateRandomNum();
		generateRandomNum();
	}

	public boolean check() {
		boolean dead = true;
		for(int i = 0; i < row; ++i) {
			for(int j = 0; j < col; ++j) {
				if(0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值