想用java写安卓小游戏排行榜2048的排行榜

2048游戏的Java实现
写的比较匆忙,功能较为单一,界面丑,操作步数应该还能优化。
最终还是要写AI,但好像没那么简单,写了几个关于& 26684;局评价的函数,还得继续学习。。。
上下左右方向键操作。
import java aw
写的比较匆忙,功能较为单一,界面丑,操作步数应该还能优化。
最终还是要写AI,但好像没那么简单,写了几个关于格局评价的函数,还得继续学习。。。
上下左右方向键操作。
import java.awt.BorderL
import java.awt.C
import java.awt.F
import java.awt.GridL
import java.awt.event.*;
import java.util.R
import javax.swing.JF
import javax.swing.JL
import javax.swing.JOptionP
import javax.swing.JP
import javax.swing.JTextF
import javax.swing.border.TitledB
public class My2048 extends JFrame {
JPanel numpanel = new JPanel();
JPanel scorepanel = new JPanel();
JLabel numlabellist[][] = new JLabel[4][4];// 数字格子
int numlist[][] = new int[4][4];// 数组格子对应数值
int blanks = 16;// 空白格子数
int score=0;//总得分
JLabel scorelabel=new JLabel();
int numlist2[][] = new int[4][4];//用于格局评价时的数组
int smoothweight=1;
int monoweight=10;
int emptyweight=27;
int maxweight=10;
public static void main(String[] args) {
new My2048().launchFrame();
public void AddNumArea() {
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++) {
numlabellist[i][j] = new JLabel();
numlist[i][j] = 0;
numlabellist[i][j].setBackground(Color.LIGHT_GRAY);
numlabellist[i][j].setBorder(new TitledBorder(""));
numlabellist[i][j].setFont(new Font("Romantic", Font.BOLD, 35));
numlabellist[i][j].setHorizontalAlignment(JTextField.CENTER);
numpanel.add(numlabellist[i][j]);
public void AddScoreLabel(){
scorelabel.setBackground(Color.MAGENTA);
scorelabel.setFont(new Font("Romantic", Font.BOLD, 35));
scorelabel.setHorizontalAlignment(JTextField.CENTER);
scorelabel.setText("score:"+Integer.toString(score));
scorepanel.add(scorelabel);
// 随机选一个空白格子
public int RandomIndex(int blanks) {
Random random = new Random(System.currentTimeMillis());
int result = random.nextInt(blanks)+1;
// 2,4随机选一个
public int RandomValue() {
Random random = new Random();
int result = random.nextInt(2);
return (result+1)*2;
//空白处产生一新值,自带refresh功能
public void NewValue() {
int newvalue = RandomValue();// 新值
int index = RandomIndex(blanks);// 新值得位置
blanks--;// 空白格子数-1
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++) {
if (numlist[i][j] == 0)
if (index == 0) {
numlist[i][j] =
// 相应label上显示新值
numlabellist[i][j].setText(Integer.toString(newvalue));
public boolean LeftReduce() {
boolean changed=//是否有改变(移动和相加),作为后续是否产生新值得依据
boolean has0
for (int i = 0; i < 4; i++)
has0before=
for (int j = 0; j 0&&has0before)//移动方向上之前有空格,可移动,changed为true
if(numlist[i][j]==0)
has0before=
if (numlist[i][j] > 0)
if(numlist[i][j]==value)//相加放p位置
int sum=value*2;
numlist[i][j]=0;
numlist[i][p]=
changed=//相加,changed为true
if(value>0)//value放p中,当前值放value中
numlist[i][p]=
value=numlist[i][j];
numlist[i][j]=0;
if(value>0)//到最后value中可能有值
numlist[i][p]=
public boolean RightReduce() {
boolean changed=//是否有改变(移动和相加),作为后续是否产生新值得依据
boolean has0
for (int i = 0; i = 0; j--)
if(numlist[i][j]>0&&has0before)//移动方向上之前有空格,可移动,changed为true
if(numlist[i][j]==0)
has0before=
if (numlist[i][j] > 0)
if(numlist[i][j]==value)//相加放p位置
int sum=value*2;
numlist[i][j]=0;
numlist[i][p]=
changed=//相加,changed为true
if(value>0)//value放p中,当前值放value中
numlist[i][p]=
value=numlist[i][j];
numlist[i][j]=0;
if(value>0)//到最后value中可能有值
numlist[i][p]=
public boolean UpReduce() {
boolean changed=//是否有改变(移动和相加),作为后续是否产生新值得依据
boolean has0
for (int j = 0; j <4; j++)
has0before=
for (int i = 0; i 0&&has0before)//移动方向上之前有空格,可移动,changed为true
if(numlist[i][j]==0)
has0before=
if (numlist[i][j] > 0)
if(numlist[i][j]==value)//相加放p位置
int sum=value*2;
numlist[i][j]=0;
numlist[p][j]=
changed=//相加,changed为true
if(value>0)//value放p中,当前值放value中
numlist[p][j]=
value=numlist[i][j];
numlist[i][j]=0;
if(value>0)//到最后value中可能有值
numlist[p][j]=
public boolean DownReduce() {
boolean changed=//是否有改变(移动和相加),作为后续是否产生新值得依据
boolean has0
for (int j = 0; j =0; i--)
if(numlist[i][j]>0&&has0before)//移动方向上之前有空格,可移动,changed为true
if(numlist[i][j]==0)
has0before=
if (numlist[i][j] > 0)
if(numlist[i][j]==value)//相加放p位置
int sum=value*2;
numlist[i][j]=0;
numlist[p][j]=
changed=//相加,changed为true
if(value>0)//value放p中,当前值放value中
numlist[p][j]=
value=numlist[i][j];
numlist[i][j]=0;
if(value>0)//到最后value中可能有值
numlist[p][j]=
public void Refresh(){
scorelabel.setText("score:"+Integer.toString(score));
for(int i=0;i<4;i++)
for(int j=0;j0)
for(int i=0;i<4;i++)
for(int j=0;j<3;j++)
if(numlist[i][j]==numlist[i][j+1])
for(int j=0;j<4;j++)
for(int i=0;i<3;i++)
if(numlist[i][j]==numlist[i+1][j])
public void Out(){
JOptionPane.showMessageDialog(null, "游戏结束!", "2048PC版", 2);
System.exit(0);
public void PrintNumlist() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++)
System.out.print(numlist[i][j]);
System.out.print(&#39; &#39;);
System.out.println();
System.out.println("***********************");
//单调率,后期乘以monoweight(干脆方法内乘了)
public int Mononess(){
int result1=0;//从右往左递增度量
int result2=0;//从上往下递增度量
int lastvalue=0;
for(int i=0;i<4;i++)
lastvalue=0;
for(int j=0;j0)
if(lastvalue>0)
if(numlist[i][j]lastvalue)
result1--;
lastvalue=numlist[i][j];
lastvalue=0;
for(int j=0;j<4;j++)
lastvalue=0;
for(int i=0;i0)
if(lastvalue>0)
if(numlist[i][j]>lastvalue)
result2++;
if(numlist[i][j]result1)
return result2*
return result1*
//平滑率,是负数,是差的和的相反数,后期乘以smoothweight(干脆方法内乘了)
public int Smoothness(){
int result1=0;//水平方向
int result2=0;//竖直方向
int lastvalue=0;
for(int i=0;i<4;i++)
lastvalue=0;
for(int j=0;j0)
if(lastvalue>0)
result1+=Math.abs(numlist[i][j]-lastvalue);
lastvalue=numlist[i][j];
lastvalue=0;
for(int j=0;j<4;j++)
lastvalue=0;
for(int i=0;i0)
if(lastvalue>0)
result2+=Math.abs(numlist[i][j]-lastvalue);
lastvalue=numlist[i][j];
if(result2>result1)
return (0-result1)*
return (0-result2)*
//最大数,后期乘以maxweight(干脆方法内乘了)
public int Maxness(){
int max=0;
for(int i=0;i<4;i++)
for(int j=0;jmax)
max=numlist[i][j];
return max*
public int Emptyness(){
return blanks*
public void launchFrame() {
setTitle("2048PC版"); // 设置窗体标题
setBounds(700, 100, 400, 475);
setLayout(new BorderLayout());
setResizable(false); // 禁止调整窗体大小
numpanel.setLayout(new GridLayout(4, 4)); // 设置空布局
numpanel.setLocation(0,200);
AddScoreLabel();//添加计分器
AddNumArea();// 添加数字格子
getContentPane().add(scorepanel,BorderLayout.NORTH);
getContentPane().add(numpanel,BorderLayout.CENTER);
NewValue();
NewValue();
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 37)// 左键
if(LeftReduce())
Refresh();//更新blank,numlabellist
NewValue();
if (e.getKeyCode() == 39)// 右键
if(RightReduce())
Refresh();//更新blank,numlabellist
NewValue();
if (e.getKeyCode() == 38)// 上键
if(UpReduce())
Refresh();//更新blank,numlabellist
NewValue();
if (e.getKeyCode() == 40)// 上键
if(DownReduce())
Refresh();//更新blanks,numlabellist,scorelabel
NewValue();
if (e.getKeyCode() == 32)// 空格键
if(LeftReduce())
Refresh();//更新blanks,numlabellist,scorelabel
NewValue();
else if(RightReduce())
Refresh();//更新blanks,numlabellist,scorelabel
NewValue();
else if(UpReduce())
Refresh();//更新blanks,numlabellist,scorelabel
NewValue();
else if(DownReduce())
Refresh();//更新blanks,numlabellist,scorelabel
NewValue();
System.out.println(e.getKeyCode());
if(CheckOut())//检查游戏是否结束
PrintNumlist();
System.out.println("mononess:"+Integer.toString(Mononess()));
System.out.println("smoothness:"+Integer.toString(Smoothness()));
System.out.println("maxnum:"+Integer.toString(Maxness()));
System.out.println("blanks:"+Integer.toString(Emptyness()));
setVisible(true);2048小游戏Java源码-百度云下载
发表于 20:29:57|
来源webkfa|
作者java哥
摘要:2048小游戏Java源码-百度云下载
2048小游戏
一款有意思的算术小游戏,虽然是简单的加法运算,但是要将小数字累加到2048也不是一件容易的事,要注意的是,只有相同的数字才可以累加。想试试吗?
百度云下载
密码:5r3q
童颜巨乳妹诱人写真令人喷血
羽毛球场上酥胸美女上演极致诱惑
极品尤物! 火辣姐妹花双飞诱惑
学到老在线代码浏览器&2048 java版2048游戏 电脑版
秒后自动跳转到登录页
(奖励10下载豆)
快捷登录:
举报类型:
不规范:上传重复资源
不规范:标题与实际内容不符
不规范:资源无法下载或使用
其他不规范行为
违规:资源涉及侵权
违规:含有危害国家安全等内容
违规:含有反动/色情等内容
违规:广告内容
详细原因:
任何违反下载中心规定的资源,欢迎Down友监督举报,第一举报人可获5-10下载豆奖励。
2048 java版2048游戏 电脑版
上传时间:
技术分类:
资源评价:
(2位用户参与评价)
已被下载&17&次
java版2048游戏 电脑版
本资料共包含以下附件:
51CTO下载中心常见问题:
1.如何获得下载豆?
1)上传资料
2)评论资料
3)每天在首页签到领取
4)购买VIP会员服务,无需下载豆下载资源
5)更多途径:点击此处
2.如何删除自己的资料?
下载资料意味着您已同意遵守以下协议:
1.资料的所有权益归上传用户所有
2.未经权益所有人同意,不得将资料中的内容挪作商业或盈利用途
3.51CTO下载中心仅提供资料交流平台,并不对任何资料负责
4.本站资料中如有侵权或不适当内容,请邮件与我们联系()
5.本站不保证资源的准确性、安全性和完整性, 同时也不承担用户因使用这些资料对自己和他人造成任何形式的伤害或损失
本专题收录Java经典编程的实例源码,
在国内的开发语言中,java凭借这简单
本套视频教程是韩顺平老师,循序渐进
北京圣思园张龙(风中叶)老师的Java
讲述Arm嵌入式Linux系统下的C语言编程
这段视频是从尚学堂科技的教学课堂上
本套视频共78集,是由郝斌老师根据多
本视频专题共180集涵盖了C语言概述中
本视频专题共107集涵盖了Java概述、数
由传智播客毕向东老师讲解的Java基础
本专题为spring视频教程,共31集。教
本专题为C语言黑客编程系列视频教程,
本专题为韩顺平讲解的Java从入门到精
本专题为Java Web项目开发案例精粹视
SSH为struts+spring+hibernate的一个
本专题为疯狂Java李刚老师讲解的Stru
本周下载热点
意见或建议:
联系方式:
您已提交成功!感谢您的宝贵意见,我们会尽快处理求大神帮忙用java做简化2048小游戏!!!要源代码和素材_百度知道
求大神帮忙用java做简化2048小游戏!!!要源代码和素材
。!!!要源代码和素材!。。要用eclipse哦求大神帮忙用java做简化2048小游戏
可以去源码站免费下载,一般都能使用Eclipse编辑运行。源码站比如A5源码之类的。
其他类似问题
为您推荐:
小游戏的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 java小游戏2048 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信