Ανάπτυξη του γνωστού παιχνιδιού Μπλόφα σε Laravel.php και React.js

Μπλόφα είναι ένα παιχνίδι που παίζεται με τράπουλαΣκοπός είναι να λες μπλόφες (ψέματα) για τα φύλλα που ρίχνεις ώστε να νικήσεις. Όταν παίζει κάποιος δεν χρειάζεται να ρίχνει τα φύλλα με τον ίδιο αριθμό αλλά να λέει ότι το έκανε ώστε να ξεφορτωθεί όλα του τα φύλλα και να κερδίσει την παρτίδα. Συνήθως συμμετέχουν 2 ως 10 άτομα. Άλλες ονομασίες που αναφέρονται στο ίδιο παιχνίδι είναι :

Cheat, Bluff, Bullshit, I Doubt It και Liar.

Περιεχόμενα

Εργαλεία ( Βιβλιοθήκες, framework ) που χρησιμοποιήθηκαν


Back End

Η ανάπτυξη του Back-End (API) έγινε με την χρήση του γνωστού framework της PHP την Laravel ( Έκδοση 9.19 ).

Μπορείτε να διαβάσετε περισσότερα για την Laravel εδώ.


Front End

Η ανάπτυξη του Front-End (GUI) έγινε με την χρήση της επίσης γνωστής βιβλιοθήκης της Javascript, της React ( Έκδοση 18.2.0 ).

Μπορείτε να διαβάσετε περισσότερα για την React εδώ.


Άλλες Τεχνολογίες που χρησιμοποιήθηκαν

H Inertia.js χρησιμοποιήθηκε για την "γεφύρωση" του Server με τον Client ( Έκδοση 0.6.3 ).

Μπορείτε να διαβάσετε περισσότερα για την Inertia.js εδώ.


API

Room

New

POST 
Δημιουργεί ένα καινούργιο δωμάτιο με Owner τον χρήστη έκανε το αίτημα για την δημιουργία του. Μετά την δημιουργία του, ανακατευθύνει τον χρήστη στο δωμάτιο αυτό.
Έπειτα καλεί το /Room/Initialize_Game για να δημιουργήσει το παιχνίδι που θα λάβει μέρος σε αυτό το δωμάτιο.

Παράμετροι :

  • *Name,
  • *Capacity,
  • ?Password

Join

POST 
Ο χρήστης "εγγράφεται ώς ο δεύτερος παίκτης στο συγκεκριμένο δωμάτιο και έπειτα ανακατευθύνεται και αυτός σε αυτό το δωμάτιο.

Παράμετροι :

  • *RoomId,
  • *UserName ( λαμβάνεται αυτόματα από το Request )

Leave

POST 
Ο χρήστης που κάνει το αίτημα "διαγράφεται' από το δωμάτιο.
-   Στην περίπτωση που δεν υπάρχει κάποιος άλλος χρήστης στο δωμάτιο, το δωμάτιο διαγράφεται.
-   Στην περίπτωση που υπάρχουν 2 χρήστες στο δωμάτιο : 
    -   Αν ο χρήστης που φύγει είναι ο ιδιοκτήτης, τότε η ιδιοκτησία μεταφέρεται στον άλλο χρήστη ο οποίος είναι ακόμη μέσα.
    -   Σε αντίθετη περίπτωση απλά φεύγει ο χρήστης που έκανε το αίτημα.
    -   Αν ο χρήστης που παραμείνει στο δωμάτιο έχει δηλώσει έτοιμος, το status του μεταφέρεται μαζί με την ιδιοκτησία.
Ο χρήστης που έφυγε, έπειτα ανακατευθύνεται στο dashboard του.

Παράμετροι :

  • *RoomId,
  • *UserId ( λαμβάνεται αυτόματα από το Request )

Ready

