如何运用C语言制作猜数字小游戏?



  之前做课程设计无意中发现了这个好玩的游戏,于是就抱着做着玩的心态开始用c写这个东西,虽然东西不够精致,但是也没有太大瑕疵,希望各位大神们能给出点意见,也希望这篇小代码能给您帮助。(ps:游戏排行榜只能存储当下游戏的成绩,若退出则清空成绩)


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
void action0();
void action1();//游戏区
void action2();//排行榜
void action3();//帮助
void action4();//作弊
void action5();//退出游戏
void action6();//作弊初级
void action7();//作弊中级
void action8();//作弊高级
int i;
struct game//结构
{
 int scorce;//成绩
 char name[100];//姓名
}paihangbang[9];
void input()//输入默认的成绩和姓名10个
{
 for (i=0;i<10;i++)
 {
  paihangbang[i].scorce=10;
  strcpy(paihangbang[i].name,"菜鸟i");
 }
}
void action1()
{
 system("CLS");
 int a,b,c,d,e,f,g,h,x,p;
 int z;
 char c1;
 srand(time(NULL));//产
 a=1+(rand()%9);   //生
 b=1+(rand()%9);   //随
 c=1+(rand()%9);   //机
 d=1+(rand()%9);   //数
 e=a+b+c+d;
 printf("***************************************\n        游戏开始       \n   *****************************\n");
 printf("随机产生的四个十以内的数字之和为:\n%d\n",e);
 printf("请正确蒙出这四个随机数字的值和位置顺序\n");
  for (x=1;x<11;x++)//十次循环
  {
   scanf("%d%d%d%d",&f,&g,&h,&i);
   system("CLS");
  if (a==f&&b==g&&c==h&&d==i)
 {
        printf("恭喜您,蒙对了!!!\n");
  break;
 }
  else
  {
   printf("对不起,您蒙的答案错误,请重新蒙\n");
  }
 }
 if (x<10)
 {
 printf("游戏成功\n您的分数为:%d\n",x);
 for (i=0;i<10;i++)
 {
 if (x<paihangbang[i].scorce)
 {
  printf("恭喜您获得了进入排行榜的资格,是否加入排行榜同大师们一较高下?\n1.YES!!!\n2.NO!!!\n");
  scanf("%d",&z);
  c1=getchar();
  system("CLS");
  if (z==1)
  {
   paihangbang[i].scorce=x;//把成绩输进结构体
   printf("请输入姓名:\n");
   scanf("%s",&paihangbang[i].name);
   c1=getchar();
   system("CLS");
   break;
  }
 }
  else if (z==2)
  {
   printf("很遗憾,您错失了机会\n");
  }
 }
 }
 else
 {
  printf("真正的答案为:%d %d %d %d",a,b,c,d);
  printf("游戏失败\n辣鸡,智商是硬伤啊哈哈哈哈哈\n");
 }
 printf("请选择继续游戏、返回菜单或者退出游戏\n1.继续游戏\n2.菜单\n0.退出游戏\n");
 scanf("%d",&p);
 c1=getchar();
 system("CLS");
 if (p==1)
  action1();
 else
  if (p==0)
   printf("谢谢您的光临\n祝您生活愉快\n再见:-D\n");
  else if (p==2)
   action0();
}
void action2()
{
 system("CLS");
 int p;
 char c;
 printf("                        排行榜                    \n");
 for (i=0;i<10;i++)
 {
  printf("第%d位:      %d            %s      \n",i+1,paihangbang[i].scorce,paihangbang[i].name);
 }
 printf("请选择返回菜单或者退出游戏\n\n1.菜单\n0.退出游戏\n");
 scanf("%d",&p);
 c=getchar();
 system("CLS");
  if (p==0)
   printf("谢谢您的光临\n祝您生活愉快\n再见:-D\n");
  else if (p==1)
  action0();
}
void action3()
{
 system("CLS");
 int p,l,z;
 char c;
 printf("尊敬的有序用户您好\n如果您选择“帮助”选项\n这说明您根本没玩过此类游戏或者对此游戏规则毫不清楚\n不过请放心\n既然您点击了这个选项\n`````````````````````\n也不会给您提供帮助的哈哈哈哈菜鸟\n");
 printf("\n请给此游戏打分服务\n1.满意\n2.非常满意\n3.特别满意\n4.真辣鸡\n");
    scanf("%d",&p);
 system("CLS");
 if (p==4)
  printf("说你辣鸡你还不服气了?\n    菜鸟哈哈哈哈\n");
 else
  if (p==1)
  {
   printf("请选择3特别满意\n谢谢\n");
   scanf("%d",&l);
   system("CLS");
   if (l==3)
    printf("游戏规则如下:\n\n有四个数字\n您有10此机会猜这4个数字的值和位置\n若在十次之内猜对\n则游戏成功\n否则游戏失败\n您将收到来自在下的无情嘲讽\n成绩计算按你用的次数计算\n猜的次数越少成绩越高\n");
    else
    printf("不听话是不会告诉你规则的哈哈哈哈\n");
  }
  else
   if (p==2)
{
   printf("请选择3特别满意\n谢谢\n");
   scanf("%d",&l);
   system("CLS");
   if (l==3)
    printf("游戏规则如下:\n\n有四个数字\n您有10此机会猜这4个数字的值和位置\n若在十次之内猜对\n则游戏成功\n否则游戏失败\n您将收到来自在下的无情嘲讽\n成绩计算按你用的次数计算\n猜的次数越少成绩越高\n");
    else
    printf("你丫的就是个辣鸡!!!\n");
  }
   else
    if (p==3)
     printf("游戏规则如下:\n有四个数字\n您有10此机会猜这4个数字的值和位置\n若在十次之内猜对\n则游戏成功\n否则游戏失败\n您将收到来自在下的无情嘲讽\n成绩计算按你用的次数计算\n猜的次数越少成绩越高\n");
    else printf("菜鸟瞎输什么?\n");
 printf("请选择返回菜单或者退出游戏\n1.菜单\n0.退出游戏\n");
 scanf("%d",&z);
 c=getchar();
 system("CLS");
 if (z==1)
  action0();
 else
  if (z==0)
   printf("谢谢您的光临\n祝您生活愉快\n再见:-D\n");

}
void action4()
{
 system("CLS");
 int p,l;
 char c;
 printf("作弊功能开启\n");
 printf("请选择继续游戏、返回菜单或者退出游戏\n1.继续游戏\n2.菜单\n0.退出游戏\n");
 scanf("%d",&p);
 c=getchar();
 system("CLS");
 if (p==1)
 {

  printf("请选择要使用的作弊等级\n1.初级\n2.初级\n3.高级\n");
  scanf("%d",&l);
  if (l==1)
  {
   system("CLS");
   action6();
  }
  else if (l==2)
  {
   system("CLS");
   action7();
  }
  else if (l==3)
  {
   system("CLS");
   action8();
  }
  else printf("输入指令有误\n");
 }
 else
  if (p==0)
   printf("谢谢您的光临\n祝您生活愉快\n再见:-D\n");
  else if (p==2)
   action0();
}
void action5()
{
 printf("再见\n");
}
void action0()
{
 char start,c;
    printf("***************************\n    猜数字游戏    \n**********************\n");
 printf("\n\n\n      A.开始游戏\n      B.排行榜\n      C.帮助\n      D.作弊\n      E.退出游戏\n");
 scanf("%c",&start);
 c=getchar();
 switch (start)
 {
 case 'A':action1();break;
 case 'B':action2();break;
 case 'C':action3();break;
 case 'D':action4();break;
    case 'E':action5();break;
 default:putchar('\a');
 }
}
void action6()
{
 int a,b,c,d,e,f,g,h,x,y,p,z;
 char c1;
 srand(time(NULL));
 a=1+(rand()%9);
 b=1+(rand()%9);
 c=1+(rand()%9);
 d=1+(rand()%9);
 e=a+b+c+d;
 printf("***************************************\n        游戏开始       \n   *****************************\n");
 printf("随机产生的四个十以内的数字之和为:\n%d\n",e);
 printf("请正确蒙出这四个随机数字的值和位置顺序\n");
 printf("第一个数字是%d\n请继续\n",a);
 for (x=1;x<11;x++)
  {
   scanf("%d%d%d%d",&f,&g,&h,&i);
   system("CLS");
  if (a==f&&b==g&&c==h&&d==i)
 {
        printf("恭喜您,蒙对了!!!\n");
  break;
 }
  else
  {
   printf("对不起,您蒙的答案错误,请重新蒙\n");
  }
 }
 if (x<10)
 {
 printf("游戏成功\n您的分数为:%d\n",x);
 for (i=0;i<10;i++)
 {
 if (x<paihangbang[i].scorce)
 {
  printf("恭喜您获得了进入排行榜的资格,是否加入排行榜同大师们一较高下?\n1.YES!!!\n2.NO!!!\n");
  scanf("%d",&z);
  system("CLS");
  if (z==1)
  {
   paihangbang[i].scorce=x;
   printf("请输入姓名:\n");
   scanf("%s",&paihangbang[i].name);
   c1=getchar();
   system("CLS");
   break;
  }
 }
  else if (z==2)
  {
   printf("很遗憾,您错失了机会\n");
  }
 }
 }
 else
 {
  printf("真正的答案为:%d %d %d %d",a,b,c,d);
  printf("游戏失败\n辣鸡,智商是硬伤啊哈哈哈哈哈\n");
 }
 printf("请选择继续游戏、返回菜单或者退出游戏\n1.继续游戏\n2.菜单\n0.退出游戏\n");
 scanf("%d",&p);
 c1=getchar();
 system("CLS");
 if (p==1)
  action1();
 else
  if (p==0)
   printf("谢谢您的光临\n祝您生活愉快\n再见:-D\n");
  else if (p==2)
   action0();

}
void action7()
{
 int a,b,c,d,e,f,g,h,i,x,y,p,z;
 char c1;
 srand(time(NULL));
 a=1+(rand()%9);
 b=1+(rand()%9);
 c=1+(rand()%9);
 d=1+(rand()%9);
 e=a+b+c+d;
 printf("***************************************\n        游戏开始       \n   *****************************\n");
 printf("随机产生的四个十以内的数字之和为:\n%d\n",e);
 printf("请正确蒙出这四个随机数字的值和位置顺序\n");
 printf("前两个数字是%d %d \n请继续\n",a,b);
 for (x=1;x<11;x++)
  {
   scanf("%d%d%d%d",&f,&g,&h,&i);
   system("CLS");
  if (a==f&&b==g&&c==h&&d==i)
 {
        printf("恭喜您,蒙对了!!!\n");
  break;
 }
  else
  {
   printf("对不起,您蒙的答案错误,请重新蒙\n");
  }
 }
 if (x<10)
 {
 printf("游戏成功\n您的分数为:%d\n",x);
 for (i=0;i<10;i++)
 {
 if (x<paihangbang[i].scorce)
 {
  printf("恭喜您获得了进入排行榜的资格,是否加入排行榜同大师们一较高下?\n1.YES!!!\n2.NO!!!\n");
  scanf("%d",&z);
  system("CLS");
  if (z==1)
  {
   paihangbang[i].scorce=x;
   printf("请输入姓名:\n");
   scanf("%s",&paihangbang[i].name);
   c1=getchar();
   system("CLS");
   break;
  }
 }
  else if (z==2)
  {
   printf("很遗憾,您错失了机会\n");
  }
 }
 }
 else
 {
  printf("真正的答案为:%d %d %d %d",a,b,c,d);
  printf("游戏失败\n辣鸡,智商是硬伤啊哈哈哈哈哈\n");
 }
 printf("请选择继续游戏、返回菜单或者退出游戏\n1.继续游戏\n2.菜单\n0.退出游戏\n");
 scanf("%d",&p);
 c1=getchar();
 system("CLS");
 if (p==1)
  action1();
 else
  if (p==0)
   printf("谢谢您的光临\n祝您生活愉快\n再见:-D\n");
  else if (p==2)
   action0();
}
void action8()
{
 int a,b,c,d,e,f,g,h,i,x,y,p,z;
 char c1;
 srand(time(NULL));
 a=1+(rand()%9);
 b=1+(rand()%9);
 c=1+(rand()%9);
 d=1+(rand()%9);
 e=a+b+c+d;
 printf("***************************************\n        游戏开始       \n   *****************************\n");
 printf("随机产生的四个十以内的数字之和为:\n%d\n",e);
 printf("请正确蒙出这四个随机数字的值和位置顺序\n");
 printf("前三个数字是%d %d %d \n请继续\n",a,b,c);
 for (x=1;x<11;x++)
  {
   scanf("%d%d%d%d",&f,&g,&h,&i);
   system("CLS");
  if (a==f&&b==g&&c==h&&d==i)
 {
        printf("恭喜您,蒙对了!!!\n");
  break;
 }
  else
  {
   printf("对不起,您蒙的答案错误,请重新蒙\n");
  }
 }
 if (x<10)
 {
 printf("游戏成功\n您的分数为:%d\n",x);
 for (i=0;i<10;i++)
 {
 if (x<paihangbang[i].scorce)
 {
  printf("恭喜您获得了进入排行榜的资格,是否加入排行榜同大师们一较高下?\n1.YES!!!\n2.NO!!!\n");
  scanf("%d",&z);
  system("CLS");
  if (z==1)
  {
   paihangbang[i].scorce=x;
   printf("请输入姓名:\n");
   scanf("%s",&paihangbang[i].name);
   c1=getchar();
   system("CLS");
   break;
  }
 }
  else if (z==2)
  {
   printf("很遗憾,您错失了机会\n");
  }
 }
 }
 else
 {
  printf("真正的答案为:%d %d %d %d",a,b,c,d);
  printf("游戏失败\n辣鸡,智商是硬伤啊哈哈哈哈哈\n");
 }
 printf("请选择继续游戏、返回菜单或者退出游戏\n1.继续游戏\n2.菜单\n0.退出游戏\n");
 scanf("%d",&p);
 c1=getchar();
 system("CLS");
 if (p==1)
  action1();
 else
  if (p==0)
   printf("谢谢您的光临\n祝您生活愉快\n再见:-D\n");
  else if (p==2)
   action0();
}
int main()
{
 input();
 action0();
 return 0;
}

