2048小程序

package game;

import java.util.Random;

public class game{
    int pane[][]=new int[4][4];    //棋盘

    void showpane()    //显示棋盘
    {
        for(int a=0;a<=40;a++){
            System.out.println();
        }
        System.out.printf("%50s\n"," |-----------------------|");        
        for(int i=0;i<=3;i++)    
        {
            System.out.printf("%24s","");
            for(int j=0;j<=3;j++)
            {                
                if(pane[i][j]==0)
                    System.out.printf("%2s%4s","|"," ");
                else
                    System.out.printf("%2s%4d","|",pane[i][j]);    
                if(j==3)
                {
                    System.out.printf("%2s\n","|");
                    System.out.printf("%50s\n"," |-----------------------|");
                }
            }
        }
        System.out.printf("%50s\n","按w-向上移动;s-向下移动;a-向左移动;d-向右移动");
        int gameOver=1;//   判断游戏结束条件
        for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                if(pane[i][j]==0){
                    gameOver=0;
                }
            }
        }
        if(gameOver==1){
            System.out.println("------游戏结束-----------游戏结束-----");
            System.exit(0);
        }
    }

    void newgame()    //开始游戏
    {
    
        for(int i=0;i<=3;i++)    //初始化棋盘
            for(int j=0;j<=3;j++)
                pane[i][j]=0;
        
        Random random = new Random();
        int m=random.nextInt(4);//产生一个0到4(不包括4的随机数)
        int n=random.nextInt(4);
        int p=random.nextInt(4);
        int q=random.nextInt(4);
        
        //在随机的位置上产生初值2
        pane[m][n]=pane[p][q]=2;
        showpane();
    }
    void up(){//向上操作
        int i,j,three;
        for(j=0;j<4;j++){  //上移动
            three=0;
            for(i=0;i<4;i++){
                if(pane[i][j]>0){
                    int t=pane[i][j];
                    pane[i][j]=0;
                    pane[three][j]=t;
                    three++;
                }
            }
        }
        for(j=0;j<4;j++){  //合并数
            for(i=0;i<3;i++){
                if(pane[i][j]==pane[i+1][j]&&pane[i][j]!=0){
                    pane[i][j]=pane[i][j]*2;
                    pane[i+1][j]=0;
                    int k=i+1;
                    for(;k+1<=3&&pane[k+1][j]>0;k++){
                        pane[k][j]=pane[k+1][j];
                        pane[k+1][j]=0;
                    }
                }
            }
        }
        random();//产生随机数
        showpane();//刷新棋盘
    }
    void low(){ //向下
        int i,j,three;
        for(j=0;j<4;j++){//下移动 
            three=3;
            for(i=3;i>=0;i--){
                if(pane[i][j]>0){
                    int t=pane[i][j];
                    pane[i][j]=0;
                    pane[i+three-i][j]=t;
                    three--;
                }
            }
        }
        for(j=0;j<4;j++){//合并数
            for(i=3;i>0;i--){
                if(pane[i][j]==pane[i-1][j]&&pane[i][j]!=0){
                    pane[i][j]=pane[i][j]*2;
                    pane[i-1][j]=0;
                    int k=i-1;
                    for(;k-1>=0&&pane[k-1][j]>0;k--){
                        pane[k][j]=pane[k-1][j];
                        pane[k-1][j]=0;
                    }
                }
            }
        }
        random();
        showpane();
    }
    void left(){//向左
        int i,j,three;
        for(i=0;i<4;i++){//左移动
            three=0;
            for(j=0;j<4;j++){
                if(pane[i][j]>0){
                    int t=pane[i][j];
                    pane[i][j]=0;
                    pane[i][three]=t;
                    three++;
                }
            }
        }
        for(i=0;i<4;i++){//合并数
            for(j=0;j<3;j++){
                if(pane[i][j]==pane[i][j+1]&&pane[i][j]!=0){
                    pane[i][j]=pane[i][j]*2;
                    pane[i][j+1]=0;
                    int k=j+1;
                    for(;k+1<=3&&pane[i][k+1]>0;k++){
                        pane[i][k]=pane[i][k+1];
                        pane[i][k+1]=0;
                    }
                }
            }
        }
        random();
        showpane();
        
    }
    void right(){//右移
        int i,j,three;
        for(i=0;i<4;i++){
            three=3;
            for(j=3;j>=0;j--){//右移动
                if(pane[i][j]>0){
                    int t=pane[i][j];
                    pane[i][j]=0;
                    pane[i][j+three-j]=t;
                    three--;
                }
            }
        }
        for(i=0;i<4;i++){//合并数
            for(j=3;j>0;j--){
                if(pane[i][j]==pane[i][j-1]&&pane[i][j]!=0){
                    pane[i][j]=pane[i][j]*2;
                    pane[i][j-1]=0;
                    int k=j-1;
                    for(;k-1>=0&&pane[i][k-1]>0;k--){
                        pane[i][k]=pane[i][k-1];
                        pane[i][k-1]=0;
                    }
                }
            }
        }
        random();
        showpane();
    }
    void random(){//产生随机数
        Random random = new Random();
        int m=random.nextInt(4);//产生一个0到4(不包括4的随机数)
        int n=random.nextInt(4);
        for(;pane[m][n]!=0;){
            m=random.nextInt(4);//产生一个0到4(不包括4的随机数)
            n=random.nextInt(4);
        }
        pane[m][n]=2;
    }
    

}

 

posted on 2016-10-07 22:06  Kooing  阅读(937)  评论(0编辑  收藏  举报

导航