POST 
Ο χρήστης που κάνει το αίτημα δηλώνει πώς είναι έτοιμος να ξεκινήσει το παιχνίδι.
Από την στιγμή που ο χρήστης έχει δηλώσει έτοιμος, ο μόνος τρόπος να μήν ξεκινήσει το παιχνίδι, πρίν πατήσει και ο άλλος χρήστης έτοιμος,
είναι να αποχωρήσει από το δωμάτιο.
Σε αντίθετη περίπτωση, μόλις και οι 2 χρήστες δηλώσουν έτοιμοι, το παιχνίδι θα ξεκινήσει μετά από μικρό χρονικό διάστημα.

Παράμετροι :

  • *RoomId,
  • *UserName ( λαμβάνεται αυτόματα από το Request )

Activate

POST 
Μόλις και οι 2 χρήστες του δωματίου δηλώσουν πώς είναι έτοιμοι να ξεκινήσει το παιχνίδι, και οι 2 χρήστες στέλνουν το αίτημα Play,
για να αρχικοποιήσει ο Owner το πρώτο State του παιχνιδιού και να γίνει το μοίρασμα και η ανάθεση των καρτών και ο άλλος χρήστης για να μεταφερθεί στο GameRoom.
Μετά την αρχικοποίηση του πρώτου State του παιχνιδιού, μεταφέρεται και ο Owner αντίστοιχα στο GameRoom.

Παράμετροι :

  • *RoomId

Initialize

GET
Μόλις ολοκληρωθεί η διαδικασία δημιουργίας ενός δωματίου, ανακατευθύνεται σε αυτό το Route για την δημιουργία του παιχνιδιού που θα λάβει μέρος στο δωμάτιο αυτό.

Παράμετροι :

  • *RoomId

Poll_Room

GET
Εκτελείται κάθε 5 δευτερόλεπτα ( από κάθε χρήστη ), ξεκινώντας από την στιγμή που ο χρήστης θα μπεί σε κάποιο δωμάτιο.
Επιστρέφει συνεχώς το δωμάτιο, έτσι ώστε να ενημερώνεται το GUI για τυχόν αλλαγές όπως πχ ( μπήκε ή έφυγε κάποιος χρήστης, κάποιος έχει δηλώσει έτοιμος ).

Παράμετροι :

  • *RoomId

Game

Play

GET
Όταν και οι 2 χρήστες έχουν δηλώσει έτοιμοι, το καλείται αυτό το Route και το πρώτο State του παιχνιδιού αρχικοποιείται.
Γίνεται η μοιρασιά και η ανάθεση των καρτών, καθώς και η ανακατεύθυνση των παικτών στο GameRoom.

Παράμετροι :

  • *RoomId

Play_Make_Move

POST
Όταν ο χρήστης κάνει μία κίνηση ( παίξει κάποιες κάρτες, πάει πάσο ή δηλώσει ότι ο αντίπαλος έκανε μπλόφα ) γίνεται ένα αίτημα Make_Move.
Η κίνηση του χρήστη καταγράφεται, δημιουργείται καινούργιο GameState και επίσης γίνονται οι απαραίτητοι έλεγχοι για να τηρούνται οι κανόνες του παιχνιδιού.
Στην περίπτωση που 

Παράμετροι :

  • *GameId

Play_checkEnemyMove

GET
Εκτελείται κάθε 5 δευτερόλεπτα, ξεκινώντας από την στιγμή που ο χρήστης έχει κάνει μία κίνηση ( οπότε είναι η σειρά του άλλου παίκτη ).
Επιστρέφει αν βρεθεί πώς ο αντίπαλός παίκτης έχει κάνει κάποια κίνηση, το GameState με την κίνηση αυτή.

Παράμετροι :

  • *GameId
  • *UserId ( λαμβάνεται αυτόματα από το Request )

Winner

GET
Όταν το παιχνίδι λήξει ( δηλαδή κάποιος παίκτης κερδίσει ), εκτελείται αυτό το Route και ανακατευθύνει τους παίκτες στο WinningScreen.

Παράμετροι :

  • *GameId