From 460a8c65c44076dbe74fd274818ddae018587776 Mon Sep 17 00:00:00 2001 From: skomoroh Date: Mon, 2 Oct 2006 21:13:16 +0000 Subject: [PATCH] + 1 new game * misc. improvements git-svn-id: file:///home/shlomif/Backup/svn-dumps/PySolFC/svnsync-repos/pysolfc/PySolFC/trunk@76 efabe8c0-fbe8-4139-b769-b5e6d273206e --- pysollib/games/acesup.py | 7 +++++- pysollib/games/bakersgame.py | 2 +- pysollib/games/katzenschwanz.py | 2 +- pysollib/games/montecarlo.py | 44 +++++++++++++++++++++++++++------ pysollib/tk/tkhtml.py | 4 +-- 5 files changed, 47 insertions(+), 12 deletions(-) diff --git a/pysollib/games/acesup.py b/pysollib/games/acesup.py index 823546a5..edcb199e 100644 --- a/pysollib/games/acesup.py +++ b/pysollib/games/acesup.py @@ -174,6 +174,8 @@ class PerpetualMotion_Talon(DealRowTalonStack): def dealCards(self, sound=0): if self.cards: return DealRowTalonStack.dealCards(self, sound=sound) + if sound: + self.game.startDealSample() game, num_cards = self.game, len(self.cards) rows = list(game.s.rows)[:] rows.reverse() @@ -184,7 +186,10 @@ class PerpetualMotion_Talon(DealRowTalonStack): if self.cards[-1].face_up: game.flipMove(self) assert len(self.cards) == num_cards - return DealRowTalonStack.dealCards(self, sound=sound) + n = DealRowTalonStack.dealCards(self, sound=0) + if sound: + self.game.stopSamples() + return n class PerpetualMotion_Foundation(AbstractFoundationStack): diff --git a/pysollib/games/bakersgame.py b/pysollib/games/bakersgame.py index feea47ed..9b031a92 100644 --- a/pysollib/games/bakersgame.py +++ b/pysollib/games/bakersgame.py @@ -208,7 +208,7 @@ class SeahavenTowers(KingOnlyBakersGame): for i in range(10): s.rows.append(self.RowStack_Class(x, y, self)) x = x + l.XS - self.setRegion(s.rows, (-999, y - l.YM / 2, 999999, 999999)) + self.setRegion(s.rows, (-999, y - l.CH / 2, 999999, 999999)) s.talon = InitialDealTalonStack(l.XM, self.height-l.YS, self) # define stack-groups diff --git a/pysollib/games/katzenschwanz.py b/pysollib/games/katzenschwanz.py index ade7d835..42b2458b 100644 --- a/pysollib/games/katzenschwanz.py +++ b/pysollib/games/katzenschwanz.py @@ -92,7 +92,7 @@ class DerKatzenschwanz(Game): s.reserves.append(ReserveStack(x, y, self)) x = x + l.XS x, y = l.XM + (maxrows-rows)*l.XS/2, l.YM + l.YS - self.setRegion(s.reserves, (-999, -999, 999999, y - l.XM / 2)) + self.setRegion(s.reserves, (-999, -999, 999999, y - l.CH / 2)) for i in range(rows): stack = self.RowStack_Class(x, y, self) stack.CARD_XOFFSET = xoffset diff --git a/pysollib/games/montecarlo.py b/pysollib/games/montecarlo.py index 5cf198f1..c8e82ae8 100644 --- a/pysollib/games/montecarlo.py +++ b/pysollib/games/montecarlo.py @@ -678,6 +678,7 @@ class DerLetzteMonarch_RowStack(ReserveStack): assert ncards == 1 and to_stack in self.game.s.rows assert len(to_stack.cards) == 1 self._handlePairMove(ncards, to_stack, frames=-1, shadow=0) + self.fillStack() def _handlePairMove(self, n, other_stack, frames=-1, shadow=-1): game = self.game @@ -695,30 +696,42 @@ class DerLetzteMonarch_ReserveStack(ReserveStack): class DerLetzteMonarch(Game): + Talon_Class = InitialDealTalonStack # # game layout # - def createGame(self): + def createGame(self, texts=False): # create layout l, s = Layout(self, card_x_space=4), self.s # set window - self.setSize(l.XM + 13*l.XS, l.YM + 5*l.YS) + decks = self.gameinfo.decks + if decks == 1: + w = l.XM + 13*l.XS + dx = 0 + else: + w = l.XM + 15*l.XS + dx = l.XS + h = l.YM + 5*l.YS + self.setSize(w, h) # create stacks for i in range(4): for j in range(13): - x, y, = l.XM + j*l.XS, l.YM + (i+1)*l.YS + x, y, = dx + l.XM + j*l.XS, l.YM + (i+1)*l.YS s.rows.append(DerLetzteMonarch_RowStack(x, y, self, max_accept=1, max_cards=2)) for i in range(4): x, y, = l.XM + (i+2)*l.XS, l.YM s.reserves.append(DerLetzteMonarch_ReserveStack(x, y, self, max_accept=0)) - for i in range(4): + for i in range(4*decks): x, y, = l.XM + (i+7)*l.XS, l.YM - s.foundations.append(DerLetzteMonarch_Foundation(x, y, self, i, max_move=0)) - s.talon = InitialDealTalonStack(l.XM, l.YM, self) + s.foundations.append(DerLetzteMonarch_Foundation(x, y, self, + suit=i%4, max_move=0)) + s.talon = self.Talon_Class(l.XM, l.YM, self) + if texts: + l.createText(s.talon, 'ne') # define stack-groups (non default) self.sg.talonstacks = [s.talon] @@ -739,7 +752,7 @@ class DerLetzteMonarch(Game): c = 0 for s in self.s.foundations: c = c + len(s.cards) - return c == 51 + return c == self.gameinfo.ncards-1 def getAutoStacks(self, event=None): return ((), self.s.reserves, ()) @@ -765,6 +778,21 @@ class DerLetzteMonarch(Game): return diff in (-13, -1, 1, 13) +class TheLastMonarchII(DerLetzteMonarch): + Talon_Class = TalonStack + + def createGame(self): + DerLetzteMonarch.createGame(self, texts=True) + + def fillStack(self, stack): + if stack in self.s.rows and not stack.cards: + if self.s.talon.cards: + old_state = self.enterState(self.S_FILL) + self.s.talon.flipMove() + self.s.talon.moveMove(1, stack) + self.leaveState(old_state) + + # /*********************************************************************** # // Doublets # ************************************************************************/ @@ -844,4 +872,6 @@ registerGame(GameInfo(368, Vertical, "Vertical", GI.GT_PAIRING_TYPE | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_LUCK)) registerGame(GameInfo(649, DoubletsII, "Doublets II", GI.GT_PAIRING_TYPE, 1, 0, GI.SL_MOSTLY_LUCK)) +registerGame(GameInfo(663, TheLastMonarchII, "The last Monarch II", + GI.GT_2DECK_TYPE, 2, 0, GI.SL_MOSTLY_SKILL)) diff --git a/pysollib/tk/tkhtml.py b/pysollib/tk/tkhtml.py index 04f60a6a..0f8bdcbe 100644 --- a/pysollib/tk/tkhtml.py +++ b/pysollib/tk/tkhtml.py @@ -269,14 +269,14 @@ class HTMLViewer: # create text widget text_frame = Tkinter.Frame(parent) text_frame.grid(row=1, column=0, columnspan=4, sticky='nsew') + vbar = Tkinter.Scrollbar(text_frame) + vbar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y) self.text = Tkinter.Text(text_frame, fg='black', bg='white', bd=1, relief='sunken', cursor=self.defcursor, wrap='word', padx=20, pady=20) self.text.pack(side=Tkinter.LEFT, fill=Tkinter.BOTH, expand=1) - vbar = Tkinter.Scrollbar(text_frame) - vbar.pack(side=Tkinter.RIGHT, fill=Tkinter.Y) self.text["yscrollcommand"] = vbar.set vbar["command"] = self.text.yview