background image

5.5 Μηχανές καταστάσεων παιχνιδιού 

[111] 

 

Για  να  διαχει-

ριστούμε  σωστά  τα 
πακέτα  δεδομένων 
δικτύου,    δημιουργούμε  μια  μεταβλητή  τύπου  “Bool”  και  την 
ονομάζουμε “isServer”. Έτσι λαμβάνοντας το “Sign in response” πακέτο 
από  τους  πελάτες  καλούμε  τη  μέθοδο  serverReceivedPacket:fromPlayer 
με τα ονόματα των παικτών. 

 

Τέλος  κάθε  φορά  που  προσθέτουμε  ένα  νέο  τύπο  πακέτου  στον 

κώδικα  μας,  προσθέτουμε  και  μια  νέα  περίπτωση-κατάστασης  στην 
κλάση  “Packet”.  Αυτό  το  κάνουμε  με  τη  λογική  κάθε  φορά  που 
διαβάζουμε ένα πακέτο στη μέθοδο packetWithData, να παρακάμπτουμε 
την υποκλάση και να διαβάζουμε ένα συγκεκριμένο πακέτο. 

 

5.5 Μηχανές καταστάσεων παιχνιδιού 

 
Έως τώρα έχουμε κατασκευάσει  τις μηχανές καταστάσεων δικτύου 

για  τον  πελάτη  και  το  διακομιστή.  Αντίστοιχα  η  κλάση  “Game”  που 
διαχειρίζεται  τη  λογική  του  παιχνιδιού  έχει  τις  δικές  τις  μηχανές 
καταστάσεων, οι οποίες είναι περισσότερο πολύπλοκες. 

Για  το  διακομιστή  όταν  καλούμε  τη  μέθοδο  startServerGame  

αποστέλλουμε  το  πακέτο  “Sign  in  request”  προς  τους  πελάτες.  Έπειτα 
ακολουθούν οι καταστάσεις (Εικόνα 5.11): 

 

Waiting for Sign In. Αναμονή για σύνδεση των πελατών. Όλοι 
οι πελάτες στέλνουν το πακέτο “Sign in Response”. 

 

Waiting  for  Ready.  Όλοι  οι  πελάτες  είναι  έτοιμοι.  Αποστολή 
της ερώτησης και των απαντήσεων. 

 

Playing.  Όλοι  οι  πελάτες  λαμβάνουν  τα  πακέτα  με  το  χρόνο 
του παιχνιδιού, την ερώτηση και τις απαντήσεις. Εδώ ξεκινά η 
λογική  του  παιχνιδιού.  Όποιος  παίκτης  προλάβει  απαντά 
πρώτος  και  αν  η  απάντηση  είναι  σωστή  παίρνει  ένα  πόντο 
αλλιώς  δίνεται  η  δυνατότητα  στους  υπόλοιπους  να 
απαντήσουν.