本文主要是介绍猎杀乌姆帕斯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#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");
}
这篇关于猎杀乌姆帕斯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!