Namenseingabe für spätere Highscoreliste??

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Desantes

Betreff: Namenseingabe für spätere Highscoreliste??

BeitragDo, Feb 12, 2004 14:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo alles zusammen.
Ich bin absoluter BB Neuling und muß jetzt für mein Studium nen Spiel proggen das nen Highscore Tabelle beinhalten muß.

Nun habe ich schon das Grundspiel und den Startbilschirm fertig, allerdings möchte ich jetzt auf dem Startbildschirm das der Spieler seinen Namen eingeben muß, damit ich den Namen nachher als Variable mit in die Highscore Tabelle übernehmen kann.
Am besten wäre es noch wenn man die Namenseingabe ziemlich in der Mitte des Bildes positionieren könnte.


Kann mir jemand sagen wie ich das verwirkliche?

Hier mal der sehr knappe quelltext der eigentlich nur das Image des Startbildes Lädt:

Graphics 640,480,16,2
SetBuffer = BackBuffer()

Name=LoadImage ("Nameneingabe.bmp")

DrawImage Name, Name_x, Name_y

WaitKey ()

End

Hip Teen

BeitragDo, Feb 12, 2004 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, ich denke mal du nimmst den Befehl input zur Eingabe. Dann benutzt du einfach voher den Befehl locate X,Y um Input an die Position X Y zu setzten zu setzten, z.B.Code: [AUSKLAPPEN]

Locate 300,240
Print "Wie ist dein Name?"
Locate 290,260
spielername$ = Input(" ")
 

Desantes

BeitragDo, Feb 12, 2004 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja genau das habe ich gebraucht, war wahrscheinlich ziemlich lächerlich für dich, trotzdem vielen Dank.

Ich habe das jetzt als Function eingebunden, nur bekomme ich am ende immer ILLEGAL MEMORY ADRESS zu hören.

Hier mal der noch unvollständige Quelltext, vielleicht findet ja jemand den Fehler.

Code: [AUSKLAPPEN]
Graphics 640,480,16,2 ;Grafik und Auflösung

AppTitle "Pong" ;Titel

SetBuffer BackBuffer() ; Buffer für die Grafik

BAll = LoadImage("Ball.bmp") ; Laden der Bilder
Computer=LoadImage ("Schläger.bmp")
Spieler=LoadImage("Schläger.bmp")

Computer_x=1 ;Variable und Position des Spielers
Computer_y=400
Computer_punktei=0 ;Punkte

Spieler_x=610    ;Variable und position des Players
Spieler_y=420
Spieler_punktei=0 ;Punkte

VelX = 5  ; Anfangsgeschwindigkeit
VelY = 5

BAll_x = 100  ; Ball Position
BAll_y = 100




While Not KeyHit(1) ;Ende des Spieles durch drücken von ESC



If  KeyDown (200) ;Schläger bewegung
     Computer_y=Computer_y-4
       If Computer_y<0 Then Computer_y=0 ; Prüfung ob BAll noch im Spielfeld
EndIf

If  KeyDown (208)
    Computer_y=Computer_y+4
       If Computer_y>400 Then Computer_y=400
EndIf

; Collison zwischen Schläger und Ball
If ImagesCollide(Computer,Computer_x,Computer_y,0,BAll,Ball_x,Ball_y,0) Then VelX= VelX-(2*VelX)
If ImagesCollide(BAll,Ball_x,Ball_y,0,Spieler,Spieler_x,Spieler_y,0) Then VelX= VelX-(2*VelX)

If BAll_x<1 Then Computer_punkti=Computer_punkti+10 ; Punktezähler des Players   
If Ball_x>600 Then Spieler_punkti=Spieler_punkti+10 ; Punktezähler des Enemy

If Computer_punkti=10 Then Name()    ;Spielende bei 5 Bällen im aus


If Spieler_y>400 Then Spieler_y=400 ; Bewegungsende des Player
If Spieler_y<0 Then Spieler_y=0     ; Nicht über den Rand hinaus gehen

random = Rand(1,10) ; Zufalls generator

If Ball_y>Spieler_y Then                ;
   If random = 1 Then Spieler_y=Spieler_y 
Else Spieler_y=Spieler_y-Rand(4,10)                     
EndIf

If Ball_y<Spieler_y Then 
   If random = 1 Then Spieler_y = Spieler_y
Else Spieler_y=Spieler_y+Rand(4,10)   
EndIf

Cls

 

; Laden des Designs für den Ball
DrawImage Ball,Ball_x,Ball_y

;Collsion mit den Rändern oder dem BAll
If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then Ball_x=Rand(50,300) Ball_y=Rand(60,400) VelX=Rand(5,8) VelY=Rand(5,8)   
If Ball_y<1 Or Ball_y>GraphicsHeight()-40 Then VelY =- VelY

;Modernisieren der Ball position
Ball_x = BAll_x + VelX
Ball_y = Ball_y + VelY

DrawImage Computer,Computer_x,Computer_y ; Design des Computers

DrawImage Spieler,Spieler_x,Spieler_y    ; Design des Enemy

; Tabellen Position
Text 300,0,Spieler_punkti,1 
Text 340,0,Computer_punkti,1

; Tabellen Text
Locate 220,1
Print "Player"

Locate 370,1
Print"Hall 3000"

; Buffer
Flip
Wend ; Wiederholung der While Schleife()


End ;Ende

;Spielende und Namenseingabe für die Highscore




Function Name() ; Function der Namenseingabe

Graphics 640,480,16,2
SetBuffer = BackBuffer()

Name=LoadImage ("Nameneingabe.bmp")

DrawImage Name, Name_x, Name_y


Locate 200,350      ;Namenseingabe
spielername$ = Input(" ")    ;Variablenname des Spielers

End Function







Mfg

Sascha
 

Edlothiol

BeitragDo, Feb 12, 2004 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
SetBuffer = Backbuffer()
Muss natürlich
SetBuffer(BackBuffer())
heißen. In der Name() - Funktion.
So ist der Code gut lesbar Rolling Eyes Aber für sowas gibts auch ein code - Tag.
Ausserdem musst du die Funktion Name() auch aufrufen, oder hab ich da was übersehen?

Hip Teen

BeitragDo, Feb 12, 2004 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
steht da zwar SetBuffer BackBuffer() was auch korrekt ist, aber egal. 1. Schreib den Code in den entsprechenden Tags, 2. Sind die Bilder im gleichen verzeichnis wie der Code? hast du den code auch gespeichert?
 

Edlothiol

BeitragDo, Feb 12, 2004 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, tut es. Wie ich schon sagte, in der Name() - Funktion.
 

Desantes

BeitragDo, Feb 12, 2004 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, die Bilder liegen im gleichen Verzeichniss und das Spiel läuft auch bis zum ende des Codes durch, nur bekomme ich dann am ende diese Fehlermeldung "Illegal Memory Adress"

Das mit den Tags tut mir leid, dachte nur man könnte es dann besser auseinanderhalten, sorry.
Kann es vielleicht daran liegen das ich einfach noch keine ende für den Ablauf eingebaut habe und die Variable nicht weiter übergebven wird?

Mfg

Sascha
 

Desantes

BeitragDo, Feb 12, 2004 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe jetzt SetBuffer (BackBuffer()) unter Function Name()
eingefügt . Hat aber leider keinerlei veränderung bewirkt.


Mfg

Sascha

Hip Teen

BeitragDo, Feb 12, 2004 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Fehler liegt in der Funktion
Code: [AUSKLAPPEN]
    

Function Name() ; Function der Namenseingabe

Graphics 640,480,16,2
SetBuffer = BackBuffer()

Name=LoadImage ("Nameneingabe.bmp")

DrawImage Name, Name_x, Name_y


Locate 200,350 ;Namenseingabe
spielername$ = Input(" ") ;Variablenname des Spielers

End Function [/color]

und zwar folgende Zeilen
Code: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer = BackBuffer()

Da du den Grafikmodus neu setzt, werden die Bilder aus dem Grafikspeicher gelöscht. Lösch die Zeilen, dann geht es

@Edlothiol
NEIN, du musst das nicht in Klammern setzen, ich hab das noch nie gemacht und bei mir geht es ja auch. Und folgender Code ist von Blitzbase.de (hoffe du glaubst dem)
Code: [AUSKLAPPEN]
GRAPHICS 640,480,0,1
SETBUFFER BACKBUFFER()
WHILE KEYDOWN(1)=0
   COLOR 0,0,0
   RECT 0,0,640,480
   COLOR 255,255,255
   Winkel=(Winkel+2) MOD 360
   Rad=(Rad+1) MOD 360
   FOR i=1 TO 10
      X=320+COS(Winkel+i*36)*SIN(Rad)*220
      Y=240+SIN(Winkel +i*36)*SIN(Rad)*200
      OVAL X-20,Y-20,40,40,1
   NEXT
   FLIP
WEND
END

kannst ja nachschauen, du brauchst nur am Ende die Klammern () setzen, aber nicht um Backbuffer
 

Desantes

BeitragDo, Feb 12, 2004 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach genial ,jetzt haut es hin. Vielen, Dank !!!

Die Fehlermeldung ist wech.
Nun taucht aber schon das nächste Problem auf..

Wenn ich nu einen Namen eingegeben habe, dann bleibt das Bild stehen und nur der Name wird gelöscht.Scheint so als wenn er die schleife denn wiederholt. Gibts dafür auch ne Lösung

Im Ursprungsproggie war es so das nach der Nameneingabe das Programm beendet wurde.

Mfg Sascha
 

Edlothiol

BeitragDo, Feb 12, 2004 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das meinte ich ja auch gar nicht! Ich meinte dass da dieses Gleichzeichen, also =, nicht hingehörte! Die Klammern hab ich nur gesetzt, weil ich sie eben setze!
 

Desantes

BeitragDo, Feb 12, 2004 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal vorab bevor ich es vergesse. Die Unterstützung die man hier bekommt ist wirklich wahnsin, nochmal vielen Dank.

So nu zurück zu dem Prob. ICh hab jetzt das = entfernt und alles läuft wieder wie vorher. Nur hat noch das End am ende der Function gefehlt damit das Proggie dort zu ende ist.

Vielen Dank nochmal . Ich werde wenn ich darf gerne nochmal auf dich zurück kommen.

Mfg

Sascha

Hip Teen

BeitragDo, Feb 12, 2004 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@Edlothiol Da war nie ein =. Da musst du was falsch gesehen haben.
Edit: Ach du meinst das Setbuffer. Sorry, hab das übersehen.

@Desantes Wenn ich das richtig sehe soll ja wenn die Funktion name aufgerufen wird die Highscore Liste angezeigt werden und dann das Spiel beendet oder zum Hauptmenu springen (sollte ein solches existieren). Also rufst du die, wenn du eine solche erstellt hast, Funktion highscore() auf oder pinselst das einfach so auf den Bildschirm. Und danach beendest du entweder das Programm per Code: [AUSKLAPPEN]
end
oder rufst das Menu auf. So wie es jetzt machst setzt das Programm wieder in der Hautschleife an.
 

Desantes

BeitragDo, Feb 12, 2004 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich bin jetzt schon nen ganzes Stück weiter gekommen.
Nun läuft vorab das Menü, wenn ich dann im Menü die Taste 1 drücke beginnt das Spiel.
Nach ende des SPiel´s kommt die Namens eingabe und Hier liegt der Hund begraben.
Komischerweise steht bei der Namenseingabe immer automatisch als erstes Zeichen eine 1, die ich zwar mit Backspace dann löschen kann um meinen richtigen Namen einzutragen , die aber trotzdem da nicht zu sein hat.

Vielleicht könnt ihr mir nochmal weiterhelfen.

Quelltext:


Code: [AUSKLAPPEN]

;Start Menü


SetBuffer BackBuffer()

Graphics 640,480,16,2

Hintergrund = LoadImage("Startbild.bmp") ;Laden des Startbilschirmes

DrawImage Hintergrund,Hintergrund_y,Hintergrund_x

While Not KeyHit(1)

If KeyDown(2) Then Spiel


Wend





;Das eigentliche Spiel

Function Spiel()

Graphics 640,480,16,2 ;Grafik und Auflösung

AppTitle "Pong" ;Titel

SetBuffer BackBuffer() ; Buffer für die Grafik

BAll = LoadImage("Ball.bmp") ; Laden der Bilder
Computer=LoadImage ("Schläger.bmp")
Spieler=LoadImage("Schläger.bmp")

Computer_x=1 ;Variable und Position des Spielers
Computer_y=400
Computer_punktei=0 ;Punkte

Spieler_x=610    ;Variable und position des Players
Spieler_y=420
Spieler_punktei=0 ;Punkte

VelX = 5  ; Anfangsgeschwindigkeit
VelY = 5

BAll_x = 100  ; Ball Position
BAll_y = 100


While Not KeyHit(1) ;Ende des Spieles durch drücken von ESC



If  KeyDown (200) ;Schläger bewegung
     Computer_y=Computer_y-4
       If Computer_y<0 Then Computer_y=0 ; Prüfung ob BAll noch im Spielfeld
EndIf

If  KeyDown (208)
    Computer_y=Computer_y+4
       If Computer_y>400 Then Computer_y=400
EndIf

; Collison zwischen Schläger und Ball
If ImagesCollide(Computer,Computer_x,Computer_y,0,BAll,Ball_x,Ball_y,0) Then VelX= VelX-(2*VelX)
If ImagesCollide(BAll,Ball_x,Ball_y,0,Spieler,Spieler_x,Spieler_y,0) Then VelX= VelX-(2*VelX)

If BAll_x<1 Then Computer_punkti=Computer_punkti+10 ; Punktezähler des Players   
If Ball_x>600 Then Spieler_punkti=Spieler_punkti+10 ; Punktezähler des Enemy



If Spieler_y>400 Then Spieler_y=400 ; Bewegungsende des Player
If Spieler_y<0 Then Spieler_y=0     ; Nicht über den Rand hinaus gehen

random = Rand(1,10) ; Zufalls generator

If Ball_y>Spieler_y Then                ;
   If random = 1 Then Spieler_y=Spieler_y 
Else Spieler_y=Spieler_y-Rand(4,10)                     
EndIf

If Ball_y<Spieler_y Then 
   If random = 1 Then Spieler_y = Spieler_y
Else Spieler_y=Spieler_y+Rand(4,10)   
EndIf

Cls

 

; Laden des Designs für den Ball
DrawImage Ball,Ball_x,Ball_y

;Collsion mit den Rändern oder dem BAll
If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then Ball_x=Rand(50,300) Ball_y=Rand(60,400) VelX=Rand(5,8) VelY=Rand(5,8)   
If Ball_y<1 Or Ball_y>GraphicsHeight()-40 Then VelY =- VelY

;Modernisieren der Ball position
Ball_x = BAll_x + VelX
Ball_y = Ball_y + VelY

DrawImage Computer,Computer_x,Computer_y ; Design des Computers

DrawImage Spieler,Spieler_x,Spieler_y    ; Design des Enemy

; Tabellen Position
Text 300,0,Spieler_punkti,1 
Text 340,0,Computer_punkti,1

; Tabellen Text
Locate 220,1
Print "Player"

Locate 370,1
Print"Hall 3000"

   If Computer_punkti=10 Then Name     ;Spielende bei 1 Ball im aus

; Buffer
Flip
Wend ; Wiederholung der While Schleife()


