C# Konsolenanwendung

  • hallo erstmal!^^
    bin neu hier und kenn mich noch nicht so gut aus aber hoffe, dass ich rcihtig bin...

    bin jtz erst 15 und hab jtz dann das 1.Jahr in der IT-Abteilung in krems hinter mir....

    haben über das Jahr in Programmieren nur C# Konsolenanwendung gemacht ...

    ich bin leider eine von den Personen die das nicht gleich aus dem FF können sondern Zeit brauchen...
    ich interessiere mich schon dafür nur bin einfach noch ein bisschen hilflos und hoffe ihr könnt mir helfen....

    also mein derzeitiges Problem sind jtz die Arrays...kann mir jemand das mal genauer erklären damit ich mir das mal besser vorstellen kann...und das größte Problem ist ich weiß nie wie ich das dann praktisch umsetzen kann...was ich genau schreiben muss damit das und das passiert...

    Programmieren zurzeit gerade in der Konsolenanwendung ein Tic Tac Toe spiel und ich schaff das einfach nicht...

    bitte um hilfe...könnt mir per email schicken oder ins forum^^

    danke schonmal im voraus^^


    glg
    Lola

  • Ich vermute mal, deine Programme haben zur Zeit jede Menge Variablen

    Code
    int feld0; int feld1; int feld2; ...

    Mit Arrays kannst du die einfach zusammen fassen in

    Code
    int[] feld = new int[3];

    und dann einfach mit

    Code
    feld[0]; feld[1]; feld[2];

    darauf zugreifen.
    Meistens wirst du aber auf alle in gleicher Weise zugreifen. Das machst du dann einfach in einer Schleife

    Code
    for(int i = 0; i < feld.Length; i++)
    {
        feld[i] = ...;
        ... = feld[i];
        etc.
    }

    Weitere Informationen findest du auch bei den üblichen Verdächtigen:
    MSDN: Arrays (C#-Programmierhandbuch)
    Wikipedia: Array data structure

    Fachschaft Informatik

  • HTL in Krems... wie schön... (hab dort letztes jahr in tiefbau maturiert)

    betreffend des tic tac toes...
    allgemeine foren-regeln: besser beschreiben

    • wie soll die dateneingabe funktionieren? (vermutlich über console.readLine() o.ä. )
    • soll es "nur" überprüfen ob die eingabe korrekt ist und wer gewonnen hat, oder soll es auch eine AI (einen computer gegner) haben?

    noch ein allgemeiner tipp, schreib dir zerst auf ein zetterl auf, welche bedingungen zB für die korrektheit des spielfeldes nötig sind
    bei TTT: 5*O + 4*X oder 4*O + 5*X das das spielfeld korrekt ist, etc.

    *beiläufig* macht tic tac toe auf der console sinn ^^

    Thomas

  • es ist eine schulaufgabe - die frage nach dem sinn stellt sich da, wie auf der uni passend weitergeführt, oftmals nicht.

    was hast du denn bis jetzt?

    Für mich denkt mdk!

  • ja danke mal an die vielen antworten^^

    ja also wegen des tic tac toes...das steigert sich immer von zeit zu zeit...wir haben es schon so weit geschafft dass man zu zweit spielen kann... aber noch nicht gegen den computer selber. das einzige was das program tun muss,ist zu überprüfen ob 3 felder gleich sind egal ob horizontal,vertikal oder diagonal...

    des letzteren haben wir noch das spielfeld "graphisch" ausgegeben und so das man eingeben kann wie viele felder man spielt^^

    das ist zurzeit ein programm das ein schulkollege von mir geschrieben hat...das ist nur das tic tac toe...

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace TicTacToe
    {
    class Program
    {
    static int Max = 3;
    static int Spieler = 1;
    static bool gewonnen = false;
    static int spielzüge = 0;
    static int gesamtscore1 = 0;
    static int gesamtscore2 = 0;

    static void Main(string[] args)
    {
    int[,] spielfeld = new int[3, 3];

    Print(spielfeld);

    while (1==1)
    Game(spielfeld);


    }

    static void Game(int [,] spielfeld)
    {
    int SIEG_Spieler = 0;

    while (gewonnen == false)
    {


    Spielzug(spielfeld);

    if (spielzüge >= 5)
    SIEG_Spieler = Auswertung(spielfeld);

    if (Spieler == 1)
    Spieler = 2;
    else
    Spieler = 1;

    Print(spielfeld);

    }


    if (SIEG_Spieler == 3)
    Console.WriteLine("Es ist unentschieden!");

    else if (SIEG_Spieler != 0)
    {
    Console.WriteLine("Glückwunsch Spieler" + SIEG_Spieler + " hat gewonnen!");
    if (SIEG_Spieler == 1)
    gesamtscore1++;
    else
    gesamtscore2++;
    }

    for (int i = 0; i < Max; i++)
    {
    for (int j = 0; j < Max; j++)
    {
    spielfeld[i, j] = 0;
    }
    }

    Console.ReadLine();
    Console.Clear();
    Spieler = 1;
    Print(spielfeld);

    gewonnen = false;



    }

    static void Spielzug(int[,] spielfeld)
    {
    string eingabe;
    int x, y;


    Console.Write("Spieler" + Spieler + ": ");
    eingabe = Console.ReadLine();

    x = Int32.Parse(eingabe.Substring(0, 1));

    y = Int32.Parse(eingabe.Substring(2, 1));

    if ((spielfeld[x - 1, y - 1] == 0) && (x <= 3) && (y <= 3))
    {
    spielfeld[x - 1, y - 1] = Spieler;
    spielzüge++;
    }
    else
    {
    Console.WriteLine("Falsche Eingabe");
    Console.ReadLine();
    Game(spielfeld);
    }

    }


    static int Auswertung(int[,] spielfeld)
    {
    int s = 1;
    int t = 1;
    int patt = 0;

    for (int zeilen = 0; zeilen < Max; zeilen++)
    {
    if ((spielfeld[s, zeilen] == spielfeld[s - 1, zeilen]) && (spielfeld[s, zeilen] == spielfeld[s + 1, zeilen]))
    {
    if (spielfeld[s, zeilen] != 0)
    {
    gewonnen = true;
    return spielfeld[s, zeilen];

    }
    }
    }


    for (int spalten = 0; spalten < Max; spalten++)
    {
    if ((spielfeld[spalten, s] == spielfeld[spalten, s-1]) && (spielfeld[spalten, s] == spielfeld[spalten, s+1]))
    {
    if (spielfeld[spalten, s] != 0)
    {
    gewonnen = true;
    return spielfeld[spalten, s];

    }
    }
    }


    if ((spielfeld[s, t] == spielfeld[s - 1, t - 1]) && (spielfeld[s, t] == spielfeld[s + 1, t + 1]))
    {
    if (spielfeld[s, t] != 0)
    {
    gewonnen = true;
    return spielfeld[s, t];
    }
    }


    if ((spielfeld[s, t] == spielfeld[s - 1, t + 1]) && (spielfeld[s, t] == spielfeld[s + 1, t - 1]))
    {
    if (spielfeld[s, t] != 0)
    {
    gewonnen = true;
    return spielfeld[s, t];
    }
    }

    for (int i = 0; i < Max; i++)
    {
    for (int j = 0; j < Max; j++)
    {
    if (spielfeld[i, j] != 0)
    patt++;
    }
    }

    if (patt == 7)
    {
    gewonnen = true;
    return 3;

    }
    else
    return 0;


    }


    static void Print(int [,] spielfeld)
    {
    Console.Clear();

    Console.WriteLine("Spieler1: " + gesamtscore1 + " Spieler2: " + gesamtscore2);
    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine("______________");
    Console.WriteLine();

    for (int i = 0; i < Max; i++)
    {
    for (int j = 0; j < Max; j++)
    {

    Console.Write(" ");
    if (spielfeld[i, j] == 0)
    Console.Write(" ");
    else if (spielfeld[i, j] == 1)
    {
    Console.ForegroundColor = ConsoleColor.Red;
    Console.Write("X");
    Console.ForegroundColor = ConsoleColor.Gray;
    }
    else if (spielfeld[i, j] == 2)
    {
    Console.ForegroundColor = ConsoleColor.Blue;
    Console.Write("O");
    Console.ForegroundColor = ConsoleColor.Gray;
    }

    Console.Write(" | ");

    }
    Console.WriteLine();
    Console.WriteLine("______________");
    Console.WriteLine();


    }

    Console.WriteLine();
    Console.WriteLine();
    Console.WriteLine();

    }


    }
    }


    so ich glaube die nachricht ist jtz lang genug^^

    PS: nochmals großes danke an alle die mir schon so gute tipps gegeben haben^^

  • für Quellcode bitte die

    Code
    Code-Formattierung (das #-Symbol)


    benutzen

    tic tac toe lässt sich per "AI" unbesiegbar programmieren :D
    geht relativ einfach, man muss nur einmal alle fälle auf papier bringen

    Thomas

  • achja und bitte noch eine erklärung zu zweidimensionalen arrays...

    also wenn ich jtz z.B.:

    int[,]feld=new int[5,6];

    das array hab....
    wie kann ich mir das jtz ungefähr vorstellen welche zahl für was steht...

    also wie ist dieses array dann aufgebaut?

    glg
    LOla

  • ist über folgende schreibweise ev. leichter zu erklären:

    Code
    int[][] field = new int[3][5]

    d.h. du hast 3 array-felder mit jeweils feldlänge 5

    Code
    0 1 2 3 4
    [0] i i i i i
    [1] i i i i i
    [2] i i i i i

    [1][2] greift auf folgenden zu:

    Code
    0 1 2 3 4
    [0] i i i i i
    [1] i i X i i
    [2] i i i i i

    i.a. ist der 1. wert die höhe, der 2. die breite

    richtig interessant wirds ja erst bei mehr dimensionen ;)

    Thomas

    Einmal editiert, zuletzt von anwesender (7. Juni 2009 um 21:06) aus folgendem Grund: korrektur

  • Code
    int[][] field = new int[3][5]

    [1][3] greift auf folgenden zu:

    Code
    1 2 3 4 5
    [0] i i i i i
    [1] i i X i i
    [2] i i i i i

    richtig interessant wirds ja erst bei mehr dimensionen ;)

    manchmal reichen aber auch schon 2 dimensionen um sich selbst zu verwirren :P oder warum hast du bei den reihen brav von 0-2 gezaehlt und bei den spalten faelschlich 1-5?

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!