public abstract class PatternPrinter {
private int patternLength;
public PatternPrinter(int patternLength) {
this.patternLength = patternLength;
Random rnd = new Random();
int specialIndex = rnd.Next(patternLength);
for (int i=0;i<patternLength;i++) {
if (roll == 0) PrintNormal();
public abstract void PrintNormal();
public abstract void PrintVariant();
public abstract void PrintSpecial();
public class RiverPattern: PatternPrinter{
public RiverPattern(int patternLength) :base(patternLength){
public override void PrintNormal(){
Console.Write("***O O***" +"\n" +"***O O***"+"\n" + "***O O***"+"\n" + "***O O***"+"\n");
public override void PrintVariant(){
Console.Write("**O O****" +"\n" + "*O O*****" +"\n" + "**O O***" +"\n" + "***O O***"+"\n");
public override void PrintSpecial(){
Console.Write("**O O***" +"\n" + "*O O**" +"\n" + "*O OO O*"+"\n" + "*O O O*"+"\n" + "**O O**"+"\n");
public static void Main()
RiverPattern river = new RiverPattern(10);