数字迷宫
来源:互联网 发布:怎么在淘宝上买片 编辑:程序博客网 时间: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码
- 数字迷宫
- 数字迷宫
- 数字迷宫
- 数字迷宫思考-上
- 数字迷宫思考-下
- 实训第一天--数字迷宫
- 数字迷宫小游戏源代码
- 实训第三天--数字迷宫
- 数字迷宫小游戏
- C语言---数字迷宫
- 2016.7.10实训--数字迷宫
- 数字三角形(迷宫奖卷)dp
- 实训项目 数字迷宫小游戏
- DFS深度搜索-走迷宫,取数字问题
- 实训题目——数字迷宫——优秀
- 迷宫
- 迷宫
- 迷宫
- 结构体—根据学生的成绩从高到低排序
- mysql学习笔记1
- 在纪中的第三天,2017-7-9 总结:
- Java设计模式
- Codevs 1020 孪生蜘蛛
- 数字迷宫
- matlab版本下的faster rcnn训练caltech数据集
- 无线通信测试软件
- qnx开发的IDE安装问题-解决卸载后不能重装
- 堆栈操作
- Redis和Memcached的区别
- Codevs 1038 一元三次方程求解
- 森林的遍历
- 3600: 没有人的算术