Παρασκευή 8 Ιανουαρίου 2016

Σταυρόλεξο Αμερικάνικο! Χρήση Αλφαριθμητικών

Ένα μικρό πρόγραμμα για σταυρόλεξο!
Φαίνεται η χρήση αλφαριθμητικών και ιδιαίτερα των συναρτήσεων:
Αρισ$(), Μεσ$(), Δεξι$()





Έκδοση 2.2
Οδηγίες:
Το πρόγραμμα χρησιμεύει για να φτιάξουμε και να "τρέξουμε" σταυρόλεξα!
Ο πίνακας Ερ$() μπορεί να μεγαλώσει για να πάρει όλες τις ερωτήσεις
Η ρουτίνα οριζ() βάζει λέξεις οριζόντια στο πίνακα Στ$(), με άνω αριστερό άκρο το 0,0
Οι δυο πρώτες παράμετροι είναι η θέση του πρώτου γράμματος (όπου θα εμφανίζεται ο αριθμός της ερώτησης). Ακολουθεί ο αριθμός της ερώτησης, η λέξη και η ερώτηση.
Το σταυρόλεξο λύνεται με την μετακίνηση ενός δρομέα και επιλογή του σωστού γράμματος. Όταν βρούμε όλα τα γράμματα ή πατήσουμε το 1 τότε έχουμε το ποσοστό επιτυχίας. Για ευκολία εμφανίζετε ο αριθμός των γραμμάτων που πρέπει να βρούμε (άρα ξέρουμε άμεσα αν έχουμε βρει το σωστό, αφού με το που το βρούμε μειώνεται ο αριθμός). Μπορούμε να αλλάξουμε γράμμα ή να διαγράψουμε γράμμα με delete. Με το 0 "χάνουμε" το μήκος κάθε λέξης. Με το 3 εμφανίζεται η λύση. Με το διάστημα εμφανίζεται/εξαφανίζεται ο αριθμός της ερώτησης. Στα κουτάκια μπορεί να εμφανίζεται και ο αριθμός και το γράμμα. Αν υπάρχει σε κάθετη λέξη ο αριθμός της τότε ο "αλγόριθμος" επιλέγει να γράψει τον αριθμό της οριζόντιας λέξης στο τέλος της λέξης.

η Διαμέσου (Gosub) είναι προαιρετική για τις ρουτίνες τύπου Ρουτίνα/Τέλος Ρουτίνας. Εδώ μπορεί να αφαιρεθεί. Είναι υποχρεωτική αν έχουμε πίνακα με ίδιο όνομα (και αυτός έχει παρενθέσεις) γιατί ο διερμηνευτής βρίσκει τον πίνακα πριν την ρουτίνα. Με την διαμέσου όμως έχουμε μια αναζήτηση (το Διαμέσου) και άμεσα καλεί την ρουτίνα. Η διαφορά είναι ελάχιστη.
Προστέθηκε η εντολή Φόρμα 40,20 για να φτιάξει την κονσόλα σωστά!

Καθαρό
Αδειασε
Φόρμα 40,20
Γενική π, δ$="ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ"
Γενική Εμφαν=Αληθής, ΕμφΝ, Γράμματα, Συνολικά
Γενική ΕμφΚ, χ_μετάθεση, υ_μετάθεση
π<=(Υ.Σημεία Δια Ύψος)*1.5
Κάνε ΜετΧ(Χ)=π*Χ
χ_μετάθεση<=(χ.σημεια-ΜετΧ(12))/2
υ_μετάθεση<=(υ.σημεια-ΜετΧ(10))/2
Τμήμα Κουτί {
      Διάβασε Χ, Υ
      Θέση Χ+χ_μετάθεση, Υ+υ_μετάθεση
      Αν Ταύτιση("Α") Τότε {
      Βήμα 30,30
      Πέτα : Βάψε @ π-90,π-90,3,1
      } Αλλιώς {
            Βάψε @ π,π,4,1
            Βήμα 0, π*0.15
            Πένα 0 {
                  Αν Ταύτιση("Γ") Τότε Βάψε @ π,π*.6,5, Γράμμα$
            }
      }
}
Πίνακας Στ$(12,10), Ερ$(10)
Διαμέσου Οριζ(2,2,2,"ΗΛΙΟΣ","Τον λέγαν και Απόλλων")
Διαμέσου Καθ(2,1,1, "ΣΗΜΕΡΑ","Μετά το χθές")
Διαμέσου Οριζ(1,4,3,"ΠΕΡΙΠΤΕΡΟ","Μαγαζί του δρόμου")
Διαμέσου Καθ(6,1,4, "ΑΣΕΤΟΝ","Διαλυτικό")
Διαμέσου Οριζ(6,1,7, "ΑΛΑΤΙ","... και πιπέρι")
Διαμέσου Οριζ(6,6,5,"ΝΥΧΤΑ","Μέρα και ..")
Διαμέσου Καθ(4,1,6, "ΜΙΝΙΟΝ","Μικρό")
Συνολικά<=Γράμματα
\\ εμφάνιση
\\Διαμέσου Εμφ(Αληθής)
Διπλά
Αναφορά 2, "Σταυρόλεξο"
κανονικά
Οθόνη, -4
Στη Δχ=2, Δψ=1, ΕρΝ=1
Διαμέσου Εμφ(0)
      Κουτί ΜετΧ(Δχ),ΜετΧ(Δψ), 1
