hab anfänger prob mir dim.

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

dominik

Betreff: hab anfänger prob mir dim.

BeitragSo, Feb 08, 2004 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
(peinlich, peinlich) Embarassed
mal wieder für mein moorhunklon,
also per zufall sollen die koords von den mänchen die man dann abschießen können soll festegelegt werden und in die dim felder gespeichert werden. sie werden aber seltsamerweise nicht gezeichnet.
ich hatte des ganze voher schon mit typs da hats auch funtioniert jetzt hab ich nur die namen abgeänder(typs sind do unübersichtlich und umständlich) aber jetzt geht nix mehr.

Code: [AUSKLAPPEN]

Dim nr(50), art(50), frei(50)


hauptschleife:
Code: [AUSKLAPPEN]

;dim
For md1 = 0 To 10
art(md1) = Rnd(1,7)
nr(md1) = Rnd(1,10)
If frei(md1) = 0 Then Gosub neuzeichnen
Next


unterprog:
Code: [AUSKLAPPEN]

.neuzeichnen
mz = Rnd(1,7)
If mz = 1 Then m = M1
If mz = 2 Then m = M2
If mz = 3 Then m = M3
If mz = 4 Then m = M4
If mz = 5 Then m = M5
If mz = 6 Then m = M6
If mz = 7 Then m = M7
If nr(md1) = 1 Then DrawImage m,xx + turm1X, yy + Turm1Y: frei(md1)
= 1
if nr(md1) = 2 Then DrawImage m,xx + turm2X, yy + turm2Y: frei(md1)
= 1
If nr(md1) = 3 Then DrawImage m,xx + Dach1X, yy + Dach1Y: frei(md1) = 1
If nr(md1) = 4 Then DrawImage m,xx + Dach2X, yy + Dach2Y: frei(md1) = 1
If nr(md1) = 5 Then DrawImage m,xx + Dach3X, yy + Dach3Y: frei(md1) = 1
If nr(md1) = 6 Then DrawImage m,xx + kturm1X, yy + kturm1Y: frei(md1) = 1
If nr(md1) = 7 Then DrawImage m,xx + kturm2X, yy + kturm2Y: frei(md1) = 1
If nr(md1) = 8 Then DrawImage m,xx + fenster1X, yy + fenster1Y: frei(md1) = 1
If nr(md1) = 9 Then DrawImage m,xx + fenster4X, yy + fenster4Y: frei(md1) = 1
If nr(md1) = 10 Then DrawImage m,xx + tuerX, yy + tuerY: frei(md1) = 1
Return
End

Hubsi

BeitragSo, Feb 08, 2004 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If mz = 1 Then m = M1
If mz = 2 Then m = M2
If mz = 3 Then m = M3
If mz = 4 Then m = M4
If mz = 5 Then m = M5
If mz = 6 Then m = M6
If mz = 7 Then m = M7
DrawImage m...

Das sollte man gar nicht machen. Mach aus m ein Dim-Feld und speicher darin die Imagehandles:
Code: [AUSKLAPPEN]
Dim m(6)
DrawImage m(mz-1)...

Ich weiß nicht obs daran jetzt liegt, könnte auch mit dem frei(md) zusammenhängen, k.A.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

dominik

BeitragSo, Feb 08, 2004 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry aber des versth ich jetzt net so ganz wiso: "DrawImage m(mz-1)" Question

wenn ich nur mz reinschreib dann fehlen da doch immernoch die koords und was macht des -1 da?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Feb 08, 2004 12:45
Antworten mit Zitat
Benutzer-Profile anzeigen
If frei(md1) = 0 Then Gosub neuzeichnen
hier wird es einmal zum zeichnen geschickt,
nach dem einmaligen zeichnen setzt du aber diese auf 1 und wird dann nicht mehr gezeichnet
ich denke das es daran liegt!

Wofür steht M1 und mz, ist das der BilderHandle?
[BB2D | BB3D | BB+]

dominik

BeitragSo, Feb 08, 2004 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
0 sollte ja eingetlich nur bewirken das da noch kein mänchen stetht und wenn des mänchen dann 1 ist dann sollte es eingentlich immer gezeichnet werden.

wenn ich m in dim festlege dann bekomm ich aber die fehler meldunf 'identifyer may not be used like this'
 

Omenaton_2

BeitragSo, Feb 08, 2004 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Der erste Wert, der in der Hauptschleife für md1 durch For Next festgelegt wird ist "0".

Dann bei der Neuzeichnen Subrutine versäumst du gerade den ersten Wert, also Null zu checken und zu zeichnen. Du fängst zu zeichnen erst bei 1 an. Das kann das Problem sein.

dominik

BeitragSo, Feb 08, 2004 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
aber dann müssten die anderen ab 1 ja trotzdem zu sehen sein.

Ctuchik

BeitragSo, Feb 08, 2004 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Imho liegt das Problem bei den Zufallszahlen!
Rnd(1,7) erzeugt ne Float-Zufallszahl zwischen 1 und 7 also auch zum Beispiel 5,768 oder 3,687!
Benutz stattdessen Rand(1,7) dann sollte es gehn, denn Rand erstellt ganzzahlige Zufallszahlen!

mfG Ctuchik

Hubsi

BeitragSo, Feb 08, 2004 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil mz bei 1 beginnt und bei einem Dim-Feld kannst Du auch auf 0 zugreifen. So sparst Du Ram weil ein Dim m(6) vollig ausreicht. Anders bräuchtest Du Dim m(7). Die Drawimage-Befehle haben hab ich einfach nicht komplett ausgeschrieben, war nur als Beispiel gedacht Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

dominik

BeitragSo, Feb 08, 2004 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
so alter fehler behoben ich hab des code jetzt soweit abgeändert:

allerdings werden die mänchen immernoch jeden durchlauf neugezeichnet, und es wird nicht wie es eingetlich sollte unter frei eine 1 gespeichert. zumindest funktionierts nich.


Code: [AUSKLAPPEN]

Dim nr(20), frei(50)


hauptschleife:
Code: [AUSKLAPPEN]

;dim
For md1 = 1 To 13
If frei(md1) = 0 Then Gosub neuzeichnen
If frei(md1) = 1 Then
 
  If mz = 1 Then m = M1
  If mz = 2 Then m = M2
  If mz = 3 Then m = M3
  If mz = 4 Then m = M4
  If mz = 5 Then m = M5
  If mz = 6 Then m = M6
  If mz = 7 Then m = M7

  mz = Rnd(1,13)
  If mz = 1 Then DrawImage m, xx + 300, yy + 403
  If mz = 2 Then DrawImage m, xx + 380, yy + 403
  If mz = 3 Then DrawImage m, xx + 600, yy + 552
  If mz = 4 Then DrawImage m, xx + 790, yy + 553
  If mz = 5 Then DrawImage m, xx + 920, yy + 587
  If mz = 6 Then DrawImage m, xx + 1200, yy + 475
  If mz = 7 Then DrawImage m, xx + 1250, yy + 599
  If mz = 8 Then DrawImage m, xx + 485, yy + 902
  If mz = 9 Then DrawImage m, xx + 585, yy + 902
  If mz = 10 Then DrawImage m, xx + 680, yy + 902
  If mz = 11 Then DrawImage m, xx + 820, yy + 802
  If mz = 12 Then DrawImage m, xx + 1020, yy + 807
  If mz = 13 Then DrawImage m, xx + 1185, yy + 880
EndIf
Next


unterprog:
Code: [AUSKLAPPEN]

.neuzeichnen
nr(md1) = Rnd(1,13)
mz = Rnd(1,7)
If mz = 1 Then m = M1
If mz = 2 Then m = M2
If mz = 3 Then m = M3
If mz = 4 Then m = M4
If mz = 5 Then m = M5
If mz = 6 Then m = M6
If mz = 7 Then m = M7

If nr(md1) = 1 Then DrawImage m,xx + turm1X, yy + Turm1Y: frei(md1) = 1
If nr(md1) = 2 Then DrawImage m,xx + turm2X, yy + turm2Y: frei(md1) = 1
If nr(md1) = 3 Then DrawImage m,xx + Dach1X, yy + Dach1Y: frei(md1) = 1
If nr(md1) = 4 Then DrawImage m,xx + Dach2X, yy + Dach2Y: frei(md1) = 1
If nr(md1) = 5 Then DrawImage m,xx + Dach3X, yy + Dach3Y: frei(md1) = 1
If nr(md1) = 6 Then DrawImage m,xx + kturm1X, yy + kturm1Y: frei(md1) = 1
If nr(md1) = 7 Then DrawImage m,xx + kturm2X, yy + kturm2Y: frei(md1) = 1
If nr(md1) = 8 Then DrawImage m,xx + fenster1X, yy + fenster1Y: frei(md1) = 1
If nr(md1) = 9 Then DrawImage m,xx + fenster4X, yy + fenster4Y: frei(md1) = 1
If nr(md1) = 10 Then DrawImage m,xx + tuerX, yy + tuerY: frei(md1) = 1: frei(md1) = 1
If nr(md1) = 11 Then DrawImage m,xx + fenstergrosX, yy + fenstergrosY: frei(md1) = 1
If nr(md1) = 12 Then DrawImage m,xx + fenster4X, yy + fenster4Y: frei(md1) = 1
If nr(md1) = 13 Then DrawImage m,xx + tuerX, yy + tuerY: frei(md1) = 1
Return
End


des kann doch nich sein das mir da gar keiner helfen kann.

Triton

BeitragSo, Feb 08, 2004 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image


Lies dir Tutorials/Bücher betreffs Arrays durch..bitte.
 

Omenaton_2

BeitragMo, Feb 09, 2004 12:08
Antworten mit Zitat
Benutzer-Profile anzeigen
probier mal stat dessen:

If frei(md1) = 0 Then Gosub neuzeichnen
If frei(md1) = 1 Then

das:

If frei(md1) = 1 then

Hier dein Wertangabe und DrawImage Code

endif

If frei(md1) = 0 Then Gosub neuzeichnen


Außerdem beachte was jemand schon geschrieben hatte, nimm stat RND RAND, das ist ein großer Unterschied!

Ctuchik

BeitragMo, Feb 09, 2004 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Jau ich sags nochmal :
Code: [AUSKLAPPEN]

  mz = Rnd(1,13)
  If mz = 1 Then DrawImage m, xx + 300, yy + 403
  If mz = 2 Then DrawImage m, xx + 380, yy + 403
  If mz = 3 Then DrawImage m, xx + 600, yy + 552
  If mz = 4 Then DrawImage m, xx + 790, yy + 553
  If mz = 5 Then DrawImage m, xx + 920, yy + 587
  If mz = 6 Then DrawImage m, xx + 1200, yy + 475
  If mz = 7 Then DrawImage m, xx + 1250, yy + 599
  If mz = 8 Then DrawImage m, xx + 485, yy + 902
  If mz = 9 Then DrawImage m, xx + 585, yy + 902
  If mz = 10 Then DrawImage m, xx + 680, yy + 902
  If mz = 11 Then DrawImage m, xx + 820, yy + 802
  If mz = 12 Then DrawImage m, xx + 1020, yy + 807
  If mz = 13 Then DrawImage m, xx + 1185, yy + 880

Rnd(1,13) erzeugt ne Zufallszahl zwischen 1 und 13 aber die Chance dass diese Zahl genau 1,2,3,4...usw. wird ist dabei relativ gering, weil auch Zahlen wie 1,682 erzeugt werden und daher ist die Chance klein, dass überhaupt was gezeichnet wird...
Rand hingegen erzeugt nur ganze Zahlen, also änder das mal!
Ob noch andere Fehler drin sind weiss ich nicht!

mfG Ctuchik

dominik

BeitragMo, Feb 09, 2004 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich ahb des mit dem rnd in rand mal geänder war aber zimlich egal ich hatte ja nie das prob das garnix gezeichnet wird.

@ Omenaton_2: auf die idde mit dem reihen folge wechseln bin ich auch schon gekommen aber des veränder absolut garnix. irgentwie erkennt ernich wann frei(md1) = 1 und wann des 0 is. oder vll. speicher ers auch garnic erst. ??????

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Feb 09, 2004 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du denn schon mal mit dem Debugger gearbeitet und dir die Werte mal angesehen und ein paar stops eingebaut um zu überprüfen ob der Code überhaupt abgearbeitet wird ?
Damit läßt sich normal schnell was finden !
oder die werte der Arrays immer am moni anzeigen lassen
Beispiel
Code: [AUSKLAPPEN]
For t= 0 To 50
    Text   10,  10+ t*10,   "nw: "+ nr(t)
    Text 100,  10+ t*10,   "Art: "+ art(t)
    Text 200,  10+ t*10,   "Frei: "+ frei(t)
Next

Das hilft fast immer!
[BB2D | BB3D | BB+]

Jolinah

BeitragMo, Feb 09, 2004 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:

Rnd(1,13) erzeugt ne Zufallszahl zwischen 1 und 13 aber die Chance dass diese Zahl genau 1,2,3,4...usw. wird ist dabei relativ gering, weil auch Zahlen wie 1,682 erzeugt werden und daher ist die Chance klein, dass überhaupt was gezeichnet wird...
Rand hingegen erzeugt nur ganze Zahlen, also änder das mal!
Ob noch andere Fehler drin sind weiss ich nicht!

mfG Ctuchik



Stimmt Wink

Aber in seinem Fall ist das nicht so schlimm. Weil die Variable ein Integer ist. Das heisst der Wert von Rnd wird in einen Integer konvertiert (komma stelle abgeschnitten). Bei Float wäre es aber so wie du sagst.
Trotzdem stimm ich dir zu Wink Ist besser wenn man bei Int auch wirklich Rand benutzt statt Rnd.

dominik

BeitragMi, Feb 11, 2004 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab des mit dem var. aufm bilds. ausgeben mal ausprobiert aber des stimmt alles deren status is immer wie er sein soll 1.

ich hab jetzt noch nen bischen was im code wegelöscht was mir unlogisch erschien und jetzt kommt immer ne fehlermeldung das ein bild fehlt "image does ...." aber des komt seltsamerweise wenn ich des bild grad malen will

Code: [AUSKLAPPEN]

If mz = 11 Then DrawImage m, xx + 820, yy + 802


des is doch irgentwie auch unlogisch wenn ich nen bild grad erst zeichnen will dann is doch klar das es noch net da is. oder heißt des das es niocht geladen wurde?

ich hab davor noch ne zeile mit der per zufall festgelegt wir welches bild von insgesamt 7 gemalt werden soll
Code: [AUSKLAPPEN]

If mz = 7 Then m = M7

aber dadran kann ja nich liegen oder?

Hubsi

BeitragMi, Feb 11, 2004 17:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das heißt nichts anderes als das das Bild nicht geladen werden konnte oder wurde. Überprüf einfach mal das Handle. Ist es 0 - alles klar Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

HOT-BIT

Gast

BeitragMi, Feb 11, 2004 17:51
Antworten mit Zitat
KOPFSCÜTTEL !!!

* If mz = 7 Then m = M7 *

Welchen Wert hat M7 ?
Welchen Wert hat nun m ?

Eine Frage: Wie alt bist du ?

Wenn unter 12 bist, brauchst nicht zu antworten !

Wenn schon älter bist, melde dich lieber nicht da drauf, denn sonst müsste ich dir sagen, daß du lieber die Finger vom programmieren lassen sollst !

Toni

dominik

BeitragMi, Feb 11, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
was soll dadran jetz bitte so schrecklich sein?
in m7 wurde das bild geladen und in mz wurde vorher die zahl 7 per zufall errechnet. wenn mz = 7 ist dann soll in m des bild von m7 gespeichert werden.

wenn du genau ggelesen hättes was ich obe geschrieb nahbe dan hättes du das auch gleich gemerk da habe ich das nämlci auch schon stehen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group