in Programming, TI-BASIC

TI BASIC Tutorial 4

Nach langem Warten und unzähligen verzweifelten Fanmails [/ironie] hier nun der 4 und letzte Teil des Tutorials.

Laut meinem Plan müsste nun die erste Eingabe kommen (Ich habe allerdings bemerkt, dass auch schon im letzten Tutorial ein Input reingerutscht ist, hab ich wohl übersehen ^^).

In der Theorie sieht die so aus:

Input "Eingabe:",A

In diesem Beispiel würde nun das, was der User eingibt, in der Variable A gespeichert. Mit dieser Variable kann man dann machen was man will, zum Beispiel sie ausgeben.

Wir werden nun mal einen kleinen Additionierer schreiben, also ein Taschenrechner, der nur Plus rechnen kann.

ClrHome
Disp "ADDITIONIERER"
Input "VARIABLE A:",A
Input "VARIABLE B:",B
Disp "SUMME:"
Disp A+B

Doch hier muss der User seine Eingabe ja immer mit ENTER bestätigen: Für ein actionreiches Spiel reicht es also nicht.

Dafür gibts die Funktion

getKey->A

(A ist natürlich nur eine Variable)
Wenn wir nun schreiben:

Lbl A:
getKey->A
If (A > 0)
Disp A
Goto A

Die if-Verzweigung muss hier rein, da sonst die ganze Zeit 0 ausgegeben würde, denn wenn keine Taste gedrückt wurde, ist der Wert von getKey 0.

Wenn man nun verschiedene Tasten drückt kann man die Zahlencodes für sie sehen.
Die Pfeiltasten haben z.B. für oben 25, für rechts 26, für links 24 und für unten 34. 34?
Ja richtig gelesen, denn der Code für die Tasten berechnet sich folgendermaßen:
Die erste Zahl ist die Zeile und die zweite ist die Spalte in der die Taste steht.
Y= ist ja die erste Taste ganz oben. Logischerweise hat sie den Code 11. WINDOW 12, 2nd 21 usw.
Da die Unten-Pfeiltaste zur dritten Zeile gerechnet wird, hat sie den Wert 34.
Diese Eingabemöglichkeit wird auch in dem Spiel von mir ganz unten verwendet.

Noch was zum Schluss:
Wenn ihr, während ihr im Editor seid, auf
PRGM->EXEC geht, eins auswählt und ENTER drückt, wird dieses Programm dann gestartet, wenn euer Programm bei diesem Befehl (prgmNAMEDESPRGMS) ankommt. Natürlich nur wenn dieses Programm auf dem Taschenrechner auch existiert.

Ganz zum Schluss veröffentliche ich hier nochmal den Quellcode für eines meiner Spiele: ein kleiner Snake Klon, mit KI und ohne Schwanz:

ClrHome
Output(3,5,"SNAKE")
Output(4,3,"PRESS ENTER")
Output(8,2,"CODE BY DUBBEL")
6->X
5->Y
5->B
7->D
15->E
0->P
7->N
5->O
Pause
ClrHome
Output(1,1,"++++++++++++++++")
Output(2,1,"+              +")
Output(3,1,"+              +")
Output(4,1,"+              +")
Output(5,1,"+              +")
Output(6,1,"+              +")
Output(7,1,"+              +")
Output(8,1,"++++++++++++++++")
Output(N,O,"*")

Lbl A:
0->C
0->G
getKey->A
If(A=26)
Then
Output(Y,X," ")
1->B
X+1->X
1->C
End
If(A=24)
Then
Output(Y,X," ")
2->B
X-1->X
1->C
End
If(A=25)
Then
Output(Y,X," ")
3->B
Y-1->Y
1->C
End
If(A=34)
Then
Output(Y,X," ")
4->B
Y+1->Y
1->C
End

If(C=0):Then
Output(Y,X, " ")

If(B=1):Then
X+1->X:End
If(B=2):Then
X-1->X:End
If(B=3):Then
Y-1->Y:End
If(B=4):Then
Y+1->Y:End
End

Output(D,E," ")
If(Q=1):Then
If(Y>D):Then
D +1->D:1->G:End
If(Y<D):Then 
D -1->D:1->G:End
If (G=0):Then
If(X>E):Then
E+1->E:End
If(X<E):Then 
E-1->E:End
End:0->Q
Else
1->Q:End
Output(D,E,"+")
If((Y=D and X=E) or (Y<2) or (Y>7) or (X<2) or (x>15)):Then
ClrHome
Output(1,5,"GAME OVER!")
Output(2,9,P)
Output(3,7,"PUNKTE")
Output(4,4,"PRESS ENTER")
Output(6,5,"VISIT:")
Output(7,7,"WWW.")
Output(8,1,"HAUKELUEBBERS.DE")
Pause
prgmSNAKE
Else
Output(Y,X,"O")
End
P +1->P
If(N=Y and O=X):Then
P +100->P
randInt(2,7)->N
randInt(2,14)->O
End
Output(N,O,"*")

