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

+ 2 new games

git-svn-id: file:///home/shlomif/Backup/svn-dumps/PySolFC/svnsync-repos/pysolfc/PySolFC/trunk@153 efabe8c0-fbe8-4139-b769-b5e6d273206e
This commit is contained in:
skomoroh 2007-03-16 23:23:39 +00:00
parent c47a82f880
commit 0d8182b7a9
3 changed files with 79 additions and 17 deletions

View file

@ -32,6 +32,8 @@ 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 AbstractHint, DefaultHint, CautiousDefaultHint
from pysollib.pysoltk import MfxCanvasText
# /*********************************************************************** # /***********************************************************************
# // Curds and Whey # // Curds and Whey
@ -448,6 +450,49 @@ class Glacier(Game):
shallHighlightMatch = Game._shallHighlightMatch_RKW shallHighlightMatch = Game._shallHighlightMatch_RKW
# /***********************************************************************
# // Four Packs
# ************************************************************************/
class FourPacks(Game):
def createGame(self):
l, s = Layout(self), self.s
self.setSize(l.XM+10*l.XS, l.YM+2*l.YS+l.TEXT_HEIGHT+14*l.YOFFSET)
x, y = l.XM, l.YM
for i in range(10):
s.rows.append(SS_RowStack(x, y, self, dir=1))
x += l.XS
x, y = self.width-l.XS, self.height-l.YS
s.talon = WasteTalonStack(x, y, self, max_rounds=3)
l.createText(s.talon, 'n')
tx, ty, ta, tf = l.getTextAttr(s.talon, "nn")
font = self.app.getFont("canvas_default")
s.talon.texts.rounds = MfxCanvasText(self.canvas, tx, ty-l.TEXT_MARGIN,
anchor=ta, font=font)
x -= l.XS
s.waste = WasteStack(x, y, self)
l.createText(s.waste, 'n')
l.defaultStackGroups()
def startGame(self):
self.startDealSample()
self.s.talon.dealRow()
self.s.talon.dealCards()
def isGameWon(self):
for s in self.s.rows:
if s.cards:
if len(s.cards) != 13 or not isSameSuitSequence(s.cards, dir=1):
return False
return True
shallHighlightMatch = Game._shallHighlightMatch_SS
# register the game # register the game
registerGame(GameInfo(294, CurdsAndWhey, "Curds and Whey", registerGame(GameInfo(294, CurdsAndWhey, "Curds and Whey",
@ -478,5 +523,7 @@ registerGame(GameInfo(534, Harvestman, "Harvestman",
GI.GT_SPIDER | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL)) GI.GT_SPIDER | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL))
registerGame(GameInfo(687, Glacier, "Glacier", registerGame(GameInfo(687, Glacier, "Glacier",
GI.GT_2DECK_TYPE, 2, 0, GI.SL_BALANCED)) GI.GT_2DECK_TYPE, 2, 0, GI.SL_BALANCED))
registerGame(GameInfo(724, FourPacks, "Four Packs",
GI.GT_2DECK_TYPE, 2, 2, GI.SL_MOSTLY_SKILL))

View file

@ -677,14 +677,14 @@ class Waterfall(Game):
# /*********************************************************************** # /***********************************************************************
# // Basis # // Vague
# ************************************************************************/ # ************************************************************************/
class Basis_RowStack(BasicRowStack): class Vague_RowStack(BasicRowStack):
clickHandler = BasicRowStack.doubleclickHandler clickHandler = BasicRowStack.doubleclickHandler
class Basis(Game): class Vague(Game):
def createGame(self): def createGame(self):
l, s = Layout(self), self.s l, s = Layout(self), self.s
@ -704,7 +704,7 @@ class Basis(Game):
for i in range(3): for i in range(3):
x = l.XM x = l.XM
for j in range(6): for j in range(6):
s.rows.append(Basis_RowStack(x, y, self)) s.rows.append(Vague_RowStack(x, y, self))
x += l.XS x += l.XS
y += l.YS y += l.YS
@ -778,11 +778,11 @@ class DevilsSolitaire(Game):
x, y = l.XM, l.YM+l.YS x, y = l.XM, l.YM+l.YS
for i in range(4): for i in range(4):
s.rows.append(Basis_RowStack(x, y, self)) s.rows.append(Vague_RowStack(x, y, self))
x += l.XS x += l.XS
x += l.XS x += l.XS
for i in range(4): for i in range(4):
s.rows.append(Basis_RowStack(x, y, self)) s.rows.append(Vague_RowStack(x, y, self))
x += l.XS x += l.XS
x, y = l.XM+4*l.XS, l.YM+l.YS x, y = l.XM+4*l.XS, l.YM+l.YS
@ -793,8 +793,8 @@ class DevilsSolitaire(Game):
x, y = l.XM+4.5*l.XS, self.height-l.YS x, y = l.XM+4.5*l.XS, self.height-l.YS
s.talon = WasteTalonStack(x, y, self, max_rounds=3) s.talon = WasteTalonStack(x, y, self, max_rounds=3)
l.createText(s.talon, 'n') l.createText(s.talon, 'n')
tx, ty, ta, tf = l.getTextAttr(s.talon, "nn") tx, ty, ta, tf = l.getTextAttr(s.talon, 'nn')
font = self.app.getFont("canvas_default") font = self.app.getFont('canvas_default')
s.talon.texts.rounds = MfxCanvasText(self.canvas, tx, ty-l.TEXT_MARGIN, s.talon.texts.rounds = MfxCanvasText(self.canvas, tx, ty-l.TEXT_MARGIN,
anchor=ta, font=font) anchor=ta, font=font)
@ -869,7 +869,7 @@ registerGame(GameInfo(662, DoubleDolphin, "Double Dolphin",
GI.GT_GOLF | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL)) GI.GT_GOLF | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL))
registerGame(GameInfo(709, Waterfall, "Waterfall", registerGame(GameInfo(709, Waterfall, "Waterfall",
GI.GT_2DECK_TYPE | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL)) GI.GT_2DECK_TYPE | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL))
registerGame(GameInfo(720, Basis, "Basis", registerGame(GameInfo(720, Vague, "Vague",
GI.GT_1DECK_TYPE, 1, 0, GI.SL_MOSTLY_LUCK)) GI.GT_1DECK_TYPE, 1, 0, GI.SL_MOSTLY_LUCK))
registerGame(GameInfo(723, DevilsSolitaire, "Devil's Solitaire", registerGame(GameInfo(723, DevilsSolitaire, "Devil's Solitaire",
GI.GT_2DECK_TYPE, 2, 2, GI.SL_BALANCED)) GI.GT_2DECK_TYPE, 2, 2, GI.SL_BALANCED))

View file

@ -806,6 +806,7 @@ class Leprechaun(Game):
# /*********************************************************************** # /***********************************************************************
# // Locked Cards # // Locked Cards
# // Topsy-Turvy Queens
# ************************************************************************/ # ************************************************************************/
class LockedCards_Reserve(OpenStack): class LockedCards_Reserve(OpenStack):
@ -827,6 +828,8 @@ class LockedCards_Foundation(SS_FoundationStack):
class LockedCards(Game): class LockedCards(Game):
Foundation_Class = LockedCards_Foundation
RowStack_Class = AC_RowStack
def createGame(self): def createGame(self):
@ -844,20 +847,20 @@ class LockedCards(Game):
x, y = l.XM, l.YM+l.YS x, y = l.XM, l.YM+l.YS
for i in range(8): for i in range(8):
s.foundations.append(LockedCards_Foundation(x, y, self, s.foundations.append(self.Foundation_Class(x, y, self,
suit=ANY_SUIT, max_move=0)) suit=ANY_SUIT, max_move=0))
x += l.XS x += l.XS
x, y = l.XM, l.YM+2*l.YS x, y = l.XM, l.YM+2*l.YS
for i in range(8): for i in range(8):
s.rows.append(AC_RowStack(x, y, self)) s.rows.append(self.RowStack_Class(x, y, self))
x += l.XS x += l.XS
x, y = self.width-l.XS, self.height-l.YS x, y = self.width-l.XS, self.height-l.YS
s.talon = WasteTalonStack(x, y, self, max_rounds=3) s.talon = WasteTalonStack(x, y, self, max_rounds=3)
l.createText(s.talon, 'n') l.createText(s.talon, 'n')
tx, ty, ta, tf = l.getTextAttr(s.talon, "nn") tx, ty, ta, tf = l.getTextAttr(s.talon, 'nn')
font = self.app.getFont("canvas_default") font = self.app.getFont('canvas_default')
s.talon.texts.rounds = MfxCanvasText(self.canvas, tx, ty-l.TEXT_MARGIN, s.talon.texts.rounds = MfxCanvasText(self.canvas, tx, ty-l.TEXT_MARGIN,
anchor=ta, font=font) anchor=ta, font=font)
@ -869,9 +872,9 @@ class LockedCards(Game):
l.defaultStackGroups() l.defaultStackGroups()
def startGame(self): def startGame(self, rows=5):
self.s.talon.dealRow(rows=self.s.reserves, flip=0, frames=0) self.s.talon.dealRow(rows=self.s.reserves, flip=0, frames=0)
for i in range(4): for i in range(rows-1):
self.s.talon.dealRow(frames=0) self.s.talon.dealRow(frames=0)
self.startDealSample() self.startDealSample()
self.s.talon.dealRow() self.s.talon.dealRow()
@ -880,6 +883,17 @@ class LockedCards(Game):
shallHighlightMatch = Game._shallHighlightMatch_AC shallHighlightMatch = Game._shallHighlightMatch_AC
class TopsyTurvyQueens(LockedCards):
Foundation_Class = StackWrapper(LockedCards_Foundation,
base_rank=KING, mod=13)
RowStack_Class = StackWrapper(SS_RowStack, mod=13)
def startGame(self):
LockedCards.startGame(self, rows=4)
shallHighlightMatch = Game._shallHighlightMatch_SSW
# /*********************************************************************** # /***********************************************************************
# // Thirty # // Thirty
# ************************************************************************/ # ************************************************************************/
@ -957,7 +971,6 @@ class Thirty(Game):
# register the game # register the game
registerGame(GameInfo(1, Gypsy, "Gypsy", registerGame(GameInfo(1, Gypsy, "Gypsy",
GI.GT_GYPSY, 2, 0, GI.SL_MOSTLY_SKILL)) GI.GT_GYPSY, 2, 0, GI.SL_MOSTLY_SKILL))
@ -1025,7 +1038,9 @@ registerGame(GameInfo(666, TrapdoorSpider, "Trapdoor Spider",
registerGame(GameInfo(712, Leprechaun, "Leprechaun", registerGame(GameInfo(712, Leprechaun, "Leprechaun",
GI.GT_GYPSY | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL)) GI.GT_GYPSY | GI.GT_ORIGINAL, 2, 0, GI.SL_MOSTLY_SKILL))
registerGame(GameInfo(718, LockedCards, "Locked Cards", registerGame(GameInfo(718, LockedCards, "Locked Cards",
GI.GT_2DECK_TYPE, 2, 2, GI.SL_MOSTLY_SKILL)) GI.GT_2DECK_TYPE, 2, 2, GI.SL_BALANCED))
registerGame(GameInfo(721, Thirty, "Thirty", registerGame(GameInfo(721, Thirty, "Thirty",
GI.GT_1DECK_TYPE | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL, GI.GT_1DECK_TYPE | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL,
ranks=(0, 6, 7, 8, 9, 10, 11, 12))) ranks=(0, 6, 7, 8, 9, 10, 11, 12)))
registerGame(GameInfo(725, TopsyTurvyQueens, "Topsy-Turvy Queens",
GI.GT_2DECK_TYPE, 2, 2, GI.SL_BALANCED))