Namenseingabe für spätere Highscoreliste??
Übersicht

DesantesBetreff: Namenseingabe für spätere Highscoreliste?? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
SetBuffer = Backbuffer()
Muss natürlich SetBuffer(BackBuffer()) heißen. In der Name() - Funktion. So ist der Code gut lesbar ![]() Ausserdem musst du die Funktion Name() auch aufrufen, oder hab ich da was übersehen? |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Doch, tut es. Wie ich schon sagte, in der Name() - Funktion. | ||
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich habe jetzt SetBuffer (BackBuffer()) unter Function Name()
eingefügt . Hat aber leider keinerlei veränderung bewirkt. Mfg Sascha |
||
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jo hat geklappt. Vielen DAnk
P.s. Das ewige gefrage nervt bestimmt ,oder? Desantes |
||
dubitat |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
NImm bitte das code-tag wenn du das nächste mal Codes mitpostest.
Hab keine Lust das jedes mal ändern zu müssen. |
||
Desantes |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du hast doch schon eine Variable für die Spielerpunkte, oder? (spieler_punktei%)
Was willst du denn damit machen? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group