Rechteck-Bildschimschoner

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dicker Hobbit

Betreff: Rechteck-Bildschimschoner

BeitragDo, Okt 13, 2011 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute,
Ich möchte einen Bildschirmschoner programmieren, auf dem 2 Rechtecke zu sehen sind in welchen wieder
2 Rechtecke zu sehen sind usw ...
Die Rechtecke sollen unterschiedlich groß sein und auch unterscheidliche Farben haben.

Mein Ansatz:
Einen Array definieren und dann darin Rechtecke durch eine For Schleife einlesen lassen.
Die Höhe und Breite der Rechtecke speicher ich in einer Variable.
Wie bekomme ich es hin das die Rechtecke in eineander verschachtelt sind ?
Für infos ob mein Ansatz falsch ist wäre ich auch sehr dankbar ! Wink

Lg Dicker Hobbit

Xeres

Moderator

BeitragDo, Okt 13, 2011 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du frei bewegliche Rechtecke? Da würde ich a) Types benutzen und b) alle Rechtecke per Rekursion Initialisieren (solange Rechteck in einem Rechteck erstellen, bis eine Mindestgröße unterschritten würde).
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Dicker Hobbit

BeitragDo, Okt 13, 2011 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Rechtecke sollen sich nicht bewegen Wink
Wie genau meinst du das mit Rekursion ... ich kann mir dem Begriff nix anfangen

danke schonmal für die schnelle Antwort

Lg Dicker Hobbit

Xeres

Moderator

BeitragDo, Okt 13, 2011 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Du schreibst eine Funktion, die ein Rechteck erstellt, und lässt die Funktion sich selbst aufrufen... Beispiel:
BlitzBasic: [AUSKLAPPEN]
Rekursion(5)
WaitKey()
End

Function Rekursion(v%)
If v=0 Then Return ;** Abbruch Bedingung
Print(v) ;** Aktion ausführen
Rekursion(v-1) ;** Sich selbst mit dem veränderten Parameter aufrufen
End Function


Das könnte man natürlich auch Iterativ (mit einer Zählschleife) lösen, und bei jedem Durchlauf die Größe des Rechtecks verringern.
Siehe auch BPS #8: Rekursiv zu Iterativ
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Dicker Hobbit

BeitragDo, Okt 13, 2011 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ok danke
Ich werde mich morgen an die Umsetzung begeben.
Falls ich Probleme haben sollte frag ich noch mal nach.
Danke für die Antwort !

Lg Dicker Hobbit

hazumu-kun

BeitragDo, Okt 13, 2011 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Als Hinweis:
Wenn das ein 100%iger Bildschirmschoner werden soll musst du noch ein wenig WinAPI Gehacke auf dich nehmen.

Denk z.B. mal daran wie in den Einstellungen zum Bildschirmschoner die Vorschau angezeigt wird.
Das kann man aber alles googlen.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Dicker Hobbit

BeitragSa, Okt 15, 2011 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey leute,
Ich bins nochmal...
Ich habe es noch nicht hinbekommen
mein Versuchscode mit Rekursion gab mir nicht das gewünschte Ergebnis
Meine Frage:
Ich habe bis jetzt hinbekommen das jeweils ein rechteck in einem anderen verschachtelt ist ..
wie bekomme ich am besten ein 2. durch zufall hinein?
(Siehe meine Hauptfrage)

Danke schonmal im Vorraus!

Lg Dicker Hobbit

PS: @hazumu-kun: Ichmöchte nicht so einen "echten Bildschirmschoner " nur als Test einen Bildschrim mit gewünschtem Ergebnis erzeugen Wink

PPS: Mein Code(ich hoffe ich habe ihn genügend eingerückt Smile )
BlitzBasic: [AUSKLAPPEN]
Graphics 640, 480, 16, 2
SetBuffer BackBuffer()
ClsColor 50,50,50
SeedRnd MilliSecs()
Cls

Dim rechteck(20)

Global breite1= Rnd(200, 300)
Global breite2= Rnd(200, 300)
Global hoehe= 420

Global x1=Rnd(3, 20)
Global Y1=20

Global x2=Rnd(320, 400)
Global y2=20




While Not(KeyDown(1))


Repeat
Rect 2, 2,630, 470, 0
Rect X1, Y1, breite1, hoehe,0

Rect X2, Y2, breite2, hoehe,0

If x1<250 Then x1=x1+20
If x2<600 Then x2=x2+20
If y1<200 Then y1=y1+20
If y2<200 Then y2=y2+20
breite1= breite1- 30
breite2= breite2- 30
hoehe= hoehe -30

Until 1=1

Flip
Wend
End

End

Xeres

Moderator

BeitragSa, Okt 15, 2011 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Etwas Zufall mit Rand ein zu fügen, ist nicht all zu schwer:
Code: [AUSKLAPPEN]
x1=x1+20+Rand(-10,10)

Damit das aber gut aussieht, solltest du einen Vergleich mit dem Äußeren Rechteck machen, um Überlappungen zu verhindern.

Dafür - und für deine ursprüngliche Fragestellung sind Types immer noch die sinnvollste Lösung, da du die ganzen Informationen verwalten kannst:
BlitzBasic: [AUSKLAPPEN]
Type TRect
Field x,y ;* Position
Field w,h ;* Breite & Höhe
Field r,g,b ;* RGB-Farbe
End Type
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ZEVS

BeitragSa, Okt 22, 2011 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Na du bist ja einer...
Ich schaue mir gerade die Aufgaben für den Bundeswettbewerb Informatik 2011 an - da hast du uns ja schön Junioraufgabe 1 gestellt...
Ich hoffe mal, das war keine Absicht.

Link: http://www.bundeswettbewerb-in...simple.pdf

ZEVS

hazumu-kun

BeitragSo, Okt 23, 2011 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ZEVS hat Folgendes geschrieben:
Na du bist ja einer...
Ich schaue mir gerade die Aufgaben für den Bundeswettbewerb Informatik 2011 an - da hast du uns ja schön Junioraufgabe 1 gestellt...
Ich hoffe mal, das war keine Absicht.

Link: http://www.bundeswettbewerb-in...simple.pdf

ZEVS


Oha, ich hatte auch die Post mit der Aufgabenstellung bekommen, dass mir das nicht aufgefallen ist....

@DickerHobbit: Schäm dich!
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

TimBo

BeitragMo, Okt 24, 2011 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
lol ich versuche gerade die verfluchte Städteplaneraufgabe durchzuhauen und du bist bei einer einfachen Rekrusion schon am Copy und Pasten der Aufgabenstellung.

Das nenn ich fair ! Rolling Eyes
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.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group