ein paar kleine Fragen... :D

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

ClayC

Betreff: ein paar kleine Fragen... :D

BeitragMi, Okt 08, 2008 9:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Hab ein 2 Problemchen mit meinem Code, hab mir die Hilfe schon durchgelesen komm aber ned drauf.
1. Wenn ich von dem Menüpunkt "Spiel" zu "?" gehe dann überlappen sich die Fenster bzw das alte wird nicht gelöscht.
2.Wenn ich auf "Spiel" -> "beenden" gehe dann kann ich zwischen "ok" und "abbrechen" auswählen aber

es is egal was ich drücke es beendet sowieso Very Happy . Bin mir nicht sicher wie ich das Confirm erweitere, die Hilfe ist mir da auch nicht behilflich^^

Eine Frage noch zu Backbuffer: Wie kann ich das Bild vom Backbuffer in den Frontbuffer schreiben? Also den Drawimage Befehl ohne Flip...



Code: [AUSKLAPPEN]
 Import MaxGui.Drivers

Strict

'Zählvariablen/Schachbrett
Global Y1:Int, X1:Int, Y2:Int, X2:Int      
Global Schachbrett:TImage=LoadImage("Schachbrett.png")


Global GAME_WIDTH=900
Global GAME_HEIGHT=700

Local wx=(ClientWidth(Desktop())-GAME_WIDTH)/2
Local wy=(ClientHeight(Desktop())-GAME_HEIGHT)/2

Local window:TGadget=CreateWindow("Say Chess",wx,wy,GAME_WIDTH,GAME_HEIGHT,Null,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS)
Local canvas:TGadget=CreateCanvas(0,0,900,700,window)

'Menü Anfang
Local FileMenu:TGadget=CreateMenu("Spiel",0,WindowMenu(window))
CreateMenu "Neues Spiel",101,FileMenu,KEY_F2,MODIFIER_COMMAND
CreateMenu"",0,filemenu
CreateMenu "Beenden",102,FileMenu,KEY_F4,MODIFIER_COMMAND

Local HelpMenu:TGadget=CreateMenu("?",0,WindowMenu(window))
CreateMenu "Über...",201,HelpMenu,KEY_F1,MODIFIER_COMMAND
'Menü Ende


Repeat
   UpdateWindowMenu window
   WaitEvent()
   Select EventID()
      Case EVENT_WINDOWCLOSE
         FreeGadget canvas
         End
         
      Case EVENT_MENUACTION
         Select EventData()
            Case 101
            
            Confirm "Neues Spiel starten?"
            Case 102
            Confirm "Say Chess Beenden?"
            End
            Case 201
                   Notify "Say Chess ~nEntwickelt 2008-2009"
         End Select
      
      Case EVENT_GADGETPAINT
         SetGraphics CanvasGraphics(canvas)
         SetOrigin 60,60
         SetLineWidth 1
      
      Local X1:Int
      Local Y1:Int
      
      For X1 = 60 To 540 Step 60
         DrawLine X1,60,X1,540
      Next
      
      For Y1 = 60 To 540 Step 60
         DrawLine 60,Y1,540,Y1
      Next

   'DrawImage Schachbrett,40,40
   Flip
   
   End Select         
   
Forever
 

danielos

BeitragMi, Okt 08, 2008 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin!

Also zu deinen Problemen:

1) Das Menüfenster schließt sich schon, du musst nur den schwarzen Hintergrund bei EVENT_GADGETPAINT neuzeichnen, weil sonst eine abbild deines menüs auf dem zurückbleibt.
(Das musst du aber selber coden, da wollte ich mich durch deinen Code nicht durchwühlen Wink )

2.) Confirm hat einen Rückgabewert, nämlich "1" falls OK gedrückt wurde, und 0 falls Abbrechen gedrückt wurde:

Code: [AUSKLAPPEN]

 Import MaxGui.Drivers

Strict

'Zählvariablen/Schachbrett
Global Y1:Int, X1:Int, Y2:Int, X2:Int     
Global Schachbrett:TImage=LoadImage("Schachbrett.png")


Global GAME_WIDTH=900
Global GAME_HEIGHT=700

Local wx=(ClientWidth(Desktop())-GAME_WIDTH)/2
Local wy=(ClientHeight(Desktop())-GAME_HEIGHT)/2

Local window:TGadget=CreateWindow("Say Chess",wx,wy,GAME_WIDTH,GAME_HEIGHT,Null,WINDOW_TITLEBAR|WINDOW_CLIENTCOORDS)
Local canvas:TGadget=CreateCanvas(0,0,900,700,window)

'Menü Anfang
Local FileMenu:TGadget=CreateMenu("Spiel",0,WindowMenu(window))
CreateMenu "Neues Spiel",101,FileMenu,KEY_F2,MODIFIER_COMMAND
CreateMenu"",0,filemenu
CreateMenu "Beenden",102,FileMenu,KEY_F4,MODIFIER_COMMAND

Local HelpMenu:TGadget=CreateMenu("?",0,WindowMenu(window))
CreateMenu "Über...",201,HelpMenu,KEY_F1,MODIFIER_COMMAND
'Menü Ende

UpdateWindowMenu window 'Vor der Hauptschleife

Repeat
   Print CurrentEvent.tostring()
   WaitEvent()
   Select EventID()
      Case EVENT_WINDOWCLOSE
         FreeGadget canvas
         End
         
      Case EVENT_MENUACTION
         Select EventData()
            Case 101
           
            Confirm "Neues Spiel starten?"
            Case 102
               Local ConfirmEnd=Confirm( "Say Chess Beenden?")
          Select ConfirmEnd
            Case 1 'OK wurde gedrückt
                  End
          End Select
      
           Case 201
                   Notify "Say Chess ~nEntwickelt 2008-2009"
         End Select
     
      Case EVENT_GADGETPAINT
         SetGraphics CanvasGraphics(canvas)
         SetOrigin 60,60
         SetLineWidth 1
     
      Local X1:Int
      Local Y1:Int
     
      For X1 = 60 To 540 Step 60
         DrawLine X1,60,X1,540
      Next
     
      For Y1 = 60 To 540 Step 60
         DrawLine 60,Y1,540,Y1
      Next

   'DrawImage Schachbrett,40,40
   Flip
   
   End Select         
   
Forever




Noch zwei Hinweise:

1.) Du musst nicht in jedem Schleifendurchlauf "UpdateWindowMenu window" benutzen, sondern nur, falls du z.B. einen Haken vor ein Menü setzt o.ä., sprich wenn sich etwas verändert an deinem menü nach dem ersten "UpdateWindowMenu"

2.) Es empfiehlt sich, Print CurrentEvent.tostring() zu benutzen, dass erleichtert das Programmieren Smile

Das sollte dir erstmal helfen...

MfG
Danielos
 

ClayC

BeitragMi, Okt 08, 2008 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke danielos für die Hilfe und die tollen Tipps.
Das mit dem RedrawGadget hab ich noch nicht geschafft, aber das ist glaub ich kein größeres Problem.

Eine Frage hab ich noch, wie ist das mit Blitzcode in C++ Code umwandeln hab schon ein bisschen gesucht aber nicht wirklich was gefunden.

BladeRunner

Moderator

BeitragMi, Okt 08, 2008 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
BMax zu C++? Warum das denn?
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
 

ClayC

BeitragMi, Okt 08, 2008 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil das Blitzmax Programm nur ein Teil eines größeren Projekts ist...

BladeRunner

Moderator

BeitragMi, Okt 08, 2008 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann solltest Du dich für dein Projekt für eine Sprache entscheiden. Es ist kein Problem externe C/++-Sources in Bmax zu integrieren, BMax zu C++ hingegen stellt schon ein wenig mehr Aufwand dar.
Ab davon solltest Du vielleicht erst mal die Grundlagen des Programmierens meistern bevor Du versuchst komplexe Interaktion zu integrieren.
Ein Schach halte ich btw für ein Anfängerprojekt für absolut ungeeignet.
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
 

ClayC

BeitragMi, Okt 08, 2008 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich programmiere schon seit ein paar Jahren(C++, Java(nur mal reingschnuppert^^), Perl, Php, Html,...) nur Blitzmax is halt neu für mich, hab vor ca einer Woche damit angefangen.
Ich finde nicht dass Schach so schwer ist ich brauch für meinen Fall keine KI, fallst du das gemeint hast...
Aber es ist möglich dass man Blitz Code in C++ umwandeln kann?

coolo

BeitragMi, Okt 08, 2008 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Möglich ja, aber ob der Aufwand nicht zu groß ist? Ich wurde dir dies nicht empfehlen. es gibt aber eine Programmierspreche, welche das kann GlBasic.
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group