员理管帅最 发表于 2019-10-15 01:36:59

C语言写的简单的贪吃蛇小游戏,建议用C++编译器编译。

#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;
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.x,snack.bold.y);
      printf("*");
}

}
//蛇身坐标移动变化
void snack_change()
{
for(int i=snack.size;i>0;i--)
{
snack. bold.x=snack. bold.x;
snack. bold.y=snack. bold.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.x=wigh/2;
snack. bold.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.y==0)//不让它穿过上墙去破坏文字说明.
            {snack_c='g';return 0;}
                   snack.bold.y--;
                   } break;
case 'z':
case 'Z': if(snack.go_where!='w'&&snack.go_where!='W')
         { if(snack.bold.y==high)//不让它穿过下墙去破坏文字说明.
            {snack_c='g';return 0;}
                   snack.bold.y++;
                   } break;
case 'a':
case 'A': if(snack.go_where!='d'&&snack.go_where!='D')
         { if(snack.bold.x==0)//不让它穿过左墙去破坏文字说明.
            {snack_c='g';return 0;}
                   snack.bold.x--;
                   } break;
case 'd':
case 'D': if(snack.go_where!='a'&&snack.go_where!='A')
         {
         if(snack.bold.x==wigh)//不让它穿过右墙去破坏文字说明.
            {snack_c='g';return 0;}
            snack.bold.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.x==0)
{
      if(snack.bold.y<=high&&snack.bold.y>=0)
      { return 0;}
}
    if (snack.bold.x==wigh)
{
      if(snack.bold.y<=high&&snack.bold.y>=0)
      { return 0;}
}
    if (snack.bold.x==wigh+10)
{
      if(snack.bold.y<=high&&snack.bold.y>=0)
      { return 0;}
}
if (snack.bold.y==0)
{
      if(snack.bold.x<=wigh&&snack.bold.x>=0)
      { return 0;}
}
if (snack.bold.y==high)
{
      if(snack.bold.x<=wigh&&snack.bold.x>=0)
      { return 0;}
}
//以上都是防止边框被蛇吃掉处理。
get_x_y(snack.bold.x, snack.bold.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.x&&food.y==snack.bold.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.x==food.x&&snack.bold.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;
}
页: [1]
查看完整版本: C语言写的简单的贪吃蛇小游戏,建议用C++编译器编译。