Monday, April 9, 2012

Παράδειγμα Εφαρμογής - μέρος 3

Στην προηγούμενη ανάρτηση δημιουργήσαμε μια κλάση η οποία περιγράφει τους παίκτες.

Επειδή αντιλαμβάνομαι ότι τελικά τα γράμματα δεν ήταν ευδιάκριτα, παραθέτω τον κώδικα εδώ. (σαν εικόνα .. επειδή βαριέμαι να βάλω τα χρώματα).

 Όπως μπορείτε να διαπιστώσετε, ο κάθε παίκτης δεν γνωρίζει τι γίνεται γενικά στο παιχνίδι, παρά μόνο τις δικές του κινήσεις. Τις κινήσεις του ο παίκτης της κρατά στον πίνακα _moves.
Ο πίνακας _moves αναπαριστά τον πίνακα του παιχνιδιού, και έχει τιμή true όπου ο παίκτης μας έχει κάνει κίνηση, ενώ false στις υπόλοιπες.

Σήμερα θα δούμε την λογική με την οποία θα υλοποιήσουμε την συνάρτηση HasWon, η οποία θα επιστρέφει true εάν ο παίκτης έχει κερδίσει ή false όταν δεν έχει κερδίσει.


Τι θέλουμε να κάνουμε:
Για να κερδίσει ο παίκτης πρέπει να έχει συμπληρώσει 3 κινήσεις είτε οριζόντια, είτε κάθετα είτε διαγώνια.

Άρα αν συμβαίνει ένα από τα 3, πρέπει να επιστρέψουμε true. Σε αντίθετη περίπτωση (κανένα από τα 3) επιστρέφουμε false.

 Τι πρέπει να προσέξουμε:
 Ο κώδικάς μας πρέπει να δουλεύει σωστά και αποδοτικά.

1. Έχουμε στη διάθεσή μας την τελευταία κίνηση του παίκτη, έτσι δεν χρειάζεται να ελέγξουμε όλο τον πίνακα κινήσεων, αλλά μόνο τις περιοχές που επηρεάζονται από την τελευταία κίνηση (η τρίλιζα θα γίνει από την τελευταία κίνηση, άρα σίγουρα η θέση της τελευταίας κίνησης περιέχεται στην τρίλιζα).

2. Θα εκμεταλλευτούμε το γεγονός ότι ο πίνακας κινήσεων αποτελείται από  bools, και έτσι θα χρησιμοποιήσουμε boolean λογική. 

Ο κώδικας:


 
Σημειώσεις: Το σύμβολο '&&' αναπαριστά το λογικό AND.
 Έτσι εάν έχουμε  Δ = Α && Β && Γ ;

Το Δ είναι αληθές (true) αν και μόνο εάν Α=true, B=true και Γ=true.

Νομίζω ότι τα περισσότερα είναι αυτοεπεξηγηματικά. Αν έχετε απορίες στα σχόλια.