code here:
http://arsdnet.net/dcode/minesweeper.d
Here's a bit of fun. I saw this article on reddit:
http://rkoutnik.com/articles/How-I-Interview.html
Short summary: when interviewing people for a code position, this
author gives the candidate one hour to write as much as
minesweeper as they can. He says nobody has ever finished it in
an hour and nobody is expected to, but he just wants to see how
far they get.
Nobody has finished it in an hour? CHALLENGE ACCEPTED.
I decided to give it a go over the last hour and hacked this
together:
http://arsdnet.net/dcode/minesweeper.d
It depends on my simpledisplay.d and color.d from here:
https://github.com/adamdruppe/arsd
Download just those two files, simpledisplay.d and color.d, to
your current directory with minesweeper.d and compile:
dmd minesweeper.d simpledisplay.d color.d
And play the game! At least on Windows and Linux. On Mac, you
need to install XQuartz since I don't have a working Cocoa
implementation in simpledisplay.d right now. Fear not, it is on
my todo list for 2016, so it will be there eventually.
My game isn't exactly fancy.... but it is playable. here's a
screenshot: http://arsdnet.net/minesweeper.png
I prolly could have used a downloaded icon set and made it look
prettier, but I didn't want to look for one nor deal with
copyright so I just drew text and rectangles.
Now, the interviewer used javascript, but I wanted another
example for simpledisplay.d, so I used that instead. In JS, given
the time constraint, I think I would have done it as an array of
<img> tags with an onclick handler on the parent node which
changes the src to a particular icon, or a class name for a css
sprite. whatever. But the JS algorithm would be basically the
same and I suspect I could do it in a similar amount of time
since it is a simple program anyway. I just like D better.
I had to look up the flood fill which took seconds (I played real
minesweeper and recognized it was the same algorithm MS Paint
uses. I started to hack it myself but realized that I didn't
really know it that well and figuring it out myself from
principles, while doable, would likely eat my remaining time
right there, so I Binged "paint fill algorithm".
Wikipedia popped right up with a description was good enough to
run with: https://en.wikipedia.org/wiki/Flood_fill
I implemented the simple recursive version as a template with a
few parameters to fit my needs here, while also being usable in
my other side project, which has a MS Paint like graphics editor
and needs this feature anyway!
Anyway, he rest was pretty straightforward. The complete game has
a timer, a scoreboard, a UI for selecting size, etc. I have
functions that could do that, but didn't have time to actually
put on more UI than the basic game with mouse clicks....
...so indeed, I didn't finish it either. Challenge failed :(
But since it is playable i'm calling this a pretty decent success
anyway! And now I have one more example to show off with
simpledisplay.d, which I will might add to the documentation
http://arsdnet.net/arsd/simpledisplay.html
along with the existing Pong game.
I didn't use any really special D features there, so not really a
language showcase - like I said before, if I was doing it in
Javascript, I probably would have done it largely the same - but
hey, it is D, so I will post it here :)