e-ΜΑΘΗΜΑΤΑ
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό περιβάλλον

Δημιουργία παιχνιδιού : Ball Sort


ΠΡΟΓΡΑΜΜΑ παιχνίδι_Ball_Sort

!Το Ball Sort Puzzle είναι ένα παιχνίδι παζλ που θα σας διασκεδάσει για ώρες!
!Ταξινομήστε τις χρωματιστές μπάλες στους σωλήνες, έως ότου όλες οι μπάλες ίδιας απόχρωσης βρίσκονται στον ίδιο σωλήνα.
!
!Σε αυτή την υλοποίηση σε ΓΛΩΣΣΑ του ΑΕΠΠ χρησιμοποιούμε ένα δισδιάστατο πίνακα, που αποθηκεύει το χρώμα κάθε μπάλας
!Ένας μονοδιάστατος πίνακας δείχνει πόσο γεμάτος είναι κάθε σωλήνας.
!Ουσιαστικά έχουμε στον δισδιαστατο πίνακα πολλές στοίβες, και ο δείκτης της κάθε μίας είναι σε ένα μονοδιάστατο.


ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίστα, πίνακας[ 4, 9], top[9], πλήθος
  ΧΑΡΑΚΤΗΡΕΣ: απάντηση

ΑΡΧΗ

  ΚΑΛΕΣΕ εμφανισε_τιτλο
  πίστα <- 1
  ΚΑΛΕΣΕ δημιουργία_πίστας (πίστα, πίνακας, top, πλήθος) 
  ΚΑΛΕΣΕ εμφάνισε_πίστα (πίνακας, top, πλήθος) 
! Αρχικοποιήσεις
! Ξεκινάμε με την 1η πίστα. Η διαδικασία βάζει αρχικές τιμές στον πίνακα, στο πλήθος από τους σωλήνες
! και στο πόσο γεμάτος είναι κάθε σωλήνας (top κάθε στοίβας).


  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ 'Πίστα Νο: ', πίστα

    ΚΑΛΕΣΕ εμφανισε_μενου
    ΔΙΑΒΑΣΕ απάντηση
    ΕΠΙΛΕΞΕ απάντηση
      ΠΕΡΙΠΤΩΣΗ '1'
! επιλογή νέας πίστας
        ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
          ΓΡΑΨΕ 'Επίλεξε πίστα 1..5 : '
          ΔΙΑΒΑΣΕ πίστα
        ΜΕΧΡΙΣ_ΟΤΟΥ πίστα >= 1 ΚΑΙ πίστα <= 5
        ΚΑΛΕΣΕ δημιουργία_πίστας (πίστα, πίνακας, top, πλήθος) 
        ΚΑΛΕΣΕ εμφάνισε_πίστα (πίνακας, top, πλήθος) 

      ΠΕΡΙΠΤΩΣΗ '2'
! έναρξη παιχνδιού
        ΚΑΛΕΣΕ εκτέλεση_παιχνιδιού (πίνακας, top, πλήθος) 

      ΠΕΡΙΠΤΩΣΗ '9'
        ΓΡΑΨΕ 'Τέλος'
    ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ απάντηση = '9'
ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ



ΣΥΝΑΡΤΗΣΗ χαρακτήρας_για_χρωμα (χ): ΧΑΡΑΚΤΗΡΑΣ
! Επειδή στο ΑΕΠΠ δεν έχουμε διαφορετικά χρώματα στην εμφάνιση, χρησιμοποιούμε διάφορους χαρακτήρες
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: χ
ΑΡΧΗ
  ΕΠΙΛΕΞΕ χ
    ΠΕΡΙΠΤΩΣΗ 0
      χαρακτήρας_για_χρωμα <- ' '
    ΠΕΡΙΠΤΩΣΗ 1
      χαρακτήρας_για_χρωμα <- '▓'
    ΠΕΡΙΠΤΩΣΗ 2
      χαρακτήρας_για_χρωμα <- '▒'
    ΠΕΡΙΠΤΩΣΗ 3
      χαρακτήρας_για_χρωμα <- '░'
    ΠΕΡΙΠΤΩΣΗ 4
      χαρακτήρας_για_χρωμα <- '▊'
    ΠΕΡΙΠΤΩΣΗ 5
      χαρακτήρας_για_χρωμα <- 'H'
    ΠΕΡΙΠΤΩΣΗ 6
      χαρακτήρας_για_χρωμα <- 'Ξ'
    ΠΕΡΙΠΤΩΣΗ 7
      χαρακτήρας_για_χρωμα <- 'Χ'
    ΠΕΡΙΠΤΩΣΗ ΑΛΛΙΩΣ
      χαρακτήρας_για_χρωμα <- 'Ο'
  ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ 


