source code of /projects/anonymine/index.html

Last modified
Lines 458

Parent directory Download CGIread sitemap Main page

Quick links: about contact content dl-unix dl-windows download footer navigation news platforms release-notes screenshots title top

  1. <!DOCTYPE html>
  2. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  3.     <head>
  4.         <meta charset="utf-8"/>
  5.         <meta name="viewport" content="width=device-width, initial-scale=1"/>
  6.         <link rel="stylesheet" href="https://oskog97.com/style.css" type="text/css"/>
  7.         <link rel="icon" type="image/png" href="/favicon.png"/>
  8.         <link rel="canonical" href="https://oskog97.com/projects/anonymine/"/>
  9. <!-- End html5 macro. -->
  10.         <title>Anonymine - guess free minesweeper</title>
  11.         <meta name="description" content="Anonymine is a text based
  12. minesweeper that can be won without any guessing, and has a few other
  13. features, including hexagonal and von Neumann fields."/>
  14.         <style>
  15.             #screenshots p
  16.             {
  17.                 margin-bottom: 2em;
  18.             }
  19.             #platforms dt
  20.             {
  21.                 font-size: 105%;
  22.             }
  23.             #platforms dd
  24.             {
  25.                 font-size: 95%;
  26.                 margin-bottom: 0.167em;
  27.             }
  28.             .dl-
  29.             {
  30.                 padding-left: .5em;
  31.             }
  32.             .download
  33.             {
  34.                 vertical-align: middle;
  35.                 font-size: 110%;
  36.             }
  37.             .download::before
  38.             {
  39.                 vertical-align: middle;
  40.                 font-size: 250%;
  41.                 content: '⭳';
  42.                 padding-right: .25em;
  43.             }
  44.         </style>
  45.     </head>
  46.     <body>
  47.         
  48. <!-- BEGIN autogenerated navigation -->
  49. <nav><div id="navigation"><div id="nav_inner">
  50. <p><a href="#content" class="textonly">Skip navigation</a></p>
  51. <p class="row">
  52. <span class="textonly" translate="no">[</span><a class="head" href="/">Home</a><span class="textonly" translate="no">]</span>
  53. &gt;&gt;
  54. <span class="textonly" translate="no">]</span><span class="sub active">Anonymine</span><span class="textonly" translate="no">[</span>
  55. <span class="textonly" translate="no">[</span><a class="sub" href="/projects/light-sensor/">Analog light sensor</a><span class="textonly" translate="no">]</span>
  56. <span class="textonly" translate="no">[</span><a class="sub" href="/projects/PLLM-M702A/">Reverse-engineered schematics for PLLM-M702A</a><span class="textonly" translate="no">]</span>
  57. <span class="textonly" translate="no">[</span><a class="sub" href="/small-scripts/">Small scripts</a><span class="textonly" translate="no">]</span>
  58. </p>
  59. <p class="row">
  60. <span class="textonly" translate="no">[</span><a class="sub" href="/sitemap.py">Sitemap</a><span class="textonly" translate="no">]</span>
  61. </p>
  62. <hr class="textonly"/>
  63. </div></div></nav>
  64. <!-- END autogenerated navigation -->
  65.         <main><div id="content">
  66.             <h1 id="title">Anonymine - guess free minesweeper</h1>
  67.             <p class="notprint" style="max-width: 100%;">
  68.             <!-- If I make these images link back, it will cause
  69.             accessiblity issues on mobile devices. -->
  70.             <img src="imgs4/banner1.png" alt="" width="420" height="280"/>
  71.             <img src="imgs4/banner2.png" alt="" width="420" height="280"/>
  72.             </p>
  73.             <div id="top">
  74.                 <p>Latest version: 0.7.0 released on 2026-04-29
  75.                    - <a href="#news">what's new</a></p>
  76.                 <ul>
  77.                     <li><a href="#about">About</a></li>
  78.                     <li>
  79.                         <a href="#download">Download</a>
  80.                         <small>
  81.                             <span class="dl-">(<a href="#dl-unix">Linux &amp; Unix,</a></span>
  82.                             <a href="#dl-unix" class="dl-">macOS,</a>
  83.                             <a href="#dl-windows" class="dl-">Windows,</a>
  84.                             <a href="#dl-unix" class="dl-">Haiku OS</a>)
  85.                         </small>
  86.                     </li>
  87.                     <li><a href="#screenshots">Screenshots</a></li>
  88.                     <li><a href="#platforms">Platforms</a></li>
  89.                     <li><a href="#news">What's new?</a></li>
  90.                 </ul>
  91.                 <p>
  92.                     You can try it on my demo server using SSH.
  93.                     Log in as play@anonymine-demo.oskog97.com,
  94.                     password is "play".<br/>
  95.                     <a href="http://anonymine-demo.oskog97.com:8080/" class="printurl"
  96.                     >Leaderboard for public demo server</a>
  97.                 </p>
  98.             </div>
  99.             <section><div class="section" id="about">
  100.             <h2>About</h2>
  101.             <p class="notprint"><small><a href="#top">To top of the page</a></small></p>
  102.             <p>
  103.                 Anonymine is the "anonymous minesweeper" as I never had any
  104.                 name for it, but I think "Anonymine" works just fine.
  105.                 Back in December 2015 I was curious about creating an algorithm
  106.                 for solving minesweeper, and then I needed an excuse for it
  107.                 so I turned it into a terminal game that can be solved wihout any
  108.                 guessing.
  109.             </p>
  110.             <p>
  111.                 Do note that it runs in the terminal, so it may not be your cup of
  112.                 tea.  Mouse input is usually supported, but only really useful in
  113.                 hexagonal mode.
  114.             </p>
  115.             <p>
  116.                 Being solvable without guessing is not its only feature,
  117.                 it has many other unusual or even unique features:
  118.                 the games are fully customizable and Anonymine seems to be the
  119.                 only minesweeper with <span class="a"><a
  120.                 href="https://en.wikipedia.org/wiki/Von_Neumann_neighborhood"
  121.                 >von Neumann grids</a>.</span>
  122.                 <!-- No printurl, it's just Wikipedia. -->
  123.             </p>
  124.             <p>
  125.                 For each game you can set the field type (normal / hexagonal
  126.                 / von Neumann), width, height and number of mines, only
  127.                 restricted to certain minimums and security limits (to avoid
  128.                 igniting your computer).
  129.             </p>
  130.             <div class="atom">
  131.             <h3>The supported field types/game types are:</h3>
  132.             <div class="atom">
  133.             <!-- FIXME: This should be a dl with dt and dd. -->
  134.             <h4>Von Neumann grids</h4>
  135.                 <p>
  136.                     I have never seen another
  137.                     minesweeper that can have fields with von Neumann
  138.                     grids.  In a von Neumann neighbourhood (grid),
  139.                     each cell/square has only four neighbours, at the edges
  140.                     but not at the corners.
  141.                 </p>
  142.                 <p>
  143.                     The biggest number you'll ever see is 3. But that doesn't
  144.                     mean it's easy, it's quite the opposite.
  145.                 </p>
  146.             </div>
  147.             <div class="atom">
  148.             <h4>Traditional fields with Moore grids</h4>
  149.                 <p>Like any other minsweeper.</p>
  150.             </div>
  151.             <div class="atom">
  152.             <h4>Hexagonal fields</h4>
  153.                 <p>
  154.                     Every cell is a hexagon and has six
  155.                     neighbours, (with obvious exceptions).
  156.                     This mode has separate key bindings because there is no
  157.                     single "up" and single "down" direction.
  158.                 </p>
  159.             </div>
  160.             </div>
  161.             <div class="atom">
  162.             <h3>More features:</h3>
  163.             <ul>
  164.                 <li>
  165.                     It looks almost fine on monochrome terminals.
  166.                 </li>
  167.                 <li>
  168.                     Even the losers can get on their very own highscores table.
  169.                 </li>
  170.                 <li>
  171.                     There are cheat codes. They're not useful, but will be a
  172.                     challenge to crack.
  173.                 </li>
  174.             </ul>
  175.             </div>
  176.             </div></section>
  177.             <section><div class="section" id="download">
  178.             <h2>Download</h2>
  179.             <p class="notprint"><small><a href="#top">To top of the page</a></small></p>
  180.             <p><strong>NOTE</strong>:  Not for smartphones and tablets.</p>
  181.             <p class="notprint bold">
  182.                 <a href="#dl-unix">Linux, macOS, unix-likes, Haiku</a>,
  183.                 <a href="#dl-windows">Windows</a>,
  184.             </p>
  185.             <p><a href="https://oskog97.com/archive/anonymine/?C=M&amp;O=A"
  186.                   class="printurl">Archive of all released versions</a></p>
  187.             <p>
  188.                 If you find any bugs, please <span class="a"><a
  189.                      class="printurl"
  190.                     href="https://gitlab.com/oskog97/anonymine/issues"
  191.                 >create an issue</a>.</span>
  192.             </p>
  193.             <div class="atom">
  194.             <h3 id="dl-unix">GNU/Linux, macOS, *BSD, Cygwin, other unix-like
  195.                              operating systems, and Haiku</h3>
  196.             <ul>
  197.                 <li><a href="https://oskog97.com/archive/anonymine/anonymine-0.7.0.tar.xz"
  198.                     class="printurl download">xz compressed tarball of version 0.7.0 from 2026-04-29</a></li>
  199.                 <li><a class="printurl"
  200.                     href="https://gitlab.com/oskog97/anonymine/">GitLab</a></li>
  201.                 <li><a href="#release-notes">Release notes</a></li>
  202.             </ul>
  203.             </div>
  204.             <div class="atom">
  205.             <h3 id="dl-windows">Windows</h3>
  206.             <p>There are a few options:</p>
  207.             <ol>
  208.                 <li><strong>Recommended:</strong> WSL (both 1 and 2 work just fine)</li>
  209.                 <li>Automatic Cygwin and Anonymine installer</li>
  210.                 <li>Install Python and windows-curses</li>
  211.             </ol>
  212.             <p><a href="https://gitlab.com/oskog97/anonymine/-/wikis/Windows"
  213.                 >Comparison of options</a></p>
  214.             <h4>Automatic Cygwin installer</h4>
  215.             Downloads:
  216.             <ul>
  217.                 <li><a href="https://oskog97.com/archive/anonymine/windows/Anonymine-Windows-19.0-stage2-1.20-cygsetup-2.937.zip"
  218.                     class="printurl download">Windows installer from 2026-04-29
  219.                     (version 19.0-stage2-1.20
  220.                     with Cygwin setup 2.937)
  221.                 </a></li>
  222.                 <li><a href="https://gitlab.com/oskog97/anonymine-windows"
  223.                     class="printurl">Fetch newest version from GitLab
  224.                 </a></li>
  225.             </ul>
  226.             <h4>Install Python and windows-curses</h4>
  227.             It is possible to run the unix version with some limitations.
  228.             <ul>
  229.                 <li><a class="printurl"
  230. href="https://gitlab.com/oskog97/anonymine/blob/master/doc/INSTALL.Windows.txt">
  231.                     Instructions</a>
  232.                     </li>
  233.                 <li>You can download as a zip from <span class="a"><a
  234. href="https://gitlab.com/oskog97/anonymine/-/archive/master/anonymine-master.zip"
  235.                     class="printurl">Gitlab</a>.</span></li>
  236.             </ul>
  237.             </div>
  238.             </div></section>
  239.             <section><div class="section" id="screenshots">
  240.             <h2>Screenshots</h2>
  241.             <p class="notprint"><small><a href="#top">To top of the page</a></small></p>
  242.             <p>
  243.                 <img width="484" height="316" alt="" src="imgs4/last-cells.png"/>
  244.                 <br/><span class="caption">
  245.                     The von Neumann field: The biggest number you'll ever see
  246.                     is 3.  This mode makes Anonymine a unique minesweeper.
  247.                     (Attention mode has been enabled to find the last few
  248.                     cells.)
  249.                 </span>
  250.             </p>
  251.             <p>
  252.                 <img width="484" height="316" alt="" src="imgs4/traditional.png"/>
  253.                 <br/><span class="caption">
  254.                     Traditional (Moore) field, nothing special
  255.                 </span>
  256.             </p>
  257.             <p>
  258.                 <img width="484" height="316" alt="" src="imgs4/hexagonal.png"/>
  259.                 <br/><span class="caption">
  260.                     Hexagonal field
  261.                 </span>
  262.             </p>
  263.             <p>
  264.                 <img width="484" height="316" alt="" src="imgs4/losers.png"/>
  265.                 <br/><span class="caption">
  266.                     The losers' highscores
  267.                 </span>
  268.             </p>
  269.             </div></section>
  270.             <section><div class="section" id="platforms">
  271.             <h2>Platforms</h2>
  272.             <p class="notprint"><small><a href="#top">To top of the page</a></small></p>
  273.             <p>
  274.                 Check the <a class="printurl"
  275. href="https://gitlab.com/oskog97/anonymine/-/blob/master/README.md#blob-content-holder"
  276.                 >readme</a> and <a class="printurl"
  277. href="https://gitlab.com/oskog97/anonymine/blob/master/doc/INSTALL.txt"
  278.                 >installation instructions</a> for more details.
  279.             </p>
  280.             <div class="atom">
  281.             <h3>Tested on</h3>
  282.             <p>
  283.                 Here's a list of various platforms Anonymine has been tested
  284.                 on.  It works on all of them unless I say otherwise, but there
  285.                 may be some minor issues.
  286.             </p>
  287.             <ul>
  288.                 <li>Various GNU/Linux distributions</li>
  289.                 <li>FreeBSD, OpenBSD, NetBSD, DragonflyBSD</li>
  290.                 <li>Haiku</li>
  291.                 <li>SerenityOS</li>
  292.                 <li>macOS</li>
  293.                 <li>OpenIndiana and Solaris</li>
  294.                 <li>Debian GNU/Hurd</li>
  295.                 <li>Cygwin (on Windows and ReactOS)</li>
  296.                 <li>Windows and ReactOS (without Cygwin)</li>
  297.             </ul>
  298.             Python interpreters:
  299.             <ul>
  300.                 <li>CPython</li>
  301.                 <li>PyPy (lacks <code>curses</code> on Windows)</li>
  302.             </ul>
  303.             </div>
  304.             <div class="atom">
  305.             <h4>"Some coercion required"</h4>
  306.             <p>
  307.                 Using <span class="a"><a href="http://gitlab.com/oskog97/poop"
  308.                 class="printurl">Pööp</a>,</span> Anonymine can be made to work
  309.                 on even more platforms.
  310.                 <span class="bold">"Do not try this at home"</span>
  311.             </p>
  312.             <dl>
  313.                 <dt>GraalVM Python</dt>
  314.                 <dd>Needs only <code>curses</code></dd>
  315.                 <dt>PyPy on Windows</dt>
  316.                 <dd>Needs only <code>curses</code>,
  317.                     but the Windows console is really slow</dd>
  318.                 <dt>Jython</dt>
  319.                 <dd>Needs <code>curses</code> and <code>multiprocessing</code></dd>
  320.                 <dt>IronPython</dt>
  321.                 <dd>Needs very different configuration files and
  322.                     <code>curses</code> and <code>multiprocessing</code></dd>
  323.                 <dt>Minix 3.4</dt>
  324.                 <dd>Needs <code>multiprocessing</code> and <code>threading</code></dd>
  325.             </dl>
  326.             </div>
  327.             </div></section>
  328.             <section><div class="section" id="news">
  329.                 <h2>What's new?</h2>
  330.                 <p class="notprint"><small><a href="#top">To top of the page</a></small></p>
  331.                 <dl>
  332.                 <dt id="release-notes">Release notes</dt>
  333.                 <dd>
  334.                 <pre>0.6.45
  335.     "Fixed" issue with snap installed Python
  336. 0.6.43
  337.     Fixed issue with highscores on Windows 11
  338. 0.6.42
  339.     Removed the seed feature
  340. 0.6.41
  341.     Fixed two Python 3.13+ issues:
  342.         - Import failure on all platforms.
  343.         - Crash when fork()ing on some rare platforms
  344.     Some fixes and workaround have been included already in 0.6.38</pre>
  345.                 <p><a class="printurl"
  346.         href="https://gitlab.com/oskog97/anonymine/blob/master/doc/RELEASE-NOTES"
  347.                 >See the rest of the file on Gitlab</a></p>
  348.                 </dd>
  349.                 <dt>Bigger changes</dt>
  350.                 <dd>
  351.                 <pre>What's new in 0.7.0 since 0.6.0?
  352. ================================
  353. 2026-04-29
  354. Improved platform support:
  355.     - Python 3.13+ supported since 0.6.38
  356.     - SerenityOS (First in 0.6.26, at least 0.6.38 required due to Python)
  357.     - Icon for Anonymine on Haiku (0.6.17)
  358.     - Mouse support on Haiku (0.6.37)
  359.     - Fixed a race condition that previosuly required a bunch of platform
  360.       specific workarounds (0.6.11)
  361.     - Use web browser to display highscores on Windows (0.6.46)
  362.     - Avoids snap installed Python interpreters since 0.6.45
  363. Updates:
  364.     - New, much faster, field initialization algorithm. (0.6.29)
  365.     - Fixed race condition (fix14) (0.6.11)
  366. Security fixes:
  367.     - 0.6.19: Prevent potential information leak if Anonymine is used as
  368.               login shell for ssh.
  369.     - 0.6.32: Prevent local DoS.  Don't read the entire highscores file,
  370.               which is writeable by everyone, if it's too big.
  371.     - 0.6.34: Check file permissions before loading configuration files</pre>
  372.                 <p><a class="printurl"
  373.         href="https://gitlab.com/oskog97/anonymine/blob/master/doc/NEWS"
  374.                 >See the rest of NEWS on Gitlab</a></p>
  375.                 </dd>
  376.                 <dt>Low level changes</dt>
  377.                 <dd>
  378.                 <p><a class="printurl"
  379.         href="https://gitlab.com/oskog97/anonymine/blob/master/ChangeLog"
  380.                 >See ChangeLog on Gitlab</a></p>
  381.                 </dd>
  382.                 </dl>
  383.             </div></section>
  384.         </div></main>
  385.         
  386. <!-- INCLUDED FOOTER -->
  387.     <hr class="textonly"/>
  388.     <p>
  389.         Copyright © Oskar Skog<br/>
  390.         Website content released under the <a
  391.         href="https://creativecommons.org/licenses/by/4.0/" rel="license noopener"
  392.         target="_blank">Creative Commons Attribution (CC-BY 4.0)</a> license
  393.         and my software usually under the <span class="a"><a target="_blank"
  394.         rel="noopener"
  395.         href="https://opensource.org/license/BSD-2-Clause">FreeBSD license
  396.         (2-clause)</a>.</span>
  397.         <br/>
  398.         Images may be from other sites, I should have cited useful sources
  399.         somewhere on the page.
  400.         <span class="notprint">Contact me if I haven't.</span>
  401.     </p>
  402.     <p id="contact" class="notprint">
  403.         You can contact me at: <a href="mailto:oskar@oskog97.com"
  404.         rel="noopener" target="_blank">oskar@oskog97.com</a>
  405.         <span class="a">(<a href="/pgp-pub/oskar.asc"
  406.                             >PGP public key</a>)</span>
  407.     </p>
  408.     <p> <a class="notprint" href="https://oskog97.com/read/?path=/style.css">
  409.             CSS Stylesheet
  410.         </a>
  411.     </p>
  412. </div></footer>
  413. <!-- END OF INCLUDED FOOTER -->
  414.     </body>
  415. </html>