#Μέλη ομάδας
-Βουράκη Μαριάννα ΑΜ:2019/022
-Καρυπίδης Θεόδωρος ΑΜ:2019/065
ΣΥΝΔΕΣΜΟΣ ΠΑΙΧΝΙΔΙΟΥ: https://red-mosquito-138272.hostingersite.com/
Ο στόχος είναι να αποκτήσετε περισσότερα κομμάτια από τον αντίπαλο στο τέλος του παιχνιδιού.
- Το παιχνίδι παίζεται σε ένα πλέγμα 7x7.
- Κάθε παίκτης ξεκινά με δύο κομμάτια που τοποθετούνται στις διαγώνια αντίθετες γωνίες του πλέγματος.
- Οι παίκτες παίζουν εναλλάξ.
Ένα κομμάτι μπορεί να "αναπαραχθεί" σε ένα κενό τετράγωνο που βρίσκεται δίπλα του (σε απόσταση μίας θέσης). Όταν γίνει η κίνηση, δημιουργείται ένα νέο κομμάτι του παίκτη στο τετράγωνο αυτό.
Ένα κομμάτι μπορεί να κινηθεί σε ένα κενό τετράγωνο που βρίσκεται σε απόσταση δύο θέσεων (οριζόντια, κάθετα ή διαγώνια). Με αυτή την κίνηση, το αρχικό κομμάτι μεταφέρεται στη νέα θέση, χωρίς να δημιουργείται νέο κομμάτι.
Όταν ένα κομμάτι μετακινείται (είτε μέσω αναπαραγωγής είτε μέσω άλματος), όλα τα αντίπαλα κομμάτια που βρίσκονται σε γειτονικά τετράγωνα μετατρέπονται σε κομμάτια του παίκτη που έκανε την κίνηση.
Το παιχνίδι τελειώνει όταν:
- Δεν υπάρχουν περισσότερες δυνατές κινήσεις για τους παίκτες.
- Το πλέγμα γεμίζει.
Ο νικητής είναι ο παίκτης με τα περισσότερα κομμάτια στο πλέγμα.
- Σε ορισμένες παραλλαγές, μπορεί να υπάρχουν εμπόδια ή τετράγωνα που δεν μπορούν να καταληφθούν. Αυτά τα εμπόδια εν επηρεάζονται από καμία κίνηση.
Επεξηγηση του API
Αυτό το αρχείο χειρίζεται τη λειτουργία σύνδεσης χρηστών στο σύστημα.
-
Σκοπός:
- Συνδέει με τη βάση δεδομένων.
- Αποθηκεύει το όνομα χρήστη στη συνεδρία και στη βάση δεδομένων.
- Επιστρέφει κατάλληλες JSON απαντήσεις.
-
Βασικές λειτουργίες:
- Έλεγχος για τη μέθοδο αιτήματος (
POST
). - Έλεγχος εγκυρότητας δεδομένων εισόδου.
- Εκτέλεση SQL
INSERT INTO users
για αποθήκευση ονόματος χρήστη. - Επιστροφή απαντήσεων JSON για επιτυχία ή σφάλματα.
- Έλεγχος για τη μέθοδο αιτήματος (
-
Σημειώσεις:
- Χρήση του
$_SESSION
για διαχείριση συνεδριών.
- Χρήση του
Το αρχείο create_room.php
είναι υπεύθυνο για τη δημιουργία δωματίων παιχνιδιού.
-
Έλεγχος σύνδεσης στη βάση δεδομένων:
- Ελέγχει αν υπάρχει ενεργή σύνδεση με τη βάση δεδομένων και επιστρέφει σφάλμα σε περίπτωση αποτυχίας.
-
Έλεγχος σύνδεσης χρήστη:
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
$_SESSION
.
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
-
Έλεγχος αν ο χρήστης έχει ήδη δωμάτιο:
- Αναζητά υπάρχον δωμάτιο με την κατάσταση
in_progress
για τον χρήστη. - Εάν υπάρχει, επιστρέφει το
room_id
στον πελάτη.
- Αναζητά υπάρχον δωμάτιο με την κατάσταση
-
Δημιουργία νέου δωματίου:
- Δημιουργεί έναν μοναδικό κωδικό δωματίου χρησιμοποιώντας τη μέθοδο
generateRoomCode
. - Αρχικοποιεί την κατάσταση του πίνακα με τη μέθοδο
initializeBoard
. - Εισάγει το νέο δωμάτιο στη βάση δεδομένων.
- Δημιουργεί έναν μοναδικό κωδικό δωματίου χρησιμοποιώντας τη μέθοδο
-
initializeBoard()
:- Δημιουργεί την αρχική κατάσταση του πίνακα του παιχνιδιού (7x7 πλέγμα με αρχικές θέσεις παικτών).
- Επιστρέφει έναν πίνακα JSON.
-
generateRoomCode()
:- Παράγει έναν μοναδικό κωδικό δωματίου 5 χαρακτήρων (αλφαριθμητικό).
- Επιτυχία: Επιστρέφει JSON μήνυμα όπως
{'message': 'Room created.'}
. - Σφάλματα:
- 500: Σφάλμα σύνδεσης στη βάση δεδομένων.
- 401: Ο χρήστης δεν είναι συνδεδεμένος.
Το αρχείο join_room.php
χρησιμοποιείται για την ένταξη ενός χρήστη σε ένα υπάρχον δωμάτιο παιχνιδιού.
-
Έλεγχος σύνδεσης στη βάση δεδομένων:
- Ελέγχει αν υπάρχει ενεργή σύνδεση με τη βάση δεδομένων και επιστρέφει σφάλμα σε περίπτωση αποτυχίας.
-
Έλεγχος σύνδεσης χρήστη:
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
$_SESSION
. Εάν όχι, επιστρέφει σφάλμα HTTP 401 (User not logged in
).
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
-
Έλεγχος παραμέτρων αιτήματος:
- Ελέγχει αν έχει σταλεί το
room_id
μέσω της μεθόδουPOST
. Εάν λείπει, επιστρέφει μήνυμα σφάλματος (Winner not specified
).
- Ελέγχει αν έχει σταλεί το
-
Ενημέρωση της κατάστασης του δωματίου:
- Ενημερώνει το πεδίο
player_two
στον πίνακαrooms_game_state
για να προσθέσει τον δεύτερο παίκτη στο δωμάτιο.
- Ενημερώνει το πεδίο
- Επιτυχία:
- Επιστρέφει JSON μήνυμα όπως
{'message': 'Joined room.'}
.
- Επιστρέφει JSON μήνυμα όπως
- Σφάλματα:
- 500: Σφάλμα σύνδεσης στη βάση δεδομένων.
- 401: Ο χρήστης δεν είναι συνδεδεμένος.
- Παράλειψη
room_id
: Επιστρέφει{'error': 'Winner not specified.'}
.
-
Έλεγχος σύνδεσης στη βάση δεδομένων:
- Ελέγχει αν υπάρχει ενεργή σύνδεση με τη βάση δεδομένων και επιστρέφει σφάλμα σε περίπτωση αποτυχίας.
-
Έλεγχος σύνδεσης χρήστη:
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
$_SESSION
. Εάν όχι, επιστρέφει σφάλμα HTTP 401 (User not logged in
).
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
-
Έλεγχος δωματίου:
- Ελέγχει αν ο χρήστης έχει ενταχθεί σε ένα δωμάτιο. Εάν το
roomid
λείπει από τη συνεδρία, επιστρέφει σφάλμα HTTP 401 (Room not joined
).
- Ελέγχει αν ο χρήστης έχει ενταχθεί σε ένα δωμάτιο. Εάν το
-
Ανάκτηση δεδομένων δωματίου:
- Εκτελεί SQL ερώτημα για να ανακτήσει όλα τα δεδομένα από τον πίνακα
rooms_game_state
για το δωμάτιο με το συγκεκριμένοroom_id
.
- Εκτελεί SQL ερώτημα για να ανακτήσει όλα τα δεδομένα από τον πίνακα
-
Απάντηση:
- Επιστρέφει τα δεδομένα του δωματίου και το όνομα του χρήστη σε JSON μορφή.
- Επιτυχία:
- Επιστρέφει JSON μήνυμα όπως:
{ "success": true, "room": { ...room data... }, "username": "player_name" }
- Επιστρέφει JSON μήνυμα όπως:
- Σφάλματα:
- 500: Σφάλμα σύνδεσης στη βάση δεδομένων.
- 401: Ο χρήστης δεν είναι συνδεδεμένος ή δεν έχει ενταχθεί σε δωμάτιο.
- Εάν το δωμάτιο δεν υπάρχει, επιστρέφει μήνυμα:
{'message': 'Room does not exists.'}
.
Το αρχείο getusername.php
χρησιμοποιείται για την ανάκτηση του ονόματος χρήστη από τη συνεδρία.
-
Έλεγχος μεθόδου αιτήματος:
- Ελέγχει αν το αίτημα είναι
GET
. Εάν όχι, επιστρέφει σφάλμα HTTP 405 (Invalid request method
).
- Ελέγχει αν το αίτημα είναι
-
Έλεγχος ύπαρξης ονόματος χρήστη:
- Ελέγχει αν το
username
υπάρχει στη συνεδρία. Εάν όχι, επιστρέφει μήνυμα σφάλματος:{'error': 'No username found.'}
.
- Ελέγχει αν το
-
Ανάκτηση ονόματος χρήστη:
- Παίρνει το όνομα χρήστη από τη συνεδρία (
$_SESSION['username']
).
- Παίρνει το όνομα χρήστη από τη συνεδρία (
-
Απάντηση:
- Επιστρέφει το όνομα χρήστη σε JSON μορφή:
{ "username": "player_name" }
- Επιστρέφει το όνομα χρήστη σε JSON μορφή:
- Επιτυχία:
- Επιστρέφει το όνομα χρήστη από τη συνεδρία σε JSON μορφή.
- Σφάλματα:
- Εάν το
username
δεν είναι αποθηκευμένο στη συνεδρία:{ "error": "No username found." }
- Εάν η μέθοδος δεν είναι
GET
, επιστρέφει σφάλμα HTTP 405 με μήνυμα:{'error': 'Invalid request method.'}
.
- Εάν το
-
Έλεγχος σύνδεσης στη βάση δεδομένων:
- Ελέγχει αν υπάρχει ενεργή σύνδεση με τη βάση δεδομένων και επιστρέφει σφάλμα σε περίπτωση αποτυχίας.
-
Έλεγχος σύνδεσης χρήστη:
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
$_SESSION
. Εάν όχι, επιστρέφει σφάλμα HTTP 401 (User not logged in
).
- Βεβαιώνεται ότι ο χρήστης είναι συνδεδεμένος μέσω
-
Έλεγχος αν ο χρήστης είναι σε δωμάτιο:
- Ελέγχει αν ο χρήστης έχει ενταχθεί σε ένα δωμάτιο μέσω της μεταβλητής συνεδρίας
roomid
.
- Ελέγχει αν ο χρήστης έχει ενταχθεί σε ένα δωμάτιο μέσω της μεταβλητής συνεδρίας
-
Αποδοχή δεδομένων για ενημέρωση:
- Παίρνει τα παρακάτω δεδομένα από το αίτημα
POST
:newboard
: Η νέα κατάσταση του πίνακα (board state).current_turn
: Ο παίκτης που έχει σειρά.status
: Η τρέχουσα κατάσταση του παιχνιδιού.
- Παίρνει τα παρακάτω δεδομένα από το αίτημα
-
Ενημέρωση της βάσης δεδομένων:
- Ενημερώνει τα πεδία
board_state
,current_turn
, καιstatus
του συγκεκριμένου δωματίου στον πίνακαrooms_game_state
.
- Ενημερώνει τα πεδία
-
Απάντηση:
- Επιστρέφει JSON μήνυμα επιτυχίας με τα δεδομένα του δωματίου.