Δες {
' για το Διέκοψε...ώστε να σταματήσει σε αυτό το μπλοκ
' κανονικά το Διέκοψε σταματάει το τμήμα
' ενώ το έξοδος σταματάει ένα μόνο μπλοκ
Κάθε 100 {
      Ανανέωση 100
      Κουτί ΜετΧ(Δχ),ΜετΧ(Δψ), 1
      Αν Πατημένο(49) Τότε {
            Διεκοψε
      } Αλλιώς.Αν Πατημένο(50) Τότε {
            Εμφαν~
            Διαμεσου Εμφ(Εμφαν)
      } Αλλιώς.Αν Πατημένο(48) Τότε {
            ΕμφΚ~
            Διαμεσου Εμφ(0)
      } Αλλιώς.Αν Πατημένο(32) Τότε {
            ΕμφΝ~
            Διαμεσου Εμφ(0)
      } Αλλιώς.Αν Πατημένο(0x25) Τότε {
            Αν Δχ>0 Τότε Αν ""<>Στ$(Δχ-1,Δψ) Τότε Δχ--
      } Αλλιώς.Αν Πατημένο(0x26) Τότε {
            Αν Δψ>0 Τότε Αν ""<>Στ$(Δχ,Δψ-1) Τότε Δψ--
      } Αλλιώς.Αν Πατημένο(0x27) Τότε { ' ->>
            Αν Δχ<11 Τότε Αν ""<>Στ$(Δχ+1,Δψ) Τότε Δχ++
      } Αλλιώς.Αν Πατημένο(0x28) Τότε {
            Αν Δψ<9 Τότε Αν ""<>Στ$(Δχ,Δψ+1) Τότε Δψ++
      } Αλλιώς.Αν Πατημένο(0x2E) Τότε {
            Αν Θεση(δ$,Δεξι$(Στ$(Δχ,Δψ),1))>0 Τότε {
                  Αν Μήκος(Στ$(Δχ,Δψ))>1 και Αρισ$(Στ$(Δχ,Δψ),1)=Δεξι$(Στ$(Δχ,Δψ),1) Τότε Γράμματα++
                  Στ$(Δχ,Δψ)=Μεσ$(Στ$(Δχ,Δψ),1,Μήκος(Στ$(Δχ,Δψ))-1)
                  Διαμέσου Εμφ1(Μεσ$(Στ$(Δχ,Δψ),2))
            }
      } Αλλιώς {
            ββ$=Ενκομ$
            Αν ββ$<>"" Τότε {
                  ββ$=κεφ$(ββ$)
                  Αν Θέση(δ$,ββ$)=0 Τότε έξοδος
                  α$=Στ$(Δχ,Δψ)
                  Αν Μήκος(α$)>1 και Θεση(δ$,Δεξι$(α$,1))>0 Τότε {
                        Αν Αρισ$(α$,1)=Δεξι$(α$,1) Τότε Γράμματα++
                        Στ$(Δχ,Δψ)=Μεσ$(α$,1,Μήκος(α$)-1)
                  }
                  Στ$(Δχ,Δψ)=Στ$(Δχ,Δψ)+ββ$
                  α$=Στ$(Δχ,Δψ)
                  Αν Μήκος(α$)>1 και Αρισ$(α$,1)=Δεξι$(α$,1) Τότε Γράμματα--
                  Διαμέσου Εμφ1(Μεσ$(α$,2))
             }
      }
      Κουτί ΜετΧ(Δχ),ΜετΧ(Δψ), 1
      αα$=Μεσ$(Στ$(Δχ,Δψ),2)
      Αν αα$<>"" Τότε Αν Τιμή(αα$) >0 Τότε ΕρΝ=Τιμή(αα$)
      Οθόνη
      Αναφορά 2, μορφη$("{0}. {1}",ΕρΝ, Ερ$(ΕρΝ-1))
      Αναφορά 2, μορφη$("Γράμματα που δεν έχουν βρεθεί: {0}", Γράμματα)
      Αναφορά 2, "1: Τερματισμός, 0: Πλαίσια, Διάστημα: Αριθμοί"
      ανανεωση
      Αν Γράμματα=0 Τότε Έξοδος
}
}
Ενώ Ενκομ$<>"" { Ανανέωση }
ΕμφΝ<=Αληθής
Οθόνη , -4
Ανανέωση 50
Διπλά
Κάθε 250 {
      Οθόνη , -2
      Αν ΕμφΝ Τότε {
            ΕμφΝ~
            Τύπωσε Πάνω $(6), μορφή$("ΕΠΙΤΥΧΙΑ {0:0}%", (Συνολικά-γράμματα)/Συνολικά*100)
         } Αλλιώς {
            ΕμφΝ~
      }
      Ανανέωση
      Αν Ενκομ$<>"" τότε έξοδος
}
Κανονικά
Ενώ Ενκομ$<>"" { Ανανέωση }
Οθόνη ,0
Τέλος
Ρουτίνα Εμφ1(α$)
      Αν θεση(δ$,αρισ$(α$,1))=0 και θεση(δ$,δεξι$(α$,1))>0 Τότε {
            Αν ΕμφΝ Τότε {
                  Κουτί ΜετΧ(Δχ),ΜετΧ(Δψ), Αρισ$(α$,Μήκος(α$)-1)+"/"+δεξι$(α$,1)
            } Αλλιώς {
                  Κουτί ΜετΧ(Δχ),ΜετΧ(Δψ), δεξι$(α$,1)
            }
      } Αλλιώς {
            Κουτί ΜετΧ(Δχ),ΜετΧ(Δψ), α$
      }
