Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.04 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Drawing;
  6.  
  7. namespace FANGEN
  8. {
  9.     class Program
  10.     {
  11.         abstract class Wiatrak
  12.         {
  13.             protected char[,] wiatrak;
  14.             protected int rzad;
  15.             protected int rozmiar; // = dlugość = wysokość
  16.  
  17.             public Wiatrak()
  18.             {
  19.             }
  20.  
  21.             public Wiatrak(int rzad)
  22.             {
  23.                 this.rzad = rzad;
  24.                 rozmiar = 2 * rzad;
  25.             }
  26.  
  27.             public void stworz()
  28.             {
  29.                 wiatrak = new char[rozmiar, rozmiar];
  30.                 zbudujSrodek();
  31.                 zbudujSkrzydla();
  32.             }
  33.  
  34.             private void zbudujSrodek()
  35.             {
  36.                 // Uzupełniamy cztery środkowe pola wiatraka '*'
  37.                 wiatrak[rzad - 1, rzad - 1] = '*';
  38.                 wiatrak[rzad, rzad - 1] = '*';
  39.                 wiatrak[rzad - 1, rzad] = '*';
  40.                 wiatrak[rzad, rzad] = '*';
  41.             }
  42.  
  43.             private void zbudujSkrzydla()
  44.             {
  45.                 //Skrzydla budujemy od srodka, najpierw budujemy krawedzie okalające środek
  46.                 //później krawedzie ktore okalają środek i krawedzie środka itd.
  47.                 for (int i = 1; i < rzad; i++)
  48.                 {
  49.                     Point lewyGorny = new Point(rzad - 1 - i, rzad - 1 - i);
  50.                     Point prawyGorny = new Point(rzad + i, rzad - 1 - i);
  51.                     Point lewyDolny = new Point(rzad -1 - i, rzad + i);
  52.                     Point prawyDolny = new Point(rzad + i, rzad + i);
  53.                     int iloscGwiazdek = i;
  54.                     zbudujKrawedzie(lewyGorny, prawyGorny, lewyDolny, prawyDolny,iloscGwiazdek);
  55.                 }
  56.             }
  57.  
  58.             abstract public void zbudujKrawedzie(Point lewyGorny, Point prawyGorny,
  59.             Point lewyDolny, Point prawyDolny, int iloscGwiazdek);
  60.  
  61.             protected void wstawGwiazdkiWRogi(Point lewyGorny, Point prawyGorny,
  62.             Point lewyDolny, Point prawyDolny)
  63.             {
  64.                 wiatrak[lewyGorny.X, lewyGorny.Y] = '*';
  65.                 wiatrak[prawyGorny.X, prawyGorny.Y] = '*';
  66.                 wiatrak[lewyDolny.X, lewyDolny.Y] = '*';
  67.                 wiatrak[prawyDolny.X, prawyDolny.Y] = '*';
  68.             }
  69.  
  70.             public void wyswietl()
  71.             {
  72.                 for (int i = 0; i < rozmiar; i++)
  73.                 {
  74.                     for (int j = 0; j < rozmiar; j++)
  75.                     {
  76.                         Console.Write(wiatrak[i, j]);
  77.                     }
  78.                     Console.WriteLine();
  79.                 }
  80.  
  81.             }
  82.         }
  83.  
  84.         class WiatrakLewoskretny : Wiatrak
  85.         {
  86.             public WiatrakLewoskretny(int rzad)
  87.             {
  88.                 this.rzad = rzad;
  89.                 rozmiar = 2 * rzad;
  90.             }
  91.  
  92.             override public void zbudujKrawedzie(Point lewyGorny, Point prawyGorny,
  93.                 Point lewyDolny, Point prawyDolny, int iloscGwiazdek)
  94.             {
  95.                 wstawGwiazdkiWRogi(lewyGorny, prawyGorny, lewyDolny, prawyDolny);
  96.  
  97.                 int iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  98.                 for (int i = lewyGorny.X + 1; i < prawyGorny.X; i++)
  99.                 {
  100.                     if (iloscGwiazdekDlaKrawedzi != 0)
  101.                     {
  102.                         wiatrak[lewyGorny.Y, i] = '.';
  103.                         iloscGwiazdekDlaKrawedzi--;
  104.                     }
  105.                     else
  106.                     {
  107.                         wiatrak[lewyGorny.Y, i] = '*';
  108.                     }
  109.                 }
  110.  
  111.                 iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  112.                 for (int i = prawyGorny.Y + 1; i < prawyDolny.Y; i++)
  113.                 {
  114.                     if (iloscGwiazdekDlaKrawedzi != 0)
  115.                     {
  116.                         wiatrak[i, prawyGorny.X] = '.';
  117.                         iloscGwiazdekDlaKrawedzi--;
  118.                     }
  119.                     else
  120.                     {
  121.                         wiatrak[i, prawyGorny.X] = '*';
  122.                     }
  123.                 }
  124.                 iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  125.                 for (int i = prawyDolny.X - 1; i > lewyDolny.X; i--)
  126.                 {
  127.                     if (iloscGwiazdekDlaKrawedzi != 0)
  128.                     {
  129.                         wiatrak[prawyDolny.Y, i] = '.';
  130.                         iloscGwiazdekDlaKrawedzi--;
  131.                     }
  132.                     else
  133.                     {
  134.                         wiatrak[prawyDolny.Y, i] = '*';
  135.                     }
  136.                 }
  137.                 iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  138.                 for (int i = lewyDolny.Y - 1; i > lewyGorny.Y; i--)
  139.                 {
  140.                     if (iloscGwiazdekDlaKrawedzi != 0)
  141.                     {
  142.                         wiatrak[i, lewyDolny.X] = '.';
  143.                         iloscGwiazdekDlaKrawedzi--;
  144.                     }
  145.                     else
  146.                     {
  147.                         wiatrak[i, lewyDolny.X] = '*';
  148.                     }
  149.                 }
  150.             }
  151.         }
  152.  
  153.         class WiatrakPrawoskretny : Wiatrak
  154.         {
  155.             public WiatrakPrawoskretny(int rzad)
  156.             {
  157.                 this.rzad = rzad;
  158.                 rozmiar = 2 * rzad;
  159.             }
  160.  
  161.             override public void zbudujKrawedzie(Point lewyGorny, Point prawyGorny,
  162.                 Point lewyDolny, Point prawyDolny, int iloscGwiazdek)
  163.             {
  164.                 wstawGwiazdkiWRogi(lewyGorny, prawyGorny, lewyDolny, prawyDolny);
  165.  
  166.                 int iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  167.                 for (int i = lewyGorny.Y + 1; i < lewyDolny.Y; i++)
  168.                 {
  169.                     if (iloscGwiazdekDlaKrawedzi != 0)
  170.                     {
  171.                         wiatrak[i, lewyGorny.X] = '.';
  172.                         iloscGwiazdekDlaKrawedzi--;
  173.                     }
  174.                     else
  175.                     {
  176.                         wiatrak[i, lewyGorny.X] = '*';
  177.                     }
  178.                 }
  179.  
  180.                 iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  181.                 for (int i = lewyDolny.X + 1; i < prawyDolny.X; i++)
  182.                 {
  183.                     if (iloscGwiazdekDlaKrawedzi != 0)
  184.                     {
  185.                         wiatrak[lewyDolny.Y, i] = '.';
  186.                         iloscGwiazdekDlaKrawedzi--;
  187.                     }
  188.                     else
  189.                     {
  190.                         wiatrak[lewyDolny.Y, i] = '*';
  191.                     }
  192.                 }
  193.  
  194.  
  195.                 iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  196.                 for (int i = prawyDolny.Y - 1; i > prawyGorny.Y; i--)
  197.                 {
  198.                     if (iloscGwiazdekDlaKrawedzi != 0)
  199.                     {
  200.                         wiatrak[i, prawyDolny.X] = '.';
  201.                         iloscGwiazdekDlaKrawedzi--;
  202.                     }
  203.                     else
  204.                     {
  205.                         wiatrak[i, prawyDolny.X] = '*';
  206.                     }
  207.                 }
  208.  
  209.                 iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
  210.                 for (int i = prawyGorny.X - 1; i > lewyGorny.X; i--)
  211.                 {
  212.                     if (iloscGwiazdekDlaKrawedzi != 0)
  213.                     {
  214.                         wiatrak[prawyGorny.Y, i] = '.';
  215.                         iloscGwiazdekDlaKrawedzi--;
  216.                     }
  217.                     else
  218.                     {
  219.                         wiatrak[prawyGorny.Y, i] = '*';
  220.                     }
  221.                 }
  222.             }
  223.         }
  224.  
  225.         class Helper
  226.         {
  227.             static public void rzadWalidacja(int rzad)
  228.             {
  229.                 if(rzad < -200 || rzad > 200)
  230.                 {
  231.                     throw new System.ArgumentOutOfRangeException();
  232.                 }
  233.             }
  234.         }
  235.            
  236.         static void Main(string[] args)
  237.         {
  238.             while (true)
  239.             {
  240.                 int rzad = Convert.ToInt32(Console.ReadLine());
  241.                 try
  242.                 {
  243.                     Helper.rzadWalidacja(rzad);
  244.                 }
  245.                 catch (ArgumentOutOfRangeException err)
  246.                 {
  247.                     Console.WriteLine("Wartość poza zakresem");
  248.                     return;
  249.                 }
  250.                 if (rzad > 0)
  251.                 {
  252.                     Wiatrak wiatrak = new WiatrakLewoskretny(rzad);
  253.                     wiatrak.stworz();
  254.                     wiatrak.wyswietl();
  255.                     Console.WriteLine();
  256.                 }
  257.                 if (rzad < 0)
  258.                 {
  259.                     Wiatrak wiatrak = new WiatrakPrawoskretny(Math.Abs(rzad));
  260.                     wiatrak.stworz();
  261.                     wiatrak.wyswietl();
  262.                     Console.WriteLine();
  263.                 }
  264.                 if (rzad == 0)
  265.                 {
  266.                     break;
  267.                 }
  268.             }
  269.         }
  270.     }
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement