Στα πλαίσια το μαθήματος Ανάπτυξη Διαδικτυακών Συστημάτων και Εφαρμογών ζητήθηκε η υλοποίηση ενός επιτραπέζιου παιχνιδιού σε διαδικτυακή μορφή αξιοποιώντας τεχνολογίες ανάπτυξης ιστοσελίδων και διαχείρισης δεδομένων. Το επιτραπέζιο παιχνίδι που επιλέχθηκε ήταν το Qwirkle.
Λίγα λόγια για το Qwirkle
Το Qwirkle είναι ένα δημοφιλές στρατηγικό επιτραπέζιο παιχνίδι που συνδυάζει απλούς κανόνες με διάφορες στρατηγικές επιλογές. Οι παίκτες τοποθετούν πλακίδια με σχήματα και χρώματα σε έναν κοινό ταμπλό, προσπαθώντας να δημιουργήσουν συνδυασμούς που τους αποφέρουν πόντους. Οι συνδυασμοί πρέπει να ακολουθούν συγκεκριμένους κανόνες. Το Qwirkle περιλαμβάνει 108 πλακίδια, τα οποία είναι συνδυασμοί έξι διαφορετικών σχημάτων και έξι χρωμάτων. Κάθε συνδυασμός χρώματος και σχήματος εμφανίζεται τρεις φορές στο σύνολο των πλακιδίων.
Διαδικασία Παιχνιδιού:
- Έναρξη: Κάθε παίκτης ξεκινά το παιχνίδι με 6 πλακίδια, τα οποία τραβά τυχαία από τον σάκο με τα πλακίδια.
- Σειρά Παιχνιδιού: Στη σειρά του, ο κάθε παίκτης προσπαθεί να τοποθετήσει πλακίδια στο ταμπλό ακολουθώντας συγκεκριμένους κανόνες είτε να αλλάξει πλακίδια από τον σάκο: Τα πλακίδια πρέπει να σχηματίζουν σειρές, όπου όλα τα πλακίδια είτε έχουν το ίδιο σχήμα με διαφορετικά χρώματα, είτε το ίδιο χρώμα με διαφορετικά σχήματα.
- Αλλαγή πλακιδίων: Μετά την τοποθέτηση των πλακιδίων, ο παίκτης τραβά καινούργια από τον σάκο, ώστε να έχει πάντα 6 πλακίδια στο χέρι του, μέχρι να εξαντληθούν τα διαθέσιμα πλακίδια.
- Σκοπός: Οι παίκτες προσπαθούν να συγκεντρώσουν πόντους, δημιουργώντας σειρές και συνδυασμούς.
Επιπλέον, ένα Qwirkle (σειρά 6 πλακιδίων) δίνει μπόνους πόντους.
Το παιχνίδι συνεχίζεται μέχρι να εξαντληθούν όλα τα πλακίδια, και νικητής είναι ο παίκτης με τους περισσότερους πόντους.
Τεχνολογίες Υλοποίησης
Η υλοποίηση βασίζεται στις εξής τεχνολογίες:
- PHP: Χρησιμοποιήθηκε για την υλοποίηση του backend, όπου διαχειρίζεται το παιχνίδι, όπως ο έλεγχος των κινήσεων, η εναλλαγή σειράς παικτών και η διαχείριση της βαθμολογίας. Μέσω της PHP, υλοποιούνται τα αιτήματα προς τον server και διασφαλίζεται η ομαλή λειτουργία των κανόνων του Qwirkle.
- HTML και CSS: Η διεπαφή χρήστη αναπτύχθηκε με HTML και CSS για να προσφέρει οπτικοποίηση στο παιχνίδι.
- MySQL: Η βάση δεδομένων MySQL χρησιμοποιείται για την αποθήκευση δεδομένων όπως στοιχεία χρηστών, το board, το σακουλάκι με τα πλακίδια
- JavaScript: Για την καλύτερη εμπειρία προς τον χρήστη αλλά και για λόγους διαδραστικότητας, ενσωματώθηκε JavaScript για την άμεση ενημέρωση του ταμπλό χωρίς την ανάγκη ανανέωσης της σελίδας καθώς και για την διαχείριση άλλων λειτουργιών.
Το API επιτρέπει την αλληλεπίδραση με το παιχνίδι μέσω HTTP αιτημάτων (GET, POST, PUT), εκτελώντας ενέργειες στο ταμπλό, στους παίκτες και στη ροή του παιχνιδιού. Διαδρομές (Endpoints) και Λειτουργίες:
/board/- GET: Εμφανίζει την τρέχουσα κατάσταση του ταμπλό.
- POST: Επαναφέρει το ταμπλό στην αρχική του κατάσταση.
- PUT:
-tile_move: Τοποθετεί ένα πλακίδιο στο ταμπλό στις συγκεκριμένες συντεταγμένες.
-switch_player_turn: Αλλάζει τη σειρά του παίκτη.
-change_tiles: Αντικαθιστά πλακίδια για έναν παίκτη.
-game_data: Εμφανίζει δεδομένα σχετικά με το παιχνίδι (πλακίδια του παίκτη και βαθμολογία κλπ.). - GET:
-available_tiles: Εμφανίζει τα πλακίδια που είναι διαθέσιμα για κάθε παίκτη.
/players/- GET: Εμφανίζει τα προφίλ των παικτών.
- PUT: Ενημερώνει ή προσθέτει έναν νέο παίκτη στο παιχνίδι με τα δεδομένα του.
/status/- GET: Εμφανίζει την τρέχουσα κατάσταση του παιχνιδιού (π.χ. αν είναι σε εξέλιξη, νικητής κλπ.).
Επεξήγηση των συναρτήσεων:
• handle_board($method): Διαχειρίζεται τις λειτουργίες που σχετίζονται με το ταμπλό (εμφάνιση και επαναφορά του ταμπλό).
• handle_tile_move($method, $color, $shape, $input): Διαχειρίζεται την τοποθέτηση ενός πλακιδίου στο ταμπλό, ελέγχοντας την κίνηση του παίκτη.
• handle_change_tiles($method, $input): Αντικαθιστά πλακίδια για τον τρέχοντα παίκτη με νέα από το σάκο.
• handle_game_data($method): Παρέχει δεδομένα σχετικά με την τρέχουσα κατάσταση του παιχνιδιού (όνομα παίκτη, διαθέσιμα πλακίδια και βαθμολογία).
• switch_turn($method, $input): Εναλλάσσει την σειρά του παίκτη, επιτρέποντας στον επόμενο παίκτη να κάνει τη κίνησή του.
• players_available_tiles($method): Εμφανίζει τα πλακίδια που είναι διαθέσιμα για τον κάθε παίκτη.
• handle_player($method, $input): Διαχειρίζεται τις ενέργειες που αφορούν τους παίκτες (είσοδος στο παιχνίδι και εμφάνιση στοίχων των παικτών).
• handle_status($method): Εμφανίζει την τρέχουσα κατάσταση του παιχνιδιού, όπως το αν είναι σε εξέλιξη ή αν έχει τελειώσει.