Erstes mal Programmiert
Übersicht

Miro5000Betreff: Erstes mal Programmiert |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
was einem ins auge sticht:
delay 300 ![]() nimm lieber waittimer und so... [erledigt] dann...hast du überhaupt irgendwo den grafik-modus gesetzt?? also graphics ... ?? weil sonst bringt dir flip auch nichts ![]() 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 ![]() viel spaß noch und willkommen im forum ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
Miro5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok sorry hab code zufrüh eingegeben.. habs mal ediert.
dann versuch ich mal waittimer einzufügen ; ) Danke für deine tipps^^ |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
Miro5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das is ja spitze ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
mach doch erstmal paar spiele mit netten grafiken und so...Beispiele
JumpnRun, Snake, PacMan, Moorhuhn etc. mehrspieler erst bisschen später ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
![]() |
Hip Teen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
Miro5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok danke euch beiden... werde auf jedenfall noch die beiden Sachen verändern mit dem else if und select ; ) | ||
Miro5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
das musst du aber auch zwischen
if millisecs()-... THen und EndIf packen ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
Miro5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie wärs mit nem Beispiel ? ![]() 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 ![]() |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
*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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Spruch der Woche: "Ahh, ein neues Gesicht?!" - "Nein, das hab ich schon länger" |
Miro5000 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ah super nu klappts danke ; ) | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group