用c语言实现2048小游戏

#include 
#include 
#include 
#include 
#include 
#define x0 26 
#define y0 1 
HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE); 
/*显示声明*/ 
void p(int*a,int i,int x,int y); 
/*部分刷新声明*/ 
void shua(void); 
/*胜利画面测试函数声明*/ 
int test(void); 
/*字体空格声明*/ 
void kg(int*a); 
/*画长条函数的声明*/ 
void ct(int x,int y,int l,int k,int c); 
/*标题字幕2048*/ 
void p2048(int x,int y); 
/*单个颜色返回值声明*/ 
int col(int*a); 
/*移动光标*/ 
void gotoxy(int x,int y) 

 COORD coordScreen={0,0}; 
 coordScreen.X=x; 
 coordScreen.Y=y; 
 SetConsoleCursorPosition(hOutput,coordScreen); 

/*字体颜色*/ 
void textcolor(int color) 

 SetConsoleTextAttribute(hOutput,color); 

/*显示函数*/ 
void prin(int*a,int*score,int*scoremax) 

 int i; 
 for (i = 0; i < 16; i++) 
 { 
  p(a,i,x0,y0); 
 } 
 printf("\n\n       score=%d MAXscore=%d     \n", *score, *scoremax); 

/* 产生随机数 */ 
int shu(void) 

 int s = 0; 
 s = 1 + (int)(12.0 * rand() / (RAND_MAX + 1.0)); 
 if (s == 12) 
  return 4; 
 else 
  return 2; 

 
/* 决定位置 */ 
int rands(void) 

 return (int)(16.0 * rand() / (RAND_MAX + 1.0)); 

