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