package kaishi;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Random;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test extends JApplet{
private static final int UP=0,DOWN=1,LEFT=2,RIGHT=3;
private static final int WID=150,SP=10;
private int scores=0;
private static JLabel scoreLabel;
private boolean
change,CheckMode=false,gameOverFlag=false,successFlag=false;
private int[] label={2,4,8,16,32,64,128};
private Color[] clo={
new Color(200,200,200),new Color(228,228,160),new
Color(214,163,92),
new Color(234,124,72),new Color(240,84,77),new
Color(255,68,53),new Color(200,200,64)
};
private Map
cmap=new HashMap();
public static RectObject[][] rset=new RectObject[4][4];
public RectObject[][] list=new RectObject[4][4];
private My2048Panel myp;
private LinkedList> saveList=new
LinkedList>();
private JButton goBackButton;
KeyListener kl=new KeyListener(){
public void keyPressed(KeyEvent e){
saveTheStep();
goBackButton.setVisible(true);
if(gameOverFlag==true){
return;
}
if(!aDirAble()){
gameOver();
}
int key=e.getKeyCode();
switch(key){
case KeyEvent.VK_UP:
change=false;
moveUp(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
case KeyEvent.VK_DOWN:
change=false;
moveDown(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
case KeyEvent.VK_LEFT:
change=false;
moveLeft(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
case KeyEvent.VK_RIGHT:
change=false;
moveRight(true);
if(change==true){
getARandomRect();
//saveTheStep();
}
break;
}
//saveTheStep();
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
};
class RectObject{
private int value;
public RectObject(){
value=0;
}
public RectObject(RectObject obj){
value=obj.value;
}
public boolean equals(Object inobj){
RectObject obj=(RectObject)inobj;
if(obj.value==value){
return true;
}
return false;
}
}
class Point{
int x;
int y;
public Point(int i,int j){
x=i;
y=j;
}
}
class My2048Panel extends JPanel{
private int[] xindex={SP,2*SP+WID,3*SP+2*WID,4*SP+3*WID};
private int[] yindex={SP,2*SP+WID,3*SP+2*WID,4*SP+3*WID};
public void paintComponent(Graphics g){
//background
super.paintComponent(g);
for(int i=0;i
Font("TimesRoman",Font.BOLD,50);
g.setFont(font);
@SuppressWarnings("deprecation")
FontMetrics
fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
int len=fm.stringWidth(""+rset[i][j].value);
int hg=fm.getHeight();
g.drawString(""+rset[i][j].value,
yindex[j]+WID/2-len/2, xindex[i]+WID/2+hg/4);
if(rset[i][j].value==2048 &&
successFlag==false){
successFlag=true;
gameSuccess();
}
}
}
}
}
}
class GameOverPane extends JPanel{
public GameOverPane(int w,int h){
setSize(w,h);
//setOpaque(false);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Font font=new Font("TimesRoman",Font.BOLD,80);
g.setFont(font);
@SuppressWarnings("deprecation")
FontMetrics
fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
int width=fm.stringWidth("Game Over");
int height=fm.getHeight();
g.setColor(new Color(255,0,0));
g.drawString("Game Over!", getWidth()/2-width/2,
getHeight()/2-height/2);
}
}
class SuccessPane extends JPanel{
public SuccessPane(int w,int h){
setSize(w,h);
//setOpaque(false);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Font font=new Font("TimesRoman",Font.BOLD,80);
g.setFont(font);
@SuppressWarnings("deprecation")
FontMetrics
fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
int width=fm.stringWidth("Success!");
int height=fm.getHeight();
g.setColor(new Color(255,0,0));
g.drawString("Success!", getWidth()/2-width/2,
getHeight()/2-height/2);
}
}
class LOGO extends JPanel{
public LOGO(int w ,int h){
setSize(w,h);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Font font=new Font("TimesRoman",Font.BOLD,30);
g.setFont(font);
@SuppressWarnings("deprecation")
FontMetrics
fm=Toolkit.getDefaultToolkit().getFontMetrics(font);
fm.stringWidth("2048");
fm.getHeight();
g.setColor(new Color(255,0,0));
g.drawString("郭泽民的2048", 20, getHeight()/2+20);
}
}
public class goBackListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if(saveList.size()==0){
goBackButton.setVisible(false);
return;
}
ArrayList> arr=(ArrayList>)saveList.getLast();
scoreLabel.setText(""+arr.get(0));
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
int num=(int)arr.get(4*i+j+1);
if(num!=0){
rset[i][j]=new RectObject();
rset[i][j].value=num;
}else{
rset[i][j]=null;
}
}
}
saveList.removeLast();