<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" 
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel><title>rani/games.git</title><link>/rani/games.git</link><description>Commits on branch master</description><language>en-us</language><item>
<link>/rani/games.git/show/8f3894a2c975924175d88de9a739c6c016851077</link>
<title>Add: info on compilation and configuration in the main README
</title>
<guid>8f3894a
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">8f3894a2c975924175d88de9a739c6c016851077</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Jun 05 17:18:38 2025 +0000</span>

<span class="git-message-line">    Add: info on compilation and configuration in the main README</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/README.md</span> <span class="git-file-b">b/README.md</span>
<span class="git-index">index</span> <span class="git-index-old">d4ed8ea</span>..<span class="git-index-new">c9df78b</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">README.md</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-13</span> <span class="git-hunk-new">+158</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span># Games</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>A collection of small games. Configuration is done in the source file of each game.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>A collection of small games. Configuration is done in the source file of each</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>game.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Each game is in its own directory, accompanied with a README file explaining how</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>to play the game and what configuration options are available. Additionally,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>each game is only a single source file, allowing them the be turned into what</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>may be referred to as &#34;C scripts&#34;.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>## Compilation</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Each game requires only ncurses. Since the source for each game is a single</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>file, compilation is fairly simple, and no makefile is provided.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Enter the directory for whichever game. Compile the single C file using any C</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>compiler, linking against ncurses. (`tcc` is my preferred compiler for this</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>project.) Once compiled, simply run the binary.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>For example, to run `snake`:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>$ cd snake</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>$ cc -o snake snake.c -lncurses</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>$ ./snake</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>If using `tcc`, the game can be run directly from the compiler:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>$ cd snake</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>$ tcc -lncurses -run snake.c</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>## Configuring</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Configuration is done by either specifying the config options in the compiler</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>command line, or by `#define`-ing them at the top of the C file.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>To configure from the command line, the compilation command may look like this:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>$ cc -DX=128 -DY=64 -o snake snake.c -lncurses</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>This will set the `X` option equal to `128` and the `Y` option to `64`.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Configuring directly in the source file may look like this:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```c</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>// define your options here vvv</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X 128</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y 64</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>// this is stuff already in the file vvv</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>...</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>```</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Thu, 05 Jun 2025 22:18:38 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/c4580f99e613de30bafaefac162f0570b68c1fc2</link>
<title>Add: td: sniper turret
</title>
<guid>c4580f9
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">c4580f99e613de30bafaefac162f0570b68c1fc2</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Tue Jun 03 21:41:35 2025 +0000</span>

<span class="git-message-line">    Add: td: sniper turret</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/td/td.c</span> <span class="git-file-b">b/td/td.c</span>
<span class="git-index">index</span> <span class="git-index-old">cd854e0</span>..<span class="git-index-new">0ce4ab8</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">td/td.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">td/td.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-1526</span> <span class="git-hunk-new">+15212</span> <span class="git-hunk">@@</span><span class="git-function-context"> struct {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					       { 50,   4,   0,    2,   0,            5     },</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					       { 75,   4,   0,    3,   0,            4     },</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{&#34;Sniper&#34;,         &#39;|&#39;, 125,  25,   0,    1,   0,    -1,    40,   4, {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	                       {100,  25,   0,    2,   0,           32     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						   {125,  25,   0,    3,   0,           27     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						   {200,  25,   0,    5,   0,           20     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						   {400,  25,   0,    5,   0,           10     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}},</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	{&#34;Bomb Lobber&#34;,    &#39;&amp;&#39;, 165,   3,   1,    1,   1,    -1,    10,   3, {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	                       { 50,   3,   2,    1,   1,           10     },</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					       {100,   4,   2,    1,   2,           10     },</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Wed, 04 Jun 2025 02:41:35 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/758b343b66b3bf706c61a9f813e04d03c200ff73</link>
<title>Fix: td: error opening upgrade menu for adjacent turrets
</title>
<guid>758b343
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">758b343b66b3bf706c61a9f813e04d03c200ff73</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Tue Jun 03 21:20:41 2025 +0000</span>

<span class="git-message-line">    Fix: td: error opening upgrade menu for adjacent turrets</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/td/td.c</span> <span class="git-file-b">b/td/td.c</span>
<span class="git-index">index</span> <span class="git-index-old">d770976</span>..<span class="git-index-new">cd854e0</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">td/td.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">td/td.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-9037</span> <span class="git-hunk-new">+9037</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						for (int i = 0; i &lt; spawned_turrets.idx; i++) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>							x = spawned_turrets.spawned[i].x;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>							y = spawned_turrets.spawned[i].y;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>							if (x != e.x - 1 &amp;&amp; y != e.y - 1) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							if (x != e.x - 1 || y != e.y - 1) continue;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>							</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>							tid = i;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>							break;</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Wed, 04 Jun 2025 02:20:41 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/8df6b05358ace1afad3c0a43315c4b15c430c4a8</link>
<title>Add td game
</title>
<guid>8df6b05
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">8df6b05358ace1afad3c0a43315c4b15c430c4a8</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Tue Jun 03 21:04:14 2025 +0000</span>

<span class="git-message-line">    Add td game</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/td/README.md</span> <span class="git-file-b">b/td/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">4cf4838</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">td/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+134</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># TD</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>A simple, randomly generated, tower defense game.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Click on a turret&#39;s name in the shop to begin purchasing, then click on a tile</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>to place it there. Press q to abort the purchase. Click on a turret (that has</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>already been placed) to open the upgrade menu. Click on the info button to see</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>the turret&#39;s stats. Buttons (in any menu) can be clicked on if they are</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>highlighted. Otherwise, they cannot be clicked on. Space to pause, any to</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>resume. q to quit.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Start by purchasing a turret and placing it on the map such that it is in range</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>of a path tile. Spikes may only be placed on path tiles and will run out after a</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>certain number of enemies run over them. When an enemy is killed, cash is</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>rewarded and the score increases. Once enough cash is earned, a turret may be</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>upgraded from its upgrade menu. Otherwise, another turret can be purchased and</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>placed on the map. Certain turrets may deal splash damage to enemies so that one</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>attack will damage multiple enemies at once. After killing enough enemies, the</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>round is progressed and a new wave of enemies is spawned. As the rounds</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>progress, enemies will gain more health and move faster.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Config</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `X`: Board width (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `Y`: Board height (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `SEED`: PRNG seed (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `DELAY`: The delay (in milliseconds) between game ticks (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `PATH_BENDS`: The number of bends in the path (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `ATTACK_ANIMATION_DELAY`: The delay (ms) to animate attacks (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `MAX_ENEMIES`: The maximum number of enemies in a round (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `MAX_TURRETS`: The maximum number of turrets allowed on the map (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `STARTING_CASH`: Amount of cash at the start of the game (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `STARTING_LIVES`: Amount of lives at the start of the game (integer)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `STARTING_ROUND`: The round at which the game starts (integer)</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/td/td.c</span> <span class="git-file-b">b/td/td.c</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">d770976</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">td/td.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+1965</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;string.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef X</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X 64</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* X */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef Y</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y 32</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* Y */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef SEED</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SEED time(NULL)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* SEED */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef DELAY</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define DELAY 100</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* DELAY */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef PATH_BENDS</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define PATH_BENDS 3</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* PATH_BENDS */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef ATTACK_ANIMATION_DELAY</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define ATTACK_ANIMATION_DELAY 35</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* ATTACK_ANIMATION_DELAY */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef MAX_ENEMIES</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define MAX_ENEMIES 256</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* MAX_ENEMIES */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef MAX_TURRETS</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define MAX_TURRETS 128</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* MAX_TURRETS */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef STARTING_CASH</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define STARTING_CASH 120</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* STARTING_CASH */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef STARTING_LIVES</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define STARTING_LIVES 25</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* STARTING_LIVES */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef STARTING_ROUND</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define STARTING_ROUND 1</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* STARTING_ROUND */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* END CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define ARRLEN(a) (sizeof(a)/sizeof(*a))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define BIN1(a) (a &amp; 1)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define BIN2(a,b) ((BIN1(a) &lt;&lt; 1 ) | BIN1(b))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define BIN4(a,b,c,d) ((BIN2(a,b) &lt;&lt; 2) | BIN2(c,d))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define BIN8(a,b,c,d,e,f,g,h) ((BIN4(a,b,c,d) &lt;&lt; 4) | BIN4(e,f,g,h))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define CELL_PATH_MASK BIN8(0,0,0,0,1,1,0,0)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define INT_TO_CELL_PATH(i) (((i) &amp; (CELL_PATH_MASK &gt;&gt; 2)) &lt;&lt; 2)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define CELL_PATH_TO_INT(c) (((c) &amp; CELL_PATH_MASK) &gt;&gt; 2)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define CELL_TURRET_MASK BIN8(1,1,1,1,0,0,0,0)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define INT_TO_CELL_TURRET(i) (((i) &amp; (CELL_TURRET_MASK &gt;&gt; 4)) &lt;&lt; 4)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define CELL_TURRET_TO_INT(c) (((c) &amp; CELL_TURRET_MASK) &gt;&gt; 4)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SHOP_STARTX (X + 2)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SHOP_STARTY (1)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SHOP_ID_TO_X(id) (SHOP_STARTX)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SHOP_ID_TO_Y(id) ((id) * 2 + SHOP_STARTY + 2)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y_TO_SHOP_ID(y) (((y) - SHOP_STARTY) % 2 == 1 ?     \</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>                         (-1) :                             \</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>                         (((y) - SHOP_STARTY - 2) / 2))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum color {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RED = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GREEN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	YELLOW,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	BLUE,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	MAGENTA,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CYAN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum state {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RUNNING,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	PAUSED,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GAME_OVER,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	QUIT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum cell {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CELL_EMPTY  = 0,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CELL_PATH   = 1 &lt;&lt; 0,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CELL_TURRET = 1 &lt;&lt; 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum cell_path {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CELL_PATH_UP,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CELL_PATH_DOWN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CELL_PATH_LEFT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CELL_PATH_RIGHT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct enemies {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct enemy {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int count;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ticks;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} enemies[MAX_ENEMIES];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int idx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int last_round;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int spawned;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int killed;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int to_spawn;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int spawnx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int spawny;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char * name;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char symbol;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int cost;    // cost to purchase</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int radius;  // attack radius</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int rsplash; // slash damage radius</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int damage;  // damage per attack</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int dsplash; // splash damage</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int stack;   // amount of turrets per tile (-1 for attacking turrets)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int ticks;   // ticks between attacks</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int n_upgrades; // number of upgrades</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int radius;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int rsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int damage;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int dsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ticks;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} upgrades[4];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>} turrets[] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/*    Name             Sym  Cost  Rad RSplsh Dmg DSplsh Stack  Tick nUpgr*/</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{&#34;Spikes&#34;,         &#39;M&#39;,  25,   0,   0,    1,   0,    10,     1,   0,},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{&#34;Gunner&#34;,         &#39;%&#39;, 100,   3,   0,    1,   0,    -1,     5,   3, {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	                       { 25,   4,   0,    1,   0,            5     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					       { 50,   4,   0,    2,   0,            5     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					       { 75,   4,   0,    3,   0,            4     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{&#34;Bomb Lobber&#34;,    &#39;&amp;&#39;, 165,   3,   1,    1,   1,    -1,    10,   3, {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	                       { 50,   3,   2,    1,   1,           10     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					       {100,   4,   2,    1,   2,           10     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					       {150,   4,   2,    1,   2,            6     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{&#34;Machine Gunner&#34;, &#39;$&#39;, 400,   2,   0,    1,   0,    -1,     3,   4, {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	                       {200,   3,   0,    1,   0,            3     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						   {400,   4,   0,    2,   0,            2     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						   {800,   5,   0,    4,   0,            2     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						   {8000,  5,   0,    4,   0,            1     },</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct turrets {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct spawned_turret {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int id;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int radius;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int rsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int damage;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int dsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int stack;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ticks;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int level; // upgrade level</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int kills;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} spawned[MAX_TURRETS];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int idx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>} spawned_turrets;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>unsigned long ticks = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void enemies_push(struct enemies * enemies, int x, int y, int count, int ticks) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int idx = enemies-&gt;idx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;enemies[idx].x = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;enemies[idx].y = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;enemies[idx].count = count;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;enemies[idx].ticks = ticks;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;spawned += count;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;idx++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void enemies_pop(struct enemies * enemies, int i) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;idx--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	memmove(&amp;enemies-&gt;enemies[i], &amp;enemies-&gt;enemies[i + 1],</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	        (MAX_ENEMIES - (i + 1)) * sizeof(*enemies-&gt;enemies));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void turrets_push(</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct turrets * spawned_turrets, char grid[X][Y], int x, int y, int id</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int idx = spawned_turrets-&gt;idx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].x = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].y = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].id = id;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].radius = turrets[id].radius;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].rsplash = turrets[id].rsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].damage = turrets[id].damage;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].dsplash = turrets[id].dsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].stack = turrets[id].stack;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].ticks = turrets[id].ticks;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].level = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;spawned[idx].kills = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned_turrets-&gt;idx++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	grid[x][y] |= CELL_TURRET | INT_TO_CELL_TURRET(id);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void turrets_pop(struct turrets * spawned, char grid[X][Y], int x, int y, int i) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	spawned-&gt;idx--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	memmove(&amp;spawned-&gt;spawned[i], &amp;spawned-&gt;spawned[i + 1],</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	        (MAX_TURRETS - (i + 1)) * sizeof(*spawned-&gt;spawned));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	grid[x][y] &amp;= ~CELL_TURRET | INT_TO_CELL_TURRET(0xFF);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int rand_range(int lo, int hi) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return rand() % (hi - lo) + lo;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void generate_path(char grid[X][Y], struct enemies * enemies) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int spawnx = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int spawny = rand() % Y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;spawnx = spawnx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;spawny = spawny;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int lastx = spawnx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int lasty = spawny;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; PATH_BENDS; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int bendx = rand_range(lastx + 1, (i + 1) * X / PATH_BENDS);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int bendy = rand_range(0, Y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		// horizontal run</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = lastx; x &lt; bendx; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			grid[x][lasty] |= CELL_PATH | INT_TO_CELL_PATH(CELL_PATH_RIGHT);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		// vertical connection</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (lasty != bendy) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (lasty &lt; bendy) for (int y = lasty; y &lt; bendy; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				grid[bendx][y] |= CELL_PATH | INT_TO_CELL_PATH(CELL_PATH_DOWN);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			} else for (int y = lasty; y &gt; bendy; y--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				grid[bendx][y] |= CELL_PATH | INT_TO_CELL_PATH(CELL_PATH_UP);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		lastx = bendx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		lasty = bendy;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	// connect to edge</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int x = lastx; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		grid[x][lasty] |= CELL_PATH | INT_TO_CELL_PATH(CELL_PATH_RIGHT);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>char grid_getc(char grid[X][Y], int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char c = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char out = &#39; &#39;;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (c &amp; CELL_TURRET) out = turrets[CELL_TURRET_TO_INT(c)].symbol;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>    else if (c &amp; CELL_PATH) switch(CELL_PATH_TO_INT(c)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		case CELL_PATH_UP:    out = &#39;^&#39;; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		case CELL_PATH_DOWN:  out = &#39;v&#39;; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		case CELL_PATH_LEFT:  out = &#39;&lt;&#39;; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		case CELL_PATH_RIGHT: out = &#39;&gt;&#39;; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return out;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int grid_getcolor(char grid[X][Y], int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char c = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int out = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (c &amp; CELL_TURRET) out = A_UNDERLINE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	else if (c &amp; CELL_PATH) out = A_DIM;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return out;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void draw_grid(char grid[X][Y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;+&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int x = 0; x &lt; X; x++) addch(&#39;-&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;+&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;\n&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addch(&#39;|&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int cp = grid_getcolor(grid, x, y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(grid_getc(grid, x, y));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;|\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;+&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int x = 0; x &lt; X; x++) addch(&#39;-&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;+&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;\n&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int get_shop_str(char * s, int n, int i) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return snprintf(s, n, &#34;%s: $%d&#34;, turrets[i].name,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	                turrets[i].cost);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int yx_to_shop_id(int y, int x) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int id = Y_TO_SHOP_ID(y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (id &lt; 0) return -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (id &gt;= ARRLEN(turrets)) return -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int len = get_shop_str(NULL, 0, id);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int off = x - SHOP_ID_TO_X(id);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (off &lt; 0 || off &gt;= len) return -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return id;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void draw_shop(int cash) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int y = SHOP_STARTY;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x = SHOP_STARTX;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mvaddstr(y, x,   &#34;Shop:&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mvaddstr(++y, x, &#34;-----&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char s[25];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; ARRLEN(turrets); i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		x = SHOP_ID_TO_X(i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		y = SHOP_ID_TO_Y(i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(y, x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int len = get_shop_str(s, ARRLEN(s), i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (cash &gt;= turrets[i].cost) attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(s);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (cash &gt;= turrets[i].cost) attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void erase_shop(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int y = SHOP_STARTY;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x = SHOP_STARTX;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(y, x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	clrtoeol();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(++y, x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	clrtoeol();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; ARRLEN(turrets); i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		x = SHOP_ID_TO_X(i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		y = SHOP_ID_TO_Y(i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(y, x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		clrtoeol();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void draw_radius(char grid[X][Y], int x, int y, int r) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int rx = -r + 1; rx &lt; r; rx++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int ry = -r + 1; ry &lt; r; ry++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (rx*rx + ry*ry &gt; r*r) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int dx = rx + x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int dy = ry + y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (dx &lt; 0) dx = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			else if (dx &gt;= X) dx = X - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (dy &lt; 0) dy = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			else if (dy &gt;= Y) dy = Y - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(dy + 1, dx + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(grid_getc(grid, dx, dy));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int try_purchase(char grid[X][Y], int id, int cash, struct turrets * spawned_turrets) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int cost = turrets[id].cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int radius = turrets[id].radius;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (cost &gt; cash) return -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(-1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (!done) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y + 2, X + 2 - 10);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;q to abort&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y + 3, X + 2 - 14);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;Click to place&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (getch()) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case &#39;q&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				cost = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case KEY_MOUSE:;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				MEVENT e;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (getmouse(&amp;e) != OK) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int x = e.x - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int y = e.y - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (x &lt; 0 || x &gt;= X || y &lt; 0 || y &gt;= Y) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// turrets with a nonnegative stack must be placed on paths</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// other turrets can only by placed on empty cells</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if ((grid[x][y] &amp; CELL_TURRET) ||</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				       (turrets[id].stack &lt; 0 &amp;&amp; (grid[x][y] &amp; CELL_PATH))) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (turrets[id].stack &gt; 0 &amp;&amp; !(grid[x][y] &amp; CELL_PATH)) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// draw radius</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				draw_radius(grid, x, y, radius);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(e.y, e.x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(turrets[id].symbol);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y + 3, X + 2 - 15);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;Enter to accept&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (getch() != &#39;\n&#39;) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					cost = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				turrets_push(spawned_turrets, grid, x, y, id);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int try_upgrade(int id, int cash, struct turrets * spawned_turrets, char grid[X][Y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int cost = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(-1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct spawned_turret * st = &amp;spawned_turrets-&gt;spawned[id];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	erase_shop();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int y = SHOP_STARTY;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x = SHOP_STARTX;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(y, x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addstr(turrets[st-&gt;id].name);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;:&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(++y, x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int nlen = strlen(turrets[st-&gt;id].name);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; nlen + 1; i++) addch(&#39;-&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(SHOP_ID_TO_Y(0), SHOP_ID_TO_X(0));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addstr(&#34;Turret Info&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int tid = st-&gt;id;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int max_level = turrets[tid].n_upgrades;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int cur_level = st-&gt;level;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int up_idx = cur_level;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	// sell for 75% of purchasing cost</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int selling = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	selling += turrets[tid].cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; cur_level; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		selling += turrets[tid].upgrades[i].cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (turrets[tid].stack &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		selling *= st-&gt;stack;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		selling /= turrets[tid].stack;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	selling *= 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	selling /= 4;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(SHOP_ID_TO_Y(1), SHOP_ID_TO_X(1));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	printw(&#34;Sell: -$%d&#34;, selling);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (cur_level &lt; max_level) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		cost = turrets[tid].upgrades[up_idx].cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		bool affordable = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (cash &lt; cost) affordable = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(SHOP_ID_TO_Y(2), SHOP_ID_TO_X(2));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (affordable) attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		printw(&#34;Upgrade: $%d&#34;, cost);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (affordable) attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	draw_radius(grid, st-&gt;x, st-&gt;y, st-&gt;radius);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (!done) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y + 2, X + 2 - 12);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;Any to abort&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		// clear the pause/resume prompt</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y + 3, X + 2 - 14);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		clrtoeol();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (getch()) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case KEY_MOUSE:;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				MEVENT e;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (getmouse(&amp;e) != OK) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int x = e.x - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int y = e.y - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int sid = yx_to_shop_id(e.y, e.x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// turret info</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (sid == 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int kills = st-&gt;kills;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int ticks = st-&gt;ticks;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int rad = st-&gt;radius;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int dmg = st-&gt;damage;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int rsp = st-&gt;rsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int dsp = st-&gt;dsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int stk = st-&gt;stack;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int py, px;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					py = SHOP_STARTY;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					px = SHOP_STARTX;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					erase_shop();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					move(py, px);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addstr(turrets[st-&gt;id].name);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addch(&#39;:&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					move(++py, px);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; nlen + 1; i++) addch(&#39;-&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					mvprintw(++py, px, &#34;Kills: %d&#34;, kills); </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					mvprintw(++py, px, &#34;Level: %d&#34;, cur_level);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					mvprintw(++py, px, &#34;Attack Ticks: %d&#34;, ticks);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					mvprintw(++py, px, &#34;Radius: %d&#34;, rad);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					mvprintw(++py, px, &#34;Damage: %d&#34;, dmg);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (rsp &gt; 0 &amp;&amp; dsp &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						mvprintw(++py, px, &#34;Splash Radius: %d&#34;, rsp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						mvprintw(++py, px, &#34;Splash Damage: %d&#34;, dsp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (stk &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						mvprintw(++py, px, &#34;Stacked: %d&#34;, stk);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					move(Y + 2, X + 2 - 13);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addstr(&#34;Any to finish&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					getch();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					cost = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// sell turret</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				} else if (sid == 1) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					cost = -selling;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// upgrade turret</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				} else if (sid == 2) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (cash &lt; cost) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					st-&gt;level++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					st-&gt;radius = turrets[tid].upgrades[up_idx].radius;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					st-&gt;rsplash = turrets[tid].upgrades[up_idx].rsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					st-&gt;damage = turrets[tid].upgrades[up_idx].damage;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					st-&gt;dsplash = turrets[tid].upgrades[up_idx].dsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					st-&gt;ticks = turrets[tid].upgrades[up_idx].ticks;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			default:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				cost = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void draw_enemies(struct enemies * enemies) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; enemies-&gt;idx; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (enemies-&gt;enemies[i].count == 0) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int cp = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (enemies-&gt;enemies[i].count) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case 1: cp = COLOR_PAIR(RED); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case 2: cp = COLOR_PAIR(CYAN); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case 3: cp = COLOR_PAIR(GREEN); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case 4: cp = COLOR_PAIR(YELLOW); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			default: cp = COLOR_PAIR(MAGENTA); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int x = enemies-&gt;enemies[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int y = enemies-&gt;enemies[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(1 + y, 1 + x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addch(&#39;@&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int get_spawn_rate(int round) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 10) return 5;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 35) return rand_range(2,4);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return rand_range(1, 4);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int get_speed(int round) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 10) return 5;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 35) return rand_range(3, 5);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return rand_range(1, 3);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int get_stack(int round) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int lower_rounds[] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		1, 1, 1, 2, 2,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int mid_rounds[] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		1, 1, 1, 1, 1, 1, 1, 1, 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		2, 2, 2, 2, 2, 2, 2, 2, 2,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		2, 2, 2, 2, 2, 3, 3, 3, 3,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		3, 3, 3, 3, 3, 3, 4, 4, 4,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int mid_rounds2[] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		2, 2, 2, 3, 3, 3, 3, 3, 3,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		4, 4, 4, 4, 4, 4, 4, 5, 5,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		5, 5, 6, 6, 6, 7, 7, 8, 9</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 10) return lower_rounds[rand_range(0, ARRLEN(lower_rounds))];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 35) return mid_rounds[rand_range(0, ARRLEN(mid_rounds))];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 60) return mid_rounds2[rand_range(0, ARRLEN(mid_rounds2))];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return rand_range(5, 20);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int get_to_spawn(int round) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int ret = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (round &lt;= 3) ret = (round + 1) * 4 + rand_range(0, 2);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	else if (round &lt;= 20) ret = round * 3 + rand_range(0, 5);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	else if (round &lt;= 40) ret = 2 * MAX_ENEMIES / 3 + rand_range(-5, 5);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	else ret =  7 * MAX_ENEMIES / 8 + rand_range(-5, 5);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return ret &gt; MAX_ENEMIES - 20 ? MAX_ENEMIES - 20 : ret;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int spawn_enemies(struct enemies * enemies, char grid[X][Y], int round) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (enemies-&gt;last_round != round) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies-&gt;spawned = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies-&gt;killed = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies-&gt;last_round = round;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies-&gt;to_spawn = get_to_spawn(round);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int deaths = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	// advance all enemies</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	// iterate backward so that popping doesn&#39;t mess up the iteration</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = enemies-&gt;idx - 1; i &gt;= 0; i--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (enemies-&gt;enemies[i].count == 0) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (ticks % enemies-&gt;enemies[i].ticks != 0) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int x = enemies-&gt;enemies[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int y = enemies-&gt;enemies[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int c = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (c &amp; CELL_PATH) switch (CELL_PATH_TO_INT(c)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case CELL_PATH_UP:    y--; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case CELL_PATH_DOWN:  y++; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case CELL_PATH_LEFT:  x--; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case CELL_PATH_RIGHT: x++; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies-&gt;enemies[i].x = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies-&gt;enemies[i].y = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (x &gt;= X || y &gt;= Y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			enemies-&gt;killed += enemies-&gt;enemies[i].count;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			deaths += enemies-&gt;enemies[i].count;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			enemies_pop(enemies, i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (enemies-&gt;spawned &gt;= enemies-&gt;to_spawn) return deaths;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int spawn_rate = get_spawn_rate(round);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int speed = get_speed(round);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int stack = get_stack(round);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (ticks % spawn_rate == 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies_push(enemies, enemies-&gt;spawnx, enemies-&gt;spawny, stack, speed);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return deaths;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int find_nearest_enemy(struct enemies * enemies, int x, int y, int rad) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (enemies-&gt;idx == 0) return -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int nearestx = X + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int nearesty = Y + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int nearestid = -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; enemies-&gt;idx; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ex = enemies-&gt;enemies[i].x - x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ey = enemies-&gt;enemies[i].y - y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (ex*ex + ey*ey &gt; rad*rad) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (ex*ex + ey*ey &lt; nearestx*nearestx + nearesty*nearesty) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			nearestx = ex;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			nearesty = ey;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			nearestid = i;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return nearestid;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int attack_enemy(struct enemies * enemies, int id, int dmg) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int kills = enemies-&gt;enemies[id].count;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;enemies[id].count -= dmg;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (dmg &gt;= kills) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enemies_pop(enemies, id);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} else kills = dmg;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enemies-&gt;killed += kills;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return kills;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int splash_enemies(struct enemies * enemies, int x, int y, int rad, int dmg) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int kills = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; enemies-&gt;idx; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ex = enemies-&gt;enemies[i].x - x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ey = enemies-&gt;enemies[i].y - y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (ex*ex + ey*ey &gt; rad*rad) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		kills += attack_enemy(enemies, i, dmg);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return kills;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int run_turrets(struct turrets * spawned, struct enemies * enemies, char grid[X][Y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int kills = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; spawned-&gt;idx; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int tid = spawned-&gt;spawned[i].id;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int tx = spawned-&gt;spawned[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ty = spawned-&gt;spawned[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int radius = spawned-&gt;spawned[i].radius;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int damage = spawned-&gt;spawned[i].damage;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int rsplash = spawned-&gt;spawned[i].rsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int dsplash = spawned-&gt;spawned[i].dsplash;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (ticks % spawned-&gt;spawned[i].ticks != 0) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int nearest = find_nearest_enemy(enemies, tx, ty, radius);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (nearest &lt; 0) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int nx = enemies-&gt;enemies[nearest].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ny = enemies-&gt;enemies[nearest].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		// damage animation</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(ny + 1, nx + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addch(grid_getc(grid, nx, ny));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		napms(ATTACK_ANIMATION_DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int just_killed = attack_enemy(enemies, nearest, damage);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (rsplash &gt; 0 &amp;&amp; dsplash &gt; 0)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			just_killed += splash_enemies(enemies, nx, ny, rsplash, dsplash);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		kills += just_killed;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (spawned-&gt;spawned[i].stack &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			spawned-&gt;spawned[i].stack -= just_killed;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (spawned-&gt;spawned[i].stack &lt;= 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				turrets_pop(spawned, grid, tx, ty, i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		spawned-&gt;spawned[i].kills += just_killed;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return kills;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>bool no_enemies(struct enemies * enemies) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return enemies-&gt;killed &gt;= enemies-&gt;to_spawn;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int main(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(SEED);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	initscr();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	noecho();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, TRUE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mousemask(BUTTON1_CLICKED, NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	use_default_colors();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	start_color();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(RED, COLOR_RED, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(GREEN, COLOR_GREEN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(YELLOW, COLOR_YELLOW, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(BLUE, COLOR_BLUE, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(MAGENTA, COLOR_MAGENTA, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(CYAN, COLOR_CYAN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		char grid[X][Y] = {};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct enemies enemies = {};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct turrets spawned_turrets = {};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int cash = STARTING_CASH;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int lives = STARTING_LIVES;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int round = STARTING_ROUND;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int score = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		generate_path(grid, &amp;enemies);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		bool paused = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int done = RUNNING;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (!done) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (!paused) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int deaths = spawn_enemies(&amp;enemies, grid, round);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				lives -= deaths;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (no_enemies(&amp;enemies)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					round++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (lives &lt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					done = GAME_OVER;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int killed = run_turrets(&amp;spawned_turrets, &amp;enemies, grid);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (killed &gt;= 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					cash += killed;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					score += killed;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			draw_grid(grid);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			draw_enemies(&amp;enemies);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			draw_shop(cash);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(Y + 2, 0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;Round: %d\n&#34;, round);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;Lives: %d\n&#34;, lives);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;Cash: %d\n&#34;, cash);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;Score: %d\n&#34;, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(Y + 2, X + 2 - 9);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;q to quit&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(Y + 3, X + 2 - 14);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (paused) addstr(&#34; Any to resume&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			else addstr(&#34;Space to pause&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			switch (getch()) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39;q&#39;: done = QUIT; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39; &#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					paused = !paused;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_MOUSE:;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					MEVENT e;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (getmouse(&amp;e) != OK) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int id = yx_to_shop_id(e.y, e.x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (id &gt;= 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int cost = try_purchase(grid, id, cash, &amp;spawned_turrets);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (cost &lt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							move(Y/2 + 1, X/2 + 1 - 9);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							addstr(&#34;Insufficient Funds&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							napms(500);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						} else {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							cash -= cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					} else {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int tid = -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						for (int i = 0; i &lt; spawned_turrets.idx; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							x = spawned_turrets.spawned[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							y = spawned_turrets.spawned[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							if (x != e.x - 1 &amp;&amp; y != e.y - 1) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							tid = i;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (tid &gt;= 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							int cost = try_upgrade(tid, cash, &amp;spawned_turrets, grid);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							cash -= cost;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							// turret was sold, remove it</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							if (cost &lt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								turrets_pop(&amp;spawned_turrets, grid, x, y, tid);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case ERR: break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				default:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (paused) paused = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			ticks++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (done) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case QUIT: goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case GAME_OVER:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y/2 + 1, X/2 + 1 - 12);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;You ran out of lives :(&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y/2 + 2, X/2 + 1 - 12);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				printw(&#34;Final Score: %9d &#34;, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y/2 + 3, X/2 + 1 - 14);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;Any to play again, q to quit&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		timeout(-1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (getch() == &#39;q&#39;) goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		timeout(DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	terminate:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, FALSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	echo();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	endwin();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Wed, 04 Jun 2025 02:04:14 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/92103382d644ba153562fc3023adb4775fc55186</link>
<title>Add tetris
</title>
<guid>9210338
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">92103382d644ba153562fc3023adb4775fc55186</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Sat Oct 14 15:06:10 2023 +0000</span>

<span class="git-message-line">    Add tetris</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/tetris/README.md</span> <span class="git-file-b">b/tetris/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">c868b0c</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">tetris/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+117</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Tetris</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Classic Tetris.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* Left/right arrow keys to move left or right.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* Up arrow key to rotate tetromino. </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* Down arrow key to force one block down.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* Space to immediately drop tetromino.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* q to quit.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>## Config</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `X`: Integer, number of columns</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `Y`: Integer, number of rows</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `HIGHLIGHT`: Either true/false, whether or not to highlight blocks</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `SEED`: Integer, specify PRNG seed</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `GRAVITY`: Integer, specify initial gravity in milliseconds</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/tetris/tetris.c</span> <span class="git-file-b">b/tetris/tetris.c</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">dd43ed1</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">tetris/tetris.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+1407</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;sys/time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef X</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X 10</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* X */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef Y</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y 20</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* Y */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef HIGHLIGHT</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define HIGHLIGHT false</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* HIGHLIGHT */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef SEED</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SEED time(NULL)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* SEED */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef GRAVITY</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define GRAVITY 750</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* GRAVITY */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* END CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define TSTOMS(TS) ((TS.tv_sec * 1000000 + TS.tv_nsec / 1000) / 1000)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct coord {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum tetromino {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	EMPTY,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TET_Q, /* SQUARE */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TET_I,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TET_L,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TET_J,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TET_S,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TET_Z,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TET_T,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	LAST,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum color {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RED = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GREEN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	YELLOW,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	BLUE,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	MAGENTA,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CYAN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	WHITE</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum state {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RUNNING,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GAME_OVER,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	QUIT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* (0,0) is the center of the top row */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct coord tetrominos[][4] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TET_Q] = {{0, 0}, {1, 0}, {0, 1}, {1, 1}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TET_I] = {{0, 1}, {0, 0}, {0, 2}, {0, 3}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TET_L] = {{0, 1}, {0, 0}, {0, 2}, {1, 2}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TET_J] = {{0, 1}, {0, 0}, {0, 2}, {-1,2}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TET_S] = {{0, 0}, {1, 0}, {0, 1}, {-1,1}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TET_Z] = {{0, 0}, {-1,0}, {0, 1}, {1, 1}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TET_T] = {{0, 0}, {-1,0}, {1, 0}, {0, 1}},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>bool valid(int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return x &gt;= 0 &amp;&amp; y &gt;= 0 &amp;&amp; x &lt; X &amp;&amp; y &lt; Y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void cptogrid(struct coord tet[4], enum tetromino t, enum tetromino grid[X][Y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int x = tet[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int y = tet[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		grid[x][y] = t;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>bool down1(struct coord tet[4], enum tetromino t,  enum tetromino grid[X][Y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool active = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int nx = tet[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ny = tet[i].y + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (!valid(nx, ny) || grid[nx][ny]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			cptogrid(tet, t, grid);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			active = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (active) for (int i = 0; i &lt; 4; i++) tet[i].y++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return active;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int nlen(int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int l = 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while ((n /= 10) != 0) l++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return l;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void draw_grid(enum tetromino grid[X][Y], int level, int score) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int x = 0; x &lt; X; x++) addstr(&#34;++++&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addch(&#39;+&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int cp = COLOR_PAIR((enum color)grid[x][y]);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (grid[x][y] &amp;&amp; HIGHLIGHT) cp |= A_REVERSE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (!HIGHLIGHT) addch(grid[x][y] ? &#39;#&#39; : &#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			else addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (x &lt; X - 1) addch(&#39;.&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int x = 0; x &lt; X; x++) addstr(&#34;++++&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addch(&#39;+&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mvprintw(0, 0, &#34;Level: %d&#34;, level);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mvprintw(0, X * 4 + 1 - 7 - nlen(score), &#34;Score: %d&#34;, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int main(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(SEED);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	initscr();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	noecho();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, TRUE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	use_default_colors();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	start_color();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(RED, COLOR_RED, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(GREEN, COLOR_GREEN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(YELLOW, COLOR_YELLOW, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(BLUE, COLOR_BLUE, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(MAGENTA, COLOR_MAGENTA, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(CYAN, COLOR_CYAN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(WHITE, COLOR_WHITE, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enum tetromino grid[X][Y] = {0};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int level = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int score = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int total_cleared = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		bool active = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct coord cur_tet[4];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enum tetromino tet_type;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int reftime = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		{</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			struct timespec ts;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			clock_gettime(CLOCK_MONOTONIC, &amp;ts);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			reftime = TSTOMS(ts);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enum state done = RUNNING;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (!done) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (!active) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int t = rand() % ((LAST-1) - (EMPTY+1) + 1) + (EMPTY+1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				tet_type = t;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int y = tetrominos[t][i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int x = tetrominos[t][i].x + X / 2;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						done = GAME_OVER;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						goto finished;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					cur_tet[i].x = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					cur_tet[i].y = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				active = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			draw_grid(grid, level, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// draw current tetromino</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int cp = COLOR_PAIR((enum color)tet_type);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (HIGHLIGHT) cp |= A_REVERSE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int x = cur_tet[i].x * 4 + 2;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int y = cur_tet[i].y + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (!HIGHLIGHT) mvaddch(y, x, &#39;@&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				else mvaddch(y, x, &#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// draw tetromino shadow</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int x_lo = X;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int x_hi = -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int x = cur_tet[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (x &gt; x_hi) x_hi = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (x &lt; x_lo) x_lo = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			x_lo = x_lo * 4 + 2;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			x_hi = x_hi * 4 + 2;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = x_lo; i &lt;= x_hi; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int y = Y + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				mvaddch(y, i, &#39;_&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			switch (getch()) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_DOWN:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					active = down1(cur_tet, tet_type, grid);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (active) score++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_LEFT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					{</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					bool can_move = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int x = cur_tet[i].x - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int y = cur_tet[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (!valid(x, y) || grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							can_move = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (!can_move) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; 4; i++) cur_tet[i].x--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_RIGHT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					{</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					bool can_move = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int x = cur_tet[i].x + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int y = cur_tet[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (!valid(x, y) || grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							can_move = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (!can_move) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; 4; i++) cur_tet[i].x++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_UP:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					// squares don&#39;t really rotate</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (tet_type == TET_Q) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					/* x&#39; = y_c - y + x_c</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					 * y&#39; = x - x_c + y_c</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					 */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					bool can_rotate = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					struct coord ncoords[4];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int x_c = cur_tet[0].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int y_c = cur_tet[0].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int x = y_c - cur_tet[i].y + x_c;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int y = cur_tet[i].x - x_c + y_c;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						ncoords[i] = (struct coord){x, y};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (!valid(ncoords[i].x, ncoords[i].y) || grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							can_rotate = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (!can_rotate) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; 4; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						cur_tet[i] = ncoords[i];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39; &#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					while ((active = down1(cur_tet, tet_type, grid)))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39;q&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					done = QUIT;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					goto finished;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case ERR:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				deafult: break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			struct timespec ts;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			clock_gettime(CLOCK_MONOTONIC, &amp;ts);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int dt = TSTOMS(ts) - reftime;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (dt &gt;= GRAVITY - ((GRAVITY/10) * level)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				reftime = TSTOMS(ts);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				active = down1(cur_tet, tet_type, grid);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (!active) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int first_row = -1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int rows_cleared = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int y = Y - 1; y &gt;= 0; y--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					bool full_row = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (!grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							full_row = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (full_row) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						draw_grid(grid, level, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (first_row &lt; 0) first_row = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attron(COLOR_PAIR(GREEN) | A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						for (int x = 1; x &lt; 4 * X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							mvaddch(y + 1, x, &#39;#&#39;);	</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attroff(COLOR_PAIR(GREEN) | A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							grid[x][y] = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						napms(1000);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						rows_cleared++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						total_cleared++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (total_cleared &gt;= 10) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							level++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							total_cleared -= 10;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (rows_cleared &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int y = first_row - rows_cleared; y &gt;= 0; y--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							grid[x][y + rows_cleared] = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				switch (rows_cleared) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case 1:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 40 * (level + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case 2:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 100 * (level + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case 3:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 300 * (level + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case 4:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 1200 * (level + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		finished:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (done) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case GAME_OVER:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move((Y + 1) / 2, (X * 4 + 2) / 2 - 5);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (!HIGHLIGHT) attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;Game over&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move((Y + 1) / 2 + 1, (X * 4 + 2) / 2 - 13);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;Press any key to continue&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (!HIGHLIGHT) attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				timeout(-1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				getch();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				timeout(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case QUIT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	terminate:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, FALSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	echo();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	endwin();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Sat, 14 Oct 2023 20:06:10 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/4dddf2f885015bb03e70fa1d577e322c9dac1d91</link>
<title>Re-add global include of time.h
</title>
<guid>4dddf2f
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">4dddf2f885015bb03e70fa1d577e322c9dac1d91</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Sun Aug 13 12:42:23 2023 +0000</span>

<span class="git-message-line">    Re-add global include of time.h</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/mines/mines.c</span> <span class="git-file-b">b/mines/mines.c</span>
<span class="git-index">index</span> <span class="git-index-old">edeac3e</span>..<span class="git-index-new">9f6ed07</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-13</span> <span class="git-hunk-new">+14</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;ncurses.h&gt;</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-247</span> <span class="git-hunk-new">+256</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif /* HIGHLIGHT_SQUARES */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#ifndef SEED</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>#include &lt;time.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define SEED time(NULL)</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif /* SEED */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* END CONFIG */</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Sun, 13 Aug 2023 17:42:23 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/fcfd46fba8b4060bc7b1cc43f42807395e65e3d0</link>
<title>Add SEED definition for games utilizing rand()
</title>
<guid>fcfd46f
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">fcfd46fba8b4060bc7b1cc43f42807395e65e3d0</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Sun Aug 13 12:32:55 2023 +0000</span>

<span class="git-message-line">    Add SEED definition for games utilizing rand()</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/README.md</span> <span class="git-file-b">b/bejeweled/README.md</span>
<span class="git-index">index</span> <span class="git-index-old">e92d5b1</span>..<span class="git-index-new">cb68527</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">bejeweled/README.md</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-113</span> <span class="git-hunk-new">+114</span> <span class="git-hunk">@@</span><span class="git-function-context"> Tile match game. Click on a tile to select it, click on another tile directly ad</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `MATCH_DELAY`: The delay after a successful match</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `BAD_MATCH_DELAY`: The delay after a non successful match</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `GRID`: Either `true` or `false`, whether or not to show the grid outline</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `SEED`: Seed value for PRNG</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/bejeweled.c</span> <span class="git-file-b">b/bejeweled/bejeweled.c</span>
<span class="git-index">index</span> <span class="git-index-old">a1aecde</span>..<span class="git-index-new">7d624a2</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-19</span> <span class="git-hunk-new">+19</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>#include &lt;time.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* BEGIN CONFIG */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#ifndef HIGHLIGHT</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define HIGHLIGHT false</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif /* HIGHLIGHT */</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-326</span> <span class="git-hunk-new">+3212</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define GRID true</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif /* GRID */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef SEED</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SEED time(NULL)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* SEED */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* END CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define SQUARE_C   &#39;#&#39;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define CIRCLE_C   &#39;O&#39;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define TRIANGLE_C &#39;A&#39;</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-2307</span> <span class="git-hunk-new">+2367</span> <span class="git-hunk">@@</span><span class="git-function-context"> void sort(struct coord s[], int n) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>int main(void) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(SEED);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	initscr();</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	noecho();</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/flappy/README.md</span> <span class="git-file-b">b/flappy/README.md</span>
<span class="git-index">index</span> <span class="git-index-old">9ab5ea0</span>..<span class="git-index-new">b2387a6</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">flappy/README.md</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">flappy/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-13</span> <span class="git-hunk-new">+17</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span># Flappy</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>Flappy bird. Space to flap, otherwise fall. Avoid the pipes. No configuration possible.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Flappy bird. Space to flap, otherwise fall. Avoid the pipes.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>## Config</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `SEED`: Seed value for PRNG</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/flappy/flappy.c</span> <span class="git-file-b">b/flappy/flappy.c</span>
<span class="git-index">index</span> <span class="git-index-old">f0ba557</span>..<span class="git-index-new">8c89f57</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">flappy/flappy.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">flappy/flappy.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-19</span> <span class="git-hunk-new">+116</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>#include &lt;time.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef SEED</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SEED time(NULL)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* SEED */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* END CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define X COLS</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define Y LINES</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-457</span> <span class="git-hunk-new">+527</span> <span class="git-hunk">@@</span><span class="git-function-context"> int rrand(int hi, int lo) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>int main() {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(SEED);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	initscr();</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	noecho();</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/mines/README.md</span> <span class="git-file-b">b/mines/README.md</span>
<span class="git-index">index</span> <span class="git-index-old">b845462</span>..<span class="git-index-new">14b4203</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">mines/README.md</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">mines/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-83</span> <span class="git-hunk-new">+84</span> <span class="git-hunk">@@</span><span class="git-function-context"> Minesweeper. Left click reveals a square, right click flags it. `f` toggles &#34;fla</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `X`: Minefield width</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `MINES`: Number of mines</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `HIGHLIGHT_SQUARES`: Either `true` or `false`. Enables or disables highlighting of number squares</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `SEED`: Seed value for PRNG</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/mines/mines.c</span> <span class="git-file-b">b/mines/mines.c</span>
<span class="git-index">index</span> <span class="git-index-old">c8e52a0</span>..<span class="git-index-new">edeac3e</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-16</span> <span class="git-hunk-new">+15</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>#include &lt;time.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;string.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-236</span> <span class="git-hunk-new">+2211</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>// reverse the highlighting of squares</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define HIGHLIGHT_SQUARES true</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif /* HIGHLIGHT_SQUARES */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef SEED</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SEED time(NULL)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* SEED */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* END CONFIG */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-2097</span> <span class="git-hunk-new">+2137</span> <span class="git-hunk">@@</span><span class="git-function-context"> int nlen(int n) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>int main(void) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(SEED);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	initscr();</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	noecho();</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/snake/README.md</span> <span class="git-file-b">b/snake/README.md</span>
<span class="git-index">index</span> <span class="git-index-old">b2b84db</span>..<span class="git-index-new">676112d</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">snake/README.md</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">snake/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-93</span> <span class="git-hunk-new">+94</span> <span class="git-hunk">@@</span><span class="git-function-context"> Classic snake game. Move with arrow keys, eat the apples to grow longer. Space t</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `X`: Width of play area</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `DELAY`: The delay, in milliseconds, between each movement</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `WALLS`: Either `true` or `false`. If `true`, enable solid walls (game over on crash). Otherwise, allow snake to teleport through walls.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `SEED`: Seed value for PRNG</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/snake/snake.c</span> <span class="git-file-b">b/snake/snake.c</span>
<span class="git-index">index</span> <span class="git-index-old">3c050d9</span>..<span class="git-index-new">58672d4</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">snake/snake.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">snake/snake.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-14</span> <span class="git-hunk-new">+13</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>#include &lt;time.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdio.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#include &lt;ncurses.h&gt;</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-246</span> <span class="git-hunk-new">+2311</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>// enable or disable solid walls</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define WALLS false</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif /* WALLS */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef SEED</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SEED time(NULL)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* SEED */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* END CONFIG */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-957</span> <span class="git-hunk-new">+997</span> <span class="git-hunk">@@</span><span class="git-function-context"> int nlen(int n) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>int main() {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(SEED);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	initscr();</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	noecho();</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Sun, 13 Aug 2023 17:32:55 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/7c4eb0c0e304da847a7001008ce45b7ce7766ddd</link>
<title>Add delay after game over
</title>
<guid>7c4eb0c
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">7c4eb0c0e304da847a7001008ce45b7ce7766ddd</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Sun Aug 06 19:35:08 2023 +0000</span>

<span class="git-message-line">    Add delay after game over</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/flappy/flappy.c</span> <span class="git-file-b">b/flappy/flappy.c</span>
<span class="git-index">index</span> <span class="git-index-old">f499531</span>..<span class="git-index-new">f0ba557</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">flappy/flappy.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">flappy/flappy.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-1636</span> <span class="git-hunk-new">+1637</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main() {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				attroff(A_REVERSE);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				refresh();</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				napms(500);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				if (getch() == &#39;q&#39;) goto terminate;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				break;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			default: break;</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Mon, 07 Aug 2023 00:35:08 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/4cd0b77600fadc3932f56561879e095a6e8142dd</link>
<title>fix cascading match recognition
</title>
<guid>4cd0b77
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">4cd0b77600fadc3932f56561879e095a6e8142dd</span> <span class="git-refs"></span>
Author: Raniconduh &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Sat Aug 05 14:25:53 2023 +0000</span>

<span class="git-message-line">    fix cascading match recognition</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/bejeweled.c</span> <span class="git-file-b">b/bejeweled/bejeweled.c</span>
<span class="git-index">index</span> <span class="git-index-old">b62bb8b</span>..<span class="git-index-new">a1aecde</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-3786</span> <span class="git-hunk-new">+3787</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>								}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>								if (r &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									nc += r;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>									first = invc;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>									makepop(rc, r);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>									display();</span>
</div></pre>
]]></description>
<author>
	Raniconduh
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Sat, 05 Aug 2023 19:25:53 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/f76f7745fd9b85a1cfb581e83ed21ce78392250f</link>
<title>Allow clearing in 2 dimensions if the gem used for clearing is a corner piece
</title>
<guid>f76f774
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">f76f7745fd9b85a1cfb581e83ed21ce78392250f</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Sat Aug 05 13:58:21 2023 +0000</span>

<span class="git-message-line">    Allow clearing in 2 dimensions if the gem used for clearing is a corner piece</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/README.md</span> <span class="git-file-b">b/bejeweled/README.md</span>
<span class="git-index">index</span> <span class="git-index-old">2e412d0</span>..<span class="git-index-new">e92d5b1</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">bejeweled/README.md</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-103</span> <span class="git-hunk-new">+104</span> <span class="git-hunk">@@</span><span class="git-function-context"> Tile match game. Click on a tile to select it, click on another tile directly ad</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `SHIFT_DELAY`: The delay between shifts of tiles above each other when a match is made</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `MATCH_DELAY`: The delay after a successful match</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>* `BAD_MATCH_DELAY`: The delay after a non successful match</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `GRID`: Either `true` or `false`, whether or not to show the grid outline</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/bejeweled.c</span> <span class="git-file-b">b/bejeweled/bejeweled.c</span>
<span class="git-index">index</span> <span class="git-index-old">7e00055</span>..<span class="git-index-new">b62bb8b</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-286</span> <span class="git-hunk-new">+2810</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define BAD_MATCH_DELAY 750</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif /* BAD_MATCH_DELAY */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef GRID</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define GRID true</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* GRID */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define SQUARE_C   &#39;#&#39;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define CIRCLE_C   &#39;O&#39;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define TRIANGLE_C &#39;A&#39;</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-11711</span> <span class="git-hunk-new">+12114</span> <span class="git-hunk">@@</span><span class="git-function-context"> void newgem(struct coord c) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>void display(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	erase();</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (GRID) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} else addch(&#39;\n&#39;);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>			addstr(&#34;| &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (GRID) addstr(&#34;| &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			else addstr(&#34;  &#34;);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			int cp = GETCOLOR(GETGEM(grid[x][y]));</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			bool reverse = false;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			if (HIGHLIGHT) reverse = true;;</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-1339</span> <span class="git-hunk-new">+14011</span> <span class="git-hunk">@@</span><span class="git-function-context"> void display(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			attroff(cp);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			addch(&#39; &#39;);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		}</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>		addstr(&#34;|\n&#34;);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>		for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>		addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (GRID) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;|\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		} else addstr(&#34;\n\n&#34;);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	attron(A_REVERSE);</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-29427</span> <span class="git-hunk-new">+30335</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					struct coord hc[X];</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					int h = checkhoriz(x, y, hc);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					struct coord rc[Y + X];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int r = 0;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					if (v &gt;= 3) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						first = invc;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						sort(vc, v);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						makepop(vc, v);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						display();</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						napms(MATCH_DELAY);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						shift(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						while (v--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							rc[r] = vc[r];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							r++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						score += 1000;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						v -= 3;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						score += 2000*v;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>					} else if (h &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (h &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int i = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						while (h--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							rc[r] = hc[i];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							i++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							r++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (r &gt;= 3) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						first = invc;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						makepop(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						makepop(rc, r);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						display();</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						napms(MATCH_DELAY);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						shift(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						shift(rc, r);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						score += 1000;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						h -= 3;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>						score += 2000*h;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						r -= 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 2000*r*r;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					} else {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						// no matches</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						struct coord c = first;</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-34129</span> <span class="git-hunk-new">+35835</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>								int v = checkvert(nx, ny, vc);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>								struct coord hc[X];</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>								int h = checkhoriz(nx, ny, hc);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								struct coord rc[Y + X];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								int r = 0;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>								if (v &gt;= 3) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									nc += v;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>									sort(vc, v);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									makepop(vc, v);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									display();</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									napms(750);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									shift(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									while (v--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>										rc[r] = vc[r];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>										r++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									score += 1000;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									v -= 3;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									score += 2000*v;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>								} else if (h &gt;= 3) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									nc += h;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								if (h &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									int i = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									while (h--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>										rc[r] = hc[i];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>										i++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>										r++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									makepop(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								if (r &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									first = invc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									makepop(rc, r);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>									display();</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									napms(750);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									shift(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									napms(MATCH_DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									shift(rc, r);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>									score += 1000;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									h -= 3;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>									score += 2000*h;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									r -= 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									score += 2000*r*r;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>								}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>							}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Sat, 05 Aug 2023 18:58:21 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/29c192d50ba2887fafcd7c6dc66e1dadf6223e47</link>
<title>replace inline function with macros
</title>
<guid>29c192d
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">29c192d50ba2887fafcd7c6dc66e1dadf6223e47</span> <span class="git-refs"></span>
Author: Raniconduh &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Fri Aug 04 10:12:48 2023 +0000</span>

<span class="git-message-line">    replace inline function with macros</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/bejeweled.c</span> <span class="git-file-b">b/bejeweled/bejeweled.c</span>
<span class="git-index">index</span> <span class="git-index-old">bca6b21</span>..<span class="git-index-new">7e00055</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-416</span> <span class="git-hunk-new">+419</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define ISPOP(g) (g &amp; POP)</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define GETGEM(g) (g &amp; 0xFF)</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define GETCOLOR(g) (COLOR_PAIR(g + 1))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define VALID(x, y) (x &lt; X &amp;&amp; y &lt; Y &amp;&amp; x &gt;= 0 &amp;&amp; y &gt;= 0)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>enum gem {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	SQUARE,</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-8316</span> <span class="git-hunk-new">+866</span> <span class="git-hunk">@@</span><span class="git-function-context"> struct coord first = {-1, -1};</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>int score = 0;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>inline int getcolor(enum gem g) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	return COLOR_PAIR(g + 1);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>}</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>inline bool valid(int x, int y) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	return x &lt; X &amp;&amp; y &lt; Y &amp;&amp; x &gt;= 0 &amp;&amp; y &gt;= 0;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>}</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>int abs(int n) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	return n &lt; 0 ? -n : n;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>}</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-1168</span> <span class="git-hunk-new">+1098</span> <span class="git-hunk">@@</span><span class="git-function-context"> void newgem(struct coord c) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	do {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		done = true;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		grid[x][y] = rand() % LAST_GEM;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>		if (valid(x - 1, y) &amp;&amp; grid[x][y] == grid[x - 1][y]) done = false;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>		if (valid(x, y - 1) &amp;&amp; grid[x][y] == grid[x][y - 1]) done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (VALID(x - 1, y) &amp;&amp; grid[x][y] == grid[x - 1][y]) done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (VALID(x, y - 1) &amp;&amp; grid[x][y] == grid[x][y - 1]) done = false;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	} while (!done);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-1297</span> <span class="git-hunk-new">+1227</span> <span class="git-hunk">@@</span><span class="git-function-context"> void display(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			addstr(&#34;| &#34;);</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>			int cp = getcolor(GETGEM(grid[x][y]));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int cp = GETCOLOR(GETGEM(grid[x][y]));</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			bool reverse = false;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			if (HIGHLIGHT) reverse = true;;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			if (first.x == x &amp;&amp; first.y == y) reverse = !reverse;</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-16012</span> <span class="git-hunk-new">+15312</span> <span class="git-hunk">@@</span><span class="git-function-context"> int checkvert(int x, int y, struct coord vc[]) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	int s = 0;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	int n = y;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	while (valid(x, n) &amp;&amp; grid[x][n] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (VALID(x, n) &amp;&amp; grid[x][n] == grid[x][y]) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		vc[s++] = (struct coord){x, n};</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		n++;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	n = y - 1;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	while (valid(x, n) &amp;&amp; grid[x][n] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (VALID(x, n) &amp;&amp; grid[x][n] == grid[x][y]) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		vc[s++] = (struct coord){x, n};</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		n--;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	}</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-17812</span> <span class="git-hunk-new">+17112</span> <span class="git-hunk">@@</span><span class="git-function-context"> int checkhoriz(int x, int y, struct coord hc[]) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	int s = 0;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	int n = x;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	while (valid(n, y) &amp;&amp; grid[n][y] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (VALID(n, y) &amp;&amp; grid[n][y] == grid[x][y]) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		hc[s++] = (struct coord){n, y};</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		n++;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	n = x - 1;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	while (valid(n, y) &amp;&amp; grid[n][y] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (VALID(n, y) &amp;&amp; grid[n][y] == grid[x][y]) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		hc[s++] = (struct coord){n, y};</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>		n--;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	}</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-26812</span> <span class="git-hunk-new">+26112</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					MEVENT e;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					if (getmouse(&amp;e) != OK) break;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>					// get and validate x and y coords</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					// get and VALIDate x and y coords</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					if (e.x % 4 == 0 || e.y % 2 == 0) break;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					int x = (e.x - 2) / 4;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					int y = (e.y - 1) / 2;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					if ((e.x - 1) % 4 == 0) x++;</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>					if (!valid(x, y)) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (!VALID(x, y)) break;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					if (first.x == -1 &amp;&amp; first.y == -1) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>						first.x = x;</span>
</div></pre>
]]></description>
<author>
	Raniconduh
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Fri, 04 Aug 2023 15:12:48 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/59c8971cfb441034c4e8e3ccfa5611a65ea008e6</link>
<title>Add bejeweled
</title>
<guid>59c8971
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">59c8971cfb441034c4e8e3ccfa5611a65ea008e6</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Aug 03 23:11:18 2023 +0000</span>

<span class="git-message-line">    Add bejeweled</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/README.md</span> <span class="git-file-b">b/bejeweled/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">2e412d0</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+112</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Bejeweled</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Tile match game. Click on a tile to select it, click on another tile directly adjacent to swap the two. Click on a selected tile to deselect it. Press &#39;r&#39; to restart the game with a new board.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>## Config</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `X`: Width of the board</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `Y`: Height of the board</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `HIGHLIGHT`: Either `true` or `false`, whether or not to highlight tiles</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `SHIFT_DELAY`: The delay between shifts of tiles above each other when a match is made</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `MATCH_DELAY`: The delay after a successful match</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `BAD_MATCH_DELAY`: The delay after a non successful match</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/bejeweled/bejeweled.c</span> <span class="git-file-b">b/bejeweled/bejeweled.c</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">bca6b21</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">bejeweled/bejeweled.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+1389</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef HIGHLIGHT</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define HIGHLIGHT false</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* HIGHLIGHT */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef X</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* X */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef Y</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* Y */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef SHIFT_DELAY</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SHIFT_DELAY 25</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* SHIFT_DELAY */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef MATCH_DELAY</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define MATCH_DELAY 750</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* MATCH_DELAY */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef BAD_MATCH_DELAY</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define BAD_MATCH_DELAY 750</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* BAD_MATCH_DELAY */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define SQUARE_C   &#39;#&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define CIRCLE_C   &#39;O&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define TRIANGLE_C &#39;A&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define RHOMBUS_C  &#39;=&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define DIAMOND_C  &#39;m&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define HEXAGON_C  &#39;&amp;&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define POP (1&lt;&lt;9)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define ISPOP(g) (g &amp; POP)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define GETGEM(g) (g &amp; 0xFF)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum gem {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	SQUARE,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CIRCLE,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	TRIANGLE,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RHOMBUS,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	DIAMOND,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	HEXAGON,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	LAST_GEM</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RED = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GREEN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	YELLOW,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	BLUE,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	MAGENTA,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CYAN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct coord {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>char gemc[] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[SQUARE]   = SQUARE_C,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[CIRCLE]   = CIRCLE_C,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[TRIANGLE] = TRIANGLE_C,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[RHOMBUS]  = RHOMBUS_C,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[DIAMOND]  = DIAMOND_C,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	[HEXAGON]  = HEXAGON_C,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>const struct coord invc = {-1, -1};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum gem grid[X][Y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct coord first = {-1, -1};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int score = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>inline int getcolor(enum gem g) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return COLOR_PAIR(g + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>inline bool valid(int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return x &lt; X &amp;&amp; y &lt; Y &amp;&amp; x &gt;= 0 &amp;&amp; y &gt;= 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int abs(int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return n &lt; 0 ? -n : n;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int nlen(int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int len = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (n &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		len++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n /= 10;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return len;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void newgem(struct coord c) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x = c.x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int y = c.y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool done;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	do {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		grid[x][y] = rand() % LAST_GEM;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (valid(x - 1, y) &amp;&amp; grid[x][y] == grid[x - 1][y]) done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (valid(x, y - 1) &amp;&amp; grid[x][y] == grid[x][y - 1]) done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} while (!done);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void display(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;| &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int cp = getcolor(GETGEM(grid[x][y]));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			bool reverse = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (HIGHLIGHT) reverse = true;;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (first.x == x &amp;&amp; first.y == y) reverse = !reverse;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (ISPOP(grid[x][y])) reverse = !reverse;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (reverse) cp |= A_REVERSE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(gemc[GETGEM(grid[x][y])]);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;|\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(Y*2+1, (X*4+2)/2 - (nlen(score) + 8)/2);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	printw(&#34;Score: %d&#34;, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	move(Y*2+1, 0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addstr(&#34;r to restart&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int checkvert(int x, int y, struct coord vc[]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int s = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int n = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (valid(x, n) &amp;&amp; grid[x][n] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		vc[s++] = (struct coord){x, n};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	n = y - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (valid(x, n) &amp;&amp; grid[x][n] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		vc[s++] = (struct coord){x, n};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return s;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int checkhoriz(int x, int y, struct coord hc[]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int s = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int n = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (valid(n, y) &amp;&amp; grid[n][y] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		hc[s++] = (struct coord){n, y};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	n = x - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (valid(n, y) &amp;&amp; grid[n][y] == grid[x][y]) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		hc[s++] = (struct coord){n, y};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return s;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void shift(struct coord s[], int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; n; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct coord sc = s[i];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int n = sc.y; n &gt; 0; n--) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			grid[sc.x][n] = grid[sc.x][n - 1];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			display();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			napms(SHIFT_DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		newgem((struct coord){sc.x, 0});</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void makepop(struct coord s[], int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; n; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct coord c = s[i];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		grid[c.x][c.y] |= POP;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void sort(struct coord s[], int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; n; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int j = 0; j &lt; n - 1; j++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (s[j].y &gt; s[j + 1].y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				struct coord t = s[j];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				s[j] = s[j + 1];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				s[j + 1] = t;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int main(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	initscr();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	noecho();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, TRUE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mousemask(BUTTON1_CLICKED, NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	use_default_colors();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	start_color();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(RED, COLOR_RED, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(GREEN, COLOR_GREEN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(YELLOW, COLOR_YELLOW, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(BLUE, COLOR_BLUE, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(MAGENTA, COLOR_MAGENTA, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(CYAN, COLOR_CYAN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	restart:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		// generate a grid where each element is unique from its direct neighbors</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				newgem((struct coord){x, y});</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		first = invc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			display();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			switch (getch()) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39;r&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					goto restart;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_MOUSE:;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					MEVENT e;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (getmouse(&amp;e) != OK) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					// get and validate x and y coords</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (e.x % 4 == 0 || e.y % 2 == 0) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int x = (e.x - 2) / 4;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int y = (e.y - 1) / 2;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if ((e.x - 1) % 4 == 0) x++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (!valid(x, y)) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (first.x == -1 &amp;&amp; first.y == -1) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first.x = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first.y = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (first.x == x &amp;&amp; first.y == y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first = invc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (abs(first.x - x) + abs(first.y - y) &gt; 1) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first = invc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					// swap the gems and see what happens</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					enum gem t = grid[first.x][first.y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					grid[first.x][first.y] = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					grid[x][y] = t;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					struct coord vc[Y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int v = checkvert(x, y, vc);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					struct coord hc[X];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int h = checkhoriz(x, y, hc);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (v &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first = invc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						sort(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						makepop(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						display();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						napms(MATCH_DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						shift(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 1000;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						v -= 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 2000*v;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					} else if (h &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first = invc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						makepop(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						display();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						napms(MATCH_DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						shift(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 1000;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						h -= 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						score += 2000*h;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					} else {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						// no matches</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						struct coord c = first;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first.x = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first.y = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						display();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						napms(BAD_MATCH_DELAY);	</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first = c;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						enum gem t = grid[first.x][first.y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						grid[first.x][first.y] = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						grid[x][y] = t;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						first = invc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					// hacky, ugly way to clear all gems</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int nc;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					do {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nc = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						for (int nx = 0; nx &lt; X; nx++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							for (int ny = 0; ny &lt; Y; ny++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								struct coord vc[Y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								int v = checkvert(nx, ny, vc);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								struct coord hc[X];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								int h = checkhoriz(nx, ny, hc);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								if (v &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									nc += v;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									sort(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									makepop(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									display();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									napms(750);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									shift(vc, v);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									score += 1000;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									v -= 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									score += 2000*v;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								} else if (h &gt;= 3) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									nc += h;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									makepop(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									display();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									napms(750);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									shift(hc, h);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									score += 1000;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									h -= 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>									score += 2000*h;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>								}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					} while (nc != 0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39;q&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	terminate:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	echo();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	endwin();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Fri, 04 Aug 2023 04:11:18 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/aa86bc0e78768e98602181333f2cbee4aa2be20e</link>
<title>Fix random number generation
</title>
<guid>aa86bc0
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">aa86bc0e78768e98602181333f2cbee4aa2be20e</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Tue Aug 01 17:22:42 2023 +0000</span>

