// Schachbrett manuell step by step eingeben public Schachbrett manuellEingeben() { int gegnerzahl; // Stellung initialisieren Console.Clear(); Console.Write("Enter board width in fields (3 - 11) >"); string eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int breite = Convert.ToInt32(eingabe); if (breite < 3) { breite = 3; } if (breite > 11) { breite = 11; } Console.Write("Enter board length in fields (3 - 11) >"); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int hoehe = Convert.ToInt32(eingabe); if (hoehe < 3) { hoehe = 3; } if (hoehe > 11) { hoehe = 11; } schachbrett = new Schachbrett(breite, hoehe); Console.Clear(); zeigeSchachbrett(); // Narr= setzen Console.Write("Enter Fool X-Position (1 - {0}) >", breite); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int nx = Convert.ToInt32(eingabe); if (nx < 1) { nx = 1; } if (nx > breite) { nx = breite; } nx--; Console.Write("Enter Fool Y-Position (1 - {0}) >", hoehe); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int ny = Convert.ToInt32(eingabe); if (ny < 1) { ny = 1; } if (ny > hoehe) { ny = hoehe; } ny--; NarrX = nx; NarrY = ny; schachbrett.setSide(NarrX, NarrY, 0); schachbrett.setType(NarrX, NarrY, 0); Console.Clear(); zeigeSchachbrett(); // Gegner eingeben und verteilen Console.Write("Number of enemies (1 - {0}) >", hoehe * breite / 3); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } gegnerzahl = Convert.ToInt32(eingabe); if (gegnerzahl < 1) { gegnerzahl = 1; } if (gegnerzahl > hoehe * breite / 3) { gegnerzahl = hoehe * breite / 3; } int gesamtEifer = 0; int gesamtPrimaer = 1; int gesamtWachsam = 0; for (int i = 0; i < gegnerzahl; i++) { bool positionOk = false; int posx; int posy; do { Console.Write("Enter Enemy {0} posX (1 - {1}) >", i, breite); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } posx = Convert.ToInt32(eingabe); if (posx < 1) { posx = 1; } if (posx > breite) { posx = breite; } posx--; Console.Write("Enter Enemy {0} posY (1 - {1}) >", i, hoehe); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } posy = Convert.ToInt32(eingabe); if (posy < 1) { posy = 1; } if (posy > hoehe) { posy = hoehe; } posy--; if (schachbrett.getSide(posx, posy) == -1) { positionOk = true; } } while (!positionOk); if (i == 0) { schachbrett.setPrimaerZiel(posx, posy, true); } Console.Write("Enter Enemy {0} Type (1 pawn, 2 rook, 3 bishop, 4 knight, 5 queen, 6 king) >", i); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int typ = Convert.ToInt32(eingabe); if (typ < 1) { typ = 1; } if (typ > 6) { typ = 6; } Console.Write("Enter Enemy {0} Zeal (Probability to move or attack, 1 - 9) >", i); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int eif = Convert.ToInt32(eingabe); if (eif < 1) { eif = 1; } if (eif > 9) { eif = 9; } schachbrett.setSide(posx, posy, 1); schachbrett.setType(posx, posy, typ); schachbrett.setEifer(posx, posy, eif); gesamtEifer += schachbrett.getEifer(posx, posy); if (i == 0) { schachbrett.setType(posx, posy, 6); } Console.Write("Enter Enemy {0} Quickness (0 slow, 1 quick) >", i); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int wac = Convert.ToInt32(eingabe); if (wac < 0) { wac = 0; } if (wac > 1) { wac = 1; } if (wac == 1) { schachbrett.setWachsam(posx, posy, true); gesamtWachsam++; } if (i != 0) { Console.Write("Enter Enemy {0} isPrimaryTarget (0 is not p.t., 1 is p.t.) >", i); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int pri = Convert.ToInt32(eingabe); if (pri < 0) { pri = 0; } if (pri > 1) { pri = 1; } if (pri == 1) { schachbrett.setPrimaerZiel(posx, posy, true); gesamtPrimaer++; } } Console.Clear(); zeigeSchachbrett(); } // Hindernisse setzen Console.Write("Number of obstacles (1 - {0}) >", breite * 3); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } int obstaclesZahl = Convert.ToInt32(eingabe); if (obstaclesZahl < 1) { obstaclesZahl = 1; } if (obstaclesZahl > breite * 3) { obstaclesZahl = breite * 3; } for (int i = 0; i < obstaclesZahl; i++) { bool positionOk = false; int posx; int posy; do { Console.Write("Obstacle {0} posX (1 - {1}) >", i, breite); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } posx = Convert.ToInt32(eingabe); if (posx < 1) { posx = 1; } if (posx > breite) { posx = breite; } posx--; Console.Write("Obstacle {0} posY (1 - {1}) >", i, hoehe); eingabe = Console.ReadLine(); if (eingabe == "") { eingabe = "0"; } posy = Convert.ToInt32(eingabe); if (posy < 1) { posy = 1; } if (posy > hoehe) { posy = hoehe; } posy--; if (schachbrett.getSide(posx, posy) == -1) { positionOk = true; } } while (!positionOk); schachbrett.setSide(posx, posy, 0); schachbrett.setType(posx, posy, 7); schachbrett.setEifer(posx, posy, 0); schachbrett.setWachsam(posx, posy, false); schachbrett.setPrimaerZiel(posx, posy, false); Console.Clear(); zeigeSchachbrett(); } schwierigkeitsgrad = (gesamtEifer / gegnerzahl) * 2 + gesamtPrimaer * 3 + gesamtWachsam * 2 + gegnerzahl; if (schwierigkeitsgrad >= 45) { wuerfel = 3; } else if (schwierigkeitsgrad >= 25) { wuerfel = 2; } else { wuerfel = 1; }; return(schachbrett); }
// Spiel in Konsole spielen public void Run() { // Konsolengroesse anpassen Console.SetWindowPosition(0, 0); Console.SetWindowSize(90, 60); showEinfuehrung(); Console.ReadKey(); bool gameOn = true; do { Console.Clear(); Console.Write("(L)oad, (C)reate New or <Enter> Random Dungeon>"); string answer = Console.ReadLine(); if (answer == "l" || answer == "L") { schachbrett = loadSpielstand(); } else if (answer == "c" || answer == "C") { schachbrett = manuellEingeben(); } else { enterEnemyNr(); schachbrett = randomGame(); } spielNr++; figurenGeschlagen = 0; runde = 0; int winner = -1; // 0: Spieler gewinnt; 1: Computer gewinnt bool spielerdran = true; // true: Spieler ist am Zug; false: PC ist am Zug do { if (spielerdran) { winner = playerTurn(wuerfel); spielerdran = false; runde++; rundengesamt++; } else { winner = gegnerTurn(); spielerdran = true; } } while (winner == -1); if (winner == 0) { if (averagerating == 0) { averagerating = schwierigkeitsgrad - runde + figurenGeschlagen; } else { averagerating = (averagerating + schwierigkeitsgrad - runde + figurenGeschlagen) / 2; } siegeNarr++; Console.Clear(); zeigeSchachbrett(); zeigeRunde(); zeigeStats(); Console.WriteLine("\tRating: " + (schwierigkeitsgrad - runde) + "\tAvgRtg " + averagerating); Console.Write("\nMuahahahaha! The Fool wins in {0} rounds!\n\ne'X'it or <return> play again >", runde); } else { if (averagerating != 0) { averagerating /= 2; } siegeGegner++; Console.Clear(); zeigeSchachbrett(); zeigeStats(); Console.WriteLine("\tRating: 0\tAvgRtg " + averagerating); Console.Write("\nThe fool gets a sound beating after {0} rounds\n\ne'X'it or <return> play again >", runde); } string taste = Console.ReadLine(); if (taste == "x" || taste == "X") { gameOn = false; } } while (gameOn); Console.WriteLine("Good bye!"); }
// Spielerzug gibt ggf. winner zurueck public int playerTurn(int wuerfel) { Console.Clear(); zeigeSchachbrett(); zeigeRunde(); bool done = false; do { Console.Write("'M'enu or <Enter> to Play >"); string k = Console.ReadLine(); if (k == "m" || k == "M") { Console.Clear(); zeigeSchachbrett(); zeigeRunde(); Console.Write( " - 'H'elp - 'S'ave - 'L'oad - e'X'it - 'I'nfo -\n" + " - 'C'reate level - 'E'dit level\n" + " - 'R'andomize - 'M'arkers on/off\n\n" + " - 'G'ive up or Play <Enter> ! >"); k = Console.ReadLine(); if (k == "e" || k == "E") { schachbrett = editFeld(); } else if (k == "h" || k == "H") { showHelp(); } else if (k == "i" || k == "I") { Console.Clear(); zeigeSchachbrett(); zeigeRunde(); Console.WriteLine("Average rating: " + averagerating); zeigeStats(); Console.WriteLine("The Fool has " + wuerfel + " dice."); } else if (k == "m" || k == "M") { if (gridAn) { schachbrett.setGrid(false); gridAn = false; } else { schachbrett.setGrid(true); gridAn = true; } Console.Clear(); zeigeSchachbrett(); spielNr++; runde = 0; zeigeRunde(); } else if (k == "r" || k == "R") { enterEnemyNr(); schachbrett = randomGame(); Console.Clear(); zeigeSchachbrett(); spielNr++; runde = 0; zeigeRunde(); zeigeStats(); } else if (k == "x" || k == "X") { Environment.Exit(0); } else if (k == "l" || k == "L") { schachbrett = loadSpielstand(); Console.Clear(); zeigeSchachbrett(); spielNr++; runde = 0; zeigeRunde(); zeigeStats(); } else if (k == "c" || k == "C") { schachbrett = manuellEingeben(); } else if (k == "s" || k == "S") { saveSpielstand(); } else if (k == "g" || k == "G") { Console.WriteLine("\nThe Fool sneaks away...\n"); Console.ReadKey(); return(1); } else { done = true; } } else { done = true; } } while (!done); int[] wurf = wuerfeln(wuerfel); int[] zugtyp = getZugtyp(wurf); Console.Clear(); zeigeSchachbrett(NarrX, NarrY, zugtyp); //zeigeRunde(); zeigeWurf(wurf); int[] zielfeld = eingabeKoordinaten(NarrX, NarrY, zugtyp); int gegnerzahl = schachbrett.getGegnerzahl(); zugAusfuehren(zielfeld); if (schachbrett.getGegnerzahl() < gegnerzahl) { figurenGeschlagen++; gesamtGeschlagen++; } if (schachbrett.pruefeSpielerSieg()) { return(0); } return(-1); }
// Zufallsbrett erstellen public Schachbrett randomGame() { // Stellung initialisieren schachbrett = new Schachbrett(rnd.Next(7, 12), rnd.Next(7, 12)); // Narr zufaellig setzen NarrX = rnd.Next(0, schachbrett.getSizeX()); NarrY = rnd.Next(0, 2); schachbrett.setSide(NarrX, NarrY, 0); schachbrett.setType(NarrX, NarrY, 0); // Gegner zufaellig ermitteln und verteilen int gegnerzahl = gegnerWunsch; if (gegnerzahl < 1) { gegnerzahl = 1; } if (gegnerzahl > schachbrett.getSizeX() * schachbrett.getSizeY() / 2 - 1) { gegnerzahl = schachbrett.getSizeX() * schachbrett.getSizeY() / 2 - 1; } int gesamtEifer = 0; int gesamtPrimaer = 1; int gesamtWachsam = 0; for (int i = 0; i < gegnerzahl; i++) { bool positionOk = false; int posx; int posy; do { posx = rnd.Next(0, schachbrett.getSizeX()); posy = rnd.Next(schachbrett.getSizeY() / 2, schachbrett.getSizeY()); if (schachbrett.getSide(posx, posy) == -1) { positionOk = true; } } while(!positionOk); if (i == 0) { schachbrett.setPrimaerZiel(posx, posy, true); } schachbrett.setSide(posx, posy, 1); schachbrett.setType(posx, posy, rnd.Next(1, 6)); schachbrett.setEifer(posx, posy, rnd.Next(1, 10)); gesamtEifer += schachbrett.getEifer(posx, posy); if (i == 0) { schachbrett.setType(posx, posy, 6); } int helper = rnd.Next(0, 5); if (helper == 2) { schachbrett.setWachsam(posx, posy, true); gesamtWachsam++; } if (i != 0) { helper = rnd.Next(0, 6); if (helper == 3) { schachbrett.setPrimaerZiel(posx, posy, true); gesamtPrimaer++; } } } // Hindernisse setzen int obstaclesZahl = hinderWunsch; if (obstaclesZahl < 0) { obstaclesZahl = 0; } if (obstaclesZahl > (schachbrett.getSizeX() * schachbrett.getSizeY() / 2 - 1) - gegnerzahl) { obstaclesZahl = ((schachbrett.getSizeX() * schachbrett.getSizeY() / 2 - 1) - gegnerzahl - 1); } for (int i = 0; i < obstaclesZahl; i++) { bool positionOk = false; int posx; int posy; do { posx = rnd.Next(0, schachbrett.getSizeX()); posy = rnd.Next(0, schachbrett.getSizeY()); if (schachbrett.getSide(posx, posy) == -1) { positionOk = true; } } while (!positionOk); schachbrett.setSide(posx, posy, 0); schachbrett.setType(posx, posy, 7); schachbrett.setEifer(posx, posy, 0); schachbrett.setWachsam(posx, posy, false); schachbrett.setPrimaerZiel(posx, posy, false); } schwierigkeitsgrad = (gesamtEifer / gegnerzahl) * 2 + gesamtPrimaer * 3 + gesamtWachsam * 2 + gegnerzahl; if (schwierigkeitsgrad >= 45) { wuerfel = 3; } else if (schwierigkeitsgrad >= 25) { wuerfel = 2; } else { wuerfel = 1; } return(schachbrett); }
// Schachbrett laden public Schachbrett loadSpielstand() { Console.Write("\nPlease enter savegame name > "); string fname = Console.ReadLine(); try { bytearray = File.ReadAllBytes(fname); } catch (Exception e) { Console.WriteLine("Error trying to load '{0}'.", fname); Environment.Exit(0); } schachbrett = new Schachbrett(bytearray[0], bytearray[1]); NarrX = (int)bytearray[2]; NarrY = (int)bytearray[3]; schachbrett.setSide(NarrX, NarrY, 0); schachbrett.setType(NarrX, NarrY, 0); int gegnerzahl = bytearray[4]; schwierigkeitsgrad = bytearray[5]; for (int i = 0; i < gegnerzahl; i++) { schachbrett.setSide(bytearray[i * 6 + 6], bytearray[i * 6 + 7], 1); schachbrett.setType(bytearray[i * 6 + 6], bytearray[i * 6 + 7], bytearray[i * 6 + 8]); schachbrett.setEifer(bytearray[i * 6 + 6], bytearray[i * 6 + 7], bytearray[i * 6 + 9]); if (bytearray[i * 6 + 10] == 1) { schachbrett.setWachsam(bytearray[i * 6 + 6], bytearray[i * 6 + 7], true); } else { schachbrett.setWachsam(bytearray[i * 6 + 6], bytearray[i * 6 + 7], false); } if (bytearray[i * 6 + 11] == 1) { schachbrett.setPrimaerZiel(bytearray[i * 6 + 6], bytearray[i * 6 + 7], true); } else { schachbrett.setPrimaerZiel(bytearray[i * 6 + 6], bytearray[i * 6 + 7], false); } } // Hindernisse setzen int hindernisbytes = bytearray.Length - (gegnerzahl * 6 + 6); for (int i = 0; i < hindernisbytes - 1; i += 2) { int x = bytearray[(gegnerzahl * 6 + 7) + i]; int y = bytearray[(gegnerzahl * 6 + 7) + i + 1]; schachbrett.setSide(x, y, 0); schachbrett.setType(x, y, 7); schachbrett.setEifer(x, y, 0); schachbrett.setWachsam(x, y, false); schachbrett.setPrimaerZiel(x, y, false); } if (schwierigkeitsgrad >= 45) { wuerfel = 3; } else if (schwierigkeitsgrad >= 25) { wuerfel = 2; } else { wuerfel = 1; } return(schachbrett); }