Hilfe zu Spiel in menü einbinden

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Crishnack

Betreff: Hilfe zu Spiel in menü einbinden

BeitragMi, Jan 06, 2010 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Ich habe ein Spiel programmiert und auch ein menü, aber ich weiß nicht, wie man das Spiel in das Menü einbindet. (hab drei Schwierigkeitsstufen, die ich über das Menü aus auswählen will). Ich brauche die Antwort bitte heute noch

Dies ist mein Menücode

Code: [AUSKLAPPEN]
Const xr=800, yr=600
Graphics xr, yr,16,2
HidePointer
Global fontButton = LoadFont("Thorndale",30,1)
Global mx, my




SetBuffer BackBuffer()
WaitMouse()

 
   For d = 0 To 25
   Viewport 0,0,xr,yr
   Cls
   Viewport 0,yr/2-d,xr,d+d+1
   drawButton("L",100,yr/2-15-3)
   drawButton("M",200,yr/2-15-3)
   drawButton("S",300,yr/2-15-3)
   drawButton("E",400,yr/2-15-3)
   Rect 0,yr/2-d,xr,1,1
   Rect 0,yr/2+d,xr,1,1
   Flip()
   Delay 1
   Next
   
   Viewport 0,0,xr,yr
   
 
   loopTimer = CreateTimer(60)
   endLoop = False
   Repeat
      mx = MouseX()
      my = MouseY()
     
      Cls
     
      Rect 0,yr/2-25,xr,1,1
      Rect 0,yr/2+25,xr,1,1
      If drawButton("L",100,yr/2-15-3) Then
         Color 255,255,255
         b1 = stretchText("eicht", 100, yr/2+22, b1, 7, 2)
      Else
         b1 = 0
      End If

     
      If drawButton("M",200,yr/2-15-3) Then
         Color 255,255,255
         b2 = stretchText("ittel", 200, yr/2+22, b2, 7, 2)
      Else
         b2 = 0
      End If
     
      If drawButton("S",300,yr/2-15-3) Then
         Color 255,255,255
         b3 = stretchText("chwer", 300, yr/2+22, b3, 7, 2)
      Else
         b3 = 0
      End If

      If drawButton("E",400,yr/2-15-3) Then
         Color 255,255,255
         b4 = stretchText("nde", 400, yr/2+22, b4, 7, 2)
         If MouseDown(1) Then endLoop = True
      Else
         b4 = 0
      End If
     
     
      Color 255, 255, 255
      Line mx - 3, my, mx + 3, my
      Line mx, my - 3, mx, my + 3
     
     
      Flip(0)
      WaitTimer(loopTimer)
   
   
   
   
   
   Until KeyDown(1) Or endLoop



End()




Function drawButton(t$="Buttontext erwartet", xpos=1, ypos=1, clickable = True)

   
   SetFont fontButton
   bxsize = StringWidth(t$)+5
   bysize = StringHeight(t$)+5
   If Len(t$) = 1 Then
      If bxsize < bysize Then bxsize = bysize Else bysize = bxsize
   End If
   miR = mouseInRect(xpos, ypos, xpos + bxsize, ypos + bysize)
         
   Color 150,150,150
   Rect xpos+1, ypos, bxsize, 1,1
   Rect xpos+1, ypos+bysize+1, bxsize, 1,1
   Rect xpos, ypos+1, 1, bysize,1
   Rect xpos+bxsize+1, ypos+1, 1, bysize,1
   Color 50,50,50
   Rect xpos+1,ypos+1,bxsize,bysize,1
   
   


   If miR And clickable Then Color 255, 255, 0 Else Color 255,255,255
   Text xpos+(bxsize-StringWidth(t$))/2+1, ypos+(bysize-StringHeight(t$))/2+1, t$
   
   Return miR

End Function


Function mouseInRect(x1, y1, x2, y2)
   If mx < x1 Or mx > x2 Then Return False
   If my < y1 Or my > y2 Then Return False
   Return True
End Function

Function stretchText(t$, x, y, p, s = 1, d = 1)
   If d = 1 Then
      one_char_size# = StringWidth("#") / 100.0
      tl = Len(t$)
      For i = 1 To tl
         Text x +  (i-1)*one_char_size# * p, y, Mid$(t$,i,1)
      Next
   Else If d = 2 Then
      one_char_size# = StringHeight(Left$(t$,1)) / 100.0
      one_char_size_w# = StringWidth("#")
      tl = Len(t$)
      For i = 1 To tl
         Text x+one_char_size_w#+(one_char_size#-StringWidth(Mid$(t$,i,1)))/2, y + (i-1)*one_char_size# * p, Mid$(t$,i,1)
      Next
   End If   
   
   p = p + s
   If p > 100 Then p = 100
   Return p

End Function


Select menustate
   Case 1
      ; Leicht
   Case 2
      ; Mittel
   Case 3
      ; Schwer
End Select

hazumu-kun

BeitragMi, Jan 06, 2010 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du sowas in seperate *.exe dateien machen willst bist du auf dem Holzweg,
machs lieber so (Pseudocode:)
Code: [AUSKLAPPEN]

;Menü
Repeat
  select schwierigkeit
    case leicht
      Spiel (1)
    case mittel
      Spiel (2)
    case schwer
      Spiel (3)
  end select
Forever


Und dann halt das eigentliche Spiel in die Funktion Spiel setzten, und die schwierigkeitsstufe über den Parameter einstellen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Smily

BeitragMi, Jan 06, 2010 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Include
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Midimaster

BeitragMi, Jan 06, 2010 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach es so wie huzumu-kun beschreibt. Genaueres findest du in dem Programmablauf-Tutorial:

siehe Kapitel VI: "Paket aus mehreren Ansichten...l": https://www.blitzforum.de/foru...849#355849

Das geht genau darum, wie man aus zwei Programmen eines macht. Dein code ist auch schon ziemlich gut dafür vorbereitet.
 

Crishnack

BeitragMi, Jan 06, 2010 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
das sagt dann aber immer dass die types nur im Hauptprogramm sein können.
wo kommen die dann hin?

Midimaster

BeitragMi, Jan 06, 2010 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
was jetzt passiert ist ganz typisch:

da du nicht alle variablen definiertt hast, läßt sich der bisherige Hauptteil nicht ohne weiteres in eine Funktion abspalten.

Is' aber kein Grund auf Funktionen zu verzichten, sonder eher ein Grund, sich endlich mal bei jeder Variablen zu überlegen, ob sie GLOBAL oder LOCAL sein sollte.

Schlamper-Tipp:
(jetzt werden mich die anderen lynchen...)

Definiere sie zunächst alle Global. Dann läuft das Programm wieder an.


[EDIT #1]

in deinem Menücode sind gar keine Types. Und den Spiel-Code hast du nicht reingestellt.

Da die Veränderungen nur in den Teilen gemacht werden müssen, die bisher nicht Funktionen waren. (also meist aller Code von Graphics... bis Until....), genügt es nur diesen Teil reinzustellen.

gleich noch mehr....

[EDIT #2]

Die Types kommen an den Anfang des Gesamt-Programms, gerne sogar vor Graphics...
Ebenso alle DIM-Arrays. Mein Tutorial zeigt dies übrigens Schritt-für-Schritt.
 

Crishnack

BeitragMi, Jan 06, 2010 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab jetzt die Leichte version in ne Funktion gebunden

Code: [AUSKLAPPEN]
Function Leicht()

While Not KeyHit(1)

Cls

If KeyDown(57)
...
EndIf

...


Drawimage...

...


For z=Each ...

...

Next

...

Flip

End Function



jetzt kommt da aber ne Fehlermeldung: End Function without Funktion

Xeres

Moderator

BeitragMi, Jan 06, 2010 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
while muss mit wend enden, mehrzeilige If Bedingungen müssen auf EndIf enden...
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)
 

Crishnack

BeitragMi, Jan 06, 2010 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für all die Tipps und so
Ich hab nur noch eine Frage: Was muss ich hier einfügen, um die Funktion Leicht zu öffnen:

Code: [AUSKLAPPEN]
      Rect 0,yr/2-25,xr,1,1
      Rect 0,yr/2+25,xr,1,1
      If drawButton("L",100,yr/2-15-3) Then
         Color 255,255,255
         b1 = stretchText("eicht", 100, yr/2+22, b1, 7, 2)
     
hier hin
     
      Else
         b1 = 0
      End If

Midimaster

BeitragMi, Jan 06, 2010 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ich denke mal, du meinst damit die Funktion, die das Spiel in der leichten Variante enthält, dann würde ein...

Leicht()

an der von dir markierten Stelle reichen.
 

Crishnack

BeitragMi, Jan 06, 2010 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die Tipps, ihr habt mir wirklich sehr geholfen!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group