Zufallsproblem

Anfängerfragen zum Programmieren mit PureBasic.
Janno
Beiträge: 99
Registriert: 27.10.2006 21:38
Wohnort: Niedersachsen

Zufallsproblem

Beitrag von Janno »

Hallo zusammen!
Ich habe mal wieder ein Problem :mrgreen:

Und zwar möchte ich eine Spielkarte bauen, die im Spiel nach dem Zufall generiert wird. Jetzt habe ich den Boden schon (Halb) geschafft und möchte Bäume einbauen.

Dafür habe ich folgenden Code. (Den Fehler im Code habe ich schon gefunden)

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenScreen(800,600,16,"")

CreateSprite(1,50,50)
CreateSprite(2,50,50)
  
StartDrawing(SpriteOutput(1))
Box(0,0,50,50,RGB(0,155,0))
StopDrawing()
  
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()

For K = 0 To 750 Step 50
  For A = 0 To 550 Step 50
    DisplaySprite(1,K,A)
  Next
Next

For S = 50 To 700 Step 50
  For O = 50 To 500 Step 50
    Dingens = Random(5)
    If Dingens = 0
      DisplaySprite(2,S,O)
    EndIf
  Next
Next

Until KeyboardPushed(#PB_Key_Escape)
Kann mir jemand helfen?
(Wenn es irgendwelche Unklarheiten geben sollte bitte melden!!)

MFG Jan
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

das problem ist das du deine Karte in JEDER schleife wo sie angezigt wird neu per zufall aufbaus.

Du musst du Karte vorher in einem Array speichern und dann in der schleife diese gespeicherte Karte anzeigen lassen

z.B

Code: Alles auswählen

dim Array(15,15)

for x = 0 to 15
 for y = 0 to 15
  if random(5) = 1 : Array(x,y) = 1 : else : Array(x,y) = 2 : endif
 next y
next x
und dann später in der schleife :

Code: Alles auswählen

for x = 0 to 15
 for y = 0 to 15
  displaysprite(Array(x,y),x*50,y*50)
 next y
next x
Zuletzt geändert von STARGÅTE am 31.12.2006 16:02, insgesamt 1-mal geändert.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Zufallsproblem

Beitrag von Kiffi »

> Kann mir jemand helfen?

Du solltest schon detailliert erklären, welches Problem Dich plagt.

> (Den Fehler im Code habe ich schon gefunden)

:?:

Grüße ... Kiffi
a²+b²=mc²
Janno
Beiträge: 99
Registriert: 27.10.2006 21:38
Wohnort: Niedersachsen

Re: Zufallsproblem

Beitrag von Janno »

@ Kiffi:
Ich dachte mein Problem geht aus dem Code hervor...

@ Stargate:
Danke für die schnelle Hilfe. Jetzt funktioniert alles

Edit:

Ein kleines Problem habe ich noch:
Wie mache ich jetzt das eine Sprite Transparent?

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenScreen(800,600,16,"")

CreateSprite(1,50,50)
CreateSprite(2,50,50)
  
StartDrawing(SpriteOutput(2))
Box(0,0,50,50,RGB(0,255,0))
StopDrawing()

StartDrawing(SpriteOutput(1))
Circle(25,25,25,RGB(0,155,0))
StopDrawing()

Dim Array(15,15) 

For x = 0 To 15 
  For y = 0 To 15 
    If Random(5) = 1 : Array(x,y) = 1 : Else : Array(x,y) = 2 : EndIf 
  Next y 
Next x 
  
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()

For x = 0 To 15 
  For y = 0 To 15 
    DisplaySprite(Array(x,y),x*50,y*50) 
  Next y 
Next x 

Until KeyboardPushed(#PB_Key_Escape)
Zuletzt geändert von Janno am 01.01.2007 16:26, insgesamt 1-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Zufallsproblem

Beitrag von Kiffi »

Janno hat geschrieben:@ Kifi:
mit 2 f bitte.
Janno hat geschrieben:Ich dachte mein Problem geht aus dem Code hervor...
Du solltest es den hier lesenden hilfsbereiten Menschen nicht zumuten, sich
durch Deinen Code wühlen zu müssen, um dann zu erahnen, wo Dein
Problem liegen könnte. In ein oder zwei Sätzen zu erklären, woran es hapert,
ist mit Sicherheit kein großer Akt für Dich.

Zu Deinem Glück war STARGÅTE jetzt so freundlich und hat sich die Arbeit
gemacht. Davon solltest Du aber nicht immer ausgehen.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

; ...
CreateSprite(1,50,50)
TransparentSpriteColor(1, $000000) ; <<<< WENN SCHWARZ DEINE TRANSPARENTE FARBE SEIN SOLL
; ...
und zum darstellen:

Code: Alles auswählen

;...
  For ..
    DisplayTransparentSprite(Array(x,y),x*50,y*50) ; <<<< displayTRANSPARENTsprite(..)
  Next ..
;...
allerding wirst du dann vorerst immernoch einen schwarzen rand um deine kreise haben. es ist nur nicht das schwarz der sprites, sondern das schwarz des hintergrundes, das nun durchzusehen ist. :wink: (das kannst du mit ClearScreen($880088) überprüfen)
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Warum so kompliziert?
Es geht auch 0 oder eine der Farbkonstanten #Black.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich selber bevorzuge ebenfalls 6-stellige hexadezimalzahlen für farbcodes,
weil man da ganz einfach die farbe hinschreiben bzw. ablesen kann.
klar, bei schwerz wäre das nicht nötig, aber man sollte sich sowieso
angewöhnen, immer einheitlich zu arbeiten.
farbkonstanten benutze ich eigentlich nie, auch wenn ich die farbkonstanten für POV auf PB umgemünzt habe.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@and51
..und dann wird vom hilfesuchenden gefragt, wo da die farbe ist. $0 wäre noch in ordnung.
da Janno bisher RGB() benutzt hat, reicht es doch erstmal, ihn mit lesbarer hex-darstellung zu beglücken. außerdem ist $000000 nicht 'komplizierter' als #Black, aber die farbkonstanten mal hin und wieder zu erwähnen ist schon richtig.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

Ich glaube, Janno will, dass das gesamte sprite transparent ist:

Code: Alles auswählen

InitSprite()
InitSprite3D()
; .....
createsprite3d(1,0)
Transparenz = 120 ; Bereich: 0 bis 255
DisplaySprite3D(1,0,0,Transparenz)
flipbuffers()
; ...
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten