C语言小游戏P3

2019-01-30  本文已影响0人  兄主的仙人掌

生成僵尸

玩家可以移动了,可是没有僵尸怎行!

下一步,生成僵尸!

为了方便,先定义一个结构体zombie,代码如下:

struct Zombie {
    int id;
    int x,y;
    int dead;
};

有僵尸的x坐标,y坐标,还有它死了没(当dead==0时,死;反之,当dead==1时,活),没有变量health,因为我准备秒它,嗯

then,给它一个实例:

Zombie z[5];

接下来,定义一个生成函数,代码如下,在下面我会进行说明:

void m_init(int id)
{
    int tx,ty;//临时变量,记录x,y坐标
    srand((short)time(NULL));//随机重置
    a:tx=rand()%10;//随机取值tx,ty
    ty=rand()%10;
    if (map[tx][ty]==' ')//如果此格是空格
    {
        map[tx][ty]='Z';//此格为僵尸
        z[id].id=id;//更新僵尸信息
        z[id].x=tx;
        z[id].y=ty;
        z[id].dead=0;//它还没死
    }
    else//如果不是
        goto a;//重新取值
}

它只维护了一个参数,就是僵尸的id

其他的在注释里有

现在的完整代码如下:

#include <stdio.h>
#include <time.h>//想要用time()函数,需要这个头文件 
#define MAXN 100
int x=3,y=6;
struct Zombie
{
    int id;
    int x,y;
    int dead;
};
struct Zombie z[5];
char map[MAXN][MAXN]={"##############",
                      "#            #",
                      "#            #",
                      "#     I      #",
                      "#            #",
                      "#            #",
                      "##############"
                     };
void m_init(int id)
{
    int tx,ty;//临时变量,记录x,y坐标
    srand((short)time(NULL));//随机重置
    a:tx=rand()%10;//随机取值tx,ty
    ty=rand()%10;
    if (map[tx][ty]==' ')//如果此格是空格
    {
        map[tx][ty]='Z';//此格为僵尸
        z[id].id=id;//更新僵尸信息
        z[id].x=tx;
        z[id].y=ty;
        z[id].dead=0;//它还没死
    }
    else//如果不是
        goto a;//重新取值
}
void putmap(int lines)
{
    int i;
    for (i=0;i<=lines-1;i++)
    {
        puts(map[i]);
    }
}
void move(char ch)//这里我多了一个参数,为了让程序更有条理性
{
    switch(ch)
    {
        case 'w':
            if (map[x-1][y]==' ')
            {
                map[x][y]=' ';
                x--;
                map[x][y]='I';
            }
            break;
        case 'a':
            if (map[x][y-1]==' ')
            {
                map[x][y]=' ';
                y--;
                map[x][y]='I';
            }
            break;
        case 's':
            if (map[x+1][y]==' ')
            {
                map[x][y]=' ';
                x++;
                map[x][y]='I';
            }
            break;
        case 'd':
            if (map[x][y+1]==' ')
            {
                map[x][y]=' ';
                y++;
                map[x][y]='I';
            }
            break;
        default:
            break;
    }
    system("cls");//清屏
    putmap(7);//输出新地图
}
int main()
{
    char ch;
    int i;
    for (i=0;i<=4;i++)
        m_init(i);
    putmap(7);
    while(1)
    {
        ch = getch();
        move(ch);
    }
    return 0;
}

Bye~~

上一篇 下一篇

猜你喜欢

热点阅读