<span class="git-message-line">    Fix random number generation</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/flappy/flappy.c</span> <span class="git-file-b">b/flappy/flappy.c</span>
<span class="git-index">index</span> <span class="git-index-old">d1ca048</span>..<span class="git-index-new">f499531</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">flappy/flappy.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">flappy/flappy.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-407</span> <span class="git-hunk-new">+407</span> <span class="git-hunk">@@</span><span class="git-function-context"> int nlen(int n) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>int rrand(int hi, int lo) {</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	return rand() &amp; (hi - lo + 1) + lo;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return rand() % (hi - lo + 1) + lo;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Tue, 01 Aug 2023 22:22:42 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/86b274bd2f0240ff2974af483ef4e639148268f1</link>
<title>Add flappy
</title>
<guid>86b274b
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">86b274bd2f0240ff2974af483ef4e639148268f1</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Tue Aug 01 16:29:06 2023 +0000</span>

<span class="git-message-line">    Add flappy</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/flappy/README.md</span> <span class="git-file-b">b/flappy/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">9ab5ea0</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">flappy/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+13</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Flappy</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Flappy bird. Space to flap, otherwise fall. Avoid the pipes. No configuration possible.</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/flappy/flappy.c</span> <span class="git-file-b">b/flappy/flappy.c</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">d1ca048</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">flappy/flappy.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+1177</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X COLS</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y LINES</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define N_PIPES (X / 30)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define OPENING (Y / 8)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define JUMP (Y / 14)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	YELLOW = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GREEN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum state {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GAME_OVER = 0,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RUNNING = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct coord {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int nlen(int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int len = 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (n &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		len++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n /= 10;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return len;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int rrand(int hi, int lo) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return rand() &amp; (hi - lo + 1) + lo;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int main() {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	initscr();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	noecho();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	use_default_colors();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	start_color();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(YELLOW, COLOR_YELLOW, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(GREEN, COLOR_GREEN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct coord bird = {X / (N_PIPES+1), (Y - 1) / 2};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int last_movement = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct coord pipes[N_PIPES];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int i = 0; i &lt; N_PIPES; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			pipes[i] = (struct coord){X / (N_PIPES+1) + ((X / (N_PIPES+1)) * (i + 1)), rrand(Y-OPENING/2, OPENING/2)};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int curpipe = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int score = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enum state state = RUNNING;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (state == RUNNING) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(bird.y, bird.x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(COLOR_PAIR(YELLOW));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(&#39;@&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(COLOR_PAIR(YELLOW));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(COLOR_PAIR(GREEN));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = 0; i &lt; N_PIPES; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// create the top half of the pipe</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int y = 0; y &lt; pipes[i].y - OPENING / 2; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int x = -1; x &lt;= 1; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						move(y, pipes[i].x + x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						addch(&#39;#&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// bottom half</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int y = pipes[i].y + OPENING / 2; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int x = -1; x &lt;= 1; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						move(y, pipes[i].x + x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						addch(&#39;#&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(COLOR_PAIR(GREEN));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(0, 0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;Score: %d&#34;, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// check bird position</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (bird.y &gt;= Y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				state = GAME_OVER;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int px, py;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			px = pipes[curpipe].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			py = pipes[curpipe].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (bird.x &gt;= px - 1 &amp;&amp; bird.x &lt;= px + 1 &amp;&amp; (bird.y &lt; py - OPENING / 2 || bird.y &gt; py + OPENING / 2)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				state = GAME_OVER;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			} else if (bird.x == pipes[curpipe].x + 1) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				score++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				pipes[curpipe] = (struct coord){X / (N_PIPES+1) + ((X / (N_PIPES+1)) * N_PIPES), rrand(Y-OPENING/2, OPENING/2)};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				curpipe++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (curpipe &gt;= N_PIPES) curpipe = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			switch (getch()) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39; &#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					last_movement = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (bird.y == 0) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					bird.y -= JUMP;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (bird.y &lt; 0) bird.y = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39;q&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_RESIZE:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				default:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// move everything now</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			bird.y += ++last_movement / 3;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = 0; i &lt; N_PIPES; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				pipes[i].x--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			napms(100);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		timeout(-1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (state) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case GAME_OVER:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y / 2, X / 2 - 5);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;Game Over!&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y / 2 + 1, (X - nlen(score)) / 2 - 6);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				printw(&#34;Final Score: %d&#34;, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (getch() == &#39;q&#39;) goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			default: break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		timeout(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	terminate:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	echo();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	endwin();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Tue, 01 Aug 2023 21:29:06 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/c982d0d77f75ab0ae4873c2a7533b459c5cb7f6d</link>
<title>Mask only l/r click
</title>
<guid>c982d0d
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">c982d0d77f75ab0ae4873c2a7533b459c5cb7f6d</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Jul 27 23:07:29 2023 +0000</span>

<span class="git-message-line">    Mask only l/r click</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/mines/mines.c</span> <span class="git-file-b">b/mines/mines.c</span>
<span class="git-index">index</span> <span class="git-index-old">fd4adc4</span>..<span class="git-index-new">c8e52a0</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-2167</span> <span class="git-hunk-new">+2167</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main(void) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	curs_set(0);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	keypad(stdscr, TRUE);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>	mousemask(ALL_MOUSE_EVENTS, NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mousemask(BUTTON1_CLICKED | BUTTON3_CLICKED, NULL);</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	use_default_colors();</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>	start_color();</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Fri, 28 Jul 2023 04:07:29 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/4747198acc617f2e9315489b18ae693a0bd85895</link>
<title>Allow redefinition of config macros on compiler command line
</title>
<guid>4747198
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">4747198acc617f2e9315489b18ae693a0bd85895</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Jul 20 20:22:35 2023 +0000</span>

<span class="git-message-line">    Allow redefinition of config macros on compiler command line</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/life/life.c</span> <span class="git-file-b">b/life/life.c</span>
<span class="git-index">index</span> <span class="git-index-old">0424d52</span>..<span class="git-index-new">072a68e</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">life/life.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">life/life.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-413</span> <span class="git-hunk-new">+425</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef Y</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define Y 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* Y */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef X</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define X 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* X */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef DELAY</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define DELAY 250</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* DELAY */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef LIVE_C</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define LIVE_C &#39;#&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* LIVE_C */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef DEAD_C</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define DEAD_C &#39; &#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* DEAD_C */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* END CONFIG */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/mines/mines.c</span> <span class="git-file-b">b/mines/mines.c</span>
<span class="git-index">index</span> <span class="git-index-old">bc41790</span>..<span class="git-index-new">fd4adc4</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-615</span> <span class="git-hunk-new">+623</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* BEGIN CONFIG */</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>// grid size</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef Y</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define Y 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* Y */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef X</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define X 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* X */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef MINES</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>// number of mines</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define MINES 35</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* MINES */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef HIGHLIGHT_SQUARES</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>// reverse the highlighting of squares</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define HIGHLIGHT_SQUARES true</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* HIGHLIGHT_SQUARES */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* END CONFIG */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/snake/snake.c</span> <span class="git-file-b">b/snake/snake.c</span>
<span class="git-index">index</span> <span class="git-index-old">80a6b7d</span>..<span class="git-index-new">3c050d9</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">snake/snake.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">snake/snake.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-714</span> <span class="git-hunk-new">+723</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef Y</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define Y 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* Y */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef X</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define X 32</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* X */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef DELAY</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>// time between movements (ms)</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define DELAY 100</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* DELAY */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#ifndef WALLS</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>// enable or disable solid walls</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define WALLS false</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif /* WALLS */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* END CONFIG */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Fri, 21 Jul 2023 01:22:35 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/bf1c36213bbb2c4b8714cb133a768349008d9eca</link>
<title>Update README.md
</title>
<guid>bf1c362
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">bf1c36213bbb2c4b8714cb133a768349008d9eca</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Jul 20 20:14:18 2023 +0000</span>

<span class="git-message-line">    Update README.md</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/snake/README.md</span> <span class="git-file-b">b/snake/README.md</span>
<span class="git-index">index</span> <span class="git-index-old">e7cb09c</span>..<span class="git-index-new">b2b84db</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">snake/README.md</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">snake/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-16</span> <span class="git-hunk-new">+16</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span># snake</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>Classic snake game. Move with arrow keys, eat the apples to grow longer.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Classic snake game. Move with arrow keys, eat the apples to grow longer. Space to pause, any key to resume. q to quit.</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>## Config</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Fri, 21 Jul 2023 01:14:18 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/41897528a1c695e9c6b2c10f3c5b623e31e9aa80</link>
<title>Add game of life
</title>
<guid>4189752
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">41897528a1c695e9c6b2c10f3c5b623e31e9aa80</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Jul 20 19:51:49 2023 +0000</span>

<span class="git-message-line">    Add game of life</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/life/README.md</span> <span class="git-file-b">b/life/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">d86105b</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">life/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+113</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Life</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Conway&#39;s Game of Life. The game begins in a board editor. Click on a dead cell to give it life and click on a living cell to kill it. Pressing enter begins the simulation. r clears the board. q quits the game.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>During simulation, i edits the initial board, e edits the current board, and q quits the game.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Config</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `Y`: Board height</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `X`: Board width</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `DELAY`: Time between generations (ms)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `LIVE_C`: Character for living cells</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `DEAD_C`: Character for dead cells</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/life/life.c</span> <span class="git-file-b">b/life/life.c</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">0424d52</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">life/life.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+1178</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;string.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define DELAY 250</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define LIVE_C &#39;#&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define DEAD_C &#39; &#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* END CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define ARRLEN(a) (sizeof(a)/sizeof(*a))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define LIVE 1&lt;&lt;0</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define DEAD 1&lt;&lt;1</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define TODIE 1&lt;&lt;2</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define TOLIVE 1&lt;&lt;3</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GREEN = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	 int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>} around[8] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{.x = -1, .y = -1}, {.x = 0, .y = -1}, {.x = +1, .y = -1},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{.x = -1, .y = 0},                     {.x = +1, .y = 0},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{.x = -1, .y = +1}, {.x = 0, .y = +1}, {.x = +1, .y = +1}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void display(const char grid[X][Y], bool edit) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;| &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			char c = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int cp = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (edit) cp = COLOR_PAIR(GREEN);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(c &amp; LIVE ? LIVE_C : DEAD_C);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;|\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int main() {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	initscr();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	noecho();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, TRUE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mousemask(BUTTON1_CLICKED, NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	use_default_colors();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	start_color();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(GREEN, COLOR_GREEN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char grid[X][Y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	memset(grid, DEAD, sizeof(grid));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	char initial_grid[X][Y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	memset(initial_grid, DEAD, sizeof(grid));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	clear();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool edit_initial = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		// initialize the board</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			display(grid, true);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(0, (X*4+2)/2 - 5);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;BOARD EDIT&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(Y*2, (X*4+2)/2 - 21);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;Enter to start | r to restart | q to quit&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int c = getch();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (c == KEY_ENTER || c == &#39;\n&#39;) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (c == &#39;q&#39;) goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (c == &#39;r&#39;) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				memset(grid, DEAD, sizeof(grid));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (c != KEY_MOUSE) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			MEVENT e;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (getmouse(&amp;e) != OK) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (e.x % 4 == 0 || e.y % 2 == 0) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int x = (e.x - 2) / 4;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int y = (e.y - 1) / 2;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if ((e.x - 1) % 4 == 0) x++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (x &gt; X || y &gt; Y) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (grid[x][y] == LIVE) grid[x][y] = DEAD;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			else grid[x][y] = LIVE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (edit_initial) memcpy(initial_grid, grid, sizeof(grid));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		timeout(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// determine new cell states</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int neighbors = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					for (int i = 0; i &lt; ARRLEN(around); i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int nx = x + around[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int ny = y + around[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (nx &lt; 0 || ny &lt; 0 || nx &gt;= X || ny &gt;= Y) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (grid[nx][ny] &amp; LIVE) neighbors++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (neighbors == 3) grid[x][y] |= TOLIVE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					else if (neighbors == 2 &amp;&amp; grid[x][y] &amp; LIVE) grid[x][y] |= TOLIVE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					else grid[x][y] |= TODIE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// update all cells</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (grid[x][y] &amp; TOLIVE) grid[x][y] = LIVE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					else grid[x][y] = DEAD;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			display(grid, false);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(Y*2, (X*4+2)/2 - 23);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;q to quit | i to edit initial | e to edit now&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int c = getch();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (c != ERR) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (c == &#39;q&#39;) goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (c == &#39;i&#39;) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					edit_initial = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (c == &#39;e&#39;) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					edit_initial = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			napms(DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		timeout(-1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (edit_initial) memcpy(grid, initial_grid, sizeof(grid));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	terminate:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	echo();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	endwin();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Fri, 21 Jul 2023 00:51:49 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/ef58bff8f96fe41ef9fe6c11d0259909342ff3dc</link>
<title>Fix bad defines
</title>
<guid>ef58bff
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">ef58bff8f96fe41ef9fe6c11d0259909342ff3dc</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Jul 20 16:22:07 2023 +0000</span>

<span class="git-message-line">    Fix bad defines</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/snake/snake.c</span> <span class="git-file-b">b/snake/snake.c</span>
<span class="git-index">index</span> <span class="git-index-old">56badc0</span>..<span class="git-index-new">80a6b7d</span> <span class="git-index-mode">100644</span>
<span class="git-file-path----">---</span> <span class="git-file-location">a/</span><span class="git-file-name">snake/snake.c</span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">snake/snake.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-1414</span> <span class="git-hunk-new">+1414</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define DELAY 100</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>// enable or disable solid walls</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>#define WALLS true</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define WALLS false</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>/* END CONFIG */</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#if WALLS</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#define WALLC &#39;#&#39;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#else</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>#define WALLC &#39;&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define WALLC &#39; &#39;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>#endif</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-1857</span> <span class="git-hunk-new">+1857</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main() {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				// teleport the snake in no-walls mode</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>				if (MODE == NOWALLS) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (!WALLS) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					if (n-&gt;x &lt; 0) n-&gt;x = X - 1;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					else if (n-&gt;x &gt;= X) n-&gt;x = 0;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>					</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-2027</span> <span class="git-hunk-new">+2027</span> <span class="git-hunk">@@</span><span class="git-function-context"> int main() {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			}</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span></span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			// handle wall crash</span>
<span class="git-line-removed"><span class="git-diff-minus">-</span>			if (MODE == WALLS &amp;&amp; (s.nodes-&gt;x &lt; 0 || s.nodes-&gt;x &gt;= X || s.nodes-&gt;y &lt; 0 || s.nodes-&gt;y &gt;= Y)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (WALLS &amp;&amp; (s.nodes-&gt;x &lt; 0 || s.nodes-&gt;x &gt;= X || s.nodes-&gt;y &lt; 0 || s.nodes-&gt;y &gt;= Y)) {</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				state = WALL_CRASH;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>				goto done;</span>
<span class="git-line-context"><span class="git-diff-space">&nbsp;</span>			}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Thu, 20 Jul 2023 21:22:07 GMT</pubDate>
</item><item>
<link>/rani/games.git/show/53bf7297fc90a266c23c6ff6054efb06d2cd1478</link>
<title>Initial commit
</title>
<guid>53bf729
</guid>
<description><![CDATA[
<link rel="stylesheet" href="/static/git-show.css">
<pre><div class="git-show"><span class="git-commit">commit</span> <span class="git-hash">53bf7297fc90a266c23c6ff6054efb06d2cd1478</span> <span class="git-refs"></span>
Author: rani &lt;clagv.randomgames@gmail.com&gt;
<span class="git-date-label">Date:</span> <span class="git-date">Thu Jul 20 14:25:10 2023 +0000</span>

<span class="git-message-line">    Initial commit</span>

<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/README.md</span> <span class="git-file-b">b/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">d4ed8ea</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+13</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Games</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>A collection of small games. Configuration is done in the source file of each game.</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/mines/README.md</span> <span class="git-file-b">b/mines/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">b845462</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">mines/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+110</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># Mines</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Minesweeper. Left click reveals a square, right click flags it. `f` toggles &#34;flag mode&#34; which allows placing a flag on left click as well.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>## Config</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `Y`: Minefield height</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `X`: Minefield width</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `MINES`: Number of mines</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `HIGHLIGHT_SQUARES`: Either `true` or `false`. Enables or disables highlighting of number squares</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/mines/mines.c</span> <span class="git-file-b">b/mines/mines.c</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">bc41790</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">mines/mines.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+1405</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;string.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>// grid size</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>// number of mines</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define MINES 35</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>// reverse the highlighting of squares</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define HIGHLIGHT_SQUARES true</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* END CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define ARRLEN(a) (sizeof(a)/sizeof(*a))</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum color {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RED = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GREEN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CYAN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	BLUE,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	MAGENTA,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	BLACK,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum state {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RUNNING,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	QUIT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GAME_OVER,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	WIN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct square {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool revealed;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool mine;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool flagged;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int neighbors;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	 int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>} around[8] = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{.x = -1, .y = -1}, {.x = 0, .y = -1}, {.x = +1, .y = -1},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{.x = -1, .y = 0},                     {.x = +1, .y = 0},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	{.x = -1, .y = +1}, {.x = 0, .y = +1}, {.x = +1, .y = +1}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct square grid[X][Y] = {0};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int total_revealed = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int total_flags = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void global_reset(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	memset(grid, 0, sizeof(grid));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	total_revealed = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	total_flags = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>bool won(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return total_revealed &gt;= X*Y - MINES;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int count_mines(int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int n = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; ARRLEN(around); i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int nx = x + around[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ny = y + around[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (nx &lt; 0 || ny &lt; 0 || nx &gt;= X || ny &gt;= Y) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (grid[nx][ny].mine) n++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return n;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void reveal(int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	if (grid[x][y].revealed) return;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	total_revealed++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	grid[x][y].revealed = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void reveal_blank(int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct coord {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} coords[8];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; ARRLEN(coords); i++) coords[i] = (struct coord){-1, -1};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int n = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; ARRLEN(around); i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int nx = x + around[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int ny = y + around[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (nx &lt; 0 || ny &lt; 0 || nx &gt;= X || ny &gt;= Y) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct square s = grid[nx][ny];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (s.mine) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (s.neighbors == 0 &amp;&amp; !s.revealed) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			reveal(nx, ny);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			coords[n].x = nx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			coords[n].y = ny;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			n++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		} else if (s.neighbors != 0) reveal(nx, ny);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; n; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		reveal_blank(coords[i].x, coords[i].y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>void create_grid(int x, int y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int x, y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} exclude[9] = {0};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int n = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	exclude[n].x = x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	exclude[n].y = y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	n++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	// squares around the grid that mines cannot spawn in</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	for (int i = 0; i &lt; ARRLEN(around); i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int nx, ny;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		nx = x + around[i].x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		ny = y + around[i].y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (nx &lt; 0 || ny &lt; 0 || nx &gt;= X || ny &gt;= Y) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		else {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			exclude[n].x = nx;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			exclude[n].y = ny;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			n++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int tries = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	do {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int i = 0; i &lt; MINES; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int mx, my;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			bool done = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			do {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				mx = rand() % X;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				my = rand() % Y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				bool illegal = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int i = 0; i &lt; n; i++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (exclude[i].x == mx &amp;&amp; exclude[i].y == my) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						illegal = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (illegal) continue;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (!grid[mx][my].mine) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					grid[mx][my].mine = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			} while (!done);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				grid[x][y].neighbors = count_mines(x, y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		// prevent insta-wins</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		reveal_blank(x, y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (!won()) done = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		else global_reset();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		tries++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	} while (tries &lt; 10 &amp;&amp; !done);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int nlen(int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int len = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (n &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		len++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n /= 10;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return len;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int main(void) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	initscr();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	noecho();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, TRUE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	mousemask(ALL_MOUSE_EVENTS, NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	use_default_colors();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	start_color();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(RED, COLOR_RED, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(GREEN, COLOR_GREEN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(CYAN, COLOR_CYAN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(BLUE, COLOR_BLUE, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(MAGENTA, COLOR_MAGENTA, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(BLACK, COLOR_WHITE, COLOR_BLACK);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		bool grid_exists = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		bool flag_mode = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		clear();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		time_t start_time;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enum state done = RUNNING;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		bool display_once_more = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (!done || display_once_more) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// draw the board</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int y = 0; y &lt; Y; y++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int x = 0; x &lt; X; x++) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addstr(&#34;| &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					struct square s = grid[x][y];</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (done == GAME_OVER &amp;&amp; s.mine) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attron(COLOR_PAIR(RED) | A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						addch(&#39;*&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attroff(COLOR_PAIR(RED) | A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					} else if (s.flagged) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int cp = COLOR_PAIR(RED);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						char flagc = &#39;!&#39;;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (!HIGHLIGHT_SQUARES) cp |= A_REVERSE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (done == GAME_OVER) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							cp = COLOR_PAIR(CYAN) | A_REVERSE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							flagc = &#39;?&#39;;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						addch(flagc);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					} else if (s.revealed) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int cp = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						switch (s.neighbors) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 0: cp = 0; break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 1: cp = COLOR_PAIR(CYAN); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 2: cp = COLOR_PAIR(MAGENTA); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 3: cp = COLOR_PAIR(BLACK); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 4: cp = COLOR_PAIR(BLUE); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 5: cp = COLOR_PAIR(CYAN); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 6: cp = COLOR_PAIR(MAGENTA); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 7: cp = COLOR_PAIR(BLACK); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						case 8: cp = COLOR_PAIR(BLUE); break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (HIGHLIGHT_SQUARES &amp;&amp; cp) cp |= A_REVERSE;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (done == GAME_OVER) cp = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						addch(s.neighbors &gt; 0 ? &#39;0&#39; + s.neighbors : &#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					} else {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						int cp = COLOR_PAIR(GREEN);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (done == GAME_OVER) cp = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attron(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						addch(&#39;#&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						attroff(cp);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addch(&#39; &#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;|\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				for (int x = 0; x &lt; X; x++) addstr(&#34;+ - &#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;+\n&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int y, x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			getyx(stdscr, y, x);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(y, (X*4+2)/2 - (24+nlen(MINES)+nlen(total_flags))/2);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;MINES: %d   FLAGS PLACED: %d\n&#34;, MINES, total_flags);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(y+1, (X*4+2)/2 - 16);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;&#39;f&#39; to toggle flag mode: now %s\n&#34;, flag_mode ? &#34;ON&#34; : &#34;OFF&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (display_once_more) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int c = getch();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			switch (c) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case KEY_MOUSE:;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				MEVENT event;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (getmouse(&amp;event) != OK) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// ignore clicks on grid patterning</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (event.x % 4 == 0) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (event.y % 2 == 0) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// convert to grid indices</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int x = (event.x - 2) / 4;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				int y = (event.y - 1) / 2;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// fix clicks on left space in each cell</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if ((event.x - 1) % 4 == 0) x++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (x &gt; X || y &gt; Y) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (!flag_mode &amp;&amp; event.bstate &amp; BUTTON1_CLICKED) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (!grid_exists) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						create_grid(x, y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						start_time = time(NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						grid_exists = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					// clicking on a flag should do nothing</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (grid[x][y].flagged) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (grid[x][y].mine) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						done = GAME_OVER;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						display_once_more = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					// don&#39;t waste time if the square is already revealed</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (grid[x][y].revealed) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					reveal(x, y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (grid[x][y].neighbors == 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						reveal_blank(x, y);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (won()) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						done = WIN;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						display_once_more = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				} else if (flag_mode || (!grid[x][y].revealed &amp;&amp; event.bstate &amp; BUTTON3_CLICKED)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					grid[x][y].flagged = !grid[x][y].flagged;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (grid[x][y].flagged) total_flags++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					else total_flags--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case &#39;f&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				flag_mode = !flag_mode;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case &#39;q&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case 27:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			   done = QUIT;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			   break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			default:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			   break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (done) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case GAME_OVER:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(0, (X*4+2) / 2 - 3);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE | COLOR_PAIR(RED));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;BOOM!&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attroff(A_REVERSE | COLOR_PAIR(RED));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case WIN:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move((Y*2+1)/2, (X*4+2) / 2 - 16);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;All the mines have been found :)&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case QUIT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			default: break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		time_t end_time = time(NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y*2+1, 0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		clrtoeol();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y*2+1, (X*4+2)/2 - 14);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		addstr(&#34;Any to play again, q to quit&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y*2+2, 0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		clrtoeol();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		move(Y*2+2, (X*4+2)/2 - (4 + nlen(end_time - start_time)/2));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		printw(&#34;TIME: %ds&#34;, end_time - start_time);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		if (getch() == &#39;q&#39;) goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		global_reset();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	terminate:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	echo();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	endwin();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/snake/README.md</span> <span class="git-file-b">b/snake/README.md</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">e7cb09c</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">snake/README.md</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+111</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span># snake</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>Classic snake game. Move with arrow keys, eat the apples to grow longer.</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>## Config</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `Y`: Height of play area</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `X`: Width of play area</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `DELAY`: The delay, in milliseconds, between each movement</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>* `WALLS`: Either `true` or `false`. If `true`, enable solid walls (game over on crash). Otherwise, allow snake to teleport through walls.</span>
<span class="git-diff-header">diff --git</span> <span class="git-file-a">a/snake/snake.c</span> <span class="git-file-b">b/snake/snake.c</span>
<span class="git-file-status-new">new file mode</span> <span class="git-mode-value">100644</span>
<span class="git-index">index</span> <span class="git-index-old">0000000</span>..<span class="git-index-new">56badc0</span> <span class="git-index-mode"></span>
<span class="git-file-path----">---</span> <span class="git-file-location">/dev/null</span><span class="git-file-name"></span>
<span class="git-file-path-+++">+++</span> <span class="git-file-location">b/</span><span class="git-file-name">snake/snake.c</span>
<span class="git-hunk">@@</span> <span class="git-hunk-old">-00</span> <span class="git-hunk-new">+1365</span> <span class="git-hunk">@@</span><span class="git-function-context"> </span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdio.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdlib.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;ncurses.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;stdbool.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#include &lt;sys/time.h&gt;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* BEGIN CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define Y 16</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define X 32</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>// time between movements (ms)</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define DELAY 100</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>// enable or disable solid walls</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define WALLS true</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>/* END CONFIG */</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#if WALLS</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define WALLC &#39;#&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#else</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#define WALLC &#39;&#39;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>#endif</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum rstate {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RUNNING,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	WALL_CRASH,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	SELF_HIT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	QUIT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum color {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	RED = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	MAGENTA,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	GREEN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	CYAN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>enum direction {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	DIR_UP,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	DIR_DOWN,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	DIR_LEFT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	DIR_RIGHT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct node {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	enum direction dir;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	bool pivot;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct node * next;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct node * prev;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct snake {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct node * nodes;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	struct node * last;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int length;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>struct apple {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int nlen(int n) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	int len = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (n &gt; 0) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		len++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		n /= 10;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	return len;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>int main() {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	srand(time(NULL));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	initscr();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	noecho();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, true);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	// the snake should move once every DELAY ms,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	// no matter if input is recieved</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	timeout(DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	use_default_colors();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	start_color();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(RED, COLOR_RED, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(MAGENTA, COLOR_MAGENTA, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(GREEN, COLOR_GREEN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	init_pair(CYAN, COLOR_CYAN, -1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct snake s = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			.nodes = &amp;(struct node){</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				.dir = DIR_RIGHT,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				.pivot = false,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				.x = X / 2,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				.y = Y / 2,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				.next = NULL,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				.prev = NULL,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			},</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			.last = NULL,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			.length = 1,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		s.last = s.nodes;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		struct apple a = {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			.x = rand() % X,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			.y = rand() % Y,</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		};</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		int score = 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		enum rstate state = RUNNING;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		while (true) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// ate an apple!</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (s.nodes-&gt;x == a.x &amp;&amp; s.nodes-&gt;y == a.y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				score++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				struct node * l = s.last;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// add a new node</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				s.length++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				l-&gt;next = malloc(sizeof(struct node));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				struct node * nw = l-&gt;next;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				nw-&gt;dir = l-&gt;dir;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				nw-&gt;pivot = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				switch (l-&gt;dir) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_UP:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;x = l-&gt;x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;y = l-&gt;y + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_DOWN:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;x = l-&gt;x;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;y = l-&gt;y - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_LEFT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;x = l-&gt;x + 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;y = l-&gt;y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_RIGHT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;x = l-&gt;x - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						nw-&gt;y = l-&gt;y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				nw-&gt;prev = l;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				nw-&gt;next = NULL;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				s.last = l-&gt;next;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				a.x = rand() % X;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				a.y = rand() % Y;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// move the snake</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (struct node * n = s.last; n; n = n-&gt;prev) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				switch (n-&gt;dir) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_UP:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						n-&gt;y--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_DOWN:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						n-&gt;y++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_LEFT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						n-&gt;x--;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					case DIR_RIGHT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						n-&gt;x++;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// teleport the snake in no-walls mode</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (MODE == NOWALLS) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (n-&gt;x &lt; 0) n-&gt;x = X - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					else if (n-&gt;x &gt;= X) n-&gt;x = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (n-&gt;y &lt; 0) n-&gt;y = Y - 1;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					else if (n-&gt;y &gt;= Y) n-&gt;y = 0;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				// set the direction of the next node to that of the previous one</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (n-&gt;prev &amp;&amp; n-&gt;prev-&gt;pivot) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					n-&gt;dir = n-&gt;prev-&gt;dir;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					n-&gt;prev-&gt;pivot = false;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					n-&gt;pivot = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// handle wall crash</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (MODE == WALLS &amp;&amp; (s.nodes-&gt;x &lt; 0 || s.nodes-&gt;x &gt;= X || s.nodes-&gt;y &lt; 0 || s.nodes-&gt;y &gt;= Y)) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				state = WALL_CRASH;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				goto done;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// handle bumping into self</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (struct node * n = s.nodes-&gt;next; n; n = n-&gt;next) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				if (s.nodes-&gt;x == n-&gt;x &amp;&amp; s.nodes-&gt;y == n-&gt;y) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					state = SELF_HIT;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					goto done;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			erase();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// draw the border</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(A_REVERSE | A_DIM | COLOR_PAIR(MAGENTA));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = 0; i &lt;= X + 1; i++) { // top</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(0, i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(WALLC);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = 1; i &lt; Y + 1; i++) { // middle</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(i, 0);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(WALLC);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(i, X + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(WALLC);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (int i = 0; i &lt;= X + 1; i++) { // bottom</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y + 1, i);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(WALLC);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(A_REVERSE | A_DIM | COLOR_PAIR(MAGENTA));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// write the score</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(0, X / 2 - 3 - nlen(score) / 2);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(A_UNDERLINE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			printw(&#34;Score: %d&#34;, score);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(A_UNDERLINE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// draw the snake</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(s.nodes-&gt;y + 1, s.nodes-&gt;x + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// first the head</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(COLOR_PAIR(CYAN));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			switch (s.nodes-&gt;dir) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case DIR_UP:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addch(&#39;^&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case DIR_DOWN:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addch(&#39;v&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case DIR_LEFT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addch(&#39;&lt;&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case DIR_RIGHT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addch(&#39;&gt;&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(COLOR_PAIR(CYAN));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// then the body</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(COLOR_PAIR(GREEN));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			for (struct node * n = s.nodes-&gt;next; n; n = n-&gt;next) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(n-&gt;y + 1, n-&gt;x + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addch(&#39;*&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(COLOR_PAIR(GREEN));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// draw the apple</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			move(a.y + 1, a.x + 1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attron(COLOR_PAIR(RED));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			addch(&#39;@&#39;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			attroff(COLOR_PAIR(RED));</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			// handle input</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			struct timeval start;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			gettimeofday(&amp;start, NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			int c = getch();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			switch (c) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_UP:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (s.length &gt; 1 &amp;&amp; s.nodes-&gt;dir == DIR_DOWN) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;dir = DIR_UP;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;pivot = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_DOWN:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (s.length &gt; 1 &amp;&amp; s.nodes-&gt;dir == DIR_UP) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;dir = DIR_DOWN;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;pivot = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_LEFT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (s.length &gt; 1 &amp;&amp; s.nodes-&gt;dir == DIR_RIGHT) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;dir = DIR_LEFT;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;pivot = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case KEY_RIGHT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					if (s.length &gt; 1 &amp;&amp; s.nodes-&gt;dir == DIR_LEFT) break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;dir = DIR_RIGHT;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					s.nodes-&gt;pivot = true;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39; &#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					timeout(-1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					move(Y / 2, X / 2 - 2);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					addstr(&#34;Paused&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					int c;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					while ((c = getch()) != &#39; &#39;) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						if (c == &#39;q&#39;) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							state = QUIT;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>							goto done;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>						}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					timeout(DELAY);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				case &#39;q&#39;:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					state = QUIT;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>					goto done;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			struct timeval end;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			gettimeofday(&amp;end, NULL);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			unsigned delta_ms = (end.tv_usec - start.tv_usec) * 1000;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			if (delta_ms &lt; DELAY) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				napms(delta_ms);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		done:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		switch (state) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case QUIT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				goto terminate;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case WALL_CRASH:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y / 2, X / 2 - 12);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;You crashed into the wall&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				napms(1500);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			case SELF_HIT:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				move(Y / 2, X / 2 - 10);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attron(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				addstr(&#34;You ran into yourself&#34;);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				attroff(A_REVERSE);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				refresh();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				napms(1500);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>				break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			default: break;</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		for (struct node * n = s.nodes-&gt;next; n; n = n-&gt;next) {</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>			free(n);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>		}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	}</span>
<span class="git-line-added"><span class="git-diff-plus">+</span></span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	terminate:</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	curs_set(1);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	keypad(stdscr, false);</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	echo();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>	endwin();</span>
<span class="git-line-added"><span class="git-diff-plus">+</span>}</span>
</div></pre>
]]></description>
<author>
	rani
	(clagv.randomgames@gmail.com)
</author>
<pubDate>Thu, 20 Jul 2023 19:25:10 GMT</pubDate>
</item></channel></rss>