ΔΙΑΔΙΚΑΣΙΑ εμφανισε_μενου
ΑΡΧΗ
  ΓΡΑΨΕ 'ΜΕΝΟΥ'
  ΓΡΑΨΕ '-----'
  ΓΡΑΨΕ '1 Επιλογή πίστας'
  ΓΡΑΨΕ '2 Έναρξη παιχνιδιού'
  ΓΡΑΨΕ ' '
  ΓΡΑΨΕ '9 Έξοδος'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ




ΔΙΑΔΙΚΑΣΙΑ εμφάνισε_πίστα (πίνακας, top, πλήθος) 
! Εμφανίζει το περιεχόμενο των σωλήνων
! Η μεταβλητή πλήθος έχει τον αριθμό από τις στοίβες που χρησιμοποιούμε.
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίστα, πίνακας[ 4, 9], top[9], πλήθος
  ΑΚΕΡΑΙΕΣ: i, j
ΑΡΧΗ

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ πλήθος
    ΓΡΑΨΕ '| ', i, '  | '
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ πλήθος
    ΓΡΑΨΕ '|    | '
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ

  ΓΙΑ i ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
    ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ πλήθος
      ΓΡΑΨΕ '| ', χαρακτήρας_για_χρωμα (πίνακας[ i, j]), '  | '
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΓΡΑΨΕ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ πλήθος
    ΓΡΑΨΕ '|----| '
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 



ΔΙΑΔΙΚΑΣΙΑ εκτέλεση_παιχνιδιού (πίνακας, top, πλήθος) 
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίστα, πίνακας[ 4, 9], top[9], πλήθος
  ΑΚΕΡΑΙΕΣ: i, j, from, to, κινήσεις
  ΛΟΓΙΚΕΣ: τελείωσε
  ΧΑΡΑΚΤΗΡΕΣ: απ
ΑΡΧΗ
  κινήσεις <- 0
  τελείωσε <- ΨΕΥΔΗΣ
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ

    ΓΡΑΨΕ 'Δώστε από : '
    ΔΙΑΒΑΣΕ from
    ΓΡΑΨΕ 'Δώστε προς: '
    ΔΙΑΒΑΣΕ to

    ΑΝ (from > πλήθος) Η (from <= 0) Η
      & (to > πλήθος) Η (to <= 0) ΤΟΤΕ
      ΓΡΑΨΕ 'Αδύνατη κίνηση - Λάθος τιμές (0..', πλήθος, ')'
    ΤΕΛΟΣ_ΑΝ

    ΑΝ αποδεκτή_κίνηση (πίνακας, top, πλήθος, from, to) ΤΟΤΕ
      κινήσεις <- κινήσεις + 1
      ΚΑΛΕΣΕ αλλαγή (πίνακας, top, πλήθος, from, to) 
      ΚΑΛΕΣΕ εμφάνισε_πίστα (πίνακας, top, πλήθος) 

      ΑΝ επιλύθηκε_το_pazzle (πίνακας, top, πλήθος) ΤΟΤΕ
        ΓΡΑΨΕ 'Ολοκληρώθηκε η επίλυση σε ', κινήσεις, ' κινήσεις.'
        τελείωσε <- ΑΛΗΘΗΣ
      ΤΕΛΟΣ_ΑΝ
    ΑΛΛΙΩΣ
      ΓΡΑΨΕ 'Μη αποδεκτή κίνηση'
    ΤΕΛΟΣ_ΑΝ

    ΑΝ τελείωσε = ΨΕΥΔΗΣ ΤΟΤΕ
      ΓΡΑΨΕ 'Πατήστε <Σ> αν θέλετε να σταματήσετε το παιχνίδι : '
      ΔΙΑΒΑΣΕ απ
      ΑΝ απ = 'Σ' Η απ = 'σ' Η απ = 'S' Η απ = 's' ΤΟΤΕ
        τελείωσε <- ΑΛΗΘΗΣ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ
  ΜΕΧΡΙΣ_ΟΤΟΥ τελείωσε = ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ



ΔΙΑΔΙΚΑΣΙΑ αλλαγή (πίνακας, top, πλήθος, from, to) 
! Μεταφέρει μια "μπάλλα" από τη στοίβα from στη στοίβα to
! Θεωρεί ότι έχουν γίνει όλοι οι απαιτούμενοι έλεγχοι και είναι αποδεκτή η κίνηση.
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίνακας[ 4, 9], top[9] 
  ΑΚΕΡΑΙΕΣ: πλήθος, from, to
ΑΡΧΗ
  top[to] <- top[to] + 1
  πίνακας[ top[to], to] <- πίνακας[ top[from], from] 
  πίνακας[ top[from], from] <- 0
  top[from] <- top[from] - 1
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ



