猎杀乌姆帕斯

#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include "windows.h"
#include "time.h"

/********************************************************************/
                  /*生成地图的范围及障碍物、陷阱的个数*/
/********************************************************************/
                             //随机数的最大值-1的值
#define MAP_MAX_X 30         //地图长

#define MAP_MAX_Y 20        //地图宽

#define TRAP_A 20+rand()%5              //陷阱个数  简单

#define OBSTACLE_A 20+rand()%5          //障碍物个数  简单


#define TRAP_B 40+rand()%30              //陷阱个数   较难

#define OBSTACLE_B 40+rand()%30          //障碍物个数   较难


#define TRAP_C 60+rand()%20              //陷阱个数   难

#define OBSTACLE_C 60+rand()%20          //障碍物个数   难


/*************************************************************************/
                            /*作弊器*/
              /**/   /**/  /* 发布时,CHEAT应该为 0  *//**/   /**/
/*************************************************************************/
#define CHEAT 1             //值为1是,显示地图。


/*************************************************************************/
                    /*为了移植,解决int的位数不同问题*/
/*************************************************************************/
#define INT int


/********************************************************************/
                           /*全局变量*/
/********************************************************************/
INT map[MAP_MAX_X][MAP_MAX_Y];   //来储存地图

INT Hero_X,Hero_Y;     //来存储玩家所在位置

INT shooting;      //冒险家身上的箭只个数


/********************************************************************/
                         /*函数部分*/
/********************************************************************/
 //主函数调用一个函数.显示开始界面并响应用户操作
/********************************************************************/
void startGame();*  


/********************************************************************/
//这个函数用来生成随机地图
/********************************************************************/
void creatMap(); /**/  


/********************************************************************/
//这个函数用来响应用户操作
/********************************************************************/
void player(); /**/   


/********************************************************************/
//设置乌姆帕斯
/********************************************************************/
void setWUM();/**/  //creatMap    


/********************************************************************/
 //设置陷阱
/********************************************************************/
void setTrap(INT); /**///creatMap   


/********************************************************************/
 //设置障碍物
/********************************************************************/
void setObstacle(INT); /**/ //creatMap  


/********************************************************************/
//设置人物
/********************************************************************/
void setPeople();/**/   //creatMap     


/********************************************************************/
//显示地图当前信息
/********************************************************************/
void showMap(); //player        


/********************************************************************/
/*响应玩家操作并记录其返回值,不正确提示重新输入*/
/********************************************************************/
INT playerEvent(); /**///player    


/********************************************************************/
//如果游戏结束提示是否重玩:
/********************************************************************/
void replay(); /**/ //player      


/********************************************************/
/*人物移动*/
/********************************************************/
INT move(INT flag);/**/

/********************************************************/
/*射箭射中乌姆帕斯返回1胜利,如果没射中减少
一点弓箭的数量,如果弓箭用光返回4,没用光返回0*/
/********************************************************/
INT shoot();/**/


/********************************************************/
/********************************************************/
                       /*开始菜单*/
/********************************************************/
void start_menu();

/********************************************************/
                       /*帮助菜单*/
/********************************************************/
void help_menu();

/********************************************************/
                       /*移动、射击菜单*/
/********************************************************/
void move_shoot_menu();

/********************************************************/
                       /*射击方向菜单*/
/********************************************************/
void shoot_menu();


/********************************************************/
                       /*选择难度系数菜单*/
/********************************************************/
void sle_menu();


/********************************************************/
                       /*游戏简介*/
/********************************************************/
void game_menu();


/********************************************************/
                       /*地图全景,测试用*/
                     /*生成时,请关闭作弊器*/
/********************************************************/
void aaa();



/********************************************************/
/*主函数位置*/

int main()
{
    srand((unsigned INT)time(NULL));//x = rand()%6;

    startGame();
    return 0;
}

/********************************************************/


void aaa()
{
    INT i = 0,j = 0;
    for(i = 0;i<MAP_MAX_X;i++)
    {
        for(j = 0;j<MAP_MAX_Y;j++)
        {
            printf("%3d",map[i][j]);
        }
         printf("\n");
    }
}

void creatMap() /**/ //这个函数用来生成随机地图
{
    INT sle = 0;
    INT i = 0 ,j = 0;
    shooting = 3;
    for(i = 0;i<MAP_MAX_X;i++)
    {
        for(j = 0;j<MAP_MAX_Y;j++)
        {
            map[i][j] = 0;
        }
    }


    sle_menu();
    
    printf("★                         请选择难度系数                         ★\n");
    scanf_s("%d",&sle,1);
    fflush(stdin);
    system("cls");
    while(sle !=1&&sle !=2&&sle !=3)
    {
        printf("输入错误,请重新选择难度系数\n");

        sle_menu();
        printf("★                         请选择难度系数                         ★\n");
        scanf_s("%d",&sle,1);
        system("cls");
        fflush(stdin);
    }
    switch(sle)
    {
    case 1: setWUM();
            setTrap(TRAP_A);
            setObstacle(OBSTACLE_A);
            setPeople();
        break;
    case 2: setWUM();
            setTrap(TRAP_B);
            setObstacle(OBSTACLE_B);
            setPeople();
        break;
    case 3: setWUM();
            setTrap(TRAP_C);
            setObstacle(OBSTACLE_C);
            setPeople();
        break;
        default:printf("★                         $$$$$$$$$$$$                         ★\n");
    }

/*
    setWUM();
    setTrap(sle);
    setObstacle(sle);
    setPeople();*/
}

void setWUM()   /**/       //分别设置乌姆帕斯
{
    INT boos_x = 0 , boos_y = 0;        //99代表boos
    boos_x = rand()%MAP_MAX_X-1;
    boos_y = rand()%MAP_MAX_Y-1;
    map[boos_x][boos_y]  = 99;
}

void setTrap(INT tiap)  /**/      //陷阱
{
    INT i = 0;
    INT trap_x = 0 ,trap_y = 0;       //-11代表陷阱
    i = tiap;
    trap_x = rand()%MAP_MAX_X;
    trap_y = rand()%MAP_MAX_Y;
    while(i)
    {
        if(map[trap_x][trap_y]!=99)
        {
            map[trap_x][trap_y] = -11;
            i--;
        }
        trap_x = rand()%MAP_MAX_X;
        trap_y = rand()%MAP_MAX_Y;
    }

}

void setObstacle(INT tiap)/**/     //障碍物
{
    INT i = 0;
    INT obstacle_x = 0,obstacle_y = 0;  //11 代表障碍物
    i = tiap;
    obstacle_x = rand()%MAP_MAX_X;
    obstacle_y = rand()%MAP_MAX_Y;
    while(i)
    {
        if(map[obstacle_x][obstacle_y]!=99||map[obstacle_x][obstacle_y]!=-11)
        {
            map[obstacle_x][obstacle_y] = 11;
            i--;
        }
        obstacle_x = rand()%MAP_MAX_X;
        obstacle_y = rand()%MAP_MAX_Y;
    }

}

void setPeople()/**/
{
    INT i = 1;
    Hero_X = rand()%MAP_MAX_X;
    Hero_Y = rand()%MAP_MAX_Y;
    while(i)
    {
        if(map[Hero_X][Hero_Y]!=99||map[Hero_X][Hero_Y]!=-11||map[Hero_X][Hero_Y]!=11)
        {
            map[Hero_X][Hero_Y] = 55;
            break;
        }
        else
        {
            Hero_X = rand()%MAP_MAX_X;
            Hero_Y = rand()%MAP_MAX_Y;
        }

    }
}

/**********************************************/
/*人物移动*/
/*-1,障碍物。0,成功移动。2,被吃掉。3,掉进陷阱*/
/**********************************************/
INT move(INT flag)            //人物移动
{
    /*5上。2下。1左。3右*/
    /*上下——X,左右——Y*/
    INT i = -1;
    switch(flag)
        {
            case 5:Hero_X--;
                    if(map[Hero_X][Hero_Y]!=99&&map[Hero_X][Hero_Y]!=-11&&map[Hero_X][Hero_Y]!=11)
                    {
                        map[Hero_X][Hero_Y] = 55;
                        i = 0;
                        break;
                    }
                    else if(map[Hero_X][Hero_Y]==99)
                    {
                        i = 2;
                    }
                    else if(map[Hero_X][Hero_Y]==-11)
                    {
                        i = 3;
                    }
                    else if(map[Hero_X][Hero_Y]==11)
                    {
                        Hero_X++;
                         map[Hero_X][Hero_Y] = 55;
                        i = 1;//遇到障碍无法前行。
                    }
            break;
            case 2:Hero_X++;
                if(map[Hero_X][Hero_Y]!=99&&map[Hero_X][Hero_Y]!=-11&&map[Hero_X][Hero_Y]!=11)
                    {
                        map[Hero_X][Hero_Y] = 55;
                        i = 0;
                        break;
                    }
                    else if(map[Hero_X][Hero_Y]==99)
                    {
                        i = 2;
                    }
                    else if(map[Hero_X][Hero_Y]==-11)
                    {
                        i = 3;
                    }
                    else if(map[Hero_X][Hero_Y]==11)
                    {
                        Hero_X--;
                         map[Hero_X][Hero_Y] = 55;
                        i = 1;//遇到障碍无法前行。
                    }
            break;
            case 1:Hero_Y--;
                if(map[Hero_X][Hero_Y]!=99&&map[Hero_X][Hero_Y]!=-11&&map[Hero_X][Hero_Y]!=11)
                    {
                        map[Hero_X][Hero_Y] = 55;
                        i = 0;
                        break;
                    }
                    else if(map[Hero_X][Hero_Y]==99)
                    {
                        i = 2;
                    }
                    else if(map[Hero_X][Hero_Y]==-11)
                    {
                        i = 3;
                    }
                    else if(map[Hero_X][Hero_Y]==11)
                    {
                        Hero_Y++;
                         map[Hero_X][Hero_Y] = 55;
                        i = 1;//遇到障碍无法前行。
                    }
            break;
            case 3:Hero_Y++;
                if(map[Hero_X][Hero_Y]!=99&&map[Hero_X][Hero_Y]!=-11&&map[Hero_X][Hero_Y]!=11)
                    {
                        map[Hero_X][Hero_Y] = 55;
                        i = 0;
                        break;
                    }
                    else if(map[Hero_X][Hero_Y]==99)
                    {
                        i = 2;
                    }
                    else if(map[Hero_X][Hero_Y]==-11)
                    {
                        i = 3;
                    }
                    else if(map[Hero_X][Hero_Y]==11)
                    {
                         Hero_Y--;
                         map[Hero_X][Hero_Y] = 55;
                        i = 1;//遇到障碍无法前行。
                    }
            break;
            default :printf("move输入错误\n");
        }
    return i;
}

/**********************************************/
/*射箭射中乌姆帕斯返回1胜利,如果没射中减少
一点弓箭的数量,如果弓箭用光返回4,没用光返回0*/
/*     0,空空的。1,杀死了boos 4,无能为力了 */
/**********************************************/
INT shoot()
{
    int direction;
    int shoot_x = Hero_X,shoot_y = Hero_Y;
    int flag = -1;
    if(shooting<=0)
    {
        return 4;
    }
#if CHEAT
    aaa();
#endif
    shoot_menu();
    
    printf("★                         请输入射箭的方向                         ★\n");
    scanf_s("%d",&direction,1);
    fflush(stdin);
    system("cls");
    while(direction !=5&&direction !=2&&direction !=1&&direction !=3)
    {
        printf("输入错误,无法通行请重新选择方向\n");
#if CHEAT
    aaa();
#endif
        shoot_menu();
        printf("★                         请输入射箭的方向                         ★\n");
        scanf_s("%d",&direction,1);
        system("cls");
    }
    switch(direction)
    {
        case 5:if(--shoot_x<0)
                {
                    printf("遇到边界\n");
                    shooting--;
                    break;
                }
                else if(map[shoot_x][shoot_y]==99)
                {
                    flag = 1;
                    shooting--;
                }
                else
                {
                    shooting--;
                    if(shooting<=0)
                    {
                        return 4;
                    }
                    flag = 0;
                }
        break;
        case 2:if(++shoot_x>=MAP_MAX_X)
                {
                    printf("遇到边界\n");
                    shooting--;
                    break;
                }
                else if(map[shoot_x][shoot_y]==99)
                {
                    flag = 1;
                    shooting--;
                }
                else
                {
                    shooting--;
                    if(shooting<=0)
                    {
                        return 4;
                    }
                    flag = 0;
                }
        break;
        case 1:if(--shoot_y<0)
                {
                    printf("遇到边界\n");
                    shooting--;
                    break;
                }
                else if(map[shoot_x][shoot_y]==99)
                {
                    flag = 1;
                    shooting--;
                }
                else
                {
                    shooting--;
                    if(shooting<=0)
                    {
                        return 4;
                    }
                    flag = 0;
                }
        break;
        case 3:if(++shoot_y>=MAP_MAX_Y)
                {
                    printf("遇到边界\n");
                    shooting--;
                    break;
                }
                else if(map[shoot_x][shoot_y]==99)
                {
                    flag = 1;
                    shooting--;
                }
                else
                {
                    shooting--;
                    if(shooting<=0)
                    {
                        return 4;
                    }
                    flag = 0;
                }
        break;
        default :printf("输入错误\n");
    }
    return flag;
}

