本节需用到的知识点:

(1)清屏函数system("CLS")

(2)睡眠函数Sleep()

让蛇移动的原理是什么,就是不断的修改蛇在二维数组中的位置,然后在不断的刷新屏幕,这样在我们看来,蛇就动了

比如说现在蛇在map[10][20]位置,即map[10][20]=3,咱们修改一下,使蛇向上移动

map[9][20]=3,map[10][20]=0; 这样一波操作之后,咱么再刷新一下屏幕,蛇的位置就向上移动了,只要不断的重复这个动作,蛇就不断的移动了,有的同学会问了,怎么刷新屏幕啊,我也没学过这个知识啊,下面龙叔给大家介绍一下这个函数 system("CLS");,作用就是清除屏幕上的内容,需要引入#include<windows.h>头文件

为了方便控制蛇的上下左右移动,我们再定义两个变数,snake_x,snake_y,用来表示蛇的坐标,只要通过snake_x--,蛇就向上移动了

具体代码如下

#include <stdio.h>
#include<Windows.h>
void main()
{
int map[20][40]; //二维数组map[][],用来表示游戏地图
//为0时,表示空白,什么都没有
//为1时,表示上下围墙
//为2时,表示左右围墙
//为3时,表示蛇
//为4时,表示食物

int snake_x=10,snake_y=20; //用来表示蛇的位置坐标
int i,j;

for(i=0;i<20;i++)
for(j=0;j<40;j++)
map[i][j]=0; //初始化二维数组,全部置为0

for(i=0;i<20;i++)
for(j=0;j<40;j++)
{
if(i==0||i==19)
map[i][j]=1; //赋值上下围墙 -------------
if(j==0||j==39)
map[i][j]=2; //赋值左右围墙|||||||||||||||
}

map[snake_x][snake_y]=3; //利用变数在地图中间初始化蛇身
map[15][6]=4; //初始化食物位置,随便定义了一个位置

for(i=0;i<20;i++) //列印地图
{
for(j=0;j<40;j++)
switch(map[i][j])
{
case 0: printf(" ");break; //0代表空格,什么也不列印
case 1: printf("-");break; //1代表上下围墙
case 2: printf("|");break; //2代表左右围墙
case 3: printf("@");break; //蛇身用@表示
case 4: printf("$");break; //食物用$表示
}
printf("
");
}

while(1) //不断的循环
{
system("CLS"); //清屏函数,清除屏幕内容
snake_x--; //蛇的x坐标不断减减,使蛇向上移动

for(i=0;i<20;i++) //列印地图
{
for(j=0;j<40;j++)
switch(map[i][j])
{
case 0: printf(" ");break; //0代表空格,什么也不列印
case 1: printf("-");break; //1代表上下围墙
case 2: printf("|");break; //2代表左右围墙
case 3: printf("@");break; //3蛇身用@表示
case 4: printf("$");break; //4代表食物用$表示
}
printf("
");
}
Sleep(400); //睡眠函数,使程序咱们0.4秒,防止运行太快
}
}

下面咱们试运行一下,奇怪,怎么会没有反应呢,咱们查找一下,分析一下,问题原因,原来是我们只移动了蛇的坐标,却忘记了在snake--后,没有对地图上蛇的位置进行初始化,我们还需要把之前蛇的位置变为0,然后把新的位置变为3,这样咱们看到得就是一个连续的画面啦

#include <stdio.h>
#include<Windows.h>
void main()
{
int map[20][40]; //二维数组map[][],用来表示游戏地图
//为0时,表示空白,什么都没有
//为1时,表示上下围墙
//为2时,表示左右围墙
//为3时,表示蛇
//为4时,表示食物

int snake_x=10,snake_y=20; //用来表示蛇的位置坐标
int i,j;

for(i=0;i<20;i++)
for(j=0;j<40;j++)
map[i][j]=0; //初始化二维数组,全部置为0

for(i=0;i<20;i++)
for(j=0;j<40;j++)
{
if(i==0||i==19)
map[i][j]=1; //赋值上下围墙 ----------------
if(j==0||j==39)
map[i][j]=2; //赋值左右围墙|||||||||||||||||
}

map[snake_x][snake_y]=3; //利用变数在地图中间初始化蛇身
map[15][6]=4; //初始化食物位置,随便定义了一个位置

for(i=0;i<20;i++) //列印地图
{
for(j=0;j<40;j++)
switch(map[i][j])
{
case 0: printf(" ");break; //0代表空格,什么也不列印
case 1: printf("-");break; //1代表上下围墙
case 2: printf("|");break; //2代表左右围墙
case 3: printf("@");break; //蛇身用@表示
case 4: printf("$");break; //食物用$表示
}
printf("
");
}

while(1) //不断的循环
{
system("CLS"); //清屏函数,清除屏幕内容
map[snake_x][snake_y]=0; //更新地图,将蛇的老位置赋值为0
snake_x--; //蛇的x坐标不断减减,使蛇向上移动
map[snake_x][snake_y]=3; //更新地图,将蛇的新位置赋值为3

for(i=0;i<20;i++) //列印地图
{
for(j=0;j<40;j++)
switch(map[i][j])
{
case 0: printf(" ");break; //0代表空格,什么也不列印
case 1: printf("-");break; //1代表上下围墙
case 2: printf("|");break; //2代表左右围墙
case 3: printf("@");break; //3代表蛇身用@表示
case 4: printf("$");break; //4代表食物用$表示
}
printf("
");
}
Sleep(400); //睡眠函数,使程序咱们0.4秒,防止运行太快
}
}

这样我们基础的框架就做完了,下一步我们要用键盘来控制蛇的上下左右移动

推荐阅读:

相关文章