Added Ishido game.
|
@ -43,6 +43,7 @@ Cardsets Types:
|
|||
* Trumps Only = 9
|
||||
* Matching = 10
|
||||
* Puzzle = 11
|
||||
* Ishido = 12
|
||||
|
||||
*$C:* The number of cards in the cardset, generally 42, 48, 52, 68, 78, 96 or 120
|
||||
|
||||
|
@ -66,6 +67,7 @@ Cardsets Styles:
|
|||
* Hanafuda = 12
|
||||
* Hex A Deck = 29
|
||||
* Holiday = 13
|
||||
* Ishido = 34
|
||||
* Mahjongg = 28
|
||||
* Matching = 32
|
||||
* Movies = 14
|
||||
|
|
BIN
data/images/cards/bottoms/ishido/bottom02-n.png
Normal file
After Width: | Height: | Size: 129 B |
BIN
data/images/cards/bottoms/ishido/bottom02.png
Normal file
After Width: | Height: | Size: 129 B |
BIN
data/images/cards/finder/ishido/01a.gif
Normal file
After Width: | Height: | Size: 193 B |
BIN
data/images/cards/finder/ishido/01a.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
data/images/cards/finder/ishido/01b.gif
Normal file
After Width: | Height: | Size: 193 B |
BIN
data/images/cards/finder/ishido/01b.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
data/images/cards/finder/ishido/01c.gif
Normal file
After Width: | Height: | Size: 193 B |
BIN
data/images/cards/finder/ishido/01c.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
data/images/cards/finder/ishido/01d.gif
Normal file
After Width: | Height: | Size: 193 B |
BIN
data/images/cards/finder/ishido/01d.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
data/images/cards/finder/ishido/01e.gif
Normal file
After Width: | Height: | Size: 193 B |
BIN
data/images/cards/finder/ishido/01e.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
data/images/cards/finder/ishido/01f.gif
Normal file
After Width: | Height: | Size: 193 B |
BIN
data/images/cards/finder/ishido/01f.png
Normal file
After Width: | Height: | Size: 226 B |
BIN
data/images/cards/finder/ishido/02a.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
data/images/cards/finder/ishido/02a.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
data/images/cards/finder/ishido/02b.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
data/images/cards/finder/ishido/02b.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
data/images/cards/finder/ishido/02c.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
data/images/cards/finder/ishido/02c.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
data/images/cards/finder/ishido/02d.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
data/images/cards/finder/ishido/02d.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
data/images/cards/finder/ishido/02e.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
data/images/cards/finder/ishido/02e.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
data/images/cards/finder/ishido/02f.gif
Normal file
After Width: | Height: | Size: 210 B |
BIN
data/images/cards/finder/ishido/02f.png
Normal file
After Width: | Height: | Size: 268 B |
BIN
data/images/cards/finder/ishido/03a.gif
Normal file
After Width: | Height: | Size: 215 B |
BIN
data/images/cards/finder/ishido/03a.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
data/images/cards/finder/ishido/03b.gif
Normal file
After Width: | Height: | Size: 215 B |
BIN
data/images/cards/finder/ishido/03b.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
data/images/cards/finder/ishido/03c.gif
Normal file
After Width: | Height: | Size: 215 B |
BIN
data/images/cards/finder/ishido/03c.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
data/images/cards/finder/ishido/03d.gif
Normal file
After Width: | Height: | Size: 215 B |
BIN
data/images/cards/finder/ishido/03d.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
data/images/cards/finder/ishido/03e.gif
Normal file
After Width: | Height: | Size: 215 B |
BIN
data/images/cards/finder/ishido/03e.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
data/images/cards/finder/ishido/03f.gif
Normal file
After Width: | Height: | Size: 215 B |
BIN
data/images/cards/finder/ishido/03f.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
data/images/cards/finder/ishido/04a.gif
Normal file
After Width: | Height: | Size: 213 B |
BIN
data/images/cards/finder/ishido/04a.png
Normal file
After Width: | Height: | Size: 297 B |
BIN
data/images/cards/finder/ishido/04b.gif
Normal file
After Width: | Height: | Size: 213 B |
BIN
data/images/cards/finder/ishido/04b.png
Normal file
After Width: | Height: | Size: 297 B |
BIN
data/images/cards/finder/ishido/04c.gif
Normal file
After Width: | Height: | Size: 213 B |
BIN
data/images/cards/finder/ishido/04c.png
Normal file
After Width: | Height: | Size: 297 B |
BIN
data/images/cards/finder/ishido/04d.gif
Normal file
After Width: | Height: | Size: 213 B |
BIN
data/images/cards/finder/ishido/04d.png
Normal file
After Width: | Height: | Size: 297 B |
BIN
data/images/cards/finder/ishido/04e.gif
Normal file
After Width: | Height: | Size: 213 B |
BIN
data/images/cards/finder/ishido/04e.png
Normal file
After Width: | Height: | Size: 297 B |
BIN
data/images/cards/finder/ishido/04f.gif
Normal file
After Width: | Height: | Size: 213 B |
BIN
data/images/cards/finder/ishido/04f.png
Normal file
After Width: | Height: | Size: 297 B |
BIN
data/images/cards/finder/ishido/05a.gif
Normal file
After Width: | Height: | Size: 214 B |
BIN
data/images/cards/finder/ishido/05a.png
Normal file
After Width: | Height: | Size: 283 B |
BIN
data/images/cards/finder/ishido/05b.gif
Normal file
After Width: | Height: | Size: 214 B |
BIN
data/images/cards/finder/ishido/05b.png
Normal file
After Width: | Height: | Size: 283 B |
BIN
data/images/cards/finder/ishido/05c.gif
Normal file
After Width: | Height: | Size: 214 B |
BIN
data/images/cards/finder/ishido/05c.png
Normal file
After Width: | Height: | Size: 283 B |
BIN
data/images/cards/finder/ishido/05d.gif
Normal file
After Width: | Height: | Size: 214 B |
BIN
data/images/cards/finder/ishido/05d.png
Normal file
After Width: | Height: | Size: 283 B |
BIN
data/images/cards/finder/ishido/05e.gif
Normal file
After Width: | Height: | Size: 214 B |
BIN
data/images/cards/finder/ishido/05e.png
Normal file
After Width: | Height: | Size: 283 B |
BIN
data/images/cards/finder/ishido/05f.gif
Normal file
After Width: | Height: | Size: 214 B |
BIN
data/images/cards/finder/ishido/05f.png
Normal file
After Width: | Height: | Size: 283 B |
BIN
data/images/cards/finder/ishido/06a.gif
Normal file
After Width: | Height: | Size: 220 B |
BIN
data/images/cards/finder/ishido/06a.png
Normal file
After Width: | Height: | Size: 301 B |
BIN
data/images/cards/finder/ishido/06b.gif
Normal file
After Width: | Height: | Size: 220 B |
BIN
data/images/cards/finder/ishido/06b.png
Normal file
After Width: | Height: | Size: 301 B |
BIN
data/images/cards/finder/ishido/06c.gif
Normal file
After Width: | Height: | Size: 220 B |
BIN
data/images/cards/finder/ishido/06c.png
Normal file
After Width: | Height: | Size: 301 B |
BIN
data/images/cards/finder/ishido/06d.gif
Normal file
After Width: | Height: | Size: 220 B |
BIN
data/images/cards/finder/ishido/06d.png
Normal file
After Width: | Height: | Size: 301 B |
BIN
data/images/cards/finder/ishido/06e.gif
Normal file
After Width: | Height: | Size: 220 B |
BIN
data/images/cards/finder/ishido/06e.png
Normal file
After Width: | Height: | Size: 301 B |
BIN
data/images/cards/finder/ishido/06f.gif
Normal file
After Width: | Height: | Size: 220 B |
BIN
data/images/cards/finder/ishido/06f.png
Normal file
After Width: | Height: | Size: 301 B |
|
@ -50,6 +50,9 @@ back01.ext;back02.ext;back03.ext</pre>
|
|||
<li>
|
||||
<p>Puzzle = 11</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ishido = 12</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p><b>$C:</b> The number of cards in the cardset, generally 42,
|
||||
48, 52, 68, 78, 96 or 120</p>
|
||||
|
@ -102,6 +105,9 @@ back01.ext;back02.ext;back03.ext</pre>
|
|||
<li>
|
||||
<p>Holiday = 13</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Ishido = 34</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>Mahjongg = 28</p>
|
||||
</li>
|
||||
|
|
|
@ -178,6 +178,14 @@ function similar to JOKERS (see <a href="hexadeck.html">Hex A Deck</a>
|
|||
for more info).</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>ISHIDO DECK</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>An Ishido set consists of 36 tiles, containing six different colors
|
||||
and six symbols. Ishido games usually involve matching the colors and
|
||||
symbols of adjacent tiles.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>JOKER</b></dt>
|
||||
|
||||
<dd>
|
||||
|
|
12
html-src/rules/freeishido.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<h1>Free Ishido</h1>
|
||||
<p>
|
||||
Ishido game type. 2 decks. No redeal.
|
||||
|
||||
<h3>Object</h3>
|
||||
<p>
|
||||
Move all tiles to the playing area.
|
||||
|
||||
<h3>Quick Description</h3>
|
||||
<p>
|
||||
Like <a href='ishido.html'>Ishido</a>, but tiles do not need to be
|
||||
placed adjacent to other tiles.
|
14
html-src/rules/freeishidorelaxed.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
<h1>Free Ishido Relaxed</h1>
|
||||
<p>
|
||||
Ishido game type. 2 decks. No redeal.
|
||||
|
||||
<h3>Object</h3>
|
||||
<p>
|
||||
Move all tiles to the playing area.
|
||||
|
||||
<h3>Quick Description</h3>
|
||||
<p>
|
||||
Like <a href='ishido.html'>Ishido</a>, but tiles do not need to be
|
||||
placed adjacent to other tiles, and there are no restrictions
|
||||
when placing a tile next to two or more other tiles - they just have
|
||||
to match the color or symbol of each.
|
29
html-src/rules/ishido.html
Normal file
|
@ -0,0 +1,29 @@
|
|||
<h1>Ishido</h1>
|
||||
<p>
|
||||
Ishido game type. 2 decks. No redeal.
|
||||
|
||||
<h3>Object</h3>
|
||||
<p>
|
||||
Move all tiles to the playing area.
|
||||
|
||||
<h3>Rules</h3>
|
||||
<p>
|
||||
The tiles are played to an grid of eight rows of twelve columns each.
|
||||
At the start of the game, a tile is placed in each corner, and two are
|
||||
placed in two diagonally adjacent spaces in the center.
|
||||
<p>
|
||||
Tiles are drawn from the talon one at a time, and can be played to the
|
||||
main playing area. A tile can only be played if it is adjacent to
|
||||
another tile, either horizontally or vertically, and if it matches the
|
||||
adjacent tile's color or symbol. If a tile is placed next to at least
|
||||
two other tiles, one must match by color and another by symbol. If it
|
||||
is played next to four other tiles, it must match two by color and two
|
||||
by symbol.
|
||||
<p>
|
||||
The game is played if all tiles from the talon can be played to the
|
||||
playing area.
|
||||
|
||||
<h3>History</h3>
|
||||
<p>
|
||||
Ishido was originally published as a video game "Ishido: The Way of Stones"
|
||||
in 1990. It has since been recreated many times.
|
13
html-src/rules/ishidorelaxed.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
<h1>Ishido Relaxed</h1>
|
||||
<p>
|
||||
Ishido game type. 2 decks. No redeal.
|
||||
|
||||
<h3>Object</h3>
|
||||
<p>
|
||||
Move all tiles to the playing area.
|
||||
|
||||
<h3>Quick Description</h3>
|
||||
<p>
|
||||
Like <a href='ishido.html'>Ishido</a>, but there are no restrictions
|
||||
when placing a tile next to two or more other tiles - they just have
|
||||
to match the color or symbol of each.
|
|
@ -3,7 +3,7 @@ msgstr ""
|
|||
"Project-Id-Version: PySol 0.0.1\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
|
||||
"PO-Revision-Date: 2023-09-27 20:03-0400\n"
|
||||
"PO-Revision-Date: 2023-11-05 12:49-0500\n"
|
||||
"Last-Translator: H. Schaekel <Holger.Schaekel@web.de>\n"
|
||||
"Language-Team: German\n"
|
||||
"Language: de\n"
|
||||
|
@ -453,6 +453,9 @@ msgstr "4 Deck Spiele"
|
|||
msgid "Cribbage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lights Out"
|
||||
msgstr ""
|
||||
|
||||
|
@ -615,6 +618,9 @@ msgstr ""
|
|||
msgid "Tower of Hanoi type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/help.py:43
|
||||
msgid "A Python Solitaire Game Collection"
|
||||
msgstr "Eine Python Spielesammlung"
|
||||
|
@ -886,6 +892,9 @@ msgstr ""
|
|||
msgid "Puzzle type (variable pieces)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type (36 tiles)"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/resource.py:194
|
||||
msgid "French"
|
||||
msgstr "Französisch"
|
||||
|
|
|
@ -8,7 +8,7 @@ msgstr ""
|
|||
"Project-Id-Version: 1.02\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
|
||||
"PO-Revision-Date: 2023-09-27 20:02-0400\n"
|
||||
"PO-Revision-Date: 2023-11-05 12:49-0500\n"
|
||||
"Last-Translator: Eric Rausch <neelix570@gmail.com>\n"
|
||||
"Language-Team: French\n"
|
||||
"Language: fr\n"
|
||||
|
@ -459,6 +459,9 @@ msgstr "Jeux à 4 jeux de cartes"
|
|||
msgid "Cribbage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lights Out"
|
||||
msgstr ""
|
||||
|
||||
|
@ -621,6 +624,9 @@ msgstr ""
|
|||
msgid "Tower of Hanoi type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/help.py:43
|
||||
msgid "A Python Solitaire Game Collection"
|
||||
msgstr "Une collection de jeux de solitaire en Python"
|
||||
|
@ -916,6 +922,9 @@ msgstr ""
|
|||
msgid "Puzzle type (variable pieces)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type (36 tiles)"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/resource.py:194
|
||||
msgid "French"
|
||||
msgstr "Français"
|
||||
|
|
|
@ -12,7 +12,7 @@ msgstr ""
|
|||
"Project-Id-Version: it_pysol\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
|
||||
"PO-Revision-Date: 2023-09-27 20:02-0400\n"
|
||||
"PO-Revision-Date: 2023-11-05 12:49-0500\n"
|
||||
"Last-Translator: Giuliano Colla <giuliano.colla@gmail.com>\n"
|
||||
"Language-Team: Italiano <it@li.org>\n"
|
||||
"Language: it\n"
|
||||
|
@ -465,6 +465,9 @@ msgstr "Giochi con quattro mazzi"
|
|||
msgid "Cribbage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lights Out"
|
||||
msgstr ""
|
||||
|
||||
|
@ -627,6 +630,9 @@ msgstr ""
|
|||
msgid "Tower of Hanoi type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/help.py:43
|
||||
msgid "A Python Solitaire Game Collection"
|
||||
msgstr "Una raccolta di solitari in Python"
|
||||
|
@ -924,6 +930,9 @@ msgstr ""
|
|||
msgid "Puzzle type (variable pieces)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type (36 tiles)"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/resource.py:194
|
||||
msgid "French"
|
||||
msgstr "Francesi"
|
||||
|
|
|
@ -8,7 +8,7 @@ msgstr ""
|
|||
"Project-Id-Version: PySolFC\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
|
||||
"PO-Revision-Date: 2023-09-27 20:01-0400\n"
|
||||
"PO-Revision-Date: 2023-11-05 12:49-0500\n"
|
||||
"Last-Translator: Jerzy Trzeciak <artusek@wp.pl>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"Language: pl\n"
|
||||
|
@ -459,6 +459,9 @@ msgstr "Gry czterotaliowe"
|
|||
msgid "Cribbage"
|
||||
msgstr "Szopka"
|
||||
|
||||
msgid "Ishido"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lights Out"
|
||||
msgstr ""
|
||||
|
||||
|
@ -619,6 +622,9 @@ msgstr "Gry typu Samotnik"
|
|||
msgid "Tower of Hanoi type"
|
||||
msgstr "Gra typu Wieża Hanoi"
|
||||
|
||||
msgid "Ishido type"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/help.py:43
|
||||
msgid "A Python Solitaire Game Collection"
|
||||
msgstr "Kolekcja gier Python Solitaire"
|
||||
|
@ -921,6 +927,9 @@ msgstr ""
|
|||
msgid "Puzzle type (variable pieces)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type (36 tiles)"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/resource.py:194
|
||||
msgid "French"
|
||||
msgstr "Francuski"
|
||||
|
|
|
@ -8,7 +8,7 @@ msgstr ""
|
|||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
|
||||
"PO-Revision-Date: 2023-09-27 20:02-0400\n"
|
||||
"PO-Revision-Date: 2023-11-05 12:50-0500\n"
|
||||
"Last-Translator: Matheus Knack <mtknack555@gmail.com>\n"
|
||||
"Language-Team: \n"
|
||||
"Language: pt_BR\n"
|
||||
|
@ -458,6 +458,9 @@ msgstr "Jogos de quatro baralhos"
|
|||
msgid "Cribbage"
|
||||
msgstr "Cribbage"
|
||||
|
||||
msgid "Ishido"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lights Out"
|
||||
msgstr "Sem luz"
|
||||
|
||||
|
@ -618,6 +621,9 @@ msgstr "estilo Resta um"
|
|||
msgid "Tower of Hanoi type"
|
||||
msgstr "estilo Torre de Lucas"
|
||||
|
||||
msgid "Ishido type"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/help.py:43
|
||||
msgid "A Python Solitaire Game Collection"
|
||||
msgstr "Coleção de Jogos de Paciência Python"
|
||||
|
@ -915,6 +921,9 @@ msgstr "Estilos Combinados (cartas variáveis)"
|
|||
msgid "Puzzle type (variable pieces)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type (36 tiles)"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/resource.py:194
|
||||
msgid "French"
|
||||
msgstr "Francês"
|
||||
|
|
|
@ -433,6 +433,9 @@ msgstr ""
|
|||
msgid "Cribbage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lights Out"
|
||||
msgstr ""
|
||||
|
||||
|
@ -593,6 +596,9 @@ msgstr ""
|
|||
msgid "Tower of Hanoi type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/help.py:43
|
||||
msgid "A Python Solitaire Game Collection"
|
||||
msgstr ""
|
||||
|
@ -832,6 +838,9 @@ msgstr ""
|
|||
msgid "Puzzle type (variable pieces)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type (36 tiles)"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/resource.py:194
|
||||
msgid "French"
|
||||
msgstr ""
|
||||
|
|
|
@ -7,7 +7,7 @@ msgstr ""
|
|||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-12-10 10:19-0500\n"
|
||||
"PO-Revision-Date: 2023-09-27 20:02-0400\n"
|
||||
"PO-Revision-Date: 2023-11-05 12:50-0500\n"
|
||||
"Last-Translator: Skomoroh <skomoroh@gmail.com>\n"
|
||||
"Language-Team: Russian <ru@li.org>\n"
|
||||
"Language: ru\n"
|
||||
|
@ -462,6 +462,9 @@ msgstr "Игры с четырьмя колодами"
|
|||
msgid "Cribbage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido"
|
||||
msgstr ""
|
||||
|
||||
msgid "Lights Out"
|
||||
msgstr ""
|
||||
|
||||
|
@ -624,6 +627,9 @@ msgstr ""
|
|||
msgid "Tower of Hanoi type"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/help.py:43
|
||||
msgid "A Python Solitaire Game Collection"
|
||||
msgstr "Коллекция питоновских пасьянсов"
|
||||
|
@ -911,6 +917,9 @@ msgstr ""
|
|||
msgid "Puzzle type (variable pieces)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Ishido type (36 tiles)"
|
||||
msgstr ""
|
||||
|
||||
#: pysollib/resource.py:194
|
||||
msgid "French"
|
||||
msgstr "Классические"
|
||||
|
|
|
@ -824,6 +824,10 @@ class Application:
|
|||
t0 = "Puzzle"
|
||||
if cs_type not in (CSI.TYPE_PUZZLE,) or cs_subtype != gs:
|
||||
t1 = t0
|
||||
elif gc == GI.GC_ISHIDO:
|
||||
t0 = "Ishido"
|
||||
if cs_type not in (CSI.TYPE_ISHIDO,):
|
||||
t1 = t0
|
||||
else:
|
||||
# we should not come here
|
||||
t0 = t1 = "Unknown"
|
||||
|
|
|
@ -57,8 +57,9 @@ class GI:
|
|||
GC_TRUMP_ONLY = CSI.TYPE_TRUMP_ONLY
|
||||
GC_MATCHING = CSI.TYPE_MATCHING
|
||||
GC_PUZZLE = CSI.TYPE_PUZZLE
|
||||
GC_ISHIDO = CSI.TYPE_ISHIDO
|
||||
|
||||
NUM_CATEGORIES = CSI.TYPE_PUZZLE
|
||||
NUM_CATEGORIES = CSI.TYPE_ISHIDO
|
||||
|
||||
# game subcategory
|
||||
GS_NONE = CSI.SUBTYPE_NONE
|
||||
|
@ -90,6 +91,7 @@ class GI:
|
|||
GT_HANAFUDA = 13
|
||||
GT_HANOI = 35
|
||||
GT_HEXADECK = 14
|
||||
GT_ISHIDO = 39
|
||||
GT_KLONDIKE = 15
|
||||
GT_LIGHTS_OUT = 38
|
||||
GT_MAHJONGG = 16
|
||||
|
@ -166,6 +168,7 @@ class GI:
|
|||
|
||||
GT_CRIBBAGE_TYPE: n_("Cribbage"),
|
||||
GT_HEXADECK: n_("Hex A Deck"),
|
||||
GT_ISHIDO: n_("Ishido"),
|
||||
GT_LIGHTS_OUT: n_("Lights Out"),
|
||||
GT_MATRIX: n_("Matrix"),
|
||||
GT_MEMORY: n_("Memory"),
|
||||
|
@ -283,6 +286,7 @@ class GI:
|
|||
lambda gi, gt=GT_CRIBBAGE_TYPE: gi.si.game_type == gt),
|
||||
(n_("Hex A Deck type"),
|
||||
lambda gi, gt=GT_HEXADECK: gi.si.game_type == gt),
|
||||
(n_("Ishido type"), lambda gi, gt=GT_ISHIDO: gi.si.game_type == gt),
|
||||
(n_("Lights Out type"),
|
||||
lambda gi, gt=GT_LIGHTS_OUT: gi.si.game_type == gt),
|
||||
(n_("Matrix type"), lambda gi, gt=GT_MATRIX: gi.si.game_type == gt),
|
||||
|
@ -577,7 +581,8 @@ class GI:
|
|||
('fc-2.21', tuple(range(897, 900)) + tuple(range(11014, 11017)) +
|
||||
tuple(range(13160, 13163)) + (16682,)),
|
||||
('dev', tuple(range(906, 927)) + tuple(range(11017, 11020)) +
|
||||
tuple(range(22303, 22311)) + tuple(range(22353, 22361))),
|
||||
tuple(range(18000, 18004)) + tuple(range(22303, 22311)) +
|
||||
tuple(range(22353, 22361))),
|
||||
)
|
||||
|
||||
# deprecated - the correct way is to or a GI.GT_XXX flag
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
# ---------------------------------------------------------------------------##
|
||||
from . import cribbage # noqa: F401
|
||||
from . import hanoi # noqa: F401
|
||||
from . import ishido # noqa: F401
|
||||
from . import lightsout # noqa: F401
|
||||
from . import memory # noqa: F401
|
||||
from . import pegged # noqa: F401
|
||||
|
|
185
pysollib/games/special/ishido.py
Normal file
|
@ -0,0 +1,185 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- mode: python; coding: utf-8; -*-
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
|
||||
# Copyright (C) 2003 Mt. Hood Playing Card Co.
|
||||
# Copyright (C) 2005-2009 Skomoroh
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
from pysollib.game import Game
|
||||
from pysollib.gamedb import GI, GameInfo, registerGame
|
||||
from pysollib.layout import Layout
|
||||
from pysollib.stack import \
|
||||
OpenTalonStack, \
|
||||
ReserveStack, \
|
||||
StackWrapper
|
||||
|
||||
# ************************************************************************
|
||||
# * Ishido
|
||||
# ************************************************************************
|
||||
|
||||
|
||||
class Ishido_RowStack(ReserveStack):
|
||||
def clickHandler(self, event):
|
||||
if (not self.cards and self.game.s.talon.cards and
|
||||
self.game.isValidPlay(self.id,
|
||||
self.game.s.talon.getCard().rank,
|
||||
self.game.s.talon.getCard().suit)):
|
||||
self.game.s.talon.playMoveMove(1, self)
|
||||
return 1
|
||||
return ReserveStack.clickHandler(self, event)
|
||||
|
||||
rightclickHandler = clickHandler
|
||||
|
||||
def acceptsCards(self, from_stack, cards):
|
||||
return not self.cards and self.game.isValidPlay(self.id,
|
||||
cards[0].rank,
|
||||
cards[0].suit)
|
||||
|
||||
def canFlipCard(self):
|
||||
return False
|
||||
|
||||
|
||||
class Ishido(Game):
|
||||
Talon_Class = OpenTalonStack
|
||||
RowStack_Class = StackWrapper(Ishido_RowStack, max_move=0)
|
||||
Hint_Class = None
|
||||
|
||||
REQUIRE_ADJACENT = True
|
||||
STRICT_FOUR_WAYS = True
|
||||
|
||||
#
|
||||
# game layout
|
||||
#
|
||||
|
||||
def createGame(self):
|
||||
# create layout
|
||||
l, s = Layout(self), self.s
|
||||
|
||||
ta = "ss"
|
||||
x, y = l.XM, l.YM + 2 * l.YS
|
||||
|
||||
w2 = max(2 * l.XS, x)
|
||||
# set window
|
||||
w, h = w2 + l.XM * 2 + l.CW * 12, l.YM * 2 + l.CH * 8
|
||||
self.setSize(w, h)
|
||||
|
||||
# Create rows
|
||||
for j in range(8):
|
||||
x, y = w2 + l.XM, l.YM + l.CH * j
|
||||
for i in range(12):
|
||||
s.rows.append(self.RowStack_Class(x, y, self))
|
||||
x = x + l.CW
|
||||
|
||||
s.talon = self.Talon_Class(l.XM, l.YM, self)
|
||||
l.createText(s.talon, anchor=ta)
|
||||
|
||||
# define stack-groups
|
||||
l.defaultStackGroups()
|
||||
return l
|
||||
|
||||
def startGame(self):
|
||||
self.moveMove(1, self.s.talon, self.s.rows[0], frames=0)
|
||||
self.s.rows[0].flipMove()
|
||||
self.moveMove(1, self.s.talon, self.s.rows[11], frames=0)
|
||||
self.s.rows[11].flipMove()
|
||||
self.moveMove(1, self.s.talon, self.s.rows[41], frames=0)
|
||||
self.s.rows[41].flipMove()
|
||||
self.moveMove(1, self.s.talon, self.s.rows[54], frames=0)
|
||||
self.s.rows[54].flipMove()
|
||||
self.moveMove(1, self.s.talon, self.s.rows[84], frames=0)
|
||||
self.s.rows[84].flipMove()
|
||||
self.moveMove(1, self.s.talon, self.s.rows[95], frames=0)
|
||||
self.s.rows[95].flipMove()
|
||||
self.s.talon.fillStack()
|
||||
|
||||
def isGameWon(self):
|
||||
return len(self.s.talon.cards) == 0
|
||||
|
||||
def isValidPlay(self, playSpace, playRank, playSuit):
|
||||
# check that there's an adjacent card
|
||||
adjacent = self.getAdjacent(playSpace)
|
||||
rankMatches = 0
|
||||
suitMatches = 0
|
||||
totalMatches = 0
|
||||
for i in adjacent:
|
||||
if len(i.cards) > 0:
|
||||
totalMatches += 1
|
||||
if i.cards[-1].rank == playRank:
|
||||
rankMatches += 1
|
||||
if i.cards[-1].suit == playSuit:
|
||||
suitMatches += 1
|
||||
|
||||
if i.cards[-1].suit != playSuit and \
|
||||
i.cards[-1].rank != playRank:
|
||||
return False
|
||||
|
||||
if self.REQUIRE_ADJACENT and totalMatches == 0:
|
||||
return False
|
||||
|
||||
if self.STRICT_FOUR_WAYS:
|
||||
if totalMatches > 1 and (rankMatches == 0 or suitMatches == 0):
|
||||
return False
|
||||
if totalMatches == 4 and (rankMatches < 2 or suitMatches < 2):
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def getAdjacent(self, playSpace):
|
||||
adjacentRows = []
|
||||
if playSpace % 12 != 11:
|
||||
adjacentRows.append(self.s.rows[playSpace + 1])
|
||||
|
||||
if playSpace % 12 != 0:
|
||||
adjacentRows.append(self.s.rows[playSpace - 1])
|
||||
|
||||
if playSpace + 12 < 96:
|
||||
adjacentRows.append(self.s.rows[playSpace + 12])
|
||||
|
||||
if playSpace - 12 > -1:
|
||||
adjacentRows.append(self.s.rows[playSpace - 12])
|
||||
|
||||
return adjacentRows
|
||||
|
||||
|
||||
class IshidoRelaxed(Ishido):
|
||||
STRICT_FOUR_WAYS = False
|
||||
|
||||
|
||||
class FreeIshido(Ishido):
|
||||
REQUIRE_ADJACENT = False
|
||||
|
||||
|
||||
class FreeIshidoRelaxed(Ishido):
|
||||
STRICT_FOUR_WAYS = False
|
||||
REQUIRE_ADJACENT = False
|
||||
|
||||
|
||||
def r(id, gameclass, name, decks, redeals, skill_level):
|
||||
game_type = GI.GT_ISHIDO
|
||||
gi = GameInfo(id, gameclass, name, game_type, decks, redeals, skill_level,
|
||||
ranks=list(range(6)), suits=list(range(6)),
|
||||
category=GI.GC_ISHIDO)
|
||||
registerGame(gi)
|
||||
return gi
|
||||
|
||||
|
||||
r(18000, Ishido, 'Ishido', 2, 0, GI.SL_MOSTLY_SKILL)
|
||||
r(18001, IshidoRelaxed, 'Ishido Relaxed', 2, 0, GI.SL_MOSTLY_SKILL)
|
||||
r(18002, FreeIshido, 'Free Ishido', 2, 0, GI.SL_MOSTLY_SKILL)
|
||||
r(18003, FreeIshidoRelaxed, 'Free Ishido Relaxed', 2, 0, GI.SL_MOSTLY_SKILL)
|
|
@ -210,6 +210,7 @@ highlight_piles = float(0.2, 9.9)
|
|||
11_8 = string_list(min=2, max=2)
|
||||
11_9 = string_list(min=2, max=2)
|
||||
11_10 = string_list(min=2, max=2)
|
||||
12 = string_list(min=2, max=2)
|
||||
scale_cards = boolean
|
||||
scale_x = float
|
||||
scale_y = float
|
||||
|
@ -577,6 +578,7 @@ class Options:
|
|||
8: ("Mid Winter's Eve (8x8)", ""),
|
||||
9: ("Hofamterspiel (9x9)", ""),
|
||||
10: ("Eternal Dragon (10x10)", "")},
|
||||
CSI.TYPE_ISHIDO: {0: ("Simple Ishido XL", "")},
|
||||
}
|
||||
else:
|
||||
self.cardset = {
|
||||
|
@ -601,6 +603,7 @@ class Options:
|
|||
8: ("Mid Winter's Eve (8x8)", ""),
|
||||
9: ("Hofamterspiel (9x9)", ""),
|
||||
10: ("Eternal Dragon (10x10)", "")},
|
||||
CSI.TYPE_ISHIDO: {0: ("Simple Ishido", "")},
|
||||
}
|
||||
|
||||
# not changeable options
|
||||
|
|
|
@ -182,6 +182,7 @@ class CSI:
|
|||
TYPE_TRUMP_ONLY = 9
|
||||
TYPE_MATCHING = 10
|
||||
TYPE_PUZZLE = 11
|
||||
TYPE_ISHIDO = 12
|
||||
|
||||
# cardset subtypes
|
||||
SUBTYPE_NONE = 0
|
||||
|
@ -206,7 +207,8 @@ class CSI:
|
|||
8: _("Dashavatara Ganjifa type (120 cards)"),
|
||||
9: _("Trumps only type (variable cards)"),
|
||||
10: _("Matching type (variable cards)"),
|
||||
11: _("Puzzle type (variable pieces)")
|
||||
11: _("Puzzle type (variable pieces)"),
|
||||
12: _("Ishido type (36 tiles)")
|
||||
}
|
||||
|
||||
TYPE_NAME = {
|
||||
|
@ -220,7 +222,8 @@ class CSI:
|
|||
8: _("Dashavatara Ganjifa"),
|
||||
9: _("Trumps only"),
|
||||
10: _("Matching"),
|
||||
11: _("Puzzle")
|
||||
11: _("Puzzle"),
|
||||
12: _("Ishido")
|
||||
}
|
||||
|
||||
SUBTYPE_NAME = {
|
||||
|
@ -246,7 +249,8 @@ class CSI:
|
|||
8: "dashavatara-ganjifa",
|
||||
9: "trumps-only",
|
||||
10: "matching",
|
||||
11: "puzzle"
|
||||
11: "puzzle",
|
||||
12: "ishido"
|
||||
}
|
||||
|
||||
TYPE_SUITS = {
|
||||
|
@ -260,7 +264,8 @@ class CSI:
|
|||
8: "abcdefghij",
|
||||
9: "",
|
||||
10: "",
|
||||
11: ""
|
||||
11: "",
|
||||
12: "abcdef"
|
||||
}
|
||||
|
||||
TYPE_RANKS = {
|
||||
|
@ -275,6 +280,7 @@ class CSI:
|
|||
9: list(range(0)),
|
||||
10: list(range(0)),
|
||||
11: list(range(0)),
|
||||
12: list(range(6))
|
||||
}
|
||||
|
||||
TYPE_TRUMPS = {
|
||||
|
@ -289,6 +295,7 @@ class CSI:
|
|||
9: (),
|
||||
10: (),
|
||||
11: (),
|
||||
12: ()
|
||||
}
|
||||
|
||||
# cardset styles
|
||||
|
@ -308,6 +315,7 @@ class CSI:
|
|||
12: _("Hanafuda"), #
|
||||
29: _("Hex A Deck"), #
|
||||
13: _("Holiday"), #
|
||||
34: _("Ishido"), #
|
||||
28: _("Mahjongg"), #
|
||||
32: _("Matching"), #
|
||||
14: _("Movies"), #
|
||||
|
@ -548,7 +556,10 @@ class CardsetManager(ResourceManager):
|
|||
cs.nletters = 0
|
||||
cs.nshadows = 0
|
||||
cs.trumps = list(range(cs.ncards))
|
||||
|
||||
elif s == CSI.TYPE_ISHIDO:
|
||||
cs.nbottoms = 0
|
||||
cs.nletters = 0
|
||||
cs.nshadows = 0
|
||||
else:
|
||||
return 0
|
||||
return 1
|
||||
|
|
|
@ -27,7 +27,8 @@ cardset_type = {
|
|||
'8': 'Dashavatara Ganjifa',
|
||||
'9': 'Trump only',
|
||||
'10': 'Matching',
|
||||
'11': 'Puzzle'
|
||||
'11': 'Puzzle',
|
||||
'12': 'Ishido'
|
||||
}
|
||||
|
||||
ALL_IMGS = False
|
||||
|
|