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();
 }
 }

}

运行效果:

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

(0)

相关推荐

  • C/C++实现贪吃蛇逐步运动效果

    本文实例为大家分享了C/C++实现贪吃蛇逐步运动效果的代码,供大家参考,具体内容如下 主要使用结构数组和结构指针,再用easyx图形库进行的绘图,以供讨论和学习 #include <conio.h> //建立储存蛇身的结构体 struct snack { int x; int y; }; //决定方向 int fangxiang=3;//w=0,s=1,a=2,d=3 // 按键变量 char anjian=0; //调整坐标关系 int tiaozheng(struct snack *a);

  • C++基于控制台实现的贪吃蛇小游戏

    本文实例讲述了C++基于控制台实现的贪吃蛇小游戏.分享给大家供大家参考.具体实现方法如下: #include <windows.h> #include <time.h> #include <stdio.h> #define MAX 100 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 #define MOVING 5 #define STOP 0 HANDLE hMain_Out = NULL; H

  • C++实现简单贪吃蛇游戏

    我大概在一个多月前把自己上学期写的c代码的贪吃蛇游戏push到csdn上,并且说c风格的贪吃蛇写起来有些麻烦(贪吃蛇游戏的c语言实现),准备用面向对象的c++再写一遍.现在我们专业恰好刚教完了c++,学校也布置了一道简单的贪吃蛇的编程题目,实现下来,的确觉得c++的思路清晰很多,所以再次把c++的代码push上来,供大家对比参考:) 直接上代码,c++把整个游戏拆分成几个文件,分开上,有一定的c++基础的同学应该可以很容易看懂. 1.全局头文件(global.hpp) #ifndef _GLOB

  • 贪吃蛇游戏C++命令行版实例代码

    本文实例讲述了贪吃蛇游戏C++命令行版的实现代码,是非常经典的游戏.分享给大家供大家参考.具体实现方法如下: 众所周知,贪吃蛇游戏是经典的计算机游戏. 游戏描述如下: 1. 贪吃蛇可以自动直线前进,或者玩家可以通过方向键操纵贪吃蛇上下左右前进,每次前进一格. 2. 贪吃蛇在规定的区域内活动,当: ①贪吃蛇触碰到墙壁时: ②贪吃蛇的蛇头触碰到蛇身或者蛇尾时: ③玩家的键盘输入不是方向键时: 命令行显示"Game Over!"并且退出游戏. 3. 贪吃蛇活动的区域内每次随机产生一颗&quo

  • 利用C/C++实现较完整贪吃蛇游戏

    记得在大一时刚学习c/c++语言,学到一半突然想用这门语言做一些小游戏出来,首先想到的便是贪吃蛇.于是本人利用空余时间写出了这么一个简单的小游戏. 由于当时的我还没有能力构造出用户界面,故直接使用dos界面运行.那么问题来了,如何让一个字符在dos界面上自由移动???对于这个问题我采用的解决方案是实现gotoxy函数来控制指针位置从而实现字符的移动.那么我们就先来实现这个函数. gotoxy 函数并非系统函数,我将其储存于 gotoxy.h 的头文件中方便调用. gotoxy.h #includ

  • C++ vector容器实现贪吃蛇小游戏

    本文实例为大家分享了C++ vector容器 实现贪吃蛇,供大家参考,具体内容如下 使用vector容器实现贪吃蛇简化了很多繁琐操作,且相比之前我的代码已经做到了尽量的简洁 技术环节: 编译环境:windows VS2019 需求: 控制贪吃蛇吃食物,吃到一个食物蛇身变长一节,得分增加,撞墙或撞自己则游戏结束. 思路: 创建一个vector容器,容器内存储蛇的每节身体的结构变量,结构变量中保存蛇身体的xy坐标,通过使用vector成员方法不断添加和删除容器中的数据,实现蛇坐标的规律移动,吃到食物

  • 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}; SetConsoleCursorPosi

  • C语言 结构体数组详解及示例代码

    所谓结构体数组,是指数组中的每个元素都是一个结构体.在实际应用中,结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生.一个车间的职工等. 定义结构体数组和定义结构体变量的方式类似,请看下面的例子: struct stu{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 }class[5]; 表示一个班级有5个学生. 结构体数组在定义的同时也可以初始化,例如: str

  • 详解C++中的指针结构体数组以及指向结构体变量的指针

    C++结构体数组 一个结构体变量中可以存放一组数据(如一个学生的学号.姓名.成绩等数据).如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组.结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项. 定义结构体数组和定义结构体变量的方法相仿,定义结构体数组时只需声明其为数组即可.如: struct Student //声明结构体类型Student { int num; char name[20]; char sex; i

  • C#调用C++DLL传递结构体数组的终极解决方案

    C#调用C++DLL传递结构体数组的终极解决方案 在项目开发时,要调用C++封装的DLL,普通的类型C#上一般都对应,只要用DllImport传入从DLL中引入函数就可以了.但是当传递的是结构体.结构体数组或者结构体指针的时候,就会发现C#上没有类型可以对应.这时怎么办,第一反应是C#也定义结构体,然后当成参数传弟.然而,当我们定义完一个结构体后想传递参数进去时,会抛异常,或者是传入了结构体,但是返回值却不是我们想要的,经过调试跟踪后发现,那些值压根没有改变过,代码如下. [DllImport(

  • C++结构体数组详细解析

    1.定义结构体数组 和定义结构体变量类似,定义结构体数组时只需声明其为数组即可.如: 复制代码 代码如下: struct Student{     int num;     char name[20];     char sex[5];     int age;     float score;     char addr[30];};Student stu[3]; //定义Student类型的数组stu 2.结构体数组的应用举例 题目:对候选人的票的统计程序. 设有3个候选人,最终只能有一个当

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

  • C语言结构体数组同时赋值的另类用法

    说到C语言结构体数组的同时赋值,许多人一想就会想到用以下的这种方法,咱们来写一个例子: #include <stdio.h> struct student { int a; int b ; int c ; }; struct student array1[1000] ; int main(void) { int i ; for(i = 0 ; i < 1000 ; i++) { array[i].a = 1 ; array[i].b = 2 ; array[i].c = 3 ; } fo

  • 基于C#调用c++Dll结构体数组指针的问题详解

    C#调用c++dll文件是一件很麻烦的事情,首先面临的是数据类型转换的问题,相信经常做c#开发的都和我一样把学校的那点c++底子都忘光了吧(语言特性类). 网上有一大堆得转换对应表,也有一大堆的转换实例,但是都没有强调一个更重要的问题,就是c#数据类型和c++数据类型占内存长度的对应关系. 如果dll文件中只包含一些基础类型,那这个问题可能可以被忽略,但是如果是组合类型(这个叫法也许不妥),如结构体.类类型等,在其中的成员变量的长度的申明正确与否将决定你对dll文件调用的成败. 如有以下代码,其

  • C语言结构体数组的定义和使用详解

    目录 介绍 结构体数组定义时初始化 补充 介绍 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这时就要使用数组.结构体中也有数组,称为结构体数组.它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项. 定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组.或者说同前面介绍的普通数组

  • 如何用python实现结构体数组

    目录 python结构体数组 在NumPy中可以如下定义 内存对齐 python自定义结构体 具体方法如下 python结构体数组 在C语言中我们可以通过struct关键字定义结构类型,结构中的字段占据连续的内存空间,每个结构体占用的内存大小都相同,因此可以很容易地定义结构数组. 和C语言一样,在NumPy中也很容易对这种结构数组进行操作. 只要NumPy中的结构定义和C语言中的定义相同,NumPy就可以很方便地读取C语言的结构数组的二进制数据,转换为NumPy的结构数组. 假设我们需要定义一个

随机推荐