Problem beim Genger erzeugen in 2D

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Maikson_18

Betreff: Problem beim Genger erzeugen in 2D

BeitragFr, Dez 18, 2009 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
hey Leute bin relativ neu in dem Gebiet
ich bin grad dabei nen simples spiel zu programmieren wo man mit der maus ein ball steuert und von oben immer steine runter kommen sollen

jetz hab ich aber ein problem
und zwar bekomm ich das mit den steinen nich hin :S

ich wollte das mit type realisieren


BlitzBasic: [AUSKLAPPEN]
Global xmax=800,ymax=600
Graphics xmax,ymax,32,1
SeedRnd MilliSecs()
Global xball=xmax/2
Global yball=ymax/2
SeedRnd MilliSecs()
Global start=0

Type Stein
Field xstein
Field ystein
End Type



Global frametimer = CreateTimer(100)
SetBuffer = BackBuffer()

;Deklaration von Ball
Global ball = LoadImage("ball.bmp")
MidHandle ball

;Deklaration von Wand
Global wand = LoadImage("wand.bmp")
Global wand2 = LoadImage("wand2.bmp")

;Deklaration von Stein
Global stein = LoadImage("stein.bmp")



;Hauptschleife
Repeat
WaitTimer (frametimer)




DrawImage ball,MouseX(),MouseY()

;Senkrechte wand
For i=0 To 1
For j=0 To ymax/40
If i=0 Then x=0 Else x=xmax-40
DrawImage wand,x,j*40
Next
Next

;Waagerecht Wand
For i=0 To 1
For j=0 To (ymax+80)/40
If i=0 Then y=0 Else y=ymax-40
DrawImage wand2,(j*40)+40,y
Next
Next


If start=80 Then
DrawStein()
EndIf


For s.Stein Each Stein
s\ystein=s\ystein+1
DrawImage stein,s\xstein,s\ystein
Next




start=start+1
Flip
Cls
Until KeyHit(1);Schleifenende Durch Esc drücken


Function DrawStein()
s.Stein = New Stein
s\xstein=xmax/2
s\ystein=0
DrawImage stein,s\xstein,s\ystein
End Function


WaitKey
End



ich hoffe das ich das im ansatz schon mal richtig hab

und hoffe das ihr mir helfen könnt


mfg Maikson

Bura.Tino

BeitragFr, Dez 18, 2009 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde Dir gerne helfen, aber ich weigere mich Deinen Spagetticode zu enziffern. Also gewöhn Dir, auch in Deinem eigenen Interesse, einen ordentlichen Programmierstil an -> Einrücken ist das Zauberwort !

Außerdem solltest Du Dein Problem genauer beschreiben, denn ein 'Ich kriege es nicht hin' ist keine qualifizierte Aussage und so wird Dir da auch niemand helfen ! Ich verweise Dich da mal an die Forumregeln.
Rolling Eyes <- Ich liebe dieses Smilie ! Very Happy
 

Maikson_18

BeitragFr, Dez 18, 2009 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
na ja der code sieht im editor doch etwas anders aus
wegen thema einrücken

und mein problem ist dass wenn ich das programm builden will immer die Fehlermeldung "expecting variable assigment" kommt. Und denn wird der Corsur auf die For each Schleife gelegt


For s.Stein Each Stein
s\ystein=s\ystein+1
DrawImage stein,s\xstein,s\ystein
Next

Midimaster

BeitragFr, Dez 18, 2009 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@Bura.Tino
Also nach Spaghetticode sieht das ja nun wirklich nicht aus! Alle klar strukturiert! Was willst Du?

@Maikson_18
Das sieht richtig gut aus!

An welcher Stelle im Code erstelltst Du denn neue Steine? Ich glaube, genau da ist der Fehler. Es wird nur 1x ein Stein erstellt, wenn START genau 80 ist, oder? Wharscheinlich müsste man in DrawStein ein "START=0" setzen oderdie If-Zeile in IF (START MOD 80) = 0 ändern.

Die DrawStein würe ich übrigens eher CreateStein nennen, denn das tut sie eigentlich. Der Zeichenbefehl gehört dann da auch nicht rein, wird ja eh beim nächsten Durchgang gemalt.

Megamag

BeitragFr, Dez 18, 2009 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Es muss heißen
Code: [AUSKLAPPEN]
For s.Stein = Each Stein

Du hast einfach ein = vergessen Wink

Achja, und wo wir schonmal dabei sind.
Benutze in Verbindung mit einem Timer am besten "Flip 0".
SeedRnd brauchst du nur einmal machen.
Pack die For Schleife am besten in eine Update-Funktion.
Und bei SetBuffer kommt gleube ich kein "=" hin. Ich weiß aber nicht, ob's auch mit geht.