INT playerEvent() //player  //响应玩家操作并记录其返回值,不正确提示重新输入
{
    /*5上。2下。1左。3右*/
    /*上下——X,左右——Y*/
    INT i = 1,j = 1;
    INT direction = 0;
    INT flag = 0;
    while(i)
    {
#if CHEAT
    aaa();
#endif

        move_shoot_menu();

        printf("★ ★ ★ ★ ★ ★ ★ ★ ★★请输入你的选择★★ ★ ★ ★ ★ ★ ★ ★ ★\n");
        scanf_s("%d",&direction,1);
        system("cls");
        /*使用下面的检验,没有排除合格输入以外的其他非正确的选择,会出错*/
       /* while(direction !=5&&direction !=2&&direction !=1&&direction !=3&&direction !=0)
        {
            printf("输入错误,无法通行请重新选择方向\n");
#if CHEAT
    aaa();
#endif

            move_shoot_menu();

            printf("★ ★ ★ ★ ★ ★ ★ ★ ★★请输入你的选择★★ ★ ★ ★ ★ ★ ★ ★ ★\n");
            scanf_s("%d",&direction,1);
            system("cls");
        }*/
    /*使用下面的检验,是为了排除合格输入以外的其他非正确的选择*/    
    while(j)
    {
        switch(direction)
        {
            case 5: j = 0;
                break;
            case 2: j = 0;
                break;
            case 3: j = 0;
                break;
            case 1: j = 0;
                break;
            case 0: j = 0;
                break;
            default :printf("\n★★★★★★★★★★★★输入错误,请重新选择★★★★★★★★★★★★\n\n\n");
        }
        if(j!=0)
        {
                system("pause");
                system("cls");
                fflush(stdin);
        #if CHEAT
            aaa();
        #endif
                move_shoot_menu();
                printf("★★★★★★★★★★★★★★请输入你的选择★★★★★★★★★★★★★★\n");
                scanf_s("%d",&direction,1);
                system("cls");
        }
    }
        switch(direction)
        {
            case 5:if(--Hero_X<0)
                    {
                        printf("遇到边界,无法通行请重新选择方向\n");
                        ++Hero_X;
                        break;
                    }
                    else
                    {
                        /**///人物移动痕迹擦除
                        map[++Hero_X][Hero_Y] = 0;
                    /**/
                        flag = 5;
                        i = 0;
                    }
            break;
            case 2:if(++Hero_X>=MAP_MAX_X)
                    {
                        printf("遇到边界,无法通行请重新选择方向\n");
                        --Hero_X;
                        break;
                    }
                    else
                    {/**///任务移动痕迹擦除
                        map[--Hero_X][Hero_Y] = 0;
                    /**/
                        flag = 2;
                        i = 0;
                    }
            break;
            case 1:if(--Hero_Y<0)
                    {
                        printf("遇到边界,无法通行请重新选择方向\n");
                        ++Hero_Y;
                        break;
                    }
                    else
                    {
                        /**///任务移动痕迹擦除
                        map[Hero_X][++Hero_Y] = 0;
                    /**/
                        flag = 1;
                        i = 0;
                    }
            break;
            case 3:if(++Hero_Y>=MAP_MAX_Y)
                    {
                        printf("遇到边界,无法通行请重新选择方向\n");
                        --Hero_Y;
                        break;
                    }
                    else
                    {
                        /**///任务移动痕迹擦除
                        map[Hero_X][--Hero_Y] =0;
                    /**/
                        flag = 3;
                        i = 0;
                    }
            break;
            case 0:flag = 6;
                i = 0;
                break;
            default :printf("输入错误,无法通行请重新选择方向\n");
        }
    }
    return flag;
}

void player()
{
    INT flag = -2;
    INT flagnest1 = -2;
    INT flagnest2 = -2;
    showMap();
    flag = playerEvent();

    
    if(flag == 1||flag == 2||flag == 5||flag == 3)
    {
        flagnest2 = move(flag);
        if(flagnest2 == 3||flagnest2 == 2)
        {
            /*死掉*/
            printf("很遗憾,你冒险失败!\n");
            replay();
        }
        else if(flagnest2 == 1)
        {
             printf("抱歉,你撞到墙了!!!\n");
             printf("请重新选择方向!\n");
             /**/
        }
            player();
    }
    /*11-11*/
    if(flag == 6)
    {
       flagnest1 = shoot();
       if(flagnest1 == 4)
        {
            /*死掉*/
            printf("很遗憾,你冒险失败\n");
            replay();
        }
        if(flagnest1 == 1)
        {
            /*胜利*/
            printf("恭喜你,冒险成功!!!\n");
            replay();
        }
        else
        {
             printf("天空飘来五个字,什么都没有!!!\n");
            player();
        }
    }
}

void replay()
{
    INT x = 0;
    printf("1:重新开始游戏\n");
    printf("2:退出游戏\n");
    scanf_s("%d",&x,1);
    /*使用下面的检验,是为了排除合格输入以外的其他非正确的选择*/
    while(x)
    {
        switch(x)
        {
            case 1:startGame();
                break;
            case 2:exit(0);
                break;
            default :printf("\n★★★★★★★★★★★★输入错误,请重新选择★★★★★★★★★★★★\n\n\n");
        }
        system("pause");
        system("cls");
        fflush(stdin);
        printf("1:重新开始游戏\n");
        printf("2:退出游戏\n");
        printf("★★★★★★★★★★★★★★请输入你的选择★★★★★★★★★★★★★★\n");
        scanf_s("%d",&x,1);
        system("cls");
    
    }
}

void startGame()
{
    int i= 0;

    start_menu();

    printf("★ ★ ★ ★ ★ ★ ★ ★ ★★请输入你的选择★★ ★ ★ ★ ★ ★ ★ ★ ★\n");
    scanf_s("%d",&i,1);
    system("cls");
    /*使用下面的检验,是为了排除合格输入以外的其他非正确的选择*/
    while(i)
    {
        switch (i)
        {
            case 1:printf("\n★★★★★★★★★★★★★★祝您游戏愉快★★★★★★★★★★★★★★\n\n\n");
                creatMap();
                   player();
                break;
            case 2:help_menu();
                break;
            case 3:game_menu();
                break;
            default:printf("\n★★★★★★★★★★★★输入错误,请重新选择★★★★★★★★★★★★\n\n\n");
        }
        system("pause");
        system("cls");
        fflush(stdin);
        start_menu();

        printf("★★★★★★★★★★★★★★请输入你的选择★★★★★★★★★★★★★★\n");
        scanf_s("%d",&i,1);
        system("cls");
    }
    
}

void showMap()
{
/*,1.毫无可疑情况
2,闻到了乌木帕斯的气息
3,蝙蝠迎面飞来(表示附近有陷阱)
4,蝙蝠与乌姆帕斯并存

当玩家收到(闻到乌姆帕斯气息)的信息后,表示附近两步之内会走到乌姆帕斯的地盘
当玩家收到(有陷阱)的信息后,表示附近一步之内会掉到陷阱中去

当玩家走到乌姆帕斯的周围四格的范围内,并且向乌姆帕斯所在地区射箭时,游戏胜利

当玩家掉入陷阱、走入乌姆帕斯的地盘、弓箭用尽时,(也可以附加一个移动步数限制,增加游戏难度)游戏失败。
*/
    /*if(map[Hero_X][Hero_Y])
    {}*/
    int flag = 0;
    INT p_x =Hero_X ,p_y =Hero_Y ;
    if(Hero_X>=2&&Hero_X<=MAP_MAX_X-3&&Hero_Y>=2&&Hero_Y<=MAP_MAX_Y-3)
    {
        if(map[Hero_X-2][Hero_Y] == 99||map[Hero_X-1][Hero_Y] == 99||map[Hero_X+1][Hero_Y] == 99||map[Hero_X+2][Hero_Y] == 99)
        {
            flag = 1;
        }
        else if(map[Hero_X][Hero_Y-1] == 99||map[Hero_X][Hero_Y-2] == 99||map[Hero_X][Hero_Y+1] == 99||map[Hero_X][Hero_Y+2] == 99)
        {
            flag = 1;
        }
    }
    if((p_x-1)<0&&Hero_Y>=2&&Hero_Y<=MAP_MAX_Y-3)
    {
        p_x = 0;
        if(map[p_x][Hero_Y] == 99||map[p_x][Hero_Y] == 99||map[Hero_X+1][Hero_Y] == 99||map[Hero_X+2][Hero_Y] == 99)
        {
            flag = 1;   //有boos
        }
        if(map[Hero_X][Hero_Y-2] == 99||map[Hero_X][Hero_Y-1] == 99||map[Hero_X][Hero_Y+1] == 99||map[Hero_X][Hero_Y+2] == 99)
        {
            flag = 1;
        }
        if(map[p_x][Hero_Y-1] == 99||map[p_x][Hero_Y+1] == 99||map[Hero_X+1][Hero_Y-1] == 99||map[Hero_X+1][Hero_Y+1] == 99)
        {
            flag = 1;
        }
    }
    else if(Hero_X>=2&&Hero_X<=MAP_MAX_X-3&&(p_y-1)<0)
    {
        p_y = 0;
        if(map[Hero_X-2][Hero_Y] == 99||map[Hero_X-1][Hero_Y] == 99||map[Hero_X+1][Hero_Y] == 99||map[Hero_X+2][Hero_Y] == 99)
        {
            flag = 1;   //有boos
        }
        if(map[Hero_X][p_y] == 99||map[Hero_X][p_y] == 99||map[Hero_X][Hero_Y+1] == 99||map[Hero_X][Hero_Y+2] == 99)
        {
            flag = 1;
        }
        if(map[Hero_X-1][p_y] == 99||map[Hero_X-1][Hero_Y+1] == 99||map[Hero_X+1][p_y] == 99||map[Hero_X+1][Hero_Y+1] == 99)
        {
            flag = 1;
        }
    }
    else if(Hero_X>=2&&Hero_X<=MAP_MAX_X-3&&(p_y-2)<0)
    {
        p_y = 0;
        if(map[Hero_X-2][Hero_Y] == 99||map[Hero_X-1][Hero_Y] == 99||map[Hero_X+1][Hero_Y] == 99||map[Hero_X+2][Hero_Y] == 99)
        {
            flag = 1;   //有boos

        }
        if(map[Hero_X][p_y] == 99||map[Hero_X][Hero_Y-1] == 99||map[Hero_X][Hero_Y+1] == 99||map[Hero_X][Hero_Y+2] == 99)
        {
            flag = 1;
        }
        if(map[Hero_X-1][Hero_Y-1] == 99||map[Hero_X-1][Hero_Y+1] == 99||map[Hero_X+1][Hero_Y-1] == 99||map[Hero_X+1][Hero_Y+1] == 99)
        {
            flag = 1;
        }
    }
    else
    {
        p_x = 0;
        if(map[p_x][Hero_Y] == 99||map[Hero_X-1][Hero_Y] == 99||map[Hero_X+1][Hero_Y] == 99||map[Hero_X+2][Hero_Y] == 99)
        {
            flag = 1;   //有boos

        }
        if(map[Hero_X][Hero_Y-2] == 99||map[Hero_X][Hero_Y-1] == 99||map[Hero_X][Hero_Y+1] == 99||map[Hero_X][Hero_Y+2] == 99)
        {
            flag = 1;
        }
        if(map[Hero_X-1][Hero_Y-1] == 99||map[Hero_X-1][Hero_Y+1] == 99||map[Hero_X+1][Hero_Y-1] == 99||map[Hero_X+1][Hero_Y+1] == 99)
        {
            flag = 1;
        }
    }

    /*printf("★ ★ ★ ★ ★ ★ ★ ★  闻到了乌木帕斯的气息  ★ ★ ★ ★ ★ ★ ★ ★\n");
           printf("★ ★ ★ ★ ★ ★    蝙蝠迎面飞来(表示附近有陷阱)  ★ ★ ★ ★ ★ ★\n");*/
    if(flag == 1)
    {
        if(Hero_X>=1&&Hero_X<=MAP_MAX_X-2&&Hero_Y>=1&&Hero_Y<=MAP_MAX_Y-2)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X][Hero_Y+1] == -11||map[Hero_X+1][Hero_Y] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_X==0&&Hero_Y>=1&&Hero_Y<=MAP_MAX_Y-2)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X][Hero_Y+1] == -11||map[Hero_X+1][Hero_Y] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_X>=1&&Hero_X<=MAP_MAX_X-2&&Hero_Y==0)
        {
            if(map[Hero_X-1][Hero_Y] == -11||map[Hero_X+1][Hero_Y] == -11||map[Hero_X][Hero_Y+1] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_X>=1&&Hero_X<=MAP_MAX_X-2&&Hero_Y==MAP_MAX_Y-1)
        {
            if(map[Hero_X-1][Hero_Y] == -11||map[Hero_X+1][Hero_Y] == -11||map[Hero_X][Hero_Y-1] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_Y>=1&&Hero_Y<=MAP_MAX_Y-2&&Hero_X==MAP_MAX_X-1)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X][Hero_Y+1] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_Y==0&&Hero_X==0)
        {
            if(map[Hero_X][Hero_Y+1] == -11||map[Hero_X+1][Hero_Y] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_Y==MAP_MAX_Y-1&&Hero_X==MAP_MAX_X-1)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_X==0&&Hero_Y==MAP_MAX_Y-1)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X+1][Hero_Y] == -11)
            {
                flag = 2;
            }
        }
        else if(Hero_Y==0&&Hero_X==MAP_MAX_X-1)
        {
            if(map[Hero_X][Hero_Y+1] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 2;
            }
        }
    }

    /*★ ★ ★ ★ ★ ★    蝙蝠迎面飞来(表示附近有陷阱)  ★ ★ ★ ★ ★ ★*/
    if(flag != 1&&flag != 2)
    {
        if(Hero_X>=1&&Hero_X<=MAP_MAX_X-2&&Hero_Y>=1&&Hero_Y<=MAP_MAX_Y-2)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X][Hero_Y+1] == -11||map[Hero_X+1][Hero_Y] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_X==0&&Hero_Y>=1&&Hero_Y<=MAP_MAX_Y-2)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X][Hero_Y+1] == -11||map[Hero_X+1][Hero_Y] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_X>=1&&Hero_X<=MAP_MAX_X-2&&Hero_Y==0)
        {
            if(map[Hero_X-1][Hero_Y] == -11||map[Hero_X+1][Hero_Y] == -11||map[Hero_X][Hero_Y+1] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_X>=1&&Hero_X<=MAP_MAX_X-2&&Hero_Y==MAP_MAX_Y-1)
        {
            if(map[Hero_X-1][Hero_Y] == -11||map[Hero_X+1][Hero_Y] == -11||map[Hero_X][Hero_Y-1] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_Y>=1&&Hero_Y<=MAP_MAX_Y-2&&Hero_X==MAP_MAX_X-1)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X][Hero_Y+1] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_Y==0&&Hero_X==0)
        {
            if(map[Hero_X][Hero_Y+1] == -11||map[Hero_X+1][Hero_Y] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_Y==MAP_MAX_Y-1&&Hero_X==MAP_MAX_X-1)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_X==0&&Hero_Y==MAP_MAX_Y-1)
        {
            if(map[Hero_X][Hero_Y-1] == -11||map[Hero_X+1][Hero_Y] == -11)
            {
                flag = 3;
            }
        }
        else if(Hero_Y==0&&Hero_X==MAP_MAX_X-1)
        {
            if(map[Hero_X][Hero_Y+1] == -11||map[Hero_X-1][Hero_Y] == -11)
            {
                flag = 3;
            }
        }
    }

    switch(flag)
    {
    case 1:printf("★ ★ ★ ★ ★ ★ ★ ★  闻到了乌木帕斯的气息  ★ ★ ★ ★ ★ ★ ★ ★\n");
        break;
    case 2:printf("★ ★ ★ ★ ★ ★ ★ ★  闻到了乌木帕斯的气息  ★ ★ ★ ★ ★ ★ ★ ★\n");
           printf("★ ★ ★ ★ ★ ★    蝙蝠迎面飞来(表示附近有陷阱)  ★ ★ ★ ★ ★ ★\n");
        break;
    case 3:printf("★ ★ ★ ★ ★ ★    蝙蝠迎面飞来(表示附近有陷阱)  ★ ★ ★ ★ ★ ★\n");
        break;
    case 0:printf("★ ★ ★ ★ ★ ★ ★ ★ ★   毫无可疑情况   ★ ★ ★ ★ ★ ★ ★ ★ ★\n");
        break;
    default :printf("★ ★ ★ ★ ★ ★ ★ ★ ★   bugbugbug    ★ ★ ★ ★ ★ ★ ★ ★ ★\n");
    }
}

