/*问题描述:
在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示:
1) 9:无障碍
2) 1:停掷一轮,即下轮所掷数字无效; 3) 2:后退两步,如果已经到起点不再后退; 4) 3:奖励前进一步
如果在游戏过程中,已经走到地图终点,则游戏结束。根据输入的地图数组,和5个骰子数的数组,返回最终玩家前进了多少步。
要求实现函数:
void dice(int map_len, int* map, int* dice_val, int* output)
【输入】 int map_len,地图数组的长度
int* map,地图数组,值表示障碍
int* dice_val,5个骰子数的数组
【输出】 int *output,玩家共前进了多少步 【返回】 无
注:玩家是从起始位置开始,即地图数组的第一位,骰子数只能是1~6
示例
1) 输入:map_len = 15, map = {9,1,9,9,9,2,9,9,9,9,9,9,9,9,9},dice_val = {1,2,1,3,1},
返回:4 2) 输入:map_len = 16, map = {9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9},dice_val = {2,1,4,1,6},
返回:15 */
/*
题意不清!!每次筛子zhi完一次后,是否只执行一次操作??这里假设就一次操作
*/
#include
using namespace std;
void dice(int map_len,int *map,int *dice_val,int* output)
{
int i;
int j;
j=0;
int len=map_len;
int suspend=0;
for(i=0;i<5;i++)
{
if(suspend==1)
{
suspend=0;
continue;
}
j+=dice_val[i];
if(j>=len-1)
{
*output=len-1;
return;
}
if(map[j]==2)
j=((j-2<0)?(0):(j-2));
else if(map[j]==3)
{
j+=1;
if(j>=len-1)
{
*output=len-1;
return;
}
}
else if(map[j]==1)
suspend=1;
}
*output=j;
return;
}
int main(void)
{
int map_len=15;
int map[15]={9,1,9,9,9,2,9,9,9,9,9,9,9,9,9};
int dice_val[5]={1,2,1,3,1};
int output;
dice(map_len,map,dice_val,&output);
cout<