Laden...

GUI für Damespiel: Wie Figuren ziehen?

Erstellt von ACrysis vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.323 Views
A
ACrysis Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren
GUI für Damespiel: Wie Figuren ziehen?

Schoenen guten Tag!

Ich habe ein relativ großes Problem....1. Bin ich C# anfängen und habe eine Aufgabe gekriegt, ein Programm bzw. Spiel Names Dame zu programmieren.....naja ich habe mich daran versucht und habe schon ein bisschen was hinbekommen, ich habe die möglichkeit mit MouseClick oder Mousedown und Mouseup den Stein diagonal zu bewegen. Also Bei MouseClick muss er ja die Position speichern und die dann beim nächsten Click wieder ausführen.....bei einem Mousedown muss er ja den Stein per gedrückter Maustaste zum nächsten Feld kriegen, wenn das gemacht ist und man die Taste loslässt dann soll er den Stein dorthin bewegen....hier einmal der Code


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Schachdame
{
    public partial class Form1 : Form
    {


        private int h = 0, b = 0;

        private int[,] feld = {
                                   {0,2,0,2,0,2,0,2},
                                   {2,0,2,0,2,0,2,0},
                                   {0,2,0,2,0,2,0,2},
                                   {1,0,1,0,1,0,1,0},
                                   {0,1,0,1,0,1,0,1},
                                   {3,0,3,0,3,0,3,0},
                                   {0,3,0,3,0,3,0,3},
                                   {3,0,3,0,3,0,3,0},

                               };
        public Form1()
        {
            InitializeComponent();
            Text = "Brettspiel Dame";
        }
       

        private void Brett_Paint(object sender, PaintEventArgs e)
        {
            {


                Graphics gr = e.Graphics;
                for (int w = 0; w < 8; w++)
                {


                    for (int s = 0; s < 8; s++)
                    {


                        if (feld[w, s] == 0)
                        {
                            //Farbe des Spielbretts(Weiß)
                            SolidBrush Spielbrett = new SolidBrush(Color.White);
                            // Größe eines Feldes
                            gr.FillRectangle(Spielbrett, b, h, 60, 60);
                        }

                        if (feld[w, s] == 1)
                        {
                            // Farbe des Spielbretts(Dunkelblau)
                            SolidBrush Spielbrett = new SolidBrush(Color.DarkBlue);
                            // Größe eines Feldes
                            gr.FillRectangle(Spielbrett, b, h, 60, 60);
                        }

                        if (feld[w, s] == 2)
                        {
                            // Hintergrund der Figurposition(Dunkelblau)
                            SolidBrush Figur = new SolidBrush(Color.DarkBlue);
                            // Größe eines Feldes
                            gr.FillRectangle(Figur, b, h, 60, 60);

                            // Nun kommt die Farbe und Position der Figur(Beige) und Größe
                            
                            gr.FillEllipse(new SolidBrush(Color.Black), b + 12, h + 12, 35, 35);
                            gr.FillEllipse(new SolidBrush(Color.BlanchedAlmond), b + 15, h + 15, 30, 30);
                            gr.FillEllipse(new SolidBrush(Color.BurlyWood), b + 17, h + 17, 25, 25);
                            
                        }

                        if (feld[w, s] == 3)
                        {
                            // Hintergrund der Figurposition(Dunkelblau)
                            SolidBrush Figur = new SolidBrush(Color.DarkBlue);
                            gr.FillRectangle(Figur, b, h, 60, 60);
                            // Nun kommt die Farbe, Position der Figur(Grau) und Größe
                            gr.FillEllipse(new SolidBrush(Color.Gray), b + 12, h + 12, 35, 35);
                            gr.FillEllipse(new SolidBrush(Color.DarkOrange), b + 15, h + 15, 30, 30);
                            gr.FillEllipse(new SolidBrush(Color.GhostWhite), b + 17, h + 17, 25, 25);
                        }

                        //Verändert die Abstände der Felder(Breite)
                        b = b + 60;

                    }
                    //Verändert die Abstände der Felder(Länge)
                    h = h + 60;
                    b = 0;


                }


            }
        }
    }
}

Auf der Windows Form habe ich nur ein Panel gemacht wo das Feld drin steht.

Wäre echt dankbar für eure Hilfe.

mfg ACrysis

T
574 Beiträge seit 2008
vor 14 Jahren

Also 1. seh ich keine Frage ...
2. hast du - im Gegensatz zu meiner Aufzählung, nach dem 1. kein 2.

Was also willst du?

691 Beiträge seit 2007
vor 14 Jahren

Hi.
Erstmal bitte [Hinweis] Wie poste ich richtig? Punkt 4 und 5 beachten.

Dann wird die Forumssuche sicherlich bei ähnlichen Aufgabenstellungen helfen: Aufgabenstellungen à la "bauen sie Schach". Les dir am besten mal solche Threads durch.

Um dir dann noch einen konkreten Tipp zu geben: Versuche die Logik des Spiels in eine extra Klasse zu verlagern. Diese Logik baust du dann soweit aus, das sie im Grunde ohne grafische Oberfläche funktioniert. (Vonwegen "platziere Stein hier", "ziehe von hier bis da") Dann kannst du anschließend eine grafische Oberfläche draufsetzen, die sich um das Darstellen und das Interagieren kümmert.

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

A
ACrysis Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

Mein Problem liegt darin das ich nicht in C# formulieren kann, dass sich die Steine auf den schwarzen Felder bewegen kann....bzw. wie das mit der Mouse funktion gehen soll

Also die Aufgabe bisher ist, dass sie sich VORWÄRTS und DIAGONAL bewegen so wie das Spiel Dame halt ist....mehr brauch es nicht tun.

2.760 Beiträge seit 2006
vor 14 Jahren

Dann gibts mal ein bisschen Lesestoff: [Tutorial] Gezeichnete Objekte mit der Maus verschieben

Also momentan hast du keine Objekte für deine Spielfiguren, die wirst du brauchen. Dein Spielfeld solltest du auch in eine eigene Klasse packen damit du dir unproblematisch merken kannst welche Firguren wo stehen usw...

Weitere Ansätze kannst du auch diesem Thread: OOP Schachprogramm: Herangehemsweise/Klassendesign entnehmen.

A
ACrysis Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

