source code of /projects/anonymine/index.html

Last modified
Lines 471

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.35 released on 2024-01-31
  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.35.tar.xz"
  199.                     class="printurl download">xz compressed tarball of version 0.6.35 from 2024-01-31</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-16.13.0-cygsetup-2.929.zip"
  219.                     class="printurl download">Windows installer from 2024-02-03
  220.                     (version 16.13.0
  221.                     with Cygwin setup 2.929)
  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.32
  336.     - enginecfg update: more fine grained control of highscores.
  337.       It SHOULD be backward compatible.
  338. 0.6.22
  339.     - check-install-cfg is smarter now
  340.     - If you have modified cursescfg you may want to check what updates 0.6.20
  341.       brought, previously check-install-cfg would have FORCED you to update.
  342. 0.6.20 (BROKEN for new installs, fixed in 0.6.21)
  343.     - Significant changes in cursescfg.  Old configuration file is still
  344.       compatible, but most changes of this release is in that configuration
  345.       file.
  346.     - check-install-cfg can't properly check compatibility, run
  347.         ./configure skip-check-install-cfg=true
  348.       if you want to keep the old cursescfg and assume it works.
  349. 0.6.19
  350.     - Fix issue 32 and 33
  351.     - Fix 33 will prevent you from setting ONLY the -c option when used
  352.       over an SSH connection. Simply add another option or run
  353.       `SSH_CLIENT= anonymine -c path/to/cursescfg`
  354.     - From now on, configuration files MUST NOT be modifiable by group members
  355.       even if group ID is zero.</pre>
  356.                 <p><a class="printurl"
  357.         href="https://gitlab.com/oskog97/anonymine/blob/master/doc/RELEASE-NOTES"
  358.                 >See the rest of the file on Gitlab</a></p>
  359.                 </dd>
  360.                 <dt>Bigger changes</dt>
  361.                 <dd>
  362.                 <pre>What's new in 0.7.0 since 0.6.0?
  363. ================================
  364. 2024-xx-xx
  365. Improved platform support:
  366.     - SerenityOS (0.6.26, improved 0.6.31)
  367.     - Icon for Anonymine on Haiku (0.6.17)
  368.     - Fixed a race condition that previosuly required a bunch of platform
  369.       specific workarounds (0.6.11)
  370.     - Use Notepad to display highscores on Windows (0.6.33)
  371. Updates:
  372.     - New, much faster, field initialization algorithm. (0.6.29)
  373.     - Reproducible fields using seeds (0.6.32)
  374.     - Fixed race condition (fix14) (0.6.11)
  375. Security fixes:
  376.     - 0.6.19: Prevent information leak if Anonymine is used as login shell
  377.               for ssh.
  378.     - 0.6.32: Prevent local DoS.  Don't read the entire highscores file,
  379.               which is writeable by everyone, if it's too big.
  380.     - 0.6.34: Check file permissions before loading configuration files</pre>
  381.                 <p><a class="printurl"
  382.         href="https://gitlab.com/oskog97/anonymine/blob/master/doc/NEWS"
  383.                 >See the rest of NEWS on Gitlab</a></p>
  384.                 </dd>
  385.                 <dt>Low level changes</dt>
  386.                 <dd>
  387.                 <p><a class="printurl"
  388.         href="https://gitlab.com/oskog97/anonymine/blob/master/ChangeLog"
  389.                 >See ChangeLog on Gitlab</a></p>
  390.                 </dd>
  391.                 </dl>
  392.             </div></section>
  393.         </div></main>
  394.         
  395. <!-- INCLUDED FOOTER -->
  396.     <hr class="textonly"/>
  397.     <p>
  398.         Copyright © Oskar Skog<br/>
  399.         Website content released under the <a
  400.         href="https://creativecommons.org/licenses/by/4.0/" rel="license noopener"
  401.         target="_blank">Creative Commons Attribution (CC-BY 4.0)</a> license
  402.         and my software usually under the <span class="a"><a target="_blank"
  403.         rel="noopener"
  404.         href="https://opensource.org/licenses/BSD-2-Clause">FreeBSD license
  405.         (2-clause)</a>.</span>
  406.         <br/>
  407.         Images may be from other sites, I should have cited useful sources
  408.         somewhere on the page.
  409.         <span class="notprint">Contact me if I haven't.</span>
  410.     </p>
  411.     <p id="contact" class="notprint">
  412.         You can contact me at: <a href="mailto:oskar@oskog97.com"
  413.         rel="noopener" target="_blank">oskar@oskog97.com</a>
  414.         <span class="a">(<a href="/pgp-pub/oskar.asc"
  415.                             >PGP public key</a>)</span>
  416.     </p>
  417.     <p> <a class="notprint" href="https://oskog97.com/read/?path=/style.css">
  418.             CSS Stylesheet
  419.         </a>
  420.         <a href="https://validator.w3.org/check/referrer" rel="nofollow noopener"
  421.             target="_blank" class="notprint"><span
  422.             class="img">Valid HTML5</span
  423.         ></a><br/>
  424.     </p>
  425. </div></footer>
  426. <!-- END OF INCLUDED FOOTER -->
  427.     </body>
  428. </html>