 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Kugelfisch
Anmeldungsdatum: 19.07.2005 Beiträge: 7
|
Verfasst am: 19.07.2005, 01:17 Titel: Grafik im Hintergrund zum Vorschein bringen? |
|
|
Hallo!
zuerst einmal muss ich gestehen, dass ich zwar schon sehr lange, aber immer nur auf einem relativ niedrigen Niveau und sehr unregelmäßig in QBasic programmiere, daher erscheint die folgende Frage dem Crack auch vielleicht als recht banal, ich weiss es nicht.
Heute hatte ich die Idee, eine einfach Zufallsbemalung des Bildschirms, die ich mir einmal als eine Art Bildschirmschoner gedacht hatte, zum Spiel umzubauen.
Also schnell einen Rahmen gezogen, der - Punkt für Punkt - mit zufälligen Farben vollgemalt wird. Das Spiel besteht nun darin, dass eine Form - ich hab bereits "Haus", "Kreis", "Kette"... entwickelt - nach und nach im Hintergrund erscheinen soll. Also wenn der Punkt sich zufällig auf einem Teil der versteckten Grafik befindet, soll eben nicht eine zufällige Farbe verwendet werden, sondern er soll weiss werden. Derjenige der beiden Spieler, der zuerst errät, welche Form sich hinter der Zufallsbemalung versteckt, gewinnt die Runde. Zuerst wollte ich einfach Grenzen einbauen, wo die Zufallsbemalung nicht hinkommt, aber das wird - insbesondere bei Kreisen - aber doch schwer.
Wie kann ich das, ohne umständlich einzelne Punkte zu definieren, lösen? Die versteckten Formen sollen nur, wenn der Cursor gerade auf einem Punkt der Hintergrundgrafik ist, erscheinen, also nur nach und nach.
Vielen Dank für jegliche Antworten! und viele Grüße
Johannes |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 19.07.2005, 09:23 Titel: |
|
|
also du musst schon jeden Punkt definieren, wo eine spezielle Farbe auftauchen soll. Ob du es umständlich machst ist eine andere Sache.
Ich würde es einfach mal so angehen, dass du dein Bild mit "unsichtbarer" Farbe malst, sprich z.B. bei SCREEN 13 mit der Farbe 16, die ist auch schwarz und somit nicht von Farbe 0 zu unterscheiden, nun musst du bei jeden Farbsetzen einfach mit POINT(x,y) abfragen, ob die Hintergrundfarbe 16 oder 0 ist.
Wenn du einen anderen Screen nimmst, kannst du dir auch mit PALETTE mehrere gleichaussehende Farben machen. |
|
Nach oben |
|
 |
Kugelfisch
Anmeldungsdatum: 19.07.2005 Beiträge: 7
|
Verfasst am: 19.07.2005, 12:25 Titel: |
|
|
das klingt doch nach einer Super-Lösung
Vielen Dank!!  |
|
Nach oben |
|
 |
Kugelfisch
Anmeldungsdatum: 19.07.2005 Beiträge: 7
|
Verfasst am: 19.07.2005, 14:59 Titel: Noch erfolglos, wer weiss Hilfe? |
|
|
Hallo nochmal!
Es funktioniert nicht...
der Code müsste doch in etwa so aussehen, oder?:
PALETTE 15,0 (Farbe 16 gibts nicht??)
.....
o% = POINT(x, y)
IF o% = 15 THEN
PSET (x, y), 7
GOTO A
END IF
Also, es soll grau werden!
Zwar kann ich in der Gegend der Grafik etwas mehr grau feststellen, aber beileibe nicht alles wird grau... |
|
Nach oben |
|
 |
Kugelfisch
Anmeldungsdatum: 19.07.2005 Beiträge: 7
|
Verfasst am: 19.07.2005, 15:03 Titel: |
|
|
ach und wenn ich einfach eine fläche bunt anmale und dann die farbe abfrage funktioniert es schon, nur im großen programm nicht!
Danke für eure Antworten,
Johannes |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 19.07.2005, 18:07 Titel: |
|
|
Kugelfisch hat Folgendes geschrieben: | ach und wenn ich einfach eine fläche bunt anmale und dann die farbe abfrage funktioniert es schon, nur im großen programm nicht!
|
1. Es gibt einen Editierbutton
2. Ich weiß absolut nicht, was du meinst
Auch bei deinem Posting davor kann ich nicht recht nachvollziehen, was du meinst. Ich gehe mal davon aus, du hast etwa sowas:
Code: | screen 12
palette 15,0
circle (50,50), 40, 15
for i = 0 to 100
for j = 0 to 100
if point(i,j) = 15 then pset (i,j), 7 else pset(i,j), rnd*15
for pause = 1 to 10000:next
next
next
sleep |
So klappt es auf jeden Fall schonmal, natürlich sieht man den Kreis sehr schlecht, wenn man ihn besser sehen soll, kannst du ihn entweder dicker zeichnen oder du fragst schon die Nachbarfelder ab.
Also, wenn du noch ein Problem hast, dann sei mal etwas konkreter, bzw. gib auch mal den Code an, wo Probleme auftreten. |
|
Nach oben |
|
 |
Kugelfisch
Anmeldungsdatum: 19.07.2005 Beiträge: 7
|
Verfasst am: 20.07.2005, 15:10 Titel: |
|
|
du hast mit einer Pause gearbeitet, das habe ich nicht gemacht.
kann es vielleicht daran liegen, dass er ohne unterbechung malt?
ich habe es wirklich nicht so professionell wie du geschrieben, aber dennoch funktioniert es wenn ich den bildschirm komplett einfärbe schon, oder einfach ein rechteck zeichne.
nur bei meinen figuren nicht, egal ob ich sie verstecke oder nicht.
Ich habe meinen Code einmal hochgeladen, er ist unter
http://www.herzovision.de/fritz-wolfgang/RATE.BAS zu finden. danke für die Hilfe!  |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 20.07.2005, 16:00 Titel: |
|
|
kleine Empfehlung: http://fb.exp-soft.de/fbnp Dann lässt sich der Code besser lesen. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Mecki Igel

Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 20.07.2005, 17:05 Titel: |
|
|
es ist ganz klar, warum dein Programm nicht funktioniert, du fragst zwar nach Farbe 7 ab, aber nicht nach Farbe 15, mit der du es dann abdeckst, ergo wird immer sofort das Bild übermalt.
Du musst bei der Abfrage nur
Code: | IF POINT(x, y) = 7 OR POINT(x, y) = 15 THEN PSET (x, y), 15 ELSE PSET (x, y), w |
schreiben.
Aber deine Codestruktur ist auch nicht sehr berauschend (Stichwort GOTO) und mit dieser Zufallsverteilung kann es manchmal echt Jahre dauern, bis man genug vom Bild sieht.
Was mich aber am meisten wundert, so schlimm ist der Code eigentlich nicht (hab schon bedeutend schlimmeres gesehen), aber irgendwie bringt der Code mein QB durcheinander, nachdem ich das Programm einmal ausgeführt hat, kommen beim Druck von einer Pfeiltaste lauter Zahlen, anstatt ich den Cursor verschieben kann und seltsamerweise reagiert im dei Zufallsverteilung auf meine Tastendrücke, obwohl dafür gar nix programmiert ist. Kann ich echt nicht nachvollziehen, zumal ja nirgendwo im Speicher rumgefummelt wird.
Und zu guterletzt habe ich auch mal das Programm mit FB laufen lassen, da macht das Programm auch was völlig anderes, obwohl ja nur elementare Befehle verwendet werden. *völligverwirrtsei* |
|
Nach oben |
|
 |
Kugelfisch
Anmeldungsdatum: 19.07.2005 Beiträge: 7
|
Verfasst am: 21.07.2005, 02:06 Titel: |
|
|
tatsächlich... jetzt funktioniert es! war auch logisch das mit dem 7 UND 15! Also vielen Dank für die Hilfe nochmal...
wie mach ich das denn schneller mit den GOTOs, und was könnte ich ausserdem verbessern?
Viele Grüße & Gut Nacht!
Johannes |
|
Nach oben |
|
 |
Kugelfisch
Anmeldungsdatum: 19.07.2005 Beiträge: 7
|
Verfasst am: 21.07.2005, 02:07 Titel: |
|
|
insbesondere: was meinst du mit "mit dieser Zufallsverteilung kann es manchmal echt Jahre dauern, bis man genug vom Bild sieht" - wie sähe eine bessere verteilung aus? |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 21.07.2005, 10:01 Titel: |
|
|
Eine bessere Verteilung wären Zufallszahlen, wo keine gleichen x- und y-Paare vorkommen.
Dazu gibt's auf www.qbasic.de ein Beispielprogramm.
jb |
|
Nach oben |
|
 |
Tomtitom

Anmeldungsdatum: 20.09.2004 Beiträge: 308
|
Verfasst am: 21.07.2005, 10:12 Titel: |
|
|
Und nochmal, es gibt da rechts oben so einen tollen Edit-Button, ich bitte dich ihn auch mal zu benutzen, anstatt andaurend doppel-Posts zu machen!
Ich habe mal deinen Code etwas bearbeitet: http://fb.exp-soft.de/fbnp/index.php?view=35
Gotos sind weg und ich habe die Zufallsverteilung geändert, die ist zwar auch nicht viel besser, aber nicht so komisch kompliziert, wie du sie gemacht hast. Im Prinzip besteht eben immre die Gefahr das der Punkt irgendwo in die Ecke wandert und dann nicht mehr zurückkommt, so dass man erst nach ein paar Minuten sieht, was für ein Bild gemalt werden sollte. Umgehen kannst du das nur wie bei meiner Variante 2 aber weil das ja doch ganz schön anders ist könntest du auch die Ursprüngliche Verteilung mit Hilfe von Wahrscheinlichkeitsrechnung so modifizieren, das nach einer gewissen Zeit alle Felder mal abgedeckt wurden, was allerdings nicht so leicht wäre.
Es ist ja sowieso dein Programm und wenn es dir so schon gefällt, dann lass es halt so. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|