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

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


ΠΡΟΓΡΑΜΜΑ Mastermind
! Ο ένας θα δημιουργήσει ένα μυστικό κωδικό τον οποίο ο άλλος θα προσπαθήσει να σπάσει.
! επιλέγοντας ένα τετραψήφιο αριθμό με ψηφία από 1 μέχρι 6.
! Ο άλλος παίκτης προσπαθεί να μαντέψει ποιος είναι ο κωδικός
! δίνοντας έναν τετραψήφιο αριθμό κάθε φορά.
! Για κάθε πρόβλεψη εμφανίζεται ο αριθμός για τα σωστά ψηφία στη σωστή θέση (ΜΑΥΡΑ)
! και ο αριθμός για τα σωστά ψηφία σε λάθος θέση (ΛΕΥΚΑ)  .
! Για ψηφία που δεν υπάρχουν , δεν εμφανίζεται κάποια ένδειξη.
! Το παιχνίδι τερματίζεται αν ο δεύτερος παίχτης βρει τον κωδικό
! ή όταν κάνει 10 προσπάθειες χωρίς να βρει τον κωδικό.
!
! Να γραφεί πρόγραμμα σε ΓΛΩΣΣΑ
! α. Να καλεί διαδικασία διαβάσματος τετραψήφιου μυστικού αριθμού
! β. Να καλεί διαδικασία που εμφανίζει πίνακα 10 θέσεων με τους  αριθμούς
!    που έχουν δoθεί και τα σωστά/λάθος ψηφία κάθε φοράς.
! γ. Να διαβάζει επαναληπτικά τους αριθμούς που μαντεύει ο 2ος παίκτης
!    μέχρι να βρει τον μυστικό ή να κάνει 10 προσπάθειες.
!    Σε κάθε διάβασμα εμφανίζει τον πίνακα με όλες τις "μαντεψιές" καλώντας
!    τη διαδικασία εμφάνισης πίνακα.
!
! 2ο ΓΕΛ Γέρακα - Βασίλης Αναστόπουλος - 2022


ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: Μυστικός, πίνακας[10], αριθμός, i, ΜΑΥΡΑ, ΛΕΥΚΑ

ΑΡΧΗ

  ΚΑΛΕΣΕ διάβασμα_τετραψήφιου ('Δώστε τον μυστικό αριθμό:', Μυστικός, ΨΕΥΔΗΣ) 
  ΚΑΛΕΣΕ Καθάρισε_οθόνη
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
    πίνακας[i] <- 0
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ


  ΚΑΛΕΣΕ εμφάνισε_πίνακα (πίνακας, Μυστικός) 
  i <- 1
  ΑΡΧΗ_ΕΠΑΝΑΛΗΨΗΣ
    ΚΑΛΕΣΕ διάβασμα_τετραψήφιου ('Μαντέψτε τον αριθμό:', αριθμός, ΑΛΗΘΗΣ) 
    πίνακας[i] <- αριθμός
    ΚΑΛΕΣΕ εμφάνισε_πίνακα (πίνακας, Μυστικός) 
    ΚΑΛΕΣΕ βρες_μαυρα_λευκά ( αριθμός, Μυστικός, ΜΑΥΡΑ, ΛΕΥΚΑ) 
    i <- i + 1
  ΜΕΧΡΙΣ_ΟΤΟΥ ΜΑΥΡΑ = 4 Η i = 11
  ΑΝ ΜΑΥΡΑ = 4 ΤΟΤΕ
    ΓΡΑΨΕ 'Μπράβο! Βρήκατε τον αριθμό σε ', i - 1, ' κινήσεις'
  ΑΛΛΙΩΣ
    ΓΡΑΨΕ 'Δυστυχώς δεν βρήκατε τον αριθμό!'
    ΓΡΑΨΕ 'Ο μυστικός αριθμός ήταν: ', Μυστικός
  ΤΕΛΟΣ_ΑΝ

ΤΕΛΟΣ_ΠΡΟΓΡΑΜΜΑΤΟΣ



ΔΙΑΔΙΚΑΣΙΑ διάβασμα_τετραψήφιου (μήνυμα, αριθμός, Επιτρέπεται_ιδιο) 
!-------------------
! Αρχικά εμφανίζει το μήνυμα που δέχεται
! Διαβάζει και επιστρέφει ένα τετραψήφιο αριθμό για το
! παιχνίδι masterMind.
! Ελέγχει να έχει 4 ψηφία με τιμές για το καθένα από 1 μέχρι 6
! Αν η μεταβλητή "Επιτρέπεται_ιδιο" είναι ψευδής τότε
!    τα ψηφία πρέπει να είναι διαφορετικά μεταξύ τους
!    αλλιώς μπορούμε να έχουμε ίδιες τιμές.
! Την καλούμε με ΨΕΥΔΗΣ στο διάβασμα του μυστικού
! ενώ με ΑΛΗΘΗΣ στο διάβασμα των προσπαθειών.
! Σε περίπτωση λάθους εμφανίζει κατάλληλο μήνυμα.
ΜΕΤΑΒΛΗΤΕΣ
  ΧΑΡΑΚΤΗΡΕΣ: μήνυμα
  ΑΚΕΡΑΙΕΣ: αριθμός
  ΛΟΓΙΚΕΣ: Επιτρέπεται_ιδιο, ΟΚ, υπάρχει
  ΑΚΕΡΑΙΕΣ: πλ, i, j, χ, ψ
ΑΡΧΗ
  ΓΡΑΨΕ μήνυμα
  ΟΚ <- ΨΕΥΔΗΣ
  ΟΣΟ ΟΚ = ΨΕΥΔΗΣ ΕΠΑΝΑΛΑΒΕ
    υπάρχει <- ΨΕΥΔΗΣ
    ΔΙΑΒΑΣΕ αριθμός
    ΑΝ αριθμός >= 1111 ΚΑΙ αριθμός <= 6666 ΤΟΤΕ
      πλ <- 0
      ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
        ψ <- ψηφίο (αριθμός, i) 

!       μετράμε τα ψηφία να είναι από 1 μέχρι 6
        ΑΝ ψ >= 1 ΚΑΙ ψ <= 6 ΤΟΤΕ
          πλ <- πλ + 1

!         έλεγχος να μην έχει ξαναδοθεί το ψηφίο
          ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ i - 1
            χ <- ψηφίο (αριθμός, j) 
            ΑΝ χ = ψ ΤΟΤΕ
              υπάρχει <- ΑΛΗΘΗΣ
            ΤΕΛΟΣ_ΑΝ
          ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

      ΑΝ πλ = 4 ΤΟΤΕ
        ΑΝ Επιτρέπεται_ιδιο = ΑΛΗΘΗΣ ΤΟΤΕ
          ΟΚ <- ΑΛΗΘΗΣ
        ΑΛΛΙΩΣ
          ΑΝ υπάρχει = ΨΕΥΔΗΣ ΤΟΤΕ
            ΟΚ <- ΑΛΗΘΗΣ
          ΑΛΛΙΩΣ
            ΟΚ <- ΨΕΥΔΗΣ
          ΤΕΛΟΣ_ΑΝ
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ

    ΑΝ ΟΚ = ΨΕΥΔΗΣ ΤΟΤΕ
      ΓΡΑΨΕ 'Δώστε ένα τετραψήφιο αριθμό με ψηφία από 1 μέχρι 6'
      ΑΝ Επιτρέπεται_ιδιο = ΨΕΥΔΗΣ ΤΟΤΕ
        ΓΡΑΨΕ 'Δεν επιτρέπονται ίδια ψηφία'
      ΤΕΛΟΣ_ΑΝ
    ΤΕΛΟΣ_ΑΝ

  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ




ΣΥΝΑΡΤΗΣΗ ψηφίο (ΑΡΙΘΜΟΣ, ΘΕΣΗ): ΑΚΕΡΑΙΑ
!-------------------
! επιστρέφει το ψηφίο του αριθμού ΑΡΙΘΜΟΣ, που βρίσκεται στη θέση ΘΕΣΗ
! π.χ αν καλέσουμε :  ψηφίο ( 7890, 1) θα επιστρέψει τις μονάδες δηλαδή 0
!                     ψηφίο ( 7890, 4) θα επιστρέψει 7
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: ΑΡΙΘΜΟΣ, ΘΕΣΗ, χ, i
ΑΡΧΗ
  ψηφίο <- 0
  χ <- ΑΡΙΘΜΟΣ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ ΘΕΣΗ
    ψηφίο <- χ mod 10
    χ <- χ div 10
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΣΥΝΑΡΤΗΣΗΣ




