刘曰天 发表于 2019-12-18 09:41

c/c++分享下自己做的2048


直接上代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>

int g_score=0;      //玩家分数
int g_arr={0};//4*4数组

//向上移动
int move_up();
//向下移动
int move_down();
//向左移动
int move_left();
//向右移动
int move_right();
//在空位随机产生2或4
void add_vacancy_rand();
//随机两个不同位置产生2或4
void add_two_rand();
//打印数组
void printf_arr();


//移动
int move_up()
{
    int flag=0;
    int i=1;
    int k=0;
    for (int j=0; j<4; j++)
    {
      for (i=1,k=0; i<4; i++)
      {
            //判断i是否为零
            if(g_arr>0)
            {
                //如果k为零
                if(g_arr==0)
                {
                  flag=1;
                  //移动数组
                  g_arr=g_arr;
                  g_arr=0;
                }
                //如果k与i相等
                else if(g_arr==g_arr)
                {
                  flag=1;
                  //两数相等
                  g_arr=g_arr*2;
                  g_score+=g_arr;
                  g_arr=0;
                  k++;
                }
                //如果k与i不等
                else
                {

                  g_arr[++k]=g_arr;
                  if (i != k)
                  {
                        flag=1;
                        //移动数组
                        g_arr = 0;
                  }
                }
            }
      }
    }

    return flag;
}
//向下移动
int move_down()
{
    int flag = 0;
    int i=2;
    int k=3;
    for (int j=0; j<4; j++)
    {
      for (i=2,k=3; i>=0; i--)
      {
            //判断i是否为零
            if(g_arr>0)
            {
                //如果k为零
                if(g_arr==0)
                {
                  flag = 1;
                  g_arr=g_arr;
                  g_arr=0;
                }
                //如果k与i相等
                else if(g_arr==g_arr)
                {
                  flag =1;
                  g_arr=g_arr*2;
                  g_score+=g_arr;
                  g_arr=0;
                  k--;
                }
                //如果k与i不等
                else
                {
                  g_arr[--k]=g_arr;
                  if (i != k)
                  {
                        flag=1;
                        g_arr = 0;
                  }
                }
            }
      }
    }
    return flag;
}
//向左移动
int move_left()
{
    int flag=0;
    int j=1;
    int k=0;
    for (int i=0; i<4; i++)
    {
      for (j=1,k=0; j<4; j++)
      {
            //判断i是否为零
            if(g_arr>0)
            {
                //如果k为零
                if(g_arr==0)
                {
                  flag=1;
                  g_arr=g_arr;
                  g_arr=0;
                }
                //如果k与i相等
                else if(g_arr==g_arr)
                {
                  flag=1;
                  g_arr=g_arr*2;
                  g_score+=g_arr;
                  g_arr=0;
                  k++;
                }
                //如果k与i不等
                else
                {
                  g_arr[++k]=g_arr;
                  if (j != k)
                  {
                        flag=1;
                        g_arr = 0;
                  }
                }
            }
      }
    }
    return flag;
}
//向右移动
int move_right()
{
    int flag=0;
    int j=2;
    int k=3;
    for (int i=0; i<4; i++)
    {
      for (j=2,k=3; j>=0; j--)
      {
            //判断i是否为零
            if(g_arr>0)
            {
                //如果k为零
                if(g_arr==0)
                {
                  flag =1;
                  g_arr=g_arr;
                  g_arr=0;
                }
                //如果k与i相等
                else if(g_arr==g_arr)
                {
                  flag =1;
                  g_arr=g_arr*2;
                  g_score+=g_arr;
                  g_arr=0;
                  k--;
                }
                //如果k与i不等
                else
                {
                  g_arr[--k]=g_arr;
                  if (j != k)
                  {
                        flag=1;
                        g_arr = 0;
                  }
                }
            }
      }
    }
    return flag;
}


//在空位随机产生2或4
void add_vacancy_rand()
{
    int row,col;
    while(1)
    {
      row=rand()%4;
      col=rand()%4;
      if(g_arr==0)
      {
            g_arr=rand()%3 ? 2 : 4;
            break;
      }
    }
}

//随机两个不同位置产生2或4
void add_two_rand()
{
    int row=-1,col=-1;
    for (int i=0; i<2;)
    {
      int x=rand()%4,y=rand()%4;
      if(x==row && y==col)
            break;
      row=x;
      col=y;
      g_arr=rand()%3 ? 2 : 4;
      i++;
    }
}

//打印数组
void printf_arr()
{
    system("cls");          //刷新界面
    for (int i=1; i<=9; i++)
    {
      printf("|");
      for (int j=0; j<4; j++)
      {

            if(i%2==0)
            {
                if(g_arr==0)
                {
                  printf("    \t|");
                }
                else
                {
                  printf("%4d\t|",g_arr);
                }

            }
            else
            {
                printf("-------|");
            }
      }
      printf("\n");
    }
    printf("score:%d\n",g_score);
}

//结束判断
int isGameOver(){
    int arr={0};
    for (int i=0; i<4; i++) {
      for (int j=0; j<4; j++) {
            arr=g_arr;
      }
    }
    int score = g_score;

    if( move_up() || move_down() || move_left() || move_right()){
      for (int i=0; i<4; i++) {
            for (int j=0; j<4; j++) {
                g_arr=arr;
            }
      }
      g_score=score;
      return 0;
    }else {
      printf("游戏结束...\n");
      return 1;
    }



}

int main()
{
    srand((unsigned int)time(NULL));

    add_two_rand();
    printf_arr();
    int c;//定义一个char型变量存储按下按键的值
    int flag=0;
    while(1)
    {
      flag =0;
      c = getch();
      if(c==72)
      {
            flag = move_up();
      }
      else if(c==80)
      {
            flag = move_down();
      }
      else if(c==75)
      {
            flag = move_left();
      }
      else if(c==77)
      {
            flag = move_right();
      }
      if(flag)
      {
            printf_arr();   //打印界面

            for (int i =0; i<50000000; i++) {
                flag=0;
            }
            add_vacancy_rand(); //产生随机数
            printf_arr();   //打印界面
            //判断游戏是否结束
            if (isGameOver()){
                printf("按任意键重开...");

                getchar();
                for (int i=0; i<4; i++) {
                  for (int j=0; j<4; j++) {
                        g_arr=0;
                  }
                }
                g_score=0;
                add_two_rand();
                printf_arr();

            }
      }
    }
    return 0;
}

运行结果:
还有很多改进的地方,希望大家来指出!!!


Dancingharbor 发表于 2019-12-18 09:49

我知道了 这一定是课程设计{:301_1001:}

oowind 发表于 2019-12-18 09:50

真是不错,学习一下

风度男子 发表于 2019-12-18 09:51

支持继续加油 {:1_921:}

ruoxi520chenxi 发表于 2019-12-18 10:21

不错,支持一下{:301_1001:}

LOLQAQ 发表于 2019-12-18 10:40

加油!你是最棒的!

cj13888 发表于 2019-12-18 10:42

学习借鉴一下,谢谢分享

ciker_li 发表于 2019-12-18 10:56

编译了一下,貌似67个错误。不好解决啊

lshx 发表于 2019-12-18 11:21

支持一下,谢谢分享!!

superjason 发表于 2019-12-18 19:56

我怎么没看懂这么多if else 到底在干吗
页: [1] 2
查看完整版本: c/c++分享下自己做的2048