source code of /projects/anonymine/index.html

Last modified
Lines 468

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