Schlag Combos

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

BB-Freak

Betreff: Schlag Combos

BeitragDo, Feb 17, 2011 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebes Forum,
Ich will, dass in meinem Spiel, sobald ich die Taste zum schlag drücke ein timer abläuft. Drückt man die Taste erneut inerhalb des timer kommt der nächste Schlag und es wird erneut ein timer gestartet ...
Wie könnte das gehen Question
Hat vlt. irgend jemand ne idee Idea Question
Freue mich sehr auf eure Antworten Exclamation
Euer BB-Freak Wink

BladeRunner

Moderator

BeitragDo, Feb 17, 2011 19:26
Antworten mit Zitat
Benutzer-Profile anzeigen
millisecs und ein paar Variablen um die Zeiten festzuhalten.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

BB-Freak

BeitragDo, Feb 17, 2011 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
*sry funzt doch Embarassed
Wink
liegt irgendwie daran, dass das Bild nicht gemalt wird(Schlag 2)
Hir der complette Code:
Code: [AUSKLAPPEN]
.Spieler_attackiert

If KeyHit(56) Then
  KeyHited=KeyHited+1
EndIf

If keyHited=1 Then
 If MilliSecs() < Schlag_Timer + 3000 Then
  ;
 Else
  keyHited=0
  Schlag_Timer=MilliSecs()
 EndIf
EndIf

Text 10,50,KeyHited

If KeyHited=3 Then
  KeyHited=0
EndIf

If KeyHited=2 Then
 If MilliSecs() < Schlag_Timer + 3000 Then
;
 Else
  keyHited=0
  Schlag_Timer=MilliSecs()
 EndIf

 If Spieler_Attacke2_links=1 Or Spieler_Attacke2=1 Then
  Schlag2=1
 EndIf
 Text 10,80,"Schlag2!"
 Spieler_Attacke2_links=0
 Spieler_Attacke2=0
 If Spielersteht=2 Then
  Spieler_Attacke_links=1
 Else
  Spieler_Attacke=1
 EndIf
EndIf

If KeyHited=1 Then
 Text 10,65,"Schlag1!"
 If Spielersteht=2 Then
  Spieler_Attacke2_links=1
 Else
  Spieler_Attacke2=1
 EndIf
EndIf

If Schlag2=1 Then
 If Spieler_Attacke2_links=0 Or Spieler_Attacke2=0 Then
  If Spielersteht=2 Then
   Spieler_Attacke_links=1
  Else
   Spieler_Attacke=1
  EndIf
  Schlag2=0
 EndIf
EndIf


If Spieler_Attacke2_links Then
 Spieler_Attacke2=False
 Spieler_Attacke1=False
 Spieler_Attacke1_links=False
 SpielerSpringt=False
 Spielergehtrechts=False
 Spielergehtlinks=False
 Spielersteht=False
 If  MilliSecs() > tmrSp_attacke2_links + 150 Then
      tmrSp_attacke2_links = MilliSecs()
      frmSp_attacke2_links = (frmSp_attacke2_links + 2) Mod 7
 EndIf
 If frmSp_attacke2_links=6 Then
  Spieler_Schlag=Spieler_Schlag+1
  Timer=True
  Spieler_Attacke2_links=False
  Spielersteht=2
 EndIf
   If ItemId_Waffen_Schwert=1 Then
    DrawImage Spieler_attackiert2_nurUebungsKatana_links,Sp_X#-45,Sp_Y#-3,frmSp_attacke2_links
    If Inventargeoffnet Then
     UebungsKatana_Ausgeruestet=True
    Else
     UebungsKatana_Ausgeruestet=False
    EndIf
   EndIf
   If ItemId_AusruestungBeine=0 Then
    DrawImage Spieler_attackiert2_nurBeine_links,Sp_X#-45,Sp_Y#-3,frmSp_attacke2_links
   EndIf
   If ItemId_AusruestungBeine=1 Then
    ;
   EndIf
   If ItemId_AusruestungGuertel=0 Then
    DrawImage Spieler_attackiert2_nurGuertel_links,Sp_X#-45,Sp_Y#-3,frmSp_attacke2_links
   EndIf
   If ItemId_AusruestungOberkoerper=0 Then
    DrawImage Spieler_attackiert2_nurOberkoerper_links,Sp_X#-45,Sp_Y#-3,frmSp_attacke2_links
   EndIf
   If ItemId_AusruestungKopf=0 Then
    DrawImage Spieler_attackiert2_nurKopf_links,Sp_X#-45,Sp_Y#-3,frmSp_attacke2_links
   EndIf
EndIf

If Spieler_Attacke2 Then
 Spieler_Attacke2_links=False
 Spieler_Attacke1=False
 Spieler_Attacke1_links=False
 SpielerSpringt=False
 Spielergehtrechts=False
 Spielergehtlinks=False
 Spielersteht=False
 If  MilliSecs() > tmrSp_attacke2 + 150 Then
      tmrSp_attacke2 = MilliSecs()
      frmSp_attacke2 = (frmSp_attacke2 + 2) Mod 7
 EndIf
 If frmSp_attacke2=6 Then
  Spieler_Schlag=Spieler_Schlag+1
  Timer=True
  Spieler_Attacke2=False
  Spielersteht=3
 EndIf
   If ItemId_Waffen_Schwert=1 Then
    DrawImage Spieler_attackiert2_nurUebungsKatana,Sp_X#,Sp_Y#-3,frmSp_attacke2
    If Inventargeoffnet Then
     UebungsKatana_Ausgeruestet=True
    Else
     UebungsKatana_Ausgeruestet=False
    EndIf
   EndIf
   If ItemId_AusruestungBeine=0 Then
    DrawImage Spieler_attackiert2_nurBeine,Sp_X#,Sp_Y#-3,frmSp_attacke2
   EndIf
   If ItemId_AusruestungBeine=1 Then
    ;
   EndIf
   If ItemId_AusruestungGuertel=0 Then
    DrawImage Spieler_attackiert2_nurGuertel,Sp_X#,Sp_Y#-3,frmSp_attacke2
   EndIf
   If ItemId_AusruestungOberkoerper=0 Then
    DrawImage Spieler_attackiert2_nurOberkoerper,Sp_X#,Sp_Y#-3,frmSp_attacke2
   EndIf
   If ItemId_AusruestungKopf=0 Then
    DrawImage Spieler_attackiert2_nurKopf,Sp_X#,Sp_Y#-3,frmSp_attacke2
   EndIf
EndIf

If Spieler_Attacke1 Then
 Spieler_Attacke1_links=False
 SpielerSpringt=False
 Spielergehtrechts=False
 Spielergehtlinks=False
 Spielersteht=False
 If  MilliSecs() > tmrSp_attacke + 200 Then
      tmrSp_attacke = MilliSecs()
      frmSp_attacke = (frmSp_attacke + 1) Mod 7
 EndIf
 If frmSp_attacke=6 Then
  Spieler_Attacke1=False
  Spielersteht=3
 EndIf
   If ItemId_Waffen_Schwert=1 Then
    DrawImage Spieler_attackiert1_nurUebungsKatana,Sp_X#,Sp_Y#,frmSp_attacke
    If Inventargeoffnet Then
     UebungsKatana_Ausgeruestet=True
    Else
     UebungsKatana_Ausgeruestet=False
    EndIf
   EndIf
   If ItemId_AusruestungBeine=0 Then
    DrawImage Spieler_attackiert1_nurBeine,Sp_X#,Sp_Y#,frmSp_attacke
   EndIf
   If ItemId_AusruestungBeine=1 Then
    ;
   EndIf
   If ItemId_AusruestungGuertel=0 Then
   If frmSp_attacke=3 Then
     DrawImage Spieler_nurGuertel,Sp_X#+2,Sp_Y#
   ElseIf frmSp_attacke=4 Then
     DrawImage Spieler_nurGuertel,Sp_X#+5,Sp_Y#+1
   Else
     DrawImage Spieler_nurGuertel,Sp_X#,Sp_Y#
   EndIf
   EndIf
   If ItemId_AusruestungOberkoerper=0 Then
    DrawImage Spieler_attackiert1_nurOberkoerper,Sp_X#,Sp_Y#,frmSp_attacke
   EndIf
   If ItemId_AusruestungKopf=0 Then
    If frmSp_attacke=2 Or frmSp_attacke=4 Then
     DrawImage Spieler_nurKopf,Sp_X#+2,Sp_Y#+1
    ElseIf frmSp_attacke=3 Then
     DrawImage Spieler_nurKopf,Sp_X#+5,Sp_Y#+1
    Else
     DrawImage Spieler_nurKopf,Sp_X#,Sp_Y#
    EndIf
   EndIf
