Erstes mal Programmiert

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Miro5000

Betreff: Erstes mal Programmiert

BeitragMo, Mai 08, 2006 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Da ich jetzt seit 2 Wochen Blitz Basic lerne, habe ich auch mein erstes Spiel programmiert. Naja sofern man das Spiel nennen kann. Schnick, Schnack, Schnuck. Nun würde ich gerne Verbesserungsvorschläge von euch bekommen.

Code: [AUSKLAPPEN]


Graphics 640,480
SetBuffer BackBuffer()

Global Spielerhand1$="Schere"
Global Spielerhand2$="Schere"
Global Computer
Global Spielerscore1=0
Global Spielerscore2=0
Global Rundenzeit=20
Global Runde=1
SeedRnd MilliSecs()

Repeat
Cls
Delay 300

If KeyHit(2) And rundenzeit>0 Then Spielerhand1="Schere"
If KeyHit(3) And rundenzeit>0 Then Spielerhand1="Stein"
If KeyHit(4) And rundenzeit>0 Then Spielerhand1="Papier"

If rundenzeit>-5 Then Rundenzeit=Rundenzeit-1
If rundenzeit=0 And Spielerhand1="Schere" And Spielerhand2="Schere" Then Text 200,200,"Unentschieden"
If rundenzeit=0 And Spielerhand1="Schere" And Spielerhand2="Stein" Then Text 200,200,"Verloren Noob":Spielerscore2=Spielerscore2+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Schere" And Spielerhand2="Papier" Then Text 200,200,"Zufalls Sieg..":Spielerscore1=Spielerscore1+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Stein" And Spielerhand2="Schere" Then Text 200,200,"Zufalls Sieg..":Spielerscore1=Spielerscore1+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Stein" And Spielerhand2="Stein" Then Text 200,200,"Unentschieden"
If rundenzeit=0 And Spielerhand1="Stein" And Spielerhand2="Papier" Then Text 200,200,"Verloren Noob":Spielerscore2=Spielerscore2+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Papier" And Spielerhand2="Schere" Then Text 200,200,"Verloren Noob":Spielerscore2=Spielerscore2+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Papier" And Spielerhand2="Stein" Then Text 200,200,"Zufalls Sieg..":Spielerscore1=Spielerscore1+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Papier" And Spielerhand2="Papier" Then Text 200,200,"Unentschieden"
Computer=Rnd(3)
If Computer=1 Then Spielerhand2="Schere"
If Computer=2 Then Spielerhand2="Stein"
If Computer=3 Then Spielerhand2="Papier"
If rundenzeit=-5 Then rundenzeit=10


Text 0,0,"1.Schere,2.Stein,3.Papier"
Text 300,0,Spielerscore1+":"+Spielerscore2
Text 10,300,Spielerhand1
Text 300,30,Rundenzeit
Text 500,300,Spielerhand2

Flip
Until KeyDown(1)


Bitte alles was so verbesserungswürdig is sagen da ich mir sofort alles richtig aneignen möchte wie zb der Aufbau
  • Zuletzt bearbeitet von Miro5000 am Mo, Mai 08, 2006 18:53, insgesamt einmal bearbeitet

Kryan

BeitragMo, Mai 08, 2006 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
was einem ins auge sticht:

delay 300 Shocked
nimm lieber waittimer und so...

[erledigt]
dann...hast du überhaupt irgendwo den grafik-modus gesetzt??
also graphics ... ??

weil sonst bringt dir flip auch nichts Wink
und natürlich musst du auch noch vor der hauptschleife ein SetBuffer BackBuffer() machen
[/erledigt]

edit: hab nochmal über dem code geschaut, und da is ja n graphics Embarassed
viel spaß noch und willkommen im forum Very Happy
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Miro5000

BeitragMo, Mai 08, 2006 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ok sorry hab code zufrüh eingegeben.. habs mal ediert.

dann versuch ich mal waittimer einzufügen ; )

Danke für deine tipps^^

Kryan

BeitragMo, Mai 08, 2006 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
oder du bastelst dir selbst einen timer
für einen selbstgebastelten timer brauchst du zwei zeitpunkte

nehmen wir mal als beispiel eine stopuhr, damit du dir das vorstellen kannst:
1. du drückst auf stopuhr starten -> start_millisecs=MilliSecs()
2. du drückst auf stopuhr anhalten -> If MilliSecs()-start_millisecs>300 Then
3. stopuhr wieder neu starten -> start_millisecs=MilliSecs()

Im Code in etwa:


Code: [AUSKLAPPEN]

...
start_millisecs=MilliSecs()
Repeat
 ...
 If MilliSecs()-start_millisecs>300 Then
  start_millisecs=MilliSecs()
  If rundenzeit>-5 Then Rundenzeit=Rundenzeit-1
 End If
 ...
Until KeyHit(1)


ahja: präg dir diese vorgehensweise gut ein, denn man benutzt sie sehr sehr häufig, wenn es zum beispiel um animationen oder ähnliches geht
schau es dir an , solange bist du es verstehst Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Miro5000

BeitragMo, Mai 08, 2006 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Das is ja spitze Smile

Habs erfolgreich eingebaut und is wirklich viel angenehmer mit Millisecs()

Wäre es gut für mich wenn ich jetzt noch versuche da ein Multiplayer reinzumachen .. oder wäre das zu schwer für einen neuling wie mich ?

Kryan

BeitragMo, Mai 08, 2006 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
mach doch erstmal paar spiele mit netten grafiken und so...Beispiele

JumpnRun, Snake, PacMan, Moorhuhn etc.

mehrspieler erst bisschen später Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Hip Teen

