Street Fighter


Submit solution

Points: 10
Time limit: 5.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C#, Go, Java

En la majoria de jocs, per a modelar el comportament dels personatges s'utilitza una màquina d'estats.

La màquina d'estats defineix les possibles accions que pot estar realitzant un personatge, i els events que inicien les accions. Per exemple, un jugador pot estar en estat "CAMINANT" i quan es produeix l'event en què l'usuari "POLSA LA TECLA DE DISPAR", aleshores canvia l'acció i passa a estar en estat "DISPARANT".

La cosa es complica una mica perquè hi ha estats als quals no es pot arribar partint d'altres. Per exemple, hi ha jocs en els que el personatge no pot disparar mentre esta saltant. En aquest cas no seria possible la transició directa entre l'estat "SALTANT" i l'estat "DISPARANT"·

Es demana implementar una màquina d'estats bàsica per a un personatge del joc Street Fighter:

Els estats possibles d'un personatge són:

Els events que poden canviar l'estat d'un personatge són:

  • JOYSTICK_UP: El jugador ha accionat el joystick cap amunt.
  • JOYSTICK_LEFT/RIGHT: El jugador ha accionat el joystick a esquerra o dreta.
  • JOYSTICK_CENTER: El jugador a deixat el joystick al centre.
  • PUNCH_KEY: El jugador a polsat el botó de cop de puny.
  • KICK_KEY: El jugador a polsat el botó de cop de peu.
  • PUNCH_END: L'acció de cop de puny ha acabat.
  • KICK_END: L'acció de cop de peu ha acabat.
  • TOUCH_FLOOR: El personatge ha tocat terra.

El següent diagrama ilustra les transicions entre estats que provoquen aquests events.

Input Format

L'entrada consta de dues paraules:

  • L'estat actual del personatge: {IDLE | WALK | JUMP | KICK | PUNCH}

  • L'event que ha ocorregut: {JOYSTICK_UP | JOYSTICK_LEFT/RIGHT | JOYSTICK_CENTER | PUNCH_KEY | KICK_KEY | PUNCH_END | KICK_END | TOUCH_FLOOR}

Constraints

No hi ha

Output Format

S'imprimirà l'estat en el qual quedarà el personatge.

Si l'event ocorregut no modifica l'estat, es mostrarà el que tenia abans de l'event.

Test Case 1

Input
IDLE JOYSTICK_UP
Output
JUMPING
Explanation

El personatge es troba en estat "IDLE" i ocorre l'event "JOYSTICK_UP".
El nou estat passa a ser "JUMPING".

Test Case 2

Input
IDLE JOYSTICK_UP
Output
JUMPING
Explanation

El personatge es troba en estat "IDLE" i ocorre l'event "JOYSTICK_LEFT/RIGHT".
El nou estat passa a ser "WALKING".

Test Case 3

Input
IDLE JOYSTICK_LEFT/RIGHT
Output
WALKING
Explanation

L'estat del personatge és "IDLE" i ocorre l'event "JOYSTICK_CENTER".
Aquest event no modifica l'estat del personatge.

Test Case 4

Input
IDLE JOYSTICK_CENTER
Output
IDLE

Test Case 5

Input
IDLE PUNCH_KEY
Output
PUNCHING

Test Case 6

Input
IDLE KICK_KEY
Output
KICKING

Test Case 7

Hidden: this is a private test case!

Test Case 8

Hidden: this is a private test case!

Test Case 9

Hidden: this is a private test case!

Test Case 10

Input
WALKING JOYSTICK_UP
Output
JUMPING

Test Case 11

Hidden: this is a private test case!

Test Case 12

Hidden: this is a private test case!

Test Case 13

Hidden: this is a private test case!

Test Case 14

Input
WALKING KICK_KEY
Output
KICKING

Test Case 15

Hidden: this is a private test case!

Test Case 16

Hidden: this is a private test case!

Test Case 17

Hidden: this is a private test case!

Test Case 18

Input
JUMPING JOYSTICK_UP
Output
JUMPING

Test Case 19

Hidden: this is a private test case!

Test Case 20

Hidden: this is a private test case!

Test Case 21

Hidden: this is a private test case!

Test Case 22

Input
JUMPING KICK_KEY
Output
KICKING

Test Case 23

Hidden: this is a private test case!

Test Case 24

Hidden: this is a private test case!

Test Case 25

Hidden: this is a private test case!

Test Case 26

Input
KICKING JOYSTICK_UP
Output
KICKING

Test Case 27

Hidden: this is a private test case!

Test Case 28

Hidden: this is a private test case!

Test Case 29

Hidden: this is a private test case!

Test Case 30

Input
KICKING KICK_KEY
Output
KICKING

Test Case 31

Hidden: this is a private test case!

Test Case 32

Hidden: this is a private test case!

Test Case 33

Hidden: this is a private test case!

Test Case 34

Input
PUNCHING JOYSTICK_UP
Output
PUNCHING

Test Case 35

Hidden: this is a private test case!

Test Case 36

Hidden: this is a private test case!

Test Case 37

Hidden: this is a private test case!

Test Case 38

Input
PUNCHING KICK_KEY
Output
PUNCHING

Test Case 39

Hidden: this is a private test case!

Test Case 40

Hidden: this is a private test case!

Test Case 41

Hidden: this is a private test case!


Authorship: Gerard Falcó

CC BY-NC-SA 4.0