Laden...

Wie Sudoku Eingabe geschickt lösen?

Erstellt von Till-H vor 17 Jahren Letzter Beitrag vor 17 Jahren 4.217 Views
T
Till-H Themenstarter:in
75 Beiträge seit 2007
vor 17 Jahren
Wie Sudoku Eingabe geschickt lösen?

Hi,
ich hab jetzt den Code für ein Sudoku-Programm soweit fertig.. will das ganze jetzt in ein schönes Interface einbinden.
Wie mache ich am besten ein Interface dafür..also eine Sudoku-Eingabe und Ausgabe-Maske..
81 Textboxen zu erstellen ist ja irgendwie dumm...
Danke im vorraus
Till-H

M
1.439 Beiträge seit 2005
vor 17 Jahren

Selber zeichnen.
Bei www.codeproject.com habe ich sehr viele Sudoku-Controls gefunden. Kannst dich ja mal inspirieren lassen.

T
Till-H Themenstarter:in
75 Beiträge seit 2007
vor 17 Jahren

danke..
hat vielleicht noch jemand ein deutsches Tutorial da, um zu lernen, wie man Forms zeichnet?
Wäre nett..danke

R
494 Beiträge seit 2006
vor 17 Jahren
T
Till-H Themenstarter:in
75 Beiträge seit 2007
vor 17 Jahren

mhm..ok..danke..aber irgendwie hackt es grade bei mir..
ich kann damit jetz ein paar kästchen zeichnen und so..nur wie mach ich das, dass ich da reinschreib und dieses reinschreiben noch schön auswerte!?

MfG
Till-H

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Till-H,

hm, also 81 TextBoxen sind schon relativ viel, und viel mehr würde ich auch nicht empfehlen, aber wahrscheinlich in diesem Fall doch das einfachste. Die TextBoxen natürlich nicht im Designer, sondern in einer Schleife erzeugen.

herbivore

T
Till-H Themenstarter:in
75 Beiträge seit 2007
vor 17 Jahren

Ja,ok..
Nur wie würde ich es denn machen, wenn ich es nicht mit Textboxen mache..wäre mal gut zu wissen, falls man es in der Zukunft nochmal braucht 😉

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Till-H,

in [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox) zusammen mit [Tutorial] Gezeichnete Objekte mit der Maus verschieben findest du eigentlich alles was du brauchst. Du musst natürlich alles was eine TextBox automatisch bietet nachprogrammieren, z.B. welche "TextBox" gerade den Fokus hat und den blinkenden Textcursor. Keine Ahnung, was einem die ControlPaint-Klasse davon wieder abnimmt.

herbivore

J
3.331 Beiträge seit 2006
vor 17 Jahren

Hallo,

wäre dann **DataGrid **oder **DataGridView **nicht einfacher: ohne ColumnHeader und RowHeader, einheitliche Darstellung aller Zellen, vielleicht sogar passende Datenquelle dahinter?

Jürgen

1.274 Beiträge seit 2005
vor 17 Jahren

Hallo juetho,

wenn du das geschafft hast, bitte posten den Code ich wäre Interessiert wie du das mit den dreier Blöcken realisierst?

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein

J
3.331 Beiträge seit 2006
vor 17 Jahren

Nein nein, das ist nur eine Idee!!! Weitergehende Gedanken habe ich mir nicht gemacht.

Du hast recht, die Blöcke machen es schwieriger. Aber kann bei den Zellen nicht auch die Umrandung gesteuert werden?

Oder: Du erzeugst ein Panel mit 3x3 Feldern als UserControl und fügst das 9x ein.

Jürgen

T
94 Beiträge seit 2006
vor 17 Jahren

hallo,

also ich hab auch letztens sudoku programmiert (zumindest zum überprüfen ob ein grid stimmt)
ich habs so gemacht, dass ich mir ein usercontrol erstellt hab und darauf ein grid zeichne. das usercontrol bietet alle events die du brauchst (keydown, in dem du überprüfst welche zelle angeklickt wurde und zum abspeichern der zahl; und sizechange, in dem du das grid neuzeichnest, wenn die größe verändert wird, dann kannste direkt im designer dein control einstellen)
gespeichert hab ich das ganze in nem 2d-array.

als ansatz:


    public class Sudoku : UserControl
    {
        public Sudoku()
        {
            this.Height = 180;
            this.Width = 180;
            this.KeyDown += new KeyEventHandler(Sudoku_KeyDown);
            this.SizeChanged += new EventHandler(Sudoku_SizeChanged);
        }

        private void Sudoku_KeyDown(object sender, KeyEventArgs e)
        {
            // eingabe abfangen 
        }

        private void Sudoku_SizeChanged(object sender, EventArgs e)
        {
            this.Invalidate();
        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            //grid zeichnen.. als bsp:
            e.Graphics.DrawLine(new Pen(Color.Black), new Point(this.Width / 9, 0), new Point(this.Width / 9, this.Height)); 
        }
    }

mfg

//edit:
btw das array


private string[,] Sudokugrid = new string[9, 9];

das array lass ich im onpaint in ner verschachtelten for schleife durchlaufen und wenn ne zahl an ner stelle im array eingetragen wurde lass ich die mit drawstring reinschreiben.
ich glaub das wars ^^
deine funktionen/prozeduren kannste ja grad noch in die klasse reinschreiben
auch farbe des grids und sowas könnteste per property einstellbar machen

If you don't like me for who I am, then you don't like me for who I am, but all you're gonna get, is who I am.

T
Till-H Themenstarter:in
75 Beiträge seit 2007
vor 17 Jahren

Hallo,
danke für eure Zahlreichen antworten..
@thejudge: ich werd mir das mal genauer ansehen..ich danke dir für die hilfe..klingt nach genau dem, wonach ich suche!!
MfG
Till-H

1.378 Beiträge seit 2006
vor 17 Jahren

Ich hab auch ein Sudoku programmiert mit 81 Textboxen.

Hab die TextBoxen in ein 2Dimensionales Array gespeichert, sodass ich bequem mit x+y Koordinaten auf sie zugreifen kann. Um die 3x3 Blöcke zu realisieren, hab ich einfach bei der Positionierung(in der Schleife wo sie erstellt werden) bei der 4ten + 7ten Box etwas zu X oder Y etwas dazuaddiert, damit ein breiterer abstand entsteht.

Hab zusätzlich noch in den TextBoxen jeweils ein Label, das die noch verfügbaren Zahlen anzeigt... geht sich aber mit der Performance ganz gut aus.