mirror of
https://github.com/shlomif/PySolFC.git
synced 2025-04-05 00:02:29 -04:00
+ `shuffle tiles' menu entry
* some bugs fixed git-svn-id: https://pysolfc.svn.sourceforge.net/svnroot/pysolfc/PySolFC/trunk@169 39dd0a4e-7c14-0410-91b3-c4f2d318f732
This commit is contained in:
parent
2c07686412
commit
20674666f8
6 changed files with 34 additions and 18 deletions
|
@ -212,6 +212,7 @@ class PysolMenubarActions:
|
||||||
self.setMenuState(ms.undo, "edit.undo")
|
self.setMenuState(ms.undo, "edit.undo")
|
||||||
self.setMenuState(ms.redo, "edit.redo")
|
self.setMenuState(ms.redo, "edit.redo")
|
||||||
self.setMenuState(ms.redo, "edit.redoall")
|
self.setMenuState(ms.redo, "edit.redoall")
|
||||||
|
self.setMenuState(ms.shuffle, "edit.shuffletiles")
|
||||||
self.updateBookmarkMenuState()
|
self.updateBookmarkMenuState()
|
||||||
self.setMenuState(ms.restart, "edit.restart")
|
self.setMenuState(ms.restart, "edit.restart")
|
||||||
self.setMenuState(ms.custom_game, "edit.editcurrentgame")
|
self.setMenuState(ms.custom_game, "edit.editcurrentgame")
|
||||||
|
|
|
@ -634,8 +634,8 @@ class AbstractMahjonggGame(Game):
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
iters = [0]
|
iters = [0]
|
||||||
# limitations
|
# limitations
|
||||||
max_time = 2.0 # seconds
|
max_time = 5.0 # seconds
|
||||||
max_iters = len(cards)
|
max_iters = 2*len(cards)
|
||||||
|
|
||||||
def is_suitable(stack, cards):
|
def is_suitable(stack, cards):
|
||||||
for s in stack.blockmap.below:
|
for s in stack.blockmap.below:
|
||||||
|
@ -690,10 +690,12 @@ class AbstractMahjonggGame(Game):
|
||||||
break
|
break
|
||||||
|
|
||||||
# find suitable stacks
|
# find suitable stacks
|
||||||
suitable_stacks = []
|
## suitable_stacks = []
|
||||||
for r in rows:
|
## for r in rows:
|
||||||
if nc[r.id] is None and is_suitable(r, nc):
|
## if nc[r.id] is None and is_suitable(r, nc):
|
||||||
suitable_stacks.append(r)
|
## suitable_stacks.append(r)
|
||||||
|
suitable_stacks = [r for r in rows
|
||||||
|
if nc[r.id] is None and is_suitable(r, nc)]
|
||||||
|
|
||||||
old_pairs = []
|
old_pairs = []
|
||||||
i = factorial(len(suitable_stacks))/2/factorial(len(suitable_stacks)-2)
|
i = factorial(len(suitable_stacks))/2/factorial(len(suitable_stacks)-2)
|
||||||
|
|
|
@ -380,7 +380,10 @@ class AbstractShisenGame(AbstractMahjonggGame):
|
||||||
def updateText(self):
|
def updateText(self):
|
||||||
if self.preview > 1 or self.texts.info is None:
|
if self.preview > 1 or self.texts.info is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
from gettext import ungettext
|
||||||
game = self.app.game
|
game = self.app.game
|
||||||
|
|
||||||
if 0:
|
if 0:
|
||||||
# find matching tiles
|
# find matching tiles
|
||||||
stacks = game.s.rows
|
stacks = game.s.rows
|
||||||
|
@ -395,18 +398,23 @@ class AbstractShisenGame(AbstractMahjonggGame):
|
||||||
if r.acceptsCards(t, t.cards):
|
if r.acceptsCards(t, t.cards):
|
||||||
f += 1
|
f += 1
|
||||||
if f == 0:
|
if f == 0:
|
||||||
f = self.text_free_matching_pairs_0
|
f = _('No Free\nMatching\nPairs')
|
||||||
elif f == 1:
|
|
||||||
f = self.text_free_matching_pairs_1
|
|
||||||
else:
|
else:
|
||||||
f = str(f) + self.text_free_matching_pairs_2
|
f = ungettext('%d Free\nMatching\nPair',
|
||||||
|
'%d Free\nMatching\nPairs',
|
||||||
|
f) % f
|
||||||
else:
|
else:
|
||||||
f = ''
|
f = ''
|
||||||
|
|
||||||
t = len(self.s.foundations[0].cards)
|
t = len(self.s.foundations[0].cards)
|
||||||
t = str(t) + self.text_tiles_removed \
|
r1 = ungettext('%d\nTile\nRemoved\n\n',
|
||||||
+ str(self.NCARDS - t) + self.text_tiles_remaining \
|
'%d\nTiles\nRemoved\n\n',
|
||||||
+ f
|
t) % t
|
||||||
|
r2 = ungettext('%d\nTile\nRemaining\n\n',
|
||||||
|
'%d\nTiles\nRemaining\n\n',
|
||||||
|
self.NCARDS - t) % (self.NCARDS - t)
|
||||||
|
|
||||||
|
t = r1 + r2 + f
|
||||||
self.texts.info.config(text = t)
|
self.texts.info.config(text = t)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -386,6 +386,7 @@ class PysolMenubar(PysolMenubarActions):
|
||||||
menu.add_command(label=n_("&Undo"), command=self.mUndo, accelerator="Z")
|
menu.add_command(label=n_("&Undo"), command=self.mUndo, accelerator="Z")
|
||||||
menu.add_command(label=n_("&Redo"), command=self.mRedo, accelerator="R")
|
menu.add_command(label=n_("&Redo"), command=self.mRedo, accelerator="R")
|
||||||
menu.add_command(label=n_("Redo &all"), command=self.mRedoAll)
|
menu.add_command(label=n_("Redo &all"), command=self.mRedoAll)
|
||||||
|
menu.add_command(label=n_("Shu&ffle tiles"), command=self.mShuffle, accelerator="F")
|
||||||
|
|
||||||
menu.add_separator()
|
menu.add_separator()
|
||||||
submenu = MfxMenu(menu, label=n_("&Set bookmark"))
|
submenu = MfxMenu(menu, label=n_("&Set bookmark"))
|
||||||
|
|
|
@ -447,8 +447,7 @@ class AllGamesFrame(Tkinter.Frame):
|
||||||
self.dialog.heading_tkfont,
|
self.dialog.heading_tkfont,
|
||||||
self.CHAR_W, self.CHAR_H)
|
self.CHAR_W, self.CHAR_H)
|
||||||
self.createHeader(player)
|
self.createHeader(player)
|
||||||
bind(self.tree, '<Map>',
|
bind(self.tree, '<Map>', self.mapEvent)
|
||||||
lambda e, player=player: self.fillTreeview(player))
|
|
||||||
|
|
||||||
def getSelectedGame(self):
|
def getSelectedGame(self):
|
||||||
sel = self.tree.selection()
|
sel = self.tree.selection()
|
||||||
|
@ -468,6 +467,10 @@ class AllGamesFrame(Tkinter.Frame):
|
||||||
else:
|
else:
|
||||||
run_button.config(state='disabled')
|
run_button.config(state='disabled')
|
||||||
|
|
||||||
|
def mapEvent(self, *args):
|
||||||
|
if not self.tree_items:
|
||||||
|
self.fillTreeview(self.player)
|
||||||
|
|
||||||
def headerClick(self, column):
|
def headerClick(self, column):
|
||||||
if column == '#0':
|
if column == '#0':
|
||||||
sort_by = 'name'
|
sort_by = 'name'
|
||||||
|
@ -483,9 +486,9 @@ class AllGamesFrame(Tkinter.Frame):
|
||||||
|
|
||||||
def fillTreeview(self, player):
|
def fillTreeview(self, player):
|
||||||
if self.tree_items:
|
if self.tree_items:
|
||||||
return
|
#return
|
||||||
#self.tree.delete(tuple(self.tree_items))
|
self.tree.delete(tuple(self.tree_items))
|
||||||
#self.tree_items = []
|
self.tree_items = []
|
||||||
self.formatter.writeStats(player, sort_by=self.sort_by)
|
self.formatter.writeStats(player, sort_by=self.sort_by)
|
||||||
if self.dialog.buttons:
|
if self.dialog.buttons:
|
||||||
run_button = self.dialog.buttons[0]
|
run_button = self.dialog.buttons[0]
|
||||||
|
|
|
@ -383,6 +383,7 @@ class PysolMenubar(PysolMenubarActions):
|
||||||
menu.add_command(label=n_("&Undo"), command=self.mUndo, accelerator="Z")
|
menu.add_command(label=n_("&Undo"), command=self.mUndo, accelerator="Z")
|
||||||
menu.add_command(label=n_("&Redo"), command=self.mRedo, accelerator="R")
|
menu.add_command(label=n_("&Redo"), command=self.mRedo, accelerator="R")
|
||||||
menu.add_command(label=n_("Redo &all"), command=self.mRedoAll)
|
menu.add_command(label=n_("Redo &all"), command=self.mRedoAll)
|
||||||
|
menu.add_command(label=n_("Shu&ffle tiles"), command=self.mShuffle, accelerator="F")
|
||||||
|
|
||||||
menu.add_separator()
|
menu.add_separator()
|
||||||
submenu = MfxMenu(menu, label=n_("&Set bookmark"))
|
submenu = MfxMenu(menu, label=n_("&Set bookmark"))
|
||||||
|
|
Loading…
Add table
Reference in a new issue