End Function






;Spielende und Namenseingabe für die Highscore


Function Name() ; Function der Namenseingabe

Graphics 640,480,16,2
SetBuffer  BackBuffer()

Name=LoadImage ("Nameneingabe.bmp")

DrawImage Name, Name_x, Name_y


Locate 200,350            ;Namenseingabe
spielername$ = Input(" ")    ;Variablenname des Spielers


End                  ; Spielende - Sprung aus der Schleife (muß später versetzt werden)
                  
                  
 
End Function




Mfg

Desantes
 

Edlothiol

BeitragDo, Feb 12, 2004 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuchs mal mit FlushKeys() am Anfang der Name - Funktion. Damit wird der Key - Buffer gelöscht, So dass eigentlich keine Tastendrücke mehr dableiben sollten.
Ausserdem würd ich sowas benutzen:
Code: [AUSKLAPPEN]
If WaitKey() = 27 Then
  End
End If

Dadurch führt jede Taste zum Spiel, nur mit Escape wird beendet. (Der ASCII - Code von Escape scheint 27 zu sein, das liefert auf jeden Fall WaitKey bei mir zurück.)
 

Desantes

BeitragDo, Feb 12, 2004 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo hat geklappt. Vielen DAnk

P.s. Das ewige gefrage nervt bestimmt ,oder?


Desantes
 

dubitat

BeitragDo, Feb 12, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm ist doch ganz logisch oder? der pc hat sich gemerkt, das am anfang(um das spiel zu starten) die taste 1 gedrückt wurde... du brauchst halt nur flsuhkeys... aber wenigstens bist du einer von denen die wissen was sie wollen und jenachdem auch ihre fragen so formulieren... endlich mal einer:D

cu

dubitat

P.S. das soll nur ne kleine logische erklärung sein...
Erare humanum est - Irren ist Menschlich

Triton

BeitragFr, Feb 13, 2004 2:28
Antworten mit Zitat
Benutzer-Profile anzeigen
NImm bitte das code-tag wenn du das nächste mal Codes mitpostest.

Hab keine Lust das jedes mal ändern zu müssen.
 

Desantes

BeitragFr, Feb 13, 2004 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank nochmal für den Hinweis ich werde es ab sofort beachten.

Nun zu meinem nächsten problem.
Bis jetzt läuft mein Spiel durch eure Hilfe ziemlich Problemlos.
Nun möchte ich das ich die Punkte die der Spieler erziehlt hat am Ende des Spieles als VAriable haben damit ich es später in eine Highscoretabelle
bzw. Bubble sort einfügen kann, wie kann ich das nu verwirklichen?

Mfg Desantes


Code: [AUSKLAPPEN]
Start Menü


SetBuffer BackBuffer()

Graphics 640,480,16,2

Hintergrund = LoadImage("Startbild.bmp") ;Zuweisen des Hintergrundbildes

DrawImage Hintergrund,Hintergrund_y,Hintergrund_x  ;Starten des Hintergrundbildes

While Not KeyHit(1)

If KeyDown(2) Then Spiel
If KeyDown (1) Then Menü
If KeyDown (5) Then End

Wend





;Das eigentliche Spiel

Function Spiel()

Graphics 640,480,16,2 ;Grafik und Auflösung

AppTitle "Pong" ;Titel

SetBuffer BackBuffer() ; Buffer für die Grafik

BAll = LoadImage("Ball.bmp") ; zuweisen der Bilder
Computer=LoadImage ("Schläger.bmp")
Spieler=LoadImage("Schläger.bmp")

Spieler_x=30 ;Variable und Position des Spielers
Spieler_y=400
Spieler_punktei%=0 ;Punkte

Computer_x=610    ;Variable und position des Computers
Computer_y=420
Computer_punktei%=0 ;Punkte

SpeedX = 7  ; Anfangsgeschwindigkeit
SpeedY = 7

BAll_x = 50  ; Ball Position
BAll_y = 100


