Skip to content

iee-ihu-gr-course1941/ADISE23_BattleshipGame

Repository files navigation

Table of Contents

Demo Page

Μπορείτε να κατεβάσετε τοπικά ή να επισκευτείτε την σελίδα: https://users.iee.ihu.gr/~iee2019119/ADISE23_BattleshipGame/

Εγκατάσταση

Απαιτήσεις

  • Apache2
  • Mysql Server
  • php

Οδηγίες Εγκατάστασης

  • Κάντε clone το project σε κάποιον φάκελο
    $ git clone https://github.com/iee-ihu-gr-course1941/ADISE23_BattleshipGame.git

  • Βεβαιωθείτε ότι ο φάκελος είναι προσβάσιμος από τον Apache Server. Πιθανόν να χρειαστεί να καθορίσετε τις παρακάτω ρυθμίσεις.

  • Θα πρέπει να δημιουργήσετε στην Mysql την βάση με όνομα 'battleshipgamedb' και να φορτώσετε σε αυτήν την βάση τα δεδομένα από το αρχείο schema.sql

  • Θα πρέπει να φτιάξετε το αρχείο lib/config_local.php το οποίο να περιέχει:

    <?php
	$DB_PASS = 'κωδικός';
	$DB_USER = 'όνομα χρήστη';
    ?>

Περιγραφή Παιχνιδιού

Κανόνες Παιχνιδιού:

  • Χαρακτηριστικά και Στόχος Παιχνιδιού:

    Το Battleship Game είναι ένα board game για δύο παίκτες στο οποίο οι αντίπαλοι προσπαθούν να μαντέψουν τη θέση των πολεμικών πλοίων του αντιπάλου τους και να τα βυθίσουν. Το gameplay είναι απλό. Κάθε παίκτης κρύβει πλοία σε ένα πλέγμα/πίνακα που περιέχει κάθετες και οριζόντιες συντεταγμένες χώρου. Οι παίκτες επιλέγουν εναλλάξ τις συντεταγμένες σειρών και στηλών στο πλέγμα του άλλου παίκτη σε μια προσπάθεια να αναγνωρίσουν ένα τετράγωνο που περιέχει ένα κομμάτι πλοίου. Η οθόνη παιχνιδιού του κάθε παίκτη περιλαμβάνει 2 πλέγματα/πίνακες. Το πρώτο πλέγμα χρησιμοποιείται από τον παίκτη για να «κρύψει» τη θέση των δικών του πλοίων, ενώ το δεύτερο χρησιμοποιείται για να ρίξει τις βολές προς τον αντίπαλο και να τεκμηριώσει εάν αυτές οι βολές ήταν χτυπήματα (hit) ή αστοχίες (miss).

  • Εκκίνηση Παιχνιδιού:

    Κάθε παίκτης λαμβάνει τον δικό του πίνακα παιχνιδιού και πέντε πλοία διαφορετικού μήκους. Κάθε πλοίο εισάγεται από τον χρήστη στις συντεταγμένες του πίνακα που επέλεξε να τοποθετήσει. Τα πέντε πλοία είναι τα εξής:

    • Carrier, που πιάνει πέντε σημεία.
    • Battleship, το οποίο πιάνει τέσσερα σημεία.
    • Cruiser, που πιάνει τρεία σημεία.
    • Submarine, το οποίο πιάνει και αυτό τρεία σημεία.
    • Destroyer, που πιάνει δύο σημεία.

    Ο κάθε παίκτης δεν μπορεί να δει τις τοποθεσίες των πλοίων του αντιπάλου του. Πριν ξεκινήσει το παιχνίδι, κάθε παίκτης τοποθετεί κρυφά τα δικά του πέντε πλοία στο πλέγμα του ωκεανού, εισάγωντάς τα στον αντίστοιχο πίνακα. Κάθε πλοίο πρέπει να τοποθετείται οριζόντια ή κατακόρυφα στους χώρους του πλέγματος —όχι διαγώνια— και τα πλοία δεν μπορούν τοποθετηθούν εκτός πίνακα. Τα πλοία μπορούν να αγγίξουν το ένα το άλλο, αλλά δεν μπορούν να καταλαμβάνουν τον ίδιο χώρο στο πλέγμα. Δεν μπορείτε να αλλάξετε τη θέση των πλοίων μετά την έναρξη του παιχνιδιού.

  • Gameplay:

    Οι παίκτες ρίχνουν εναλλάξ βολές για να προσπαθήσουν να χτυπήσουν τα εχθρικά πλοία του αντιπάλου. Στη σειρά σας, πυροβολήστε μια βολή κάνοντας κλικ σε μια συντεταγμένη στον πίνακα του αντιπάλου. Αφού πυροβολήσετε εμφανίζεται: "miss" (λευκό χρώμα) εάν δεν υπάρχει πλοίο εκεί ή "hit" (κόκκινο χρώμα) εάν έχετε μαντέψει σωστά ένα σημείο στο οποίο καταλαμβάνεται ένα κομμάτι πλοίου. Καθώς το παιχνίδι προχωρά, οι κόκκινες περιοχές θα προσδιορίζουν σταδιακά το μέγεθος και τη θέση των πλοίων του αντιπάλου σας. Όταν είναι η σειρά του αντιπάλου σας να πυροβολήσει εναντίον σας, κάθε φορά που ένα από τα πλοία σας δέχεται ένα χτύπημα, θα εμφανίζεται αντίστοιχα κόκκινο χρώμα στην συντεταγμένη του πλοίου που αντιστοιχεί στο σημείο του πίνακά σας. Όταν όλα τα κομμάτια ενός πλοίου σας έχουν κόκκινο χρώμα, τότε το πλοίο σας βυθίζεται. Ο πρώτος παίκτης που θα βυθίσει και τα πέντε πλοία του αντιπάλου του κερδίσει το παιχνίδι.

  • Modes:

    • Singleplayer
    • Multiplayer

Βάση Παιχνιδιού:

  • Πίνακες:

    • board:
      • player
      • coordinate
      • ship
      • state
    • board_empty
      • player
      • coordinate
      • ship
      • state
    • game_status
      • status
      • player_turn
      • result
      • last_change
    • players
      • username
      • player_number
      • token
      • last_action
  • Διαδικασίες:

    • clean_board

Συντελεστές

  • Αλέξανδρος Οικονόμου 2019119
  • Βασίλειος Μούρτζιος 185237
  • Στυλιανός Παναγιωτόπουλος 2019123
  • Κωνσταντίνος Κυριάκος Μπάτσιος 2019110

Περιγραφή API

Methods

Board

Ανάγνωση Board

GET /board/

Επιστρέφει το Board.

Αρχικοποίηση Board

POST /board/

Αρχικοποιεί το Board, δηλαδή το παιχνίδι. Γίνονται reset τα πάντα σε σχέση με το παιχνίδι.
Επιστρέφει το Board.

Τοποθέτηση Πλοίων

POST /board/set_ships/

Json Data:

Field Description Required
destroyer_coord1 H 1η συντεταγμένη του καραβιού Destroyer yes
destroyer_coord2 H 2η συντεταγμένη του καραβιού Destroyer yes
submarine_coord1 H 1η συντεταγμένη του καραβιού Submarine yes
submarine_coord2 H 2η συντεταγμένη του καραβιού Submarine yes
submarine_coord3 H 3η συντεταγμένη του καραβιού Submarine yes
cruiser_coord1 H 1η συντεταγμένη του καραβιού Cruiser yes
cruiser_coord2 H 2η συντεταγμένη του καραβιού Cruiser yes
cruiser_coord3 H 3η συντεταγμένη του καραβιού Cruiser yes
battleship_coord1 H 1η συντεταγμένη του καραβιού Battleship yes
battleship_coord2 H 2η συντεταγμένη του καραβιού Battleship yes
battleship_coord3 H 3η συντεταγμένη του καραβιού Battleship yes
battleship_coord4 H 4η συντεταγμένη του καραβιού Battleship yes
carrier_coord1 H 1η συντεταγμένη του καραβιού Carrier yes
carrier_coord2 H 2η συντεταγμένη του καραβιού Carrier yes
carrier_coord3 H 3η συντεταγμένη του καραβιού Carrier yes
carrier_coord4 H 4η συντεταγμένη του καραβιού Carrier yes
carrier_coord5 H 5η συντεταγμένη του καραβιού Carrier yes

Εκτελείτε μετά την εισαγωγή του κάθε πλοίου στις συντεταγμένες του πίνακα.
Ενημερώνει σε συγκεκριμένα coordinate, ship και player τα state του πίνακα board σε 'ship'.
Ενημερώνει το player_turn του πίνακα game_status αλλάζοντας την σειρά του παίκτη.
Στη συνέχεια, γίνεται ο κατάλληλος χειρισμός για την προσθήκη πράσινου χρώματος σε αυτά τα coordinate του πίνακα, τα οποία θα αντιπροσωπεύουν τα κομμάτια του κάθε πλοίου.

Επιλογή Χτυπήματος

POST /board/make_move/

Json Data:

Field Description Required
choice Η επιλογή χτυπήματος του πάικτη yes
player_number Ο αριθμός του παίκτη που έκανε το χτύπημα yes

