Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Drawing;
- namespace FANGEN
- {
- class Program
- {
- abstract class Wiatrak
- {
- protected char[,] wiatrak;
- protected int rzad;
- protected int rozmiar; // = dlugość = wysokość
- public Wiatrak()
- {
- }
- public Wiatrak(int rzad)
- {
- this.rzad = rzad;
- rozmiar = 2 * rzad;
- }
- public void stworz()
- {
- wiatrak = new char[rozmiar, rozmiar];
- zbudujSrodek();
- zbudujSkrzydla();
- }
- private void zbudujSrodek()
- {
- // Uzupełniamy cztery środkowe pola wiatraka '*'
- wiatrak[rzad - 1, rzad - 1] = '*';
- wiatrak[rzad, rzad - 1] = '*';
- wiatrak[rzad - 1, rzad] = '*';
- wiatrak[rzad, rzad] = '*';
- }
- private void zbudujSkrzydla()
- {
- //Skrzydla budujemy od srodka, najpierw budujemy krawedzie okalające środek
- //później krawedzie ktore okalają środek i krawedzie środka itd.
- for (int i = 1; i < rzad; i++)
- {
- Point lewyGorny = new Point(rzad - 1 - i, rzad - 1 - i);
- Point prawyGorny = new Point(rzad + i, rzad - 1 - i);
- Point lewyDolny = new Point(rzad -1 - i, rzad + i);
- Point prawyDolny = new Point(rzad + i, rzad + i);
- int iloscGwiazdek = i;
- zbudujKrawedzie(lewyGorny, prawyGorny, lewyDolny, prawyDolny,iloscGwiazdek);
- }
- }
- abstract public void zbudujKrawedzie(Point lewyGorny, Point prawyGorny,
- Point lewyDolny, Point prawyDolny, int iloscGwiazdek);
- protected void wstawGwiazdkiWRogi(Point lewyGorny, Point prawyGorny,
- Point lewyDolny, Point prawyDolny)
- {
- wiatrak[lewyGorny.X, lewyGorny.Y] = '*';
- wiatrak[prawyGorny.X, prawyGorny.Y] = '*';
- wiatrak[lewyDolny.X, lewyDolny.Y] = '*';
- wiatrak[prawyDolny.X, prawyDolny.Y] = '*';
- }
- public void wyswietl()
- {
- for (int i = 0; i < rozmiar; i++)
- {
- for (int j = 0; j < rozmiar; j++)
- {
- Console.Write(wiatrak[i, j]);
- }
- Console.WriteLine();
- }
- }
- }
- class WiatrakLewoskretny : Wiatrak
- {
- public WiatrakLewoskretny(int rzad)
- {
- this.rzad = rzad;
- rozmiar = 2 * rzad;
- }
- override public void zbudujKrawedzie(Point lewyGorny, Point prawyGorny,
- Point lewyDolny, Point prawyDolny, int iloscGwiazdek)
- {
- wstawGwiazdkiWRogi(lewyGorny, prawyGorny, lewyDolny, prawyDolny);
- int iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = lewyGorny.X + 1; i < prawyGorny.X; i++)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[lewyGorny.Y, i] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[lewyGorny.Y, i] = '*';
- }
- }
- iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = prawyGorny.Y + 1; i < prawyDolny.Y; i++)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[i, prawyGorny.X] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[i, prawyGorny.X] = '*';
- }
- }
- iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = prawyDolny.X - 1; i > lewyDolny.X; i--)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[prawyDolny.Y, i] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[prawyDolny.Y, i] = '*';
- }
- }
- iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = lewyDolny.Y - 1; i > lewyGorny.Y; i--)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[i, lewyDolny.X] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[i, lewyDolny.X] = '*';
- }
- }
- }
- }
- class WiatrakPrawoskretny : Wiatrak
- {
- public WiatrakPrawoskretny(int rzad)
- {
- this.rzad = rzad;
- rozmiar = 2 * rzad;
- }
- override public void zbudujKrawedzie(Point lewyGorny, Point prawyGorny,
- Point lewyDolny, Point prawyDolny, int iloscGwiazdek)
- {
- wstawGwiazdkiWRogi(lewyGorny, prawyGorny, lewyDolny, prawyDolny);
- int iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = lewyGorny.Y + 1; i < lewyDolny.Y; i++)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[i, lewyGorny.X] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[i, lewyGorny.X] = '*';
- }
- }
- iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = lewyDolny.X + 1; i < prawyDolny.X; i++)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[lewyDolny.Y, i] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[lewyDolny.Y, i] = '*';
- }
- }
- iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = prawyDolny.Y - 1; i > prawyGorny.Y; i--)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[i, prawyDolny.X] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[i, prawyDolny.X] = '*';
- }
- }
- iloscGwiazdekDlaKrawedzi = iloscGwiazdek;
- for (int i = prawyGorny.X - 1; i > lewyGorny.X; i--)
- {
- if (iloscGwiazdekDlaKrawedzi != 0)
- {
- wiatrak[prawyGorny.Y, i] = '.';
- iloscGwiazdekDlaKrawedzi--;
- }
- else
- {
- wiatrak[prawyGorny.Y, i] = '*';
- }
- }
- }
- }
- class Helper
- {
- static public void rzadWalidacja(int rzad)
- {
- if(rzad < -200 || rzad > 200)
- {
- throw new System.ArgumentOutOfRangeException();
- }
- }
- }
- static void Main(string[] args)
- {
- while (true)
- {
- int rzad = Convert.ToInt32(Console.ReadLine());
- try
- {
- Helper.rzadWalidacja(rzad);
- }
- catch (ArgumentOutOfRangeException err)
- {
- Console.WriteLine("Wartość poza zakresem");
- return;
- }
- if (rzad > 0)
- {
- Wiatrak wiatrak = new WiatrakLewoskretny(rzad);
- wiatrak.stworz();
- wiatrak.wyswietl();
- Console.WriteLine();
- }
- if (rzad < 0)
- {
- Wiatrak wiatrak = new WiatrakPrawoskretny(Math.Abs(rzad));
- wiatrak.stworz();
- wiatrak.wyswietl();
- Console.WriteLine();
- }
- if (rzad == 0)
- {
- break;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement