C++结构体数组实现贪吃蛇

 更新时间:2020年04月28日 09:24:39   作者:oyxy2019  
这篇文章主要为大家详细介绍了C++结构体数组实现贪吃蛇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++结构体数组实现贪吃蛇的具体代码,供大家参考,具体内容如下

代码:

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>

using namespace std;

const int h=50,w=50,MaxLen=400;
void gotoxy(short y,short x)//光标移动函数 
{
 COORD pos={x,y};
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
struct node
{
 int x,y;
};
node s[MaxLen];
node food;
int dir,len;
int Map[h+5][w+5];
int Time[7]={0},level;//building。。。


void FoodCreate()
{
 srand ((unsigned)time(NULL));//时间作随机数种子,避免伪随机 
 while(1)
 {
 food.x=rand()%h,food.y=rand()%w; 
 if(food.x>0&&food.y>0&&Map[food.x][food.y]==0)break;
 }
 gotoxy(food.x,food.y),printf("@");
 gotoxy(h+1,0);
}

void init()
{
 system("cls"); 
 for(int i=0;i<=h;i++)//画图 
 {
 for(int j=0;j<=w;j++)
 {
 if(i==0||j==0||i==h||j==w)Map[i][j]=1,printf("#");
 else Map[i][j]=0,printf(" ");
 } 
 printf("\n");
 }
 
 len=2; //初始化蛇 
 dir=0;
 s[1].x=12,s[1].y=4;
 s[len].x=12,s[len].y=3;
 Map[s[1].x][s[1].y]=Map[s[len].x][s[len].y]=1;
 gotoxy(s[1].x,s[1].y),printf("*");
 gotoxy(s[len].x,s[len].y),printf("*");
 gotoxy(h+1,0);
 
 FoodCreate(); 
}

int move()
{
 node next=s[1];
 switch(dir)
 {
 case 0:next.y++;break;
 case 1:next.x--;break;
 case 2:next.y--;break;
 case 3:next.x++;break;
 }
 if(Map[next.x][next.y])return 0; //下一步GG
 if(next.x==food.x&&next.y==food.y) //下一步遇到食物 
 {
 len++;
 FoodCreate();  
 }
 else   //下一步是空白就将尾部覆盖 
 {
 gotoxy(s[len].x,s[len].y),printf(" "); 
 Map[s[len].x][s[len].y]=0; 
 }
 
 gotoxy(next.x,next.y),printf("*");
 gotoxy(h+1,0); 
 Map[next.x][next.y]=1; 
 for(int i=len;i>1;i--)s[i]=s[i-1];
 s[1]=next; 
 Sleep(100);  //Sleep放在最后比较顺滑//速度在这儿调 
 return 1; 
}

void GameOver()
{
 for(int i=1;i<=3;i++)
 {
 gotoxy(s[1].x,s[1].y);
 printf(" ");
 Sleep(300);
 gotoxy(s[1].x,s[1].y); 
 printf("*");
 Sleep(300); 
 }
 gotoxy(h+1,0);
 printf("GameOver\n");
 printf("Press any key to continue...");
}
void Welcome()
{
 printf("为了您的游戏体验,请先调整控制台字体和布局(记得不要忘了默认设置):\n");
 printf("右键白色框->属性->字体 选择点阵字体并调整字体大小为8×8\n");
 printf("再选择布局设置窗口大小,推荐60×60\n\n"); 
 printf("WASD控制方向\n");
 
 printf("\n任意键进入贪吃蛇皮..."); 
 getch();
 
}
int main()
{
 Welcome();
 init();
 while(1)
 {
 if(kbhit())
 {
 char ch=getch();
 int temp=dir;
 switch(ch)
 {
 case 'd':temp=0;break;
 case 'w':temp=1;break;
 case 'a':temp=2;break;
 case 's':temp=3;break;
 }
 if((temp+dir)%2)dir=temp;//如果方向不冲突 
 }
 if(move()==0)
 {
 GameOver();
 getch();
 init();
 }
 }
 
}

运行效果:

关于C++小游戏的更多精彩内容请点击专题: 《C++经典小游戏》 学习了解

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

相关文章

  • 一起来看看C语言线性表的线性链表

    一起来看看C语言线性表的线性链表

    这篇文章主要为大家详细介绍了C语言线性表的线性链表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++ string字符串的使用和简单模拟实现

    C++ string字符串的使用和简单模拟实现

    C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数和字符串是分离的,本文给大家介绍了C++ string字符串的使用和简单模拟实现,感兴趣的朋友可以参考下
    2024-06-06
  • 12个关于C语言的有趣问答

    12个关于C语言的有趣问答

    这篇文章主要介绍了12个关于C语言的有趣问答,有助于读者加深对C语言程序设计的理解,需要的朋友可以参考下
    2014-07-07
  • C语言返回值指针的函数详解

    C语言返回值指针的函数详解

    这篇文章主要为大家详细介绍了C语言返回值指针的函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 利用C++实现获取文件夹下所有文件名

    利用C++实现获取文件夹下所有文件名

    这篇文章主要为大家详细介绍了如何利用C++实现获取文件夹下所有文件名,文中的示例代码讲解详细,对我们学习C++有一定帮助,需要的可以参考一下
    2022-09-09
  • 7种排序算法的实现示例

    7种排序算法的实现示例

    这篇文章主要介绍了7种排序算法的实现示例,需要的朋友可以参考下
    2014-05-05
  • 基于C++中setiosflags()的用法详解

    基于C++中setiosflags()的用法详解

    下面小编就为大家带来一篇基于C++中setiosflags()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • C语言详细讲解常用字符串处理函数

    C语言详细讲解常用字符串处理函数

    在日常编程中,对于字符串的操作中我们都很习惯的使用一些C库中自带的函数,并且关于字符串的操作函数基本都在 string.h 这个头文件中。关于C库字符串常用处理函数也是平时面试或者考试过程中非常喜欢考的,本文将带大家手动来实现这些常用函数
    2022-05-05
  • C语言实现扫雷小游戏的示例代码

    C语言实现扫雷小游戏的示例代码

    这篇文中主要为大家详细介绍了如何利用C语言实现经典的扫雷小游戏。扫雷小游戏主要是利用字符数组、循环语句和函数实现,感兴趣的小伙伴可以了解一下
    2022-10-10
  • C语言的可变参数函数实现详解

    C语言的可变参数函数实现详解

    某些情况下我们希望函数的参数个数可以根据需要确定,因此c语言引入可变参数函数。典型的可变参数函数的例子有printf()、scanf()等,下面我就开始讲解
    2021-08-08

最新评论