贪吃蛇,新写的代码,可能还有点小问题

// tanchishe 3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
using namespace std;
#include <iostream>
#include<conio.h>
#include<Windows.h>
enum Mapstat
{
    ROAD, WALL, HEAD, BODY, FOOD
};
HANDLE h;
int  Map[20][20];
int  snake[20][2];
int CurCout;
int foodx;
int foody;
void Init();
void Show();
void Drawsnake();
void Move(char n);
void  BODYMove();
bool IsCanMove(int x,int y);
void SetFoodPostion();
void DrawFood();
bool isDead;
int sleepTime(int a);
void sring();
int main()
{
    isDead = false;
    SetFoodPostion();
    srand(time(NULL));
    CurCout = 3;    
    snake[0][0] = 5;
    snake[0][1] = 5;
    snake[1][0] = 5;
    snake[1][1] = 6;
    snake[2][0] = 5; 
    snake[2][1] = 7;
    sring();
    int a;
    cin >> a;
    char n = '2';
    system("cls");//清空控制台
    while (true)
    {
        Sleep(sleepTime( a));
        if (_kbhit())
        {
            n = _getch();
        }
        
        Init();
        Drawsnake();
        DrawFood();
        Show();
        
        if (isDead)
        {
            cout << "    Game Over" << endl;
            cout << "     输入数字1,重新开始,输入其他退出游戏"<<endl;
            int a;
            cin >> a;
            
            if (a==1)
            {
                system("cls");//清空控制台
                /*CurCout = 3;
                snake[0][0] = 5;
                snake[0][1] = 5;
                snake[1][0] = 5;
                snake[1][1] = 6;
                snake[2][0] = 5;
                snake[2][1] = 7;*/
                main();
            }
            else
            {
                cout<<"    你好菜,你个菜鸡";
                return 0;
            }
            return 0;
        }
        if (CurCout ==20)
        {
            cout << "    恭喜通关"; 
            return 1;
        }
        Move(n);
    
        CONSOLE_CURSOR_INFO info;//隐藏光标
        GetConsoleCursorInfo(h, &info);
        info.bVisible = false;
        SetConsoleCursorInfo(h, &info);
    }
    
}
int  sleepTime(int a)
{
    
    switch (a)
    {
    case 1:
        return 120; break;
    case 2:
        return 80; break;
    case 3:
        return 40; break;
    default:
        main();
            break;
    } 
    } 

void sring() {
    /*cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;*/
    cout << "请选择游戏难度" << endl;
    cout << "     输入1,选择一般" << endl;
    cout << "     输入2,选择困难" << endl;
    cout << "     输入3,选择困难加倍" << endl;
    cout << "输入文字选择对应的难度,输错无效"<<endl;
}
void DrawFood() {
    Map[foody][foodx] = FOOD;
}
void SetFoodPostion() {
    foodx = rand() % 18 + 1;
    foody = rand() % 18 + 1;
}
bool IsCanMove(int x, int y) 
{
    Mapstat m = (Mapstat)Map[y][x];
    switch (m)
    {
    case WALL:
        isDead = true;
            return false; break;
    case BODY:
        isDead = false;
        return true;
        break;
    case FOOD:
        SetFoodPostion();
        CurCout++;
        isDead = false;
        return true;
        break;
    }
    isDead = false; return true;
}
void  BODYMove()
{
    for (int i = CurCout-1; i>0; i--)
    {
        snake[i][0] = snake[i - 1][0];
        snake[i][1] = snake[i - 1][1];
    }
}

void Move(char n)
{
    switch (n)
    {
        case 'W':
        {
            if (IsCanMove(snake[0][0],snake[0][1]-1))
            {
                BODYMove();
                snake[0][1]--; 
            }
            
            break;
        }
        case 'S':
        {
            if (IsCanMove(snake[0][0], snake[0][1]+1 ))
        {
            BODYMove();
            snake[0][1]++; 
        }
             break;
            
        }
        case 'A':
        {
            if (IsCanMove(snake[0][0]-1, snake[0][1]))
            {
                BODYMove();
                snake[0][0]--;  
            }
        break;    
        }
        case 'D':
        {if (IsCanMove(snake[0][0]+1, snake[0][1]))
        {
            BODYMove();
            snake[0][0]++;
        }
          break;
        }
        default:
            break;
            
    }
}
void Drawsnake()
{
    for (int i = 0; i < CurCout; i++)
    {
        int x= snake[i][0];
        int y= snake[i][1];
        if (i==0)
        {
            Map[y][x] =(int) HEAD;
        }
        else
        {
            Map[y][x] =(int) BODY;
        }
    }
}
void Show() 
{
    COORD w{ 0,0 };
    for (int i = 0; i < 20; i++)
    {
        for (int j = 0; j < 20; j++)
        {
            w.X = j*2;
            w.Y = i;
            SetConsoleCursorPosition(h, w);
            Mapstat m= (Mapstat)Map[i][j];
            switch (m)
            {
            case ROAD:
                cout << "  ";
                break; 
            case WALL:
                cout << "■";
                break;
            case HEAD:
                cout << "●";
                break;
            case BODY:
                cout << "☆";
                break;
            case FOOD:
                cout << "★";
                break;
            }
        }
        cout << endl;

    }
}
void Init() 
{
    h = GetStdHandle(STD_OUTPUT_HANDLE);
    for (int i = 0; i < 20; i++)
    {
        for (int j = 0; j < 20; j++)
        {
            if (i==0||i==19||j==0||j==19)
            {
                Map[i][j] =(int) WALL;
            }
            else
            {
                Map[i][j] = (int)ROAD;
            }
        }
    }
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值