ΣΥΝΑΡΤΗΣΗ αποδεκτή_κίνηση (πίνακας, top, πλήθος, from, to): ΛΟΓΙΚΗ
! Συνάρτηση που επιστρέφει την τιμή ΑΛΗΘΗΣ αν η κίνηση είναι αποδεκτή διαφορετικά την τιμή ΨΕΥΔΗΣ
! Ελέγχει να είναι διαφορετικά το from , to
! να μην γίνεται υποχείλιση στην στοίβα from ,
! να μην γίνεται υπερχείλιση στην στοίβα to
! Για να είναι αποδεκτή κίνηση πρέπει να έχουν το ίδιο χρώμα ή το to είναι άδειο.

ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίνακας[ 4, 9], top[9], πλήθος
  ΑΚΕΡΑΙΕΣ: i, j, from, to
  ΛΟΓΙΚΕΣ: OK
ΑΡΧΗ
  OK <- ΨΕΥΔΗΣ
  ΑΝ (from = to) ΤΟΤΕ
    OK <- ΨΕΥΔΗΣ
  ΑΛΛΙΩΣ_ΑΝ (from > πλήθος) Η (from <= 0) Η (to > πλήθος) Η (to <= 0) ΤΟΤΕ
    OK <- ΨΕΥΔΗΣ
  ΑΛΛΙΩΣ_ΑΝ top[from] = 0 Η top[to] = 4 ΤΟΤΕ
    OK <- ΨΕΥΔΗΣ
  ΑΛΛΙΩΣ_ΑΝ (top[to] = 0) ΤΟΤΕ
    OK <- ΑΛΗΘΗΣ
  ΑΛΛΙΩΣ_ΑΝ (πίνακας[ top[to], to] = πίνακας[ top[from], from]) ΤΟΤΕ
    OK <- ΑΛΗΘΗΣ
  ΤΕΛΟΣ_ΑΝ

  αποδεκτή_κίνηση <- OK
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ



ΣΥΝΑΡΤΗΣΗ επιλύθηκε_το_pazzle (πίνακας, top, πλήθος): ΛΟΓΙΚΗ
! Επιστρέφει ΑΛΗΘΗΣ όταν όλα τα στοιχεία κάθε στοίβας στοίβας έχουν το ίδιο χρώμα
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίνακας[ 4, 9], top[9], πλήθος
  ΑΚΕΡΑΙΕΣ: i, j
  ΛΟΓΙΚΕΣ: OK
ΑΡΧΗ
  OK <- ΑΛΗΘΗΣ
  ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ πλήθος
    ΓΙΑ i ΑΠΟ 2 ΜΕΧΡΙ 4
      ΑΝ πίνακας[i, j] <> πίνακας[1, j] ΤΟΤΕ
        OK <- ΨΕΥΔΗΣ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

  επιλύθηκε_το_pazzle <- OK
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ



ΔΙΑΔΙΚΑΣΙΑ εμφανισε_τιτλο
ΑΡΧΗ
  ΓΡΑΨΕ '+--------------------+'
  ΓΡΑΨΕ '|Ball Sort           |'
  ΓΡΑΨΕ '|ΑΕΠΠ - 2ο ΓΕΛ Γέρακα|'
  ΓΡΑΨΕ '|(c) 2022            |'
  ΓΡΑΨΕ '+--------------------+'
  ΓΡΑΨΕ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ 




