Unterschiedliche Variablen ansprechen mit einer zwischenvariable

Startseite Foren Deutsches LiveCode-Forum Unterschiedliche Variablen ansprechen mit einer zwischenvariable

Schlagwörter: 

Ansicht von 3 Antwort-Themen
  • Autor
    Beiträge
    • #514
      erna19
      Teilnehmer

      Hallo,

      ich versuche eine App zum Verwalten unserer mannschaftskasse zu erstellen!

      Vorab:
      Ich habe keinerlei Programmierkenntnisse, habe jetzt mit dem Buch „eigene Apps programmieren“ vor 2 Wochen angefangen und konnte mich absolut dafür begeistern.. allerdings scheitern meine bis jetzt erlernten Fähigkeiten.

      Leider schaffe ich es nicht die unterschiedlichen variablen der Strafen der Spieler in ein bestimmtes Feld zu legen..

      Sprich ich habe für jeden Spieler eine Variable für die Strafen angelegt. (strafenSpieler1, strafenSpieler2,…) also eine Variable die bei jedem Vergehen um eine bestimmte Summe (strafeStrafe1, StrafeStrafe2 ,..)erhöht werden soll. Also sind die einzelnen Strafen auch als Variablen angelegt. Alle Variablen sind global angelegt..

      Ich habe unterschiedliche Button mit jedem Spieler Namen. Wenn ich auf den Button klicke öffnet sich eine zweite Card.
      Auf dieser ist oben ein Feld, in denen der Name des Spielers dann erscheint.. dieses Feld soll dann in eine Variable c gelegt werden und in einem 2ten Feld sollen dann „strafen“&c angezeigt werden, also die bisher angesammelte Summe an Strafen die in der Variable des jeweiligen Spielers liegt..

      Dies klappt leider nicht.. Wahrscheinlich ist es nicht möglich so eine „verschachtelte“ variable aufzurufen? In dem Feld, in dem der Betrag stehen soll steht jetzt der Text
      strafenSpieler1

      Ist dies überhaupt der richtige Weg oder eventuell schon alles viel zu kompliziert gedacht?! Mit Sicherheit gibt es in livecode eine viel einfachere Lösung oder?

      Eventuell eine Datenbank?

      Über eine kurze Hilfestellung würde ich mich freuen!

    • #516
      hauke
      Verwalter

      Hallo,

      Du sprichst hier ein wichtiges Prinzip beim Programmieren an: Das Verwenden von Variablen, die mehrere Werte (zum Beispiel pro Spielernummer) enthalten.

      Die Art und Weise, wie Du es versucht hast, funktioniert leider nicht. Wenn Du „strafen“&c verknüpfst, hast Du eine Zeichenkette, die Du aber nicht einfach als Variable verwenden kannst (mit speziellen Tricks ginge das zwar, aber das ist absolut kein empfohlenes Vorgehen).

      Erfahrene Programmierer verwenden hier sogenannte Arrays – das sind Variablen, die mehrere Werte enthalten, die über den jeweiligen Index in eckigen Klammern angesprochen werden können. Zum Beispiel kannst Du eine Variable spielerstrafen anlegen, und dann in spielerstrafe[1] die Strafe für Spieler 1 abspeichen und in spielerstrafe[2] die Strafe für Spieler 2. Diese kannst Du dann auch mit Variablen ansprechen – spielerstrafe[x]. Als globale Variable müsstest Du dabei nur einmal die Variable spielerstrafe festlegen.

      In LiveCode geht es aber auch noch anders ganz bequem. Du könntest die Spielerstrafen auch in jeweils einer Zeile der Variable spielerstrafen ablegen.

      put strafe1 into line x of spielerstrafe.

      Hier hättest Du statt einem Index also eine Zeilennummer, in der der gewünschte Wert geschrieben wird. Der Vorteil ist, dass Du dann in der Variable spielerstrafe eine übersichtliche Liste hast, die Du auch einfach in eine kleine Datei abspeichern kannst, um sie beim Programmstart dann wieder einzulesen.

      Zu guter Letzt geht es natürlich auch mit einer Datenbank (sqLite). Das ist aber fast ein bisschen überdimensioniert, wenn es hier nur um eine Liste von Namen und Strafen geht. Du müsstest Dich dann erstmal in den Umgang mit Datenbanken einarbeiten. Der Vorteil wäre: Du bräuchtest die Namen und Strafen der Spieler dann nicht mehr manuell zu speichern, sondern sie wären für das Programm dann immer in der Datenbank verfügbar. So etwas empfehle ich aber für umfangreichere Projekte.

      Viel Erfolg mit Deinem Vorhaben!

      Hauke

    • #519
      erna19
      Teilnehmer

      Hallo Hauke,

      besten Dank schon mal für die schnelle Antwort!

      Ich denke ich werde es mit der [] Variante versuchen, da ich momentan Button mit den Namen der Spieler habe und ich diesen Namen des Button beim klicken in das Kästchen packen würde.

      Put spielerstrafen[label of the target] into Field1 of Card „strafeneintrag“

      Oder muss das Label erst wiederum in eine Variable x gelegt werden und dann

      Put spielerstrafen[x] into field1 of Card „strafeneintrag“

      Aber dann habe ich ja wieder eine Variable in einer Variable?!

      Leider habe ich nur Namen und keine Nummern und kann daher keine Zeilennummern ansprechen oder?

      Wie kann ich Variablen als Datei ansprechen? Ist das in dem Buch von dir erklärt?

    • #521
      hauke
      Verwalter

      Hallo,

      vielleicht solltest Du das Buch auch noch ein bisschen weiter durcharbeiten. So einige Techniken werden noch erklärt. Fang erstmal Schritt für Schritt an, mit den Arrays herumzuexperimentieren.

      Normalerweise würde man jedem Namen immer auch eine Nummer zuordnen. Dann hättest Du eine Variable spielernamen[] und eine spielerstrafen[]. Dann steht in spielername[6] vielleicht „Erwin Mayer“ und in spielerstrafen[6] die jeweilige Strafe dazu. Du kannst nicht nur Zahlen als Index verwenden, sondern auch beliebige Wörter – aber es empfiehlt sich schon sehr, mit IDs (also Spielernummern) zu arbeiten. Das ist viel besser handzuhaben als die Spielernamen selber als Index zu verwenden (mit IDs kennst Du auch die Anzahl der Spieler und kannst zum Beispiel alle Spieler mit einer Zählschleife durchgehen).

      Wenn Du eine Variable abspeichern willst, dann machst Du das mit

      put meineVariable into url(„file:“&dateipfad&dateiname)

      Und mit

      put url(„file:“&dateipfad&dateiname) into meineVariable

      würdest Du sie wieder aus der Datei einlesen.

      Experimentiere! Fang erstmal klein an und baue dann Schritt für Schritt auf!

      Hauke

Ansicht von 3 Antwort-Themen
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.