Brauche ein wenig Hilfe

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Fredbuffer

Betreff: Brauche ein wenig Hilfe

BeitragDi, Sep 04, 2012 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute

ich bin ganz neu mit dem programmieren beschäftigt, erst seit ein paar Tagen ,also verzeiht mir, dass ich noch so gut wie überhaupt nichts kann Very Happy

also ich wollte ein Spielchen machen, nur ein kleines, feines, ohne grafik.. .hat auch alles ganz gut funktioniert,
irgendwann hab ich über das gesammte programm eine repeat until schleife gelegt, sodass sich ein riesen abschnitt immer wiederholt. das problem war nur: es waren auch andere repeat until schleifen in der großen drin. Doch am anfang hat es funktioniert, auch im programm selber, aber als ich dann außerhalb der großen schleife zwei prints hinzugefügt habe und das starten wollte, sagt der plötzlich immer, dass er zu dem until ganz unten im code, kein repeat findet...kp wieso...
also ich poste mall den code, soltet ihr ne lösung haben, bitte sagts mir, und es wäre auch nett, wenn ihr, sofern ihr das zum laufen kriegt (wovon ich ausgehen Very Happy) mir sagen könnt, was ich falsch mache...denn das programm selber mach nicht immer alles so, wie ich das haben will...

Code: [AUSKLAPPEN]
Graphics 1020, 740
SeedRnd MilliSecs()

Write "Name für Spieler 1 eingeben: "
name1$ = Input ( "-> " )
Cls
Write "Name für Spieler 2 eingeben: "
name2$ = Input ( "-> " )
Cls
Locate 1,1
Write "Welche Rasse will " + name1 + " spielen?"
Print "Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"
Repeat
   rasse1$ = Input ( "-> " )

   If rasse1 = "Ork"
      Cls
   ElseIf rasse1 = "Mensch"
      Cls
   ElseIf rasse1 = "Elf"
      Cls
   Else
      Print "Ungültige Eingabe, nochmal!"
   EndIf
Until rasse1 = "Ork" Or rasse1 = "Mensch" Or rasse1 = "Elf"   

Cls

Locate 1,1
Write "Welche Rasse will " + name2 + " spielen?"
Print "Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"
Repeat
   rasse2$ = Input ( "-> " )
   If rasse2 = "Ork"
      Cls
   ElseIf rasse2 = "Mensch"
      Cls
   ElseIf rasse2 = "Elf"
      Cls
   Else
      Print "Ungültige Eingabe, nochmal!"
   EndIf   
Until rasse2 = "Ork" Or rasse2 = "Mensch" Or rasse2 = "Elf"
Cls


If rasse1 = "Ork"
   staerke1% = 3
   verteidigung1% = 2
   geschicklichkeit1% = 1
   geschwindigkeit1% = 2
ElseIf rasse1 = "Mensch"
   staerke1% = 2
   verteidigung1% = 2
   geschicklichkeit1% = 3
   geschwindigkeit1% = 1
ElseIf rasse1 = "Elf"
   staerke1% = 1
   verteidigung1% = 2
   geschicklichkeit1% = 2
   geschwindigkeit1% = 3
EndIf


If rasse2 = "Ork"
   staerke2% = 3
   verteidigung2% = 2
   geschicklichkeit2% = 1
   geschwindigkeit2% = 2
ElseIf rasse2 = "Mensch"
   staerke2% = 2
   verteidigung2% = 2
   geschicklichkeit2% = 3
   geschwindigkeit2% = 1
ElseIf rasse2 = "Elf"
   staerke2% = 1
   verteidigung2% = 2
   geschicklichkeit2% = 2
   geschwindigkeit2% = 3
EndIf

Locate 1,1

Repeat

   Print name1 + ", du hast einen Skillpunkt."
   Print "Um deine Fähigkeiten zu verbessern, Gib einer der Zahlen ein (nur die Zahlen): "
   Print "-1- für Stärke,"
   Print "-2- für Verteidigung,"
   Print "-3- für Geschicklichkeit und "
   Print
   Print "Dein " + rasse1 + " besitzt folgende Werte: "
   Print staerke1 + " Stärke"
   Print verteidigung1 + " Verteidgung"
   Print geschicklichkeit1 + " Geschicklichkeit"


   Repeat
      skill1a%  = Int ( Input ( "-> " ) )
      If skill1a = "1"
         staerke1 = staerke1 + 1
      ElseIf skill1a = "2"
         verteidigung1 = verteidigung1 + 1
      ElseIf skill1a = "3"
         geschicklichkeit1 = geschicklichkeit1 + 1
      Else
         Print "Falsche Zahl, probiers nochmal!"
      EndIf
   Until skill1a = "1" Or skill1a = "2" Or skill1a = "3" Or skill1a = "4"    

   Cls
   Locate 1,1
   
   Print name2 + ", du hast einen Skillpunkt."
   Print "Um deine Fähigkeiten zu verbessern, Gib einer der Zahlen ein (nur die Zahlen): "
   Print "-1- für Stärke,"
   Print "-2- für Verteidigung,"
   Print "-3- für Geschicklichkeit und "
   Print
   Print "Dein " + rasse2 + " besitzt folgende Werte: "
   Print staerke2 + " Stärke"
   Print verteidigung2 + " Verteidgung"
   Print geschicklichkeit2 + " Geschicklichkeit"
   
   
   Repeat
      skill2a%  = Int ( Input ( "-> " ) )
      If skill2a = "1"
         staerke2 = staerke2 + 1
      ElseIf skill2a = "2"
         verteidigung2 = verteidigung2 + 1
      ElseIf skill2a = "3"
         geschicklichkeit2 = geschicklichkeit2 + 1
      Else
         Print "Falsche zahl, probiers nochmal!"
      EndIf
   Until skill2a = "1" Or skill2a = "2" Or skill2a = "3" Or skill2a = "4"

   
   Cls
   
   Locate 1,1
 
                  Print "Es wird gewürfelt, wer als erstes angreift."
   
               aw1 = Rand ( 1 , 6 )
               aw2 = Rand ( 1 , 6 )
                  Print name1 + " hat eine " + aw1 + " gewürfelt."
                  Print name2 + " hat eine " + aw2 + " gewürfelt."

      If aw1 > aw2
         Print name1 + " darf anfangen!"
         name1da% = 1
         name2da% = 0
      ElseIf aw1 < aw2
         Print name2 + " darf anfangen!"
         name2da% = 1
         name1da% = 0
      ElseIf aw1 = aw2
         Print "Untenschieden, es wird noch mal gewürfelt!"
      EndIf
      Until aw1 <> aw2
   
   WaitKey()
   Cls
   Locate 1,1
      
   If name1da% = 1
      Print name1 + ", du greifst mit deinem " + rasse1 + " an. Er hat eine Stärke von " + staerke1 + "!"
      Print name2 + " hat eine Verteidigung von " + verteidigung2 + "!"
      staerke1 = staerke1 - verteidigung2
      Print name1 + ", deine effektive Angriffskraft beträgt " + staerke1 + "."
   ElseIf name2da% = 1
      Print name2 + ", du greifst mit deinem " + rasse2 + " an. Er hat eine Stärke von " + staerke2 + "!"
      Print name1 + " hat eine Verteidigung von " + verteidigung1 + "!"
      staerke2 = staerke2 - verteidigung1
      Print name2 + ", deine effektive Angriffskraft beträgt " + staerke2 + "."
   EndIf
   
   If name1da = 1 And staerke1 < 0
      Print name1 + ", du würdest diesen Angriff verlieren."
   ElseIf name1da = 1 And staerke1 >= 1
      Print name1 + ", du hast den Angriff gewonnen."
      punkte1% = punkte1 +1
   ElseIf name1da = 1 And stearke1 = 0
      Print "Unentschieden. Ab in die nächste Runde!"
   ElseIf name2da = 1 And staerke2 < 0
      Print name2 + ", du würdest diesen Angriff verlieren."
   ElseIf name2da = 1 And staerke2 >= 1
      Print name2 + ", du hast den Angriff gewonnen."
      punkte2% = punkte2 +1
   ElseIf name2da = 1 And stearke2 = 0
      Print "Unentschieden. Ab in die nächste Runde!"
   
   EndIf
   
   If name1da = 1 And staerke < 0
      staerke1 = staerke1 + geschicklichkeit1
   ElseIf name2da = 1 And staerke2 < 0
      staerke2 = staerke2 + geschicklichkeit2

   If name1da = 1 And staerke1 < 0
      Print name1 + ", deine effektive Angriffskraft + Geschicklichkeit ergibt: " + staerke1 + "! Du verlierst also den Angriff!"
      punkte2% = punkte2 + 1
   ElseIf name2da = 1 And staerke2 < 0
      Print name2 + ", deine effektive Angriffskraft + Geschicklichkeit ergibt: " + staerke2 + "! Du verlierst also den Angriff!"
      punkte1% = punkte1 + 1
   EndIf
   
   If name1da = 1 And staerke1 > 0
      Print "Deine effektive Angriffskraft beträgt " + staerke1 + "! Du hast also gewonnen!"
      punkte1% = punkte1 + 1
   ElseIf name2da = 1 And staerke2 > 0
      Print "Deine effektvie Angriffskraft beträgt " + staerke2 + "! Du hast also gewonnen!"
      punkte2% = punkte2 +1
   
   If name1da = 1 And staerke1 = 0
      staerke1 = staerke1 + verteidigung2
   ElseIf name1da = 1 And staerke1 <> 0
      staerke1 = staerke1 + verteidigung2 - geschicklichkeit1
   ElseIf name2da = 1 And staerke2 = 0
      staerke2 = staerke2 + verteidigung1
   ElseIf name2da = 1 And staerke2 <> 0
      staerke2 = staerke2 + verteidigung1 - geschicklichkeit2
   EndIf
   
   WaitKey()
   Cls
   Locate 1,1
   
   Print "Der Punktestand:"
   Print name1 + " hat: " + punkte1 + " Punkte"
   Print name2 + " hat: " + punkte2 + " Punkte"
   WaitKey()
   Cls
   Locate 1,1
Until punkte1 = 10 Or punkte2 = 10

If punkte1 = 10
   Print "Glückwunsch! " + name1 + " hat gewonnen!"
ElseIf punkte2 = 10
   Print "Glückwunsch! " + name2 + " hat gewonnen!"
EndIf

WaitKey()

End



ich hab halt tausend if-then strukturen, weil ich mir dachte so gehts auch, und mit dem ersten spieler klappt eigentlich auch fast immer alles, nur mit dem zweiten spieler manchmal nicht...


ich hoffe der post gehört hierhin, wusste nicht, wo sonst Very Happy

mfg

Fredbuffer

ozzi789

BeitragDi, Sep 04, 2012 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sehe da zwei fehlende EndIf's... Confused

Code: [AUSKLAPPEN]
   If name1da = 1 And staerke < 0
      staerke1 = staerke1 + geschicklichkeit1
   ElseIf name2da = 1 And staerke2 < 0
      staerke2 = staerke2 + geschicklichkeit2



Code: [AUSKLAPPEN]
If name1da = 1 And staerke1 > 0
      Print "Deine effektive Angriffskraft beträgt " + staerke1 + "! Du hast also gewonnen!"
      punkte1% = punkte1 + 1
   ElseIf name2da = 1 And staerke2 > 0
      Print "Deine effektvie Angriffskraft beträgt " + staerke2 + "! Du hast also gewonnen!"
      punkte2% = punkte2 +1

ENDIF !



und ein fehlendes Repeat
Code: [AUSKLAPPEN]
                  Print "Es wird gewürfelt, wer als erstes angreift."
   
               aw1 = Rand ( 1 , 6 )
               aw2 = Rand ( 1 , 6 )
                  Print name1 + " hat eine " + aw1 + " gewürfelt."
                  Print name2 + " hat eine " + aw2 + " gewürfelt."

      If aw1 > aw2
         Print name1 + " darf anfangen!"
         name1da% = 1
         name2da% = 0
      ElseIf aw1 < aw2
         Print name2 + " darf anfangen!"
         name2da% = 1
         name1da% = 0
      ElseIf aw1 = aw2
         Print "Untenschieden, es wird noch mal gewürfelt!"
      EndIf
      Until aw1 <> aw2




Funktionierender Code (afaik)
Code: [AUSKLAPPEN]
Graphics 1020, 740
SeedRnd MilliSecs()

Write "Name für Spieler 1 eingeben: "
name1$ = Input ( "-> " )
Cls
Write "Name für Spieler 2 eingeben: "
name2$ = Input ( "-> " )
Cls
Locate 1,1
Write "Welche Rasse will " + name1 + " spielen?"
Print "Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"


Repeat
   rasse1$ = Input ( "-> " )

   If rasse1 = "Ork"
      Cls
   ElseIf rasse1 = "Mensch"
      Cls
   ElseIf rasse1 = "Elf"
      Cls
   Else
      Print "Ungültige Eingabe, nochmal!"
   EndIf
Until rasse1 = "Ork" Or rasse1 = "Mensch" Or rasse1 = "Elf"   

Cls

Locate 1,1
Write "Welche Rasse will " + name2 + " spielen?"
Print "Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"
Repeat
   rasse2$ = Input ( "-> " )
   If rasse2 = "Ork"
      Cls
   ElseIf rasse2 = "Mensch"
      Cls
   ElseIf rasse2 = "Elf"
      Cls
   Else
      Print "Ungültige Eingabe, nochmal!"
   EndIf   
Until rasse2 = "Ork" Or rasse2 = "Mensch" Or rasse2 = "Elf"
Cls


If rasse1 = "Ork"
   staerke1% = 3
   verteidigung1% = 2
   geschicklichkeit1% = 1
   geschwindigkeit1% = 2
ElseIf rasse1 = "Mensch"
   staerke1% = 2
   verteidigung1% = 2
   geschicklichkeit1% = 3
   geschwindigkeit1% = 1
ElseIf rasse1 = "Elf"
   staerke1% = 1
   verteidigung1% = 2
   geschicklichkeit1% = 2
   geschwindigkeit1% = 3
EndIf


If rasse2 = "Ork"
   staerke2% = 3
   verteidigung2% = 2
   geschicklichkeit2% = 1
   geschwindigkeit2% = 2
ElseIf rasse2 = "Mensch"
   staerke2% = 2
   verteidigung2% = 2
   geschicklichkeit2% = 3
   geschwindigkeit2% = 1
ElseIf rasse2 = "Elf"
   staerke2% = 1
   verteidigung2% = 2
   geschicklichkeit2% = 2
   geschwindigkeit2% = 3
EndIf

Locate 1,1

