学习编程是为了什么?当然是为了能控制电脑来为我们服务了,许多同学在学习完C语言之后,发现并没有什么实际的用途,无非就是求一些质数、闰年啥的,再高级点的就是用链表编写一个电话本程序,非常的枯燥无味,今天,龙叔带领大家来利用C语言,编制一些大家耳熟能详的,简单好玩的小游戏,以给大家开阔一下思路,提升编程水平。

今天咱们要编写一个贪吃蛇的程序,本著由简单到复杂,由字元到图形的原则,咱们一步一步的做出来。

要编写一个贪吃蛇游戏,咱们首先要思考一下游戏的几个需要问题:

(1)怎样表示一个游戏地图

(2)用什么来表示蛇的长度及坐标

(3)怎样用键盘控制蛇上下左右移动

(4)怎样显示蛇的移动效果

(5)怎样控制蛇沿著一定的轨迹移动

下面咱们来思考第一个问题,怎样表示游戏地图,作为一个游戏地图,地图里面肯定要存放上下左右四周的围墙,蛇的位置以及食物的位置等这些要素,所以我们用一个二维数组来表示再合适不过了,然后在给数组分别赋值,依靠不同的数字来表示围墙、蛇、食物等

本节需用到的知识点:

(1)二维数组的定义与赋值

(2)switch......case...语句

地图的定义使用一个二维数组,map[20][40],因为C语言中的游标是长方形的,所以20行,40列才是一个正方形int map[20][40]

有了这个数组,咱么就可以画出游戏的地图了

#include <stdio.h>
void main()
{
int map[20][40]; //二维数组map[][],用来表示游戏地图
//为0时,表示空白,什么都没有
//为1时,表示上下围墙
//为2时,表示左右围墙
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; //赋值左右围墙||||||||||||||||||||
}

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代表左右围墙
}
printf("
");
}
}

有了基本的围墙之后,我们还发现没有蛇和食物啊,这游戏可怎么玩啊

下面咱们就在地图上显示出蛇和食物来,它们都用二维数组map来表示,0,1,2被占用了,咱们就用3来表示蛇,4来表示食物,蛇的位置咱们就让它初始化在地图中间,食物咱们就随便定义一个位置

#include <stdio.h>
void main()
{
int map[20][40]; //二维数组map[][],用来表示游戏地图
//为0时,表示空白,什么都没有
//为1时,表示上下围墙
//为2时,表示左右围墙
//为3时,表示蛇
//为4时,表示食物
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[10][20]=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; //4代表蛇身用@表示
case 4: printf("$");break; //5代表食物用$表示
}
printf("
");
}
}

这样咱们的地图就大功告成了,接下来咱们就要让蛇开始移动了。


推荐阅读:
相关文章