Ok also ich habe mich mal ein bisschen probiert und nun kann ich sie auch bewegen, zwar ueberall hin aber es klappt, hier mal der Quellcode


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Schachdame
{
    public partial class Form1 : Form
    {


        private int h = 0, b = 0, DownX, DownY, upX, upY,s1,s2;

        private int[,] feld = {
                                   {0,2,0,2,0,2,0,2},
                                   {2,0,2,0,2,0,2,0},
                                   {0,2,0,2,0,2,0,2},
                                   {1,0,1,0,1,0,1,0},
                                   {0,1,0,1,0,1,0,1},
                                   {3,0,3,0,3,0,3,0},
                                   {0,3,0,3,0,3,0,3},
                                   {3,0,3,0,3,0,3,0},

                               };
        public Form1()
        {
            InitializeComponent();
            Text = "Brettspiel Dame";
        }
       

        private void Brett_Paint(object sender, PaintEventArgs e)
        {
            {


                Graphics gr = e.Graphics;
                for (int w = 0; w < 8; w++)
                {


                    for (int s = 0; s < 8; s++)
                    {


                        if (feld[w, s] == 0)
                        {
                            //Farbe des Spielbretts(Weiß)
                            SolidBrush Spielbrett = new SolidBrush(Color.White);
                            // Größe eines Feldes
                            gr.FillRectangle(Spielbrett, b, h, 60, 60);
                        }

                        if (feld[w, s] == 1)
                        {
                            // Farbe des Spielbretts(Dunkelblau)
                            SolidBrush Spielbrett = new SolidBrush(Color.DarkBlue);
                            // Größe eines Feldes
                            gr.FillRectangle(Spielbrett, b, h, 60, 60);
                        }

                        if (feld[w, s] == 2)
                        {
                            // Hintergrund der Figurposition(Dunkelblau)
                            SolidBrush Figur = new SolidBrush(Color.DarkBlue);
                            // Größe eines Feldes
                            gr.FillRectangle(Figur, b, h, 60, 60);

                            // Nun kommt die Farbe und Position der Figur(Beige) und Größe
                            
                            gr.FillEllipse(new SolidBrush(Color.Black), b + 12, h + 12, 35, 35);
                            gr.FillEllipse(new SolidBrush(Color.BlanchedAlmond), b + 15, h + 15, 30, 30);
                            gr.FillEllipse(new SolidBrush(Color.BurlyWood), b + 17, h + 17, 25, 25);
                            
                        }

                        if (feld[w, s] == 3)
                        {
                            // Hintergrund der Figurposition(Dunkelblau)
                            SolidBrush Figur = new SolidBrush(Color.DarkBlue);
                            gr.FillRectangle(Figur, b, h, 60, 60);
                            // Nun kommt die Farbe, Position der Figur(Grau) und Größe
                            gr.FillEllipse(new SolidBrush(Color.Gray), b + 12, h + 12, 35, 35);
                            gr.FillEllipse(new SolidBrush(Color.DarkOrange), b + 15, h + 15, 30, 30);
                            gr.FillEllipse(new SolidBrush(Color.GhostWhite), b + 17, h + 17, 25, 25);
                        }

                        //Verändert die Abstände der Felder(Breite)
                        b = b + 60;

                    }
                    //Verändert die Abstände der Felder(Länge)
                    h = h + 60;
                    b = 0;


                }
                h = 0;

            }
        }

        private void Brett_MouseDown(object sender, MouseEventArgs e)
        {
            DownX = (e.X / 60);
            DownY = (e.Y / 60);
            s1 = feld[DownY,DownX];


        }

        private void Brett_MouseUp(object sender, MouseEventArgs e)
        {
            upX = (e.X / 60);
            upY = (e.Y / 60);
            s2 = feld[upY, upX];

            feld[DownY, DownX] = s2;
            feld[upY, upX] = s1;

            this.Refresh();
        }
    }
}

DOCH mein Problem ist....wie ich das Spiel neu starten kann, also das mit dem Diagonalen mache ich mit einer If abfrage ok, doch wenn ich auf ''Datei'' und ''Neues Spiel'' gehe, wie setzt er die Spielfiguren wieder zurück zum Start?

mfg ACrysis

D
171 Beiträge seit 2008
vor 14 Jahren

genau so wie du die beim staretn der anwendung da hin bekommst wo sie am anfang stehen

2.760 Beiträge seit 2006
vor 14 Jahren

Also momentan hast du keine Objekte für deine Spielfiguren, die wirst du brauchen. Dein Spielfeld solltest du auch in eine eigene Klasse packen damit du dir unproblematisch merken kannst welche Firguren wo stehen usw...

IMHO immer noch der Fall...

276 Beiträge seit 2007
vor 14 Jahren

Hi,

also erstmal ist es vielleicht nicht so gut, wenn du uns ständig den kompletten Code postest...^^. Du musst immer bedenken, dass wir nicht in dem Projekt drinstecken, schon gar nicht so tief wie du, somit sollten deine Fragen möglichst eindeutig sein, somit auch der Code-Teil an dem es hängt.

Du kannst dir doch ne Klasse für deine Spielfiguren machen, die Standardkoordinaten für deine Spielfiguren enthält, und die rufst du dann einfach auf und lässt so bei jedem(!) Spielanfang deine Figuren"neu" setzen.

Wenn die frei wählbar sein sollen, kannst du ja vorher eine Abfrage machen, wo die Figuren hinsollen, dann kannst du die dir speichern und bei einem "Neuen Spiel" wieder auslesen bzw. setzen.

A
ACrysis Themenstarter:in
5 Beiträge seit 2009
vor 14 Jahren

Ok alles klar dann erstmal sorry für das Codeposten und ich werde mich das nächste mal auf das wichtigste beschränken 😉

mfg ACrysis