Coder Social home page Coder Social logo

watson's Introduction

Watson, a puzzle game

Watson is a clone of “Sherlock”, an old game by Everett Kaser which is itself based on the a classic puzzle known as "Zebra puzzle" or “Einstein's riddle”.

Download

Latest binaries here.

How to play

The board is partitioned into an n x h grid of blocks of same-type items (letters, symbols, greek letters, etc). The goal is to figure out which item goes in each block. Each item should appear exactly once. The game provides clues in two panes (right pane has horizontal clues, bottom pane has vertical clues. Each clue tells you something about the relative position of items in the solution. Depending on the configuration of the main panel, a clue may help you discard some item from a given block. For instance, if a vertical clue tells you that the column of the 'F' letter is between the columns of the symbol '?' and the number '3', this tells you that 'F' can't be in the first or in the last column. If another (vertical) clue tells you that the letter 'F' is in the same column as the greek letter alpha, then you can rule out alpha from the same columns where you ruled out 'F'.

For an explanation of the meaning of each clue, left-click the clue. To get used to the game, it may help to ask for a few hints, which will show you this kind of reasoning. This is done by clicking on the '?' button on the bottom-right corner. This will also tell you if you made a mistake (for instance ruling out an item that could not be ruled out).

The default board size is 6 x 6, but you can change it in the settings to any size from 4x4 to 8x8 (different width/height is also possible). The clues provided are guaranteed to lead to a unique solution. There is an 'advanced' option that generates much more difficult puzzles. These assume more indirect reasoning (like assuming that an item is in a given block and seeing what happens, then ruling it out if it leads to a contradiction). In my experience, advanced games tend to be almost impossible for a 6x6 or higher size board (I hope to tune this later). Also, advanced games won't always provide hints. I recommend against using this setting until it is improved.

Assets

Watson is programmed in plain C and uses the Allegro 5 library. Big thanks to the friendly folks from #allegro in Freenode for all the tips and advice.

The GUI uses SiegeLord's WidgetZ library (included with the sources).

The main text font is Linux Libertine by Philipp H. Poll, licensed under the GPL. The TTF tiles used are a combination of symbols from different fonts downloaded from www.fontlibrary.org. The sounds are from www.freesound.org. Button icons and bitmap tiles are from www.icons8.com, licensed under Creative Commons CC BY-ND 3.0.

The code itself is licensed under the GPLv3 (this excludes the above items).

Note: The tile set is rendered from TTF fonts, but there is also an option to load custom bitmap tiles in the settings. If you want to change the tiles, they should be stored in /icons into 8 separate folders named 0 to 7, each with 8 square tiles name 0.png to 7.png.

Build instructions:

You need Allegro 5 (>= 5.1.13) and cmake.

For Mac OS X (tested with Xcode 5):

cd watson && mkdir build && cd build
cmake -G Xcode ..
xcodebuild -config Release

The app bundle will be in the "Release" folder.

For windows (tested in Visual Studio 2015)

cd watson
mkdir build
cd build
cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DAlleg_ROOT="\path\to\allegro\libs" .. 
nmake

or open the project in Visual Studio and compile for release. After that we need to copy the resources found in the "watson" folder (fonts, icons and sounds) to the application folder, together with all the required dll's (that is, allegro dll's + runtime).

For Linux:

cd watson && mkdir build && cd build
cmake ..
make

the binary "watson" in the build dir should work.

For Android:

The game now works on Android devices as well. Compile instructions will come later.

TODO

  • Tune the difficulty of 'advanced' mode.
  • Add extra settings to configure the number of revealed blocks and tune other aspects of puzzle generation.
  • Fix CMakeLists.txt to include windows icon.

watson's People

Contributors

koro-xx avatar nuritanrikut avatar baylej avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.