/* 主函数*/ 
int main(void) 

 int flag = 0, c = 0, pd = 1, n = 0, i = 0, m = 0, j = 
  0, sj, sj1, sj2, a[16] = { 0 }, b[16] ={0}, x = 0, score = 0, t = 0, jx = 0, scoremax = 0,ks=1,yx=0; 
  char sr,an; 
  //开始画面 
  p2048(17,1); 
  textcolor(255); 
  gotoxy(35,15); 
  for(;;) 
  { 
   an=getch(); 
  switch(an) 
  { 
  case 72: 
   if(ks==1) 
    ks=0; 
   else 
    ks=1; 
  break; 
  case 80: 
   if(ks==1) 
    ks=0; 
   else 
    ks=1; 
  break; 
  case '\r': 
   yx=1; 
   break; 
  default: 
  break; 
  } 
  if(ks==1) 
   gotoxy(35,15); 
  else 
   gotoxy(34,18); 
  if(ks==1&&yx==1) 
   break; 
  else if(ks==0&&yx==1) 
  { 
  textcolor(240); 
  gotoxy(0,0); 
  for(i=0;i<=500;i++) 
  { 
   printf("  "); 
  } 
  gotoxy(0,0); 
  ct(12,5,58,10,223); 
  gotoxy(13,6); 
  printf("      2048游戏说明"); 
  gotoxy(13,8); 
  printf(" 通过按数字键移动数字,合并相同的数字来的取得更大的数。"); 
  gotoxy(13,9); 
  printf(" 得到2048时游戏即胜利,当然您也可以选择继续挑战。"); 
  gotoxy(13,11); 
  printf(" 按键操作:"); 
  gotoxy(13,13); 
  printf(" 上:↑ 下:↓ 左:← 右:→ 重新开始:r 退出游戏:e"); 
  textcolor(240); 
  printf("\n\n\n\n\n               I know "); 
  getch(); 
  p2048(17,1); 
  textcolor(255); 
  gotoxy(34,18); 
  } 
  yx=0; 
  } 
  //隐藏光标 
  HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); 
  CONSOLE_CURSOR_INFO cci; 
  GetConsoleCursorInfo(hOut,&cci); 
  cci.bVisible=FALSE; 
  SetConsoleCursorInfo(hOut,&cci); 
  //刷新画面 
  textcolor(240); 
  gotoxy(0,0); 
  for(i=0;i<=500;i++) 
  { 
   printf("  "); 
  } 
  gotoxy(0,0); 
  /*设置时间种子*/ 
  srand((int)time(0)); 
  /* 设置初始值 */ 
  sj = rands(); 
  sj1 = rands(); 
  sj2 = rands(); 
  for (;;) 
  { 
   if (sj == sj1 || sj == sj2 || sj1 == sj2) 
   { 
    sj1 = rands(); 
    sj2 = rands(); 
   } 
   else 
    break; 
  } 
  a[sj] = shu(); 
  a[sj1] = shu(); 
  a[sj2] = shu(); 
  /*显示*/ 
  prin(a,&score,&scoremax); 
  for (;;) 
  { 
   /* 无回显输入 */ 
   sr = getch(); 
   /* scanf("%d",&n); *//* 记录之前的位置,将用以比较移动是否有效 */ 
   for (j = 0; j < 16; j++) 
    b[j] = a[j]; 
   switch (sr) 
   { 
    /* 向上移动 */ 
   case 72: 
    /* 全部移到上边 */ 
    for (j = 0; j < 4; j++) 
    { 
     for (c = 0; c < 3; c++) 
     { 
      if (a[j] == 0) 
      { 
       a[j] = a[j + 4]; 
       a[j + 4] = 0; 
      } 
      if (a[j + 4] == 0) 
      { 
       a[j + 4] = a[j + 8]; 
       a[j + 8] = 0; 
      } 
      if (a[j + 8] == 0) 
      { 
       a[j + 8] = a[j + 12]; 
       a[j + 12] = 0; 
      } 
     } 
     /* 移到上面后的合并操作 */ 
     if (a[j] == a[j + 4]) 
     { 
      a[j] = a[j] * 2; 
      score = score + a[j]; 
      a[j + 4] = a[j + 8]; 
      a[j + 8] = a[j + 12]; 
      a[j + 12] = 0; 
      if (a[j + 4] == a[j + 8]) 
      { 
       a[j + 4] = 2 * a[j + 4]; 
       score = score + a[j + 4]; 
       a[j + 8] = 0; 
      } 
     } 
     else if (a[j + 4] == a[j + 8]) 
     { 
      a[j + 4] = 2 * a[j + 4]; 
      score = score + a[j + 4]; 
      a[j + 8] = a[j + 12]; 
      a[j + 12] = 0; 
     } 
     else if (a[j + 8] == a[j + 12]) 
     { 
      a[j + 8] = 2 * a[j + 8]; 
      score = score + a[j + 8]; 
      a[j + 12] = 0; 
     } 
     else; 
    } 
    break; 
    /* 向下移动 */ 
   case 80: 
    /* 全部移动到下面 */ 
    for (j = 12; j < 16; j++) 
    { 
     for (c = 0; c < 3; c++) 
     { 
      if (a[j] == 0) 
      { 
       a[j] = a[j - 4]; 
       a[j - 4] = 0; 
      } 
      if (a[j - 4] == 0) 
      { 
       a[j - 4] = a[j - 8]; 
       a[j - 8] = 0; 
      } 
      if (a[j - 8] == 0) 
      { 
       a[j - 8] = a[j - 12]; 
       a[j - 12] = 0; 
      } 
     } 
     /* 移到下面后的合并操作 */ 
     if (a[j] == a[j - 4]) 
     { 
      a[j] = a[j] * 2; 
      score = score + a[j]; 
      a[j - 4] = a[j - 8]; 
      a[j - 8] = a[j - 12]; 
      a[j - 12] = 0; 
      if (a[j - 4] == a[j - 8]) 
      { 
       a[j - 4] = 2 * a[j - 4]; 
       score = score + a[j - 4]; 
       a[j - 8] = 0; 
      } 
     } 
     else if (a[j - 4] == a[j - 8]) 
     { 
      a[j - 4] = 2 * a[j - 4]; 
      score = score + a[j - 4]; 
      a[j - 8] = a[j - 12]; 
      a[j - 12] = 0; 
     } 
     else if (a[j - 8] == a[j - 12]) 
     { 
      a[j - 8] = 2 * a[j - 8]; 
      score = score + a[j - 8]; 
      a[j - 12] = 0; 
     } 
     else; 
    } 
    break; 
    /* 向左移动 */ 
   case 75: 
    /* 全部移动到左面 */ 
    for (j = 0; j <= 12; j = j + 4) 
    { 
     for (c = 0; c < 3; c++) 
     { 
      if (a[j] == 0) 
      { 
       a[j] = a[j + 1]; 
       a[j + 1] = 0; 
      } 
      if (a[j + 1] == 0) 
      { 
       a[j + 1] = a[j + 2]; 
       a[j + 2] = 0; 
      } 
      if (a[j + 2] == 0) 
      { 
       a[j + 2] = a[j + 3]; 
       a[j + 3] = 0; 
      } 
     } 
     /* 移到左面后的合并操作 */ 
     if (a[j] == a[j + 1]) 
     { 
      a[j] = a[j] * 2; 
      score = score + a[j]; 
      a[j + 1] = a[j + 2]; 
      a[j + 2] = a[j + 3]; 
      a[j + 3] = 0; 
      if (a[j + 1] == a[j + 2]) 
      { 
       a[j + 1] = 2 * a[j + 1]; 
       score = score + a[j + 1]; 
       a[j + 2] = 0; 
      } 
     } 
     else if (a[j + 1] == a[j + 2]) 
     { 
      a[j + 1] = 2 * a[j + 1]; 
      score = score + a[j + 1]; 
      a[j + 2] = a[j + 3]; 
      a[j + 3] = 0; 
     } 
     else if (a[j + 2] == a[j + 3]) 
     { 
      a[j + 2] = 2 * a[j + 2]; 
      score = score + a[j + 2]; 
      a[j + 3] = 0; 
     } 
     else; 
    } 
    break; 
    /* 向右移动 */ 
   case 77: 
    /* 全部移动到右面 */ 
    for (j = 3; j <= 16; j = j + 4) 
    { 
     for (c = 0; c < 3; c++) 
     { 
      if (a[j] == 0) 
      { 
       a[j] = a[j - 1]; 
       a[j - 1] = 0; 
      } 
      if (a[j - 1] == 0) 
      { 
       a[j - 1] = a[j - 2]; 
       a[j - 2] = 0; 
      } 
      if (a[j - 2] == 0) 
      { 
       a[j - 2] = a[j - 3]; 
       a[j - 3] = 0; 
      } 
     } 
     /* 移到右面后的合并操作 */ 
     if (a[j] == a[j - 1]) 
     { 
      a[j] = a[j] * 2; 
      score = score + a[j]; 
      a[j - 1] = a[j - 2]; 
      a[j - 2] = a[j - 3]; 
      a[j - 3] = 0; 
      if (a[j - 1] == a[j - 2]) 
      { 
       a[j - 1] = 2 * a[j - 1]; 
       score = score + a[j - 1]; 
       a[j - 2] = 0; 
      } 
     } 
     else if (a[j - 1] == a[j - 2]) 
     { 
      a[j - 1] = 2 * a[j - 1]; 
      score = score + a[j - 1]; 
      a[j - 2] = a[j - 3]; 
      a[j - 3] = 0; 
     } 
     else if (a[j - 2] == a[j - 3]) 
     { 
      a[j - 2] = 2 * a[j - 2]; 
      score = score + a[j - 2]; 
      a[j - 3] = 0; 
     } 
     else; 
    } 
    break; 
    /* 重新开始 */ 
   case 'r': 
    for (j = 0; j < 16; j++) 
     a[j] = 0; 
    sj1 = rands(); 
    sj2 = rands(); 
    for (;;) 
    { 
     if (sj1 == sj2) 
     { 
      sj1 = rands(); 
      sj2 = rands(); 
     } 
     else 
      break; 
    } 
    a[sj1] = shu(); 
    a[sj2] = shu(); 
    flag = 0; 
    score = 0; 
    jx = 0; 
    break; 
    /* 退出 */ 
   case 'e': 
    shua(); 
    ct(32,19,15,3,207); 
    printf(" 游戏已退出!"); 
    textcolor(255); 
    gotoxy(0,0); 
    getch(); 
    return 0; 
    break; 
    /* 其他情况(刷新) */ 
   default: 
    ; 
    break; 
  }       
  /*windows下的系统清屏函数*/ 
  //system ("cls"); 
  /* 判断最高分 */ 
  if (score > scoremax) 
   scoremax = score; 
  /* 判断是否胜利(是否含有2048) */ 
  for (j = 0; j < 16; j++) 
  { 
   if (a[j] == 2048 && jx == 0) 
   { 
    /* 胜利时输出游戏结果 */ 
    /*显示*/ 
    prin(a,&score,&scoremax); 
    shua(); 
    ct(20,19,15,3,207); 
    printf(" 游戏胜利!"); 
    textcolor(159); 
    gotoxy(38,19); 
    printf(" Continue    "); 
    textcolor(239); 
    gotoxy(49,20); 
    printf(" Restart "); 
    textcolor(175); 
    gotoxy(49,21); 
    printf(" Exit  "); 
    t=2; 
    an=75; 
    yx=0; 
    for(;;) 
    { 
     an=getch(); 
     switch(an) 
     { 
     case 72: 
      if(t==2) 
      { 
       t=3; 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(38,21); 
     printf(" Exit     "); 
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(47,19); 
     printf("  Continue "); 
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(49,20); 
     printf(" Restart "); 
      } 
      else if(t==1) 
      { 
       t=2; 
       textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(38,19); 
     printf(" Continue    "); 
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(47,20); 
     printf("  Restart "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(49,21); 
     printf(" Exit  "); 
      } 
      else 
      { 
       t=1; 
       textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(38,20); 
     printf(" Restart     "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(47,21); 
     printf("  Exit  ");  
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(49,19); 
     printf(" Continue "); 
      } 
      break; 
     case 80: 
      if(t==2) 
      { 
       t=1; 
        textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(38,20); 
     printf(" Restart     "); 
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(47,19); 
     printf("  Continue "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(49,21); 
     printf(" Exit  "); 
      } 
      else if(t==1) 
      { 
       t=3; 
       textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(38,21); 
     printf(" Exit     "); 
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(47,20); 
     printf("  Restart "); 
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(49,19); 
     printf(" Continue "); 
      } 
      else 
      { 
      t=2; 
      textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(38,19); 
     printf(" Continue    "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(47,21); 
     printf("  Exit  ");  
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(49,20); 
     printf(" Restart "); 
      } 
      break; 
     case '\r': 
      yx=1; 
      break; 
     } 
     if(yx==1) 
     { 
      yx=0; 
      break; 
     } 
    } 
    shua(); 
    textcolor(255); 
    gotoxy(0,0); 
    /* 重新开始游戏 */ 
    if (t == 1) 
    { 
     shua(); 
     pd = 1; 
     x = 0; 
     for (j = 0; j < 16; j++) 
      a[j] = 0; 
     sj1 = rands(); 
     sj2 = rands(); 
     for (;;) 
     { 
      if (sj1 == sj2) 
      { 
       sj1 = rands(); 
       sj2 = rands(); 
      } 
      else 
       break; 
     } 
     a[sj1] = shu(); 
     a[sj2] = shu(); 
     for (j = 0; j < 16; j++) 
      b[j] = a[j]; 
     flag = 0; 
     score = 0; 
     break; 
    } 
    /* 继续游戏 */ 
    else if (t == 2) 
    { 
     jx = 1; 
     shua(); 
    } 
    else 
    { 
     shua(); 
     ct(32,19,15,3,207); 
     printf(" 游戏已退出!"); 
     textcolor(255); 
     gotoxy(0,0); 
     getch(); 
     return 0; 
    } 
   } 
  }       
  /* 决定是否产生新的数及其位置以及游戏是否失败 */ 
  /* flag,pd,x赋初值 */ 
  flag = 0; 
  pd = 1; 
  x = 0; 
  /* 判断移动后是否有空位:pd=0为有空位,pd=1为无空位 */ 
  for (j = 0; j < 16; j++) 
  { 
   if (a[j] == 0) 
    pd = 0; 
  } 
  /* 移动是否有效:x=1有效,x=0无效 */ 
  for (j = 0; j < 16; j++) 
  { 
   if (a[j] != b[j]) 
   { 
    x = 1; 
    break; 
   } 
  } 
  /* 移动有效时且有空位时产生新数 */ 
  if (pd == 0 && x == 1) 
  { 
   for (;;) 
   { 
    sj = rands(); 
    if (a[sj] == 0) 
    { 
     a[sj] = shu(); 
     break; 
    } 
    else; 
   } 
  } 
  /* 游戏是否失败的判定 */ 
  /* 移动后无空位 */ 
  else if (pd != 0) 
  { 
   /* 判断是否还有可合并的项 */ 
   for (j = 0; j < 16; j++) 
   { 
    if (j != 3 && j != 7 && j != 11 && j != 15 && a[j] == a[j + 1]) 
    { 
     flag = flag + 1; 
    } 
    if (j != 12 && j != 13 && j != 14 && j != 15 
     && a[j] == a[j + 4]) 
    { 
     flag = flag + 1; 
    } 
    if (j != 0 && j != 4 && j != 8 && j != 12 && a[j] == a[j - 1]) 
    { 
     flag = flag + 1; 
    } 
    if (j != 0 && j != 1 && j != 2 && j != 3 && a[j] == a[j - 4]) 
    { 
     flag = flag + 1; 
    } 
   }      
   /* 无空位且没有可合并的项时游戏失败 */ 
   if (flag == 0) 
   { 
    /* 失败时输出游戏结果 */ 
    /*显示*/ 
    prin(a,&score,&scoremax); 
    shua(); 
    ct(20,19,15,3,271); 
    printf(" 游戏结束!"); 
    textcolor(240); 
    gotoxy(38,19); 
    printf("Whether continue the game ?"); 
    gotoxy(44,21); 
    printf("@Yes  No"); 
    gotoxy(44,21); 
    t=1; 
    an=75; 
    yx=0; 
    for(;;) 
    { 
     an=getch(); 
     switch(an) 
     { 
     case 75: 
      if(t==1) 
      { 
       t=0; 
       gotoxy(53,21); 
       printf("@"); 
       gotoxy(44,21); 
       printf(" "); 
      } 
      else 
      { 
       t=1; 
       gotoxy(44,21); 
       printf("@"); 
       gotoxy(53,21); 
       printf(" "); 
      } 
      break; 
     case 77: 
      if(t==1) 
      { 
       t=0; 
       gotoxy(53,21); 
       printf("@"); 
       gotoxy(44,21); 
       printf(" "); 
 
      } 
      else 
      { 
       t=1; 
       gotoxy(44,21); 
       printf("@"); 
       gotoxy(53,21); 
       printf(" "); 
      } 
      break; 
     case '\r': 
      yx=1; 
      break; 
     } 
     if(yx==1) 
     { 
      yx=0; 
      break; 
     } 
    } 
    shua(); 
    textcolor(255); 
    gotoxy(0,0); 
    if (t == 1) 
    { 
     for (j = 0; j < 16; j++) 
      a[j] = 0; 
     sj=rands(); 
     sj1 = rands(); 
     sj2 = rands(); 
     for (;;) 
     { 
      if (sj1 ==sj2||sj1==sj||sj2==sj) 
      { 
       sj1 = rands(); 
       sj2 = rands(); 
      } 
      else 
       break; 
     } 
     a[sj]=shu(); 
     a[sj1] = shu(); 
     a[sj2] = shu(); 
     score = 0; 
     jx = 0; 
    } 
    else 
    { 
     shua(); 
     ct(32,19,15,3,207); 
     printf(" 游戏已退出!"); 
     textcolor(255); 
     gotoxy(0,0); 
     getch(); 
     return 0; 
    } 
   } 
  } 
  else; 
  /* 显示结果 */ 
  prin(a,&score,&scoremax); 
 } 
 return 0; 

/*显示函数*/ 
void p(int*a,int i,int x,int y) 

 int x1=x,y1=y; 
 textcolor(col(a+i)); 
 x1=x+(i%4)*7; 
 y1=y+(i/4)*4; 
 gotoxy(x1,y1); 
 printf("  "); 
 gotoxy(x1,y1+1); 
 kg(a+i); 
 gotoxy(x1,y1+2); 
 printf("  "); 
 textcolor(240); 

/*字体空格声明*/ 
void kg(int*a) 

 if(*a==0) 
  printf("  ",*a); 
 else if(*a<10) 
  printf(" %d ",*a); 
 else if(*a<100) 
  printf(" %d ",*a); 
 else if(*a<1000) 
  printf(" %d ",*a); 
 else if(*a<10000) 
  printf("%d ",*a); 
 else 
  printf("%d",*a); 

/*单个颜色返回值*/ 
int col(int*a) 

int co=127; 
if(*(a)==0) 
co=127; 
else if(*(a)==2) 
co=143; 
else if(*(a)==4) 
co=191; 
else if(*(a)==8) 
co=175; 
else if(*(a)==16) 
co=239; 
else if(*(a)==32) 
co=223; 
else if(*(a)==64) 
co=207; 
else if(*(a)==128) 
co=95; 
else if(*(a)==256) 
co=159; 
else if(*(a)==512) 
co=63; 
else if(*(a)==1024) 
co=111; 
else if(*(a)==2048) 
co=79; 
else if(*(a)==4096) 
co=287; 
else 
co=271; 
return co; 

/*标题字幕2048*/ 
void p2048(int x,int y) 

 int i; 
 textcolor(240); 
 gotoxy(0,0); 
 for(i=0;i<=500;i++) 
  { 
   printf("  "); 
  } 
 //2 
 textcolor(207); 
 gotoxy(x,y); 
 printf("   "); 
 gotoxy(x,y+1); 
 printf("   "); 
 gotoxy(x+7,y+2); 
 printf(" "); 
 gotoxy(x+7,y+3); 
 printf(" "); 
 gotoxy(x,y+4); 
 printf("   "); 
 gotoxy(x,y+5); 
 printf("   "); 
 gotoxy(x,y+6); 
 printf(" "); 
 gotoxy(x,y+7); 
 printf(" "); 
 gotoxy(x,y+8); 
 printf("   "); 
 gotoxy(x,y+9); 
 printf("   "); 
 //0 
 textcolor(239); 
 gotoxy(x+13,y); 
 printf("   "); 
 gotoxy(x+13,y+1); 
 printf("   "); 
 gotoxy(x+13,y+2); 
 printf(" "); 
 gotoxy(x+13+7,y+2); 
 printf(" "); 
 gotoxy(x+13,y+3); 
 printf(" "); 
 gotoxy(x+13+7,y+3); 
 printf(" "); 
 gotoxy(x+13,y+4); 
 printf(" "); 
 gotoxy(x+13+7,y+4); 
 printf(" "); 
 gotoxy(x+13,y+5); 
 printf(" "); 
 gotoxy(x+13+7,y+5); 
 printf(" "); 
 gotoxy(x+13,y+6); 
 printf(" "); 
 gotoxy(x+13+7,y+6); 
 printf(" "); 
 gotoxy(x+13,y+7); 
 printf(" "); 
 gotoxy(x+13+7,y+7); 
 printf(" "); 
 gotoxy(x+13,y+8); 
 printf("   "); 
 gotoxy(x+13,y+9); 
 printf("   "); 
 //4 
 textcolor(159); 
 gotoxy(x+26,y); 
 printf(" "); 
 gotoxy(x+26+7,y); 
 printf(" "); 
 gotoxy(x+26,y+1); 
 printf(" "); 
 gotoxy(x+26+7,y+1); 
 printf(" "); 
 gotoxy(x+26,y+2); 
 printf(" "); 
 gotoxy(x+26+7,y+2); 
 printf(" "); 
 gotoxy(x+26,y+3); 
 printf(" "); 
 gotoxy(x+26+7,y+3); 
 printf(" "); 
 gotoxy(x+26,y+4); 
 printf("   "); 
 gotoxy(x+26,y+5); 
 printf("   "); 
 gotoxy(x+26,y+6); 
 printf(" "); 
 gotoxy(x+26,y+7); 
 printf(" "); 
 gotoxy(x+26,y+8); 
 printf(" "); 
 gotoxy(x+26,y+9); 
 printf(" "); 
 //8 
 textcolor(175); 
 for(i=0;i<10;i++) 
 { 
 gotoxy(x+39,y+i); 
 printf("   "); 
 } 
 textcolor(240); 
 gotoxy(x+42,y+2); 
 printf(" "); 
 gotoxy(x+42,y+3); 
 printf(" "); 
 gotoxy(x+42,y+6); 
 printf(" "); 
 gotoxy(x+42,y+7); 
 printf(" "); 
 //长条 
  ct(35,15,20,1,240); 
  printf(" Game Sart"); 
  ct(35,18,20,1,240); 
  printf("How to play"); 
  printf("\n"); 
  printf("\n\n\n               Made by Mr Yan"); 
  gotoxy(35-25,15); 
  textcolor(255); 
  gotoxy(0,0); 

/*画长条函数*/ 
void ct(int x,int y,int l,int k,int c) 

 int i=0,j=0; 
 textcolor(c); 
 gotoxy(x,y); 
 for(i=0;i  { 
 gotoxy(x,y+i); 
 for(j=0;j  { 
 printf(" "); 
 } 
 } 
 gotoxy(x+1,y+k/2); 

void shua(void) 

 gotoxy(0,18); 
 textcolor(255); 
 printf("                 \n"); 
 printf("                 \n"); 
 printf("                 \n"); 
 printf("                 \n"); 
 printf("                 \n"); 
 printf("                 \n"); 
 gotoxy(0,0); 

/*胜利画面测试函数*/ 
int test(void) 

 int i,t,yx; 
 char an; 
  textcolor(240); 
  gotoxy(0,0); 
  for(i=0;i<=500;i++) 
  { 
   printf("  "); 
  } 
  gotoxy(0,0); 
  HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE); 
  CONSOLE_CURSOR_INFO cci; 
  GetConsoleCursorInfo(hOut,&cci); 
  cci.bVisible=FALSE; 
  SetConsoleCursorInfo(hOut,&cci); 
    //printf("\n游戏胜利!t\n重新开始游戏请按1\n继续游戏请按2\n退出请按其他键3\n"); 2 1 3 
                      
/* 
 2 继续选中 textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(38,19); 
     printf(" Continue    "); 
 
 2 继续平常 textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(49,19); 
     printf(" Continue "); 
 
 1 重新选中 textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(38,20); 
     printf(" Restart     "); 
 
 1 重新平常 textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(49,20); 
     printf(" Restart "); 
 
 3 退出选中 textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(38,21); 
     printf(" Exit     "); 
 
 3 退出平常 textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(49,21); 
     printf(" Exit  "); 
   //  0000000000000000000000000 24  
  */ 
    shua(); 
    ct(20,19,15,3,207); 
    printf(" 游戏胜利!"); 
    textcolor(159); 
    gotoxy(38,19); 
    printf(" Continue    "); 
 
    textcolor(239); 
    gotoxy(49,20); 
    printf(" Restart "); 
    textcolor(175); 
    gotoxy(49,21); 
    printf(" Exit  "); 
    t=2; 
    an=75; 
    yx=0; 
    for(;;) 
    { 
     an=getch(); 
     switch(an) 
     { 
     case 72: 
      if(t==2) 
      { 
       t=3; 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(38,21); 
     printf(" Exit     "); 
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(47,19); 
     printf("  Continue "); 
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(49,20); 
     printf(" Restart "); 
      } 
      else if(t==1) 
      { 
       t=2; 
       textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(38,19); 
     printf(" Continue    "); 
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(47,20); 
     printf("  Restart "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(49,21); 
     printf(" Exit  "); 
      } 
      else 
      { 
       t=1; 
       textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(38,20); 
     printf(" Restart     "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(47,21); 
     printf("  Exit  ");  
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(49,19); 
     printf(" Continue "); 
      } 
      break; 
     case 80: 
      if(t==2) 
      { 
       t=1; 
        textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(38,20); 
     printf(" Restart     "); 
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(47,19); 
     printf("  Continue "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(49,21); 
     printf(" Exit  "); 
      } 
      else if(t==1) 
      { 
       t=3; 
       textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(38,21); 
     printf(" Exit     "); 
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(47,20); 
     printf("  Restart "); 
     textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(49,19); 
     printf(" Continue "); 
      } 
      else 
      { 
      t=2; 
      textcolor(240); 
     gotoxy(36,19); 
     printf("       "); 
     textcolor(159); 
     gotoxy(38,19); 
     printf(" Continue    "); 
     textcolor(240); 
     gotoxy(36,21); 
     printf("       "); 
     textcolor(175); 
     gotoxy(47,21); 
     printf("  Exit  ");  
     textcolor(240); 
     gotoxy(36,20); 
     printf("       "); 
     textcolor(239); 
     gotoxy(49,20); 
     printf(" Restart "); 
      } 
      break; 
     case '\r': 
      yx=1; 
      break; 
     } 
     if(yx==1) 
     { 
      yx=0; 
      break; 
     } 
    } 
    shua(); 
    textcolor(255); 
    gotoxy(0,0); 
    textcolor(240); 
    if(t==2) 
     printf("Continue  "); 
    else if(t==1) 
     printf("Restart  "); 
    else 
     printf("Exit   "); 
    return 0; 

本文实例为大家分享了C语言实现2048游戏的具体代码,供大家参考,具体内容如下

大一时学c语言写的,写的不好但当时感觉还行。

环境运行 vc6.0 ,cpp文件。

基本上是c写的,但是改变字体颜色,在控制台移动光标等等好像不是c中的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持玩游网

你可能感兴趣的:(c++,游戏引擎)