ΔΙΑΔΙΚΑΣΙΑ δημιουργία_πίστας (πίστα, πίνακας, top, πλήθος) 
! δέχεται τον αριθμό της πίστας
! και επιστρέφει συμπληρωμένο το πίνακα και τους δείκτες (top)
! Η μεταβλητή πλήθος έχει τον αριθμό από τις στοίβες που χρησιμοποιούμε.
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίστα, πίνακας[ 4, 9], top[9], πλήθος, i, j
ΑΡΧΗ
  ΕΠΙΛΕΞΕ πίστα
    ΠΕΡΙΠΤΩΣΗ 1
      πλήθος <- 3
      top[1] <- 4
      πίνακας[ 1, 1] <- 1
      πίνακας[ 2, 1] <- 1
      πίνακας[ 3, 1] <- 2
      πίνακας[ 4, 1] <- 2
      top[2] <- 4
      πίνακας[ 1, 2] <- 2
      πίνακας[ 2, 2] <- 2
      πίνακας[ 3, 2] <- 1
      πίνακας[ 4, 2] <- 1
      ΓΙΑ j ΑΠΟ 3 ΜΕΧΡΙ 9
        top[j] <- 0
        ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
          πίνακας[ i, j] <- 0
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


    ΠΕΡΙΠΤΩΣΗ 2
      πλήθος <- 5
      top[1] <- 4
      πίνακας[ 1, 1] <- 1
      πίνακας[ 2, 1] <- 2
      πίνακας[ 3, 1] <- 3
      πίνακας[ 4, 1] <- 1
      top[2] <- 4
      πίνακας[ 1, 2] <- 2
      πίνακας[ 2, 2] <- 3
      πίνακας[ 3, 2] <- 1
      πίνακας[ 4, 2] <- 2
      top[3] <- 4
      πίνακας[ 1, 3] <- 3
      πίνακας[ 2, 3] <- 1
      πίνακας[ 3, 3] <- 2
      πίνακας[ 4, 3] <- 3

      ΓΙΑ j ΑΠΟ 4 ΜΕΧΡΙ 9
        top[j] <- 0
        ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
          πίνακας[ i, j] <- 0
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

    ΠΕΡΙΠΤΩΣΗ 3
      πλήθος <- 6
      top[1] <- 4
      πίνακας[ 1, 1] <- 1
      πίνακας[ 2, 1] <- 1
      πίνακας[ 3, 1] <- 2
      πίνακας[ 4, 1] <- 2
      top[2] <- 4
      πίνακας[ 1, 2] <- 3
      πίνακας[ 2, 2] <- 4
      πίνακας[ 3, 2] <- 3
      πίνακας[ 4, 2] <- 4
      top[3] <- 4
      πίνακας[ 1, 3] <- 1
      πίνακας[ 2, 3] <- 2
      πίνακας[ 3, 3] <- 3
      πίνακας[ 4, 3] <- 4
      top[4] <- 4
      πίνακας[ 1, 4] <- 4
      πίνακας[ 2, 4] <- 3
      πίνακας[ 3, 4] <- 2
      πίνακας[ 4, 4] <- 1

      ΓΙΑ j ΑΠΟ 5 ΜΕΧΡΙ 9
        top[j] <- 0
        ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
          πίνακας[ i, j] <- 0
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


    ΠΕΡΙΠΤΩΣΗ 4
      πλήθος <- 7
      top[1] <- 4
      πίνακας[ 1, 1] <- 1
      πίνακας[ 2, 1] <- 2
      πίνακας[ 3, 1] <- 3
      πίνακας[ 4, 1] <- 4
      top[2] <- 4
      πίνακας[ 1, 2] <- 5
      πίνακας[ 2, 2] <- 1
      πίνακας[ 3, 2] <- 2
      πίνακας[ 4, 2] <- 3
      top[3] <- 4
      πίνακας[ 1, 3] <- 4
      πίνακας[ 2, 3] <- 5
      πίνακας[ 3, 3] <- 1
      πίνακας[ 4, 3] <- 2
      top[4] <- 4
      πίνακας[ 1, 4] <- 4
      πίνακας[ 2, 4] <- 4
      πίνακας[ 3, 4] <- 5
      πίνακας[ 4, 4] <- 1
      top[5] <- 4
      πίνακας[ 1, 5] <- 2
      πίνακας[ 2, 5] <- 3
      πίνακας[ 3, 5] <- 4
      πίνακας[ 4, 5] <- 5


      ΓΙΑ j ΑΠΟ 6 ΜΕΧΡΙ 9
        top[j] <- 0
        ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
          πίνακας[ i, j] <- 0
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

    ΠΕΡΙΠΤΩΣΗ 5
      πλήθος <- 7
      top[1] <- 4
      πίνακας[ 1, 1] <- 1
      πίνακας[ 2, 1] <- 1
      πίνακας[ 3, 1] <- 2
      πίνακας[ 4, 1] <- 2
      top[2] <- 4
      πίνακας[ 1, 2] <- 3
      πίνακας[ 2, 2] <- 3
      πίνακας[ 3, 2] <- 4
      πίνακας[ 4, 2] <- 4
      top[3] <- 4
      πίνακας[ 1, 3] <- 5
      πίνακας[ 2, 3] <- 5
      πίνακας[ 3, 3] <- 1
      πίνακας[ 4, 3] <- 2
      top[4] <- 4
      πίνακας[ 1, 4] <- 3
      πίνακας[ 2, 4] <- 4
      πίνακας[ 3, 4] <- 5
      πίνακας[ 4, 4] <- 1
      top[5] <- 4
      πίνακας[ 1, 5] <- 2
      πίνακας[ 2, 5] <- 3
      πίνακας[ 3, 5] <- 4
      πίνακας[ 4, 5] <- 5


      ΓΙΑ j ΑΠΟ 6 ΜΕΧΡΙ 9
        top[j] <- 0
        ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
          πίνακας[ i, j] <- 0
        ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


  ΤΕΛΟΣ_ΕΠΙΛΟΓΩΝ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ


 

© 2022 - 2ο Γενικό Λύκειο Γέρακα - Βασίλειος Αναστόπουλος