ΔΙΑΔΙΚΑΣΙΑ εμφάνισε_πίνακα (πίνακας, μυστικός) 
!-------------------
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: πίνακας[10], μυστικός
  ΑΚΕΡΑΙΕΣ: i, j, ψ, ΜΑΥΡΑ, ΛΕΥΚΑ
ΑΡΧΗ
  ΓΡΑΨΕ '+-----+---+---+---+---+-----+---+---+'
  ΓΡΑΨΕ '|     |   |   |   |   |     | Μ | Λ |'
  ΓΡΑΨΕ '+-----+---+---+---+---+-----+---+---+'
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 10
!        '|  1. | 5 | 5 | 5 | 5 |     | 0 | 0 |
    ΑΝ i < 10 ΤΟΤΕ
      ΓΡΑΨΕ '|  ', i, '. | '
    ΑΛΛΙΩΣ
      ΓΡΑΨΕ '| ', i, '. | '
    ΤΕΛΟΣ_ΑΝ
    ΑΝ πίνακας[i] = 0 ΤΟΤΕ
      ΓΡΑΨΕ '   |   |   |   |     |   |   |'
    ΑΛΛΙΩΣ
      ΓΙΑ j ΑΠΟ 4 ΜΕΧΡΙ 1 ΜΕ_ΒΗΜΑ -1
        ΓΡΑΨΕ ' ', ψηφίο (πίνακας[i], j), ' | '
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
      ΓΡΑΨΕ '     | '
      ΚΑΛΕΣΕ βρες_μαυρα_λευκά ( πίνακας[i], μυστικός, ΜΑΥΡΑ, ΛΕΥΚΑ) 
      ΓΡΑΨΕ ' ', ΜΑΥΡΑ, ' | ', ΛΕΥΚΑ, ' |'
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
  ΓΡΑΨΕ '+-----+---+---+---+---+-----+---+---+'
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ




ΔΙΑΔΙΚΑΣΙΑ βρες_μαυρα_λευκά ( χ, μυστικός, ΜΑΥΡΑ, ΛΕΥΚΑ) 
!-------------------
! Μετράει και για κάθε σωστό ψηφιο σε σωστή θέση επιστρέφει την τιμή στο ΜΑΥΡΑ
! Μετράει και για κάθε σωστό ψηφίο σε λάθος θέση επιστρέφει την τιμή στο ΛΕΥΚΑ
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: χ, μυστικός, ΜΑΥΡΑ, ΛΕΥΚΑ, i, j
ΑΡΧΗ
  ΜΑΥΡΑ <- 0
  ΛΕΥΚΑ <- 0

  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 4
    ΑΝ ψηφίο (μυστικός, i) = ψηφίο (χ, i) ΤΟΤΕ
      ΜΑΥΡΑ <- ΜΑΥΡΑ + 1
    ΑΛΛΙΩΣ
      ΓΙΑ j ΑΠΟ 1 ΜΕΧΡΙ 4
        ΑΝ i <> j ΤΟΤΕ
          ΑΝ ψηφίο (μυστικός, i) = ψηφίο (χ, j) ΤΟΤΕ
            ΛΕΥΚΑ <- ΛΕΥΚΑ + 1
          ΤΕΛΟΣ_ΑΝ
        ΤΕΛΟΣ_ΑΝ
      ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
    ΤΕΛΟΣ_ΑΝ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ

ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ



ΔΙΑΔΙΚΑΣΙΑ Καθάρισε_οθόνη
ΜΕΤΑΒΛΗΤΕΣ
  ΑΚΕΡΑΙΕΣ: i
ΑΡΧΗ
  ΓΙΑ i ΑΠΟ 1 ΜΕΧΡΙ 25
    ΓΡΑΨΕ
  ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
ΤΕΛΟΣ_ΔΙΑΔΙΚΑΣΙΑΣ

 

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