BeitragMo, Mai 08, 2006 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal vorweg: Für einen Anfänger ist es nicht schlecht, was du programmiert hast. Wenn etwas zu hart klingt, ist es nicht so gemeint Wink

Erstmal würd ich Funktionen benutzen. Auch wenn das kein wirklich großes Programm ist, bringen Funktionen mehr Übersicht.
Dann würd ich den Code auch noch optisch strukturieren, einrücken usw.

Nun mal spezieller zum Code: Du hast teilweise viel zu viele abfragen drinnen. Beispielsweise der Code hier:
Code: [AUSKLAPPEN]
If rundenzeit=0 And Spielerhand1="Schere" And Spielerhand2="Schere" Then Text 200,200,"Unentschieden"
If rundenzeit=0 And Spielerhand1="Schere" And Spielerhand2="Stein" Then Text 200,200,"Verloren Noob":Spielerscore2=Spielerscore2+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Schere" And Spielerhand2="Papier" Then Text 200,200,"Zufalls Sieg..":Spielerscore1=Spielerscore1+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Stein" And Spielerhand2="Schere" Then Text 200,200,"Zufalls Sieg..":Spielerscore1=Spielerscore1+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Stein" And Spielerhand2="Stein" Then Text 200,200,"Unentschieden"
If rundenzeit=0 And Spielerhand1="Stein" And Spielerhand2="Papier" Then Text 200,200,"Verloren Noob":Spielerscore2=Spielerscore2+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Papier" And Spielerhand2="Schere" Then Text 200,200,"Verloren Noob":Spielerscore2=Spielerscore2+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Papier" And Spielerhand2="Stein" Then Text 200,200,"Zufalls Sieg..":Spielerscore1=Spielerscore1+1:runde=runde+1
If rundenzeit=0 And Spielerhand1="Papier" And Spielerhand2="Papier" Then Text 200,200,"Unentschieden"

Wenn du (um mal die außen vor zu lassen, das Problem auf andere Weise zu lösen) um die ganzen Ifs ein "If rundenzeit=0" gepackt hättest, müsstest du nicht das bei jedem abfragen => spart aufwand für den Rechner. Auch ein "Else If" wäre an dieser Stelle nicht verkehrt gewesen.
Btw, eine erste Abfrage ob spielerhand1 = spielerhand2 ist, hätte schonmal die Unentschieden abgefangen.
Die Stelle
Code: [AUSKLAPPEN]
Computer=Rnd(3)
If Computer=1 Then Spielerhand2="Schere"
If Computer=2 Then Spielerhand2="Stein"
If Computer=3 Then Spielerhand2="Papier"

Sieht durch Select Case einfach übersichtlicher aus. Daraus wird dann:
Code: [AUSKLAPPEN]

Select Rnd(3)
   Case 1
      spielerhand2 = "Schere"
   Case 2
      spielerhand2 = "Stein"
   Case 3
      spielerhand2 = "Papier"
End Select

sieht imo besser aus. Ich hätte aber einfach die Zahlen beibehalten. Also für Schere 1, für Stein 2 und Papier 3. Hätte alles einfacher gelöst und läuft auch schneller.

Das waren so ein paar Sachen, die mir spontan so auffielen. Fragt sich halt nur, ob sich mehr Aufwand bei so nem winzigen Programm lohnt Wink[/code]
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

Miro5000

BeitragMo, Mai 08, 2006 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke euch beiden... werde auf jedenfall noch die beiden Sachen verändern mit dem else if und select ; )
 

Miro5000

BeitragMo, Mai 08, 2006 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Also hab das mal mit dem Case ausprobiert aber leider funktioniert das nicht so wie ich es mir erhoft habe.

Code: [AUSKLAPPEN]

Select Rnd(3)
 Case 1
 Spielerhand2="Schere"
 Case 2
 Spielerhand2="Stein"
 Case 3
 Spielerhand2="Papier"
End Select


Er bleibt anscheinend immer auf Schere und wenn die Runde zuende ist gibt er den Sieger ca 180 Punkte... :/

Kryan

BeitragMo, Mai 08, 2006 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
das musst du aber auch zwischen
if millisecs()-... THen und EndIf
packen Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Miro5000

BeitragMo, Mai 08, 2006 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wärs mit nem Beispiel ? Smile

Hab jetzt

Code: [AUSKLAPPEN]
 
Select Rnd(3)
 If Case 1 Then Spielerhand2="Schere"
 If Case 2 Then Spielerhand2="Stein"
 If Case 3 Then Spielerhand2="Papier"
End Select


das ist aber auch falsch Sad

Kryan

BeitragMo, Mai 08, 2006 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
*räusper* eigentlich so:

Code: [AUSKLAPPEN]

...
start_millisecs=MilliSecs()
Repeat
 ...
 If MilliSecs()-start_millisecs>300 Then
  start_millisecs=MilliSecs()
  If rundenzeit>-5 Then Rundenzeit=Rundenzeit-1
  Select Rnd(3)
   Case 1 Spielerhand2="Schere"
   Case 2 Spielerhand2="Stein"
   Case 3 Spielerhand2="Papier"
  End Select 
 End If
 ...
Until KeyHit(1)
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Hip Teen

BeitragMo, Mai 08, 2006 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ups
ersetz mal rnd(3) durch rand(3). Hab nicht aufgepasst, dass du die falsche Funktion benutzt hast. rnd erzeugt float Zahlen, rand Integer. Du brauchst letzteres Wink
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger"
 

Miro5000

BeitragMo, Mai 08, 2006 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah super nu klappts danke ; )

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group