botgob

sänka skepp 2

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