Don't like ads? PRO users don't see any ads ;-)
Guest

MineSweepR

By: a guest on May 13th, 2012  |  syntax: C#  |  size: 10.05 KB  |  hits: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace MineSweepR_CON_
  6. {
  7.     class Program
  8.     {
  9.         #region VARIABLES
  10.         private static clsField[,] gFields = new clsField[32, 32];
  11.         private static int[] gFieldSize = new int[2];
  12.         private static string gProgramName = "MineSweepR";
  13.         #endregion
  14.  
  15.         #region CLASSES
  16.         class clsField
  17.         {
  18.             #region VARIABLES
  19.             private bool gBomb = false;
  20.             private int gBombsAround = -1;
  21.             private bool gShown = false;
  22.             private int[] gPos = new int[2];
  23.             #endregion
  24.  
  25.             #region PROPERTIES
  26.             public bool Bomb
  27.             {
  28.                 get { return gBomb; }
  29.                 set { gBomb = value; }
  30.             }
  31.             public int[] Pos
  32.             {
  33.                 get { return gPos; }
  34.                 set { gPos = value; }
  35.             }
  36.             public bool Shown
  37.             {
  38.                 get { return gShown; }
  39.                 set { gShown = value; }
  40.             }
  41.             public int BombsAround
  42.             {
  43.                 get { return gBombsAround; }
  44.                 set { gBombsAround = value; }
  45.             }
  46.             #endregion
  47.  
  48.             #region METHODS
  49.             public clsField(int[] pPos)
  50.             {
  51.                 gPos = pPos;
  52.             }
  53.  
  54.             public void calcNeighbours(clsField[,] pFields, int[] tFieldSize)
  55.             {
  56.                 int iBombsFound = 0;
  57.                 //Oben links
  58.                 if (gPos[0] - 1 >= 0 && gPos[0] - 1 <= tFieldSize[0] - 1 && gPos[1] - 1 >= 0 && gPos[1] - 1 <= tFieldSize[1] - 1) { if (pFields[gPos[0] - 1, gPos[1] - 1].Bomb) { iBombsFound++; } }
  59.                 //Links
  60.                 if (gPos[0] - 1 >= 0 && gPos[0] - 1 <= tFieldSize[0] - 1 && gPos[1] >= 0 && gPos[1] <= tFieldSize[1] - 1) { if (pFields[gPos[0] - 1, gPos[1]].Bomb) { iBombsFound++; } }
  61.                 ////Unten links
  62.                 if (gPos[0] - 1 >= 0 && gPos[0] - 1 <= tFieldSize[0] - 1 && gPos[1] + 1 >= 0 && gPos[1] + 1 <= tFieldSize[1] - 1) { if (pFields[gPos[0] - 1, gPos[1] + 1].Bomb) { iBombsFound++; } }
  63.                 ////Oben Mitte
  64.                 if (gPos[0] >= 0 && gPos[0] <= tFieldSize[0] - 1 && gPos[1] - 1 >= 0 && gPos[1] - 1 <= tFieldSize[1] - 1) { if (pFields[gPos[0], gPos[1] - 1].Bomb) { iBombsFound++; } }
  65.                 ////Unten Mitte
  66.                 if (gPos[0] >= 0 && gPos[0] <= tFieldSize[0] - 1 && gPos[1] + 1 >= 0 && gPos[1] + 1 <= tFieldSize[1] - 1) { if (pFields[gPos[0], gPos[1] + 1].Bomb) { iBombsFound++; } }
  67.                 ////Oben rechts
  68.                 if (gPos[0] + 1 >= 0 && gPos[0] + 1 <= tFieldSize[0] - 1 && gPos[1] - 1 >= 0 && gPos[1] - 1 <= tFieldSize[1] - 1) { if (pFields[gPos[0] + 1, gPos[1] - 1].Bomb) { iBombsFound++; } }
  69.                 ////Rechts
  70.                 if (gPos[0] + 1 >= 0 && gPos[0] + 1 <= tFieldSize[0] - 1 && gPos[1] >= 0 && gPos[1] <= tFieldSize[1] - 1) { if (pFields[gPos[0] + 1, gPos[1]].Bomb) { iBombsFound++; } }
  71.                 ////Unten Rechts
  72.                 if (gPos[0] + 1 >= 0 && gPos[0] + 1 <= tFieldSize[0] - 1 && gPos[1] + 1 >= 0 && gPos[1] + 1 <= tFieldSize[1] - 1) { if (pFields[gPos[0] + 1, gPos[1] + 1].Bomb) { iBombsFound++; } }
  73.                 gBombsAround = iBombsFound;
  74.             }
  75.             #endregion
  76.         }
  77.         #endregion
  78.  
  79.         #region METHODS
  80.         private static void updateCon(string pCaption)
  81.         {
  82.             Console.Clear();
  83.             Console.Title = gProgramName + " - " + pCaption;
  84.             for (int i = 0; i < (gProgramName + " - " + pCaption).Length + 4; i++)
  85.             {
  86.                 Console.Write("+");
  87.             }
  88.             Console.Write("\n+ " + gProgramName + " - " + pCaption + " +\n");
  89.             for (int i = 0; i < (gProgramName + " - " + pCaption).Length + 4; i++)
  90.             {
  91.                 Console.Write("+");
  92.             }
  93.             Console.Write("\n\n");
  94.         }
  95.  
  96.         private static void drawTable(int mode=0)
  97.         {
  98.             int iCounter = -1;
  99.             Console.Write("\n x");
  100.             for (int i = 0; i < gFieldSize[0]; i++)
  101.             {
  102.                 if (iCounter == 9) { iCounter = 0; }
  103.                 else { iCounter++; }
  104.                 Console.Write(iCounter.ToString());
  105.             }
  106.             Console.Write("\n");
  107.             Console.Write("y ");
  108.             for (int i = 0; i < gFieldSize[0]; i++) { Console.Write("-"); }
  109.             Console.Write("\n");
  110.             iCounter = -1;
  111.             for (int i = 0; i < gFieldSize[1]; i++)
  112.             {
  113.                 if (iCounter == 9) { iCounter = 0; }
  114.                 else { iCounter++; }
  115.                 Console.Write(iCounter.ToString() + "|");
  116.                 for (int j = 0; j < gFieldSize[0]; j++)
  117.                 {
  118.                     if (mode == 0)
  119.                     {
  120.                         if (gFields[j, i].Shown == false) { Console.Write("?"); }
  121.                         else { Console.Write(gFields[j, i].BombsAround.ToString()); }
  122.                     }
  123.                     else
  124.                     {
  125.                         if (gFields[j, i].Bomb == false) { Console.Write("0"); }
  126.                         else { Console.Write("x"); }
  127.                     }
  128.                 }
  129.                 Console.Write("\n");
  130.             }
  131.             Console.Write("\n");
  132.         }
  133.  
  134.         #endregion
  135.         static void Main(string[] args)
  136.         {
  137.             do
  138.             {
  139.                 //Setup field!
  140.                 updateCon("Setup");
  141.                 Console.Write("Enter the field's size (width,height): ");
  142.                 string tSize = Console.ReadLine();
  143.                 gFieldSize[0] = Convert.ToInt32(tSize.Split(',')[0]);
  144.                 gFieldSize[1] = Convert.ToInt32(tSize.Split(',')[1]);
  145.                 int iTotalFields = gFieldSize[0] * gFieldSize[1];
  146.                 Console.Write("\nFieldsize: " + gFieldSize[0].ToString() + "*" + gFieldSize[1] + ", " + iTotalFields.ToString() + "\n(Press ENTER)");
  147.                 Console.ReadLine();
  148.                 int iBombs = Convert.ToInt32((double)gFieldSize[0] * (double)gFieldSize[1] / (double)10);
  149.                 //Initializing fields
  150.                 gFields = new clsField[gFieldSize[0], gFieldSize[1]];
  151.                 for (int i = 0; i < gFieldSize[0]; i++)
  152.                 {
  153.                     for (int j = 0; j < gFieldSize[1]; j++)
  154.                     {
  155.                         int[] tPos = new int[2];
  156.                         tPos[0] = i;
  157.                         tPos[1] = j;
  158.                         gFields[i, j] = new clsField(tPos);
  159.                     }
  160.                 }
  161.                 //Planting mines
  162.                 System.Random tRan = new System.Random();
  163.                 for (int i = 0; i < iBombs; i++)
  164.                 {
  165.                     int[] tPos = new int[2];
  166.                     tPos[0] = tRan.Next(0, gFieldSize[0]);
  167.                     tPos[1] = tRan.Next(0, gFieldSize[1]);
  168.                     if (gFields[tPos[0], tPos[1]].Bomb == true) { i--; }
  169.                     else { gFields[tPos[0], tPos[1]].Bomb = true; }
  170.                 }
  171.                 Console.Write("\nAdded " + iBombs.ToString() + " bombs!\n");
  172.                 //Show mines
  173.                 for (int i = 0; i < gFieldSize[1]; i++)
  174.                 {
  175.                     for (int j = 0; j < gFieldSize[0]; j++)
  176.                     {
  177.                         gFields[j, i].calcNeighbours(gFields, gFieldSize);
  178.                     }
  179.                 }
  180.                 Console.Write("Calculated all bombs - You may play now!");
  181.                 Console.ReadLine();
  182.                 System.IO.StreamWriter tWriter = new System.IO.StreamWriter("map.txt",false, Encoding.UTF8);
  183.                 for (int i = 0; i < gFieldSize[1]; i++)
  184.                 {
  185.                     for (int j = 0; j < gFieldSize[0]; j++)
  186.                     {
  187.                         if (gFields[j, i].Bomb == false) { tWriter.Write("0"); }
  188.                         else { tWriter.Write("x"); }
  189.                     }
  190.                     tWriter.WriteLine("");
  191.                 }
  192.                 tWriter.WriteLine("");
  193.                 for (int i = 0; i < gFieldSize[1]; i++)
  194.                 {
  195.                     for (int j = 0; j < gFieldSize[0]; j++)
  196.                     {
  197.                         if (gFields[j, i].Bomb) { tWriter.Write("x"); }
  198.                         else { tWriter.Write(gFields[j, i].BombsAround.ToString()); }
  199.                     }
  200.                     tWriter.WriteLine("");
  201.                 }
  202.                 tWriter.Close();
  203.                 tWriter.Dispose();
  204.                 int tFieldsFlipped = 0;
  205.                 while ((iTotalFields - tFieldsFlipped) != iBombs)
  206.                 {
  207.                     updateCon("Pick a field");
  208.                     drawTable();
  209.                     Console.Write("Pick a field (x,y): ");
  210.                     string tInput = Console.ReadLine();
  211.                     int tX = Convert.ToInt32(tInput.Split(',')[0]);
  212.                     int tY = Convert.ToInt32(tInput.Split(',')[1]);
  213.                     if (gFields[tX, tY].Bomb == true) { Console.Write("\n\nSorry - This field actually IS a bomb!"); Console.ReadLine(); gFields[tX, tY].Shown = true; break; }
  214.                     else
  215.                     {
  216.                         if (gFields[tX, tY].Shown == false)
  217.                         {
  218.                             gFields[tX, tY].Shown = true;
  219.                             tFieldsFlipped++;
  220.                         }
  221.                     }
  222.                 }
  223.                 updateCon("End");
  224.                 for (int i = 0; i < gFieldSize[0]; i++)
  225.                 {
  226.                     for (int j = 0; j < gFieldSize[1]; j++)
  227.                     {
  228.                         gFields[i, j].Shown = true;
  229.                     }
  230.                 }
  231.                 drawTable(1);
  232.                 Console.Write("\nYou played this field!\n\nWould you like to quit this game?\n(Enter \"y\" to quit)");
  233.             }
  234.             while (Console.ReadLine().ToLower() != "y");
  235.         }
  236.     }
  237. }