qinzilong 发表于 2022-1-8 20:06:54

贪吃蛇小游戏,此代码是在手机版C语言编译器上写的,望大佬指正

//———作者:情癫大圣
//vvvvvvvv头文件vvvvvvvv
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
// vvvvvvvv函数申明vvvvvvvvv
void ta1();// 图案1
void ta2();// 图案2
void kscd();// 开始菜单1
void szcd();// 设置菜单1
void bzcd();// 帮助菜单1
void tchm();// 退出画面1
void dysy();// 游戏打印1
void csss();// 初始蛇身1
void yxkz();// 游戏键盘控制1
void sssj();// 蛇身数据1
void sjsw();// 随机食物1
void ztjm();// 暂停界面1
void yxgz();//游戏规则1
// vvvvvvvvv全局变量声明vvvvvvvv
int jx =39, jy = 20;// 界面宽高
struct
{
    int x;
    int y;
    int c;
} ss;//蛇的坐标和长度
int df;// 游戏得分
int sx, sy;// 食物坐标
int x, y;// 蛇头坐标
char x1,y2;// 键盘输入数据
int nd = 2;// 游戏难度
int pd;//游戏状态
long sj;// 游戏开始时间
// vvvvvvvvv具体函数vvvvvvvv
void ztjm()//暂停界面
{
    long c = time(NULL);//计时
    if (y2 == ' ')
    {
      for (int c = 8; c > 0; c--) //动画
      {
            clrscr();// 清屏
            usleep(10000);// 延时
            gotoxy(1, 8 - c);
            ta1();//图案1
            gotoxy(16, 10 - c);
            printf("游戏暂停中-----");
            gotoxy(jx / 2 - 16, 13 - c);
            printf("————在");
            if (nd == 1)
                printf("简单模式");
            if (nd == 2)
                printf("一般模式");
            if (nd == 3)
                printf("困难模式");
            if (nd == 4)
                printf("地狱模式");
            printf("中你获得了< %d >分————", df);
            gotoxy(jx / 2 - 11, 16 - c);
            printf("继续游戏\t退出游戏");
      }
      int b = getch();
      switch (b)
      {
      case '3'://退出
            pd = 1;
            break;
      case '1':
//继续
            break;
      default:
            ztjm();//递归
      }
      y2 = '0';
      sj = sj - (c - time(NULL));//减去暂停计时的时间
    }
}
void yxgz() // 食物刷新与得分游戏规则
{
    if (nd > 2) //难度大与2判断撞墙
    {
      if (x== 1 ||x== jx ||y== 2 || y== jy)
// 判断蛇有没有与墙坐标重合
            pd = 3;
    }
    else//否则穿墙
    {
      if (x == 1)
            x = jx-1 ;
      if (x == jx)
            x = 2;
      if (y == 2)
            y = jy - 1;
      if (y == jy)
            y = 3;
    }
    if (nd > 1) //难度大于1判断
    {
      for (int q = 1; q < ss.c; q++)
      {   // 判断有没有蛇头有没有与蛇身重合
            if (ss.x == x && ss.y == y)
                pd = 2;
      }
    }
    if (x == sx && y == sy)
    {   //判断蛇头与食物重合刷新食物
      sjsw();//随机食物函数
      ss.c = ++ss.c;//蛇身长度增加
      df += 10;//分数增加
    }
    if (nd == 4)//难度4变速
      usleep(130000 - (df * 200));
    else
      usleep(200000 - (df * 100));
}
void dysy()// 打印所有数据
{
    clrscr();//清屏
    while (pd < 1)//判断游戏状态循环
    {
      yxkz();//游戏控制函数
      yxgz();//游戏规则函数
      sssj();//蛇身数据函数
      ztjm();//暂停界面函数
      gotoxy(1, 1);
      printf("§∩﹏∩ ");
      if (nd == 1)
            printf("简单模式");
      if (nd == 2)
            printf("一般模式");
      if (nd == 3)
            printf("困难模式");
      if (nd == 4)
            printf("地狱模式");
      printf("‖得分:%d",df);
      gotoxy(24,1);
      printf("分‖时间:%d ",(time(NULL) - sj) / 60);
      gotoxy(34,1);//游戏时间
      printf("分%d秒", (time(NULL) - sj) % 60);
      for (int o = 1; o <= jx; o++)
            for (int p = 2; p <= jy; p++)
            {   //遍历打印边框背景
                if (o == 1 || o == jx || p == 2 || p == jy) {
                  gotoxy(o, p);
                  printf("■");//边框图形
                } else {
                  gotoxy(o, p);
                  printf("□");//背景图形
                }
                for (int q = ss.c - 1; 0 <= q; q--)
                {   //遍历打印蛇
                  if (ss.x == o && ss.y == p)
                  {
                        gotoxy(o, p);
                        printf("◆");//蛇身图形
                  }
                  if (ss.x == o && ss.y == p)
                  {
                        gotoxy(o, p);
                        printf("●");//蛇头图形
                  }
                }
                if (sx == o && sy == p)
                {
                  gotoxy(o, p);
                  printf("■");//食物图形
                }
            }
      gotoxy(1,jy+1);
      printf("X=%d Y=%d",sx,sy);
      gotoxy(10,jy+1);
      printf("‖空格暂停 上下左右",x,y);
      gotoxy(1,1);
    }
}
void sssj()// 蛇身数据函数
{
    for (int t = ss.c - 1; t > 0; t--)
    {   //从蛇尾遍历蛇,蛇尾=前一位数据
      ss.x = ss.x;
      ss.y = ss.y;
    }
    ss.x = x;//蛇头等于游戏控制函数返回的xy
    ss.y = y;
}
void csss()// 初始蛇身函数
{
    ss.c =6;//初始蛇长
    for (int s = 0; s < ss.c; s++)
    {   //遍历蛇附值
      ss.x = jx / 2 - s;
      ss.y = jy / 2;
    }
    x = jx / 2;//初始蛇头坐标xy在地图中间
    y = jy / 2;//
}
void sjsw()// 随机食物
{
    srand((unsigned)time(NULL));//随机数种子
    int swx =(rand() % (jx - 1) + 1) + 1;
    int swy =(rand() % (jy - 3) + 1) + 2;
    for (int s = 0; s < ss.c; s++) {
      if (ss.x != swx || ss.y != swy)
      {   //判断食物与蛇是否重合
            sx = swx;
            sy = swy;
      } else//重合重新生成
      {
            usleep(100);// 延时作用:没有这个一直递归会报错
            sjsw();//递归
      }
    }
}
void yxkz()// 游戏键盘控制
{
    if (_kbhit())// 判断有无输入
    {
      y2 = _getch();// 提取输入字符
    }
    if (y2 == '2' || y2 == '4' || y2 == '8' || y2 == '6')
      // 判断是不是输入的是方向
    {
      if (x1 == '4' && y2 != '6')// 蛇不能倒着走
            x1 = y2;
      if (x1 == '8' && y2 != '2')
            x1 = y2;
      if (x1 == '6' && y2 != '4')
            x1 = y2;
      if (x1 == '2' && y2 != '8')
            x1 = y2;
    }
    if (x1 == '6')//控制蛇头xy移动
      x = ++x;
    else if (x1 == '4')
      x = --x;
    else if (x1 == '8')
      y = ++y;
    else if (x1 == '2')
      y = --y;
}
void bzcd()// 帮助菜单函数
{
    clrscr();// 清屏
    for (int v = 16; v > 0; v--)//动画
    {
      usleep(15000);// 延时
      clrscr();// 清屏
      gotoxy(1, 18 - v);
      ta1();//图案1
    }
    gotoxy(jx / 2 - 3, 19);
    printf("作者:情癫大圣");
    gotoxy(jx / 2 - 13, 14);
    printf("暂时没有其他帮助自己瞎鼓捣吧!!!");
    gotoxy(jx / 2 - 2, 3);
    printf("难度说明:");
    gotoxy(jx / 2 - 10, 6);
    printf("简单:√穿墙 √咬自己 慢速度");
    gotoxy(jx / 2 - 10, 8);
    printf("一般:√穿墙 ×咬自己 慢速度");
    gotoxy(jx / 2 - 10, 10);
    printf("困难:×穿墙 ×咬自己 慢速度");
    gotoxy(jx / 2 - 10, 12);
    printf("地狱:×穿墙 ×咬自己 快速度");
    getch();
}
void szcd()// 设置菜单
{
    clrscr();// 清屏
    for (int a = 16; a > 0; a--) //动画
    {
      usleep(15000);// 延时
      clrscr();// 清屏
      gotoxy(1, 1 + a);
      ta1();//图案1
    }
    gotoxy(jx / 2 - 5, 8);
    printf("当前难度:< %d >", nd);
    gotoxy(jx / 2 - 9, 11);
    printf("简单\t一般");
    gotoxy(jx / 2 - 9, 13);
    printf("困难\t地狱");
    gotoxy(jx / 2 - 5, 16);
    printf("输入数学选择");
    int xz = getch();
    switch (xz)
    {
    case '1':
      nd = 1;
      kscd();//开始菜单函数
      break;
    case '2':
      nd = 2;
      kscd();//开始菜单函数
      break;
    case '3':
      nd = 3;
      kscd();//开始菜单函数
      break;
    case '4':
      nd = 4;
      kscd();//开始菜单函数
      break;
    default:
      szcd();//递归
    }
}
void tchm()// 退出画面
{
    for (int a = 8; a > 0; a--)
    {
      usleep(15000);// 延时
      clrscr();// 清屏
      gotoxy(1, 8 - a);
      ta1();//图案1
    }
    if (pd <1)
    {
      gotoxy(jx / 2 - 9, 14);
      printf("———作者:情癫大圣———");
      gotoxy(jx / 2 - 11, 18);
      printf("返回主页\t确认退出");
      char b = getch();
      switch (b)
      {
      case '3':
            gotoxy(jx / 2 - 11, 14);
            break;
      case '1':
            pd = 0;
            kscd();//开始菜单函数
            break;
      default:
            tchm();//递归
      }
    }
    else {
      gotoxy(jx / 2 - 16, 13 );
      printf("————在");
      if (nd == 1)
            printf("简单模式");
      if (nd == 2)
            printf("一般模式");
      if (nd == 3)
            printf("困难模式");
      if (nd == 4)
            printf("地狱模式");
      printf("中你获得了< %d >分————", df);
      gotoxy(jx / 2 - 3, 9 );
      printf("————GAME—OVER————");
      gotoxy(jx / 2 - 12,15);
      printf("蛇身长度:%d,游戏时间:%d分%d秒",ss.c-1,(time(NULL) - sj) / 60, (time(NULL) - sj) % 60);
      gotoxy(jx / 2 - 9, 17 );
      if(pd==3)
            printf("———— 蛇撞到了墙上 ————");
      else
      {
            if(pd==2)
                printf("———— 蛇吃掉了自己 ————");
            else
                printf("———作者:情癫大圣———");
      }
      gotoxy(jx / 2 - 5, 20 );
      printf("空格键返回主页");
      while(getch()!=' ');
      pd = 0;
      kscd();//开始菜单函数
    }
}
void ta1()// 图案1
{
    printf("       §∩﹏∩\n");
    printf("       ╭︿︿╮╭─☆─★─☆─★─☆─★─☆─★─☆─╮\n");
    printf("       ╰────╯< Gluttonous Snake │\n");
    printf("       ╰─○○─╯╰─★─☆─★─☆─★─☆─★─☆─★─╯\n");
}
void ta2()// 图案2
{
    printf("   Y \n");
    printf("    /^\\ \n");
    printf("   (⊙⊙) \n");
    printf("    \\/ \n");
    printf("    || \n");
    printf("    \\\\ \n");
    printf("   \\\\\n");
    printf("   // \n");
    printf("    //\n");
    printf("   //\n");
    printf("   \\\\\n");
    printf("    \\\\ \n");
    printf("   \n");
}
void kscd()// 开始菜单
{
    clrscr();// 清屏
    for (int a = 16; a > 0; a--) //动画
    {
      usleep(15000);// 延时
      clrscr();// 清屏
      gotoxy(1, 1 + a);
      ta1();//图案1
    }
    gotoxy(1, 6);
    ta2();//图案2
    gotoxy(jx / 2 - 7, 6);
    printf("欢迎来到贪吃蛇大作战");
    gotoxy(jx / 2 - 3, 8);
    printf("开始游戏");
    gotoxy(jx / 2 - 3, 10);
    printf("难度设置< %d >", nd);
    gotoxy(jx / 2 - 3, 12);
    printf("游戏说明");
    gotoxy(jx / 2 - 3, 14);
    printf("退出游戏");
    gotoxy(jx / 2 - 3, 16);
    printf("输入数学选择");
    int xz = getch();
    switch (xz)
    {
    case '1':
      sj = time(NULL);//初始游戏时间
      y2='0';//初始键盘输入数据
      df = 0;//初始得分
      pd = 0;//初始游戏状态
      x1 = '6';//初始蛇移动方向
      csss();//初始蛇身函数
      sjsw();//初始食物
      dysy();//打印数据函数
      tchm();//退出画面函数
      break;
    case '2':
      szcd();//设置菜单函数
      break;
    case '3':
      bzcd();// 帮助菜单函数
      kscd();//递归
      break;
    case '4':
      tchm();//退出菜单函数
      break;
    default:
      kscd();//递归
    }
}
int main()// 主函数
{   //关闭光标显示 弄懂
    fprintf(stdout,"\033[?25l");// 关闭鼠标显示
    kscd();//开始菜单函数
    for (int a = 8; a > 0; a--)//动画
    {
      clrscr();// 清屏
      gotoxy(1, 8 - a);
      ta1();//图案1
      gotoxy(jx / 2 - 3, 10 - a);
      printf("下 次 再 见 !");
      usleep(20000);// 延时
    }
    gotoxy(1, jy - 3);
    return 0;//退出
}

Python初学者8号 发表于 2022-1-8 20:17:54

我看不懂 但是我打我震撼
页: [1]
查看完整版本: 贪吃蛇小游戏,此代码是在手机版C语言编译器上写的,望大佬指正