掷骰子游戏
- 问题描述:
在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示:
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
#include "stdafx.h"
#include <iostream>
using namespace std;
void dice(int map_len, int* map, int* dice_val, int* output)
{
int step = 0;
int num_val = 0;
const int diceLength = 5;
for ( int i = 0; i < map_len && num_val < diceLength; )
{
if ( map[i] == 9 )
{
i += dice_val[num_val];
step += dice_val[num_val];
++num_val;
}
else if ( map[i] == 1)
{
i += dice_val[ ++num_val ];
step += dice_val[num_val];
++num_val;
}
else if ( map[i] == 2 )
{
if ( i > 1 )
{
i = i - 2;
step -= 2;
}
else if( i == 1 )
{
i = 0;
--step;
}
else if( i == 0 )
{
i = 0;
}
}
else if( map[i] == 3 )
{
++i;
++step;
}
}
*output = step;
}
int _tmain(int argc, _TCHAR *argv[])
{
int map[] = {9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9};
int dice_val[] = {2,1,4,1,6};
int result = 0;
dice(16, map,dice_val, &result);
cout<<result<<endl;
}