Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Threading;
- using System.IO;
- namespace sänka_skepp
- {
- class Program
- {
- static int placeraX = 0;
- static int placeraY = 0;
- static int skjutPosX = 0;
- static int skjutPosY = 0;
- static int kartBredd = 8;
- static int kartHöjd = 8;
- static string[,] spelarensKarta = new string[kartBredd, kartHöjd];
- static string[,] datornsKarta = new string[kartBredd, kartHöjd];
- static bool ändraInställningar = false;
- static string senasteVinnaren = null;
- static Random slump = new Random();
- static bool[,] spelarensSkott = new bool[kartBredd, kartHöjd];
- static bool[,] datornsSkott = new bool[kartBredd, kartHöjd];
- static void Main(string[] args)
- {
- string menyVal = "";
- while (menyVal != "4")
- {
- RitaMeny();
- menyVal = Console.ReadLine();
- switch (menyVal)
- {
- case "1":
- Skapakartorna();
- Placeraskepp2();
- SpelaSänkaSkäpp();
- ÅtervändMeny();
- break;
- case "2":
- if (File.Exists("fil1.txt"))
- {
- string sensatevinnaren = File.ReadAllText("fil1.txt");
- Console.WriteLine(sensatevinnaren);
- }
- else
- {
- File.WriteAllText("fil1.txt", "Ingen har vunnit än");
- File.ReadAllText("fil1.txt");
- }
- ÅtervändMeny();
- break;
- case "3":
- Console.Clear();
- Console.WriteLine("1. Ändra storlek på kartan");
- Console.WriteLine("2. Återvänd till menyn");
- string menyVal2 = Console.ReadLine();
- switch (menyVal2)
- {
- case "1":
- Console.WriteLine("Bestäm hur bred planen skall vara");
- kartBredd = ReadintBredd();
- Console.WriteLine("Bestäm hur hög planen skall vara");
- kartHöjd = ReadintBredd();
- string[,] spelarensKarta = new string[kartBredd, kartHöjd];
- string[,] datornsKarta = new string[kartBredd, kartHöjd];
- bool[,] spelarensSkott = new bool[kartBredd, kartHöjd];
- bool[,] datornsSkott = new bool[kartBredd, kartHöjd];
- Console.Clear();
- break;
- case "2":
- ÅtervändMeny();
- break;
- default:
- break;
- }
- break;
- case "4":
- break;
- default:
- Console.WriteLine("Välj ett giltigt alternativ");
- break;
- }
- }
- }
- /// <summary>
- /// Ritar menyn
- /// </summary>
- static void RitaMeny()
- {
- Console.WriteLine("1. Spela sänka skepp");
- Console.WriteLine("2. Visa senaste vinnaren");
- Console.WriteLine("3. Inställningar");
- Console.WriteLine("4. Avsluta programmet");
- }
- /// <summary>
- /// Skapar kartorna
- /// </summary>
- static void Skapakartorna()
- {
- for (int y = 0; y < kartHöjd; y++)
- {
- for (int x = 0; x < kartBredd; x++)
- {
- spelarensKarta[x, y] = "O";
- datornsKarta[x, y] = "O";
- spelarensSkott[x, y] = false;
- datornsSkott[x, y] = false;
- }
- }
- }
- /// <summary>
- /// Kollar om spelaren har vunnit
- /// </summary>
- /// <returns>True eller False</returns>
- static bool HarSpelarenVunnit()
- {
- for (int y = 0; y < kartHöjd; y++)
- {
- for (int x = 0; x < kartBredd; x++)
- {
- if (datornsKarta[x, y] == "X" && spelarensSkott[x, y] == false)
- {
- return false;
- }
- }
- }
- return true;
- }
- /// <summary>
- /// Kollar om datorn har vunnit
- /// </summary>
- /// <returns>True eller False</returns>
- static bool HarDatornVunnit()
- {
- for (int y = 0; y < kartHöjd; y++)
- {
- for (int x = 0; x < kartBredd; x++)
- {
- if (spelarensKarta[x, y] == "X" && datornsSkott[x, y] == false)
- {
- return false;
- }
- }
- }
- return true;
- }
- static int ReadintBredd()
- {
- int heltal;
- while (int.TryParse(Console.ReadLine(), out heltal) == false || heltal < 4)
- {
- Console.WriteLine("Planen kan inte vara mindra än 4x4. Vänligen försök igen");
- }
- return heltal;
- }
- /// <summary>
- /// Kollar om x talet fungerar
- /// </summary>
- /// <returns>Heltalet du väljer</returns>
- static int ReadintX()
- {
- int heltal;
- while ((int.TryParse(Console.ReadLine(), out heltal) == false) || heltal > kartBredd || heltal < 1)
- {
- Console.WriteLine("Du skrev ej ett giltigt tal. Försök igen");
- }
- return heltal;
- }
- /// <summary>
- /// Kollar om y talet fungerar
- /// </summary>
- /// <returns>Heltalet du väljer</returns>
- static int ReadintY()
- {
- int heltal;
- while ((int.TryParse(Console.ReadLine(), out heltal) == false) || heltal > kartHöjd || heltal < 1)
- {
- Console.WriteLine("Du skrev inte ett heltal. Försök igen");
- }
- return heltal;
- }
- static void ÅtervändMeny()
- {
- Console.WriteLine();
- Thread.Sleep(500);
- Console.WriteLine("Klicka valfri knapp för att återvända till menyn");
- Console.ReadKey();
- Console.Clear();
- }
- /// <summary>
- /// Ritar spelplanen
- /// </summary>
- static void RitaPlan()
- {
- Console.WriteLine("Spelarens karta");
- for (int y = 0; y < kartHöjd; y++)
- {
- for (int x = 0; x < kartBredd; x++)
- {
- if (datornsSkott[x, y] == true)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- }
- Console.Write(spelarensKarta[x, y]);
- Console.ForegroundColor = ConsoleColor.Gray;
- }
- Console.WriteLine();
- }
- Console.WriteLine();
- Console.WriteLine("Datorns karta");
- for (int y = 0; y < kartHöjd; y++)
- {
- for (int x = 0; x < kartBredd; x++)
- {
- if (spelarensSkott[x, y] == true)
- {
- Console.ForegroundColor = ConsoleColor.Red;
- Console.Write(datornsKarta[x, y]);
- }
- else if (skjutPosX == x && skjutPosY == y)
- {
- Console.ForegroundColor = ConsoleColor.Green;
- Console.Write("X");
- Console.ForegroundColor = ConsoleColor.Gray;
- }
- else
- {
- Console.Write("-");
- }
- Console.ForegroundColor = ConsoleColor.Gray;
- }
- Console.WriteLine();
- }
- }
- /// <summary>
- /// Själva spelet
- /// </summary>
- static void SpelaSänkaSkäpp()
- {
- bool[] aiSkott = new bool[4];
- bool vunnit = false;
- bool skjuta = false;
- int exSkottX = 0;
- int exSkottY = 0;
- bool skjutanytt = false;
- int antalaiSkott = -1;
- while (vunnit == false)
- {
- string menySvar1 = "";
- while (menySvar1 != "1")
- {
- Console.Clear();
- RitaPlan();
- ConsoleKeyInfo info = Console.ReadKey();
- if (info.Key == ConsoleKey.W && skjutPosY - 1 >= 0)
- {
- skjutPosY -= 1;
- }
- if (info.Key == ConsoleKey.S && skjutPosY + 1 < kartHöjd)
- {
- skjutPosY += 1;
- }
- if (info.Key == ConsoleKey.A && skjutPosX - 1 >= 0)
- {
- skjutPosX -= 1;
- }
- if (info.Key == ConsoleKey.D && skjutPosX + 1 < kartBredd)
- {
- skjutPosX += 1;
- }
- if (info.Key == ConsoleKey.Enter)
- {
- spelarensSkott[skjutPosX, skjutPosY] = true;
- menySvar1 = "1";
- }
- }
- if (spelarensKarta[exSkottX, exSkottY] == "X" && skjuta == false && skjutanytt == false)
- {
- for (int i = 0; i < aiSkott.Length; i++)
- {
- aiSkott[i] = false;
- }
- if (exSkottX + 1 <= kartBredd)
- {
- aiSkott[0] = true;
- }
- if (exSkottX - 1 >= 0)
- {
- aiSkott[1] = true;
- }
- if (exSkottY - 1 >= 0)
- {
- aiSkott[2] = true;
- }
- if (exSkottX + 1 <= kartHöjd)
- {
- aiSkott[3] = true;
- }
- skjuta = true;
- }
- int aiSkottX = slump.Next(kartBredd);
- int aiSkottY = slump.Next(kartHöjd);
- string whileSvar = "333";
- if (skjuta == false)
- {
- while (whileSvar != "1")
- {
- if (datornsSkott[aiSkottX, aiSkottY] == false)
- {
- datornsSkott[aiSkottX, aiSkottY] = true;
- exSkottX = aiSkottX;
- exSkottY = aiSkottY;
- skjutanytt = false;
- whileSvar = "1";
- }
- else
- {
- aiSkottX = slump.Next(kartBredd);
- aiSkottY = slump.Next(kartHöjd);
- }
- }
- }
- if (skjuta == true)
- {
- antalaiSkott++;
- if (aiSkott[0] == true && antalaiSkott == 0 && datornsSkott[exSkottX + 1, exSkottY] == false)
- {
- datornsSkott[exSkottX + 1, exSkottY] = true;
- }
- else if (aiSkott[0] == false && antalaiSkott == 0)
- {
- antalaiSkott++;
- }
- if (aiSkott[1] == true && antalaiSkott == 1 && datornsSkott[exSkottX - 1, exSkottY] == false)
- {
- datornsSkott[exSkottX - 1, exSkottY] = true;
- }
- else if (aiSkott[1] == false && antalaiSkott == 1)
- {
- antalaiSkott++;
- }
- if (aiSkott[2] == true && antalaiSkott == 2 && datornsSkott[exSkottX, exSkottY - 1] == false)
- {
- datornsSkott[exSkottX, exSkottY - 1] = true;
- }
- else if (aiSkott[2] == false && antalaiSkott == 2)
- {
- antalaiSkott++;
- }
- if (aiSkott[3] == true && antalaiSkott == 3 && datornsSkott[exSkottX, exSkottY + 1] == false)
- {
- datornsSkott[exSkottX, exSkottY + 1] = true;
- }
- if (antalaiSkott == 3)
- {
- antalaiSkott = 0;
- skjuta = false;
- skjutanytt = true;
- }
- }
- if (HarSpelarenVunnit())
- {
- Console.Clear();
- RitaPlan();
- Console.WriteLine("Spelaren vann");
- Console.ReadKey();
- Console.WriteLine("Skriv in ditt namn");
- File.WriteAllText("fil1.txt", Console.ReadLine());
- vunnit = true;
- }
- else if (HarDatornVunnit())
- {
- Console.Clear();
- RitaPlan();
- Console.WriteLine("Datorn har vunnit");
- Console.ReadKey();
- vunnit = true;
- }
- }
- }
- /// <summary>
- /// Placerar skepp, likadan som Placeraskepp, men denna metoden skapar större skepp
- /// </summary>
- ///
- static void Placeraskepp3()
- {
- Console.Clear();
- RitaPlan();
- ConsoleKeyInfo info = Console.ReadKey();
- string loopSvar = "waaaa";
- while (loopSvar != "!")
- {
- if (info.Key == ConsoleKey.W && skjutPosY - 1 >= 0)
- {
- skjutPosY -= 1;
- }
- if (info.Key == ConsoleKey.S && skjutPosY + 1 < kartHöjd)
- {
- skjutPosY += 1;
- }
- if (info.Key == ConsoleKey.A && skjutPosX - 1 >= 0)
- {
- skjutPosX -= 1;
- }
- if (info.Key == ConsoleKey.D && skjutPosX + 1 < kartBredd)
- {
- skjutPosX += 1;
- }
- if (info.Key == ConsoleKey.Enter)
- {
- spelarensSkott[skjutPosX, skjutPosY] = true;
- loopSvar = "1";
- }
- }
- }
- static void Placeraskepp2()
- {
- for (int i = 0; i < 2; i++)
- {
- Console.Clear();
- Console.WriteLine($"Spelplanen är {kartBredd} bred och {kartHöjd} hög");
- Console.WriteLine();
- RitaPlan();
- Console.WriteLine("Placera ditt skepp (X)");
- int placeraSkeppX = ReadintX() - 1;
- Console.WriteLine("Placera ditt skepp (Y)");
- int placeraSkeppY = ReadintY() - 1;
- Console.WriteLine("Vilket håll vill du att ditt skepp ska ligga?");
- Console.WriteLine("1. XXX");
- Console.WriteLine("2. X");
- Console.WriteLine(" X");
- Console.WriteLine(" X");
- string menySvar = Console.ReadLine();
- switch (menySvar)
- {
- case "1":
- string placeraX = "?";
- while (placeraX != "!")
- {
- if (placeraSkeppX - 1 >= 0 && placeraSkeppX + 2 <= kartBredd && spelarensKarta[placeraSkeppX - 1, placeraSkeppY] != "X" && spelarensKarta[placeraSkeppX + 1, placeraSkeppY] != "X" && spelarensKarta[placeraSkeppX, placeraSkeppY] != "X")
- {
- spelarensKarta[placeraSkeppX, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX - 1, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX + 1, placeraSkeppY] = "X";
- placeraX = "!";
- }
- else
- {
- Console.WriteLine("Ditt skepps position är lite krånglig. Vänligen välj ny X kordinat.");
- placeraSkeppX = ReadintX() - 1;
- }
- /*
- else if (placeraSkeppX + 2 <= kartBredd && spelarensKarta[placeraSkeppX + 1, placeraSkeppY] == "O" && spelarensKarta[placeraSkeppX + 2, placeraSkeppY] == "O" && spelarensKarta[placeraSkeppX, placeraSkeppY] == "O")
- {
- spelarensKarta[placeraSkeppX, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX + 1, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX + 2, placeraSkeppY] = "X";
- placeraX = "!";
- }
- else if (placeraSkeppX - 2 >= 0 && spelarensKarta[placeraSkeppX - 1, placeraSkeppY] == "O" && spelarensKarta[placeraSkeppX + 1, placeraSkeppY] == "O" && spelarensKarta[placeraSkeppX, placeraSkeppY] == "O")
- {
- spelarensKarta[placeraSkeppX, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX - 1, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX - 2, placeraSkeppY] = "X";
- placeraX = "!";
- }
- */
- }
- break;
- case "2":
- string placera2X = "?";
- while (placera2X != "!")
- {
- if (placeraSkeppY - 1 >= 0 && placeraSkeppY + 2 <= kartHöjd)
- {
- if (spelarensKarta[placeraSkeppX, placeraSkeppY - 1] != "X" && spelarensKarta[placeraSkeppX, placeraSkeppY + 1] != "X" && spelarensKarta[placeraSkeppX, placeraSkeppY] != "X")
- {
- spelarensKarta[placeraSkeppX, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX, placeraSkeppY + 1] = "X";
- spelarensKarta[placeraSkeppX, placeraSkeppY - 1] = "X";
- placera2X = "!";
- }
- else
- {
- Console.WriteLine("Ditt skepps position är lite krånglig. Vänligen välj en ny Y kordinat.");
- placeraSkeppY = ReadintY() - 1;
- }
- }
- else
- {
- Console.WriteLine("Ditt skepps position är lite krånglig. Vänligen välj en ny Y kordinat.");
- placeraSkeppY = ReadintY() - 1;
- }
- /*
- else if (placeraSkeppY - 2 >= 0 && spelarensKarta[placeraSkeppX, placeraSkeppY - 1] == "O" && spelarensKarta[placeraSkeppX - 2, placeraSkeppY] == "O" && spelarensKarta[placeraSkeppX, placeraSkeppY] == "O")
- {
- spelarensKarta[placeraSkeppX, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX, placeraSkeppY - 1] = "X";
- spelarensKarta[placeraSkeppX, placeraSkeppY - 2] = "X";
- placera2X = "!";
- }
- else if (placeraSkeppY + 2 <= kartHöjd && spelarensKarta[placeraSkeppX, placeraSkeppY + 1] == "O" && spelarensKarta[placeraSkeppX, placeraSkeppY + 2] == "O" && spelarensKarta[placeraSkeppX, placeraSkeppY] == "O")
- {
- spelarensKarta[placeraSkeppX, placeraSkeppY] = "X";
- spelarensKarta[placeraSkeppX, placeraSkeppY + 1] = "X";
- spelarensKarta[placeraSkeppX, placeraSkeppY + 2] = "X";
- placera2X = "!";
- }
- */
- }
- break;
- default:
- Console.WriteLine("Du valde inte ett giltigt alternativ");
- break;
- }
- }
- //Datorns kod för att lägga ut skeppen
- int datorBåtsida = slump.Next(2);
- int datorbåtX = slump.Next(kartBredd);
- int datorbåtY = slump.Next(kartHöjd);
- // Båten läggs XXX om datorBåtsida == 0
- string ett = "";
- while (ett != "!")
- {
- if (datorBåtsida == 0)
- {
- if (datorbåtX + 2 <= kartBredd && datorbåtX - 1 >= 0)
- {
- datornsKarta[datorbåtX, datorbåtY] = "X";
- datornsKarta[datorbåtX + 1, datorbåtY] = "X";
- datornsKarta[datorbåtX - 1, datorbåtY] = "X";
- ett = "!";
- }
- else
- {
- datorbåtX = slump.Next(kartBredd);
- datorbåtY = slump.Next(kartHöjd);
- }
- }
- else
- {
- if (datorbåtY + 1 >= 0 && datorbåtY + 2 <= kartHöjd)
- {
- datornsKarta[datorbåtX, datorbåtY] = "X";
- datornsKarta[datorbåtX, datorbåtY + 1] = "X";
- datornsKarta[datorbåtX, datorbåtY - 1] = "X";
- ett = "!";
- }
- else
- {
- datorbåtX = slump.Next(kartBredd);
- datorbåtY = slump.Next(kartHöjd);
- }
- }
- }
- datorbåtY = slump.Next(0, kartHöjd);
- datorbåtX = slump.Next(0, kartBredd);
- datorBåtsida = slump.Next(2);
- string wa = "";
- while (wa != "!")
- {
- if (datorBåtsida == 0)
- {
- if (datorbåtX + 2 <= kartBredd && datorbåtX - 1 >= 0)
- {
- datornsKarta[datorbåtX, datorbåtY] = "X";
- datornsKarta[datorbåtX + 1, datorbåtY] = "X";
- datornsKarta[datorbåtX - 1, datorbåtY] = "X";
- wa = "!";
- }
- else
- {
- datorbåtX = slump.Next(kartBredd);
- datorbåtY = slump.Next(kartHöjd);
- }
- }
- else
- {
- if (datorbåtY + 1 >= 0 && datorbåtY + 2 <= kartHöjd)
- {
- datornsKarta[datorbåtX, datorbåtY] = "X";
- datornsKarta[datorbåtX, datorbåtY + 1] = "X";
- datornsKarta[datorbåtX, datorbåtY - 1] = "X";
- wa = "!";
- }
- else
- {
- datorbåtX = slump.Next(kartBredd);
- datorbåtY = slump.Next(kartHöjd);
- }
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment