mirror of
https://github.com/shlomif/PySolFC.git
synced 2025-04-05 00:02:29 -04:00
flake8 - games/n*
This commit is contained in:
parent
231d370000
commit
bbc2af7c59
4 changed files with 135 additions and 91 deletions
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- mode: python; coding: utf-8; -*-
|
# -*- mode: python; coding: utf-8; -*-
|
||||||
# ---------------------------------------------------------------------------##
|
# ---------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
|
# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
|
||||||
# Copyright (C) 2003 Mt. Hood Playing Card Co.
|
# Copyright (C) 2003 Mt. Hood Playing Card Co.
|
||||||
|
@ -19,26 +19,33 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
# ---------------------------------------------------------------------------##
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
__all__ = []
|
__all__ = []
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
import sys
|
|
||||||
|
|
||||||
# PySol imports
|
# PySol imports
|
||||||
from pysollib.mygettext import _, n_
|
from pysollib.mygettext import _
|
||||||
from pysollib.gamedb import registerGame, GameInfo, GI
|
from pysollib.gamedb import registerGame, GameInfo, GI
|
||||||
from pysollib.util import *
|
|
||||||
from pysollib.mfxutil import kwdefault
|
from pysollib.mfxutil import kwdefault
|
||||||
from pysollib.stack import *
|
|
||||||
from pysollib.game import Game
|
from pysollib.game import Game
|
||||||
from pysollib.layout import Layout
|
from pysollib.layout import Layout
|
||||||
from pysollib.hint import AbstractHint, DefaultHint, CautiousDefaultHint
|
from pysollib.hint import CautiousDefaultHint
|
||||||
from pysollib.pysoltk import MfxCanvasText
|
from pysollib.pysoltk import MfxCanvasText
|
||||||
|
|
||||||
from braid import Braid_Foundation
|
from braid import Braid_Foundation
|
||||||
|
|
||||||
|
from pysollib.util import ACE, KING, RANKS, UNLIMITED_CARDS
|
||||||
|
|
||||||
|
from pysollib.stack import \
|
||||||
|
BasicRowStack, \
|
||||||
|
InitialDealTalonStack, \
|
||||||
|
ReserveStack, \
|
||||||
|
SS_FoundationStack, \
|
||||||
|
Stack, \
|
||||||
|
UD_SS_RowStack, \
|
||||||
|
StackWrapper
|
||||||
|
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
# * stacks
|
# * stacks
|
||||||
|
@ -57,9 +64,9 @@ class Napoleon_ReserveStack(BasicRowStack):
|
||||||
|
|
||||||
class Napoleon_SingleFreeCell(ReserveStack):
|
class Napoleon_SingleFreeCell(ReserveStack):
|
||||||
def acceptsCards(self, from_stack, cards):
|
def acceptsCards(self, from_stack, cards):
|
||||||
## if from_stack.id >= 8:
|
# if from_stack.id >= 8:
|
||||||
## # from_stack must be a Napoleon_RowStack
|
# # from_stack must be a Napoleon_RowStack
|
||||||
## return False
|
# return False
|
||||||
return ReserveStack.acceptsCards(self, from_stack, cards)
|
return ReserveStack.acceptsCards(self, from_stack, cards)
|
||||||
|
|
||||||
def canMoveCards(self, cards):
|
def canMoveCards(self, cards):
|
||||||
|
@ -122,7 +129,7 @@ class DerKleineNapoleon(Game):
|
||||||
y = y + l.YS
|
y = y + l.YS
|
||||||
# talon
|
# talon
|
||||||
if cells == 1:
|
if cells == 1:
|
||||||
##x, y = l.XM, self.height - l.YS
|
# x, y = l.XM, self.height - l.YS
|
||||||
y = self.height + l.YS
|
y = self.height + l.YS
|
||||||
else:
|
else:
|
||||||
y = self.height - l.YS
|
y = self.height - l.YS
|
||||||
|
@ -144,9 +151,11 @@ class DerKleineNapoleon(Game):
|
||||||
#
|
#
|
||||||
|
|
||||||
def _shuffleHook(self, cards):
|
def _shuffleHook(self, cards):
|
||||||
# move 4 cards of the same rank to bottom of the Talon (i.e. last cards to be dealt)
|
# move 4 cards of the same rank to bottom of the Talon (i.e.
|
||||||
|
# last cards to be dealt)
|
||||||
rank = cards[-1].rank
|
rank = cards[-1].rank
|
||||||
return self._shuffleHookMoveToBottom(cards, lambda c, rank=rank: (c.rank == rank, c.suit))
|
return self._shuffleHookMoveToBottom(
|
||||||
|
cards, lambda c, rank=rank: (c.rank == rank, c.suit))
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
|
@ -249,6 +258,7 @@ class Napoleon(DerKleineNapoleon):
|
||||||
|
|
||||||
class FreeNapoleon(DerFreieNapoleon):
|
class FreeNapoleon(DerFreieNapoleon):
|
||||||
FreeCell_Class = Napoleon_FreeCell
|
FreeCell_Class = Napoleon_FreeCell
|
||||||
|
|
||||||
def createGame(self):
|
def createGame(self):
|
||||||
DerFreieNapoleon.createGame(self, cells=2)
|
DerFreieNapoleon.createGame(self, cells=2)
|
||||||
|
|
||||||
|
@ -298,7 +308,8 @@ class TheLittleCorporal(DerFreieNapoleon):
|
||||||
x += l.XS
|
x += l.XS
|
||||||
tx, ty, ta, tf = l.getTextAttr(s.foundations[-1], "se")
|
tx, ty, ta, tf = l.getTextAttr(s.foundations[-1], "se")
|
||||||
font = self.app.getFont("canvas_default")
|
font = self.app.getFont("canvas_default")
|
||||||
self.texts.info = MfxCanvasText(self.canvas, tx, ty, anchor=ta, font=font)
|
self.texts.info = MfxCanvasText(
|
||||||
|
self.canvas, tx, ty, anchor=ta, font=font)
|
||||||
x += 2*l.XS
|
x += 2*l.XS
|
||||||
stack = ReserveStack(x, y, self, max_cards=UNLIMITED_CARDS)
|
stack = ReserveStack(x, y, self, max_cards=UNLIMITED_CARDS)
|
||||||
s.reserves.append(stack)
|
s.reserves.append(stack)
|
||||||
|
@ -360,7 +371,7 @@ class BusyCards(Game):
|
||||||
Hint_Class = CautiousDefaultHint
|
Hint_Class = CautiousDefaultHint
|
||||||
|
|
||||||
def createGame(self):
|
def createGame(self):
|
||||||
rows=12
|
rows = 12
|
||||||
|
|
||||||
l, s = Layout(self), self.s
|
l, s = Layout(self), self.s
|
||||||
self.setSize(l.XM+rows*l.XS, l.YM + 3*l.YS+16*l.YOFFSET)
|
self.setSize(l.XM+rows*l.XS, l.YM + 3*l.YS+16*l.YOFFSET)
|
||||||
|
@ -390,8 +401,10 @@ class BusyCards(Game):
|
||||||
l.defaultStackGroups()
|
l.defaultStackGroups()
|
||||||
|
|
||||||
def _shuffleHook(self, cards):
|
def _shuffleHook(self, cards):
|
||||||
return self._shuffleHookMoveToTop(cards,
|
return self._shuffleHookMoveToTop(
|
||||||
lambda c: ((c.rank in (ACE,KING) and c.deck == 0), (c.rank, c.suit)))
|
cards,
|
||||||
|
lambda c: ((c.rank in (ACE, KING) and c.deck == 0),
|
||||||
|
(c.rank, c.suit)))
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
self.s.talon.dealRow(rows=self.s.foundations, frames=0)
|
self.s.talon.dealRow(rows=self.s.foundations, frames=0)
|
||||||
|
@ -403,7 +416,6 @@ class BusyCards(Game):
|
||||||
shallHighlightMatch = Game._shallHighlightMatch_SS
|
shallHighlightMatch = Game._shallHighlightMatch_SS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# register the game
|
# register the game
|
||||||
registerGame(GameInfo(167, DerKleineNapoleon, "Der kleine Napoleon",
|
registerGame(GameInfo(167, DerKleineNapoleon, "Der kleine Napoleon",
|
||||||
GI.GT_NAPOLEON | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NAPOLEON | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
||||||
|
@ -418,7 +430,8 @@ registerGame(GameInfo(536, Master, "Master",
|
||||||
registerGame(GameInfo(537, TheLittleCorporal, "The Little Corporal",
|
registerGame(GameInfo(537, TheLittleCorporal, "The Little Corporal",
|
||||||
GI.GT_NAPOLEON | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NAPOLEON | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(538, Bonaparte, "Bonaparte",
|
registerGame(GameInfo(538, Bonaparte, "Bonaparte",
|
||||||
GI.GT_NAPOLEON | GI.GT_OPEN | GI.GT_ORIGINAL, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NAPOLEON | GI.GT_OPEN | GI.GT_ORIGINAL, 1, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(705, BusyCards, "Busy Cards",
|
registerGame(GameInfo(705, BusyCards, "Busy Cards",
|
||||||
GI.GT_NAPOLEON | GI.GT_OPEN | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NAPOLEON | GI.GT_OPEN | GI.GT_ORIGINAL, 2, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
|
|
|
@ -24,17 +24,22 @@
|
||||||
__all__ = []
|
__all__ = []
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
import sys
|
|
||||||
|
|
||||||
# PySol imports
|
# PySol imports
|
||||||
from pysollib.gamedb import registerGame, GameInfo, GI
|
from pysollib.gamedb import registerGame, GameInfo, GI
|
||||||
from pysollib.util import *
|
|
||||||
from pysollib.mfxutil import kwdefault
|
|
||||||
from pysollib.stack import *
|
|
||||||
from pysollib.game import Game
|
from pysollib.game import Game
|
||||||
from pysollib.layout import Layout
|
from pysollib.layout import Layout
|
||||||
from pysollib.hint import AbstractHint, DefaultHint, CautiousDefaultHint
|
from pysollib.hint import CautiousDefaultHint
|
||||||
|
|
||||||
|
# from pysollib.util import ANY_SUIT, KING
|
||||||
|
|
||||||
|
from pysollib.stack import \
|
||||||
|
AC_RowStack, \
|
||||||
|
InitialDealTalonStack, \
|
||||||
|
OpenStack, \
|
||||||
|
ReserveStack, \
|
||||||
|
SS_FoundationStack, \
|
||||||
|
StackWrapper
|
||||||
|
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
# * Needle
|
# * Needle
|
||||||
|
@ -42,6 +47,7 @@ from pysollib.hint import AbstractHint, DefaultHint, CautiousDefaultHint
|
||||||
# * Pitchfork
|
# * Pitchfork
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
|
|
||||||
|
|
||||||
class Needle(Game):
|
class Needle(Game):
|
||||||
|
|
||||||
Hint_Class = CautiousDefaultHint
|
Hint_Class = CautiousDefaultHint
|
||||||
|
@ -64,7 +70,8 @@ class Needle(Game):
|
||||||
stack = self.ReserveStack_Class(x, y, self)
|
stack = self.ReserveStack_Class(x, y, self)
|
||||||
stack.CARD_XOFFSET, stack.CARD_YOFFSET = l.XOFFSET, 0
|
stack.CARD_XOFFSET, stack.CARD_YOFFSET = l.XOFFSET, 0
|
||||||
s.reserves.append(stack)
|
s.reserves.append(stack)
|
||||||
self.setRegion(s.reserves, (-999, -999, w-4*l.XS-l.CW/2, l.YM+l.YS-l.CH/2))
|
self.setRegion(
|
||||||
|
s.reserves, (-999, -999, w-4*l.XS-l.CW/2, l.YM+l.YS-l.CH/2))
|
||||||
|
|
||||||
x = w-4*l.XS
|
x = w-4*l.XS
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
|
@ -119,4 +126,3 @@ registerGame(GameInfo(319, Haystack, "Haystack",
|
||||||
GI.GT_FREECELL | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_FREECELL | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(367, Pitchfork, "Pitchfork",
|
registerGame(GameInfo(367, Pitchfork, "Pitchfork",
|
||||||
GI.GT_FREECELL | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_FREECELL | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- mode: python; coding: utf-8; -*-
|
# -*- mode: python; coding: utf-8; -*-
|
||||||
# ---------------------------------------------------------------------------##
|
# ---------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
|
# Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer
|
||||||
# Copyright (C) 2003 Mt. Hood Playing Card Co.
|
# Copyright (C) 2003 Mt. Hood Playing Card Co.
|
||||||
|
@ -19,33 +19,52 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
# ---------------------------------------------------------------------------##
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
__all__ = []
|
__all__ = []
|
||||||
|
|
||||||
# imports
|
# imports
|
||||||
import sys, time
|
import time
|
||||||
|
|
||||||
# PySol imports
|
# PySol imports
|
||||||
from pysollib.mygettext import _, n_
|
from pysollib.mygettext import _
|
||||||
from pysollib.gamedb import registerGame, GameInfo, GI
|
from pysollib.gamedb import registerGame, GameInfo, GI
|
||||||
from pysollib.util import *
|
|
||||||
from pysollib.stack import *
|
|
||||||
from pysollib.game import Game
|
from pysollib.game import Game
|
||||||
from pysollib.layout import Layout
|
from pysollib.layout import Layout
|
||||||
from pysollib.hint import AbstractHint, DefaultHint, CautiousDefaultHint
|
from pysollib.hint import DefaultHint, CautiousDefaultHint
|
||||||
from pysollib.mfxutil import kwdefault
|
from pysollib.mfxutil import kwdefault
|
||||||
|
|
||||||
|
from pysollib.util import ACE, ANY_RANK, ANY_SUIT, JACK, KING, NO_RANK, \
|
||||||
|
UNLIMITED_ACCEPTS, \
|
||||||
|
UNLIMITED_CARDS
|
||||||
|
|
||||||
|
from pysollib.stack import \
|
||||||
|
AC_RowStack, \
|
||||||
|
BasicRowStack, \
|
||||||
|
DealRowTalonStack, \
|
||||||
|
InitialDealTalonStack, \
|
||||||
|
OpenStack, \
|
||||||
|
OpenTalonStack, \
|
||||||
|
RK_FoundationStack, \
|
||||||
|
RK_RowStack, \
|
||||||
|
ReserveStack, \
|
||||||
|
SS_FoundationStack, \
|
||||||
|
Stack, \
|
||||||
|
StackWrapper, \
|
||||||
|
TalonStack, \
|
||||||
|
WasteStack, \
|
||||||
|
WasteTalonStack
|
||||||
|
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
# *
|
# *
|
||||||
# ************************************************************************
|
# ************************************************************************
|
||||||
|
|
||||||
|
|
||||||
class Numerica_Hint(DefaultHint):
|
class Numerica_Hint(DefaultHint):
|
||||||
# FIXME: demo is clueless
|
# FIXME: demo is clueless
|
||||||
|
|
||||||
#def _getDropCardScore(self, score, color, r, t, ncards):
|
# def _getDropCardScore(self, score, color, r, t, ncards):
|
||||||
#FIXME: implement this method
|
# FIXME: implement this method
|
||||||
|
|
||||||
def _getMoveWasteScore(self, score, color, r, t, pile, rpile):
|
def _getMoveWasteScore(self, score, color, r, t, pile, rpile):
|
||||||
assert r in (self.game.s.waste, self.game.s.talon) and len(pile) == 1
|
assert r in (self.game.s.waste, self.game.s.talon) and len(pile) == 1
|
||||||
|
@ -80,7 +99,7 @@ class Numerica_RowStack(BasicRowStack):
|
||||||
getBottomImage = Stack._getReserveBottomImage
|
getBottomImage = Stack._getReserveBottomImage
|
||||||
|
|
||||||
def getHelp(self):
|
def getHelp(self):
|
||||||
##return _('Tableau. Accepts any one card from the Waste.')
|
# return _('Tableau. Accepts any one card from the Waste.')
|
||||||
return _('Tableau. Build regardless of rank and suit.')
|
return _('Tableau. Build regardless of rank and suit.')
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,7 +116,8 @@ class Numerica(Game):
|
||||||
# game layout
|
# game layout
|
||||||
#
|
#
|
||||||
|
|
||||||
def createGame(self, rows=4, reserve=False, max_rounds=1, waste_max_cards=1):
|
def createGame(self, rows=4, reserve=False, max_rounds=1,
|
||||||
|
waste_max_cards=1):
|
||||||
# create layout
|
# create layout
|
||||||
l, s = Layout(self), self.s
|
l, s = Layout(self), self.s
|
||||||
decks = self.gameinfo.decks
|
decks = self.gameinfo.decks
|
||||||
|
@ -142,7 +162,6 @@ class Numerica(Game):
|
||||||
|
|
||||||
return l
|
return l
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# game overrides
|
# game overrides
|
||||||
#
|
#
|
||||||
|
@ -169,6 +188,7 @@ class Numerica2Decks(Numerica):
|
||||||
|
|
||||||
class LadyBetty(Numerica):
|
class LadyBetty(Numerica):
|
||||||
Foundation_Class = SS_FoundationStack
|
Foundation_Class = SS_FoundationStack
|
||||||
|
|
||||||
def createGame(self):
|
def createGame(self):
|
||||||
Numerica.createGame(self, rows=6)
|
Numerica.createGame(self, rows=6)
|
||||||
|
|
||||||
|
@ -243,6 +263,7 @@ class PussInTheCorner_Foundation(SS_FoundationStack):
|
||||||
def __init__(self, x, y, game, **cap):
|
def __init__(self, x, y, game, **cap):
|
||||||
kwdefault(cap, base_suit=ANY_SUIT)
|
kwdefault(cap, base_suit=ANY_SUIT)
|
||||||
SS_FoundationStack.__init__(self, x, y, game, ANY_SUIT, **cap)
|
SS_FoundationStack.__init__(self, x, y, game, ANY_SUIT, **cap)
|
||||||
|
|
||||||
def acceptsCards(self, from_stack, cards):
|
def acceptsCards(self, from_stack, cards):
|
||||||
if not SS_FoundationStack.acceptsCards(self, from_stack, cards):
|
if not SS_FoundationStack.acceptsCards(self, from_stack, cards):
|
||||||
return False
|
return False
|
||||||
|
@ -251,6 +272,7 @@ class PussInTheCorner_Foundation(SS_FoundationStack):
|
||||||
if cards[0].color != self.cards[-1].color:
|
if cards[0].color != self.cards[-1].color:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def getHelp(self):
|
def getHelp(self):
|
||||||
return _('Foundation. Build up by color.')
|
return _('Foundation. Build up by color.')
|
||||||
|
|
||||||
|
@ -266,7 +288,7 @@ class PussInTheCorner_RowStack(BasicRowStack):
|
||||||
getBottomImage = Stack._getReserveBottomImage
|
getBottomImage = Stack._getReserveBottomImage
|
||||||
|
|
||||||
def getHelp(self):
|
def getHelp(self):
|
||||||
##return _('Tableau. Accepts any one card from the Waste.')
|
# return _('Tableau. Accepts any one card from the Waste.')
|
||||||
return _('Tableau. Build regardless of rank and suit.')
|
return _('Tableau. Build regardless of rank and suit.')
|
||||||
|
|
||||||
|
|
||||||
|
@ -275,8 +297,8 @@ class PussInTheCorner(Numerica):
|
||||||
def createGame(self, rows=4):
|
def createGame(self, rows=4):
|
||||||
l, s = Layout(self), self.s
|
l, s = Layout(self), self.s
|
||||||
self.setSize(l.XM+5*l.XS, l.YM+4*l.YS)
|
self.setSize(l.XM+5*l.XS, l.YM+4*l.YS)
|
||||||
for x, y in ((l.XM, l.YM ),
|
for x, y in ((l.XM, l.YM),
|
||||||
(l.XM+4*l.XS, l.YM ),
|
(l.XM+4*l.XS, l.YM),
|
||||||
(l.XM, l.YM+3*l.YS),
|
(l.XM, l.YM+3*l.YS),
|
||||||
(l.XM+4*l.XS, l.YM+3*l.YS),
|
(l.XM+4*l.XS, l.YM+3*l.YS),
|
||||||
):
|
):
|
||||||
|
@ -284,10 +306,10 @@ class PussInTheCorner(Numerica):
|
||||||
max_accept=1, max_move=1)
|
max_accept=1, max_move=1)
|
||||||
stack.CARD_XOFFSET, stack.CARD_YOFFSET = 0, 0
|
stack.CARD_XOFFSET, stack.CARD_YOFFSET = 0, 0
|
||||||
s.rows.append(stack)
|
s.rows.append(stack)
|
||||||
for x, y in ((l.XM+1.5*l.XS, l.YM+ l.YS),
|
for x, y in ((l.XM+1.5*l.XS, l.YM + l.YS),
|
||||||
(l.XM+1.5*l.XS, l.YM+2*l.YS),
|
(l.XM+1.5*l.XS, l.YM + 2*l.YS),
|
||||||
(l.XM+2.5*l.XS, l.YM+ l.YS),
|
(l.XM+2.5*l.XS, l.YM + l.YS),
|
||||||
(l.XM+2.5*l.XS, l.YM+2*l.YS),
|
(l.XM+2.5*l.XS, l.YM + 2*l.YS),
|
||||||
):
|
):
|
||||||
s.foundations.append(PussInTheCorner_Foundation(x, y, self,
|
s.foundations.append(PussInTheCorner_Foundation(x, y, self,
|
||||||
max_move=0))
|
max_move=0))
|
||||||
|
@ -299,18 +321,15 @@ class PussInTheCorner(Numerica):
|
||||||
# define stack-groups
|
# define stack-groups
|
||||||
l.defaultStackGroups()
|
l.defaultStackGroups()
|
||||||
|
|
||||||
|
|
||||||
def _shuffleHook(self, cards):
|
def _shuffleHook(self, cards):
|
||||||
return self._shuffleHookMoveToTop(cards,
|
return self._shuffleHookMoveToTop(
|
||||||
lambda c: (c.rank == ACE, c.suit))
|
cards, lambda c: (c.rank == ACE, c.suit))
|
||||||
|
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
self.startDealSample()
|
self.startDealSample()
|
||||||
self.s.talon.dealRow(rows=self.s.foundations)
|
self.s.talon.dealRow(rows=self.s.foundations)
|
||||||
self.s.talon.fillStack()
|
self.s.talon.fillStack()
|
||||||
|
|
||||||
|
|
||||||
def _autoDeal(self, sound=True):
|
def _autoDeal(self, sound=True):
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
@ -324,7 +343,7 @@ class PussInTheCorner(Numerica):
|
||||||
class Frog(Game):
|
class Frog(Game):
|
||||||
|
|
||||||
Hint_Class = Numerica_Hint
|
Hint_Class = Numerica_Hint
|
||||||
##Foundation_Class = SS_FoundationStack
|
# Foundation_Class = SS_FoundationStack
|
||||||
Foundation_Class = RK_FoundationStack
|
Foundation_Class = RK_FoundationStack
|
||||||
|
|
||||||
def createGame(self):
|
def createGame(self):
|
||||||
|
@ -356,14 +375,13 @@ class Frog(Game):
|
||||||
x += l.XS
|
x += l.XS
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
stack = Numerica_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS)
|
stack = Numerica_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS)
|
||||||
#stack.CARD_XOFFSET, stack.CARD_YOFFSET = 0, l.YOFFSET
|
# stack.CARD_XOFFSET, stack.CARD_YOFFSET = 0, l.YOFFSET
|
||||||
s.rows.append(stack)
|
s.rows.append(stack)
|
||||||
x = x + l.XS
|
x = x + l.XS
|
||||||
|
|
||||||
# define stack-groups
|
# define stack-groups
|
||||||
l.defaultStackGroups()
|
l.defaultStackGroups()
|
||||||
|
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
self.startDealSample()
|
self.startDealSample()
|
||||||
n = 0
|
n = 0
|
||||||
|
@ -373,7 +391,7 @@ class Frog(Game):
|
||||||
if c.rank == ACE:
|
if c.rank == ACE:
|
||||||
r = self.s.foundations[f]
|
r = self.s.foundations[f]
|
||||||
f += 1
|
f += 1
|
||||||
##r = self.s.foundations[c.suit*2]
|
# r = self.s.foundations[c.suit*2]
|
||||||
else:
|
else:
|
||||||
r = self.s.reserves[0]
|
r = self.s.reserves[0]
|
||||||
n += 1
|
n += 1
|
||||||
|
@ -388,8 +406,8 @@ class Fly(Frog):
|
||||||
Foundation_Class = RK_FoundationStack
|
Foundation_Class = RK_FoundationStack
|
||||||
|
|
||||||
def _shuffleHook(self, cards):
|
def _shuffleHook(self, cards):
|
||||||
return self._shuffleHookMoveToTop(cards,
|
return self._shuffleHookMoveToTop(
|
||||||
lambda c: (c.rank == ACE, c.suit))
|
cards, lambda c: (c.rank == ACE, c.suit))
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
self.startDealSample()
|
self.startDealSample()
|
||||||
|
@ -439,7 +457,8 @@ class Gnat(Game):
|
||||||
|
|
||||||
x, y = l.XM+2*l.XS, l.YM+l.YS
|
x, y = l.XM+2*l.XS, l.YM+l.YS
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
s.rows.append(Numerica_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS))
|
s.rows.append(
|
||||||
|
Numerica_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS))
|
||||||
x += l.XS
|
x += l.XS
|
||||||
x = l.XM+6*l.XS
|
x = l.XM+6*l.XS
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
|
@ -452,10 +471,9 @@ class Gnat(Game):
|
||||||
# define stack-groups
|
# define stack-groups
|
||||||
l.defaultStackGroups()
|
l.defaultStackGroups()
|
||||||
|
|
||||||
|
|
||||||
def _shuffleHook(self, cards):
|
def _shuffleHook(self, cards):
|
||||||
return self._shuffleHookMoveToTop(cards,
|
return self._shuffleHookMoveToTop(
|
||||||
lambda c: (c.rank == ACE, c.suit))
|
cards, lambda c: (c.rank == ACE, c.suit))
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
self.startDealSample()
|
self.startDealSample()
|
||||||
|
@ -529,7 +547,8 @@ class Gloaming(Game):
|
||||||
|
|
||||||
x += l.XS
|
x += l.XS
|
||||||
for i in range(rows):
|
for i in range(rows):
|
||||||
s.rows.append(Gloaming_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS))
|
s.rows.append(
|
||||||
|
Gloaming_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS))
|
||||||
x += l.XS
|
x += l.XS
|
||||||
|
|
||||||
s.talon = InitialDealTalonStack(w-l.XS, h-l.YS, self)
|
s.talon = InitialDealTalonStack(w-l.XS, h-l.YS, self)
|
||||||
|
@ -537,7 +556,6 @@ class Gloaming(Game):
|
||||||
# default
|
# default
|
||||||
l.defaultAll()
|
l.defaultAll()
|
||||||
|
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
n = 52/len(self.s.reserves)+1
|
n = 52/len(self.s.reserves)+1
|
||||||
for i in range(n-3):
|
for i in range(n-3):
|
||||||
|
@ -550,6 +568,7 @@ class Gloaming(Game):
|
||||||
|
|
||||||
class Chamberlain(Gloaming):
|
class Chamberlain(Gloaming):
|
||||||
Foundation_Class = RK_FoundationStack
|
Foundation_Class = RK_FoundationStack
|
||||||
|
|
||||||
def createGame(self, reserves=3, rows=5):
|
def createGame(self, reserves=3, rows=5):
|
||||||
Gloaming.createGame(self, reserves=4, rows=3)
|
Gloaming.createGame(self, reserves=4, rows=3)
|
||||||
|
|
||||||
|
@ -567,6 +586,7 @@ class Toad_TalonStack(DealRowTalonStack):
|
||||||
if r.cards:
|
if r.cards:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def dealCards(self, sound=False):
|
def dealCards(self, sound=False):
|
||||||
self.dealRow(rows=self.game.s.reserves, sound=sound)
|
self.dealRow(rows=self.game.s.reserves, sound=sound)
|
||||||
|
|
||||||
|
@ -592,7 +612,8 @@ class Toad(Game):
|
||||||
x += l.XS
|
x += l.XS
|
||||||
x, y = l.XM+3*l.XS/2, l.YM+l.YS
|
x, y = l.XM+3*l.XS/2, l.YM+l.YS
|
||||||
for i in range(5):
|
for i in range(5):
|
||||||
s.rows.append(Gloaming_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS))
|
s.rows.append(
|
||||||
|
Gloaming_RowStack(x, y, self, max_accept=UNLIMITED_ACCEPTS))
|
||||||
x += l.XS
|
x += l.XS
|
||||||
y = l.YM+l.YS/2
|
y = l.YM+l.YS/2
|
||||||
for i in (3, 3, 3, 3, 1):
|
for i in (3, 3, 3, 3, 1):
|
||||||
|
@ -627,7 +648,7 @@ class Shifting_RowStack(Numerica_RowStack):
|
||||||
if not self.cards:
|
if not self.cards:
|
||||||
return cards[0].rank == KING
|
return cards[0].rank == KING
|
||||||
if (from_stack in self.game.s.rows and
|
if (from_stack in self.game.s.rows and
|
||||||
self.cards[-1].rank-cards[0].rank == 1):
|
self.cards[-1].rank-cards[0].rank == 1):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -651,7 +672,8 @@ class Strategerie_RowStack(BasicRowStack):
|
||||||
def acceptsCards(self, from_stack, cards):
|
def acceptsCards(self, from_stack, cards):
|
||||||
if not BasicRowStack.acceptsCards(self, from_stack, cards):
|
if not BasicRowStack.acceptsCards(self, from_stack, cards):
|
||||||
return False
|
return False
|
||||||
if from_stack is self.game.s.talon or from_stack in self.game.s.reserves:
|
if from_stack is self.game.s.talon or \
|
||||||
|
from_stack in self.game.s.reserves:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -739,7 +761,8 @@ class AnnoDomini(Numerica):
|
||||||
RowStack_Class = StackWrapper(AC_RowStack, mod=13)
|
RowStack_Class = StackWrapper(AC_RowStack, mod=13)
|
||||||
|
|
||||||
def createGame(self):
|
def createGame(self):
|
||||||
l = Numerica.createGame(self, max_rounds=3, waste_max_cards=UNLIMITED_CARDS)
|
l = Numerica.createGame(
|
||||||
|
self, max_rounds=3, waste_max_cards=UNLIMITED_CARDS)
|
||||||
year = str(time.localtime()[0])
|
year = str(time.localtime()[0])
|
||||||
i = 0
|
i = 0
|
||||||
for s in self.s.foundations:
|
for s in self.s.foundations:
|
||||||
|
@ -784,15 +807,15 @@ class CircleNine(Game):
|
||||||
l, s = Layout(self), self.s
|
l, s = Layout(self), self.s
|
||||||
self.setSize(l.XM+7*l.XS, l.YM+3*l.YS)
|
self.setSize(l.XM+7*l.XS, l.YM+3*l.YS)
|
||||||
|
|
||||||
for i, j in ((1,0),
|
for i, j in ((1, 0),
|
||||||
(2,0),
|
(2, 0),
|
||||||
(3,0),
|
(3, 0),
|
||||||
(4,0),
|
(4, 0),
|
||||||
(5,1),
|
(5, 1),
|
||||||
(3.5,2),
|
(3.5, 2),
|
||||||
(2.5,2),
|
(2.5, 2),
|
||||||
(1.5,2),
|
(1.5, 2),
|
||||||
(0,1),
|
(0, 1),
|
||||||
):
|
):
|
||||||
x, y = l.XM+(1+i)*l.XS, l.YM+j*l.YS
|
x, y = l.XM+(1+i)*l.XS, l.YM+j*l.YS
|
||||||
stack = CircleNine_RowStack(x, y, self, max_accept=1,
|
stack = CircleNine_RowStack(x, y, self, max_accept=1,
|
||||||
|
@ -812,14 +835,12 @@ class CircleNine(Game):
|
||||||
l.defaultStackGroups()
|
l.defaultStackGroups()
|
||||||
self.sg.dropstacks.append(s.talon)
|
self.sg.dropstacks.append(s.talon)
|
||||||
|
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
self.startDealSample()
|
self.startDealSample()
|
||||||
self.s.talon.dealRow(rows=self.s.foundations)
|
self.s.talon.dealRow(rows=self.s.foundations)
|
||||||
self.s.talon.dealRow()
|
self.s.talon.dealRow()
|
||||||
self.s.talon.fillStack()
|
self.s.talon.fillStack()
|
||||||
|
|
||||||
|
|
||||||
def fillStack(self, stack):
|
def fillStack(self, stack):
|
||||||
if stack in self.s.rows and not stack.cards:
|
if stack in self.s.rows and not stack.cards:
|
||||||
if self.s.talon.cards:
|
if self.s.talon.cards:
|
||||||
|
@ -955,8 +976,8 @@ class Aglet(Game):
|
||||||
|
|
||||||
def _shuffleHook(self, cards):
|
def _shuffleHook(self, cards):
|
||||||
# move Aces to top of the Talon (i.e. first cards to be dealt)
|
# move Aces to top of the Talon (i.e. first cards to be dealt)
|
||||||
return self._shuffleHookMoveToTop(cards,
|
return self._shuffleHookMoveToTop(
|
||||||
lambda c: (c.rank == ACE, c.suit))
|
cards, lambda c: (c.rank == ACE, c.suit))
|
||||||
|
|
||||||
def startGame(self):
|
def startGame(self):
|
||||||
self.s.talon.dealRow(rows=self.s.foundations, frames=0)
|
self.s.talon.dealRow(rows=self.s.foundations, frames=0)
|
||||||
|
@ -967,11 +988,10 @@ class Aglet(Game):
|
||||||
self.s.talon.dealRowAvail()
|
self.s.talon.dealRowAvail()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# register the game
|
# register the game
|
||||||
registerGame(GameInfo(257, Numerica, "Numerica",
|
registerGame(GameInfo(257, Numerica, "Numerica",
|
||||||
GI.GT_NUMERICA | GI.GT_CONTRIB, 1, 0, GI.SL_BALANCED,
|
GI.GT_NUMERICA | GI.GT_CONTRIB, 1, 0, GI.SL_BALANCED,
|
||||||
altnames=("Sir Tommy",) ))
|
altnames=("Sir Tommy",)))
|
||||||
registerGame(GameInfo(171, LadyBetty, "Lady Betty",
|
registerGame(GameInfo(171, LadyBetty, "Lady Betty",
|
||||||
GI.GT_NUMERICA, 1, 0, GI.SL_BALANCED))
|
GI.GT_NUMERICA, 1, 0, GI.SL_BALANCED))
|
||||||
registerGame(GameInfo(355, Frog, "Frog",
|
registerGame(GameInfo(355, Frog, "Frog",
|
||||||
|
@ -982,9 +1002,11 @@ registerGame(GameInfo(356, Fly, "Fly",
|
||||||
registerGame(GameInfo(357, Gnat, "Gnat",
|
registerGame(GameInfo(357, Gnat, "Gnat",
|
||||||
GI.GT_NUMERICA, 1, 0, GI.SL_BALANCED))
|
GI.GT_NUMERICA, 1, 0, GI.SL_BALANCED))
|
||||||
registerGame(GameInfo(378, Gloaming, "Gloaming",
|
registerGame(GameInfo(378, Gloaming, "Gloaming",
|
||||||
GI.GT_NUMERICA | GI.GT_OPEN | GI.GT_ORIGINAL, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NUMERICA | GI.GT_OPEN | GI.GT_ORIGINAL, 1, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(379, Chamberlain, "Chamberlain",
|
registerGame(GameInfo(379, Chamberlain, "Chamberlain",
|
||||||
GI.GT_NUMERICA | GI.GT_OPEN | GI.GT_ORIGINAL, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NUMERICA | GI.GT_OPEN | GI.GT_ORIGINAL, 1, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(402, Toad, "Toad",
|
registerGame(GameInfo(402, Toad, "Toad",
|
||||||
GI.GT_NUMERICA, 2, 0, GI.SL_BALANCED))
|
GI.GT_NUMERICA, 2, 0, GI.SL_BALANCED))
|
||||||
registerGame(GameInfo(430, PussInTheCorner, "Puss in the Corner",
|
registerGame(GameInfo(430, PussInTheCorner, "Puss in the Corner",
|
||||||
|
@ -1006,11 +1028,14 @@ registerGame(GameInfo(613, Fanny, "Fanny",
|
||||||
registerGame(GameInfo(641, CircleNine, "Circle Nine",
|
registerGame(GameInfo(641, CircleNine, "Circle Nine",
|
||||||
GI.GT_NUMERICA, 1, 0, GI.SL_BALANCED))
|
GI.GT_NUMERICA, 1, 0, GI.SL_BALANCED))
|
||||||
registerGame(GameInfo(643, Measure, "Measure",
|
registerGame(GameInfo(643, Measure, "Measure",
|
||||||
GI.GT_NUMERICA | GI.GT_ORIGINAL, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NUMERICA | GI.GT_ORIGINAL, 1, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(644, DoubleMeasure, "Double Measure",
|
registerGame(GameInfo(644, DoubleMeasure, "Double Measure",
|
||||||
GI.GT_NUMERICA | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NUMERICA | GI.GT_ORIGINAL, 2, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(754, Amphibian, "Amphibian",
|
registerGame(GameInfo(754, Amphibian, "Amphibian",
|
||||||
GI.GT_NUMERICA | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_NUMERICA | GI.GT_ORIGINAL, 2, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(760, Aglet, "Aglet",
|
registerGame(GameInfo(760, Aglet, "Aglet",
|
||||||
GI.GT_1DECK_TYPE | GI.GT_ORIGINAL, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_1DECK_TYPE | GI.GT_ORIGINAL, 1, 0,
|
||||||
|
GI.SL_MOSTLY_SKILL))
|
||||||
|
|
|
@ -10,7 +10,7 @@ use String::ShellQuote qw/ shell_quote /;
|
||||||
|
|
||||||
# my $cmd = shell_quote( 'flake8', '.' );
|
# my $cmd = shell_quote( 'flake8', '.' );
|
||||||
my $cmd = shell_quote( 'flake8',
|
my $cmd = shell_quote( 'flake8',
|
||||||
grep { not($_ eq './pysollib/pysoltk.py' or $_ eq './pysollib/tile/ttk.py') } glob('./pysollib/*.py ./pysollib/[cmpuw]*/*.py ./pysollib/tile/*.py ./pysollib/ui/tktile/*.py ./pysollib/games/[a-my-z]*.py') );
|
grep { not($_ eq './pysollib/pysoltk.py' or $_ eq './pysollib/tile/ttk.py') } glob('./pysollib/*.py ./pysollib/[cmpuw]*/*.py ./pysollib/tile/*.py ./pysollib/ui/tktile/*.py ./pysollib/games/[a-ny-z]*.py') );
|
||||||
|
|
||||||
# TEST
|
# TEST
|
||||||
eq_or_diff( scalar(`$cmd`), '', "flake8 is happy with the code." );
|
eq_or_diff( scalar(`$cmd`), '', "flake8 is happy with the code." );
|
||||||
|
|
Loading…
Add table
Reference in a new issue