1、项目介绍
本游戏采用Java语言编写,使用Eclipse编译器,jdk1.8编译环境。游戏的UI主要运用Java图形界面编程(AWT),实现窗口化可视化的界面。
游戏的后台通过监听键盘方向键来移动数字方块,运用随机数的思想随机产生一个2或4的随机数,显示在随机方块中,运用二维数组存储、遍历查找等思想,在每次移动前循环查找二维数组相邻的移动方向的行或列可以合并与否,如果没有可以合并的数字方块同时又没有空余的空间产生新的数字则游戏宣告结束,同时,当检测到合并的结果中出现2048,也宣告游戏结束。
游戏设计了非常简单的交互逻辑,流程如下:

为了增加游戏的用户体验,后期加入了操作音效(音效文件提取自百度移动应用商店——2048),在移动和合并方块时播放不同声音。
2、技术框架
运行系统:windows
编程语言:java
系统架构:gui界面
系统框架:Swing+AWT
数据库:无
Maven项目:否
运行环境:JDK8+idea
3、演示视频
基于Java的2048小游戏的设计与实现文章来源:https://www.toymoban.com/news/detail-771933.html
4、项目截图



5、文档截图



6、代码示例文章来源地址https://www.toymoban.com/news/detail-771933.html
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Game extends JFrame {
/**
* KevinWu
*/
private static final long serialVersionUID = 1L;
public static void main(String[] args) {
Game UI = new Game();
UI.IntUI();
}
// 用于存放数据的数组
private int Numbers[][] = new int[4][4];
private void IntUI() {
this.setTitle("2048小游戏");
this.setLocation(450, 100);
this.setSize(400, 500);
this.setLayout(null);
// 开始游戏按钮
ImageIcon imgicon = new ImageIcon("res/start.png");
JButton bt = new JButton(imgicon);
bt.setFocusable(false);
bt.setBorderPainted(false);
bt.setFocusPainted(false);
bt.setContentAreaFilled(false);
bt.setBounds(5, 10, 120, 30);// 设置按钮的x,y坐标位置和宽度与高度
this.add(bt);
//后退一步按钮
ImageIcon backicon = new ImageIcon("res/backicon.png");
JButton back = new JButton(backicon);
back.setFocusable(false);
back.setBorderPainted(false);
back.setFocusPainted(false);
back.setContentAreaFilled(false);
back.setBounds(270, 10, 120, 30);// 设置按钮的x,y坐标位置和宽度与高度
this.add(back);
// 关于按钮
ImageIcon imgicon2 = new ImageIcon("res/about.png");
JButton about = new JButton(imgicon2);
about.setFocusable(false);
about.setBorderPainted(false);
about.setFocusPainted(false);
about.setContentAreaFilled(false);
about.setBounds(160, 10, 70, 30);
this.add(about);
// 分数显示
JLabel lb = new JLabel("分数:0");
lb.setBounds(40, 45, 120, 30);
lb.setFont(new Font("幼圆", Font.CENTER_BASELINE, 18));
lb.setForeground(new Color(0x000000));
this.add(lb);
JCheckBox isSoundBox=new JCheckBox("静音");
isSoundBox.setBounds(290, 45, 120, 30);
isSoundBox.setFont(new Font("幼圆", Font.CENTER_BASELINE, 18));
isSoundBox.setFocusable(false);
isSoundBox.setBorderPainted(false);
isSoundBox.setFocusPainted(false);
isSoundBox.setContentAreaFilled(false);
this.add(isSoundBox);
this.setDefaultCloseOperation(3);
this.setResizable(false);
this.setVisible(true);// 显示界面
// 创建事件处理类
MyListener cl = new MyListener(this, Numbers, lb, bt, about,back,isSoundBox);
bt.addActionListener(cl);
about.addActionListener(cl);
back.addActionListener(cl);
isSoundBox.addActionListener(cl);
this.addKeyListener(cl);
}
// 重写窗体
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(new Color(0xBBADA0));
g.fillRoundRect(15, 110, 370, 370, 15, 15);// 大矩形框
g.setColor(new Color(0xCDC1B4));
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
g.fillRoundRect(25 + i * 90, 120 + j * 90, 80, 80, 15, 15);// 小矩形框
}
}
// 调整数字的位置并上色
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (Numbers[j][i] != 0) {
int FontSize = 30;
int MoveX = 0, MoveY = 0;
switch (Numbers[j][i]) {
case 2:
g.setColor(new Color(0xeee4da));
FontSize = 30;
MoveX = 0;
MoveY = 0;
break;
case 4:
g.setColor(new Color(0xede0c8));
FontSize = 30;
MoveX = 0;
MoveY = 0;
break;
case 8:
g.setColor(new Color(0xf2b179));
FontSize = 30;
MoveX = 0;
MoveY = 0;
break;
case 16:
g.setColor(new Color(0xf59563));
FontSize = 29;
MoveX = -5;
MoveY = 0;
break;
case 32:
g.setColor(new Color(0xf67c5f));
FontSize = 29;
MoveX = -5;
MoveY = 0;
break;
case 64:
g.setColor(new Color(0xf65e3b));
FontSize = 29;
MoveX = -5;
MoveY = 0;
break;
case 128:
g.setColor(new Color(0xedcf72));
FontSize = 28;
MoveX = -10;
MoveY = 0;
break;
case 256:
g.setColor(new Color(0xedcc61));
FontSize = 28;
MoveX = -10;
MoveY = 0;
break;
case 512:
g.setColor(new Color(0xedc850));
FontSize = 28;
MoveX = -10;
MoveY = 0;
break;
case 1024:
g.setColor(new Color(0xedc53f));
FontSize = 27;
MoveX = -15;
MoveY = 0;
break;
case 2048:
g.setColor(new Color(0xedc22e));
FontSize = 27;
MoveX = -15;
MoveY = 0;
break;
default:
g.setColor(new Color(0x000000));
break;
}
g.fillRoundRect(25 + i * 90, 120 + j * 90, 80, 80, 15, 15);// 小矩形框上色
g.setColor(new Color(0x000000));
g.setFont(new Font("Kristen ITC", Font.PLAIN, FontSize));
g.drawString(Numbers[j][i] + "", 25 + i * 90 + 30 + MoveX,
120 + j * 90 + 50 + MoveY);
}
}
}
}
}
到了这里,关于基于Java的2048小游戏的设计与实现,附源码+文档,适合课程设计,包远程安装调试运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!