鱼C论坛

 找回密码
 立即注册
查看: 1234|回复: 0

[技术交流] C语言写的简单的贪吃蛇小游戏,建议用C++编译器编译。

[复制链接]
发表于 2019-10-15 01:36:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <iostream>

#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
#define MAX 1000
#define high 40
#define wigh 50
//食物的属性
struct s
{
  int x,y;
}food;
//蛇的属性
struct crd
{
   int x,y;
};
struct d
{
  struct crd bold[MAX];
  int size;
  char go_where;
}snack;
  char snack_c;//存放蛇当期的方向;
  int flag=1;//食物被啃标志;
  int count=0;//分数记录
//定位光标。
  void get_x_y(int x,int y)
{
    HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
coord. X=x;coord. Y=y;
SetConsoleCursorPosition(handle,coord);
}
//画地图。
void map_create()
{
    for(int i=0;i<high;i++)
    {
       get_x_y(0,i); printf("*");      
       get_x_y(wigh,i); printf("*");
       get_x_y(wigh+10,i);printf("*");
    }
    for(int i=0;i<wigh+10;i++)
    {
       get_x_y(i,0); printf("*");      
       get_x_y(i,high); printf("*");      
   
    }
   get_x_y(52,5);printf("贪吃蛇");
   get_x_y(51,15);printf("游戏说明:");
   get_x_y(52,17);printf("按A,D,W,Z任意一键开始");
   get_x_y(52,19);printf("A向左,D向右");
   get_x_y(52,21);printf("W向上,Z向下");
   get_x_y(52,23);printf("H键退出游戏");  
  get_x_y(100,100);
}

//画蛇
void snack_create()
{
   for(int i=0; i<snack.size;i++)
   {
      get_x_y(snack.bold[i].x,snack.bold[i].y);
        printf("*");
}

}
//蛇身坐标移动变化
void snack_change()
{
for(int i=snack.size;i>0;i--)
{
  snack. bold[i].x=snack. bold[i-1].x;
  snack. bold[i].y=snack. bold[i-1].y;
}
}
//初始化蛇身坐标
void frist()
{
  snack. size=5;
  snack.go_where='d';
  food. x=10;food. y=10;
  get_x_y(food.x,food.y);
   printf("*");
  for(int i=0;i<snack.size;i++)
  {
snack. bold[i].x=wigh/2;
snack. bold[i].y=high/2;
  }
}
//按键操作
int key_create()
{
     

switch(snack_c)
{
  case 'w':
  case 'W': if(snack.go_where!='z'&&snack.go_where!='Z')
           { if(snack.bold[0].y==0)//不让它穿过上墙去破坏文字说明.
              {  snack_c='g';return 0;}
                   snack.bold[0].y--;
                   } break;
  case 'z':
  case 'Z': if(snack.go_where!='w'&&snack.go_where!='W')
           { if(snack.bold[0].y==high)//不让它穿过下墙去破坏文字说明.
              {  snack_c='g';return 0;}
                   snack.bold[0].y++;
                   } break;
  case 'a':
  case 'A': if(snack.go_where!='d'&&snack.go_where!='D')
           { if(snack.bold[0].x==0)//不让它穿过左墙去破坏文字说明.
              {  snack_c='g';return 0;}
                   snack.bold[0].x--;
                   } break;
  case 'd':
  case 'D': if(snack.go_where!='a'&&snack.go_where!='A')
           {
           if(snack.bold[0].x==wigh)//不让它穿过右墙去破坏文字说明.
              {  snack_c='g';return 0;}
              snack.bold[0].x++;
           } break;
  case 'H':
      case 'h':system("cls");get_x_y(wigh/2,high/2);printf("程序已退出…\n");
             get_x_y(100,100);Sleep(500);exit(1);

}
snack.go_where=snack_c;
  
}
//蛇的檫尾
int snack_clear()
{
  if (snack.bold[snack.size].x==0)
  {
      if(snack.bold[snack.size].y<=high&&snack.bold[snack.size].y>=0)
      { return 0;}
  }
    if (snack.bold[snack.size].x==wigh)
  {
      if(snack.bold[snack.size].y<=high&&snack.bold[snack.size].y>=0)
      { return 0;}
  }
    if (snack.bold[snack.size].x==wigh+10)
  {
      if(snack.bold[snack.size].y<=high&&snack.bold[snack.size].y>=0)
      { return 0;}
  }
  if (snack.bold[snack.size].y==0)
  {
      if(snack.bold[snack.size].x<=wigh&&snack.bold[snack.size].x>=0)
      { return 0;}
  }
  if (snack.bold[snack.size].y==high)
  {
      if(snack.bold[snack.size].x<=wigh&&snack.bold[snack.size].x>=0)
      { return 0;}
  }
  //以上都是防止边框被蛇吃掉处理。
  get_x_y(snack.bold[snack.size].x, snack.bold[snack.size].y);
   printf(" ");
}
//食物的产生
int snack_food()
{
       
       
    srand((unsigned)time(0));
     food.x=rand()%(wigh-4)+2;
     food.y=rand()%(high-4)+2;

  for(int i=0;i<snack.size;i++)
{
    if(food.x==snack.bold[i].x&&food.y==snack.bold[i].y)
    { return 0;}
}
get_x_y(food.x,food.y);
printf("*");
flag=1;

}
//蛇的移动
void snack_move()
{
   while(!kbhit())
{
   snack_create();
    get_x_y(100,100);//去除光标。
   if(snack.bold[0].x==food.x&&snack.bold[0].y==food.y)
   {
count++;flag=0; snack.size++;
get_x_y(52,30);printf("分数记录: %d",count);
  }
   while(flag==0)
   { snack_food();}
   key_create();
   snack_change();
   Sleep(200);
   snack_clear();
  }
snack_c=getch();

   //system("cls");
}

int main()
{
  map_create();//地图
   frist();//初始化
while(1)
  {
      snack_move();
   
  }
  return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 16:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表