C语言做贪吃蛇用什么软件编写?
35个回答
2019-01-12
展开全部
问题上已经说了,是用C语言做的贪吃蛇,那么编写它的软件就是:C语言(一门通用计算机编程语言,广泛应用于底层开发)。
展开全部
了解贪吃蛇设计思路
上图中的红色空心方框(□)表示边框,是贪吃蛇的边界,贪吃
蛇不能碰到它,否则就“死掉”
,游戏结束。绿色实心方框(■)表示
贪吃蛇的活动范围,贪吃蛇可以自由移动,食物(苹果)也会随机出
现在这个区域。
我们不妨将贪吃蛇的活动范围称为
“贪吃蛇地图”
,
而
加上边框就称为“全局地图”
。
我们需要记录地图中每一个节点的信息,包括:
位置:也就是第几行几列;
类型:这个节点出现的是贪吃蛇、食物、边框,还是什么都没有
(绿色的背景)
。
索引:也就是数组下标,稍后会说明是什么意思。
所以需要定义一个结构体二维数组:
struct{
char type;
int index;
}globalMap[MAXWIDTH][MAXHEIGHT];
用一维下标和二维下标表示位置;用
type
表示类型,不同的类
型用不同的数字代表;用
index
表示索引。
直观上讲,应该将
type
定义为
int
类型,不过
int
占用四个字
节,而节点类型的取值范围非常有限,一个字节就足够了,所以为了
节省内存才定义为
char
类型。
同时,再建立一个足够大的一维数组,让贪吃蛇在数组内活动:
struct{
int x;
int y;
} snakeMap[ (MAXWIDTH-2)*(MAXHEIGHT-2) ]
x
、
y
表示行和列,
也就是
globalMap
数组的两个下标。
globalMap
数组中的索引
index
就是
snakeMap
数组的下标。
globalMap
表示了所有节点的信息,而
snakeMap
只表示了贪吃
蛇的活动区域。
通过
snakeMap
可以定位
globalMap
中的元素,
反过
来通过
globalMap
也可以找到
snakeMap
中的元素。请看下图:
图
1
:
globalMap
和
snakeMap
的初始对应关系
贪吃蛇向左移动时,
headerIndex
指向
404
,
tailIndex
指向
406
。
为什么设计的这么晦涩和复杂呢?因为这样设计有以下几个好
处:
贪吃蛇移动时不用处理所有节点,只要添加蛇头、删除蛇尾、重
建
globalMap
和
snakeMap
上图中的红色空心方框(□)表示边框,是贪吃蛇的边界,贪吃
蛇不能碰到它,否则就“死掉”
,游戏结束。绿色实心方框(■)表示
贪吃蛇的活动范围,贪吃蛇可以自由移动,食物(苹果)也会随机出
现在这个区域。
我们不妨将贪吃蛇的活动范围称为
“贪吃蛇地图”
,
而
加上边框就称为“全局地图”
。
我们需要记录地图中每一个节点的信息,包括:
位置:也就是第几行几列;
类型:这个节点出现的是贪吃蛇、食物、边框,还是什么都没有
(绿色的背景)
。
索引:也就是数组下标,稍后会说明是什么意思。
所以需要定义一个结构体二维数组:
struct{
char type;
int index;
}globalMap[MAXWIDTH][MAXHEIGHT];
用一维下标和二维下标表示位置;用
type
表示类型,不同的类
型用不同的数字代表;用
index
表示索引。
直观上讲,应该将
type
定义为
int
类型,不过
int
占用四个字
节,而节点类型的取值范围非常有限,一个字节就足够了,所以为了
节省内存才定义为
char
类型。
同时,再建立一个足够大的一维数组,让贪吃蛇在数组内活动:
struct{
int x;
int y;
} snakeMap[ (MAXWIDTH-2)*(MAXHEIGHT-2) ]
x
、
y
表示行和列,
也就是
globalMap
数组的两个下标。
globalMap
数组中的索引
index
就是
snakeMap
数组的下标。
globalMap
表示了所有节点的信息,而
snakeMap
只表示了贪吃
蛇的活动区域。
通过
snakeMap
可以定位
globalMap
中的元素,
反过
来通过
globalMap
也可以找到
snakeMap
中的元素。请看下图:
图
1
:
globalMap
和
snakeMap
的初始对应关系
贪吃蛇向左移动时,
headerIndex
指向
404
,
tailIndex
指向
406
。
为什么设计的这么晦涩和复杂呢?因为这样设计有以下几个好
处:
贪吃蛇移动时不用处理所有节点,只要添加蛇头、删除蛇尾、重
建
globalMap
和
snakeMap
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <dos.h> /*引用的库函数*/
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b/*宏定义键名*/
#define N 200
int i,key;
int level;/*游戏等级*/
int score=0;/*得分*/
int gamespeed;/*游戏速度*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,0活着,1死亡*/
}snake;/*蛇的结构体*/
void Choicelevle(void);/*选择游戏等级*/
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DRAW(void);/*游戏区域*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
#include <graphics.h>
#include <stdlib.h>
#include <dos.h> /*引用的库函数*/
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b/*宏定义键名*/
#define N 200
int i,key;
int level;/*游戏等级*/
int score=0;/*得分*/
int gamespeed;/*游戏速度*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x[N];
int y[N];
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,0活着,1死亡*/
}snake;/*蛇的结构体*/
void Choicelevle(void);/*选择游戏等级*/
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DRAW(void);/*游戏区域*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
C语言编写贪吃蛇用什么软件,这个问题有点不好回答,你应该是问编译器吧!C语言的编译器有很多的,例如VC++6.0或许最新版的Visual Stdio 2019都能编写的。
<<<<<<<希望以上内容能帮到你
<<<<<<<希望以上内容能帮到你
追问
对对,那VC++能运行贪吃蛇吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define BEG_X 2
#define BEG_Y 1
#define WID 20
#define HEI 20
HANDLE hout;
typedef enum {UP, DOWN, LEFT, RIGHT} DIR;
typedef struct Snake_body
{
COORD pos;//蛇身的位置
struct Snake_body *next;//下一个蛇身
struct Snake_body *prev;//前一个蛇身
}SNAKE, *PSNAKE;
PSNAKE head = NULL;//蛇头
PSNAKE tail = NULL;//蛇尾
//画游戏边框的函数
void DrawBorder()
{
int i, j;
COORD pos = {BEG_X, BEG_Y};
for(i = 0; i < HEI; ++i)
{
SetConsoleCursorPosition(hout, pos);
for(j = 0; j < WID; ++j)
{
if(i == 0)//第一行
{
if(j == 0)
printf("┏");
else if(j == WID - 1)
printf("┓");
else
printf("━");
}
else if(i == HEI - 1)//最后一行
{
if(j == 0)
printf("┗");
else if(j == WID - 1)
printf("┛");
else
printf("━");
}
else if(j == 0 || j == WID - 1)//第一列或最后一列
printf("┃");
else
printf(" ");
}
++pos.Y;
}
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#define BEG_X 2
#define BEG_Y 1
#define WID 20
#define HEI 20
HANDLE hout;
typedef enum {UP, DOWN, LEFT, RIGHT} DIR;
typedef struct Snake_body
{
COORD pos;//蛇身的位置
struct Snake_body *next;//下一个蛇身
struct Snake_body *prev;//前一个蛇身
}SNAKE, *PSNAKE;
PSNAKE head = NULL;//蛇头
PSNAKE tail = NULL;//蛇尾
//画游戏边框的函数
void DrawBorder()
{
int i, j;
COORD pos = {BEG_X, BEG_Y};
for(i = 0; i < HEI; ++i)
{
SetConsoleCursorPosition(hout, pos);
for(j = 0; j < WID; ++j)
{
if(i == 0)//第一行
{
if(j == 0)
printf("┏");
else if(j == WID - 1)
printf("┓");
else
printf("━");
}
else if(i == HEI - 1)//最后一行
{
if(j == 0)
printf("┗");
else if(j == WID - 1)
printf("┛");
else
printf("━");
}
else if(j == 0 || j == WID - 1)//第一列或最后一列
printf("┃");
else
printf(" ");
}
++pos.Y;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询