基本信息
源码名称:2048小游戏源码(java)
源码大小:0.03M
文件格式:.rar
开发语言:Java
更新时间:2019-07-02
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
package frame;
import java.awt.BorderLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.Box;
import javax.swing.JLabel;
import java.awt.GridLayout;
import javax.swing.SwingConstants;
import java.awt.Font;
import javax.swing.JButton;
import suanfa.Move;
import suanfa.Tools;
import suanfa.TurnJLabelToString;
import java.awt.Color;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class MainFrame extends JFrame
{
/**
*
*/
private static final long serialVersionUID = -1437480348206159174L;
private JPanel contentPane;
private JLabel[] DataLabel = new JLabel[16];
private TurnJLabelToString turn;
private String SCORE;
private JLabel SCORELabel_DATA;
private String HIGH_SCORE;
private JLabel HIGH_SCORELabel_DATA;
private Properties props;
/**
* Launch the application.
*/
// public static void main(String[] args)
// {
// //windows外观
// try
// {
// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
//
// }
// catch (Exception e)
// {
// e.printStackTrace();
// }
// EventQueue.invokeLater(new Runnable()
// {
// public void run()
// {
// try
// {
// MainFrame frame = new MainFrame();
// frame.setVisible(true);
// }
// catch (Exception e)
// {
// e.printStackTrace();
// }
// }
// });
// }
public MainFrame()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(600, 300, 150, 400);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
setResizable(false);//锁钉尺寸
JPanel panel = new JPanel();
panel.setBackground(Color.WHITE);
contentPane.add(panel, BorderLayout.CENTER);
panel.setLayout(new GridLayout(4, 4, 0, 0));
//设置16×16的数据表格
for (int i = 0; i < 16; i )
{
DataLabel[i] = new JLabel("", JLabel.CENTER);// 将显示的字符设置为居中
DataLabel[i].setFont(new Font("宋体", Font.BOLD, 12));
DataLabel[i].setForeground(Color.black);//设置字体颜色
DataLabel[i].setBorder(BorderFactory.createLineBorder(Color.BLACK));//设边框体颜色
DataLabel[i].setOpaque(true);
DataLabel[i].setBackground(Color.WHITE);//将背景设置成白色
panel.add(DataLabel[i]);
DataLabel[i].setText("0");
}
Box verticalBox = Box.createVerticalBox();
contentPane.add(verticalBox, BorderLayout.NORTH);
JPanel panel_1 = new JPanel();
verticalBox.add(panel_1);
panel_1.setLayout(new GridLayout(1, 0, 0, 0));
JPanel panel_6 = new JPanel();
panel_1.add(panel_6);
JLabel label_2 = new JLabel("2048");
label_2.setHorizontalAlignment(SwingConstants.CENTER);
label_2.setForeground(new Color(178, 34, 34));
panel_6.add(label_2);
label_2.setFont(new Font("Times New Roman", Font.BOLD, 34));
JPanel panel_3 = new JPanel();
panel_1.add(panel_3);
panel_3.setLayout(new GridLayout(4, 0, 0, 0));
JLabel SCORELabel = new JLabel("SCORE:");
SCORELabel.setFont(new Font("Times New Roman", Font.BOLD, 11));
panel_3.add(SCORELabel);
SCORELabel_DATA = new JLabel("0");
SCORELabel_DATA.setForeground(Color.RED);
SCORELabel_DATA.setFont(new Font("Times New Roman", Font.BOLD, 15));
panel_3.add(SCORELabel_DATA);
JLabel HIGH_SCORELabel = new JLabel("HIGH SCORE:");
HIGH_SCORELabel.setFont(new Font("Times New Roman", Font.BOLD, 11));
panel_3.add(HIGH_SCORELabel);
HIGH_SCORELabel_DATA = new JLabel("0");
HIGH_SCORELabel_DATA.setForeground(Color.red);
HIGH_SCORELabel_DATA.setFont(new Font("Times New Roman", Font.BOLD, 15));
panel_3.add(HIGH_SCORELabel_DATA);
JPanel panel_2 = new JPanel();
verticalBox.add(panel_2);
panel_2.setLayout(new BorderLayout(0, 0));
JLabel label_3 = new JLabel("2 2=4 4=8...");
label_3.setFont(new Font("宋体", Font.BOLD, 15));
panel_2.add(label_3);
JPanel panel_7 = new JPanel();
contentPane.add(panel_7, BorderLayout.SOUTH);
panel_7.setLayout(new BorderLayout(0, 0));
JPanel panel_10 = new JPanel();
panel_7.add(panel_10);
panel_10.setLayout(new GridLayout(0, 1, 0, 0));
JPanel panel_11 = new JPanel();
panel_10.add(panel_11);
panel_11.setLayout(new GridLayout(0, 3, 0, 0));
JPanel panel_14 = new JPanel();
panel_11.add(panel_14);
JPanel panel_15 = new JPanel();
panel_11.add(panel_15);
JPanel panel_16 = new JPanel();
panel_11.add(panel_16);
JPanel panel_12 = new JPanel();
panel_10.add(panel_12);
panel_12.setLayout(new GridLayout(0, 3, 0, 0));
JPanel panel_17 = new JPanel();
panel_12.add(panel_17);
JButton btnU = new JButton("\u2191");
btnU.setMnemonic(KeyEvent.VK_UP);
JButton btnL = new JButton("\u2190");
btnL.setMnemonic(KeyEvent.VK_LEFT);
JLabel lblRst = new JLabel("Re");
JButton btnR = new JButton("\u2192");
btnR.setMnemonic(KeyEvent.VK_RIGHT);
JButton btnD = new JButton("\u2193");
btnD.setMnemonic(KeyEvent.VK_DOWN);
panel_15.add(btnU);
panel_17.add(btnL);
JPanel panel_18 = new JPanel();
panel_12.add(panel_18);
panel_18.add(lblRst);
JPanel panel_19 = new JPanel();
panel_12.add(panel_19);
panel_19.add(btnR);
JPanel panel_13 = new JPanel();
panel_10.add(panel_13);
panel_13.setLayout(new GridLayout(0, 3, 0, 0));
JPanel panel_20 = new JPanel();
panel_13.add(panel_20);
JPanel panel_21 = new JPanel();
panel_13.add(panel_21);
panel_21.add(btnD);
JPanel panel_22 = new JPanel();
panel_13.add(panel_22);
/*
* 启动后读取配置参数,分数、最高分、data数据
* 显示在界面中
*/
props = new Properties();
try
{
props.load(new FileInputStream("DATA.ini"));
}
catch (FileNotFoundException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
SCORE = props.getProperty("SCORE");//分数
HIGH_SCORE = props.getProperty("HIGH_SCORE");//历史最高
String DATA = props.getProperty("DATA");//数据
SCORELabel_DATA.setText(SCORE);//把分数显示在分数栏上
HIGH_SCORELabel_DATA.setText(HIGH_SCORE);//把历史最高显示在历史最高栏上
String[] chrstr = DATA.split("_"); //把数据转化为String数组
if(Tools.All0OrNot(chrstr))//如果全0,随机在2处填2
{
int a=(int)(Math.random()*chrstr.length);
chrstr[a]="2";
int b=(int)(Math.random()*chrstr.length);
chrstr[b]="2";
ChangeJLabel.ChangeJLabelColor(chrstr,DataLabel );
}
else
{
ChangeJLabel.ChangeJLabelColor(chrstr,DataLabel ); //把数据改变对应颜色后显示在数据区内
}
Move.scorecut();
Move.setscore(SCORE);
//上按键监听
btnU.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
turn=new TurnJLabelToString (DataLabel);
String[] s=turn.DataUP();
if(turn.stringArrayCompare())
{
ChangeJLabel.ChangeJLabelColor(s,DataLabel );
int point2=turn.getRandomFromArray(s);
DataLabel[point2].setText(Tools.Select1());
if(DataLabel[point2].getText().equals("2"))
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(Color.WHITE);
}
else
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(new Color(255,165,0));
}
SCORELabel_DATA.setText(Move.getscore());
if(Integer.valueOf(Move.getscore())>Integer.valueOf(HIGH_SCORE))
{
HIGH_SCORELabel_DATA.setText(Move.getscore());
}
try
{
OutputStream fos = new FileOutputStream("DATA.ini");
props.setProperty("SCORE", Move.getscore());
props.setProperty("HIGH_SCORE", HIGH_SCORELabel_DATA.getText());
String indata=new String();
String[] indata2=new String[16];
for(int i=0;i<DataLabel.length;i )
{
indata2[i]=DataLabel[i].getText();
}
for(int i=0;i<indata2.length;i )
{
indata=indata indata2[i] "_";
}
props.setProperty("DATA", indata);
props.store(fos, "Update '" "SCORE" "' value");
}
catch (FileNotFoundException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
});
//下按键监听
btnD.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
turn=new TurnJLabelToString (DataLabel);
String[] s=turn.DataDOWN();
if(turn.stringArrayCompare())
{
ChangeJLabel.ChangeJLabelColor(s,DataLabel );
int point2=turn.getRandomFromArray(s);
DataLabel[point2].setText(Tools.Select1());
if(DataLabel[point2].getText().equals("2"))
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(Color.WHITE);
}
else
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(new Color(255,165,0));
}
SCORELabel_DATA.setText(Move.getscore());
if(Integer.valueOf(Move.getscore())>Integer.valueOf(HIGH_SCORE))
{
HIGH_SCORELabel_DATA.setText(Move.getscore());
}
try
{
OutputStream fos = new FileOutputStream("DATA.ini");
props.setProperty("SCORE", Move.getscore());
props.setProperty("HIGH_SCORE", HIGH_SCORELabel_DATA.getText());
String indata=new String();
String[] indata2=new String[16];
for(int i=0;i<DataLabel.length;i )
{
indata2[i]=DataLabel[i].getText();
}
for(int i=0;i<indata2.length;i )
{
indata=indata indata2[i] "_";
}
props.setProperty("DATA", indata);
props.store(fos, "Update '" "SCORE" "' value");
}
catch (FileNotFoundException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
});
//左按键监听
btnL.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
turn=new TurnJLabelToString (DataLabel);
String[] s=turn.DataLEFT();
if(turn.stringArrayCompare())
{
ChangeJLabel.ChangeJLabelColor(s,DataLabel );
int point2=turn.getRandomFromArray(s);
DataLabel[point2].setText(Tools.Select1());
if(DataLabel[point2].getText().equals("2"))
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(Color.WHITE);
}
else
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(new Color(255,165,0));
}
SCORELabel_DATA.setText(Move.getscore());
if(Integer.valueOf(Move.getscore())>Integer.valueOf(HIGH_SCORE))
{
HIGH_SCORELabel_DATA.setText(Move.getscore());
}
try
{
OutputStream fos = new FileOutputStream("DATA.ini");
props.setProperty("SCORE", Move.getscore());
props.setProperty("HIGH_SCORE", HIGH_SCORELabel_DATA.getText());
String indata=new String();
String[] indata2=new String[16];
for(int i=0;i<DataLabel.length;i )
{
indata2[i]=DataLabel[i].getText();
}
for(int i=0;i<indata2.length;i )
{
indata=indata indata2[i] "_";
}
props.setProperty("DATA", indata);
props.store(fos, "Update '" "SCORE" "' value");
}
catch (FileNotFoundException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
});
//右按键监听
btnR.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{
turn=new TurnJLabelToString (DataLabel);
String[] s=turn.DataRIGHT();
if(turn.stringArrayCompare())
{
ChangeJLabel.ChangeJLabelColor(s,DataLabel );
int point2=turn.getRandomFromArray(s);
DataLabel[point2].setText(Tools.Select1());
if(DataLabel[point2].getText().equals("2"))
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(Color.WHITE);
}
else
{
DataLabel[point2].setForeground(Color.black);
DataLabel[point2].setBackground(new Color(255,165,0));
}
SCORELabel_DATA.setText(Move.getscore());
if(Integer.valueOf(Move.getscore())>Integer.valueOf(HIGH_SCORE))
{
HIGH_SCORELabel_DATA.setText(Move.getscore());
}
try
{
OutputStream fos = new FileOutputStream("DATA.ini");
props.setProperty("SCORE", Move.getscore());
props.setProperty("HIGH_SCORE", HIGH_SCORELabel_DATA.getText());
String indata=new String();
String[] indata2=new String[16];
for(int i=0;i<DataLabel.length;i )
{
indata2[i]=DataLabel[i].getText();
}
for(int i=0;i<indata2.length;i )
{
indata=indata indata2[i] "_";
}
props.setProperty("DATA", indata);
props.store(fos, "Update '" "SCORE" "' value");
}
catch (FileNotFoundException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
});
//双击Re后恢复初始状态
lblRst.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e)
{
int clickTimes = e.getClickCount();
if (clickTimes == 2)
{
int res=JOptionPane.showConfirmDialog(null, "确定要重置吗?", "重置", JOptionPane.YES_NO_OPTION);
if(res==JOptionPane.YES_OPTION)
{
//点击“是”后执行这个代码块
SCORE ="0";//分数
SCORELabel_DATA.setText(SCORE);//把分数显示在分数栏上
String[] chrstr=new String[16];
for(int i=0;i<chrstr.length;i )
{
chrstr[i]="0";
}
ChangeJLabel.ChangeJLabelColor(chrstr,DataLabel );
if(Tools.All0OrNot(chrstr))//如果全0,随机在2处填2
{
int a=(int)(Math.random()*chrstr.length);
chrstr[a]="2";
int b=(int)(Math.random()*chrstr.length);
chrstr[b]="2";
ChangeJLabel.ChangeJLabelColor(chrstr,DataLabel );
}
else
{
ChangeJLabel.ChangeJLabelColor(chrstr,DataLabel ); //把数据改变对应颜色后显示在数据区内
}
Move.scorecut();
Move.setscore(SCORE);
}
else
{
//点击“否”后执行这个代码块
return;
}
}
}
});
}
//得到DataLabel数组
public JLabel[] getJLabel()
{
return DataLabel;
}
public void setJLabel()
{
}
}