@Bura.Tino:
Sein Code war gut strukturiert und eingerückt. Ich verstehe wirklich nicht, was du für ein Problem hast oO
  • Zuletzt bearbeitet von Megamag am Fr, Dez 18, 2009 19:27, insgesamt 2-mal bearbeitet
 

Maikson_18

BeitragFr, Dez 18, 2009 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
jetz hatte ichs olange immer rumgeämdert das ich wohl vergessen hab das start=0 wieder reinzubauen Rolling Eyes

das problem ist das ich ganricht erst zum ausführen des Programms komme
weil mir halt vorher die Fehlermeldung "expicting variable assignment" kommt
und auf die For each Schleife verweist

geht das überhaupt so? "For s.Stein each Stein"
selbst wenn ich das start=0 noch nich hätte würde ja wenigstens ein Stein kommen :S
 

Maikson_18

BeitragFr, Dez 18, 2009 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
aah danke Smile danke

jetz funzt es Smile

und jetz hab ich das nächste Porblem
wenn ich zufallszahlen für die x-achse
wenn ich SeedRnd MilliSecs() benutze sind die zahlen immer 5stellig oder mehr
aber mein bildschirm is ja nur 800 breit

geht das irgendwie das man sich "von bis" Zahlen ausgeben lassen kann?

Megamag

BeitragFr, Dez 18, 2009 19:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
rnd(100,200)

Erzeugt eine (Float) Zahl zwischen 100 und 200. Wink
 

Maikson_18

BeitragFr, Dez 18, 2009 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ah danke Smile

denn kann ich jetz dem ganzen dem feinschliffgeben Smile

danke an alle die mir so schnell helfen konnten

und ein extra danke an midimaster das du mein code nich für spagetti hälst ^^

MFG Maikson

Midimaster

BeitragFr, Dez 18, 2009 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hätte auch noch einen tipp:

Graphics sollte während der Testphase nicht schon auf Fullscreen gehen. Es ist viel bequemer parallel den Quelltext zu sehen, bzw den Debugger noch erreichen zu können.

Ich denke, dass die meisten Jung-Proggis viel zu viel Code schreiben, bevor sie das Ganze zum ersten Mal starten. Dann können leicht ein Dutzend gleichzeitige Fehler die Fehlersuche echt schwer machen. Hier mal ein Beispiel wie ich Deinen Code reduziert habe, um den Fehler zu finden. Mit dem WAITKEY geht es Step-By-Step vorwärts...

Code: [AUSKLAPPEN]
Global xmax=800,ymax=600
Graphics 800,600,32,2

SeedRnd MilliSecs()
Global xball=xmax/2
Global yball=ymax/2
SeedRnd MilliSecs()
Global start=0

Type Stein
      Field xstein
      Field ystein
      Field Nr%
End Type

DrawStein(0)

Repeat
   i=i+1
   DrawStein(i%)
   Print "...waitkey"
   WaitKey
   For s.Stein = Each Stein
      s\ystein=s\ystein+1
      Print s\nr+ ". X=" +  s\xstein + " Y=" + s\ystein
   Next
Forever
End


Function DrawStein(Nr)
      s.Stein = New Stein
      s\xstein=xmax/2
      s\ystein=0
      s\nr=nr
End Function


Noch Trick: Mit der laufenden "Nr" im Typ kann ich immer sehen welcher Stein gerade welchen Zustand hat.
  • Zuletzt bearbeitet von Midimaster am Fr, Dez 18, 2009 19:50, insgesamt einmal bearbeitet
 

Maikson_18

BeitragFr, Dez 18, 2009 19:50
Antworten mit Zitat
Benutzer-Profile anzeigen
danke für den guten tip Smile

ich programmier auch immer stück für stück
ich compilier sogar wenn ich nur nen bild eingefügt habe um zu schaun obs überhaupt angezeigt wird

wie gesagt ich bin noch nich solange dabei
ich konnte mich jedoch gut reinfinden
weil ich mich vorher mit c++ beschäftigt habe
oder immer noch beschäftige

TimBo

BeitragFr, Dez 18, 2009 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
die beste Debug möglichkeit ist, den Code im Debug Modus zu Starten und mit Stop anstatt waitkey zu arbeiten. Hilft ungemein.

Aber Achtung: Wenn du den Code dann normal ausführen willst (ohne Debugger) dann musst du die Stops wieder rausmachen.

Grüße
TimBo
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Megamag

BeitragFr, Dez 18, 2009 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Und DebugLog nicht vergessen Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group