1
0
Fork 0
mirror of https://github.com/shlomif/PySolFC.git synced 2025-04-05 00:02:29 -04:00

Added Ishido game.

This commit is contained in:
Joe R 2023-11-05 13:12:02 -05:00
parent e01d0fe7a7
commit c4a18d3557
95 changed files with 371 additions and 14 deletions

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

View file

@ -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>

View file

@ -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>

View 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.

View 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.

View 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.

View 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.

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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"

View file

@ -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 ""

View file

@ -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 "Классические"

View file

@ -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"

View file

@ -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

View file

@ -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

View 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)

View file

@ -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

View file

@ -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

View file

@ -27,7 +27,8 @@ cardset_type = {
'8': 'Dashavatara Ganjifa',
'9': 'Trump only',
'10': 'Matching',
'11': 'Puzzle'
'11': 'Puzzle',
'12': 'Ishido'
}
ALL_IMGS = False