Τέλος Ρουτίνας
Ρουτίνα Εμφ(Όλα)
      Τοπική ι, κ, ι1, κ1, α$
      Ανανέωση 5000
      Θέση χ_μετάθεση,υ_μετάθεση
      Βάψε ΜετΧ(12),ΜετΧ(8), 1,5
      Για ι=ΜετΧ(0) έως ΜετΧ(11) ανά π {
            κ1=0
            Για κ=ΜετΧ(0) έως ΜετΧ(7) ανά π {
                  α$=Στ$(ι1,κ1)
                  Αν α$="" Τότε {
                        Αν ΕμφΚ Τότε Κουτί ι, κ, " "
                  } Αλλιώς.Αν Όλα Τότε {
                        Κουτί ι, κ, Αρισ$(α$,1)
                  } Αλλιώς.Αν μηκος(α$)=1 Τότε {
                           Αν ΕμφΚ τότε { Κουτί ι, κ } Αλλιώς Κουτί ι, κ, "?"
                  } Αλλιώς {
                        α$=Μεσ$(α$,2)
                        Αν θεση(δ$,αρισ$(α$,1))=0 και θεση(δ$,δεξι$(α$,1))>0 Τότε {
                              Αν ΕμφΝ Τότε {
                                    Κουτί ι, κ, Αρισ$(α$,Μήκος(α$)-1)+"/"+δεξι$(α$,1)
                              } Αλλιώς Κουτί ι, κ, δεξι$(α$,1)
                        } Αλλιώς Κουτί ι, κ, α$
                  }         
                  κ1++
            }
            ι1++
      }
      Ανανέωση 50
Τέλος Ρουτίνας
Ρουτίνα Οριζ(ι,κ, Ν, Α$, Ερ$)
      Τοπική θ, β$
      Ερ$(Ν-1)=Ερ$
      Για ι=ι έως ι+μήκος(Α$)-1
            θ++
            β$=Αρισ$(Στ$(ι,κ),1)
            Αν β$="" Τότε {
                  Στ$(ι,κ)=Μεσ$(Α$,θ,1)
                        Γράμματα++
            } Αλλιώς {
                  Αν β$<>Μεσ$(Α$,θ,1) Τότε Λάθος μορφή$("Δεν ταιριάζει το {0} στο {1} γραμμα",Ν,θ)
            }
      Επόμενο ι
      Αν Μήκος(Στ$(ι-θ,κ))=1 Τότε {ι-=θ } αλλιώς ι--
      Στ$(ι,κ)=Μορφή$("{0}{1}",Αρισ$(Στ$(ι,κ),1),Ν)
Τέλος Ρουτίνας
Ρουτίνα Καθ(ι,κ,Ν, Α$,Ερ$)
      Τοπική θ, β$
      Ερ$(Ν-1)=Ερ$
      Για κ=κ έως κ+μήκος(Α$)-1
            θ++
            β$=Αρισ$(Στ$(ι,κ),1)
            Αν β$="" Τότε {
                  Στ$(ι,κ)=Μεσ$(Α$,θ,1)
                  Γράμματα++
            } Αλλιώς {
                  Αν β$<>Μεσ$(Α$,θ,1) Τότε Λάθος μορφή$("Δεν ταιριάζει το {0} στο {1} γράμμα",Ν,θ)
            }
      Επόμενο κ
      Αν Μήκος(Στ$(ι,κ-θ))=1 Τότε {κ-=θ } αλλιώς κ--
      Στ$(ι,κ)=Μορφή$("{0}{1}",Αρισ$(Στ$(ι,κ),1),Ν)
Τέλος Ρουτίνας



Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.