<?xml-stylesheet href="/pretty-feed-v2.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Trys Mudford's Blog</title>
    <link>https://www.trysmudford.com/categories/games/</link>
    <description>Posts, thoughts, links and photos from Trys</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Wed, 01 Apr 2020 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.trysmudford.com/blog/index.xml" rel="self" type="application/rss+xml"/>
    
    <item>
      <title>Virtual Games: Yahtzee</title>
      <link>https://www.trysmudford.com/blog/virtual-games-yahtzee/</link>
      <pubDate>Wed, 01 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.trysmudford.com/blog/virtual-games-yahtzee/</guid>
      <description><![CDATA[
<p>Following on from <a href="/blog/virtual-games-boggle">Boggle</a>, we&rsquo;re going to set up the classic dice game, Yahtzee. This post will be a step-by-step guide showing you how to set up and play in a couple of minutes.</p>
<h2 id="step-1-template">Step 1: Template</h2>
<p>We&rsquo;ve made <a href="https://docs.google.com/spreadsheets/d/1fPskW7hVvbxWcOXo3Zydx8K--d2jXhWUScaTyCmbhMw/template/preview">a template</a> to get you started.</p>
<p><a href="https://docs.google.com/spreadsheets/d/1fPskW7hVvbxWcOXo3Zydx8K--d2jXhWUScaTyCmbhMw/template/preview"><img src="/images/blog/game-yahtzee-template.png" alt="Click &lsquo;Use Template&rsquo; to get started"></a></p>
<p>Click &lsquo;Use Template&rsquo; to take a copy of our spreadsheet, ready for your own alterations.</p>
<h2 id="step-2-enable-macros">Step 2: Enable macros</h2>
<p>The code is packaged along with the template, so you don&rsquo;t have to write a line! Simply click the &lsquo;Roll all&rsquo; button once, and up will pop a prompt asking for Authorisation for this sheet. Click through the various steps. Once you&rsquo;re all done, click the &lsquo;Roll all&rsquo; button again, and the dice will roll!</p>
<p>You&rsquo;ll notice that each time you roll the dice, the colour changes from black/white to white/black. This is to making it clear as to when a dice has been rolled, or it gets quite challenging to work out if you rolled two threes in a row, or the roll didn&rsquo;t work. The code snippet and explanation is at the bottom of this post, if you&rsquo;re interested!</p>
<h2 id="step-3-play-the-game">Step 3: Play the game</h2>
<p>You have three rounds of rolling. Press &lsquo;Roll all&rsquo; to roll the five dice for your first round. Keep your best dice, depending on the row you&rsquo;re going for; I&rsquo;ll run through all the options in a moment.</p>
<p>For the next round of rolling, click on the dice face graphics (always sixes) that you&rsquo;d like to roll again, don&rsquo;t press the ones you&rsquo;d like to keep. Do the same again for the final round (if you wish to roll any again).</p>
<p>Count up your score and add them to the appropriate section of the score sheet, either by typing in the score, or clicking the tickbox for the set-score rows.</p>
<h3 id="the-scoring-options">The scoring options</h3>
<ul>
<li>Aces: How many ones did you roll</li>
<li>Twos: How many twos did you roll</li>
<li>Threes: How many threes did you roll</li>
<li>Fours: How many fours did you roll</li>
<li>Fives: How many fives did you roll</li>
<li>Sixes: How many sixes did you roll</li>
</ul>
<p>If your total for the above equals 63 or above (rolling an average of three of each), you&rsquo;ll automatically get a 35 point bonus. Very handy.</p>
<ul>
<li>3 of a kind: if you&rsquo;ve rolled three of the same numbers, total up <strong>all</strong> the dice and score it here</li>
<li>4 of a kind: if you&rsquo;ve rolled four of the same numbers, total up <strong>all</strong> the dice and score it here</li>
<li>Small straight: tick to score 30 if you&rsquo;ve rolled:
<ul>
<li>1, 2, 3, 4</li>
<li>2, 3, 4, 5</li>
<li>3, 4, 5, 6</li>
</ul>
</li>
<li>Large straight: tick to score 40 if you&rsquo;ve rolled:
<ul>
<li>1, 2, 3, 4, 5</li>
<li>2, 3, 4, 5, 6</li>
</ul>
</li>
<li>Yahtzee: tick to score 50 if you&rsquo;ve rolled five of the same numbers</li>
<li>Chance: total up all the dice</li>
</ul>
<p>If you don&rsquo;t achieve any of the above in a go, you&rsquo;ll have to forfeit one of your options, or put the total in chance. A good tactic is to forfeit your &lsquo;Aces&rsquo; (you don&rsquo;t lose much), and then your &lsquo;Yahtzee&rsquo; (you&rsquo;re unlikely to get this anyway). There isn&rsquo;t really a forfeit option on the template, so you might wish to leave the cell empty, or colour it in.</p>
<p>If you (somehow) manage to get two Yahtzee&rsquo;s in one game, tick Yahtzee Bonus for 100 points.</p>
<p>After 13 rounds, your winner should be visible! 🎉</p>
<h2 id="the-code">The code</h2>
<p>Each dice need its own function as you can&rsquo;t pass parameters from the spreadsheet, so we have a number of similar functions at the bottom. They all call the <code>rollDice</code> function with three parameters:</p>
<ol>
<li>The sheet name</li>
<li>The cell to place the random number</li>
<li>The cell to place an alternating number</li>
</ol>
<p>This alternating number allows us to conditionally format the preceeding cell, and switch between black/white and white/black.</p>
<div class="highlight"><pre class="chroma"><code class="language-js" data-lang="js"><span class="kd">function</span> <span class="nx">randomBetween</span><span class="p">(</span><span class="nx">start</span><span class="p">,</span> <span class="nx">end</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">return</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span> <span class="o">*</span> <span class="nx">end</span><span class="p">)</span> <span class="o">+</span> <span class="nx">start</span><span class="p">;</span>
<span class="p">}</span>

<span class="kd">function</span> <span class="nx">rollDice</span><span class="p">(</span><span class="nx">sheet</span><span class="p">,</span> <span class="nx">c</span><span class="p">,</span> <span class="nx">c2</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">SpreadsheetApp</span><span class="p">.</span><span class="nx">getActiveSpreadsheet</span><span class="p">().</span><span class="nx">getSheetByName</span><span class="p">(</span><span class="nx">sheet</span><span class="p">).</span><span class="nx">getRange</span><span class="p">(</span><span class="nx">c</span><span class="p">).</span><span class="nx">setValue</span><span class="p">(</span><span class="nx">randomBetween</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">6</span><span class="p">));</span>
  <span class="nx">SpreadsheetApp</span><span class="p">.</span><span class="nx">getActiveSheet</span><span class="p">().</span><span class="nx">getRange</span><span class="p">(</span><span class="nx">c2</span><span class="p">).</span><span class="nx">setValue</span><span class="p">(</span><span class="nx">SpreadsheetApp</span><span class="p">.</span><span class="nx">getActiveSheet</span><span class="p">().</span><span class="nx">getRange</span><span class="p">(</span><span class="nx">c2</span><span class="p">).</span><span class="nx">getValue</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span> <span class="o">?</span> <span class="s1">&#39;1&#39;</span> <span class="o">:</span> <span class="s1">&#39;0&#39;</span><span class="p">);</span>
<span class="p">}</span>

<span class="kd">function</span> <span class="nx">Yahtzee1</span><span class="p">()</span> <span class="p">{</span> <span class="nx">rollDice</span><span class="p">(</span><span class="s1">&#39;Yahtzee&#39;</span><span class="p">,</span> <span class="s1">&#39;J4&#39;</span><span class="p">,</span> <span class="s1">&#39;K5&#39;</span><span class="p">);</span> <span class="p">}</span>
<span class="kd">function</span> <span class="nx">Yahtzee2</span><span class="p">()</span> <span class="p">{</span> <span class="nx">rollDice</span><span class="p">(</span><span class="s1">&#39;Yahtzee&#39;</span><span class="p">,</span> <span class="s1">&#39;J7&#39;</span><span class="p">,</span> <span class="s1">&#39;K8&#39;</span><span class="p">);</span> <span class="p">}</span>
<span class="kd">function</span> <span class="nx">Yahtzee3</span><span class="p">()</span> <span class="p">{</span> <span class="nx">rollDice</span><span class="p">(</span><span class="s1">&#39;Yahtzee&#39;</span><span class="p">,</span> <span class="s1">&#39;J10&#39;</span><span class="p">,</span> <span class="s1">&#39;K11&#39;</span><span class="p">);</span> <span class="p">}</span>
<span class="kd">function</span> <span class="nx">Yahtzee4</span><span class="p">()</span> <span class="p">{</span> <span class="nx">rollDice</span><span class="p">(</span><span class="s1">&#39;Yahtzee&#39;</span><span class="p">,</span> <span class="s1">&#39;J13&#39;</span><span class="p">,</span> <span class="s1">&#39;K14&#39;</span><span class="p">);</span> <span class="p">}</span>
<span class="kd">function</span> <span class="nx">Yahtzee5</span><span class="p">()</span> <span class="p">{</span> <span class="nx">rollDice</span><span class="p">(</span><span class="s1">&#39;Yahtzee&#39;</span><span class="p">,</span> <span class="s1">&#39;J16&#39;</span><span class="p">,</span> <span class="s1">&#39;K17&#39;</span><span class="p">);</span> <span class="p">}</span>
<span class="kd">function</span> <span class="nx">YahtzeeAll</span><span class="p">()</span> <span class="p">{</span>
  <span class="nx">Yahtzee1</span><span class="p">();</span>
  <span class="nx">Yahtzee2</span><span class="p">();</span>
  <span class="nx">Yahtzee3</span><span class="p">();</span>
  <span class="nx">Yahtzee4</span><span class="p">();</span>
  <span class="nx">Yahtzee5</span><span class="p">();</span>
<span class="p">}</span>
</code></pre></div>]]>
      </description>
    </item>
    
    <item>
      <title>Virtual Games: Boggle</title>
      <link>https://www.trysmudford.com/blog/virtual-games-boggle/</link>
      <pubDate>Mon, 30 Mar 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.trysmudford.com/blog/virtual-games-boggle/</guid>
      <description><![CDATA[
<p>Being stuck in lockdown away from your fiancée isn&rsquo;t all that fun. Because we&rsquo;re incredibly fun people™, we decided to recreate some of our favourite games in virtual form!</p>
<p>This post will be a step-by-step guide showing you how to set up and play virtual Boggle in a number of minutes.</p>
<p>The humble spreadsheet is a wondrous thing, and the perfect medium for quickly prototyping a game or two. And when it comes to collaborative spreadsheets, we look no further than <a href="http://sheets.google.com/">Google Sheets</a>. This will be our gaming canvas.</p>
<h2 id="step-1-template">Step 1: Template</h2>
<p>We&rsquo;ve made <a href="https://docs.google.com/spreadsheets/d/1iTmSydKlmTd7ul8K8ROGp2qa0nzx18vjwykvmJzG9to/template/preview">a template</a> to get you started.</p>
<p><a href="https://docs.google.com/spreadsheets/d/1iTmSydKlmTd7ul8K8ROGp2qa0nzx18vjwykvmJzG9to/template/preview"><img src="/images/blog/boggle-template.png" alt="Click &lsquo;Use Template&rsquo; to get started"></a></p>
<p>Click &lsquo;Use Template&rsquo; to take a copy of our spreadsheet, ready for your own alterations.</p>
<h2 id="step-2-enable-macros">Step 2: Enable macros</h2>
<p>Google Sheets has a handy script editor that allows us to write JavaScript to control our spreadsheets. Our original version of Boggle used the built in <code>=RANDBETWEEN()</code> function, but on our first test, we found that it&rsquo;s random for each player viewing the sheet - not exactly ideal for Boggle!</p>
<p>So we went through each dice in the original game, copied the letters, and wrote a quick script to randomise the dice, and their letters. The code is at the bottom of this post, in case you&rsquo;re interested!</p>
<p>Anyway, how do you use it, you ask. The code is packaged along with the template, so you don&rsquo;t have to write a line! Simply click the green &lsquo;BOGGLE&rsquo; button once, and up will pop a prompt asking for Authorisation. Click through the various steps. Once you&rsquo;re all done, click the &lsquo;BOGGLE&rsquo; button again, and the letters in the grid will randomise!</p>
<h2 id="step-3-play-the-game">Step 3: Play the game</h2>
<p>You&rsquo;ll each need:</p>
<ol>
<li>Access to your spreadsheet (click &lsquo;Share&rsquo; on the top-right)</li>
<li>Pen &amp; paper</li>
<li>A timer (between you)</li>
</ol>
<p>Click the Boggle button to get some fresh letters, and start the timer for three minutes. Write down as many words as you can find in the grid in that time. Letters can only be used once per word, and have to join horizontally, vertically, or diagonally.</p>
<p>When the time is up, each read out your list of words. Any unique words (ie, not written down by anyone else) gets one point. Any unique 5+ letter words get two points. Add your scores to the scoring table and repeat!</p>
<h2 id="the-code">The code</h2>
<p>Below is the JavaScript for the Boggle board. Here&rsquo;s what it does:</p>
<ol>
<li>A set of dice and their possible letters</li>
<li>A set of cells to place them in</li>
<li>Shuffling of the dice</li>
<li>Looping around the dice and placing a random face into each cell</li>
</ol>
<div class="highlight"><pre class="chroma"><code class="language-js" data-lang="js"><span class="kd">function</span> <span class="nx">boggle</span><span class="p">()</span> <span class="p">{</span>
  <span class="kd">var</span> <span class="nx">dice</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">[</span><span class="s1">&#39;P&#39;</span><span class="p">,</span> <span class="s1">&#39;H&#39;</span><span class="p">,</span> <span class="s1">&#39;N&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;S&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;M&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">,</span> <span class="s1">&#39;D&#39;</span><span class="p">,</span> <span class="s1">&#39;P&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;U&#39;</span><span class="p">,</span> <span class="s1">&#39;S&#39;</span><span class="p">,</span> <span class="s1">&#39;P&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;L&#39;</span><span class="p">,</span> <span class="s1">&#39;T&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;X&#39;</span><span class="p">,</span> <span class="s1">&#39;O&#39;</span><span class="p">,</span> <span class="s1">&#39;R&#39;</span><span class="p">,</span> <span class="s1">&#39;F&#39;</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;D&#39;</span><span class="p">,</span> <span class="s1">&#39;U&#39;</span><span class="p">,</span> <span class="s1">&#39;K&#39;</span><span class="p">,</span> <span class="s1">&#39;T&#39;</span><span class="p">,</span> <span class="s1">&#39;O&#39;</span><span class="p">,</span> <span class="s1">&#39;N&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;K&#39;</span><span class="p">,</span> <span class="s1">&#39;L&#39;</span><span class="p">,</span> <span class="s1">&#39;U&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;Y&#39;</span><span class="p">,</span> <span class="s1">&#39;G&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;R&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">,</span> <span class="s1">&#39;U&#39;</span><span class="p">,</span> <span class="s1">&#39;G&#39;</span><span class="p">,</span> <span class="s1">&#39;W&#39;</span><span class="p">,</span> <span class="s1">&#39;L&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;O&#39;</span><span class="p">,</span> <span class="s1">&#39;R&#39;</span><span class="p">,</span> <span class="s1">&#39;M&#39;</span><span class="p">,</span> <span class="s1">&#39;S&#39;</span><span class="p">,</span> <span class="s1">&#39;H&#39;</span><span class="p">,</span> <span class="s1">&#39;A&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;S&#39;</span><span class="p">,</span> <span class="s1">&#39;L&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">,</span> <span class="s1">&#39;R&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;N&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;V&#39;</span><span class="p">,</span> <span class="s1">&#39;T&#39;</span><span class="p">,</span> <span class="s1">&#39;G&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;T&#39;</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;Y&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">,</span> <span class="s1">&#39;L&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;Z&#39;</span><span class="p">,</span> <span class="s1">&#39;N&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;D&#39;</span><span class="p">,</span> <span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;V&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;O&#39;</span><span class="p">,</span> <span class="s1">&#39;J&#39;</span><span class="p">,</span> <span class="s1">&#39;B&#39;</span><span class="p">,</span> <span class="s1">&#39;M&#39;</span><span class="p">,</span> <span class="s1">&#39;Qu&#39;</span><span class="p">,</span> <span class="s1">&#39;A&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;H&#39;</span><span class="p">,</span> <span class="s1">&#39;Y&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">,</span> <span class="s1">&#39;F&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;O&#39;</span><span class="p">,</span> <span class="s1">&#39;S&#39;</span><span class="p">,</span> <span class="s1">&#39;D&#39;</span><span class="p">,</span> <span class="s1">&#39;E&#39;</span><span class="p">,</span> <span class="s1">&#39;W&#39;</span><span class="p">,</span> <span class="s1">&#39;N&#39;</span><span class="p">],</span>
    <span class="p">[</span><span class="s1">&#39;T&#39;</span><span class="p">,</span> <span class="s1">&#39;A&#39;</span><span class="p">,</span> <span class="s1">&#39;C&#39;</span><span class="p">,</span> <span class="s1">&#39;O&#39;</span><span class="p">,</span> <span class="s1">&#39;I&#39;</span><span class="p">,</span> <span class="s1">&#39;A&#39;</span><span class="p">],</span>
  <span class="p">];</span>
    
  <span class="kd">var</span> <span class="nx">cells</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;I18&#39;</span><span class="p">,</span> <span class="s1">&#39;J18&#39;</span><span class="p">,</span> <span class="s1">&#39;K18&#39;</span><span class="p">,</span> <span class="s1">&#39;L18&#39;</span><span class="p">,</span><span class="s1">&#39;I19&#39;</span><span class="p">,</span> <span class="s1">&#39;J19&#39;</span><span class="p">,</span> <span class="s1">&#39;K19&#39;</span><span class="p">,</span> <span class="s1">&#39;L19&#39;</span><span class="p">,</span> <span class="s1">&#39;I20&#39;</span><span class="p">,</span> <span class="s1">&#39;J20&#39;</span><span class="p">,</span> <span class="s1">&#39;K20&#39;</span><span class="p">,</span> <span class="s1">&#39;L20&#39;</span><span class="p">,</span> <span class="s1">&#39;I21&#39;</span><span class="p">,</span> <span class="s1">&#39;J21&#39;</span><span class="p">,</span> <span class="s1">&#39;K21&#39;</span><span class="p">,</span> <span class="s1">&#39;L21&#39;</span><span class="p">]</span>
    
  <span class="nx">dice</span><span class="p">.</span><span class="nx">sort</span><span class="p">(()</span> <span class="p">=&gt;</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span> <span class="o">-</span> <span class="mf">0.5</span><span class="p">);</span>
  <span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">dice</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">SpreadsheetApp</span><span class="p">.</span><span class="nx">getActiveSheet</span><span class="p">().</span><span class="nx">getRange</span><span class="p">(</span><span class="nx">cells</span><span class="p">[</span><span class="nx">i</span><span class="p">]).</span><span class="nx">setValue</span><span class="p">(</span><span class="nx">dice</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">(</span><span class="nb">Math</span><span class="p">.</span><span class="nx">random</span><span class="p">()</span> <span class="o">*</span> <span class="mi">6</span><span class="p">)]);</span>
  <span class="p">}</span>
<span class="p">}</span>
</code></pre></div>]]>
      </description>
    </item>
    
  </channel>
</rss>