Output(1,7,P)
√(113.1337^5)
453.45/45.5^2
66/66^5*3
Goto A

 

Write a Comment

Comment

169 Comments

  1. Ich bekomme nachdem ich beim Startbildschirm Enter gedrückt habe, immer einen ERR:SYNTAX und werde mit Goto zu Zeile 73 gebracht.

    • Hmm… das ist aus der Ferne schwer zu loesen. Hast du den Doppelpunkt gesetzt? Sonst kannst du auch die Anweisungen auf mehrere Zeilen verteilen.
      Ueberpruef einfach nochmal alles auf “Rechtschreibfehler” :)

    • Mit 2nd + x². Ich wusste damals nicht, wie ich ein Wurzelzeichen in HTML machen kann. Habs jetzt aktualisiert.

      Der einzige Sinn dieser Rechnungen ist die Framerate des Spiels etwas zu senken, indem der Rechner kurz beschäftigt ist.

  2. Ich hab das alles abgetippt und verstanden, aber immer wenn ich mich bewegen will beendet sich das Spiel… Wieso bitte…?

    • Nur bei einem Tastendruck?

      Hast du vielleicht irgendwo ein “End” zuviel geschrieben? Das würde dann die Spielschleife abbrechen.

  3. Hallo,
    Also ich habe das pogramm Vollständig ab getip und auch alles gelesen aber bei mir komt immer ERR:DOMAIN und wenn ich auf GoTo gehe wird mir zeile 105 angezeigt

  4. Hallo ich habe bereits ein eigenes Spiel erfunden und habe dabei folgendes Problem: das ganze ding Funktioniert nur wuerde ich gernen eine bestenliste erstellen- mit Namen (bestenfalls dreistellig). Mein problem dabei ist das ich bis jetzt nur mit strings text speichern kann und entweder geht es nicht oder ich finde es nicht heraus: strings im programm ähnlich wie variablen (über prompt) einfragen und später wieder abrufen kann. ich würde gerne nicht über drei menüs gehen in denen ich die buchstaben auswähle oder die buchstaben über zahlen eingeben. danke im voraus :)

    • Puuh, du könntest evt. mit getKey den Namen rausfinden, aber das wäre relativ aufwendig.

      Ich kann das leider gerade nicht testen, da meine Taschenrechnerbatterien leer sind, aber das erinnert mich daran morgen mal wieder neue zu kaufen ;)

    • Doppelte Anführungsstriche mit ALPHA und +.
      Sternchen ist die Multiplizieren-Taste “x”.
      Bei Kommazahlen die englische Schreibweise (mit einem “.”), bei Funktionen mit mehreren Parametern das echte Komma “,”.

      :)

  5. hi,
    bei mir kommt immer SNAKE PRESS ENTER und wenn ich dann enter klick kommt eine fehlermeldung ERR:SYNTAX. wenn ich dann goto auswähle werde ich zu zeile 5 geführt.
    ich weiß nicht wo der fehler liegt. kann mir vlt. jemand helfen? ( hab nen ti-82 stats )

    • Hmm… das, was oben als “->” steht, ist KEIN Minus und ein größer als, sondern der Pfeil, den man schreibt, wenn man STO-> unten links beim TI-82 stats drückt.

      Könnte das der Fehler sein? Ansonsten sehe ich nichts, was in Zeile 5 schiefgelaufen sein könnte. Vielleicht in den Zeilen darüber irgendwo eine Klammer nicht geschlossen, oder ein Anführungszeichen zu wenig?

    • Ist in der Programmauflistung ein * vor dem Programmnamen?

      Dann musst du mit 2nd und + zum “MEMORY” gehen und dort 2: “Memory Managment/Delete” auswählen. Dann 7: “Program”. Dort müsstest du dein Programm mit einem Sternchen davor sehen: Auswählen, ENTER drücken und mit 2nd und MODE “quitten”.

      Jetzt das Programm nochmal ausführen… komisch, dass der Fehler kommt. Eigentlich muss man das Programm manuell zum Archive hinzufügen…

      • Also Sternchen ist weg. Jetzt startet es normal. Erste Pause klappt super. Dann nochmal enter sagt er wieder err:archived

        Wenn ich dann auf goto mache wirft er mich auf Zeile 27.

        • Noch eine Frage. Kann man so auch irgendwie Skripten das ich bei der pq formel alle Ergebnisse drunter kriege.
          Das alle Schritte untereinander aufgeführt werden und man sozusagen alles nur abzuschreiben braucht?

          • Klar. Das Erkennen von den p- und q-Werten aus der Ursprungsformel könnte kompliziert werden, aber ein Programm, dass zuerst p und q einliest (und vielleicht vorher die Umformung in die Formel beispielhaft ausgibt) und dann die Werte ausrechnen ist kein Problem.

        • Hmmm… vielleicht ist eine Variable irgendwie schreibgeschützt?
          Du kannst ja mal das Mem Management durchgucken, ob du da irgendetwas findest… sehr merkwürdig…

          • Merkwürdig. Snake.. aber das mit der pq Formel das nur die Ergebnisse kommen ist einfach. Nur die einzelnen Schritte find ich recht kompliziert..

          • Snake Fehler gefunden. Er mag mein A nicht. Hab das A überall zum W gemacht. Und n Grund ding von pq hab ich aber noch recht unübersehbar..

          • Nice. Vielleicht nutzt irgendein andere archived Program die Variable A und deshalb klappt es nicht?

            Wenn du ein cooles pq-Programm hast und Lust hast, einen Artikel darüber zu schreiben, dann kontaktiere mich einfach, ich würde mich freuen :)

  6. Hallo Zusammen
    Habe eine Frage, und zwar:
    Wieso bewegt sich nichts bei mir nichts, habe alles genau so gemacht wie du/Sie…
    Habe nicht ganz verstanden, welche Tasten man drücken muss um etwas zu bewegen…
    Kann mir da jemand weiterhelfen???

    Vielen Dank schon im voraus

    • Hi Lukas.
      Normalerweise steuert man mit den Pfeiltasten.
      Wenn das nicht funktioniert, dann versuch mal mit Disp an verschiedenen Stellen etwas auszugeben, damit du siehst, wo ca. das Programm hängt.

  7. Kann mir jemand sagen, wie ich das programmiere, dass z.B. bei Tic Tac Toe erst ein X und dann das O angezeigt wird?

    Danke im VOrraus

    • Hast du schon angefangen Tic Tac Toe zu programmieren? Der Code wäre hilfreich.

      Wie auch immer. Das grobe Konzept ist halt, dass du eine Variable, sagen wir A, hast, die am Anfang auf 1 steht. Dann wir ein X gesetzt und die Variable auf 0. Dann läuft der Code nochmal durch, diesmal gilt ja A=0, also wird ein O gesetzt und A wird wieder auf 1 gesetzt und so weiter und so fort…

      Hilft dir das weiter?

  8. Dieses Pluszeichen, dass da die ganze Zeit rum fliegt und einen “Game over” verursacht ist geplant oder?
    Wenn ja, was soll das darstellen?

    • Wenn da Done steht, dann heißt das ja, dass das Programm beendet ist. Eigentlich sollte das Programm aber in der letzten Zeile 111 via Goto A zu der Zeile 24 Lbl A springen. Stimmt da alles?

      Sonst hast du vermutlich irgendwo ein End zuviel geschrieben, so dass der Rechner nicht aus einer if-Verzweigung rausgeht, sondern das Programm beendet.

  9. Hi,
    bei mir steht immer Missing ) und wenn ich auf GoTo klicke, dann lande ich in der zweiten Zeile bei
    Output(3,5,”SNAKE”)
    Woran liegt das ?
    Übrigens: Bei mir hat der Rechner in die erste Zeile noch automatisch

    snake()

    hingeschrieben.
    MfG

    • Hat sich das Problem inzwischen gelöst?

      GetKey gibt nur die Taste zurück, die gerade im Moment gedrückt wird, sie wartet nicht darauf, dass eine Taste gedrückt wird. Wird keine gedrückt gibt sie Null zurück. Deshalb könnte es helfen, wenn du den ganzen Code in eine Schleife schreibst, die z.B. den Code so lange wiederholt, bis eine Taste gedrückt wurde (bzw. A nicht mehr 0 ist).

  10. Hey,

    Also ich habe 3 Auswahlmöglichkeiten (1,2 und 3). Ich möchte jetzt, dass der Spieler eins von den dreien frückt (z.B. 1).
    Jetzt habe ich folendes geschrieben:

    getKey->A
    If (A=28)
    Then
    Disp “TEXT”

    28 ist doch dann die Taste 1, oder?
    Aber irgendwie passt das nicht, kannst du mir helfen?

    LG Marius

    • Mal ein Tipp, hoffe er ist hilfreich:
      Schreibe einfach ein Programm, welches immer die Zahl der Taste ausgibt, die du drückst, das hab ich auch gemacht!
      Ungefähr so:

      : ClrHome
      : GetKey->A
      : Output (5,4,A)
      : Pause
      

      Ich kann keine Garantie geben, dass es klappt
      ,könnte ja auch ein Fehler in deinem Programm sein, niemand ist perfekt…

  11. Hey,
    Sorry, aber ich versteh da was nicht^^
    Wir gebau belege ich jetzt eine Taste?
    Also z.B. dass der Spieler die Taste 1 drückt und dann die einprogrammierte
    Aktion kommt?

    Danke schonmal im Voraus :-)
    LG Marius

  12. Hallo Dubbel,
    ersteinmal grossen Danke an dich fuer das tolle Totorial! Echt gut!
    Ich hab mir das Snake spiel auch abgetippt. Ist es richtig, dass die nullen nicht verschwinden? Und das man nicht nach oben gehen kann? Und das da Kreuze ins Bild wandern und dich versuchen zu toeten?
    Viele Gruess,
    Jonas

    • Hallo Jonas,
      die Null sollte eigentlich immer verschwinden, nachdem man die Position geändert hat.
      Dazu haben wir ja in den Zeilen 30, 37, 44 und 51 das Feld, wo die Null bisher war, mit einem Leerzeichen überschrieben.
      Die Kreuze sind richtig. Glaube ich jedenfalls, ich muss das Programm auch nochmal auf meinen Taschenrechner schreiben ^^

    • Hmm… ja, du könntest Disp verwenden. Ich würde einfach nochmal alle Zuweisungen und Ifs und Ends kontrollieren, mehr kann ich dir von hier aus leider nich sagen ^^

  13. Kann es sein dass bei zeile 73 und 75 hinter dem D ein Leerzeichen muss? –
    oh ne doch nicht seh ich schon :D aber ich hab die zeilen komplett durchgeguckt dreimal oder so und da ist einfach kein fehler :o

    • Du kannst ja mal den Output-Befehl löschen, und stattdessen die Variablen D und E ausgeben lasst (wie das geht steht ja im Tutorial), vielleicht findest du so den Fehler :)

  14. Ja es ist der ERR:DOMAIN. Ganz oben habe ich ja in den Zeilen 8 und 9 E und D zugewiesen oder? Weil wenn das da ist habe ich das Richtig gemacht also verstehe ich da das Problem nicht.

    • In Zeile 70 wird ja quasi der gleiche Befehl durchgeführt, um das alte Plus zu löschen. Da funktionierts ja noch, der Fehler müsste also zwischen Zeile 70 und 84 liegen.

  15. keine ahnung wiegesagt da kommt zu erst immer error dann drücke ich auf Goto und dann landet der Cursor in Zeile 84 auf dem letzten Klammer also der klammer die das da alles zuklammert :D Wie gesagt ich hab keine ahnung :D

    Also das programm startet schon und dann steht da auch : Snake Press enter. und dann kommt das Spielfeld und dann steht da aufeinmal error :D

  16. Bei mir wird bei Zeile 84 am ende immer eine Fehlermeldung angezeigt aber ich hab das genauso stehen wie es da steht :o Ich bräuchte da wohl mal hilfe weil ich echt keine ahnung davon habe :D
    Ich hab den : TI-82 STATS. n kumpel hat den auch und bei dem klappts… :/ :D

    • Ich schätze du hast in dem Bereich zwischen Zeile 71 und 81 irgendwo ein Then oder End vergessen.
      BTW: In Zeile 74 stand ein Größer als, da gehört aber ein kleiner als hin (glaube ich jedenfalls, so macht das keinen Sinn, kanns aber nicht testen).
      Ist also geändert

  17. Sollte auch mit dem TI-Connect gehen. Du brauchst allerdings das USB_Verbindungskabel, je nach Modell ist das schon dabei.
    Hab ich aber noch nicht ausprobiert, wenn dus schaffst, dann wäre es toll, wenn du es kurz beschreiben könntest :)

    • Habe ich ja schon gemacht. Leider kann mann keine Quellcodey öfnen oder per Textdokument hinzufügen (in Programme). Ich habe kp wie das gehen soll :-)