题目
《蔚蓝(Celeste)》是一款像素风格的平台类游戏,玩家需要操纵一名叫 Madeline 的小女孩,在避免触碰到各种各样的致命的障碍的同时向山上进发。
游戏中 Madeline 可以实现以下几种动作:
- 向左或向右走 (Walk)。(按左方向键或右方向键)
- 速降 (QuickDrop) 或下蹲 (Squat)。(按下方向键)
- 向左上、上、右上、左、右、左下、下、右下八个方向进行猛冲 (Dash)。(同时按住一个或两个方向键和 X 键)
- 靠近墙体时抓住 (Grasp) 墙体。(靠近墙体时按 Z)
- 在地面上或在墙体上跳跃 (Jump)。(在地面上或在墙体上按 C)
将 Madeline 的某些动作转换成键盘动作。
输入描述:
如果是第一种动作或第三种动作,会输入两个字符串,第一个字符串是方向,第二个字符串是动作。 八种方向:左上、上、右上、左、右、左下、下、右下分别对应 leftup、up、rightup、left、right、leftdown、down、rightdown。 第一种动作只会有 left 和 right。 其他三种动作只会有一个字符串,可能为 QuickDrop、Squat、Grasp、Jump。
输出描述:
对于每一个动作,输出需要按的键。 如果是第三种动作,先输出方向键,再输出 X;如果是需要按住两个方向键,先输出左或右方向键,再输出上或下方向键。 方向键的输出中左、右、上、下分别为 left、right、up、down。
解题思路
将 Madeline 的动作 a1[i] 和 d1[j] 转换成相应的键盘动作 a2[i] 和 d2[j]。
C++代码
#include<iostream> using namespace std; string d1[8] = { "leftup", "up", "rightup", "left", "right", "leftdown", "down", "rightdown" }; string d2[8] = { "left up", "up", "right up", "left", "right", "left down", "down", "right down" }; string a1[6] = { "Walk", "QuickDrop", "Squat", "Dash", "Grasp", "Jump" }; string a2[6] = { "", "down", "down", "X", "Z", "C"}; int main(){ int T; cin >> T; string s; while(T--){ cin >> s; bool flag = false; for(int i=0; i<8; ++i){ if(s==d1[i]){ cout << d2[i] << " "; flag = true; break; } } if(flag) cin >> s; for(int i=0; i<6; ++i){ if(s==a1[i]){ cout << a2[i] << endl; break; } } } return 0; }