void start_menu()
{
        printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
        printf("★                                                                  ★\n");
        printf("★     ★★★玩家每次只能移动一个距离,每次只能射出一只箭★★★     ★\n");
        printf("★                                                                  ★\n");
        printf("★                                                                  ★\n");
        printf("★                                                                  ★\n");
        printf("★                                                                  ★\n");
        printf("★                       1.开始游戏                                 ★\n");
        printf("★                       2.游戏帮助                                 ★\n");
        printf("★                       3.游戏简介                                 ★\n");
        printf("★                       0.退出游戏                                 ★\n");
        printf("★                                                                  ★\n");
        printf("★                                                                  ★\n");
        printf("★                                                                  ★\n");
        printf("★                                                                  ★\n");
        printf("★                                                  by:xaut_wb_001  ★\n");
        printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
        printf("\n");
}

void help_menu()
{
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
    printf("★                                                                  ★\n");
    printf("★     ★★★玩家每次只能移动一个距离,每次只能射出一只箭★★★     ★\n");
    printf("★                                                                  ★\n");
    printf("★                   1.毫无可疑情况                                 ★\n");
    printf("★                   2.闻到了乌木帕斯的气息                         ★\n");
    printf("★                   3.蝙蝠迎面飞来(表示附近有陷                   ★\n");
    printf("★                                                                  ★\n");
    printf("★①.当玩家收到(闻到乌姆帕斯气息)的信息后,表示附近两步之内会走到 ★\n");
    printf("★   乌姆帕斯的地盘                                                 ★\n");
    printf("★②.当玩家收到(有陷阱)的信息后,表示附近一步之内会掉到陷阱中去   ★\n");
    printf("★③.当玩家走到乌姆帕斯的周围四格的范围内,并且向乌姆帕斯所在地区射 ★\n");
    printf("★   箭时,游戏胜利                                                 ★\n");
    printf("★④.当玩家掉入陷阱、走入乌姆帕斯的地盘、弓箭用尽时,(也可以附加一 ★\n");
    printf("★   个移动步数限制,增加游戏难度)游戏失败。                       ★\n");
    printf("★                                                                  ★\n");
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
}

