数字迷宫

来源:互联网 发布:怎么在淘宝上买片 编辑:程序博客网 时间:2024/05/21 16:49

#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<conio.h>
void HideCursor();//隐藏光标
void GoToXY(int x, int y);//该函数用于在x,y位置输出用户头像
void Music();//喇叭开关
void SetCode(int num);//该函数通过传入的num值来判断并输出为:■,空格*2,或者数字本身
void SetWindow();//生成地图主体函数:遍历公共数组,在位置部位(1,1)时,调用SetCode函数,并在(1,1)位置输出玩家头像
void SetNum();//程序初始化时,用于使用随机函数在数组"走廊"位置生成1~7的阿拉伯数字
void LeftKey();
void UpKey();
void DownKey();
void RightKey();//玩家按下,上下左右按键时,分别调用的函数,该函数可判断玩家是否为被墙体阻挡、正常行走、"吃"掉数字三种状态,并改变玩家头像的位置。
int CheckLeftNum();//该函数判断数组内剩余的数字(>0)数量,返回该数量
void GoToXYSpace(int x, int y);//该函数用于在x,y处输出空格*2,用于用户走动时,消除之前位置处头像。
void GameEntryInterface();//加载界面
void help();//游戏规则
void type();//模式
void wirter();//作者简介
void GameShow();//游戏菜单界面
void Begin();//初始化主体函数,设置玩家头像初始位置,调用SetNum函数
int code[17][24];
int px=1, py=1;//px,py为玩家坐标
int f=4, sam, g = 1, M = 1;//f位颜色调整标志, sam走的步数, g色彩变幻参数, M音乐开关默认打开音效
int main()
{
    system("mode con cols=80 lines=30");//宽高
    HideCursor();
    //GameEntryInterface();
    GameShow();
    getchar();
    return 0;
}
void HideCursor()
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);//从标准输出获得句柄
    CONSOLE_CURSOR_INFO cursor_info;//控制台光标信息
    GetConsoleCursorInfo(handle,&cursor_info);
    cursor_info.bVisible = 0;//可见度为false,隐藏光标
    SetConsoleCursorInfo(handle,&cursor_info);
}
void GoToXY(int x, int y)
{
    COORD loc = {x, y};
    HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hOutput, loc);
