package wh1;
import java.awt.*;
import java.awt.event.*;
//import java.io.*;
import java.util.*;
import javax.swing.*;
public class Java2048 extends JFrame. implements KeyListener{
private static final long serialVersionUID = 1L;
Color background = new Color(190, 173, 160);//
Color foreground = new Color(204, 192, 178);//
Color wordColor = new Color(232, 216, 203);//
Font wordFont = new Font("", Font.PLAIN, 25);//
Font numberFont = new Font("", Font.BOLD, 35);//
Random random=new Random();//
int[][] array;//2
//,,,
int[][] process=new int [4][2];
int score;//,
int yxmode;
int highestScore;//
int biggestNumber=0;
boolean ifGenerate2or4;
int[] rd=new int[16];//24
private Graphics gBuffer;
//
public Java2048(){
addKeyListener(this);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
if(JOptionPane.showConfirmDialog(null, "?", "",
JOptionPane.YES_NO_OPTION)==JOptionPane.YES_NO_OPTION){
System.exit(0);
}
}
});
restart();
}
void restart(){//
array=new int[4][4];//2
score=0;//
biggestNumber=0;//
//24
generateRandom2or4();
generateRandom2or4();
}
//
public void paint(Graphics g) {
gBuffer=g;
gBuffer.setColor(background);
gBuffer.drawRoundRect(10, 40, 110, 50, 20, 20);
gBuffer.fillRoundRect(10, 40, 110, 50, 20, 20);
gBuffer.drawRoundRect(150, 40, 130, 90, 20, 20);//
gBuffer.fillRoundRect(150, 40, 130, 90, 20, 20);
gBuffer.drawRoundRect(290, 40, 130, 90, 20, 20);//
gBuffer.fillRoundRect(290, 40, 130, 90, 20, 20);
gBuffer.drawRoundRect(0, 150, 454, 460, 10, 10);//
gBuffer.fillRoundRect(0, 150, 454, 460, 10, 10);
gBuffer.setFont(wordFont);
gBuffer.setColor(wordColor);
gBuffer.drawString("2048", 35, 75);
gBuffer.drawString("", 185, 70);// SCORE
gBuffer.drawString("", 320, 70); // BEST
gBuffer.setFont(numberFont);
gBuffer.setColor(Color.white);
if(score1024){
switch(biggestNumber){
case 2048:{
if(JOptionPane.showConfirmDialog(this, "2048!\n ?", "",
JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
biggestNumber++;//2048
}else{
restart();
repaint();
}
break;
}
default:;
}
}
if(judgeFail()){
JOptionPane.showMessageDialog(this,"!", "", JOptionPane.INFORMATION_MESSAGE);
restart();
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void keyTyped(KeyEvent e) {
}
//,true,false
public boolean judgeFail(){
for(int j=0;j0){
if(process[k][0]==0){
return false;
}else if(process[k-1][0]==0){
return false;
}else if(process[k-1][0]==process[k][0]){
return false;
}else{
break;
}
}
}
}
for(int j=0;j-1;i--){
process[3-i][0]=array[i][j];
process[3-i][1]=1;
}
for(int i=1;i0){
if(process[k][0]==0){
return false;
}else if(process[k-1][0]==0){
return false;
}else if(process[k-1][0]==process[k][0]){
return false;
}else{
break;
}
}
}
}
for(int i=0;i0){
if(process[k][0]==0){
return false;
}else if(process[k-1][0]==0){
return false;
}else if(process[k-1][0]==process[k][0]){
return false;
}else{
break;
}
}
}
}
for(int i=0;i-1;j--){
process[3-j][0]=array[i][j];
process[3-j][1]=1;
}
for(int l=1;l0){
if(process[k][0]==0){
return false;
}else if(process[k-1][0]==0){
return false;
}else if(process[k-1][0]==process[k][0]){
return false;
}else{
break;
}
}
}
}
for(int i=0;i-1;i--){
process[3-i][0]=array[i][j];
process[3-i][1]=1;
}
processProcess();
for(int i=3;i>-1;i--){
array[i][j]=process[3-i][0];
}
}
if(ifGenerate2or4){
generateRandom2or4();
repaint();
}
}
//,,false,true;
public void moveLeft(){
ifGenerate2or4=false;
for(int i=0;i-1;j--){
process[3-j][0]=array[i][j];
process[3-j][1]=1;
}
processProcess();
for(int j=3;j>-1;j--){
array[i][j]=process[3-j][0];
}
}
if(ifGenerate2or4){
generateRandom2or4();
repaint();
}
}
//24
public void generateRandom2or4(){
int rdCount=-1;//24
for(int i=0;i0){
if(process[k][0]==0){
break;
}else if(process[k-1][0]==0){
process[k-1][0]=process[k][0];
process[k][0]=0;
k--;
ifGenerate2or4=true;
}else if(process[k-1][0]==process[k][0]){
if(process[k-1][1]==1){
ifGenerate2or4=true;
process[k-1][0]=2*process[k][0];
process[k][0]=0;
score+=process[k-1][0];
if(process[k-1][0]>biggestNumber){
biggestNumber=process[k-1][0];
}
if(score>highestScore){
highestScore=score;
}
process[k-1][1]=0;
}
break;
}else{
break;
}
}
}
}
}