http://www.csdn.net/cnshare/soft/13/13888.shtm

解决方案 »

  1.   

    http://www.csdn.net/cnshare/soft/8/8388.shtm
      

  2.   

    public class Game extends java.awt.Frame
    {
        public Game()
        {
            setTitle("¶íÂÞ˹·½¿éÓÎÏ· - Ghost Valley");
            addWindowListener(new java.awt.event.WindowAdapter(){
                public void windowClosing(java.awt.event.WindowEvent e){
                    dispose();
                    System.exit(0);
                }
            });
            GameCanvas gameCanvas = new GameCanvas();
            setLayout(new java.awt.BorderLayout());
            add(gameCanvas,"Center");
            setResizable(false);
            setLocation((java.awt.Toolkit.getDefaultToolkit().getScreenSize().width-gameCanvas.getPreferredSize().width)/2,(java.awt.Toolkit.getDefaultToolkit().getScreenSize().height-gameCanvas.getPreferredSize().height)/2);
            pack();
            show();
        }
        public static void main(String args[]){ new Game(); }
    }
    class GameCanvas extends java.awt.Canvas implements Runnable
    {
        public static final int BKSIZE = 5;
        public static final int BDWIDTH = 20;
        public static final int BDHEIGHT = 30;
        ////// Inner class Block////////
        private class Block
        {
            public boolean bkdata[][] = new boolean[BKSIZE][BKSIZE];
            public int rpos,cpos;
            public Block(final boolean bkdata1[][],int rpos,int cpos)
            {
                //this.bkdata = (boolean[][])bkdata1.clone();
                for(int i=0; i<BKSIZE; i++)
                    for(int j=0; j<BKSIZE; j++)
                        this.bkdata[i][j] = bkdata1[i][j];
                this.rpos = rpos;
                this.cpos = cpos;
            }
            public Block(final Block bk)
            {
                //this.bkdata = (boolean[][])bk.bkdata.clone();
                for(int i=0; i<BKSIZE; i++)
                    for(int j=0; j<BKSIZE; j++)
                        this.bkdata[i][j] = bk.bkdata[i][j];
                this.rpos = bk.rpos;
                this.cpos = bk.cpos;
            }
            public void doAction(int action)
            {
                switch(action)
                {
                    case Message.MOVE_UP:
                        this.rpos--;
                        break;
                    case Message.MOVE_DOWN:
                        this.rpos++;
                        break;
                    case Message.MOVE_LEFT:
                        this.cpos--;
                        break;
                    case Message.MOVE_RIGHT:
                        this.cpos++;
                        break;
                    case Message.ROTATE_CLOCK:
                    {
                        final int x0 = BKSIZE/2;
                        final int y0 = BKSIZE/2;
                        //boolean bkdata1[][] = (boolean[][])this.bkdata.clone();
                        boolean bkdata1[][] = new boolean[BKSIZE][BKSIZE];
                        for(int i=0; i<BKSIZE; i++)
                            for(int j=0; j<BKSIZE; j++)
                                bkdata1[i][j] = this.bkdata[i][j];
                        for(int x=0; x<BKSIZE; x++)
                            for(int y=0; y<BKSIZE; y++)
                                this.bkdata[y][-x+2*y0] = bkdata1[x][y];
                        break;
                    }
                case Message.ROTATE_ANTICLOCK:
                {
                    final int x0 = BKSIZE/2;
                    final int y0 = BKSIZE/2;
                    //boolean bkdata1[][] = (boolean[][])this.bkdata.clone();
                    boolean bkdata1[][] = new boolean[BKSIZE][BKSIZE];
                    for(int i=0; i<BKSIZE; i++)
                        for(int j=0; j<BKSIZE; j++)
                            bkdata1[i][j] = this.bkdata[i][j];
                    for(int x=0; x<BKSIZE; x++)
                        for(int y=0; y<BKSIZE; y++)
                            this.bkdata[-y+2*x0][x] = bkdata1[x][y];
                    break;
                }
                }
            }
        }
        ////// Inner class Board /////
        private class Board
        {
            public boolean bddata[][] = new boolean[BDHEIGHT][BDWIDTH];
            public Board()
            {
                clear();
            }
            public Board(final Board board)
            {
                //this.bddata = (boolean[][])board.bddata.clone();
                for(int i=0; i<BDHEIGHT; i++)
                    for(int j=0; j<BDWIDTH; j++)
                        this.bddata[i][j] = board.bddata[i][j];
            }
            public void clear()
            {
                for(int i=0; i<BDHEIGHT; i++)
                    for(int j=0; j<BDWIDTH; j++)
                        bddata[i][j] = false;
            }
        }