//x-35,y-12中坐标
}
void Music()
{
    char s[1000];
    GoToXY(20,8);
    printf("按0并按回车键关闭音效");
    GoToXY(20,10);
    printf("按1并按回车键打开音效");
    GoToXY(20,12);
    printf("按T并按回车键返回主界面");
    GoToXY(20,14);
    printf("请输入:");
    gets(s);
    if(s[0] == '1')
    {
        M = 1;
        system("cls");
        GameShow();
    }
    else if(s[0] == '0')
    {
        M = 0;
        system("cls");
        GameShow();
    }
    else if(s[0] == 'T'||s[0] == 't')
    {
        system("cls");
        GameShow();
    }
    else
    {
        system("cls");
        GoToXY(35,12);
        printf("不要乱动,咸猪手→_→");
        Sleep(1500);
        system("cls");
        Music();
    }
}
void SetCode(int num)
{
    if(num == 0)
        printf("■");
    else if(num == -1)
        printf("  ");
    else if(num >= 1&&num <= 7)
        printf("%d ", num);
}
void SetWindow()
{
    int i, j;
    for(i = 0; i < 17; i++)
    {
        GoToXY(12,i+5);
        for(j = 0; j < 24; j++)
            SetCode(code[i][j]);
    }
    GoToXY(14,2);
    printf("★");
    GoToXY(19,2);
    printf("数");
    GoToXY(24,2);
    printf("★");
    GoToXY(29,2);
    printf("字");
    GoToXY(34.5,2);
    printf("★");
    GoToXY(39,2);
    printf("迷");
    GoToXY(44,2);
    printf("★");
    GoToXY(49,2);
    printf("宫");
    GoToXY(55,2);
    printf("★");
    GoToXY(2*px+12, py+5);
    printf("%c ", 1);
    GoToXY(65, 10);
    printf("您", sam);
    GoToXY(65, 11);
    printf("走", sam);
    GoToXY(65, 12);
    printf("了", sam);
    GoToXY(65, 13);
    printf("%d", sam);
    GoToXY(65, 14);
    printf("步", sam);
    GoToXY(12, 24);
    printf("游戏过程中按Esc立即退出游戏,按T键返回主菜单。");
    GoToXY(12, 25);
    printf("游戏结束后按任意键继续下一次游戏。");
}
void SetNum()
{
    code={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
    {0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0},
    {0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,-1,0,0,0,0,0,-1,-1,-1,0,0},
    {0,-1,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0},
    {0,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,0,-1,0,-1,-1,-1,-1,-1,-1,-1,0,0},
    {0,-1,0,0,-1,0,-1,0,0,0,0,-1,0,-1,-1,-1,0,0,0,0,0,0,0,0},
    {0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0},
    {0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0},
    {0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,0,0,-1,0,0,0,0},
    {0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,-1,0,0,-1,0,0,0,0},
    {0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,-1,-1,-1,-1,0,-1,-1,0},
    {0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,0,0},
    {0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0},
    {0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0},
    {0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0},
    {0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
    };//退出时刷新随机数数量
    srand((unsigned)time(NULL));
    int i, j, k;
    for(k = 1; k <= 7; )
    {
        i = rand()%17;
        j = rand()%24;
        if(code[i][j] == -1&&i != 1&&j != 1)
            code[i][j] = k++;
        else
            continue;
    }
}
void LeftKey()
{
    if(px > 0&&((code[py][px-1] == -1)||(code[py][px-1]>=1&&code[py][px-1]<=7)))
        px--;
    code[py][px] = -1;
}
void UpKey()
{
    if(py > 0&&((code[py-1][px] == -1)||(code[py-1][px]>=1&&code[py-1][px]<=7)))
        py--;
    code[py][px] = -1;
}
void DownKey()
{
    if(py < 16&&((code[py+1][px] == -1)||(code[py+1][px]>=1&&code[py+1][px]<=7)))
        py++;
    code[py][px] = -1;
}
void RightKey()
{
    if(px < 23&&((code[py][px+1] == -1)||(code[py][px+1]>=1&&code[py][px+1]<=7)))
        px++;
    code[py][px] = -1;
}
int CheckLeftNum()
{
    int cnt=0, i, j;
    for(i = 0; i < 17; i++)
    {
        for(j =0 ; j < 24; j++)
        {
            if(code[i][j] > 0)
                cnt++;
        }
    }
    return cnt;
}
void GoToXYSpace(int x, int y)
{
    x = px, y= py;
    GoToXY(2*x+12,y+5);
    printf("  ");
}
void Begin()
{
    if(f == 0)
    system("color 73");
    else if(f == 1)
    system("color 7A");
    else if(f == 2)
    system("color 74");
    else if(f == 4)
    system("color 07");
    char s;
    int i, j;
    sam = 0;
    px = py =1;
    SetNum();//先生成随机数然后显示
    SetWindow();
    GoToXY(2*px+12, py+5);
        printf("%c ", 1);
    while(s = getch())
    {
        if(s == 27)
        {
            exit(0);
        }
        if(s == 'T'||s == 't')
        {
            system("cls");
            GameShow();
        }
        GoToXYSpace(px, py);
        if(s == -32)
        {
            if(M == 1)
                printf("\a");
            sam++;
            s = getch();
            if(s == 72)
                UpKey();
            else if(s == 80)
                DownKey();
            else if(s == 75)
                LeftKey();
            else if(s == 77)
                RightKey();
            if(f==3)
            {
                if(g == 1)
                system("color 70");
                else if(g == 2)
                system("color 71");
                else if(g == 3)
                system("color 72");
                else if(g == 4)
                system("color 73");
                else if(g == 5)
                system("color 74");
                else if(g == 6)
                system("color 75");
                else if(g == 7)
                system("color 76");
                if(g == 7)
                g = 1;
                g++;


            }
        }
        GoToXY(2*px+12, py+5);
        printf("%c ", 1);
        GoToXY(65, 10);
        printf("您", sam);
        GoToXY(65, 11);
        printf("走", sam);
        GoToXY(65, 12);
        printf("了", sam);
        GoToXY(65, 13);
        printf("%d", sam);
        GoToXY(65, 14);
        printf("步", sam);
        if(CheckLeftNum() == 0)
        {
            GoToXY(2*px+12, py+5);
            printf("请按任意键继续...");
            getch();
            system("cls");
            Begin();
        }
    }
}
void GameEntryInterface()
{
    GoToXY(31,6);
    printf("欢迎来到数字迷宫^_^");
    GoToXY(30,12);
    printf("游戏加载中   %%,请稍等");
    int i;
    for(i = 0; i <= 100; i++)
    {
        GoToXY(40,12);
        printf("%d", i);
        Sleep(20);
    }
    Sleep(500);
    system("cls");//清屏
}
void type()
{
    char s[10000];
    GoToXY(25,4);
    printf("a 海之蓝");
    GoToXY(25,6);
    printf("b 森之绿");
    GoToXY(25,8);
    printf("c 血之红");
    GoToXY(25,10);
    printf("d 梦幻爆炸");
    GoToXY(25,12);
    printf("e 原汁原味");
    GoToXY(20,14);
    printf("选择字母按回车键继续 : ");
    gets(s);
    if(s[0] == 'a'||s[0] == 'A')
    {
        f = 0;
        system("cls");
        GameShow();
    }
    else if(s[0] == 'b'||s[0] == 'B')
    {
        f = 1;
        system("cls");
        GameShow();
    }
    else if(s[0] == 'c'||s[0] == 'C')
    {
        f = 2;
        system("cls");
        GameShow();
    }
    else if(s[0] == 'd'||s[0] == 'D')
    {
        f = 3;
        system("cls");
        GameShow();
    }
    else if(s[0] == 'e'||s[0] == 'E')
    {
        f = 4;
        system("cls");
        GameShow();
    }
    else
    {
        system("cls");
        GoToXY(30,12);
        printf("亲,没有这个选项呢>_<||| ");
        Sleep(1500);
    }
    system("cls");
    GameShow();
}
void wirter()
{
    GoToXY(30,12);
    printf("这是code monkey写的吧*_*");//增加长度显得代码很充实QAQ
    Sleep(1500);
    system("cls");
    GameShow();
}
void help()
{
    printf("1.用户通过上、下、左、右按键来控制玩家头像在地图范围内的走动\n\n");
    printf("2.在玩家走动过程中,碰撞墙壁时,该步的走动无效,玩家头像原地不变\n\n");
    printf("3.玩家允许在设计走廊内部进行走动\n\n");
    printf("4.玩家头像遇到阿拉布数字时,数字消失,并且对玩家走动无影响\n\n");
    printf("5.玩家头像遭遇所有数字之后(地图上无阿拉伯数字),该局游戏结束,并自动开始下一局游戏\n\n");
    printf("6.在玩家游戏过程中按下Esc键,游戏无条件退出。\n\n");
    printf("按任意键返回主菜单");
    getch();
    system("cls");
    GameShow();
}
void GameShow()
{
    char s[10000];
    GoToXY(35, 2);
    printf("★数字迷宫★");
    GoToXY(37, 8);
    printf("1.开始");
    GoToXY(37, 10);
    printf("2.模式");
    GoToXY(37, 12);
    printf("3.音效");
    GoToXY(37, 14);
    printf("4.帮助");
    GoToXY(37, 16);
    printf("5.作者简介");
    GoToXY(37, 18);
    printf("6.退出");
    GoToXY(30, 21);
    printf("请选择数字后按回车键   ");
    gets(s);
    if(s[0] == '1')
    {
        system("cls");
        Begin();
    }
    else if(s[0] == '2')
    {
        system("cls");
        type();
    }
    else if(s[0] == '3')
    {
        system("cls");
        Music();
    }
    else if(s[0] == '4')
    {
        system("cls");
        help();
    }
    else if(s[0] == '5')
    {
        system("cls");
        wirter();
    }
    else if(s[0] == '6')
    {
        exit(0);
    }
    else
    {
        system("cls");
        GoToXY(30,12);
        printf("亲,没有这个选项呢>_<||| ");
        Sleep(1500);
        system("cls");
        GameShow();
    }
}




   

http://blog.csdn.net/nocomment_84/article/details/53992730     如何隐藏光标

http://blog.csdn.net/mjlsuccess/article/details/9227785               如何获得窗口句柄

http://baike.baidu.com/item/GetCursorPos                                      GetCursorPos获得光标坐标

http://baike.baidu.com/link?url=4QGLtI1WQmSdIY9uNyaKwsC29_F95PL7MPdxk-yySntAjUQpMh5S8GGJj1dLH9DTW5UPLtOHSi-7-vfrA1vy0iEkeAKeXqa8-NM7Rrixade  

ScreenToClient 的解释

http://baike.baidu.com/link?url=EW4NJMSyFh8q0rXqz_VqGf9CawkJlU6tYJg1fuYgbBLnlG2z3kQjiOqXtFcpwHiXiufDxinLDVxNjGVQ1bHebF6OedClxP13Pqu4kWfYunm

PlaySound百度百科

https://zhidao.baidu.com/question/6865495.html  上下左右的ascii码

原创粉丝点击