好的,制作2048小游戏的基本思路如下: 1. 定义游戏界面:可以使用二维数组来表示游戏面板,每个元素表示该位置上的数字。 2. 定义游戏逻辑:根据玩家的操作,移动数字并合并相同数字。 3. 定义游戏结束条件:当游戏面板填满且无法继续合并数字时,游戏结束。 下面是一个简单的C语言实现: ``` #include <stdio.h> #include <stdlib.h> #include <time.h> #define ROW 4 #define COL 4 // 游戏界面 int board[ROW][COL]; // 初始化游戏界面 void init_board() { int i, j; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { board[i][j] = 0; } } } // 在空白位置上随机生成数字 void generate_number() { int i, j; int count = 0; int empty_pos[ROW * COL][2]; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (board[i][j] == 0) { empty_pos[count][0] = i; empty_pos[count][1] = j; count++; } } } if (count == 0) { return; } int pos = rand() % count; int value = (rand() % 2 + 1) * 2; // 随机生成2或4 board[empty_pos[pos][0]][empty_pos[pos][1]] = value; } // 移动数字 void move(int x1, int y1, int x2, int y2) { if (board[x2][y2] == 0) { board[x2][y2] = board[x1][y1]; board[x1][y1] = 0; } else if (board[x2][y2] == board[x1][y1]) { board[x2][y2] *= 2; board[x1][y1] = 0; } } // 向上移动数字 void move_up() { int i, j, k; for (j = 0; j < COL; j++) { k = 0; for (i = 1; i < ROW; i++) { if (board[i][j] != 0) { for (; k < i; k++) { if (board[k][j] == 0) { move(i, j, k, j); break; } else if (board[k][j] == board[i][j]) { move(i, j, k, j); k++; break; } } } } } } // 向下移动数字 void move_down() { int i, j, k; for (j = 0; j < COL; j++) { k = ROW - 1; for (i = ROW - 2; i >= 0; i--) { if (board[i][j] != 0) { for (; k > i; k--) { if (board[k][j] == 0) { move(i, j, k, j); break; } else if (board[k][j] == board[i][j]) { move(i, j, k, j); k--; break; } } } } } } // 向左移动数字 void move_left() { int i, j, k; for (i = 0; i < ROW; i++) { k = 0; for (j = 1; j < COL; j++) { if (board[i][j] != 0) { for (; k < j; k++) { if (board[i][k] == 0) { move(i, j, i, k); break; } else if (board[i][k] == board[i][j]) { move(i, j, i, k); k++; break; } } } } } } // 向右移动数字 void move_right() { int i, j, k; for (i = 0; i < ROW; i++) { k = COL - 1; for (j = COL - 2; j >= 0; j--) { if (board[i][j] != 0) { for (; k > j; k--) { if (board[i][k] == 0) { move(i, j, i, k); break; } else if (board[i][k] == board[i][j]) { move(i, j, i, k); k--; break; } } } } } } // 判断游戏是否结束 int is_game_over() { int i, j; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (board[i][j] == 0) { return 0; } if (i > 0 && board[i][j] == board[i-1][j]) { return 0; } if (j > 0 && board[i][j] == board[i][j-1]) { return 0; } } } return 1; } // 打印游戏界面 void print_board() { int i, j; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { printf("%d\t", board[i][j]); } printf("\n"); } } int main() { srand(time(NULL)); // 随机数种子 init_board(); generate_number(); generate_number(); print_board(); while (!is_game_over()) { char c = getchar(); switch (c) { case 'w': move_up(); break; case 's': move_down(); break; case 'a': move_left(); break; case 'd': move_right(); break; default: continue; } generate_number(); print_board(); } printf("Game over!\n"); return 0; } ``` 以上是一个简单的2048游戏C语言实现,代码中可能存在一些问题,仅供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值