Wieder mal Probleme mit meinen Games...

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Another Stupid Coder

Betreff: Wieder mal Probleme mit meinen Games...

BeitragFr, Dez 26, 2003 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Halllo, ihr BlitzBasic-Coder da draußen!
Ich habe mal wieder zwei "kleine" Probleme. (Die Quellcodes gibt's unten.)
1. Abranoix : Ich will das sich die Figur langsamer (ungefähr so wie in Zelda (für GB), Harvest Moon, Pokenmon, ...) bewegt und habe auch schon probiert es zu
proggen. Dürfte ja eigentlich ganz einfach sein aber ich hab's einfach nicht geschafft! Achja, wenn möglich sollte die FPS (Frames Pro Sekunde, Frames Per Second) gleich bleiben.

2. MapEdit: Ich suche eine Möglichkeit das Messages-Dim-Feld zu füllen indem man auf das feld klickt und dann einfach die Nachricht eingibt. Dabei wären Bugs
Wie z.B.: Doppeltes Eingeben der Message und das sich danach der Speichern-Dialog öffnet zu vermeiden.

Tja, Ich hoffe Ihr könnt mir helfen, wenn ja, wäre das sehr sehr nett. Smile

Quellcodes:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Abranoix.bb:

Global FileLoad$
AppTitle "Abranoix"
Graphics 740, 530, 16, 2 ; Grafik-Modus.
SetBuffer BackBuffer() ; Wir verwenden Doublebuffering.
FPS = CreateTimer(60) ; Frames Per Sekunde

; Dim-Felder
Dim Map(21,16) ; Das Karten-Dim-Feld.
; Globale Variablen
Global P_X = 3; X-Koordinate des Players.
Global P_Y = 8 ; Y-Koordinate des Players.
Global P_Direc = 3 ; Die Richtung (Direction) des Players.
Global P_Anim = 0 ; Der Frame der Player-Animation
Global Modus$ = "Menü"
; Bilder
Global Cursor = LoadImage("Graphics\Cursor.bmp")
Global Button_Dark = LoadImage("Graphics\Button_Dark.bmp")
Global Button_Light = LoadImage("Graphics\Button_Light.bmp")
Global MessageBox = LoadImage("Graphics\MessageBox.bmp")
Global MenueBox = LoadImage("Graphics\MenueBox.png")
Global Loader = LoadImage("Graphics\Loader.png")
Global Tileset = LoadAnimImage("Graphics\Tileset.bmp", 32, 32, 0, 21) ; Das Tileset der Karte.
Global P_Image = LoadAnimImage("Graphics\Char.bmp", 32, 32, 0, 12)
; Transparenz
MaskImage P_Image, 255, 0, 255 ; Damit Rosa Transparent wird.
MaskImage Cursor, 255, 0, 255 ; Damit Rosa Transparent wird.
MaskImage MenueBox, 255, 0, 255 ; Damit Schwarz NICHT Transparent wird.
; Schriften
Global Arial18 = LoadFont("Blitz.fon", 18)
; Includes.
Include "Funktionen.bb"
; Initialisierungen.


While Not KeyDown(1) = True
WaitTimer(FPS)
HidePointer

If Modus$ = "Menü"
Origin 50, 25
DrawImage Loader, 0, 0
NeuesSpielButton = Button(320, 200, "Neues Spiel")
If NeuesSpielButton = True Then
FileLoad$ = "Maps\Map1.abrmap"
LoadMap()
Modus$ = "Spiel"
EndIf
LadeSpielButton = Button(320, 238, "Laden")
If LadeSpielButton = True Then LadeSpiel()
SpeicherSpielButton = Button(320, 276, "Speichern")
If SpeicherSpielButton = True Then SpeicherSpiel()

DrawImage Cursor, MouseX(), MouseY()
EndIf
If Modus$ = "Spiel"
Origin 0, 0
Move()
DrawMap()
DrawImage P_Image, P_X*32-32, P_Y*32-32, P_Direc + P_Anim
DrawImage MessageBox, 0, 480
DrawImage MenueBox, 640, 0
MenueButton = Button(691, 68, "Menü")
If MenueButton = True Then Modus$ = "Menü"
P_Anim = P_Anim + 1
If P_Anim >= 3 Then P_Anim = 0
If MouseX() > 640 DrawImage Cursor, MouseX(), MouseY()
EndIf
Flip
Cls
Wend
FreeTimer FPS
FreeFont Arial18
End
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Funktionen.bb (für Abranoix.bb)

Function Move()

If KeyDown(200) ; Rauf
P_Direc = 0
If Not P_X <= 0
If Not P_X >= 21
If Not P_Y <= 0
If Not P_Y >= 16
If Map(P_X, P_Y - 1) < 10

P_Y = P_Y - 1

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf

If KeyDown(208) ; Runter
P_Direc = 3
If Not P_X <= 0
If Not P_X >= 21
If Not P_Y <= 0
If Not P_Y >= 16
If Map(P_X, P_Y + 1) < 10

P_Y = P_Y + 1

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf

If KeyDown(203) ; Links
P_Direc = 6
If Not P_X <= 0
If Not P_X >= 21
If Not P_Y <= 0
If Not P_Y >= 16
If Map(P_X - 1, P_Y) < 10

P_X = P_X - 1

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf

If KeyDown(205) ; Rechts
P_Direc = 9
If Not P_X <= 0
If Not P_X >= 21
If Not P_Y <= 0
If Not P_Y >= 16
If Map(P_X + 1, P_Y) < 10

P_X = P_X + 1

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
End Function

Function LoadMap()
StreamLoad = ReadFile(FileLoad$)
For X = 0 To 21
For Y = 0 To 16
Map(X,Y) = ReadInt(StreamLoad)
Next
Next
End Function

Function DrawMap()

For Y = 0 To 15
For X = 0 To 21
DrawImage Tileset, X*32-32, Y*32-32, Map(X,Y)
Next
Next

End Function

Function ShowMessage(Message$)
MsgGo = 1
SetFont Arial18
Text 30, 500, Message$
End Function

Function Button(X, Y, Text_$)

Clicked = 0

W = ImageWidth(Button_Dark)
H = ImageHeight(Button_Dark)
W = W / 2
H = H / 2
X = X - W
Y = Y - H
DrawImage Button_Dark, X, Y
If MouseX() > X
If MouseX() < (X + (W*2))
If MouseY() > Y
If MouseY() < (Y + (H*2))
DrawImage Button_Light, X, Y
If MouseHit(1)
Clicked = 1
EndIf
EndIf
EndIf
EndIf
EndIf
Text X + W, Y + H, Text_$ , 1, 1
Return Clicked

End Function

Function LadeSpiel()

End Function

Function SpeicherSpiel()

End Function
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MapEdit:

;#####################################################################################################
;##-----------------------------------MapEdit Version 1.0-------------------------------------------##
;##-------------------------------Program : Paul Anselm Härle---------------------------------------##
;#####################################################################################################
;# #
AppTitle "MapEdit V 1.0 By Paul Anselm Härle <paulhaerle@gmx.at>" ; Setzt den Fenster-Titel. #
Graphics 740 + 64, 480 + 64, 16, 2 ; Startet den Grafik-Modus. #
SetBuffer BackBuffer() ; Aktiviert den Backbuffer. #
;# #
;#---------------------------------------Dim-Felder--------------------------------------------------#
;# #
Dim MapArr(21, 16) ; Der Array für die Karte. #
Dim DrüberGrafiken(21, 16) ; Array für die Darüber gelegten Grafiken. #
Dim Messages$(21, 16) ; Array für die Meldungen am Bildschirm. (TODO: Mehr als eine Message.) #
Dim Items$(21, 16) ; Array mit Items. #
;# #
;#------------------------------------Globale Variablen----------------------------------------------#
;# #
Global Map_X ; X-Koordinate des Tiles unter der Maus. #
Global Map_Y ; Y-Koordinate des Tiles unter der Maus. #
Global AktTile = 0 ; Das gerade gewählte Tile (wird auf Links-Klick gesetzt.). #
Global Modus = 0 ; Der Modus (0=Tiles, 1=Grafiken,2=Messages, 3=Items). #
;# #
;#-----------------------------------Bilder & Transparenz--------------------------------------------#
;# #
Global MenueImage = LoadImage("Graphics\Menue.png") ; Lädt das Menue als *.png-Datei. #
Global Tileset = LoadAnimImage("Graphics\Tileset.bmp", 32, 32, 0, 21) ; Lädt das Tileset. #
Global Cursor = LoadImage("Graphics\Cursor.bmp") ; Lädt den Cursor. #
Global Button_Dark = LoadImage("Graphics\Button_Dark.png") ; Der dunkle Button. #
Global Button_Light = LoadImage("Graphics\Button_Light.png") ; Der helle Button. #
Global EingabeBox = LoadImage("Graphics\EingabeBox.bmp") ; Die Eingabe-Box. Wer hätte DAS gedacht? #
MaskImage Cursor, 255, 0, 255 ; Aktiviert Rosa-ist-transparent für den Cursor. #
;# #
;#-----------------------------------Initialisierungen-----------------------------------------------#
;# #
For X = 0 To 21 ;------|\ #
Y = 0 ;------------|--\ #
MapArr(X,Y) = 12 ;-|----\ #
Next ;-----------------|------\ #
For X = 0 To 21 ;------|--------\ #
Y = 16 ;-----------|----------\ #
MapArr(X,Y) = 12 ;-|------------\ #
Next ;-----------------|--------------\ Macht die Ränder unbegehbar. #
For Y = 0 To 16 ;------|--------------/ #
X = 0 ;------------|------------/ #
MapArr(X,Y) = 12 ;-|----------/ #
Next ;-----------------|--------/ #
For Y = 0 To 16 ;------|------/ #
X = 21 ;-----------|----/ #
MapArr(X,Y) = 12 ;-|--/ #
Next ;-----------------|/ #
;# #
;#####################################################################################################
;#---------------------------------------Hauptschleife-----------------------------------------------#
;#####################################################################################################
;# #
While Not KeyDown(1) = True ; Solange NICHT Escape (Scancode = 1) gedrückt wird... #
;# #
For X = 0 To 21 ; Für jede Reihe... #
For Y = 0 To 16 ; Für Jede Spalte... #
DrawImage Tileset, X*32, Y*32, MapArr(X,Y) ; Zeichnet die Karte. #
Next ; Beendet For. #
Next ; Beendet For. #
;# #
X_ = MouseX() ; X_ ist die X-Koordinate der Maus. #
Y_ = MouseY() ; Y_ ist die Y-Koordinate der Maus. #
DrawImage MenueImage, 640 + 64, 0 ; Zeichnet das Menü. #
DrawImage Tileset, 675+ 64, 435, AktTile ; Zeigt das Aktuelle Tile im Menü an. #
HidePointer ; "versteckt" den M$-Mauszeiger (damit man meinen Besser sieht;)). #
ShowModus() ; Zeigt den aktuellen Modus an. #
;# #
Map_X = (X_) / 32 ; Die X-Koordinate des gewählten Tiles kann nur ein vielfaches von 32 sein. #
Map_Y = (Y_) / 32 ; Die Y-Koordinate auch. Wink #
;# #
If Modus = 0 ; Wenn der Tile-zeichnen-Modus aktiviert ist... #
;# #
If MouseHit(2) Then AktTile = AktTile + 1 ; Rechte Maustaste wechselt das aktuelle Tile. #
If Not AktTile <= 20 Then AktTile = 0 ; Wenn das aktuelle Tile > 20 ist dann wird es 0. #
;# #
If Map_X < 21 And Map_X >= 1 ;---------------|\ #
If Map_Y < 16 And Map_Y >= 1 ;-----------|--\ #
If MouseDown(1) Then ;---------------|----\ #
MapArr(Map_X, Map_Y) = AktTile ;-|------ Wenn im Karten-Bereich links geklickt wird: #
EndIf ;------------------------------|----/ dann zeichne das aktuelle Tile. #
EndIf ;----------------------------------|--/ #
EndIf ;--------------------------------------|/ #
;# #
Else If Modus = 2 ; Wenn der "Message"-Modus aktiviert ist... #
;# #
If Map_X < 21 And Map_X >= 1 ;---------------|\ #
If Map_Y < 16 And Map_Y >= 1 ;-----------|--\ #
If MouseHit(1) Then ;----------------|----\ #
SetMessage();--------------------|------ Wenn im Karten-Bereich links geklickt wird: #
EndIf ;------------------------------|----/ dann setze die Message. #
EndIf ;----------------------------------|--/ #
EndIf ;--------------------------------------|/ #
;# #
EndIf ; Beendet auch diese Modus-Möglichkeit. #

;# #
If KeyHit(31) Then SpeichereKarte() ; Wenn "S" gedrückt wird dann speichere die Karte. #
;# #
If KeyHit(38) Then LadeKarte() ; Wenn "L" gedrückt wird dann lade die Karte. #
;# #
If KeyHit(50) Then WechselModus() ; Wenn "M" gedrückt wird, wechsle den Modus. #
;# #
DrawImage Cursor, X_, Y_ ; Zeichnet MEINEN Wink Cursor an der Mausposition. #
;# #
Flip ; Tauscht die Buffer. #
Cls ; Löscht den alten Bildschirm. #
Wend ; Beendet die Hauptschleife (=While-Schleife). #
End ; Beendet das Programm. #
; #
;#####################################################################################################
;#-------------------------------------------Funktionen----------------------------------------------#
;#####################################################################################################
;# #
Function SpeichereKarte() ; Funktion um die Karte zu speichern. (Wird im Editor mit "S" aufgerufen.) #
;# #
FileSave$ = RequestFile$("Karte Speichern:","abrmap", 1) ; Ermittelt die Datei mittels Dialog. #
StreamSave = WriteFile(FileSave$) ; Öffnet die Datei für einen Schreibzugriff. #
For X = 0 To 21 ;------------------------------------|\ #
For Y = 0 To 16 ;--------------------------------|--\ #
WriteInt StreamSave, MapArr(X,Y) ;-----------|----\ #
Next ;-------------------------------------------|--/---\ #
Next ;-----------------------------------------------|/-------\ #
For X = 0 To 21 ;------------------------------------|\---------\ #
For Y = 0 To 16 ;--------------------------------|--\---------\ #
WriteInt StreamSave, DrüberGrafiken(X,Y) ;---|--------------\ #
Next ;-------------------------------------------|--/-------------\ #
Next ;-----------------------------------------------|/-----------------\ Speichert die Daten in #
For X = 0 To 21 ;------------------------------------|\-----------------/ Der Datei. #
For Y = 0 To 16 ;--------------------------------|--\-------------/ #
WriteLine StreamSave, Messages$(X,Y) ;-------|--------------/ #
Next ;-------------------------------------------|--/---------/ #
Next ;-----------------------------------------------|/---------/ #
For X = 0 To 21 ;------------------------------------|\-------/ #
For Y = 0 To 16 ;--------------------------------|--\---/ #
WriteLine StreamSave, Items$(X,Y) ;----------|----/ #
Next ;-------------------------------------------|--/ #
Next ;-----------------------------------------------|/ #
;# #
End Function ; Beendet die Karte-Speichern-Funktion. #
;# #
Function LadeKarte() ; Funktion um die Karte zu laden. (Wird im Editor mit "L" aufgerufen.) #
;# #
FileLoad$ = RequestFile$("Karte Laden:","abrmap", 0) ; Ermittelt die Datei mittels Dialog. #
StreamLoad = ReadFile(FileLoad$) ; Öffnet die Datei für einen Lesezugriff. #
For X = 0 To 21 ;------------------------------------|\ #
For Y = 0 To 16 ;--------------------------------|--\ #
MapArr(X,Y) = ReadInt (StreamLoad) ;---------|----\ #
Next ;-------------------------------------------|--/---\ #
Next ;-----------------------------------------------|/-------\ #
For X = 0 To 21 ;------------------------------------|\---------\ #
For Y = 0 To 16 ;--------------------------------|--\---------\ #
DrüberGrafiken(X,Y) = ReadInt(StreamLoad) ;--|--------------\ #
Next ;-------------------------------------------|--/-------------\ #
Next ;-----------------------------------------------|/-----------------\ Lädt die Daten aus #
For X = 0 To 21 ;------------------------------------|\-----------------/ Der Datei. #
For Y = 0 To 16 ;--------------------------------|--\-------------/ #
Messages$(X,Y) = ReadLine(StreamLoad) ;------|--------------/ #
Next ;-------------------------------------------|--/---------/ #
Next ;-----------------------------------------------|/---------/ #
For X = 0 To 21 ;------------------------------------|\-------/ #
For Y = 0 To 16 ;--------------------------------|--\---/ #
Items$(X,Y) = ReadLine(StreamLoad) ;---------|----/ #
Next ;-------------------------------------------|--/ #
Next ;-----------------------------------------------|/ #
;# #
End Function ; Beendet die Karte-Laden-Funktion. #
;# #
Function WechselModus() ; Funktion um den Modus zu wechseln. #
;# #
Modus = Modus + 1 ; Modus wird um 1 erhöht. #
If Modus >= 4 Then Modus = 0 ; Wenn Modus größer als 3 ist wird Modus wieder 0. #
FlushKeys : FlushMouse ; #
;# #
End Function ; Beendet die Wechsel-Funktion. #
;# #
Function SetMessage() ; Funktion um eine Nachricht in die Karte einzutragen. #
;# #
MsgDat$ = RequestFile$("Message-Datei: ", "txt", 0) ; Fragt den Datei-Pfad ab. #
MsgDatID = ReadFile(MsgDat$) ; Erstellt einen Lesezugriff für die MsgDat$-Datei. #
For X = 0 To 21 ;
For Y = 0 To 16
Tex$ = ReadLine$(MsgDatID) ;
Messages(X,Y) = Mid$(Tex$, 10) ;
Next
Next
;# #
End Function ; Beendet die Setze-Nachricht-Funktion. #
;# #
Function ShowModus() ; Funktion um den Aktuellen Modus anzuzeigen. #
;# #
If Modus = 0 Then Text 712, 90, "Modus: Tile" ; Wenn Modus = 0 dann wird "Tile" angezeigt. #
If Modus = 1 Then Text 712, 90, "Modus: Graf." ; Wenn Modus = 0 dann wird "Tile" angezeigt. #
If Modus = 2 Then Text 712, 90, "Modus: Msg." ; Wenn Modus = 0 dann wird "Tile" angezeigt. #
If Modus = 3 Then Text 712, 90, "Modus: Item" ; Wenn Modus = 0 dann wird "Tile" angezeigt. #
;# #
End Function ; Beendet die Zeige-Modus-Funktion. #
;# #
;# #

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

So, das der Code so komisch aussieht tut mir leid und liegt daran das ich ihn in eine *.txt-Datei geschrieben und daraus ins Forum kopiert habe.

Vielen Dank im vorraus.

P.s.: Da ich nur ein 56k-Modem zu verfügung habe und meine Eltern mich nur kurz ins netz lassen ($) konnte ich meine wunderschönen Wink Bitmaps und Pngs nicht hochladen, aber ich denke für testzwecke reichen auch gepaintete-Bitmaps ^_^.

Cu

Sparx

BeitragFr, Dez 26, 2003 15:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry aber soeinen Code gucke ICH mir nicht an! Auch wen mein Programier stiel auch kagge sit, besser als das. Rueck den mal ein!
Und Was ist dabei eigentlich genau dein PROBLEM=??
User posted image
 

newkev

BeitragFr, Dez 26, 2003 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
zu dein erstes problem kann ich dir sagen benutz eine tile engine die eignet sich besser für sowas

tutorials gibts hier: http://www.robsite.de/tutorials.php?tut=blitzbasic

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group