public abstract class PatternPrinter {
private int patternLength;
public PatternPrinter(int patternLength) {
this.patternLength = patternLength;
Random rnd = new Random();
int specialIndex = rnd.Next(1, patternLength);
for (int i=0; i<patternLength; i++) {
if (i % specialIndex == 0)
if (roll == 0) PrintNormal();
public void PrintRoof() {
Console.WriteLine(" ++ ");
Console.WriteLine(" ++++ ");
Console.WriteLine(" +++ +++ ");
Console.WriteLine("++++++++++");
public void PrintBase() {
Console.WriteLine("==========");
Console.WriteLine("++++ ++++");
Console.WriteLine("==== ====");
public abstract void PrintNormal();
public abstract void PrintWindow();
public abstract void PrintBalcony();
public class TowerPattern : PatternPrinter
public TowerPattern(int i) : base(i)
public override void PrintNormal()
Console.WriteLine("+********+");
Console.WriteLine("+********+");
Console.WriteLine("+********+");
Console.WriteLine("+********+");
public override void PrintWindow()
Console.WriteLine("+********+");
Console.WriteLine("+* ** *+");
Console.WriteLine("+* ** *+");
Console.WriteLine("+********+");
public override void PrintBalcony()
Console.WriteLine("+********+");
Console.WriteLine("+********+");
Console.WriteLine("+ +");
Console.WriteLine("++++++++++");
Console.WriteLine("+********+");
public static void Main()
TowerPattern tower = new TowerPattern(10);