botgob

sänka skepp 4

Jan 11th, 2018
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 24.28 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Threading;
  7. using System.IO;
  8.  
  9. namespace sänka_skäpp
  10. {
  11.     class Program
  12.     {
  13.         static int rotera = 0;
  14.         static int placeraX = 2;
  15.         static int placeraY = 2;
  16.         static int skjutPosX = 0;
  17.         static int skjutPosY = 0;
  18.         static int kartBredd = 8;
  19.         static int kartHöjd = 8;
  20.         static string[,] spelarensKarta = new string[kartBredd, kartHöjd];
  21.         static string[,] datornsKarta = new string[kartBredd, kartHöjd];
  22.         static bool ändraInställningar = false;
  23.         static string senasteVinnaren = null;
  24.  
  25.         static Random slump = new Random();
  26.  
  27.         static bool[,] spelarensSkott = new bool[kartBredd, kartHöjd];
  28.         static bool[,] datornsSkott = new bool[kartBredd, kartHöjd];
  29.  
  30.         static void Main(string[] args)
  31.         {
  32.  
  33.  
  34.             string menyVal = "";
  35.             while (menyVal != "4")
  36.             {
  37.                 RitaMeny();
  38.                 menyVal = Console.ReadLine();
  39.                 switch (menyVal)
  40.                 {
  41.                     case "1":
  42.                         Skapakartorna();
  43.                         Placeraskepp3();
  44.  
  45.                         SpelaSänkaSkäpp();
  46.                         ÅtervändMeny();
  47.                         break;
  48.                     case "2":
  49.                         if (File.Exists("fil1.txt"))
  50.                         {
  51.                             string sensatevinnaren = File.ReadAllText("fil1.txt");
  52.                             Console.WriteLine(sensatevinnaren);
  53.                         }
  54.                         else
  55.                         {
  56.                             File.WriteAllText("fil1.txt", "Ingen har vunnit än");
  57.                             File.ReadAllText("fil1.txt");
  58.                         }
  59.                         ÅtervändMeny();
  60.                         break;
  61.                     case "3":
  62.                         Console.Clear();
  63.                         Console.WriteLine("1. Ändra storlek på kartan");
  64.                         Console.WriteLine("2. Återvänd till menyn");
  65.                         string menyVal2 = Console.ReadLine();
  66.                         switch (menyVal2)
  67.                         {
  68.                             case "1":
  69.                                 Console.WriteLine("Bestäm hur bred planen skall vara");
  70.                                 kartBredd = ReadintBredd();
  71.                                 Console.WriteLine("Bestäm hur hög planen skall vara");
  72.                                 kartHöjd = ReadintBredd();
  73.                                 string[,] spelarensKarta = new string[kartBredd, kartHöjd];
  74.                                 string[,] datornsKarta = new string[kartBredd, kartHöjd];
  75.                                 bool[,] spelarensSkott = new bool[kartBredd, kartHöjd];
  76.                                 bool[,] datornsSkott = new bool[kartBredd, kartHöjd];
  77.                                 Console.Clear();
  78.                                 break;
  79.                             case "2":
  80.                                 ÅtervändMeny();
  81.                                 break;
  82.                             default:
  83.                                 break;
  84.                         }
  85.                         break;
  86.                     case "4":
  87.  
  88.                         break;
  89.                     default:
  90.                         Console.WriteLine("Välj ett giltigt alternativ");
  91.                         Console.ReadKey();
  92.                         Console.Clear();
  93.                         break;
  94.                 }
  95.  
  96.             }
  97.  
  98.         }
  99.         /// <summary>
  100.         /// Ritar menyn
  101.         /// </summary>
  102.         static void RitaMeny()
  103.         {
  104.             Console.WriteLine("1. Spela sänka skepp");
  105.             Console.WriteLine("2. Visa senaste vinnaren");
  106.             Console.WriteLine("3. Inställningar");
  107.             Console.WriteLine("4. Avsluta programmet");
  108.         }
  109.         /// <summary>
  110.         /// Skapar kartorna
  111.         /// </summary>
  112.         static void Skapakartorna()
  113.         {
  114.             spelarensKarta = new string[kartBredd, kartHöjd];
  115.             datornsKarta = new string[kartBredd, kartHöjd];
  116.             spelarensSkott = new bool[kartBredd, kartHöjd];
  117.             datornsSkott = new bool[kartBredd, kartHöjd];
  118.             for (int y = 0; y < kartHöjd; y++)
  119.             {
  120.                 for (int x = 0; x < kartBredd; x++)
  121.                 {
  122.                     spelarensKarta[x, y] = "O";
  123.                     datornsKarta[x, y] = "O";
  124.                     spelarensSkott[x, y] = false;
  125.                     datornsSkott[x, y] = false;
  126.  
  127.                 }
  128.             }
  129.         }
  130.  
  131.         /// <summary>
  132.         /// Kollar om spelaren har vunnit
  133.         /// </summary>
  134.         /// <returns>True eller False</returns>
  135.         static bool HarSpelarenVunnit()
  136.         {
  137.             for (int y = 0; y < kartHöjd; y++)
  138.             {
  139.                 for (int x = 0; x < kartBredd; x++)
  140.                 {
  141.                     if (datornsKarta[x, y] == "X" && spelarensSkott[x, y] == false)
  142.                     {
  143.                         return false;
  144.                     }
  145.                 }
  146.             }
  147.             return true;
  148.         }
  149.  
  150.         /// <summary>
  151.         /// Kollar om datorn har vunnit
  152.         /// </summary>
  153.         /// <returns>True eller False</returns>
  154.         static bool HarDatornVunnit()
  155.         {
  156.             for (int y = 0; y < kartHöjd; y++)
  157.             {
  158.                 for (int x = 0; x < kartBredd; x++)
  159.                 {
  160.                     if (spelarensKarta[x, y] == "X" && datornsSkott[x, y] == false)
  161.                     {
  162.                         return false;
  163.                     }
  164.                 }
  165.             }
  166.             return true;
  167.         }
  168.         static int ReadintBredd()
  169.         {
  170.             int heltal;
  171.             while (int.TryParse(Console.ReadLine(), out heltal) == false || heltal < 4)
  172.             {
  173.                 Console.WriteLine("Planen kan inte vara mindra än 4x4. Vänligen försök igen");
  174.             }
  175.             return heltal;
  176.         }
  177.         /// <summary>
  178.         /// Kollar om x talet fungerar
  179.         /// </summary>
  180.         /// <returns>Heltalet du väljer</returns>
  181.         static int ReadintX()
  182.         {
  183.             int heltal;
  184.             while ((int.TryParse(Console.ReadLine(), out heltal) == false) || heltal > kartBredd || heltal < 1)
  185.             {
  186.                 Console.WriteLine("Du skrev ej ett giltigt tal. Försök igen");
  187.             }
  188.             return heltal;
  189.         }
  190.  
  191.         /// <summary>
  192.         /// Kollar om y talet fungerar
  193.         /// </summary>
  194.         /// <returns>Heltalet du väljer</returns>
  195.         static int ReadintY()
  196.         {
  197.             int heltal;
  198.             while ((int.TryParse(Console.ReadLine(), out heltal) == false) || heltal > kartHöjd || heltal < 1)
  199.             {
  200.                 Console.WriteLine("Du skrev inte ett heltal. Försök igen");
  201.             }
  202.             return heltal;
  203.         }
  204.  
  205.         static void ÅtervändMeny()
  206.         {
  207.             Console.WriteLine();
  208.             Thread.Sleep(500);
  209.             Console.WriteLine("Klicka valfri knapp för att återvända till menyn");
  210.             Console.ReadKey();
  211.             Console.Clear();
  212.         }
  213.  
  214.         /// <summary>
  215.         /// Ritar spelplanen
  216.         /// </summary>
  217.         static void RitaPlan()
  218.         {
  219.             Console.WriteLine("Spelarens karta");
  220.             if (rotera == 0)
  221.             {
  222.                 for (int y = 0; y < kartHöjd; y++)
  223.                 {
  224.                     for (int x = 0; x < kartBredd; x++)
  225.                     {
  226.                         if (datornsSkott[x, y] == true)
  227.                         {
  228.                             Console.ForegroundColor = ConsoleColor.Red;
  229.                             Console.Write(spelarensKarta[x, y]);
  230.                         }
  231.                         else if (placeraX == x && placeraY == y)
  232.                         {
  233.                            
  234.                             Console.Write("X");
  235.                            
  236.                         }
  237.                         else if (placeraX + 1 == x && placeraY == y)
  238.                         {
  239.                             Console.Write("X");
  240.                         }
  241.                         else if (placeraX - 1 == x && placeraY == y)
  242.                         {
  243.                             Console.Write("X");
  244.                         }
  245.                         else
  246.                         {
  247.                             Console.Write(spelarensKarta[x, y]);
  248.                         }
  249.  
  250.                         Console.ForegroundColor = ConsoleColor.Gray;
  251.                     }
  252.                     Console.WriteLine();
  253.                 }
  254.             }
  255.             else
  256.             {
  257.                 for (int y = 0; y < kartHöjd; y++)
  258.                 {
  259.                     for (int x = 0; x < kartBredd; x++)
  260.                     {
  261.                         if (datornsSkott[x, y] == true)
  262.                         {
  263.                             Console.ForegroundColor = ConsoleColor.Red;
  264.                             Console.Write(spelarensKarta[x, y]);
  265.                         }
  266.                         else if (placeraX == x && placeraY == y)
  267.                         {
  268.                             Console.Write("X");
  269.                         }
  270.                         else if (placeraX == x && placeraY + 1 == y)
  271.                         {
  272.                             Console.Write("X");
  273.                         }
  274.                         else if (placeraX == x && placeraY - 1 == y)
  275.                         {
  276.                             Console.Write("X");
  277.                         }
  278.                         else
  279.                         {
  280.                             Console.Write(spelarensKarta[x, y]);
  281.                         }
  282.  
  283.                         Console.ForegroundColor = ConsoleColor.Gray;
  284.                     }
  285.                     Console.WriteLine();
  286.                 }
  287.             }
  288.            
  289.             Console.WriteLine();
  290.             Console.WriteLine("Datorns karta");
  291.             for (int y = 0; y < kartHöjd; y++)
  292.             {
  293.                 for (int x = 0; x < kartBredd; x++)
  294.                 {
  295.                     if (spelarensSkott[x, y] == true)
  296.                     {
  297.                         Console.ForegroundColor = ConsoleColor.Red;
  298.                         Console.Write(datornsKarta[x, y]);
  299.                     }
  300.                     else if (skjutPosX == x && skjutPosY == y)
  301.                     {
  302.                         Console.ForegroundColor = ConsoleColor.Green;
  303.                         Console.Write("X");
  304.                         Console.ForegroundColor = ConsoleColor.Gray;
  305.                     }
  306.                     else
  307.                     {
  308.                         Console.Write("-");
  309.                     }
  310.  
  311.                     Console.ForegroundColor = ConsoleColor.Gray;
  312.                 }
  313.  
  314.                 Console.WriteLine();
  315.             }
  316.         }
  317.  
  318.         /// <summary>
  319.         /// Själva spelet
  320.         /// </summary>
  321.         static void SpelaSänkaSkäpp()
  322.         {
  323.             bool[] aiSkott = new bool[4];
  324.             bool vunnit = false;
  325.             bool skjuta = false;
  326.             int exSkottX = 0;
  327.             int exSkottY = 0;
  328.             bool skjutanytt = false;
  329.             int antalaiSkott = -1;
  330.             while (vunnit == false)
  331.             {
  332.                 string menySvar1 = "";
  333.                 while (menySvar1 != "1")
  334.                 {
  335.                     Console.Clear();
  336.                     RitaPlan();
  337.                     ConsoleKeyInfo info = Console.ReadKey();
  338.                     if (info.Key == ConsoleKey.W && skjutPosY - 1 >= 0)
  339.                     {
  340.                         skjutPosY -= 1;
  341.                     }
  342.                     if (info.Key == ConsoleKey.S && skjutPosY + 1 < kartHöjd)
  343.                     {
  344.                         skjutPosY += 1;
  345.                     }
  346.                     if (info.Key == ConsoleKey.A && skjutPosX - 1 >= 0)
  347.                     {
  348.                         skjutPosX -= 1;
  349.                     }
  350.                     if (info.Key == ConsoleKey.D && skjutPosX + 1 < kartBredd)
  351.                     {
  352.                         skjutPosX += 1;
  353.                     }
  354.                     if (info.Key == ConsoleKey.Enter)
  355.                     {
  356.                         spelarensSkott[skjutPosX, skjutPosY] = true;
  357.                         menySvar1 = "1";
  358.                     }
  359.  
  360.  
  361.  
  362.                 }
  363.  
  364.  
  365.  
  366.                 if (spelarensKarta[exSkottX, exSkottY] == "X" && skjuta == false && skjutanytt == false)
  367.                 {
  368.  
  369.                     for (int i = 0; i < aiSkott.Length; i++)
  370.                     {
  371.                         aiSkott[i] = false;
  372.                     }
  373.                     if (exSkottX + 1 < kartBredd)
  374.                     {
  375.                         aiSkott[0] = true;
  376.                     }
  377.                     if (exSkottX - 1 >= 0)
  378.                     {
  379.                         aiSkott[1] = true;
  380.                     }
  381.                     if (exSkottY - 1 >= 0)
  382.                     {
  383.                         aiSkott[2] = true;
  384.                     }
  385.                     if (exSkottY + 1 < kartHöjd)
  386.                     {
  387.                         aiSkott[3] = true;
  388.                     }
  389.                     skjuta = true;
  390.                 }
  391.  
  392.                 int aiSkottX = slump.Next(kartBredd);
  393.                 int aiSkottY = slump.Next(kartHöjd);
  394.                 string whileSvar = "333";
  395.                 if (skjuta == false)
  396.                 {
  397.                     while (whileSvar != "1")
  398.                     {
  399.  
  400.                         if (datornsSkott[aiSkottX, aiSkottY] == false)
  401.                         {
  402.                             datornsSkott[aiSkottX, aiSkottY] = true;
  403.                             exSkottX = aiSkottX;
  404.                             exSkottY = aiSkottY;
  405.                             skjutanytt = false;
  406.                             whileSvar = "1";
  407.                         }
  408.                         else
  409.                         {
  410.                             aiSkottX = slump.Next(kartBredd);
  411.                             aiSkottY = slump.Next(kartHöjd);
  412.                         }
  413.  
  414.                     }
  415.                 }
  416.  
  417.                 if (skjuta == true)
  418.                 {
  419.                     antalaiSkott++;
  420.                     if (aiSkott[0] == true)
  421.                     {
  422.                         if (antalaiSkott == 0 && datornsSkott[exSkottX + 1, exSkottY] == false)
  423.                         {
  424.                             datornsSkott[exSkottX + 1, exSkottY] = true;
  425.                         }
  426.                     }
  427.                     else if (aiSkott[0] == false && antalaiSkott == 0)
  428.                     {
  429.                         antalaiSkott++;
  430.                     }
  431.  
  432.                     if (aiSkott[1] == true && antalaiSkott == 1 && datornsSkott[exSkottX - 1, exSkottY] == false)
  433.                     {
  434.                         datornsSkott[exSkottX - 1, exSkottY] = true;
  435.  
  436.                     }
  437.                     else if (aiSkott[1] == false && antalaiSkott == 1)
  438.                     {
  439.                         antalaiSkott++;
  440.                     }
  441.  
  442.                     if (aiSkott[2] == true && antalaiSkott == 2 && datornsSkott[exSkottX, exSkottY - 1] == false)
  443.                     {
  444.                         datornsSkott[exSkottX, exSkottY - 1] = true;
  445.  
  446.                     }
  447.                     else if (aiSkott[2] == false && antalaiSkott == 2)
  448.                     {
  449.                         antalaiSkott++;
  450.                     }
  451.  
  452.                     if (aiSkott[3] == true)
  453.                     {
  454.                         if (antalaiSkott == 3 && datornsSkott[exSkottX, exSkottY + 1] == false)
  455.                         {
  456.                             datornsSkott[exSkottX, exSkottY + 1] = true;
  457.                         }
  458.                     }
  459.                     if (aiSkott[3] == false && antalaiSkott == 3)
  460.                     {
  461.                         if (datornsSkott[aiSkottX, aiSkottY] == false)
  462.                         {
  463.                             datornsSkott[aiSkottX, aiSkottY] = true;
  464.                             exSkottX = aiSkottX;
  465.                             exSkottY = aiSkottY;
  466.                             skjutanytt = false;
  467.                             whileSvar = "1";
  468.                         }
  469.                         else
  470.                         {
  471.                             aiSkottX = slump.Next(kartBredd);
  472.                             aiSkottY = slump.Next(kartHöjd);
  473.                         }
  474.                     }
  475.                     if (antalaiSkott == 3)
  476.                     {
  477.                         antalaiSkott = 0;
  478.                         skjuta = false;
  479.                         skjutanytt = true;
  480.                     }
  481.                 }
  482.  
  483.                 if (HarSpelarenVunnit())
  484.                 {
  485.                     Console.Clear();
  486.                     RitaPlan();
  487.  
  488.                     Console.WriteLine("Spelaren vann");
  489.                     Console.ReadKey();
  490.  
  491.                     Console.WriteLine("Skriv in ditt namn");
  492.                     File.WriteAllText("fil1.txt", Console.ReadLine());
  493.  
  494.  
  495.                     vunnit = true;
  496.                 }
  497.                 else if (HarDatornVunnit())
  498.                 {
  499.                     Console.Clear();
  500.                     RitaPlan();
  501.                     Console.WriteLine("Datorn har vunnit");
  502.                     Console.ReadKey();
  503.                     vunnit = true;
  504.                 }
  505.  
  506.             }
  507.         }
  508.         /// <summary>
  509.         /// Placerar skepp, likadan som Placeraskepp, men denna metoden skapar större skepp
  510.         /// </summary>
  511.         ///
  512.  
  513.  
  514.         static void Placeraskepp3()
  515.         {
  516.             for (int i = 0; i < 2; i++)
  517.             {
  518.                 string loopSvar = "waaaa";
  519.                 while (loopSvar != "!")
  520.                 {
  521.                     Console.Clear();
  522.                     Console.WriteLine("Placera dina skepp, använda WASD för att flytta runt, klicka enter för att placera skeppet");
  523.                     Console.WriteLine();
  524.                     RitaPlan();
  525.                    
  526.                     if (rotera == 0)
  527.                     {
  528.                         ConsoleKeyInfo info = Console.ReadKey();
  529.                         if (info.Key == ConsoleKey.W && placeraY - 1 >= 0)
  530.                         {
  531.                             placeraY -= 1;
  532.                         }
  533.                         if (info.Key == ConsoleKey.S && placeraY + 1 < kartHöjd)
  534.                         {
  535.                             placeraY += 1;
  536.                         }
  537.                         if (info.Key == ConsoleKey.A && placeraX - 2 >= 0)
  538.                         {
  539.                             placeraX -= 1;
  540.                         }
  541.                         if (info.Key == ConsoleKey.D && placeraX + 2 < kartBredd)
  542.                         {
  543.                             placeraX += 1;
  544.                         }
  545.                         if (info.Key == ConsoleKey.R && placeraY - 1 >= 0 && placeraY + 1 < kartHöjd && placeraX - 1 >= 0 && placeraX + 1 < kartBredd)
  546.                         {
  547.                             rotera = 1;
  548.                         }
  549.                         if (info.Key == ConsoleKey.Enter)
  550.                         {
  551.                             spelarensKarta[placeraX, placeraY] = "X";
  552.                             spelarensKarta[placeraX - 1, placeraY] = "X";
  553.                             spelarensKarta[placeraX + 1, placeraY] = "X";
  554.                             loopSvar = "!";
  555.                         }
  556.                     }
  557.                     else
  558.                     {
  559.                         ConsoleKeyInfo info = Console.ReadKey();
  560.                         if (info.Key == ConsoleKey.W && placeraY - 2 >= 0)
  561.                         {
  562.                             placeraY -= 1;
  563.                         }
  564.                         if (info.Key == ConsoleKey.S && placeraY + 2 < kartHöjd)
  565.                         {
  566.                             placeraY += 1;
  567.                         }
  568.                         if (info.Key == ConsoleKey.A && placeraX - 1 >= 0)
  569.                         {
  570.                             placeraX -= 1;
  571.                         }
  572.                         if (info.Key == ConsoleKey.D && placeraX + 1 < kartBredd)
  573.                         {
  574.                             placeraX += 1;
  575.                         }
  576.                         if (info.Key == ConsoleKey.R && placeraY - 1 >= 0 && placeraY + 1 < kartHöjd && placeraX - 1 >= 0 && placeraX + 1 < kartBredd)
  577.                         {
  578.                             rotera = 0;
  579.                         }
  580.                         if (info.Key == ConsoleKey.Enter)
  581.                         {
  582.                             spelarensKarta[placeraX, placeraY] = "X";
  583.                             spelarensKarta[placeraX, placeraY - 1] = "X";
  584.                             spelarensKarta[placeraX, placeraY + 1] = "X";
  585.                             loopSvar = "!";
  586.                         }
  587.                     }
  588.  
  589.  
  590.                 }
  591.             }
  592.  
  593.  
  594.             int datorBåtsida = slump.Next(2);
  595.             int datorbåtX = slump.Next(kartBredd);
  596.             int datorbåtY = slump.Next(kartHöjd);
  597.  
  598.             // Båten läggs XXX om datorBåtsida == 0
  599.  
  600.  
  601.             string ett = "";
  602.             while (ett != "!")
  603.             {
  604.                 if (datorBåtsida == 0)
  605.                 {
  606.                     if (datorbåtX + 2 <= kartBredd && datorbåtX - 1 >= 0)
  607.                     {
  608.                         datornsKarta[datorbåtX, datorbåtY] = "X";
  609.                         datornsKarta[datorbåtX + 1, datorbåtY] = "X";
  610.                         datornsKarta[datorbåtX - 1, datorbåtY] = "X";
  611.                         ett = "!";
  612.                     }
  613.                     else
  614.                     {
  615.                         datorbåtX = slump.Next(kartBredd);
  616.                         datorbåtY = slump.Next(kartHöjd);
  617.                     }
  618.                 }
  619.                 else
  620.                 {
  621.                     if (datorbåtY + 1 >= 0 && datorbåtY + 2 <= kartHöjd)
  622.                     {
  623.                         datornsKarta[datorbåtX, datorbåtY] = "X";
  624.                         datornsKarta[datorbåtX, datorbåtY + 1] = "X";
  625.                         datornsKarta[datorbåtX, datorbåtY - 1] = "X";
  626.                         ett = "!";
  627.                     }
  628.                     else
  629.                     {
  630.                         datorbåtX = slump.Next(kartBredd);
  631.                         datorbåtY = slump.Next(kartHöjd);
  632.                     }
  633.                 }
  634.             }
  635.             datorbåtY = slump.Next(0, kartHöjd);
  636.             datorbåtX = slump.Next(0, kartBredd);
  637.             datorBåtsida = slump.Next(2);
  638.             string wa = "";
  639.             while (wa != "!")
  640.             {
  641.                 if (datorBåtsida == 0)
  642.                 {
  643.                     if (datorbåtX + 2 <= kartBredd && datorbåtX - 1 >= 0)
  644.                     {
  645.                         datornsKarta[datorbåtX, datorbåtY] = "X";
  646.                         datornsKarta[datorbåtX + 1, datorbåtY] = "X";
  647.                         datornsKarta[datorbåtX - 1, datorbåtY] = "X";
  648.                         wa = "!";
  649.                     }
  650.                     else
  651.                     {
  652.                         datorbåtX = slump.Next(kartBredd);
  653.                         datorbåtY = slump.Next(kartHöjd);
  654.                     }
  655.                 }
  656.                 else
  657.                 {
  658.                     if (datorbåtY - 1 >= 0 && datorbåtY + 2 <= kartHöjd)
  659.                     {
  660.                         datornsKarta[datorbåtX, datorbåtY] = "X";
  661.                         datornsKarta[datorbåtX, datorbåtY + 1] = "X";
  662.                         datornsKarta[datorbåtX, datorbåtY - 1] = "X";
  663.                         wa = "!";
  664.                     }
  665.                     else
  666.                     {
  667.                         datorbåtX = slump.Next(kartBredd);
  668.                         datorbåtY = slump.Next(kartHöjd);
  669.                     }
  670.                 }
  671.             }
  672.         }
  673.  
  674.     }
  675. }
Advertisement
Add Comment
Please, Sign In to add comment