Java-2048
来源:互联网 发布:js防水涂料价格 编辑:程序博客网 时间:2024/05/23 23:31
首先,先写出一个界面,以上就是我做的一个界面。做界面中有一个问题要提出来,就是按钮问题,当然也可以用Jlable来代替按钮,效果都差不多,在这里就用按钮举例,自然按钮个数比较多,所以最好用一个二维数组来添加,并设置按钮内容为“”,再然后就是按钮移动了,也许受玩原版2048的错觉影响,我们的第一想法是:当按下上移或其他按钮时,按钮就会产生相应的移动。其实做到后面就会发现,如果按照那种思路,当按下按钮时,屏幕就会闪一下,当然这个问题可以解决,但按钮移动时按钮旁边的线条被檫掉却很难解决或解决不了。所以我们的第一想法是错误的,其实按钮移动只是错觉,在我们按下一个键时按钮并没移动,而是对按钮里面的内容做了相应改变。下面就是我写的判断移动的算法:
public void MoveUp1(){
int flag1=5,flag2=5,num=0;
na=false;
for(int i=0;i<4;i++){
for(int k=0;k<4;k++){
for(int j=1;j<4;j++){
String str=array[i][j].getText();
String str1=array[i][j-1].getText();
if(!(array[i][j].getText().equals(""))){
if(flag1!=i&&flag2!=j-1&&array[i][j-1].getText().equals(array[i][j].getText())){
num=Integer.parseInt(str1);
setColor(i, j-1, 2*num);
jtf1.setText((Integer.parseInt(jtf1.getText())+2*num)+"");
array[i][j-1].setText(2*num+"");
array[i][j].setText("");
flag1=i;flag2=j-1;
array[i][j].setBackground(new Color(170,170,170));
na=true;
}else if(array[i][j-1].getText().equals("")){
num=Integer.parseInt(str);
setColor(i, j-1, num);
array[i][j-1].setText(num+"");
array[i][j].setText("");
array[i][j].setBackground(new Color(170,170,170));
na=true;
}
}
}
}
flag1=5;flag2=5;
}
}
该算法中用了三个循环,其中的检测机制是按列来的,先在第一列找到按钮内容不为“”的按钮,在判断该按钮的上一个按钮是否为空或者相同,如果为空则该按钮向上移动,如果相同则该按钮内容赋为“”,上一个按钮赋为该数字的两倍,倘若不为空且不相同则不作处理,按该方式该列循环三次,循环完后再换下一列依次循环,这样的话按钮就可以移动了,但还是会有一个问题,就是同一列的按钮会连加,那么如何解决这个问题呢?
注意代码中的flag1和flag2,这两个标识符就可以解决这个问题,这样,连加问题也解决了。接下来就是判断输赢:
//判断输赢
public boolean Judge1(){
int count=0;
for(int i=0;i<jf.array.length;i++)
for(int j=0;j<jf.array[i].length;j++)
if(!(jf.array[i][j].getText().equals("")))
count++;
if(count!=16)
return true;
else
return false;
}
public boolean Judge2(){
int k=0;
if(!Judge1()){
for(int m=1;m<3;m++)
for(int n=1;n<3;n++)
if(!(jf.array[m][n].getText().equals(jf.array[m-1][n].getText()))&&!(jf.array[m][n].getText().equals(jf.array[m+1][n].getText()))&&!(jf.array[m][n].getText().equals(jf.array[m][n-1].getText()))&&!(jf.array[m][n].getText().equals(jf.array[m][n+1].getText()))&&!(jf.array[0][0].getText().equals(jf.array[0][1].getText()))&&!(jf.array[0][0].getText().equals(jf.array[1][0].getText()))&&!(jf.array[3][0].getText().equals(jf.array[2][0].getText()))&&!(jf.array[3][0].getText().equals(jf.array[3][1].getText()))&&!(jf.array[0][3].getText().equals(jf.array[0][2].getText()))&&!(jf.array[0][3].getText().equals(jf.array[1][3].getText()))&&!(jf.array[3][3].getText().equals(jf.array[3][2].getText()))&&!(jf.array[3][3].getText().equals(jf.array[2][3].getText()))){
k++;
}
}
if(k==4)
return true;
else
return false;
}
}
judge1是用来判断按钮是否已添加满,judge2是在按钮已添加满的基础上再进行判断是否有相同的相邻按钮,用这两个方法就可以用来判断输赢啦!做到这,再加上分数文本框,2048就基本完成了!
- Java-2048
- 2048游戏java版
- java小游戏2048实现
- 控制台版java 2048
- java实现2048
- HDU 2048 JAVA
- Java 2048 小游戏 源码
- java实现2048小游戏
- Java实现2048
- java实现2048小游戏
- java
- JAVA
- JAVA
- JAVA
- java
- Java
- Java
- JAVA:
- 类的继承与接口实现
- json1
- 事件监听机制
- Java五子棋
- Android--sharepreference总结
- Java-2048
- LeetCode OJ 123 Best Time to Buy and Sell Stock III
- Php数据库操作
- C++库常用函数一览
- Php上传文件
- 线性表的顺序表示与实现
- T-SQL查询进阶
- Php网站建立
- colorAccent,colorPrimary,colorPrimaryDark