Laden...

Ufo Finding

Erstellt von Dexter vor 18 Jahren Letzter Beitrag vor 18 Jahren 4.622 Views
D
Dexter Themenstarter:in
481 Beiträge seit 2005
vor 18 Jahren
Ufo Finding

So hab jetzt n neues Spiel fertiggestellt namens Ufo Finding.
Vorgehensweiße bei diesem Spiel ist unter "Hilfe", "Hilfe" beschrieben.
In ner späteren Version werd ich noch Schwierigkeitsgrade einbauen, also mehr Felder, bzw mehr Ufo's usw.

Bin erfreut über Bug Report's, Verbesserungsideen, u. ä.

Dexter

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

D
Dexter Themenstarter:in
481 Beiträge seit 2005
vor 18 Jahren

Ahja was ich noch Vergessen habe. Requierment ist .NET Frame Work 2.0 Beta 2

Dexter

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Dexter,

nettes Spiel! Hier wie gewünscht das Feedback:*'Hilfe' sollte das letzte Menü sein (ist Konvention). *Den Namen sollte man nicht vor dem Spiel eingeben müssen, sondern bevor man in die High-Score-Liste eingetragen wird (natürlich sollte sich das Spiel den Namen dann für das nächste Mal merken). *Man sollte sofort losspielen können, ohne Neues Spiel aufrufen zu müssen, zumal man visuell nicht unterscheiden kann, ob ein leeres Spielbrett schon spielbar ist oder nicht. *Beim Klick (neuzeichnen) flackert das Spiel. Vielleicht solltest du nur das Feld neuzeichnen lassen, auf das man gerade geklickt hat. *Man sollte sehen, wie viele Ufos noch zu finden sind.

herbivore

D
Dexter Themenstarter:in
481 Beiträge seit 2005
vor 18 Jahren

1.Werd ich ändern
2.Ist auch möglich
3.Werd ich mir überlegen wie ich das am beste mache
4.Hab ich mir auch schon gedacht, aber wie soll ich das machen wenn der spieler zb kurz n anderes fenster drüberlegt, dann is das ganze weg. mach das alles per panel
5.is so gut wie drin

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Dexter,

es müsste ja reichen, wenn du das Invalidate auf das gerade geklickte Feld beschränkst.

herbivore

D
Dexter Themenstarter:in
481 Beiträge seit 2005
vor 18 Jahren

Ich glaub wir reden aneinander vorbei, außer man kann sich n feld in nem panel neu zeichnen lassen.

Also:
Ich hab n panel auf dem zeichne ich das ganze im paint event und um herauszufinden, welches angeklickt wurde mach ich das so:


private void panel_MouseDown(object sender,...)
{
int x = e.X / dx;
int y = e.y / dy;

Wobei dx = panel.Width / Anzahl der Spalten;
und dy = panel.Heigth / Anzahl der Zeilen;

Wenn ich das ganze nich im paint neu zeichnen würde, dann würde wenn n anderes fenster über dem spiel liegt, der teil einfach verschwinden. oder gibts da ne einfache lösung dazu?

Dexter

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Dexter,

also so ganz verstehe ich nicht, wie du zeichnest. Jedes einzelne Feld ist ein eigenes Panel? Das wäre nicht gut. Besser ist ein Panel für alle Felder zusammen zu nehmen. Siehe z.B. Optimierungsideen ?

herbivore

D
Dexter Themenstarter:in
481 Beiträge seit 2005
vor 18 Jahren

Das hab ich ja gesagt, ich habe 1 panel für alle Felder und ich zeichne immer alles neu, deshalb flackert es wahrscheinlich auch.

Hat irgend wer ne idee, wie man das besser machen könnte?

Dexter

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo

naja, oben hast du geschrieben, ich habe "Ich hab n panel". Aber egal!

Wenn du in OnPaint und nur in OnPaint zeichnest (was gut wäre), musst du doch Invalidate, Refresh oder Update aufrufen, um das Zeichnen anzustoßen. Bei Invalidate kann man aber auch angeben, dass nur ein bestimmter Bereich neu gezeichnet werden soll. Im OnPaint bekommst du das Rectangle übergeben, dass gezeichnet werden soll. Entsprechend kannst du aus den Koordinaten ausrechnen, welche Felder du neu zeichen muss und welche nicht.

herbivore

D
462 Beiträge seit 2005
vor 18 Jahren

Weitere Verbesserung:

MinimumSize für das Form angeben, da man sonst das Fenster bis auf die Titelleiste verkleinern kann und bei kleinen Fenstergrößen es unspielbar wird.

mfg

D
Dexter Themenstarter:in
481 Beiträge seit 2005
vor 18 Jahren

So neue Version is mal da mit euren anregungen drin:

Verbesserungen:Flackern wurde behoben
Spielernamen wird beim Eintrag in die Highscore eingegeben
Letzter Spielernamen wird gespeichert
Minimum Size wurde jetzt eingestellt
Hilfe steht jetzt an letzter Stelle
Wird angezeigt wie viel versteckte Ufo's noch da sind
Wenn das spiel nicht gestartet ist, wird in allen Feldern ein "x"dargestellt

Bugs:

Beim Resizen flackerts, weil ich da alles neu zeichnen muss und die Ufo's am unteren Rand werden nicht bis ganz an den Rand gezeichnet. Keine Ahnung wieso.

Dexer

//Edit achja herbivore ich meinte mit "n panel", "ein panel" nicht n = irgend ne zahl 😉

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

D
58 Beiträge seit 2005
vor 18 Jahren

Hallo,

auch von mir noch eine kleine Anregung.

Fände es praktisch, wenn man irgendwie markieren kann, an welcher Stelle sich sicher kein Ufo befinden kann (wie zum Beispiel in Minesweeper mit rechter Maustaste), da es sonst relativ anstrengend und unkomfortabel zu spielen ist.

Viele Grüße

Christian

S
1.047 Beiträge seit 2005
vor 18 Jahren

Beim Resizen flackerts, weil ich da alles neu zeichnen muss und die Ufo's am unteren Rand werden nicht bis ganz an den Rand gezeichnet. Keine Ahnung wieso.

hast du doublebuffering angeschalten? das müßte eigentlich gegen das flackern helfen
das die ufos nicht bis um rand gezeichnet werden ist klar.

da du das panel beliebig vergrößern/verkleinern kannst, bekommst du keine klar definierten breiten und höhen, die sich ganzzahlig durch eine gewisse ziffer (dein raster) teilen lassen.

bsp.
du zeichnest ein gewisses raster auf dein panel, mit sagen wir mal 5x5 pixel-feldern

wenn dein panel jetzt 30x30 groß ist, hast du keine ränder, da 30/5 = 6 rest 0
ist dein panel aber 31/31 groß, hast du 30/5 = 6 rest 1, d.h. du bekommst unten und rechts 1 pixel rand
bei 32x32 sind es 2 pixel usw. bis max. 4 pixel bei 34x34
erst bei 35x35 hast du wieder keinen rand mehr...

bei deinem panel ist das genau so.

D
Dexter Themenstarter:in
481 Beiträge seit 2005
vor 18 Jahren

Ne hab meines Wissens nach double buffering aus. Wie kann man das einschalten?

Dexter

Programmierer sind Maschinen die Koffein in Quellcode umsetzen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Dexter,

Form.DoubleBuffered = true;

Ansonsten Forumssuche.

herbivore

1.271 Beiträge seit 2005
vor 18 Jahren

Über die Control.SetStyle-Methode. Ist aber private -> nur bei eigenen Controls möglich. Schau dir die Methode am besten mal in der SDK-Doku an.

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.