Phantombilder

Spiele, Demos, Grafikzeug und anderes unterhaltendes.
S.Wisser
Beiträge: 8
Registriert: 19.07.2010 15:56
Computerausstattung: Prozessor: Sockel 775 Intel Celeron E3300 2X 2,5 GHz
Arbeitsspeicher: 4 GB RAM
Grafikkarte: ASUS EN 9500 GT OC
Wohnort: Eutin

Phantombilder

Beitrag von S.Wisser »

Hallo zusammen,

ich habe ein kleines Spielzeug zum Erstellen von Phantombildern gebastelt.
Es ist sehr laienhaft programmiert, wollte es aber trotzdem hier im Forum einmal vorführen.

Vielleicht hat ja auch jemand noch ein paar Verbesserungsvorschläge für mich,
oder ein paar Ideen wie man den Code noch ein wenig vereinfachen oder kürzen könnte.


Zur Auswahl stehen:

5 Kopfformen
7 paar Augen
5 Nasen
6 Münder
7 Kopfbehaarungen
2 paar Ohren
5 Bärte

Ich habe versucht mir auszurechnen wieviele Gesichter ich damit kreieren kann,
und bin auf 73500 Gesichter gekommen, was mir ein bisschen viel vorkommt.

Vielleicht habe ich falsch gerechnet? Ich habe einfach alle "Gesichtskomponenten" miteinander multipliziert, war das falsch? :?:


Hier der Link: http://hosting.alexander-n.de/=Njg2LjEzMjkxNTIxOTk=
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Phantombilder

Beitrag von Nino »

S.Wisser hat geschrieben:Ich habe versucht mir auszurechnen wieviele Gesichter ich damit kreieren kann,
und bin auf 73500 Gesichter gekommen, was mir ein bisschen viel vorkommt.

Vielleicht habe ich falsch gerechnet? Ich habe einfach alle "Gesichtskomponenten" miteinander multipliziert, war das falsch? :?:
Rechenweg und -ergebnis sind richtig. :allright:
Es ist typisch, dass man gefühlsmäßig die Anzahl der verschiedenen Möglichkeiten unterschätzt. Das ist beim Lotto ähnlich -- daher wird dort die Gewinnchance gern überschätzt. :)

Die Idee finde ich gut, werde nachher mal mit dem Programm spielen.

Grüße, Nino
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Phantombilder

Beitrag von Nino »

Beim Versuch die EXE auszuführen kommt die Fehlermeldung (Windows XP 32 Bit):
Phantomgesichter.exe ist keine zulässige Win32-Anwendung.
Der Versuch, den Quelltext (mit PB 4.61 Beta 1) auszuführen, endet in Zeile 237 mit dem Fehler:

Code: Alles auswählen

Invalid memory access.
Als erstes solltest Du mal folgendes Makro in den Quelltext übrnehmen:

Code: Alles auswählen

Macro ProgramPath()
   GetPathPart(ProgramFilename())
EndMacro
und dann überall im Code GetCurrentDirectory() durch ProgramPath() ersetzen. Die Begründung findest Du hier im Forum, das ist schon x-mal durchgekaut worden. Außerdem sollten z.B. die Sprites von 0 beginnend fortlaufend nummeriert werden. Das geht am besten mit symbolischen Konstanten und Enumeration / EndEnumeration.

Nachdem Du das Programm verbessert hast, teste es bitte auf mindestens einem anderen Computer, bevor Du es hier postest. Eine gewisse Mindestqualität sollten zum Download angebotene Programme schon haben.

Grüße, Nino
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Phantombilder

Beitrag von STARGÅTE »

Vielleicht hat ja auch jemand noch ein paar Verbesserungsvorschläge für mich,
oder ein paar Ideen wie man den Code noch ein wenig vereinfachen oder kürzen könnte.
  • Bitte konsequent Einrücken. Das hilft nicht nur anderen dein Code zu lesen, sonden auch dir selber.
  • Versuche möglichs wenig Copy-Paste-Code zu erzeugen.
    Damit meine ich zum Beispiel die Abfrage der Buttons.
    Dort hast du 14 mal den gleichen bzw. ähnlichen Code.
    In solchen Fällen solltest du dir lieber etwas mehr Zeit nehmen und für genau diese Abfrage eine Prozedur schreiben, die du dann nur mit einer einzigen Zeile aufrufen kannst.
    An diese Prozedur werden dann u.a. die Koordinaten des Buttons und die Variablen die sich Verändert übergeben.
    Der Rückgabewert ist dann zB der neue Wert der Variable.
  • Nutze die Vorteile einer For:To:Next-Schleife.
    Wenn du 7 Bilder landen willst, die sich nur von einer Zahl unterscheiden, kannst du eine Schleife dafür nutzen, die durchlaufen wird:

    Code: Alles auswählen

    For Number = 0 to 6
       LoadSprite(500+Number,GetCurrentDirectory()+"sprites\main\hair_"+Str(Number+1)+".png")
    Next
    
  • Lese die Hilfe zu einigen Befehlen noch mal durch.
    Mit TransparentSpriteColor(#PB_Default, Color) kann eine standard Farbe definiert werden, die dnan für alle nachfolgenden geladenen Sprite übernommen wird.
  • Mehrmaliges Aufrufen von ExamineKeyboard() innerhalb einer Schleife (wie es bei dir der Fall ist) kann u.U. zu einem Event-Verlust führen. Wenn du es zwei mal aufrufst, aber nur einmal eine bestimmte Taste abfragst, kann es auch sein, dass die Taste genau dann gedrückt wurde, wenn du es nicht abfragst (wichtig bei KeyboardReleased())
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
S.Wisser
Beiträge: 8
Registriert: 19.07.2010 15:56
Computerausstattung: Prozessor: Sockel 775 Intel Celeron E3300 2X 2,5 GHz
Arbeitsspeicher: 4 GB RAM
Grafikkarte: ASUS EN 9500 GT OC
Wohnort: Eutin

Re: Phantombilder

Beitrag von S.Wisser »

Vielen Dank für Eure Antworten,

tut mir leid wenn ich mich erst jetzt wieder melde,
ich ziehe derzeit um und hatte deshalb nicht die Zeit
mich wieder auf das Thema zu konzentrieren.


Ich habe GetCurrentDirectory() durch ProgramPath() ersetzt, und es funktioniert.
Allerdings frage ich mich wofür der Befehl GetCurrentDirectory() eigentlich gut ist wenn man ihn nicht benutzen soll bzw. er nicht funktioniert.
Ich habe hier im Forum schonmal ein Programm (Analoge Uhr) hineingestellt, in dem ich GetCurrentDirectory() auch benutzt habe,
allerdings gab es da bei anderen keine Fehlermeldung. Warum ist das so?


TransparentSpriteColor(#PB_Default,RGB(255,0,110)) hat mir sehr geholfen, ist schon nervig wenn man tausendmal das selbe schreiben, bzw. kopieren/einfügen muss. Vielen Dank!

Ich will versuchen die Vorteile einer For:To:Next-Schleife besser zu nutzen.
Es stimmt ich erzeuge sehr viel Copy and Paste Code und will versuchen dies zu ändern.
Auch werde ich mich intensiver mit der Hilfe in PB auseinander setzen.

Ok, ich hab es jetzt nochmal auf nem alten Rechner ausprobiert aber die Fehlermeldung kommt immer noch, schade.


Ich werde mich an dieser Stelle auch erstmal verabschieden, melde mich aber wieder (wenn es recht ist) sobald ich den Code etwas verbessert habe.
Antworten