JAVA 2048源码_java实现2048游戏源代码

本文实例为大家分享了java实现2048游戏源代码,供大家参考,具体内容如下

一.主要功能:

1、游戏初始化:新建游戏4×4的16宫格画布,随机格子上生成2或者4两个数字

2、格子的移动:先判断能否移动,移动后判断能否合并,合并后改变格子颜色和数字

3、新格子的生成:移动一次,就在剩余的空格子中随机生成一个2或者4

4、判赢:16宫格中合并出了“2048”则为游戏胜利

5、判输:16宫格中没有剩余空格子且不能再向任何方向移动则为游戏失败

二.项目的主要结构:

e31296ef2e2d6ea17ad93871dcbf9401.png

在项目2018游戏中,有4个源文件,此外,还有3个.png和两个.wav格式的音乐文件。一个音乐是按键移动的声音,另外一个是碰撞后的消除的声音。然后游戏的最高分保存是在Recording源文件中,之后附上所需的图片文件和音乐文件:

来了来了.

1ff020d34c4662d571be2bbbc04ed113.png

dff76580301c4950d6fa0a09a2f9b8d6.png

279a441721d9756dbe10393391657d3d.png

三.代码

1、Game.java

package shixun;

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 {

private static final long serialVersionUID = 1L;

public static void main(String[] args) {

Game UI = new Game();

UI.IntUI();

}

// 用于存放数据的数组,构成游戏4*4界面的数值

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);

//最高分数

Recorder.getRecording();

int maxscore = Recorder.getMaxscore_2048();

JLabel M=new JLabel("最高分:0");

M.setBounds(150,45,120,30);

M.setFont(new Font("幼圆", Font.CENTER_BASELINE, 18));

M.setForeground(new Color(0x000000));

this.add(M);

//静音

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,M, 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));<

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值