栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言贪吃蛇完整代码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言贪吃蛇完整代码

#include
#include
#include //windows±à³ÌÍ·Îļþ
#include
#include //¿ØÖÆÌ¨ÊäÈëÊä³öÍ·Îļþ
#ifndef __cplusplus
typedef char bool;
#define false 0
#define true  1
#endif
//½«¹â±êÒÆ¶¯µ½¿ØÖÆÌ¨µÄ(x,y)×ø±êµã´¦
void gotoxy(int x, int y)
{
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
#define SNAKESIZE 100//ÉßµÄÉíÌå×î´ó½ÚÊý
#define MAPWIDTH 78//¿í¶È
#define MAPHEIGHT 24//¸ß¶È
//ʳÎïµÄ×ø±ê
struct {
    int x;
    int y;
}food;
//ÉßµÄÏà¹ØÊôÐÔ
struct {
    int speed;//ÉßÒÆ¶¯µÄËÙ¶È
    int len;//Éߵij¤¶È
    int x[SNAKESIZE];//×é³ÉÉßÉíµÄÿһ¸öС·½¿éÖÐxµÄ×ø±ê
    int y[SNAKESIZE];//×é³ÉÉßÉíµÄÿһ¸öС·½¿éÖÐyµÄ×ø±ê
}snake;
//»æÖÆÓÎÏ·±ß¿ò
void drawMap();
//Ëæ»úÉú³ÉʳÎï
void createFood();
//°´¼ü²Ù×÷
void keyDown();
//ÉßµÄ״̬
bool snakeStatus();
//´Ó¿ØÖÆÌ¨Òƶ¯¹â±ê
void gotoxy(int x, int y);
int key = 72;//±íʾÉßÒÆ¶¯µÄ·½Ïò£¬72Ϊ°´Ï¡°¡ü¡±Ëù´ú±íµÄÊý×Ö
//ÓÃÀ´ÅжÏÉßÊÇ·ñ³ÔµôÁËʳÎÕâÒ»²½ºÜÖØÒª£¬Éæ¼°µ½ÊÇ·ñ»áÓÐÉßÉíÒÆ¶¯µÄЧ¹ûÒÔ¼°ÉßÉíÔö³¤µÄЧ¹û
int changeFlag = 0;
int sorce = 0;//¼ÇÂ¼Íæ¼ÒµÄµÃ·Ö
int i;
void drawMap()
{
    //´òÓ¡ÉÏϱ߿ò
    for (i = 0; i <= MAPWIDTH; i += 2)//i+=2ÊÇÒòΪºáÏòÕ¼ÓõÄÊÇÁ½¸öλÖÃ
    {
        //½«¹â±êÒÆ¶¯ÒÀ´Îµ½(i,0)´¦´òÓ¡Éϱ߿ò
        gotoxy(i, 0);
        printf("¡ö");
        //½«¹â±êÒÆ¶¯ÒÀ´Îµ½(i,MAPHEIGHT)´¦´òӡϱ߿ò
        gotoxy(i, MAPHEIGHT);
        printf("¡ö");
    }
 
    //´òÓ¡×óÓұ߿ò
    for (i = 1; i < MAPHEIGHT; i++)
    {
        //½«¹â±êÒÆ¶¯ÒÀ´Îµ½(0,i)´¦´òÓ¡×ó±ß¿ò
        gotoxy(0, i);
        printf(" ¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£¡£");
        //½«¹â±êÒÆ¶¯ÒÀ´Îµ½(MAPWIDTH, i)´¦´òÓ¡×ó±ß¿ò
        gotoxy(MAPWIDTH, i);
        printf("¡ö");
    }
 
    //Ëæ»úÉú³É³õÊÔʳÎï
    while (1)
    {
        srand((unsigned int)time(NULL));
        food.x = rand() % (MAPWIDTH - 4) + 2;
        food.y = rand() % (MAPHEIGHT - 2) + 1;
        //Éú³ÉµÄʳÎïºá×ø±êµÄÆæÅ¼±ØÐëºÍ³õÊÔʱÉßÍ·ËùÔÚ×ø±êµÄÆæÅ¼Ò»Ö£¬ÒòΪһ¸ö×Ö·ûÕ¼Á½¸ö×Ö½ÚλÖã¬Èô²»Ò»ÖÂ
        //»áµ¼Ö³ÔʳÎïµÄʱºòÖ»³Ôµ½Ò»°ë
        if (food.x % 2 == 0)
            break;
    }
    //½«¹â±êÒÆµ½Ê³ÎïµÄ×ø±ê´¦´òӡʳÎï
    gotoxy(food.x, food.y);
    printf("*");
    //³õʼ»¯ÉßµÄÊôÐÔ
    snake.len = 3;
    snake.speed = 200;
    //ÔÚÆÁÄ»ÖмäÉú³ÉÉßÍ·
    snake.x[0] = MAPWIDTH / 2 + 1;//x×ø±êΪżÊý
    snake.y[0] = MAPHEIGHT / 2;
    //´òÓ¡ÉßÍ·
    gotoxy(snake.x[0], snake.y[0]);
    printf("-------------------------------------------------");
    //Éú³É³õÊÔµÄÉßÉí
    for (i = 1; i < snake.len; i++)
    {
        //ÉßÉíµÄ´òÓ¡£¬×Ý×ø±ê²»±ä£¬ºá×ø±êΪÉÏÒ»½ÚÉßÉíµÄ×ø±êÖµ+2
        snake.x[i] = snake.x[i - 1] + 2;
        snake.y[i] = snake.y[i - 1];
        gotoxy(snake.x[i], snake.y[i]);
        printf("#");
    }
    //´òÓ¡ÍêÉßÉíºó½«¹â±êÒÆµ½ÆÁÄ»×îÉÏ·½£¬±ÜÃâ¹â±êÔÚÉßÉí´¦Ò»Ö±ÉÁ˸
    gotoxy(MAPWIDTH - 2, 0);
    return;
}

void keyDown()
{
    int pre_key = key;//¼Ç¼ǰһ¸ö°´¼üµÄ·½Ïò
    if (_kbhit())//Èç¹ûÓû§°´ÏÂÁ˼üÅÌÖеÄij¸ö¼ü
    {
        fflush(stdin);//Çå¿Õ»º³åÇøµÄ×Ö·û
 
        //getch()¶ÁÈ¡·½Ïò¼üµÄʱºò£¬»á·µ»ØÁ½´Î£¬µÚÒ»´Îµ÷Ó÷µ»Ø0»òÕß224£¬µÚ¶þ´Îµ÷Ó÷µ»ØµÄ²ÅÊÇʵ¼ÊÖµ
        key = _getch();//µÚÒ»´Îµ÷Ó÷µ»ØµÄ²»ÊÇʵ¼ÊÖµ
        key = _getch();//µÚ¶þ´Îµ÷Ó÷µ»ØÊµ¼ÊÖµ
    }
    
    if (changeFlag == 0)
    {
        gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);
        printf("  ");//ÔÚÉßβ´¦Êä³ö¿Õ¸ñ¼´²ÁÈ¥Éßβ
    }
    //½«ÉßµÄÿһ½ÚÒÀ´ÎÏòÇ°ÒÆ¶¯Ò»½Ú£¨ÉßÍ·³ýÍ⣩
    for (i = snake.len - 1; i > 0; i--)
    {
        snake.x[i] = snake.x[i - 1];
        snake.y[i] = snake.y[i - 1];
    }
    //Éßµ±Ç°Òƶ¯µÄ·½Ïò²»ÄܺÍǰһ´ÎµÄ·½ÏòÏà·´£¬±ÈÈçÉßÍù×ó×ßµÄʱºò²»ÄÜÖ±½Ó°´ÓÒ¼üÍùÓÒ×ß
    //Èç¹ûµ±Ç°Òƶ¯·½ÏòºÍǰһ´Î·½ÏòÏà·´µÄ»°£¬°Ñµ±Ç°Òƶ¯µÄ·½Ïò¸ÄΪǰһ´ÎµÄ·½Ïò
    if (pre_key == 72 && key == 80)
        key = 72;
    if (pre_key == 80 && key == 72)
        key = 80;
    if (pre_key == 75 && key == 77)
        key = 75;
    if (pre_key == 77 && key == 75)
        key = 77;
    
    //ÅжÏÉßÍ·Ó¦¸ÃÍùÄĸö·½ÏòÒÆ¶¯
    switch (key)
    {
    case 75:
        snake.x[0] -= 2;
        break;
    case 77:
        snake.x[0] += 2;
        break;
    case 72:
        snake.y[0]--;
        break;
    case 80:
        snake.y[0]++;
        break;
    }
    gotoxy(snake.x[0], snake.y[0]);
    printf("");
    gotoxy(MAPWIDTH - 2, 0);
    
    changeFlag = 0;
    return;
}
void createFood()
{ 
    if (snake.x[0] == food.x && snake.y[0] == food.y)
    {
        while (1)
        {
            int flag = 1;
            srand((unsigned int)time(NULL));
            food.x = rand() % (MAPWIDTH - 4) + 2;
            food.y = rand() % (MAPHEIGHT - 2) + 1;
            for (i = 0; i < snake.len; i++)
            {
                if (snake.x[i] == food.x && snake.y[i] == food.y)
                {
                    flag = 0;
                    break;
                }
            }
            if (flag && food.x % 2 == 0)
                break;
        }
        gotoxy(food.x, food.y);
        printf("*");
        snake.len++;
        sorce += 10;
        snake.speed -= 5;
        changeFlag = 1;
    }
    return;
}
bool snakeStatus()
{
    if (snake.y[0] == 0 || snake.y[0] == MAPHEIGHT)
        return false;
    if (snake.x[0] == 0 || snake.x[0] == MAPWIDTH)
        return false;
    for (i = 1; i < snake.len; i++)
    {
        if (snake.x[i] == snake.x[0] && snake.y[i] == snake.y[0])
            return false;
    }
    return true;
}

int main()
{
    drawMap();
    while (1)
    {
        keyDown();
        if (!snakeStatus())
            break;
        createFood();
        Sleep(snake.speed);
    }
 
    gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2);
    printf("Game Over!n");
    gotoxy(MAPWIDTH / 2, MAPHEIGHT / 2 + 1);
    printf("±¾´ÎÓÎÏ·µÃ·ÖΪ£º%dn", sorce);
    Sleep(5000);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号