Repeat

   Print name1 + ", du hast einen Skillpunkt."
   Print "Um deine Fähigkeiten zu verbessern, Gib einer der Zahlen ein (nur die Zahlen): "
   Print "-1- für Stärke,"
   Print "-2- für Verteidigung,"
   Print "-3- für Geschicklichkeit und "
   Print
   Print "Dein " + rasse1 + " besitzt folgende Werte: "
   Print staerke1 + " Stärke"
   Print verteidigung1 + " Verteidgung"
   Print geschicklichkeit1 + " Geschicklichkeit"


   Repeat
      skill1a%  = Int ( Input ( "-> " ) )
      If skill1a = "1"
         staerke1 = staerke1 + 1
      ElseIf skill1a = "2"
         verteidigung1 = verteidigung1 + 1
      ElseIf skill1a = "3"
         geschicklichkeit1 = geschicklichkeit1 + 1
      Else
         Print "Falsche Zahl, probiers nochmal!"
      EndIf
   Until skill1a = "1" Or skill1a = "2" Or skill1a = "3" Or skill1a = "4"   

   Cls
   Locate 1,1
   
   Print name2 + ", du hast einen Skillpunkt."
   Print "Um deine Fähigkeiten zu verbessern, Gib einer der Zahlen ein (nur die Zahlen): "
   Print "-1- für Stärke,"
   Print "-2- für Verteidigung,"
   Print "-3- für Geschicklichkeit und "
   Print
   Print "Dein " + rasse2 + " besitzt folgende Werte: "
   Print staerke2 + " Stärke"
   Print verteidigung2 + " Verteidgung"
   Print geschicklichkeit2 + " Geschicklichkeit"
   
   
   Repeat
      skill2a%  = Int ( Input ( "-> " ) )
      If skill2a = "1"
         staerke2 = staerke2 + 1
      ElseIf skill2a = "2"
         verteidigung2 = verteidigung2 + 1
      ElseIf skill2a = "3"
         geschicklichkeit2 = geschicklichkeit2 + 1
      Else
         Print "Falsche zahl, probiers nochmal!"
      EndIf
   Until skill2a = "1" Or skill2a = "2" Or skill2a = "3" Or skill2a = "4"

   
   Cls
   
   Locate 1,1
 
   Repeat
      Print "Es wird gewürfelt, wer als erstes angreift."
      
         aw1 = Rand ( 1 , 6 )
         aw2 = Rand ( 1 , 6 )
         Print name1 + " hat eine " + aw1 + " gewürfelt."
         Print name2 + " hat eine " + aw2 + " gewürfelt."
   
         If aw1 > aw2
            Print name1 + " darf anfangen!"
            name1da% = 1
            name2da% = 0
         ElseIf aw1 < aw2
            Print name2 + " darf anfangen!"
            name2da% = 1
            name1da% = 0
         ElseIf aw1 = aw2
            Print "Untenschieden, es wird noch mal gewürfelt!"
         EndIf
      Until aw1 <> aw2
   
   WaitKey()
   Cls
   Locate 1,1
     
   If name1da% = 1
      Print name1 + ", du greifst mit deinem " + rasse1 + " an. Er hat eine Stärke von " + staerke1 + "!"
      Print name2 + " hat eine Verteidigung von " + verteidigung2 + "!"
      staerke1 = staerke1 - verteidigung2
      Print name1 + ", deine effektive Angriffskraft beträgt " + staerke1 + "."
   ElseIf name2da% = 1
      Print name2 + ", du greifst mit deinem " + rasse2 + " an. Er hat eine Stärke von " + staerke2 + "!"
      Print name1 + " hat eine Verteidigung von " + verteidigung1 + "!"
      staerke2 = staerke2 - verteidigung1
      Print name2 + ", deine effektive Angriffskraft beträgt " + staerke2 + "."
   EndIf
   
   If name1da = 1 And staerke1 < 0
      Print name1 + ", du würdest diesen Angriff verlieren."
   ElseIf name1da = 1 And staerke1 >= 1
      Print name1 + ", du hast den Angriff gewonnen."
      punkte1% = punkte1 +1
   ElseIf name1da = 1 And stearke1 = 0
      Print "Unentschieden. Ab in die nächste Runde!"
   ElseIf name2da = 1 And staerke2 < 0
      Print name2 + ", du würdest diesen Angriff verlieren."
   ElseIf name2da = 1 And staerke2 >= 1
      Print name2 + ", du hast den Angriff gewonnen."
      punkte2% = punkte2 +1
   ElseIf name2da = 1 And stearke2 = 0
      Print "Unentschieden. Ab in die nächste Runde!"
   EndIf


   
   If name1da = 1 And staerke < 0
      staerke1 = staerke1 + geschicklichkeit1
   ElseIf name2da = 1 And staerke2 < 0
      staerke2 = staerke2 + geschicklichkeit2
   EndIf

   If name1da = 1 And staerke1 < 0
      Print name1 + ", deine effektive Angriffskraft + Geschicklichkeit ergibt: " + staerke1 + "! Du verlierst also den Angriff!"
      punkte2% = punkte2 + 1
   ElseIf name2da = 1 And staerke2 < 0
      Print name2 + ", deine effektive Angriffskraft + Geschicklichkeit ergibt: " + staerke2 + "! Du verlierst also den Angriff!"
      punkte1% = punkte1 + 1
   EndIf
   
   If name1da = 1 And staerke1 > 0
      Print "Deine effektive Angriffskraft beträgt " + staerke1 + "! Du hast also gewonnen!"
      punkte1% = punkte1 + 1
   ElseIf name2da = 1 And staerke2 > 0
      Print "Deine effektvie Angriffskraft beträgt " + staerke2 + "! Du hast also gewonnen!"
      punkte2% = punkte2 +1
   EndIf
   
   If name1da = 1 And staerke1 = 0
      staerke1 = staerke1 + verteidigung2
   ElseIf name1da = 1 And staerke1 <> 0
      staerke1 = staerke1 + verteidigung2 - geschicklichkeit1
   ElseIf name2da = 1 And staerke2 = 0
      staerke2 = staerke2 + verteidigung1
   ElseIf name2da = 1 And staerke2 <> 0
      staerke2 = staerke2 + verteidigung1 - geschicklichkeit2
   EndIf
   
   WaitKey()
   Cls
   Locate 1,1
   
   Print "Der Punktestand:"
   Print name1 + " hat: " + punkte1 + " Punkte"
   Print name2 + " hat: " + punkte2 + " Punkte"
   WaitKey()
   Cls
   Locate 1,1


