Street Fighter
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!
CC BY-NC-SA 4.0