AI
da easy a King
Studiare sul campo...
...da calcio
Stati e proprieta':
- scene di gioco
- giocatori
- portiere
- squadra
- pallone
easySoccer
tattica e movimenti di squadra in base alla posizione del pallone nel campo
editor di tattica
easySoccer
automi
- cambio giocatori vicini al pallone
- callback per ogni stato dei giocatori
- sottostati giocatori ridotti
- intelligenza di squadra ridotta
- pallone (arbitro)
- falli gestiti dai giocatori
- uso forte delle scene
- overlap dei giocatori in campo
easySoccer
overlap dei giocatori
King Soccer
automi
- parte algoritmica senza editor
- intelligenza di squadra (baricentro di squadra con posizionamento dei giocatori ad elastico)
- movimento di squadra dinamico (differente attacco e difesa)
- gestione collisioni giocatori (no overlap)
- callback unica con controllo di stato (molto codice e' in comune: funzioni doMove(), doKick(), ecc..)
- ampio uso dei sottostati
- uso forte delle scene
King Soccer - Calci d'angolo
scena di gioco
King Soccer - Punizioni di prima
scena di gioco
Grafica
da easy a King
easySoccer - sprite sheet 2D
easySoccer - scelte grafiche
- grafica 2D
- frame sprite fissi
- grafica maglie giocatori da file
- scelte adattative in base alla grafica
- gestione altezza (z) fatta attraverso gli sprite simulando la prospettiva
- coordinate e metrica in pixel
King Soccer - giocatore
King Soccer - scelte grafiche
- grafica 3D
- texture magliette generati da codice utilizzando template (maglie con striscie, maglie uniformi)
- texture pelle e capelli giocatori
- grafica/animazioni realizzati ad hoc in base alle esigenze di gioco
- punti di contatto con il pallone
- fisica 3D (per rimbalzi e contatto)
Aminare con Blender
La metrica 1 unita' == 1 Metro
Punti di contatto
Multiplayer
Comunicazione
- easySoccer: Bluetooth
- King Soccer: Google Game Services
- In tutti e due i casi l'intelligenza del gioco risiede su uno dei due device (una volta stabilita la comunicazione il gioco decide chi e' client e chi server in base al playerID)
- Google game services stabilisce il canale di comunicazione fra i device
- Handshake iniziale con messaggi reliable
- Comunicazione "real-time" durante il game play con messaggi a perdita (stile comunicazione voip RTP)
- Messaggi inviati e ricevuti su thread separato rispetto al game loop
// SERVER
// initialial handshake
send_team_data();
if (wait_for_remote_team_data(timeout))
{
send_game_start_to_remote();
// game loop
while (!exit)
{
get_remote_keys();
game_play();
send_frame_data_to_remote(actors_positions_and_timeframes,
camera_position);
}
}
// CLIENT
// initiali handshake
send_team_data();
if (wait_for_remote_team_data(timeout))
{
wait_remote_game_start();
while (!game_end)
{
get_frame_data_remote();
set_camera();
draw_actors();
read_keys();
send_keys_to_remote();
}
}
Gestioni particolari
- Frame rate Server piu' basso rispetto al Frame Rate Client
- Riduzione all'osso dei bit trasmessi per ogni frame per ridurre la banda di upload/download e sfruttare anche i canali dati 3G
- Tempo del match ridotto (e tempistiche partita) pensato per ridurre l'overall di banda utilizzata per ogni partita
- Gestioni della pausa e dell'abbandono partite da parte di uno dei peer