void move_shoot_menu()
{
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
    printf("★                                                                  ★\n");
    printf("★     ★★★玩家每次只能移动一个距离,每次只能射出一只箭★★★     ★\n");
    printf("★                                                                  ★\n");
    printf("★                                                                  ★\n");
    printf("★                         5.向上走                                 ★\n");
    printf("★                                                                  ★\n");
    printf("★                                                                  ★\n");
    printf("★            1.向左走      0.射击       3.向右走                   ★\n");
    printf("★                                                                  ★\n");
    printf("★                                                                  ★\n");
    printf("★                         2.向下走                                 ★\n");
    printf("★                                                                  ★\n");
    printf("★                                                                  ★\n");
    printf("★                                                                  ★\n");
    printf("★                                                  by:xaut_wb_001  ★\n");
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
    printf("\n");
}

void shoot_menu()
{
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
    printf("★                                                                  ★\n");
    printf("★     ★★★            每次只能射出一只箭              ★★★     ★\n");
    printf("★                                                                  ★\n");
    printf("★                             ↑↑↑↑                             ★\n");
    printf("★                          5:↑↑↑↑                             ★\n");
    printf("★                                                                  ★\n");
    printf("★          1:←←←←←                  3:→→→→→            ★\n");
    printf("★             ←←←←←                     →→→→→            ★\n");
    printf("★                                                                  ★\n");
    printf("★                          2:↓↓↓↓                             ★\n");
    printf("★                             ↓↓↓↓                             ★\n");
    printf("★                                                                  ★\n");
    printf("★                                                  剩余箭个数:%d  ★\n",shooting);
    printf("★                                                  by:xaut_wb_001  ★\n");
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n\n");
}

