Skip to content

Instantly share code, notes, and snippets.

@zacbraddy
Last active September 21, 2018 22:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zacbraddy/7f976f560853932758a1593db7578d65 to your computer and use it in GitHub Desktop.
Save zacbraddy/7f976f560853932758a1593db7578d65 to your computer and use it in GitHub Desktop.
Dart Cowsay Builder
void main() {
var cowSay = new CowSayBuilder();
cowSay.writeln("Hello world");
cowSay.writeln("I made a dart thing");
cowSay.writeln("Woooo 100 days of code!!!");
print(cowSay.toCowSay());
}
class CowSayBuilder {
List<String> cowSays = new List<String>();
int leftPadding = 2;
int rightPadding = 2;
String horizontalLineChar = '-';
String verticalLineChar = '|';
String topLeftCornerChar = '/';
String topRightCornerChar = '\\';
String bottomRightCornerChar = '/';
String bottomLeftCornerChar = '\\';
StringBuffer cowSayBuffer;
writeln(newCowSay) {
cowSays.add(newCowSay);
}
toCowSay() {
cowSayBuffer = new StringBuffer();
var width = calculateWidth();
drawHorizontalLine(width);
for(var i = 0; i < cowSays.length; i++) {
var cs = cowSays[i];
var formattedSay = new StringBuffer();
formattedSay.write((i == 0)?topLeftCornerChar:verticalLineChar);
var paddedSay = cs.padLeft(cs.length + leftPadding);
paddedSay = paddedSay.padRight(width.round());
formattedSay.write(paddedSay);
formattedSay.write((i == 0)?topRightCornerChar:verticalLineChar);
cowSayBuffer.writeln(formattedSay);
}
drawBottomOfSpeechBubble(width);
drawCow();
return cowSayBuffer.toString();
}
int calculateWidth() {
var longestLine = 0;
cowSays.forEach((cs) {
var bufferedLength = ((cs.length + leftPadding + rightPadding) * 1.2).round();
if (longestLine < bufferedLength) {
longestLine = bufferedLength;
}
});
return longestLine;
}
void drawHorizontalLine(int width) {
for (var i = 0; i < (leftPadding / 2).round(); i++) cowSayBuffer.write(' ');
for (var i = 0; i < width; i++) cowSayBuffer.write('-');
cowSayBuffer.writeln('');
}
void drawBottomOfSpeechBubble(int width) {
cowSayBuffer.write(bottomLeftCornerChar);
for (var i = 0; i < width; i++) cowSayBuffer.write(' ');
cowSayBuffer.write(bottomRightCornerChar);
cowSayBuffer.writeln();
drawHorizontalLine(width);
}
void drawCow() {
var padding = '';
padding = padding.padLeft(leftPadding);
cowSayBuffer.writeln('$padding\\ ^__^');
cowSayBuffer.writeln('$padding \\ (oo)\\_______');
cowSayBuffer.writeln('$padding (__)\\ )\\/\\');
cowSayBuffer.writeln('$padding ||----w |');
cowSayBuffer.writeln('$padding || ||');
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment