Guest User

Dr. Mario Virus Generator Test

a guest
Dec 28th, 2017
153
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections;
  3.  
  4. namespace DrMarioVirusGeneratorTest
  5. {
  6.     struct Position
  7.     {
  8.         public int x;
  9.         public int y;
  10.     }
  11.  
  12.     class MainClass
  13.     {
  14.         private static int seed;
  15.         private static Random randomizer;
  16.  
  17.         public static void Main (string[] args)
  18.         {
  19.             randomizer = new Random ();
  20.             char[,] bottle = new char[16, 8];
  21.             for (int y = 0; y < 16; y++) {
  22.                 for (int x = 0; x < 8; x++) {
  23.                     bottle[y, x] = '.';
  24.                 }
  25.             }
  26.  
  27.             int virusLevel = 10;
  28.             int remainingViruses = (virusLevel + 1) * 4;
  29.             seed = randomizer.Next ();
  30.             while (remainingViruses > 0) {
  31.                 remainingViruses = GenerateVirus (bottle, remainingViruses, virusLevel);
  32.                 Console.WriteLine (remainingViruses.ToString ());
  33.             }
  34.  
  35.             Console.WriteLine ("    --------");
  36.             for (int y = 15; y >= 0; y--) {
  37.                 String line = String.Format ("{0,2} |", y);
  38.                 for (int x = 0; x < 8; x++) {
  39.                     line = String.Concat (line, bottle[y, x]);
  40.                 }
  41.                 line = String.Concat (line, '|');
  42.                 Console.WriteLine (line);
  43.             }
  44.             Console.WriteLine ("    --------");
  45.             Console.WriteLine ("    12345678");
  46.         }
  47.  
  48.         private static Position NextBottlePosition(Position position)
  49.         {
  50.             position.x++;
  51.             if (position.x > 7) {
  52.                 position.x = 0;
  53.                 position.y--;
  54.             }
  55.  
  56.             return position;
  57.         }
  58.  
  59.         private static int GenerateVirus(char[,] bottle, int remainingViruses, int virusLevel)
  60.         {
  61.             if (remainingViruses < 1) {
  62.                 return 0;
  63.             }
  64.  
  65.             int maxVirusRow;
  66.             if (virusLevel >= 19) {
  67.                 maxVirusRow = 12;
  68.             }
  69.             else {
  70.                 int[] maxVirusRows = {
  71.                     9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
  72.                     10, 10,
  73.                     11, 11
  74.                 };
  75.                 maxVirusRow = maxVirusRows[virusLevel];
  76.             }
  77.  
  78.             Position virusPosition;
  79.             virusPosition.x = seed % 8;
  80.             do {
  81.                 seed = randomizer.Next();
  82.                 virusPosition.y = seed % 16;
  83.             } while (virusPosition.y > maxVirusRow);
  84.  
  85.             char[] virusTypes = { 'Y', 'R', 'B' };
  86.             int virusIndex = remainingViruses % 4;
  87.             if (virusIndex == 3) {
  88.                 seed = randomizer.Next();
  89.                 if (((seed / 3) % 2) == 0) {
  90.                     virusIndex = seed % 3;
  91.                 }
  92.                 else {
  93.                     virusIndex = 2 - (seed % 3);
  94.                 }
  95.             }
  96.  
  97.             while (bottle[virusPosition.y, virusPosition.x] != '.') {
  98.                 Console.WriteLine (bottle [virusPosition.y, virusPosition.x].ToString ());
  99.                 virusPosition = NextBottlePosition(virusPosition);
  100.                 if (virusPosition.y < 0) {
  101.                     return remainingViruses;
  102.                 }
  103.             }
  104.  
  105.             Hashtable surroundingViruses = new Hashtable();
  106.             surroundingViruses.Add('Y', false);
  107.             surroundingViruses.Add('R', false);
  108.             surroundingViruses.Add('B', false);
  109.             surroundingViruses.Add('.', false);
  110.             while (true) {
  111.                 surroundingViruses['Y'] = false;
  112.                 surroundingViruses['R'] = false;
  113.                 surroundingViruses['B'] = false;
  114.                 surroundingViruses['.'] = false;
  115.  
  116.                 if (virusPosition.x > 1) {
  117.                     surroundingViruses[bottle[virusPosition.y, virusPosition.x - 2]] = true;
  118.                 }
  119.                 if (virusPosition.x < 6) {
  120.                     surroundingViruses[bottle[virusPosition.y, virusPosition.x + 2]] = true;
  121.                 }
  122.                 if (virusPosition.y < 14) {
  123.                     surroundingViruses[bottle[virusPosition.y + 2, virusPosition.x]] = true;
  124.                 }
  125.                 if (virusPosition.y > 1) {
  126.                     surroundingViruses[bottle[virusPosition.y - 2, virusPosition.x]] = true;
  127.                 }
  128.  
  129.                 if (!(bool)surroundingViruses['Y'] || !(bool)surroundingViruses['R'] || !(bool)surroundingViruses['B']) {
  130.                     while ((bool)surroundingViruses[virusTypes[virusIndex]]) {
  131.                         if (virusIndex == 0) {
  132.                             virusIndex = 2;
  133.                         }
  134.                         else {
  135.                             virusIndex--;
  136.                         }
  137.                     }
  138.                     break;
  139.                 }
  140.  
  141.                 do {
  142.                     virusPosition = NextBottlePosition(virusPosition);
  143.                     if (virusPosition.y < 0) {
  144.                         return remainingViruses;
  145.                     }
  146.                 } while (bottle[virusPosition.y, virusPosition.x] != '.');
  147.             }
  148.  
  149.             bottle[virusPosition.y, virusPosition.x] = virusTypes[virusIndex];
  150.             return remainingViruses - 1;
  151.         }
  152.     }
  153. }
RAW Paste Data