nix passiert

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Eisrabe

Betreff: nix passiert

BeitragDo, Jan 22, 2004 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
also, ich habe mein blitz basic heute bekommen und probiere etwas rum, um die befehle und deren funktion auszutesten.
das folgende kleine programm soll (erstmal) 20 pixel auf den screen bringen, die mit zufälligem simplen muster aneinander liegen.
Code: [AUSKLAPPEN]
Graphics 500, 200, 16, 2
SeedRnd seed
Dim x(200),y(200)
x(1)=200: y(1)=100
Plot x(1), y(1)
x(2)=201: y(2)=101
For c=2 To 200
Color 255,0,0
Plot x(c), y(c)
If x(c)=499 Then Goto ende
If y(c)=199 Then Goto ende
If x(c)=1 Then Goto ende
If y(c)=1 Then Goto ende
If c>20 Then
 Color 0,0,0
 Plot x(c-20), y(c-20)
EndIf
z=Rnd(1,4)
If z=1 Then x(c+1)=x(c)-1
If z=2 Then y(c+1)=y(c)-1
If z=3 Then x(c+1)=x(c)+1
If Z=4 Then y(c+1)=y(c)+1
Next
.ende
Color 0,255,0
Text 450,180,"ende"
WaitKey
End


nun, leider wird ausser den ersten 2 startpixeln kein weiterer gezeichnet.
das ab .ende dient nur der kontrolle.
was ist falsch? ich komm irgendwie nicht drauf...
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

BigSnake

BeitragDo, Jan 22, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ehrlichgesagt kommt mir das ganze Programm sehr suspekt vor. Das fängt schon bei den beiden Arrays an. Sinnvoller wäre das :

Code: [AUSKLAPPEN]

Const Items = 20 ; Anzahl der Pixel
Dim Coord(Items,2)


Vor allem hast du ja 400 Variablen für 20 Pixel. Sehr großer Aufwand

Und für ein völlig zufälliges Muster wäre folgendes ausreichend

Code: [AUSKLAPPEN]

Graphics 800,600,32,2
SetBuffer FrontBuffer()

SeedRnd MilliSecs()

For CurItem = 1 to 20 Step 1
 Color Rnd(0,254),Rnd(0,254),Rnd(0,254)
 Plot Rnd(0,800),Rnd(0,600)
Next

WaitKey()
 

Eisrabe

BeitragDo, Jan 22, 2004 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
schau dir das listing nochmal genau an.
es sollen 200 pixel erscheinen (erstmal). der array soll nur zum speichern der alten coords sein, da sie ja auch wieder rückwärts gelöscht werden bzw in hintergrundfarbe überschrieben

listing update
Code: [AUSKLAPPEN]
Graphics 500, 200, 16, 2
SeedRnd MilliSecs()
Dim x(200),y(200)
x(1)=200: y(1)=100
Plot x(1), y(1)
x(2)=201: y(2)=101
For c=2 To 200
Color 255,0,0
Plot x(c), y(c)
If x(c)=499 Then Goto ende
If y(c)=199 Then Goto ende
If x(c)=1 Then Goto ende
If y(c)=1 Then Goto ende
If c>20 Then
 Color 0,0,0
 Plot x(c-20), y(c-20)
EndIf
z=Rnd(1,4)
If z=1 Then x(c+1)=x(c)-1
If z=2 Then y(c+1)=y(c)-1
If z=3 Then x(c+1)=x(c)+1
If Z=4 Then y(c+1)=y(c)+1
Next
.ende
Color 0,255,0
Text 450,180,"ende"
WaitKey
End


geändert: seedrnd seed in seedrnd millisecs()
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

Hip Teen

BeitragDo, Jan 22, 2004 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir mal den Code angesehen. Sieht sehr umständlich aus. Hab mal angefangen durch logs an das Problem zu kommen. Was ich merke ist das sich die Variablen immer um 0,0 bewegen. Nur weiss ich nicht wiso die variablen auf 0 gesetzt werden. Führe mal den Code aus, vielleicht helfen dir die logs
Code: [AUSKLAPPEN]
Graphics 500, 200, 16, 2


SeedRnd MilliSecs()

datei = WriteFile("log.txt")
datei2 = WriteFile("log2.txt")
datei3 = WriteFile("log3.txt")
Dim x(200),y(200)

x(1)=200: y(1)=100

Plot x(1), y(1)

x(2)=201: y(2)=101


For c=2 To 200
Color 255,0,0
Plot x(c), y(c)
WriteLine datei, "x(c) ist " + x(c)
WriteLine datei, "y(c) ist " + y(c)
WriteLine datei, ""

If x(c)=499 Then  Print "If 1":Goto ende
If y(c)=199 Then  Print "If 2":Goto ende

;If x(c)=1 Then Print "If 4":Goto ende
;If y(c)=1 Then Print "If 3":Goto ende

If c>20 Then
 Color 0,0,0
 Plot x(c), y(c)
EndIf

z=Rnd(1,4)
WriteLine datei2, "Nummer " + c + ":  Vorher:  X " + x(c) + " und Y " + y(c)
WriteLine datei3, "C ist " + c

If z=1 Then x(c+1) = x(c)-1
If z=2 Then y(c+1) = y(c)-1
If z=3 Then x(c+1) = x(c)+1
If Z=4 Then y(c+1) = y(c)+1

WriteLine datei2, "Nummer " + c + ":  Nachher: X " + x(c) + " und Y " + x(c)
WriteLine datei2, "z ist " + z
WriteLine datei2, ""
WriteLine datei3, "Nun ist C " + c
WriteLine datei3, ""

Next
.ende
Color 0,255,0
Text 450,180,"ende"
Text 450,160, c
WaitKey
End
 

Eisrabe

BeitragDo, Jan 22, 2004 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, die logs sind ne super idee. werd ich mir mal merken für meine zukünftigen programme.
die logs haben mir gezeigt, dasss c korrekt hochzählt oder merkwürdigerweise x(c) und y(c) prötzlich auf null gehen. ka warum
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

Mr.Keks

BeitragDo, Jan 22, 2004 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
liegt wohl daran, dass du immer nur den einen wert vom letzten abhängig machst und der andere wie im array üblich 0 ist... so bist du nach wenigen durchläufen unter garantie am 0punkt...
MrKeks.net
 

Eisrabe

BeitragDo, Jan 22, 2004 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe, Inarie, endlich mal jemand, der es herausfidnet. thx. ich wusste doch das es ein einfaches prob ist.

ich bin kurz vorher auch drauf gekommen, durch die logfiles

Plot x(c)+200, y(c)+100

sollte das problem lösen. die werte werden zwar nicht verändert oder verändert angezeigt. die hauptsache. im richtigen programm würd eichs natürlich anders machen

ganz so wars nicht, das neue funktionierene listing
Code: [AUSKLAPPEN]
Graphics 500, 200, 16, 2
; es sollen 200 pixel gezeichnet werden, wobei das nächste
; immer am vorigen sein soll, mit zufälliger ausrichtung
SeedRnd MilliSecs()
Dim x(200),y(200) ; zum speichern der coords aller 200 pixel
x(1)=200: y(1)=100 ; die 1. coords stehen fest = startpunkt

For c=2 To 200  ; 200 pixel werden insgesamt gezeichnet

  x(c)=x(c-1): y(c)=y(c-1)  ; die coords vom vorigen kommen in
                            ; das neue

  z=Rnd(1,4)
 If z=1 Then x(c)=x(c)-1    ; der platz des nächsten pixels wird
 If z=2 Then y(c)=y(c)-1    ; ermittelt
 If z=3 Then x(c)=x(c)+1
 If Z=4 Then y(c)=y(c)+1
  Color 255,0,0             ; rote pixel auf schwarzes hintergrund         
  Plot x(c), y(c)
  Delay 50
 If x(c)=499 Then Goto ende ; verhindert dass der rand erreicht wird
 If y(c)=199 Then Goto ende ; auch wenns hier unnötig ist
 If x(c)=1 Then Goto ende
 If y(c)=1 Then Goto ende
 
 If c>20 Then               ; ab 20 pixel wird immernoch zusätzlich
  Color 0,0,0               ; ein pixel gelöscht, so dass immer max
  Plot x(c-20), y(c-20)     ; 20 pixel zu sehen sind
 EndIf                      ; gelöscht = mit hintergrundfarbe überschrieben
Next

.ende
Color 0,255,0
Text 450,180,"ende"
WaitKey
End


woran lags?
die schlüsselstelle ist:
Code: [AUSKLAPPEN]
x(c)=x(c-1): y(c)=y(c-1)

damit werden die neuen arrays nicht null +-1 sondern nehmen als ausgangswert den wert des arrays davor.

einfache lösung eigentlich
ich habe einCode: [AUSKLAPPEN]
GOTO
und ich bin bereit es einzusetzen!

Plasma(alt)

Betreff: log files

BeitragFr, Jan 23, 2004 7:47
Antworten mit Zitat
Benutzer-Profile anzeigen
äh debuglog anyone ?

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group