EndIf

If Spieler_Attacke1_links Then
 Spieler_Attacke1=False
 SpielerSpringt=False
 Spielergehtrechts=False
 Spielergehtlinks=False
 Spielersteht=False
 If  MilliSecs() > tmrSp_attacke_links + 200 Then
      tmrSp_attacke_links = MilliSecs()
      frmSp_attacke_links = (frmSp_attacke_links + 1) Mod 7
 EndIf
 If frmSp_attacke_links=6 Then
  Spieler_Attacke1_links=False
  Spielersteht=2
 EndIf
   If ItemId_Waffen_Schwert=1 Then
    DrawImage Spieler_attackiert1_nurUebungsKatana_links,Sp_X#-45,Sp_Y#,frmSp_attacke_links
    If Inventargeoffnet Then
     UebungsKatana_Ausgeruestet=True
    Else
     UebungsKatana_Ausgeruestet=False
    EndIf
   EndIf
   If ItemId_AusruestungBeine=0 Then
    DrawImage Spieler_attackiert1_nurBeine_links,Sp_X#-45,Sp_Y#,frmSp_attacke_links
   EndIf
   If ItemId_AusruestungBeine=1 Then
    ;
   EndIf
   If ItemId_AusruestungGuertel=0 Then
    DrawImage Spieler_attackiert1_nurGuertel_links,Sp_X#-45,Sp_Y#,frmSp_attacke_links
   EndIf
   If ItemId_AusruestungOberkoerper=0 Then
    DrawImage Spieler_attackiert1_nurOberkoerper_links,Sp_X#-45,Sp_Y#,frmSp_attacke_links
   EndIf
   If ItemId_AusruestungKopf=0 Then
    DrawImage Spieler_attackiert1_nurKopf_links,Sp_X#-45,Sp_Y#,frmSp_attacke_links
   EndIf
EndIf

Blitzprogger

BeitragDo, Feb 17, 2011 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht aus als ob du ein GoTo benützen würdest. Mache das in Zukunft am besten nicht mehr. GoTo ist böse und schadet der Übersichtlichkeit des Programms.

mfg, Blitzprogger
Mein aktuelles Projekt, Irnithal: http://www.blitzforum.de/worklogs/415/

Unfreiwilliger Gewinner des BAC# 115. Wink

BB-Freak

BeitragDo, Feb 17, 2011 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked Was ist den das Problem mit dem GoTo und Blitz Basic ?
Wenn dass mit BB wirklich nicht funzt, gibt es dann Alternativen(ich find den Befehl nähmlich ganz geschickt Wink ) ?

BladeRunner

Moderator

BeitragDo, Feb 17, 2011 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Goto neigt dazu den Code zu einem wüsten Haufen Spagetti verkommen zu lassen. Deswegen sollte man es vermeiden. function ist wesentlich sauberer, denn es bietet dir einen gekapselten Datenraum für die Berechnungen in der Funktion.
Im Prinzip sind fast alle Befehle von Blitzbasic Funktionen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

BB-Freak

BeitragDo, Feb 17, 2011 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
gibt es trotzdem einen Grund warum das Bild von Schlag2 nicht gezeigt wird oder hängt das mit GoTo zusammen.

Xeres

Moderator

BeitragDo, Feb 17, 2011 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Gewöhne dir Funktionen an Arrow Function
Das hat zum einen den Vorteil, dass der Gültigkeitsraum vom Rest getrennt ist, macht den Code wiederverwendbar und mit GoTo kannst du kein Projekt so strukturieren, dass du weißt, wann was passiert. Und wir hier schon gar nicht. Soll heißen: Zu Code mit GoTo kannst du keine große Hilfe erwarten.

Mehr zum Problem: Die ganzen Einzel-Variablen halte ich für irrsinn, dass lässt sich weder einfach durchschauen, noch erweitern. Ich würde jedem Spieler einen Queque für Tastendrücke geben, ältere löschen, neue hinzufügen, und bei bestimmten Mustern Spezial-Attacken starten.
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)

BB-Freak

BeitragDo, Feb 17, 2011 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ähm Confused
also ich blicke in meinem Prog. ganz gut durch Rolling Eyes
Naja wenn mein code zu komplex und unstruckturiert ist muss ich mich wohl alleine an die stundenlange Fehlersuche machen. Außerdem wie kann ich GoTo(also das springen von einer Schleife in die andere) mit einer Funktion beschreiben ?

Xeres

Moderator

BeitragDo, Feb 17, 2011 22:04
Antworten mit Zitat
Benutzer-Profile anzeigen
A) Exit
B) Function / Return

Ich hab' keinen kritischen Wert Code/GoTo parat, bei dem man nicht mehr durchschaut - aber mach mal eine Zeit Pause am Projekt und versuch dann weiter zu arbeiten Wink
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)

BB-Freak

BeitragDo, Feb 17, 2011 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
äh also grade sprüh ich leider nur so vor Arbeitslust und ich habe schon 2Wochen Pause hinder mir Very Happy
Ich finde den Fehler nur einfach nicht Mad Und dachte vlt. findet ihn jemand im Forum Wink

Xeres

Moderator

BeitragDo, Feb 17, 2011 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schaff es z.B. schon mal nicht Schlag2 mit dem dazu gehörigen Bild zu finden. Variablen wie..
Code: [AUSKLAPPEN]
ItemId_AusruestungOberkoerper
Spieler_attackiert2_nurOberkoerper

...schreien geradezu danach, in einem Type untergebracht zu werden.

Hilfsvariablen wie
Code: [AUSKLAPPEN]
Spielergehtrechts=False
Spielergehtlinks=False
Spielersteht=False

könnte man in eine Variable zusammenschmelzen.

Und wenn dann alles hübsch kurz & geordnet ist, kann man auch leichter durchsehen, was denn da eigentlich passiert.
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)

BB-Freak

BeitragDo, Feb 17, 2011 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Laughing
jope
die Variablen Oberkörper.. usw. sind die bezeichnung dafür, welches Item der Spieler gerade anhatt Rolling Eyes man könnte es schoooon in einem Type unter bringen Rolling Eyes
Nur leider muss ich ins Bett hab Morgen Schule Wink
Und außerdem weiß ich nicht wie Embarassed ... ich es in einen Type packen soll(also das die richtigen Bilder gemalt werden) ohne nicht genau das gleich schreiben zu müssen Rolling Eyes

ozzi789

BeitragFr, Feb 18, 2011 9:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut gemeinter Ratschlag,

Lerne zuerst Programmieren, also auch wie man mit Types&Funktionen umgeht, wie man sauber Programmiert usw.

Und dann wage dich an ein Spiel, du wirst sehen du wirst viel weniger fustriert sein Wink

grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Midimaster

BeitragFr, Feb 18, 2011 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus deiner Anfrage werde ich nicht schlau. Wo ist in deinem Code das von dir genannte Bild "Schalg2". Ich sehe auch das GOTO nicht, von dem die anderen sprechen. Ist das wirklich der gesamte Code? Wo ist die Hauptschleife, wo das FLIP?


mein Ratschlag wäre, die Kapitel I bis IV meines "Programm-Ablauf-Tutorial" mal durchzulesen

https://www.blitzforum.de/foru...hp?t=33584

das ist genau, was du jetzt brauchst!

Du scheinst mit viel Engagement an die Sache ran zu gehen und baust das Ganze auch schon sehr komplex auf. Allerdings wird der Code damit immer sehr schnell unbeherschbar. Vor allem dann, wenn es um die Fehlersuche geht.

Das ist der Hauptfehler bei den ersten Spielen, die man schreibt: Man überläd sie mit zu vielen Zusatz-Features und bringt dabei das eigentliche Programm noch gar nicht zum Laufen. Dabei gilt eigentlich: Wer es schafft die Figur mit einem Feature auszurüsten, der kann später endlos weitere Feature hinzufügen.

Erstes und wesentliches Ziel deines ersten Programms sollte es sein, die Figur so auf den Bildschirm zu bringen, dass sie schon mal vor dir steht. Zweiter Schritt ist, das sie auf erst mal einen (EINEN) Tastendruck mit irgendwas reagiert. z.b. auf die RETURN-Taste ein Ausrüstungsgegenstand dazukommt und beim nächsten Druck wieder wegkommt.

Dafür benötigst Du schon eine REPEAT-Schleife.


1.Schritt für dich ist es jetzt zu überlegen:

Was gehört

BB-Freak

BeitragSa, Feb 19, 2011 10:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrow Natürlich ist das NICHT der GESAMTE code, nur ein klitze kleiner abschnitt falls du den ganzen code willst Wink
sry Firefox stürtzt ab wenn ich code rein kopiere Razz
Tja so ist das Leben und...

Arrow übrigens ich hab deine Tutorials(schon längst) aufmerksam gelesen waren sehr gut Wink

Arrow ich hab den code jezt einfach hochgeladen damit man in sich anschauen kann (gleicht leider einem Roman Wink ) https://www.blitzforum.de/upload/file.php?id=10283

Arrow Außerdem:
äh ihr denk also das die .Irgendwas was mit GoTo zu tun haben ? Shocked ? Nö ich missbrauch sie nur als inhalts verzeichniss damit ich über labels direkt dorthin springen kann wo ich gerade dran arbeite(also nicht ingame sonder beim proggen ) XD

hab nur sehr wenige und unkomplizierte GoTo's verwendet um zB zum Menü zurück zu gelangen Rolling Eyes

Arrow @Midimaster mit Schlag2 ist nicht das Bild gemeint, aber egal es heißt glaub ich Spieler_attackiert_2_links(oder Rechts)

Laughing ich glaube ich hab den Text jetzt schon 10mal editiert ^^ Laughing

Midimaster

BeitragSa, Feb 19, 2011 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für den Gesamtcode, jetzt kann ich mir besser ein Eindruck verschaffen.

Also "Lesen des Tutorials" alleine reicht leider nicht. Man soll es auch verstanden haben... und umsetzen!

Jetzt zunächst ein vernichtendes Urteil über deinen Code: Da ist zu wenig Struktur drin. Vieles was sich in 5 Zeilen schreiben liese, benötig bei Dir 50 Zeilen! So wirst Du NIEMALS an dein Ziel "lauffähiges Spiel" kommen.

Ich werde mal den Code die nächsten 10 Minuten durchchecken und Dich auf einige Möglichkeiten der Strukturierung aufmerksam machen. Bitte nutze diese Chance und gestalte dann den Code um und schreibe in Zukunft nur noch strukturierter.

Bis gleich....

Midimaster

BeitragSa, Feb 19, 2011 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
also das Bilderladen kommt mal gleich in ein zweites BB, ebenso wie die bereits 100% getesteten Funktionen:

BlitzBasic: [AUSKLAPPEN]
Graphics 640,480,0,2
SetBuffer BackBuffer()

Include BilderLaden.BB
Include Functionen.BB

Type Slots
Field x, y, ItemId, ItemAnz, ItemBewegt
End Type

Type Agro_Monster
Field X, Max_Leben, Leben, Y, Erwacht, Attack_Links, Laeuft_Links, Steht, SchonErwacht, Attack_Rechts, Laeuft_Rechts
Field Damage, Get_Damage,FrmAttack_Links, TrmAttack_Links, FrmLaeuft_Links, TrmLaeuft_Links, FrmAttack_Rechts, TrmAttack_Rechts, FrmLaeuft_Rechts, TrmLaeuft_Rechts
End Type

Type Flying_Texts
Field Fly_Text, Damage
End Type

.....

Global tmrManzeige,Rechnung,zehn,blinkX,Blinktrm,Blinktrm2

Sp_Leben#=100
Sp_max_Leben=100
Sp_Ausdauer#=100
Sp_Max_Ausdauer=100
Sp_Aura#=100
Sp_Max_Aura#=100
OpSX=55
Spielersteht=True
zehn=10
blinkX=317
Blink=True

TuerSchmiedeX#=10000
Einfuehrung=True
SeedRnd MilliSecs()
.....


anschließend folgen alle Startup-Variablen, die TYPE-Deklarationen an einer gemeinsamen Stelle.



Variablen, die Du mehr als 5x brauchst, werden ein ARRAY:
BlitzBasic: [AUSKLAPPEN]
Dim Bx#(20)
For i%=1 To 16
Bx(i)=Rnd(30,1920)
Next


Der Vorteil liegt im Kürzen des Codes, wenn sie alle mit Werten bestückt oder einmal abgefragt werden müssen. Das spart hier 15 fast gleiche Zeilen und dann natürlich auch bei den vielen WriteInt und ReadInt-Stellen ebenso.



Gleich mal zu deinen Datei-Zugriffen: da machst Du an mehreren Stellen im code immer wieder fast das gleiche. So was löst Du mit einer Funktion. 1x schreiben und dann nur noch immer wieder aufrufen:
BlitzBasic: [AUSKLAPPEN]
JetzSaven Sp\Name$
....

JetzSaven "Sp_auto.save"

Function JetztSaven(DateiName$)
Text 10,10,"Wird gespeichert !"
tmrSpeichern = MilliSecs()
ChangeDir "C:\Program Files\the Atventur(2D)"
Handle= WriteFile(DateiName$)
WriteInt(Handle, Sp_Y#)
WriteInt(Handle, Sp_X#)
WriteInt(Handle, Pfal1X#)
WriteString(Handle, "Feld_1_")
WriteInt(Handle,WeltX#)
WriteInt(Handle,TuerSchmiedeX#)
WriteInt(Handle,TuerHdAX#)
WriteInt(Handle,DonjoTuerX#)
WriteInt(Handle,St1SchneeX)
For i%=1 To 16
WriteInt(Handle,Bx(i))

Next
WriteInt(Handle,Wetter)
WriteInt(Handle,ItemId_AusruestungBeine)
WriteInt(Handle,ItemId_AusruestungGuertel)
WriteInt(Handle,ItemId_AusruestungOberkoerper)
WriteInt(Handle,ItemId_AusruestungKopf)
WriteInt(Handle,ItemId_Waffen_Schwert)
WriteInt(Handle,Anzeige)
WriteInt(Handle,Einfuehrung1)
WriteInt(Handle,Einfuehrung)
WriteInt(Handle,Gold)
WriteInt(Handle,ItemIn1)
CloseFile(Handle)
End Function


Das spart dir mind 300 Zeilen Code!


Dann hast du sehr viele Mal-Stellen im Programm-Code. Glieder auch die aus in eine Funktion, verlege diese auf die "Funktionen.BB" und ruf dann an der alten Stelle nur die Funktion auf:

BlitzBasic: [AUSKLAPPEN]

...
;Aufruf:
MaleJetztWasAuchImmer()
....

Function MaleJetztWasAuchImmer()
nichtUnten=True
Color 170,170,170
Rect 620,10,10,470,0
Rect 620,10,10,10,0
Rect 620,470,10,10,0
Rect 620,BalkenY,10,10
Color 185,185,215
Rect 620+1,BalkenY+1,8,8,0
Color 200,200,200
Rect 620+2,BalkenY+2,6,6,0
Color 215,215,215
Rect 620+3,BalkenY+3,4,4,0
Color 230,230,230
Rect 620+4,BalkenY+4,2,2,0
Rect 620+4,BalkenY+4,2,2,0
End Fucntion



Jetzt mal zu den KeyHit[]s. So wird es kürzer und an mehreren Stellen nutzbar:

BlitzBasic: [AUSKLAPPEN]

Function GesammeltesItem()
locKey%=Taste()
W%=0
Select locKey
Case 59
W= 1
Case 60
W= 2
Case ....
.....
End Select
If W>0 Then
gesammeltItemId=W
EndIf
End Function

Function Taste%()
For i%=1 To 255
If KeyHit(i) Then
Return i
EndIf
Next
End Function





So jetzt mal was zu den ewig vielen fast gleichen Zeilen mit DrawImage, ähnlich dieser hier:
Code: [AUSKLAPPEN]
 If slotInventar\ItemId=1 Then
  DrawImage TP_Trank_klein,SlotInventar\x,SlotInventar\y
 EndIf
 If SlotInventar\ItemId=2 Then
  DrawImage MP_Trank_klein,SlotInventar\x,SlotInventar\y
 EndIf
 If slotInventar\ItemId=3 Then
  DrawImage TP_Trank_Mittel,SlotInventar\x,SlotInventar\y
 EndIf
 If SlotInventar\ItemId=4 Then
  DrawImage MP_Trank_Mittel,SlotInventar\x,SlotInventar\y
 EndIf
 If slotInventar\ItemId=5 Then
  DrawImage TP_Trank_Gross,SlotInventar\x,SlotInventar\y
 EndIf
 If SlotInventar\ItemId=6 Then
  DrawImage MP_Trank_Gross,SlotInventar\x,SlotInventar\y
 EndIf
 If SlotInventar\ItemId=7 Then
  DrawImage Geschwindigkeits_Trank_Klein,SlotInventar\x,SlotInventar\y
 EndIf
 If SlotInventar\ItemId=8 Then
  DrawImage Geschwindigkeits_Trank_Mittel,SlotInventar\x,SlotInventar\y
 EndIf



Das änderst Du am besten so ab:

BlitzBasic: [AUSKLAPPEN]
    Select slotInventar\ItemId
Case 1
locBild=TP_Trank_klein
Case 2
locBild=TP_Trank_mittel
Case 3
....
End Select

DrawImage locBild,SlotInventar\x,SlotInventar\y



So, das sind jetzt eine Menge Anregungen für das Umbauen Deines Codes. Wenn Du das jetzt umsetzt, zeige ich Dir wie zu es auf eine REPEAT/UNTIL-Schleife zusammenstauchst. Erst damit wird es zum Spiel.


Hier noch eine Zugabe für deine Itembeschreibung, die ebenfalls mehrmals vorkommt:

BlitzBasic: [AUSKLAPPEN]
ItemBeschreibung()


Function ItemBeschreibung()
locB$=""
da%=1
Select slotInventar\ItemId
Case 1

....

Case 16
locB$="Übungs-|Katana|aus Stroh|+5 Stärke| |"
End Select

For I=1 To 5
; Stück herausschneiden
Teil$=Mid(locB,da%)

; hintere Stücke abtrennen
bis=Instr(Teil,"|")-1
Teil$=Left(Teil,bis%)

;anzeigen
Text slotInventar\x+27,slotInventar\y-55+ I*10 ,Teil

;Zeiger auf nächsten Abschnitt verschieben
da=Instr(locB,"|",da+1)
Next
End Function

BB-Freak

BeitragSo, Feb 20, 2011 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked Vielen Dank für die Ausführliche Hilfe Exclamation

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group