Advertisement
GauHelldragon

dafelidcilifeeionaieon simulator

Oct 22nd, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.81 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use warnings;
  3.  
  4.  
  5. my $SIZE = 24;
  6.  
  7. my $MAXTURNS = 60;
  8.  
  9.  
  10.  
  11. my @SIDES = (   [-1, -1],
  12.             [-1, 0],
  13.             [-1, 1],
  14.             [0 ,-1],
  15.             [0 , 1],
  16.             [1 ,-1],
  17.             [1 , 0],
  18.             [1 , 1] );
  19.  
  20. my @grid;
  21.  
  22. #loadGrid();
  23.  
  24. my $turns;
  25.  
  26. loadNewGrid(7,14);
  27.  
  28. printGrid();
  29. $mana = runSimulation();
  30. print("Total mana generated = $mana\n");
  31.  
  32.  
  33. #my $maxmana = -1;
  34. #for ( my $x = 0; $x <= 20; $x++ ) {
  35. #   for ( my $y = 0; $y <= 20; $y ++ ) {
  36. #       loadNewGrid($x,$y);
  37. #  
  38. #       print ("Running $x $y :");
  39. #       $mana = runSimulation();
  40. #       print ("$mana\n");
  41. #       if ( $mana > $maxmana ) {
  42. #           $savedX = $x;
  43. #           $savedY = $y;
  44. #           $maxmana = $mana;
  45. #       }
  46. #      
  47. #   }
  48. #}
  49.  
  50. #print("Best simulation: $savedX $savedY = $maxmana\n");
  51.  
  52.  
  53.  
  54.  
  55.  
  56. sub runSimulation
  57. {
  58.     my $totalMana = 0;
  59.     for ( $turns=0; $turns < $MAXTURNS; $turns++ ) {
  60.         printGrid();
  61.         print "\n******\n";
  62.         setNewGrid();
  63.         updateGrid();
  64.         $totalMana += eatBlocks($turns);
  65.         if ( $theEnd == 1 ) { last }
  66.         $barf = <STDIN>;
  67.     }
  68.     return $totalMana
  69. }
  70.  
  71. sub printGrid {
  72.     for ( my $x=0; $x < $SIZE; $x++ ) {
  73.         for ( my $y=0; $y < $SIZE; $y++ ) {
  74.             $cell = $grid[$x][$y];
  75.             if ( $x >= 11 and $x <= 13 and $y >= 11 and $y <= 13 ) { $cell = "X" }
  76.             if ( $x == 12 and $y == 12 ) { $cell = "@" }
  77.             print("$cell ");
  78.            
  79.    
  80.         }
  81.         print "\n";
  82.     }
  83. }
  84.  
  85. sub setNewGrid {
  86.     $theEnd = 1;
  87.     for ( my $x=0; $x < $SIZE; $x++ ) {
  88.         for ( my $y=0; $y < $SIZE; $y++ ) {
  89.             my $newBlock = getNewCell($x,$y);
  90.             $newGrid[$x][$y] = $newBlock;
  91.             if ( $newBlock == 1 ) { $theEnd = 0 };
  92.         }
  93.     }
  94. }
  95.  
  96. sub getNewCell {
  97.     my ($x,$y) = @_;
  98.  
  99.     my $adj = getAdjacent($x,$y);
  100.     my $current = $grid[$x][$y];
  101.    
  102.     if ( $adj < 2 || $adj > 3 ) { return 0; }
  103.     if ( $current == 1 ) { return 1; }
  104.    
  105.     if ( $adj == 3 ){  return 1; }
  106.    
  107.     return 0;
  108.    
  109. }
  110.  
  111. sub updateGrid {
  112.     for ( my $x=0; $x < $SIZE; $x++ ) {
  113.         for ( my $y=0; $y < $SIZE; $y++ ) {
  114.            
  115.             $grid[$x][$y] = $newGrid[$x][$y];
  116.    
  117.         }
  118.     }  
  119. }
  120.  
  121.  
  122.  
  123. sub eatBlocks {
  124.     my $total;
  125.     my ($time) = @_;
  126.     for ( my $x=11; $x <= 13; $x++ ) {
  127.         for ( my $y=11; $y <= 13; $y++ ) {
  128.            
  129.             $total += eatBlock($x,$y,$time);
  130.             $grid[$x][$y]=0;
  131.    
  132.         }
  133.     }
  134.     return $total;
  135. }
  136.  
  137. sub eatBlock {
  138.     my ($x,$y,$time) = @_;
  139.     $cell = $grid[$x][$y];
  140.     if ( $cell == 1 ) {
  141.         return 80 * $time
  142.     }
  143.     return 0;
  144. }
  145.  
  146.  
  147. sub isInBounds
  148. {
  149.     my ($x,$y) = @_;
  150.     if ( $x < 0 || $x > $SIZE || $y < 0 || $y > $SIZE ) { return 0 }
  151.     return 1;
  152. }
  153.  
  154. sub getAdjacent
  155. {
  156.     my ($x,$y) = @_;
  157.     my $count = 0;
  158.     foreach my $pair (@SIDES) {
  159.         ($dx,$dy) = @{$pair};
  160.         $mx = $x + $dx;
  161.         $my = $y + $dy;
  162.         if ( isInBounds($mx,$my) == 1 ) {
  163.             my $cell = 0;
  164.             #print("check cell $mx $my is $cell\n");
  165.             $cell = $grid[$mx][$my];
  166.            
  167.             if ( $cell == 1 ) { $count++ }     
  168.         }
  169.    
  170.     }
  171.     return $count;
  172.  
  173. }
  174.  
  175. sub loadGrid
  176. {
  177.  
  178.     open(RAWDATA, "<map.txt") or die("Could not open map.txt");
  179.  
  180.     my $line = 0;
  181.     while (<RAWDATA>)
  182.     {
  183.         #print ("line = $_\n");
  184.         #@grid[$line] = split(/ /,$_);
  185.         my @test = split(/ /,$_);
  186.        
  187.         my $c = 0;
  188.         for $thing (@test) {
  189.             #print("$thing,");
  190.             $grid[$line][$c] = $thing;
  191.             $c++;
  192.         }
  193.         #print("\n")*;
  194.         #if ( $line > $SIZE+1 ) {
  195.     #       print("Mapfile is too big\n");#
  196.     #       last;
  197.     #   }
  198.         $line++;
  199.     }
  200. }
  201.  
  202. sub loadNewGrid
  203. {
  204.    
  205.    
  206.     for ( my $x=0; $x <= $SIZE; $x++ ) {
  207.         for ( my $y=0; $y <= $SIZE; $y++ ) {
  208.             $grid[$x][$y] = 0;
  209.         }
  210.     }
  211.     my ($x,$y) = @_;
  212. #   $grid[$x+1][$y] = 1;
  213. #   $grid[$x+2][$y] = 1;
  214. #   $grid[$x][$y+1] = 1;
  215. #   $grid[$x+1][$y+1] = 1;
  216. #   $grid[$x+1][$y+2] = 1;
  217.  
  218.  
  219. #   $grid[$x+2][$y] = 1;
  220. #   $grid[$x+1][$y+1] = 1;
  221. #   $grid[$x+1][$y+2] = 1;
  222. #   $grid[$x+3][$y+1] = 1;
  223. #   $grid[$x+3][$y+2] = 1;
  224. #   $grid[$x][$y+2] = 1;
  225. #   $grid[$x+4][$y+2] = 1;
  226.  
  227. #   $grid[$x+1][$y] = 1;
  228. #   $grid[$x+3][$y+1] = 1;
  229. #   $grid[$x][$y+2] = 1;
  230. #   $grid[$x+1][$y+2] = 1;
  231. #   $grid[$x+4][$y+2] = 1;
  232. #   $grid[$x+5][$y+2] = 1;
  233. #   $grid[$x+6][$y+2] = 1;
  234.  
  235.     $grid[$x][$y] = 1;
  236.     $grid[$x+1][$y] = 1;
  237.     $grid[$x][$y+1] = 1;
  238.     $grid[$x+2][$y+1] = 1;
  239.     $grid[$x+2][$y+2] = 1;
  240.     $grid[$x+3][$y+2] = 1;
  241.  
  242. #   $grid[$x+2][$y] = 1;
  243. #   $grid[$x+3][$y] = 1;
  244. #   $grid[$x][$y+1] = 1;
  245. #   $grid[$x+1][$y+1] = 1;
  246. #   $grid[$x+2][$y+1] = 1;
  247. #   $grid[$x+1][$y+2] = 1;
  248.  
  249. #   $grid[$x+2][$y] = 1;
  250. #   $grid[$x][$y+1] = 1;
  251. #   $grid[$x+1][$y+1] = 1;
  252. #   $grid[$x+2][$y+2] = 1;
  253. #   $grid[$x+4][$y+2] = 1;
  254. #   $grid[$x+4][$y+3] = 1;
  255.  
  256. #   $grid[$x][$y] = 1;
  257. #   $grid[$x+1][$y] = 1;
  258. #   $grid[$x+1][$y+1] = 1;
  259. #   $grid[$x+2][$y+1] = 1;
  260. #   $grid[$x+2][$y+2] = 1;
  261. #   $grid[$x+3][$y+2] = 1; 
  262.    
  263. #   $grid[$x][$y] = 1;
  264. #   $grid[$x+1][$y] = 1;
  265. #   $grid[$x+2][$y] = 1;
  266. #   $grid[$x+1][$y+2] = 1;
  267. #   $grid[$x+1][$y+3] = 1;
  268. #   $grid[$x+1][$y+4] = 1; 
  269.  
  270. #   $grid[$x][$y] = 1;
  271. #   $grid[$x+1][$y] = 1;
  272. #   $grid[$x+1][$y+1] = 1;
  273. #   $grid[$x+1][$y+2] = 1;
  274. #   $grid[$x+1][$y+3] = 1;
  275. #   $grid[$x+2][$y+3] = 1;     
  276.    
  277.    
  278.     for ( my $x=10; $x <= 14; $x++ ) {
  279.         for ( my $y=10; $y <= 14; $y++ ) {
  280.             $grid[$x][$y] = 0;
  281.         }
  282.     }
  283.    
  284.    
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement