Laden...

Vier-Gewinnt (wieder mal ^^]

Erstellt von wizer vor 15 Jahren Letzter Beitrag vor 15 Jahren 6.112 Views
W
wizer Themenstarter:in
196 Beiträge seit 2007
vor 15 Jahren
Vier-Gewinnt (wieder mal ^^]

Ausgehend von einem Thread den ich hier im Forum gelesen habe, bei dem es darum geht das o.g. Spiel so OO wie möglich zu erstellen, wollte ich nun meine Lösung präsentieren

Das ganze besteht aus einem abgeleitenden Panel welches folgende Einstellungen erlaubt: Reihen, Spalten, Rechtecke oder Kreise und GridLines.

Also der Code ist gesamt denke ich wirklich so OO wie es nur geht. Außerdem kann man unbrenzt Spieler hinzufügen!
Ahja das ganze hab ich mit GDI+ gemacht.

Bekannte Bugs:

  • Spielsteine verschwinden nach minimieren, maximieren (also wenn neu gezeichnet werden muss. Irgendwas hab ich da falsch gemacht ...)
  • Zurzeit wird noch nicht berrechnet ob man gewonnen hat (Hab bis jetzt noch keine Lösung dafür gefunden ...)

PS: Das Programm mit dem Source poste ich gleich (schreib grad von meinem Handy)

mfg wizer

1.433 Beiträge seit 2006
vor 15 Jahren
  • Spielsteine verschwinden nach minimieren, maximieren (also wenn neu gezeichnet werden muss. Irgendwas hab ich da falsch gemacht ...) Da würde ich spontan auf einen fehlenden Refresh Spielfeldes tippen.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo wizer,

klingt als würdest du nicht im OnPaint zeichnen. Siehe [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox)

herbivore

Gelöschter Account
vor 15 Jahren

du hast doch eine spielfeldmatrix oder? da lässt sich doch leicht berechnen, ob jemand 4 steine in einer reihe hat.

W
wizer Themenstarter:in
196 Beiträge seit 2007
vor 15 Jahren

Hi. Sry hab wirklich vergessen im OnPaint zu zeichnen. Also hier jetzt das Beispiel und der Source!

mfg wizer

PS: Ja ob man gewonnen hat oder nicht lässt sich sicher leicht berrechnen. Ein paar Schleifen ... hatte jedoch bis jetzt noch keine zeit dafür ^^

W
wizer Themenstarter:in
196 Beiträge seit 2007
vor 15 Jahren
Gelöschter Account
vor 15 Jahren

hallo,

ein wenig konstruktive kritik:

private void CheckFinished()
        {
            if (false)
                Gewonnen(this, null);
        }

ist wohl nicht sinnig, da die if konstant false ist...

Graphics g = this.CreateGraphics();
            g.DrawImage(bmp, 0, 0);
            g.Dispose();

das gehört überarbeitet.

public void Restart()
        {
            Graphics grph = this.CreateGraphics();
            grph.Clear(this.BackColor);
            DrawGrid(this.CreateGraphics());
            for (int i = 0; i < fields.Length; i++)
                fields[i] = false;
        }

hier gleich 2 mal create graphics. ich denke du solltest dir in der faq den beitrag übers zeichenen in winforms durchlesen und das korrekte handling mit creategraphics nochmals ansehen. unter anderem musst du graphics immer selber wieder disposen....

was mir noch so aufgefallen ist:

  1. kein bl: alle aufgaben übernimmt bei dir die gui. doch das ist falsch.
  2. keine datenhaltungsobjekte: z.b. das spielfeld gehört in ein eigenes objekt herein.
  3. keine dokumentation: wenn du das in einer firma machst ........

als allererstes programm eine nette aufgabe aber an der umsetzung kannst du noch feilen.

gruß Jack

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo JAck30lena,

if (false) Gewonnen(this, null); ist wohl nicht sinnig, da die if konstant false ist...

nicht sinnig, aber z.Z. wohl Absicht:

Zurzeit wird noch nicht berrechnet ob man gewonnen hat (Hab bis jetzt noch keine Lösung dafür gefunden ...)

Hallo wizer,

... du musst nur von dem zuletzt geworfenen Stein ausgehend prüfen, ob in horizontaler, vertikaler oder diagonaler Richtung 3 Steine gleicher Farbe angrenzen. Eine reine Fleißaufgabe,

herbivore