首页 > 代码库 > C《贪吃蛇》简易字符版

C《贪吃蛇》简易字符版

哇咔咔,这是我步入游戏制作界的第一步。得意

忙活了一个国庆,虽说bug略多,但是成就感满满的。

 

#include<stdio.h>#include<stdlib.h>#include<Windows.h>#define H 20#define L 20void map(int hard);void maphard(void);void play(void);void food(void);int live(void);void direction(char button, struct snake*direction);void flashmap(struct snake*showsnake, int fx, int fy);char MAP[H][L];char key;int life = 0;int h;int roof[4];struct snake{    int x;    int y;    struct snake *next;}*head, *body, *tail, *direct, *test;int main(void){    char choice;    int speed;    printf("            《贪吃蛇》 作者:sp\n");    printf("请选择您的贪吃蛇水平(输入数字,按回车确认):\n");    printf("1.我是菜鸟        2.过关无压力\n");    printf("3.大神你懂吗      4.丧心病狂模式\n");    while (scanf("%c", &choice) == 1)    {        switch (choice)        {        case 1:            map(0);             play(800, 0);             break;        case 2:            map(0);             play(400, 0);             break;        case 3:            map(0);             play(100, 0);            break;        case 4:            printf("丧心病狂模式介绍:\n");            printf("该模式下场地上会出现一片屋顶(用“+”表示)\n贪吃蛇可以穿过屋顶,但是在屋顶下玩家无法看到蛇的行踪\n");            printf("贪吃蛇的食物有几率出现在屋顶下,玩家需要通过其丧心病狂的直觉来吃到食物\n");            system("pause");            map(1);             play(300, 1);             break;        default:printf("游戏结束!");        }    }    system("pause");    return 0;}void map(int hard){    int i, j, x, y;    memset(MAP,  , sizeof(MAP));    system("cls");    head = (struct snake*)malloc(sizeof(struct snake));    srand(time(0));//随机种子    x = rand() % (H - 2) + 1;//初始化蛇头    y = rand() % (L - 2) + 1;    MAP[x][y] = *;    head->x = x;    head->y = y;    head->next = NULL;    direct = head;    if (hard = 0)    {        for (i = 0; i < H; i++)//画地图        {            for (j = 0; j < L; j++)            {                if (i == 0 || i == H - 1 || j == 0 || j == L - 1)//造围墙                    MAP[i][j] = #;                printf("%c", MAP[i][j]);            }            printf("\n");        }    }    else    {        for (h = 0; h < 4; h++)        {            srand(time(0));            roof[h] = rand() % (H - 2) + 1;        }        for (i = 0; i < H; i++)//画地图        {            for (j = 0; j < L; j++)            {                if (i == roof[0] || i == roof[1] || j == roof[2] || j == roof[3])//屋顶                    MAP[i][j] = +;                if (i == 0 || i == H - 1 || j == 0 || j == L - 1)//造围墙                    MAP[i][j] = #;                printf("%c", MAP[i][j]);            }            printf("\n");        }    }}void play(int speed, int hard){    int fx, fy;    int food = 1;    while (1)    {        Sleep(speed);        while (food)//生成食物        {            srand(time(0));            fx = rand() % (H - 2) + 1;            fy = rand() % (L - 2) + 1;            food = 0;        }        if (_kbhit() != 0)//有键盘输入则变换key的值,否则保持原方向            key = _getch();        direction(key, direct);        body = head;        if ((direct->x != fx) || (direct->y != fy))        {            while (body->next != NULL)            {                body->x = (body->next)->x;                body->y = (body->next)->y;                body = body->next;            }        }        else{            tail = (struct snake*)malloc(sizeof(struct snake));//加长蛇身            direct->next = tail;            tail->next = NULL;            tail->x = fx;            tail->y = fy;            direct = tail;            food = 1;        }        flashmap(head, fx, fy, hard);        life = live();        if (life)            break;    }}int live(void){    if (body->x == 0 || body->y == 0 || body->x == H - 1 || body->y == L - 1)        return 1;    else        return 0;}void flashmap(struct snake*showsnake, int fx, int fy, int hard)//刷新屏幕{    system("cls");    int i, j;    memset(MAP,  , sizeof(MAP));    while (showsnake != NULL)    {        MAP[showsnake->x][showsnake->y] = *;        showsnake = showsnake->next;    }    MAP[fx][fy] = @;    if (hard == 0)    {        for (i = 0; i < H; i++)//画地图        {            for (j = 0; j < L; j++)            {                if (i == 0 || i == H - 1 || j == 0 || j == L - 1)//造围墙                    MAP[i][j] = #;                printf("%c", MAP[i][j]);            }            printf("\n");        }    }    else    {        for (i = 0; i < H; i++)//画地图        {            for (j = 0; j < L; j++)            {                if (i == roof[0] || i == roof[1] || j == roof[2] || j == roof[3])//屋顶                    MAP[i][j] = +;                if (i == 0 || i == H - 1 || j == 0 || j == L - 1)//造围墙                    MAP[i][j] = #;                printf("%c", MAP[i][j]);            }            printf("\n");        }    }}void direction(char button, struct snake*direction)//改变方向{    switch (button)    {    case a:direction->y--;        break;    case d:direction->y++;        break;    case w:direction->x--;        break;    case s:direction->x++;    default:break;    }}

 

C《贪吃蛇》简易字符版