Minesweeper game
This is a simplistic minesweeper game. the original was written
by Charles Forsyth and I simply modified it to use
P9r3's control(2) library.
Download the game here
How to play:
there is no way currently to use mouse buttons 2 and 3 in control(2)
(or at least i have not found a way to do it) the mode of operation
as it is is to select the ones that you think do _not_ contain
mines. when mines are the only ones left uncovered on the field they
are 'revealed' to you.
to restart the game simply resize the window.
Drawbacks:
several off by one errors exist. don't pay attention to them :)
panels, timers, statistics scores and other gui niceties do not exist
the field is not dynamically allocated -- the maximum is 30x30
you need to recompile if you want a harder level (see the #define at
the top of the source code)
do _not_ make install (or edit the images library paths in loadimages()
before you do -- they are currently hardcoded to be in bitmaps/ in
the current directory and the 'game' will not work if they're not
found there)
TODO:
*shrug* this is not great code. it was hacked in a night and should
probably be rewritten if it's going to be put to any serious work.
it's only good for wasting time :)
may be (just may be) put isactive() in the control(2) library. i found
it reasonable to use in several places.
make a distinction between different mouse button clicks in control(2).
if plan9 requires one to have a 3 button mouse i don't see why we should
only be limited to button 1 in there :) (once again -- it could be me
who cannot use the gui controls properly :)
better images? the colorifying of minesweeper is in Forsyth's todo list
too, but here it would be easier since the code uses image(6) to load
pictures. it'd be a simple matter of changing the files in bitmaps/ and
Cellsize in mines.c
guessing and unguessing mines is not supported (see above -- single
mouse button problem)
something else that i surely forgot...
Implementation:
each square on the grid is a button named X-Y where X and Y are
the grid locations (starting from top-left).
each button sends an event on the same channel, which is then
handled in the main loop. rather naively.
for each button there is a 'light' image, which is displayed when
the button is depressed. the light images are assigned based on
how many 'mines' are neighbouring the current cell.
the field is entirely predetermined before the game starts so
there is no monkeying around -- if you win you win... nothing...
Last Modified: May 26 2002
andrey@lanl.gov