C语言---数字迷宫
来源:互联网 发布:php while 死循环 编辑:程序博客网 时间:2024/06/08 00:46
/***************************************
title: C语言–数字迷宫 Date: 2016/7/10
Description:
1、 系统主要地图为固定模式
2、 地图内部包含墙体、走廊、阿拉伯数字(1~7)、玩家头像(1个)四种不同内容
3、 用户通过上、下、左、右按键来控制玩家头像在地图范围内的走动
4、 在玩家走动过程中,碰撞墙壁时,该步的走动无效,玩家头像原地不变
5、 玩家允许在设计走廊内部进行走动
6、 玩家头像遇到阿拉布数字时,数字消失,并且对玩家走动无影响
7、 玩家头像遭遇所有数字之后(地图上无阿拉伯数字),该局游戏结束,并自动开始下一局游戏
8、 在某一局游戏中,游戏走廊、墙体与其他游戏相同,但数字位置会随机产生
9、 阿拉伯数字产生在走廊内而非墙体上
10、在玩家游戏过程中按下Esc键,游戏无条件退出。
11、在玩家未使用Esc键时,程序结束
***************************************/
#include <stdio.h>#include <time.h>#include <stdlib.h>#include "windows.h"#include <conio.h>#pragma comment(lib,"winmm.lib") int code[17][24]={ 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} ;int position1=1, position2=1; //迷宫的初始点int x=2,y=1; //头像的初始位置clock_t starttime,endtime; //计时 int object=20; //游戏的最高记录int d=1; //游戏局数/***函数名:gotoxy**函数功能:该函数用于在x,y位置输出用户头像**入口参数:x,y**出口参数:无*/void gotoxy(int x, int y) //光标移动{ COORD player; player.X=x; player.Y=y; SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), player ); }void color(int b) //颜色函数 { HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; SetConsoleTextAttribute(hConsole,b) ; } /***函数名:setcode**函数功能:该函数通过传入的值来判断并输出为:■,空格*2,或者数字本身**入口参数:int i,int j**出口参数:无*/void setcode(int i,int j){ gotoxy(2*j,i); if(code[i][j]==0) { color(4); printf("■"); } else if(code[i][j]==-1) { printf(" "); } else { color(7); printf("%d ",code[i][j]); }}/***函数名:setwindow**函数功能:生成地图主体函数:遍历公共数组,在位置部位(1,1)时,调用SetCode函数,并在(1,1)位置输出玩家头像**入口参数:无**出口参数:无*/void setwindow() { int i,j; for(i=0;i<17;i++) { int k=i; for(j=0;j<24;j++) { setcode(i,j); } printf("\n"); } gotoxy(10,18); color(7); printf("目前游戏最快纪录 %d 秒",object); printf("\n\n\t第 %d 局游戏正在进行中...",d++); printf("\n Press up down left right key please !\t\n"); gotoxy(x,y); //笑脸起始位置 color(7); printf("\1 ");}/***函数名:setnum**函数功能:程序初始化时,用于使用随机函数在数组"走廊"位置生成1~7的阿拉伯数字**入口参数:无**出口参数:无*/void setnum() { int hang,lie; int i=0; srand(time(NULL));// srand初始化随机种子,rand产生随机数 while(i<7) { hang=rand()%17; //行在0-16内随机产生 lie=rand()%24; //列在0-23内随机产生 if(code[hang][lie]== -1) { if(hang!=1&&lie!=1) { code[hang][lie]=++i; } } }}/***函数名:CheckLeftNum**函数功能:该函数判断数组内剩余的数字(>0)数量,返回该数量**入口参数:无**出口参数:无*/int CheckLeftNum(){ int i,j,num=0; for(i=0;i<17;i++) { for(j=0;j<24;j++) { if(code[i][j]>0) { num++; } } } return num;}/***函数名:upkey downkey leftkey rightkey**函数功能:玩家按下,上下左右按键时,分别调用的函数,该函数可判断玩家是否为被墙体阻挡、 正常行走、"吃"掉数字三种状态,并改变玩家头像的位置。**入口参数:无**出口参数:无*/void upkey() //上移{ if(code[position1-1][position2]!= 0) { if(code[position1-1][position2]>0) { code[position1-1][position2]=-1; //遇到数字,换成-1 } gotoxy(x,y); printf(" "); y--; position1--; }}void downkey() //下移{ if(code[position1+1][position2]!= 0) { if(code[position1+1][position2]>0) { code[position1+1][position2]=-1; //遇到数字,换成-1 } gotoxy(x,y); printf(" "); y++; position1++; }}void leftkey() //左移{ if(code[position1][position2-1]!= 0) { if(code[position1][position2-1]>0) { code[position1][position2-1]=-1; //遇到数字,换成-1 } gotoxy(x,y); printf(" "); x=x-2; position2--; }}void rightkey() //右移{ if(code[position1][position2+1]!= 0) { if(code[position1][position2+1]>0) { code[position1][position2+1]=-1; //遇到数字,换成-1 } gotoxy(x,y); printf(" "); x=x+2; position2++; }}/***函数名:begin**函数功能:输入按键进行游戏**入口参数:无**出口参数:c*/int begin() { int num; char c; while(1) { gotoxy(x,y); //光标定位在新位置 printf("\1 "); num=CheckLeftNum(); //随机数为零,重新一局 if(num==0) { break; } c=getch(); if(c==27) //返回Esc ,游戏结束 return c; else if(c==72) upkey(); else if(c==80) downkey(); else if(c==75) leftkey(); else if(c==77) rightkey(); } return 0;} /***函数名:main**函数功能:主函数,连接各种子函数**入口参数:无**出口参数:无*/int main() { int end,n; while(1) { PlaySound("d:\\Dub.wav",NULL,SND_LOOP|SND_ASYNC|SND_FILENAME); //播放背景音乐 starttime=time(NULL); setnum(); setwindow(); end=begin(); endtime=time(NULL); if(end==27) //游戏结束 { break; } position1=1; position2=1; x=2; y=1; n=endtime-starttime; //游戏时间 if(n>object) { gotoxy(15,8); printf("OUT!!! 很遗憾,游戏超时"); Sleep(4000); break; } else if(n<object) //所用时间低于最好记录则更新最新记录 { object=n; gotoxy(15,8); printf("恭喜您!用时%ld秒打破纪录!!",n); } else if(n>=object) { gotoxy(15,8); printf("加油!本局游戏共用时%ld秒",n); } Sleep(4000); } return 0;}
阅读全文
0 0
- C语言---数字迷宫
- C语言迷宫求解
- C 语言 DFS 迷宫
- c语言 迷宫游戏
- C语言 迷宫求解
- 【C语言】迷宫游戏
- 迷宫求解(C语言)
- 迷宫的实现--c语言
- 迷宫问题C语言实现
- C语言走迷宫源代码
- c语言迷宫游戏代码
- 迷宫问题C语言解法
- C语言实现迷宫求解
- 迷宫游戏C语言实现
- C语言---迷宫游戏 代码
- 迷宫问题--C语言实现
- c语言之迷宫问题
- c语言 走迷宫问题
- solr-8 RequestHandlers and SearchComponents in SolrConfig
- 22.生成所有的括号组合
- Android Studio :fetching documentation的问题
- java的jvm和操作系统的关系
- Canvas学习笔记之画线
- C语言---数字迷宫
- 406. Queue Reconstruction by Height | Leecode Greedy
- 【PHP】给两个字符串返回字符串按排序出两个字符串的字符de多种解法
- Mongodb的文件管理
- spring的aop的使用
- 安卓文件存在但是unity中通过www读取失败
- [NOIP2017模拟]电影
- solr-9 InitParams in SolrConfig
- BZOJ 1939 [Croatian2010] Zuma