C语言实现2048

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int num[5][5];          //定义函数和变量 
int score;
void gett(int k);
void up();
void down();
void left();
void right();
void outt();    
void nextt();
void endd();
int main(){             //赋初值
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    int i,j;
    i=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    j=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    while (num[i][j]!=0){
        i=1+(int)(4.0*rand()/(RAND_MAX+1.0));
        j=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    } 
    num[i][j]=2;
    i=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    j=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    while (num[i][j]!=0){
        i=1+(int)(4.0*rand()/(RAND_MAX+1.0));
        j=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    } 
    num[i][j]=2;
    score=0;
    outt();
    endd();
    return 0;
} 
void endd(){
    printf("    2048 mini game    \n");
    printf("                      \n");
    printf("         GAME         \n");
    printf("                      \n");
    printf("         OVER         \n");
    printf("                      \n");
    printf("      YOUR FINAL      \n");
    printf("                      \n");
    printf("    SCORE=%d      \n",score);
    printf("                      \n");
    printf("                      \n");
    printf("    2048 mini game    \n");
}
void outt(){          //输出部分 
    printf("    2048 mini game    \n");
    printf(" score=%d \n",score);
    printf("┌-—┬-—┬-—┬—-┐\n");
    printf("│%3d│%3d│%3d│%3d│\n",num[1][1],num[1][2],num[1][3],num[1][4]);
    printf("├-—┼-—┼—-┼—-┤\n");
    printf("│%3d│%3d│%3d│%3d│\n",num[2][1],num[2][2],num[2][3],num[2][4]);
    printf("├-—┼—-┼—-┼—-┤\n");
    printf("│%3d│%3d│%3d│%3d│\n",num[3][1],num[3][2],num[3][3],num[3][4]);
    printf("├-—┼-—┼-—┼—-┤\n");
    printf("│%3d│%3d│%3d│%3d│\n",num[4][1],num[4][2],num[4][3],num[4][4]);
    printf("└-—┴-—┴—-┴—-┘\n");    
    printf("       By SHIRO-marisa\n");
    int init;
    scanf("%d",&init);
    gett(init);
}
 gett(int k){    //跳转操作 
    if (k==5){up();}
    if (k==2){down();}
    if (k==1){left();}
    if (k==3){right();}
}
void up(){         //
    int i,j,k;
    int zz[5][5];
    zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=1;
        j=1; 
        while (j<5){
            if (zz[j][i]!=0){
                if (j==4) {num[k][i]=zz[j][i];j++; } 
                    else {
                      if (zz[j][i]==zz[j+1][i]){
                            num[k][i]=zz[j][i]*2;
                         score=zz[j][i]*2+score;
                          k++;
                        j=j+2; 
                      }
                      else {
                          num[k][i]=zz[j][i];
                        j=j+1;
                        k++;
                        }
                 }    
                }
                else j++;
        }
    }
        zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=1;
        j=1; 
        while (j<5){
            if (zz[j][i]!=0){
                if (j==4) {num[k][i]=zz[j][i];j++; } 
                    else {
                      if (zz[j][i]==zz[j+1][i]){
                            num[k][i]=zz[j][i]*2;
                         score=zz[j][i]*2+score;
                          k++;
                        j=j+2; 
                      }
                      else {
                          num[k][i]=zz[j][i];
                        j=j+1;
                        k++;
                        }
                 }    
                }
                else j++;
        }
    }
    system("CLS");
    nextt();
}
void down(){         //
    int i,j,k;
    int zz[5][5];
    zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=4;
        j=4;
        while (j>0){
            if (zz[j][i]!=0){if (j==1) {num[k][i]=zz[j][i];j--; } 
            else {
                      if (zz[j][i]==zz[j-1][i]){
                            num[k][i]=zz[j][i]*2;
                         score=zz[j][i]*2+score;
                          k--;
                        j=j-2; 
                      }
                      else {
                          num[k][i]=zz[j][i];
                        j=j-1;
                        k--;
                        }
                 }    
                }
                else j--;
        } 
    }
        zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=4;
        j=4;
        while (j>0){
            if (zz[j][i]!=0){if (j==1) {num[k][i]=zz[j][i];j--; } 
            else {
                      if (zz[j][i]==zz[j-1][i]){
                            num[k][i]=zz[j][i]*2;
                         score=zz[j][i]*2+score;
                          k--;
                        j=j-2; 
                      }
                      else {
                          num[k][i]=zz[j][i];
                        j=j-1;
                        k--;
                        }
                 }    
                }
                else j--;
        } 
    }
    system("CLS");
    nextt();
} 
void left(){       //
    int i,j,k;
    int zz[5][5];
    zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=1;
        j=1;
        while (j<5){
            if (zz[i][j]!=0){if (j==4) {num[i][k]=zz[i][j];j++; 
            } 
            else {
                      if (zz[i][j]==zz[i][j+1]){
                            num[i][k]=zz[i][j]*2;
                         score=zz[i][j]*2+score;
                          k++;
                        j=j+2; 
                      }
                      else {
                          num[i][k]=zz[i][j];
                        j=j+1;
                        k++;
                        }
                 }    
                }
                else j++;
        } 
    }
    zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=1;
        j=1;
        while (j<5){
            if (zz[i][j]!=0){if (j==4) {num[i][k]=zz[i][j];j++; 
            } 
            else {
                      if (zz[i][j]==zz[i][j+1]){
                            num[i][k]=zz[i][j]*2;
                         score=zz[i][j]*2+score;
                          k++;
                        j=j+2; 
                      }
                      else {
                          num[i][k]=zz[i][j];
                        j=j+1;
                        k++;
                        }
                 }    
                }
                else j++;
        } 
    }
    system("CLS");
    nextt();
}

void right(){        //
    int i,j,k;
    int zz[5][5];
    zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=4;
        j=4;
        while (j>0){
            if (zz[i][j]!=0){if (j==1) {num[i][k]=zz[i][j];j--; } 
            else {
                      if (zz[i][j]==zz[i][j-1]){
                            num[i][k]=zz[i][j]*2;
                         score=zz[i][j]*2+score;
                          k--;
                        j=j-2; 
                      }
                      else {
                          num[i][k]=zz[i][j];
                        j=j-1;
                        k--;
                        }
                 }    
                }
                else j--;
        } 
    }
    zz[1][1]=0;zz[1][2]=0;zz[1][3]=0;zz[1][4]=0;
    zz[2][1]=0;zz[2][2]=0;zz[2][3]=0;zz[2][4]=0;
    zz[3][1]=0;zz[3][2]=0;zz[3][3]=0;zz[3][4]=0;
    zz[4][1]=0;zz[4][2]=0;zz[4][3]=0;zz[4][4]=0;
    zz[1][1]=num[1][1];zz[1][2]=num[1][2];zz[1][3]=num[1][3];zz[1][4]=num[1][4];
    zz[2][1]=num[2][1];zz[2][2]=num[2][2];zz[2][3]=num[2][3];zz[2][4]=num[2][4];
    zz[3][1]=num[3][1];zz[3][2]=num[3][2];zz[3][3]=num[3][3];zz[3][4]=num[3][4];
    zz[4][1]=num[4][1];zz[4][2]=num[4][2];zz[4][3]=num[4][3];zz[4][4]=num[4][4];
    num[1][1]=0;num[1][2]=0;num[1][3]=0;num[1][4]=0;
    num[2][1]=0;num[2][2]=0;num[2][3]=0;num[2][4]=0;
    num[3][1]=0;num[3][2]=0;num[3][3]=0;num[3][4]=0;
    num[4][1]=0;num[4][2]=0;num[4][3]=0;num[4][4]=0;
    for (i=1;i<=4;i++){
        k=4;
        j=4;
        while (j>0){
            if (zz[i][j]!=0){if (j==1) {num[i][k]=zz[i][j];j--; } 
            else {
                      if (zz[i][j]==zz[i][j-1]){
                            num[i][k]=zz[i][j]*2;
                         score=zz[i][j]*2+score;
                          k--;
                        j=j-2; 
                      }
                      else {
                          num[i][k]=zz[i][j];
                        j=j-1;
                        k--;
                        }
                 }    
                }
                else j--;
        } 
    }
    system("CLS");
    nextt();
}
void nextt(){       //随机生成新方块 开始下一次 
    srand((int)time(0));
    int i,j,k;
    k=0;
    for (i=1;i<5;i++)
        for (j=1;j<5;j++)
            if (num[i][j]!=0) k++;
    if (k==16) {return;}        
    i=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    j=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    while (num[i][j]!=0){
        i=1+(int)(4.0*rand()/(RAND_MAX+1.0));
        j=1+(int)(4.0*rand()/(RAND_MAX+1.0));
    } 
    num[i][j]=2;
    outt();
}

 

希望大家能去看看这个代码 自己去分析一下 也可以自己模仿这这个代码自己去写一个2048  再来一点自己的创新什么的在里面。 希望大家能愉快的学习。

温馨提示:用数字来代替上下左右键 5213分别代表上下左右

转载于:https://www.cnblogs.com/D0g3/p/4162575.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值