void game_menu()
{
    printf("   历史是如何形成的?茨威格说,历史是由无数细小的人和细小的瞬间汇聚而成的;\n"
        "恩格斯说,历史是由许多单个的意志冲突而成的。 历史的意义何在?有人说历史像一束凋\n"
        "谢的玫瑰,永远只能在记忆中回味它的美丽;有人说历史像一条奔腾不息的大河,融入现\n"
        "在,追向未来。 我只能说,历史是枯燥的,虽然我们无法改变历史,但未来的历史必将由\n"
        "我们创造。 让我们一起触摸电脑游戏史上这段由无数细小的人和细小的瞬间编织而成的岁\n"
        "月,重温它的传奇,眺望它的未来。 一、文字的火炬 自从第一款电脑游戏《太空大战》在\n"
        "麻省理工学院诞生、设计三原则被提出来之后,越来越多的电脑精英被交互式娱乐的魅力所\n"
        "吸引。当时的电脑仅存在于大学和研究机构当中,电脑游戏仍属于“精英的游戏”,良好的\n"
        "学术环境无疑对刚诞生不久的电脑游戏起到了极大的促进作用。 由于受到硬件的限制,早\n"
        "期的电脑游戏以文字为主,它赋予玩家的想象空间远大于今天众多所谓的“高科技游戏”。\n"
        "“你听见蝙蝠在耳边扑扇着翅膀,你感觉到一股气流从身旁吹过,你闻到了乌姆帕斯的气息\n"
        "。” 1972年,在大型机统治地球的最后岁月里,《猎杀乌姆帕斯》(Hunt the Wumpus)成\n"
        "为继《太空大战》之后另一部广为流传的电脑游戏。《猎杀乌姆帕斯》的开发者为美国马萨\n"
        "诸塞大学的格雷戈里·约伯,这是一部运行于分时系统上的纯文字冒险游戏,内容大致如下\n"
        " :你装备着5枝箭,进入一个纵横相通的山洞,寻找游荡其中的怪物乌姆帕斯。每进入一个\n"
        " 洞穴,游戏都会提供一些文字线索,例如“你感觉到一股穿行于无底深渊中的气流”(表\n"
        " 示前方有陷阱),“你听见前面有一群扑扇着翅膀的蝙蝠”(可以把你引往一处随机洞穴\n"
        " );当游戏提示“你闻到了乌姆帕斯的气息”的时候,你就可以拉开弓,朝藏有乌姆帕斯的\n"
        " 洞穴射出一箭,射中后游戏便会结束。 《猎杀乌姆帕斯》在ARPAnet上流传一时,其代码公\n"
         "布于1975年的《创意化计算》杂志上,此后又繁衍出许多不同的版本。直至近日,依然有不\n"
         "少痴迷者延续着乌姆帕斯的传奇,例如波士顿大学的格伦·布雷斯纳汉制作的“网络版乌姆\n"
         "帕斯”,就是一款嵌有图片且提供有多人共玩特性的游戏,链接地址为:scv.bu.edu/htbin\n"
        " /wcl。 “谨将此游戏献给我的两个女儿……” 严格地说,《猎杀乌姆帕斯》并非交互式游\n"
         "戏,因为在整个过程中你不必输入任何指令,只要选择不同的洞穴进入,最后射出致命一箭\n"
        " 即可。");
}

void sle_menu()
{
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
    printf("★                                                                  ★\n");
    printf("★                      ★地图大小  30*20★                         ★\n");
    printf("★     ★★★                难度系数                     ★★★    ★\n");
    printf("★                                                                  ★\n");
    printf("★                   1.      ★简单★                               ★\n");
    printf("★                   2.    ★★较难★★                             ★\n");
    printf("★                   3.   ★★★难★★★                            ★\n");
    printf("★                                                                  ★\n");
    printf("★①.★简单★ :陷阱和障碍物各20--25个。                            ★\n");
    printf("★②.★★较难★★ :陷阱和障碍物各40--70个                          ★\n");
    printf("★③.★★★难★★★ :陷阱和障碍物各60--80个                        ★\n");
    printf("★                                                                  ★\n");
    printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n");
}
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值