document.write('<link rel="stylesheet" href="http://gist.github.com/stylesheets/gist/embed.css"/>')





document.write('<div id=\"gist-232942\" class=\"gist\">\n  \n  \n    \n            \n\n      <div class=\"gist-file\">\n        <div class=\"gist-data gist-syntax\">\n          \n          \n          \n            <div class=\"gist-highlight\"><pre><div class=\"line\" id=\"LC1\"><span class=\"k\">include<\/span> <span class=\"n\">stdlib<\/span> <span class=\"n\">//<\/span> <span class=\"n\">Need<\/span> <span class=\"n\">for<\/span> <span class=\"n\">rand<\/span><span class=\"err\">()<\/span> <span class=\"n\">and<\/span> <span class=\"n\">srand<\/span><span class=\"err\">()<\/span><\/div><div class=\"line\" id=\"LC2\"><span class=\"k\">include<\/span> <span class=\"n\">time<\/span>   <span class=\"n\">//<\/span> <span class=\"n\">Need<\/span> <span class=\"n\">for<\/span> <span class=\"n\">time<\/span><span class=\"err\">()<\/span><\/div><div class=\"line\" id=\"LC3\"><span class=\"nv\">c_rand<\/span><span class=\"p\">:<\/span> <span class=\"k\">extern<\/span><span class=\"p\">(<\/span><span class=\"nv\">rand<\/span><span class=\"p\">)<\/span> <span class=\"k\">func<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">Int<\/span><\/div><div class=\"line\" id=\"LC4\"><span class=\"nv\">c_srand<\/span><span class=\"p\">:<\/span> <span class=\"k\">extern<\/span><span class=\"p\">(<\/span><span class=\"nv\">srand<\/span><span class=\"p\">)<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"nv\">seed<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Int<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">Int<\/span><\/div><div class=\"line\" id=\"LC5\"><span class=\"nv\">c_time<\/span><span class=\"p\">:<\/span> <span class=\"k\">extern<\/span><span class=\"p\">(<\/span><span class=\"nv\">time<\/span><span class=\"p\">)<\/span> <span class=\"k\">func<\/span><span class=\"p\">(<\/span><span class=\"nv\">when<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Int<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">Int<\/span><\/div><div class=\"line\" id=\"LC6\">&nbsp;<\/div><div class=\"line\" id=\"LC7\"><span class=\"k\">import<\/span> <span class=\"nv\">structs<\/span><span class=\"o\">/<\/span><span class=\"nc\">ArrayList<\/span><\/div><div class=\"line\" id=\"LC8\">&nbsp;<\/div><div class=\"line\" id=\"LC9\"><span class=\"c\">//operator as (b: Boo) -&gt; Int<\/span><\/div><div class=\"line\" id=\"LC10\">&nbsp;<\/div><div class=\"line\" id=\"LC11\"><span class=\"nc\">Boat<\/span><span class=\"p\">:<\/span> <span class=\"k\">abstract<\/span> <span class=\"k\">class<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC12\">&nbsp;&nbsp;<span class=\"nv\">name<\/span><span class=\"p\">:<\/span> <span class=\"nc\">String<\/span><\/div><div class=\"line\" id=\"LC13\">&nbsp;&nbsp;<span class=\"nv\">status<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Int<\/span> <span class=\"c\">// I&#39;d like this to be an enum, but oh well<\/span><\/div><div class=\"line\" id=\"LC14\">&nbsp;<\/div><div class=\"line\" id=\"LC15\">&nbsp;&nbsp;<span class=\"c\">// a horn sound.  Needs to be implemented by children<\/span><\/div><div class=\"line\" id=\"LC16\">&nbsp;&nbsp;<span class=\"nv\">horn<\/span><span class=\"p\">:<\/span> <span class=\"k\">abstract<\/span> <span class=\"k\">func<\/span><\/div><div class=\"line\" id=\"LC17\">&nbsp;&nbsp;<span class=\"nv\">crash<\/span><span class=\"p\">:<\/span> <span class=\"k\">abstract<\/span> <span class=\"k\">func<\/span><\/div><div class=\"line\" id=\"LC18\"><span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC19\">&nbsp;<\/div><div class=\"line\" id=\"LC20\"><span class=\"c\">// a new class of boat<\/span><\/div><div class=\"line\" id=\"LC21\"><span class=\"nc\">Failboat<\/span><span class=\"p\">:<\/span> <span class=\"k\">class<\/span> <span class=\"k\">extends<\/span> <span class=\"nc\">Boat<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC22\">&nbsp;&nbsp;<span class=\"nv\">init<\/span><span class=\"p\">:<\/span> <span class=\"k\">func<\/span> <span class=\"p\">(<\/span><span class=\"o\">=<\/span><span class=\"nv\">name<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span> <span class=\"k\">this<\/span> <span class=\"nv\">status<\/span> <span class=\"o\">=<\/span> <span class=\"m-Decimal\">3<\/span> <span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC23\">&nbsp;&nbsp;<span class=\"nv\">init<\/span><span class=\"p\">:<\/span> <span class=\"k\">func<\/span> <span class=\"nf\">~withStatus<\/span> <span class=\"p\">(<\/span><span class=\"o\">=<\/span><span class=\"nv\">name<\/span><span class=\"p\">,<\/span> <span class=\"o\">=<\/span><span class=\"nv\">status<\/span><span class=\"p\">){}<\/span><\/div><div class=\"line\" id=\"LC24\">&nbsp;<\/div><div class=\"line\" id=\"LC25\">&nbsp;&nbsp;<span class=\"nv\">horn<\/span><span class=\"p\">:<\/span> <span class=\"k\">func<\/span> <\/div><div class=\"line\" id=\"LC26\">&nbsp;&nbsp;<span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC27\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;SS %s blares his horn: FAIL, %u!\\n&quot;<\/span><span class=\"p\">,<\/span> <span class=\"k\">this<\/span> <span class=\"nv\">name<\/span><span class=\"p\">,<\/span> <span class=\"k\">this<\/span> <span class=\"nv\">status<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC28\">&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC29\">&nbsp;<\/div><div class=\"line\" id=\"LC30\">&nbsp;&nbsp;<span class=\"nv\">crash<\/span><span class=\"p\">:<\/span> <span class=\"k\">func<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC31\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">status<\/span><span class=\"p\">)<\/span> <span class=\"k\">return<\/span><\/div><div class=\"line\" id=\"LC32\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"nv\">status<\/span> <span class=\"o\">-=<\/span> <span class=\"m-Decimal\">1<\/span><\/div><div class=\"line\" id=\"LC33\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"nv\">match<\/span> <span class=\"nv\">status<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC34\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span> <span class=\"m-Decimal\">0<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;%s sinks!\\n&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">name<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC35\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span> <span class=\"m-Decimal\">1<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;%s starts leaking!\\n&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">name<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC36\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;%s is unharmed!\\n&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">name<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC37\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC38\">&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC39\"><span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC40\">&nbsp;<\/div><div class=\"line\" id=\"LC41\"><span class=\"c\">// Crash the boats together.<\/span><\/div><div class=\"line\" id=\"LC42\"><span class=\"c\">// This will test their strength based on status<\/span><\/div><div class=\"line\" id=\"LC43\"><span class=\"c\">// Return value will be -1 if u wins, 0 for continuation,<\/span><\/div><div class=\"line\" id=\"LC44\"><span class=\"c\">//   1 if v wins, and 2 if both destroy eachother<\/span><\/div><div class=\"line\" id=\"LC45\"><span class=\"k\">operator<\/span> <span class=\"o\">+<\/span> <span class=\"p\">(<\/span><span class=\"nv\">u<\/span><span class=\"p\">,<\/span><span class=\"nv\">v<\/span><span class=\"p\">:<\/span> <span class=\"nc\">Boat<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span> <span class=\"nc\">Int<\/span><\/div><div class=\"line\" id=\"LC46\"><span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC47\">&nbsp;&nbsp;<span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;Kapow! %s and %s crash into eachother!\\n&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">u<\/span> <span class=\"nv\">name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">v<\/span> <span class=\"nv\">name<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC48\">&nbsp;&nbsp;<span class=\"p\">[<\/span><span class=\"nv\">u<\/span><span class=\"p\">,<\/span><span class=\"nv\">v<\/span><span class=\"p\">]<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Boat<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">each<\/span><span class=\"p\">(<\/span><span class=\"nc\">Boat<\/span> <span class=\"nv\">crash<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC49\">&nbsp;&nbsp;<span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;%s: %d, %s: %d\\n&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">u<\/span> <span class=\"nv\">name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">u<\/span> <span class=\"nv\">status<\/span><span class=\"p\">,<\/span> <span class=\"nv\">v<\/span> <span class=\"nv\">name<\/span><span class=\"p\">,<\/span> <span class=\"nv\">v<\/span> <span class=\"nv\">status<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC50\">&nbsp;&nbsp;<span class=\"k\">return<\/span> <span class=\"nv\">match<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC51\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span><span class=\"p\">(<\/span><span class=\"nv\">u<\/span> <span class=\"nv\">status<\/span> <span class=\"o\">+<\/span> <span class=\"nv\">v<\/span> <span class=\"nv\">status<\/span> <span class=\"o\">==<\/span> <span class=\"m-Decimal\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"m-Decimal\">2<\/span> <\/div><div class=\"line\" id=\"LC52\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span><span class=\"p\">(<\/span><span class=\"nv\">u<\/span> <span class=\"nv\">status<\/span> <span class=\"o\">==<\/span> <span class=\"m-Decimal\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"m-Decimal\">1<\/span><\/div><div class=\"line\" id=\"LC53\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span><span class=\"p\">(<\/span><span class=\"nv\">v<\/span> <span class=\"nv\">status<\/span> <span class=\"o\">==<\/span> <span class=\"m-Decimal\">0<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"o\">-<\/span><span class=\"m-Decimal\">1<\/span><\/div><div class=\"line\" id=\"LC54\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"m-Decimal\">0<\/span><\/div><div class=\"line\" id=\"LC55\">&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC56\"><span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC57\">&nbsp;<\/div><div class=\"line\" id=\"LC58\"><span class=\"nv\">main<\/span><span class=\"p\">:<\/span> <span class=\"k\">func<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC59\">&nbsp;&nbsp;<span class=\"c\">// Seed rand like we usually do in C<\/span><\/div><div class=\"line\" id=\"LC60\">&nbsp;&nbsp;<span class=\"nf\">c_srand<\/span><span class=\"p\">(<\/span><span class=\"nf\">c_time<\/span><span class=\"p\">(<\/span><span class=\"k\">null<\/span><span class=\"p\">))<\/span><\/div><div class=\"line\" id=\"LC61\">&nbsp;&nbsp;<span class=\"nv\">boat_a<\/span> <span class=\"o\">:=<\/span> <span class=\"nc\">Failboat<\/span> <span class=\"k\">new<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;Godzilla&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nf\">c_rand<\/span><span class=\"p\">()<\/span> <span class=\"o\">%<\/span> <span class=\"m-Decimal\">4<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC62\">&nbsp;&nbsp;<span class=\"nv\">boat_b<\/span> <span class=\"o\">:=<\/span> <span class=\"nc\">Failboat<\/span> <span class=\"k\">new<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;Megalon&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nf\">c_rand<\/span><span class=\"p\">()<\/span> <span class=\"o\">%<\/span> <span class=\"m-Decimal\">4<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC63\">&nbsp;<\/div><div class=\"line\" id=\"LC64\">&nbsp;&nbsp;<span class=\"c\">// DANGER AHEAD!  SOUND THE HORNS!<\/span><\/div><div class=\"line\" id=\"LC65\">&nbsp;&nbsp;<span class=\"p\">[<\/span><span class=\"nv\">boat_a<\/span><span class=\"p\">,<\/span> <span class=\"nv\">boat_b<\/span><span class=\"p\">]<\/span> <span class=\"k\">as<\/span> <span class=\"nc\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">Boat<\/span><span class=\"o\">&gt;<\/span> <span class=\"nf\">each<\/span><span class=\"p\">(<\/span><span class=\"nc\">Boat<\/span> <span class=\"nv\">horn<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC66\">&nbsp;<\/div><div class=\"line\" id=\"LC67\">&nbsp;&nbsp;<span class=\"c\">// Fight fight fight!<\/span><\/div><div class=\"line\" id=\"LC68\">&nbsp;&nbsp;<span class=\"nv\">status<\/span> <span class=\"o\">:=<\/span> <span class=\"m-Decimal\">0<\/span><\/div><div class=\"line\" id=\"LC69\">&nbsp;&nbsp;<span class=\"k\">while<\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nv\">status<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC70\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"nv\">status<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">boat_a<\/span> <span class=\"o\">+<\/span> <span class=\"nv\">boat_b<\/span><\/div><div class=\"line\" id=\"LC71\">&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC72\">&nbsp;<\/div><div class=\"line\" id=\"LC73\">&nbsp;&nbsp;<span class=\"c\">// Determine the victor<\/span><\/div><div class=\"line\" id=\"LC74\">&nbsp;&nbsp;<span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;The Battle is over.  &quot;<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC75\">&nbsp;&nbsp;<span class=\"nv\">match<\/span> <span class=\"nv\">status<\/span> <span class=\"p\">{<\/span><\/div><div class=\"line\" id=\"LC76\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span> <span class=\"m-Decimal\">2<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"s2\">&quot;Both Boats are destroyed!&quot;<\/span> <span class=\"nf\">println<\/span><span class=\"p\">()<\/span><\/div><div class=\"line\" id=\"LC77\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span> <span class=\"m-Decimal\">1<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;%s is the victor&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">boat_b<\/span> <span class=\"nv\">name<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC78\">&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"k\">case<\/span> <span class=\"o\">-<\/span><span class=\"m-Decimal\">1<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nf\">printf<\/span><span class=\"p\">(<\/span><span class=\"s2\">&quot;%s is the victor&quot;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">boat_a<\/span> <span class=\"nv\">name<\/span><span class=\"p\">)<\/span><\/div><div class=\"line\" id=\"LC79\">&nbsp;&nbsp;<span class=\"p\">}<\/span><\/div><div class=\"line\" id=\"LC80\"><span class=\"p\">}<\/span><\/div><\/pre><\/div>\n          \n        <\/div>\n\n        <div class=\"gist-meta\">\n          <a href=\"http://gist.github.com/raw/232942/d8bd5a7d06b8458691fca736981d0e9264d3086f/failboat.ooc\" style=\"float:right;\">view raw<\/a>\n          <a href=\"http://gist.github.com/232942#file_failboat.ooc\" style=\"float:right;margin-right:10px;color:#666\">failboat.ooc<\/a>\n          <a href=\"http://gist.github.com/232942\">This Gist<\/a> brought to you by <a href=\"http://github.com\">GitHub<\/a>.\n        <\/div>\n      <\/div>\n    \n  \n<\/div>\n')