Until punkte1 = 10 Or punkte2 = 10



If punkte1 = 10
   Print "Glückwunsch! " + name1 + " hat gewonnen!"
ElseIf punkte2 = 10
   Print "Glückwunsch! " + name2 + " hat gewonnen!"
EndIf

WaitKey()

End



Am besten wäre nun, du würdest dein Spiel ganz neuprogrammieren.
Mit dem Einsatz von [Function] , [Select] , Kommentaren.
Dies wird dir beim Debuggen sehr helfen... eigentlich solltest das ja auch du machen... ist ne sehr lehrreiche Sache für Beginner Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

Fredbuffer

BeitragDi, Sep 04, 2012 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, vielen dank für die schnelle antwort Very Happy

ja dann mach ich es nochmal neu, und sobald ich es fertig hab, poste ich es hier einfach nochmal, oder wenn ich probleme hab halt Wink

mfg

Fredbuffer

Xeres

Moderator

BeitragDi, Sep 04, 2012 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~

Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.

...und auch du: Rechtschreibung und Zeichensetzung bitte nicht vernachlässigen, danke.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Fredbuffer

BeitragDo, Sep 06, 2012 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, ich habs mal versucht, aber ich hab i-wie keinen plan, was ich jetzt mit Funktionen machen soll...?
als ich weiß, wie man Funktionen verwendet, aber nicht, wie ich das halt jetzt bei meinem..."spiel" einfügen soll....

Fredbuffer
 

feider

ehemals "Decelion"

BeitragDo, Sep 06, 2012 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich ganz einfach - lagere einzelne Programmteile in Funktionen aus, die du dann von der Hauptschleife aus aufrufst. Du kannst sogar die Hauptschleife in eine Funktion packen - Das könnte nützlich werden, wenn das Programm aus mehreren Teilen besteht und somit mehrere Hauptschleifen hat.

lg
Dece

Sir Gauss der III

BeitragDo, Sep 06, 2012 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Functionen sind Programmteile die

-> 1) Häufig gebraucht werden
-> 2) eine zusammenhängende Einheit bilden

um es bei 2 oder mehr Spieler gut zu verwenden, sieh dir mal die dim-Variablen an.


als Beispiel für 1 (in deinem Programm):
Code: [AUSKLAPPEN]
Cls
Locate 1,1
Write "Welche Rasse will " + name1 + " spielen?"
Print "Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"


Repeat
   rasse1$ = Input ( "-> " )

   If rasse1 = "Ork"
      Cls
   ElseIf rasse1 = "Mensch"
      Cls
   ElseIf rasse1 = "Elf"
      Cls
   Else
      Print "Ungültige Eingabe, nochmal!"
   EndIf
Until rasse1 = "Ork" Or rasse1 = "Mensch" Or rasse1 = "Elf"   

Cls

Locate 1,1
Write "Welche Rasse will " + name2 + " spielen?"
Print "Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"
Repeat
   rasse2$ = Input ( "-> " )
   If rasse2 = "Ork"
      Cls
   ElseIf rasse2 = "Mensch"
      Cls
   ElseIf rasse2 = "Elf"
      Cls
   Else
      Print "Ungültige Eingabe, nochmal!"
   EndIf   
Until rasse2 = "Ork" Or rasse2 = "Mensch" Or rasse2 = "Elf"


kann so gekürzt werden:
Code: [AUSKLAPPEN]
;NEU "DIM-Befehl" ->
;Dim packt mehrere Variable in eine Bezeichnung. statt
;spieler1, spieler2
;nun
;spieler(1), Spieler(2)
;Vorteil bei dim ist, dass mit einer anderen Variable die Spielervariable gewechselt werden kann:
;Spieler(nummer)
Dim spieler(2),rasse(2)

;.... Starteinstellungen

;Hauptprogramm

;....

;Einsatz der Function:
rasse(1)=rasse_geben(1)
rasse(2)=rasse_geben(2)
;oder, besser noch:
;n=0
;Repeat
;   n=n+1
;   rasse(n)=rasse_geben(n)
;Until n=2 Or KeyHit(1)


;....

;Hauptprogrammende


;Einsatz der Functionen

;....

;Bezeichnung der Function (Ihr Name) und welche werte der Function übergeben werden. diese hier
;braucht die nummer des Spielers. es können auch meherere Werte übergeben werden.
Function rasse_geben(spieler)
   
   Cls
   
   Locate 1,1
   Write "Welche Rasse will " + name(spieler) + " spielen?"
;hier wäre besser:
;write 1,1,"Welche Rasse will " + name(spieler) + " spielen?"
;write 1,10,"Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"
;"Write x,y" positioniert den Text schon dort wo du ihn haben willst. Input kannst du dann mit
;locate woanders setzen. Z.B. größerer Zeilenabstand.
   Print "Es stehen -Ork- , -Mensch- und -Elf- zur Verfügung!"
      Repeat
      les$ = Input ( "-> " )
;Besser: Auswahl über Nummern, so muss weniger auf Rechtschreibubg geachtet werden
      If les = "Ork" Then
         Cls
         Return les
;"Return" beendet die Function und gibt den dahinter stehenden wert zurück. es ist dann also nichts
;anderes wie:
;rasse(1)=les
      ElseIf les = "Mensch" Then
         Cls
         Return les
      ElseIf les = "Elf" Then
         Cls
         Return les
      Else
         Print "Ungültige Eingabe, nochmal!"
      EndIf
   Until KeyHit(1)
;WICHTIG !!! jede schleife sollte mit einem Notschalter beendbar sein. Keyhit(1) wartet auf
;ESC (bzw. liest aus, ob ESC gedrückt wurde). So kann man ein Programm beenden, auch wenn es eine
;unendliche Schleife hat.


;damit hört diese Function auf
End Function

Das schaut jetzt nach mehr aus, kürzt aber den Code duetlich wenn du meine Kommentare rausnimmst.

Das selbe Prinzip kannst du mit Programmteilen machen, die du zwar nur einmal nutzt, aber die doch als ein Plock zusammen gehören. so kannst du dich dann schneller im Programm zurecht finden.

Z.B. kann der Teil des Codes der den kampf berechnet in eine Function geschrieben werden. im Hauptcode steht dann z.B. nur noch:
Kampf()

Wenn du dann den kampf ändern möchtes must du nur den Code in dieser Function anschauen.

TIPP: Achte darauf, dass wenn du Variable sowohl in der Function als auch im Hauptprogramm nutzen willst, müssen diese Global sein. d.H. am Anfang deines Programms als Globale definiert werden:
Global Spieleranzahl

TIPP: nutze die Komentarfunktion. kleine Bemerkungen und Gedächtnisstützen sind sehr hilfreich wenn du später mal ein Programm anschaust. So erkennst du schneller was wo gemacht wird. z.B. so:

Code: [AUSKLAPPEN]
;*******************
;Variable
...
...

;*******************
;Spieler eingabe
...
...

;*******************
;hier wird der Kampf berechnet
  ....
;hier wird die stärke um die Geschicklichkeit erhöht
   If name1da = 1 And staerke < 0
      staerke1 = staerke1 + geschicklichkeit1
   ElseIf name2da = 1 And staerke2 < 0
      staerke2 = staerke2 + geschicklichkeit2
   EndIf



TIPP: definiere deine Variable immer gleich zu beginn deines Programms. so weißt du immer, welche Variabeln gerade im Programm rumschwirren, für was sie sind, und wie sie geschreiben werden.
gewöhn dir gleich einen Aufbau deines Programms an, den du beibehälst. es gibt da mehrere Ansätze, so im Groben:
Code: [AUSKLAPPEN]
;Süstemeinstellung
Graphics 640, 480, 16, 2 ;führt das Programm im Fenster aus (4. Wert), Hilfreich während des Testzeitraum
SeedRnd MilliSecs()   ;schaltet den Zufall ein

;Variable
Global Spieleranzahl   ;überall verwendbar
Local Tag            ;nur im Hauptprogramm verwendbar
Dim spieler(3)         ;Überall verwendbar= 3 Variable Spieler(1), Spieler(2), Spieler(3)

;Vorausgehende Einstellungen


;Hauptschleife
Repeat

   ;Spiel

Until KeyHit(1)

;Functionen

Function test()
   ;....
End Function

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group