While Not KeyHit(1) ;Ende des Spieles durch drücken von ESC




If  KeyDown (200) ;Schläger bewegung des Spielers
     Spieler_y=Spieler_y-4
       If Spieler_y<0 Then Spieler_y=0
EndIf

If  KeyDown (208)
    Spieler_y=Spieler_y+4
       If Spieler_y>400 Then Spieler_y=400
EndIf

; Collison zwischen Schläger und Ball
If ImagesCollide(Spieler,Spieler_x,Spieler_y,0,BAll,Ball_x,Ball_y,0) Then SpeedX= SpeedX-(2*SpeedX)
If ImagesCollide(BAll,Ball_x,Ball_y,0,Computer,Computer_x,Computer_y,0) Then SpeedX= SpeedX-(2*SpeedX)

If BAll_x<1 Then Spieler_punkti=Spieler_punkti%+10 ; Punktezähler des Players   
If Ball_x>600 Then Computer_punkti=Computer_punkti%+10 ; Punktezähler des Computer



If Computer_y>400 Then Computer_y=400 ; Bewegungsende des Computer
If Computer_y<0 Then Computer_y=0     ; Nicht über den Rand hinaus gehen

random = Rand(1,10) ; Zufalls generator

If Ball_y>Computer_y Then                ;
   If random = 1 Then Computer_y=Computer_y 
Else Computer_y=Computer_y-Rand(4,10)                     
EndIf

If Ball_y<Computer_y Then 
   If random = 1 Then Computer_y = Computer_y
Else Computer_y=Computer_y+Rand(4,10)   
EndIf

Cls

 

; Laden des Designs für den Ball
DrawImage Ball,Ball_x,Ball_y

;Collsion mit den Rändern oder dem BAll
If Ball_x<1 Or Ball_x>GraphicsWidth()-40 Then Ball_x=Rand(50,300) Ball_y=Rand(60,400) VelX=Rand(5,8) VelY=Rand(5,8)   
If Ball_y<1 Or Ball_y>GraphicsHeight()-40 Then SpeedY =- SpeedY

;Modernisieren der Ball position
Ball_x = BAll_x + SpeedX
Ball_y = Ball_y + SpeedY

DrawImage Spieler,Spieler_x,Spieler_y ; Design des Spielers

DrawImage Computer,Computer_x,Computer_y    ; Design des Computer

; Tabellen Position
Text 300,0,Computer_punkti%,1 
Text 340,0,Spieler_punkti%,1

; Tabellen Text
Locate 220,1
Print "Player"

Locate 370,1
Print"Hall 3000"

   If Spieler_punkti%=30 Then Name     ;Spielende bei 1 Ball im aus

; Buffer
Flip
Wend ; Wiederholung der While Schleife()


End Function






;Spielende und Namenseingabe für die Highscore


Function Name() ; Function der Namenseingabe
FlushKeys()
Graphics 640,480,16,2
SetBuffer  BackBuffer()

Name=LoadImage ("Nameneingabe.bmp")

DrawImage Name, Name_x, Name_y


Locate 200,350            ;Namenseingabe
spielername$ = Input(" ")    ;Variablenname des Spielers

End                ; Spielende - Sprung aus der Schleife (muß später versetzt werden)
                  
                  
 
End Function


; Function des Hauptmenüs, bis jetzt noch ohne Funktion

Function Menü()

SetBuffer BackBuffer()

Graphics 640,480,16,2

Hintergrund = LoadImage("Startbild.bmp") ;Laden des Startbilschirmes

DrawImage Hintergrund,Hintergrund_y,Hintergrund_x

While Not KeyHit(1)


If KeyDown(2) Then Spiel
If KeyDown (1) Then Menü
If KeyDown (5) Then End

Wend

End Function
 

Edlothiol

BeitragFr, Feb 13, 2004 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast doch schon eine Variable für die Spielerpunkte, oder? (spieler_punktei%)
Was willst du denn damit machen?

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group