source code of /projects/anonymine/index.html.src.sh
Last modified | |
Lines | 424 |
Parent directory Download CGIread sitemap Main page
Quick links: about content dl-unix dl-windows download news platforms release-notes screenshots title top
#!/bin/bash
version=$1
date=$2
windows_version=$3
windows_date=$4
cat << __EOF__
__HTML5__
<title>Anonymine - guess free minesweeper</title>
<meta name="description" content="Anonymine is a text based
minesweeper that can be won without any guessing, and has a few other
features, including hexagonal and von Neumann fields."/>
<style>
#screenshots p
{
margin-bottom: 2em;
}
#platforms dt
{
font-size: 105%;
}
#platforms dd
{
font-size: 95%;
margin-bottom: 0.167em;
}
.dl-
{
padding-left: .5em;
}
.download
{
vertical-align: middle;
font-size: 110%;
}
.download::before
{
vertical-align: middle;
font-size: 250%;
content: '⭳';
padding-right: .25em;
}
</style>
</head>
<body>
__NAVIGATION__
<main><div id="content">
<h1 id="title">Anonymine - guess free minesweeper</h1>
<p class="notprint" style="max-width: 100%;">
<!-- If I make these images link back, it will cause
accessiblity issues on mobile devices. -->
<img src="imgs4/banner1.png" alt="" width="420" height="280"/>
<img src="imgs4/banner2.png" alt="" width="420" height="280"/>
</p>
<div id="top">
<p>Latest version: ${version} released on ${date}
- <a href="#news">what's new</a></p>
<ul>
<li><a href="#about">About</a></li>
<li>
<a href="#download">Download</a>
<small>
<span class="dl-">(<a href="#dl-unix">Linux & Unix,</a></span>
<a href="#dl-unix" class="dl-">macOS,</a>
<a href="#dl-windows" class="dl-">Windows,</a>
<a href="#dl-unix" class="dl-">Haiku OS</a>)
</small>
</li>
<li><a href="#screenshots">Screenshots</a></li>
<li><a href="#platforms">Platforms</a></li>
<li><a href="#news">What's new?</a></li>
</ul>
<p>
You can try it on my demo server using SSH.
Log in as play@anonymine-demo.oskog97.com,
password is "play".<br/>
<a href="http://anonymine-demo.oskog97.com/" class="printurl"
>Leaderboard for public demo server</a>
</p>
</div>
<section><div class="section" id="about">
<h2>About</h2>
<p class="notprint"><small><a href="#top">To top of the page</a></small></p>
<p>
Anonymine is the "anonymous minesweeper" as I never had any
name for it, but I think "Anonymine" works just fine.
Back in December 2015 I was curious about creating an algorithm
for solving minesweeper, and then I needed an excuse for it
so I turned it into a terminal game that can be solved wihout any
guessing.
</p>
<p>
Do note that it runs in the terminal, so it may not be your cup of
tea. Mouse input is usually supported, but only really useful in
hexagonal mode.
</p>
<p>
Being solvable without guessing is not its only feature,
it has many other unusual or even unique features:
the games are fully customizable and Anonymine seems to be the
only minesweeper with <span class="a"><a
href="https://en.wikipedia.org/wiki/Von_Neumann_neighborhood"
>von Neumann grids</a>.</span>
<!-- No printurl, it's just Wikipedia. -->
</p>
<p>
For each game you can set the field type (normal / hexagonal
/ von Neumann), width, height and number of mines, only
restricted to certain minimums and security limits (to avoid
igniting your computer).
</p>
<div class="atom">
<h3>The supported field types/game types are:</h3>
<div class="atom">
<!-- FIXME: This should be a dl with dt and dd. -->
<h4>Von Neumann grids</h4>
<p>
I have never seen another
minesweeper that can have fields with von Neumann
grids. In a von Neumann neighbourhood (grid),
each cell/square has only four neighbours, at the edges
but not at the corners.
</p>
<p>
The biggest number you'll ever see is 3. But that doesn't
mean it's easy, it's quite the opposite.
</p>
</div>
<div class="atom">
<h4>Traditional fields with Moore grids</h4>
<p>Like any other minsweeper.</p>
</div>
<div class="atom">
<h4>Hexagonal fields</h4>
<p>
Every cell is a hexagon and has six
neighbours, (with obvious exceptions).
This mode has separate key bindings because there is no
single "up" and single "down" direction.
</p>
</div>
</div>
<div class="atom">
<h3>More features:</h3>
<ul>
<li>
It looks almost fine on monochrome terminals.
</li>
<li>
Even the losers can get on their very own highscores table.
</li>
<li>
There are cheat codes. They're not useful, but will be a
challenge to crack.
</li>
</ul>
</div>
</div></section>
<section><div class="section" id="download">
<h2>Download</h2>
<p class="notprint"><small><a href="#top">To top of the page</a></small></p>
<p><strong>NOTE</strong>: Not for smartphones and tablets.</p>
<p class="notprint bold">
<a href="#dl-unix">Linux, macOS, unix-likes, Haiku</a>,
<a href="#dl-windows">Windows</a>,
</p>
<p><a href="__SITE__/archive/anonymine/?C=M&O=A"
class="printurl">Archive of all released versions</a></p>
<p>
If you find any bugs, please <span class="a"><a
class="printurl"
href="https://gitlab.com/oskog97/anonymine/issues"
>create an issue</a>.</span>
</p>
<div class="atom">
<h3 id="dl-unix">GNU/Linux, macOS, *BSD, Cygwin, other unix-like
operating systems, and Haiku</h3>
<ul>
<li><a href="__SITE__/archive/anonymine/anonymine-${version}.tar.xz"
class="printurl download">xz compressed tarball of version ${version} from ${date}</a></li>
<li><a class="printurl"
href="https://gitlab.com/oskog97/anonymine/">GitLab</a></li>
<li><a href="#release-notes">Release notes</a></li>
</ul>
</div>
<div class="atom">
<h3 id="dl-windows">Windows</h3>
<p>There are a few options:</p>
<ol>
<li><strong>Recommended:</strong> WSL (both 1 and 2 work just fine)</li>
<li>Automatic Cygwin and Anonymine installer</li>
<li>Install Python and windows-curses</li>
</ol>
<p><a href="https://gitlab.com/oskog97/anonymine/-/wikis/Windows"
>Comparison of options</a></p>
<h4>Automatic Cygwin installer</h4>
Downloads:
<ul>
<li><a href="__SITE__/archive/anonymine/windows/Anonymine-Windows-${windows_version}.zip"
class="printurl download">Windows installer from ${windows_date}
(version $(echo "$windows_version" | cut -d- -f1-3)
with Cygwin setup $(echo "$windows_version" | cut -d- -f5))
</a></li>
<li><a href="https://gitlab.com/oskog97/anonymine-windows"
class="printurl">Fetch newest version from GitLab
</a></li>
</ul>
<h4>Install Python and windows-curses</h4>
It is possible to run the unix version with some limitations.
<ul>
<li><a class="printurl"
href="https://gitlab.com/oskog97/anonymine/blob/master/doc/INSTALL.Windows.txt">
Instructions</a>
</li>
<li>You can download as a zip from <span class="a"><a
href="https://gitlab.com/oskog97/anonymine/-/archive/master/anonymine-master.zip"
class="printurl">Gitlab</a>.</span></li>
</ul>
</div>
</div></section>
<section><div class="section" id="screenshots">
<h2>Screenshots</h2>
<p class="notprint"><small><a href="#top">To top of the page</a></small></p>
<p>
<img width="484" height="316" alt="" src="imgs4/last-cells.png"/>
<br/><span class="caption">
The von Neumann field: The biggest number you'll ever see
is 3. This mode makes Anonymine a unique minesweeper.
(Attention mode has been enabled to find the last few
cells.)
</span>
</p>
<p>
<img width="484" height="316" alt="" src="imgs4/traditional.png"/>
<br/><span class="caption">
Traditional (Moore) field, nothing special
</span>
</p>
<p>
<img width="484" height="316" alt="" src="imgs4/hexagonal.png"/>
<br/><span class="caption">
Hexagonal field
</span>
</p>
<p>
<img width="484" height="316" alt="" src="imgs4/losers.png"/>
<br/><span class="caption">
The losers' highscores
</span>
</p>
</div></section>
<section><div class="section" id="platforms">
<h2>Platforms</h2>
<p class="notprint"><small><a href="#top">To top of the page</a></small></p>
<p>
Check the <a class="printurl"
href="https://gitlab.com/oskog97/anonymine/-/blob/master/README.md#blob-content-holder"
>readme</a> and <a class="printurl"
href="https://gitlab.com/oskog97/anonymine/blob/master/doc/INSTALL.txt"
>installation instructions</a> for more details.
</p>
<div class="atom">
<h3>Tested on</h3>
<p>
Here's a list of various platforms Anonymine has been tested
on. It works on all of them unless I say otherwise, but there
may be some minor issues.
</p>
<ul>
<li>Various GNU/Linux distributions</li>
<li>FreeBSD, OpenBSD, NetBSD, DragonflyBSD</li>
<li>Haiku</li>
<li>SerenityOS</li>
<li>macOS</li>
<li>OpenIndiana and Solaris</li>
<li>Debian GNU/Hurd</li>
<li>Cygwin (on Windows and ReactOS)</li>
<li>Windows and ReactOS (without Cygwin)</li>
</ul>
Python interpreters:
<ul>
<li>CPython</li>
<li>PyPy (lacks <code>curses</code> on Windows)</li>
</ul>
</div>
<div class="atom">
<h4>"Some coercion required"</h4>
<p>
Using <span class="a"><a href="http://gitlab.com/oskog97/poop"
class="printurl">Pööp</a>,</span> Anonymine can be made to work
on even more platforms.
<span class="bold">"Do not try this at home"</span>
</p>
<dl>
<dt>GraalVM Python</dt>
<dd>Needs only <code>curses</code></dd>
<dt>PyPy on Windows</dt>
<dd>Needs only <code>curses</code>,
but the Windows console is really slow</dd>
<dt>Jython</dt>
<dd>Needs <code>curses</code> and <code>multiprocessing</code></dd>
<dt>IronPython</dt>
<dd>Needs very different configuration files and
<code>curses</code> and <code>multiprocessing</code></dd>
<dt>Minix 3.4</dt>
<dd>Needs <code>multiprocessing</code> and <code>threading</code></dd>
</dl>
</div>
</div></section>
__EOF__
echo;echo;echo
write_news ()
{
news=~oskar/projects/anonymine/doc/NEWS
changelog=~oskar/projects/anonymine/ChangeLog
release_notes=~oskar/projects/anonymine/doc/RELEASE-NOTES
_get_snippet ()
{
_internal ()
{
file=$1
regex=$2
tailcut=$3
count=$4
lim=$5
n=1
while [ "$(head -n$n $file | grep -E "$regex" | wc -l)" -le $count ]; do
n=$(($n + 1))
done
n=$(($n - $tailcut))
if [ "$n" -lt $(($lim + 1)) ]; then
head -n$n $file
else
head -n$lim $file
echo '...'
fi
}
_internal "$1" "$2" "$3" "$4" "$5" \
| sed -e 's/[&]/\&/g' \
| sed -e 's/[<]/\</g' \
| sed -e 's/[>]/\>/g'
}
get_news ()
{
_get_snippet $news '====' 3 1 30
}
get_changelog ()
{
_get_snippet $changelog '^ [0-9]+\.[0-9]+\.[0-9]+$' 3 1 7
}
get_release_notes ()
{
_get_snippet $release_notes '^[0-9]+\.[0-9]+\.[0-9]+' 2 4 30
# 2 3 15 -> 2 4 25 -> 2 4 30
}
cat <<__EOF__
<section><div class="section" id="news">
<h2>What's new?</h2>
<p class="notprint"><small><a href="#top">To top of the page</a></small></p>
<dl>
<dt id="release-notes">Release notes</dt>
<dd>
<pre>$(get_release_notes)</pre>
<p><a class="printurl"
href="https://gitlab.com/oskog97/anonymine/blob/master/doc/RELEASE-NOTES"
>See the rest of the file on Gitlab</a></p>
</dd>
<dt>Bigger changes</dt>
<dd>
<pre>$(get_news)</pre>
<p><a class="printurl"
href="https://gitlab.com/oskog97/anonymine/blob/master/doc/NEWS"
>See the rest of NEWS on Gitlab</a></p>
</dd>
<dt>Low level changes</dt>
<dd>
<p><a class="printurl"
href="https://gitlab.com/oskog97/anonymine/blob/master/ChangeLog"
>See ChangeLog on Gitlab</a></p>
</dd>
</dl>
</div></section>
__EOF__
}
write_news
echo;echo;echo
cat <<__EOF__
</div></main>
__FOOTER__
</body>
</html>
__EOF__