C语言实现2048

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int num[5][5];          //定义函数和变量
int score;
int 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);
}
int 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  再来一点自己的创新什么的在里面。 希望大家能愉快的学习。

时间: 2024-10-10 10:13:20

C语言实现2048的相关文章

Windows下使用C语言实现2048

这是我之前写的一个小游戏,在windows下的Dev-C++中用C语言来实现的,通过不断的清屏,打印,清屏,打印来实现动态效果,不过功能不完善,有几个缺陷的地方. 实现效果(使用 w a s d 四个键来控制上下左右的移动) : 源代码(如果在Dev-C++中编译运行的时候报错,请将注释符号   //    换为  /**/ 来进行注释): #include <stdio.h> #include <stdlib.h> // for rand() and srand() and ex

C语言实现2048小游戏

上线左右或者wasd移动,q或Q退出 /* 2048.c */ #include<stdio.h> #include<stdlib.h> #include<curses.h> #include<unistd.h> #include<signal.h> #include<time.h> int a[4][4] = {0}; int empty; int old_y, old_x; void draw(); void play(); vo

C语言实现简易2048小游戏

一直很喜欢玩这个小游戏,简单的游戏中包含运气与思考与策略,喜欢这种简约又不失内涵的游戏风格.于是萌生了用C语言实现一下的想法. 具体代码是模仿这个:https://www.cnblogs.com/judgeyoung/p/3760515.html 博主分析的都很到位,很多算法技巧都值得借鉴,C语言实现2048的主要思想已经在那个博客中详细的分析了,但是我觉得在博主的代码中还是有很多很好的思想是值得我借鉴学习的. 比如这个生成随机数,顺便规定随机数的概率: /* 生成随机数 函数定义 */ voi

200行Python代码实现2048

200行Python代码实现2048 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令 GVim:非常好用的编辑器,最简单的用法可以参考课程Vim编辑器 3. 环境使用 使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操

C语言可以开发哪些项目?(转)

原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程中不知道如何学.学什么,所以,总结这个列表,希望对C语言初学者可以有所帮助~ C语言可以做什么? 从最简单

学会了C语言可以开发出很多东西吗?

C语言相比其他高级语言,就像内功和剑法一样.只会C语言可能并不能写出一个看起来就很厉害的程序,但C语言是你学好其他一切语言的基础.有了C语言的底子,再学别的语言就很容易上手了. 你能想到的,C语言都能搞,可以说是无所不能,把C学好,上手其他语言也会事半功倍.只看教程不动手永远学不会,推荐10个C的入门小项目,由易到难,开始动手做一些常见的小东西吧. 1C/C++ - C语言制作简单计算器 用C语言做一个简单的计算器,进行加.减.乘.除操作.项目涉及的所有数学知识都很简单,但输入过程会增加复杂性.

【Bootstrap-插件使用】Jcrop+fileinput组合实现头像上传功能

作者:Dreawer链接:https://zhuanlan.zhihu.com/p/24465742来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:梦游的龙猫(转载已获得作者许可) 很久没有更新博客了,再不写点东西都烂了. 这次更新一个小内容,是两个插件的组合使用,实现头像上传功能. 业务需求: 头像上传功能,要对上传的文件进行剪切,且保证头像到服务器时必须是正方形的. 优化<input type="file">的显示样式,基础的样式实

收藏电子书整理

study-e-book 最近整理了一下以前百度云.自己电脑收藏的一些电子书,分享出来,有需要的自取. 自取的同时请大家star下哈,整理不易. 注:所有书籍类资源都逃不过版权问题,这个层面上还是希望有能力的人支持正版 书籍有版权,知识却没有,任何学习的行为都值得被鼓励 提取方法 链接:https://pan.baidu.com/s/143-g1YVM4AD96KBUsUv87A 提取码:wavk 电子书目录 study-e-book ├── devops │ └── Python自动化运维:技

2048游戏C语言代码

听说2048游戏实现起来很easy! 所以今天就试了试!确实不太难,要想编的很成功,也不是太容易!有很多细节需要考虑! 下面是我自己设计的代码,估计里面会漏洞百出!希望路过大神能指点一二! #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<time.h> #define WIN 256 // 可以修改决定游戏输赢的值 // 矩阵数组 int num[4][4]={0,0,0,0,0