Εκτελείτε μετά την επιλογή χτυπήματος του χρήστη σε μία συντεταγμένη του αντίπαλου πίνακα.
Ενημερώνει σε συγκεκριμένο coordinate και αντίπαλο παίκτη το state του πίνακα board σε 'hit' ή 'miss' αναλόγως.
Ενημερώνει το player_turn του πίνακα game_status αλλάζοντας την σειρά του παίκτη.
Τέλος, ενημερώνει το result του πίνακα game_status, εάν υπάρξει o αντίστοιχος νικητής, και άρα το status του σε 'ended'.

Χειρισμός Επιτυχημένων Χτυπημάτων (Hits)

GET /board/handle_hits_p1/
GET /board/handle_hits_p2/

Επιστρέφει όλα τα coordinate από τον πίνακα board, τα οποία έχουν state ίσο με 'hit'.
Το handle_hits_p1 επιστρέφει αυτά του παίκτη 1 ενώ το handle_hits_p2 επιστρέφει αυτά του παίκτη 2.
Στη συνέχεια, γίνεται ο κατάλληλος χειρισμός για την προσθήκη κόκκινου χρώματος σε αυτά τα coordinate του πίνακα, τα οποία θα αντιπροσωπεύουν όλα τα 'hit'.

Χειρισμός Άστοχων Χτυπημάτων (Misses)

GET /board/handle_miss_p1/
GET /board/handle_miss_p2/

Επιστρέφει όλα τα coordinate από τον πίνακα board, τα οποία έχουν state ίσο με 'miss'.
Το handle_miss_p1 επιστρέφει αυτά του παίκτη 1 ενώ το handle_miss_p2 επιστρέφει αυτά του παίκτη 2.
Στη συνέχεια, γίνεται ο κατάλληλος χειρισμός για την προσθήκη άσπρου χρώματος σε αυτά τα coordinate του πίνακα, τα οποία θα αντιπροσωπεύουν όλα τα 'miss'.

Players

Ανάγνωση στοιχείων παίκτη

GET /players/

Επιστρέφει τα username όλων των παικτών από τον πίνακα players.

Καθορισμός στοιχείων παίκτη

POST /players/

Json Data:

Field Description Required
username Το username του παίκτη yes
player_number Τον αριθμό που διάλεξε ο χρήστης να παίξει yes

Εκτελείτε όταν γίνει το Login.
Ενημερώνει τα username, player_number και token του πίνακα players.
Το token αυτό είναι μοναδικό και το χρησιμοποιεί ο παίκτης καθόλη τη διάρκεια του παιχνιδιού.
Τέλος, ενημερώνει το status του πίνακα game_status σε 'initialized' (login: ο 1ος παίκτης) ή σε 'started' (login: και οι δύο παίκτες).

Status

Ανάγνωση κατάστασης παιχνιδιού

GET /status/

Επιστρέφει τα στοιχεία του Game_status.

Entities

Board


Το board είναι ένας πίνακας, ο οποίος στο κάθε στοιχείο έχει τα παρακάτω. Ακριβώς τα ίδια στοιχεία έχει και ο πίνακας board_empty.

Attribute Description Values
player Ο αριθμός του παίκτη 'p1', 'p2'
coordinate H συντεταγμένη A1..J10
ship To όνομα του πλοίου 'Destroyer', 'Submarine', 'Cruiser', 'Battleship', 'Carrier'
state Η κατάσταση της συντεταγμένης 'empty', 'ship', 'hit', 'miss'

Players


O κάθε παίκτης έχει τα παρακάτω στοιχεία:

Attribute Description Values
username To όνομα του παίκτη String
player_number Τον αριθμό που διάλεξε ο χρήστης να παίξει 'p1', 'p2'
token To κρυφό token του παίκτη. Δημιουργείτε μόνο τη στιγμή της εισόδου του παίκτη στο παιχνίδι HEX
last_action Τελευταία αλλαγή/ενέργεια σχετικά με τους παίκτες TIMESTAMP

Game_status


H κατάσταση παιχνιδιού έχει τα παρακάτω στοιχεία:

Attribute Description Values
status Η τρέχον κατάσταση του παιχνιδιού 'not active', 'initialized', 'started', 'ended', 'aborded'
player_turn Η σειρά του πάικτη που παίζει 'p1', 'p2', NULL
result Ο αριθμός του παίκτη που κέρδισε 'p1', 'p2'
last_change Τελευταία αλλαγή/ενέργεια σχετικά με την κατάσταση του παιχνιδιού TIMESTAMP

Bonus Features

  • Timeout Check
  • Background Music
  • Toggle between Light Mode ⇔ Dark Mode

Γραφική Διεπαφή (GUI)

Main-Page Login Multiplayer Playing-Multiplayer Singleplayer Playing-Singleplayer Game-Rules About-Us

About

The Official Battleship Game 🚢

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •