mirror of
https://github.com/shlomif/PySolFC.git
synced 2025-04-05 00:02:29 -04:00
+ 5 new games
- pysollib/acard.py, pysollib/tk/card.py - removed support of old version tk * misc. improvements git-svn-id: https://pysolfc.svn.sourceforge.net/svnroot/pysolfc/PySolFC/trunk@44 39dd0a4e-7c14-0410-91b3-c4f2d318f732
This commit is contained in:
parent
5f82560885
commit
a74786ed32
17 changed files with 784 additions and 477 deletions
|
@ -5,7 +5,7 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PySol 0.0.1\n"
|
"Project-Id-Version: PySol 0.0.1\n"
|
||||||
"POT-Creation-Date: Wed Aug 9 19:09:14 2006\n"
|
"POT-Creation-Date: Fri Aug 11 02:15:03 2006\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -1602,9 +1602,6 @@ msgstr ""
|
||||||
msgid "Legion"
|
msgid "Legion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Leo"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Les Quatre Coins"
|
msgid "Les Quatre Coins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1944,9 +1941,6 @@ msgstr ""
|
||||||
msgid "Mahjongg Lattice"
|
msgid "Mahjongg Lattice"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
msgid "Mahjongg Leo"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Mahjongg Lion"
|
msgid "Mahjongg Lion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
346
po/pysol.pot
346
po/pysol.pot
|
@ -5,7 +5,7 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"POT-Creation-Date: Wed Aug 9 19:09:09 2006\n"
|
"POT-Creation-Date: Fri Aug 11 02:14:56 2006\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -15,44 +15,44 @@ msgstr ""
|
||||||
"Generated-By: pygettext.py 1.5\n"
|
"Generated-By: pygettext.py 1.5\n"
|
||||||
|
|
||||||
|
|
||||||
#: pysollib/actions.py:358 pysollib/tk/toolbar.py:197
|
#: pysollib/actions.py:360 pysollib/tk/toolbar.py:197
|
||||||
msgid "New game"
|
msgid "New game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:371 pysollib/tk/menubar.py:698
|
#: pysollib/actions.py:373 pysollib/tk/menubar.py:699
|
||||||
#: pysollib/tk/menubar.py:712
|
#: pysollib/tk/menubar.py:713
|
||||||
msgid "Select game"
|
msgid "Select game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:394
|
#: pysollib/actions.py:396
|
||||||
msgid "Invalid game number"
|
msgid "Invalid game number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:395
|
#: pysollib/actions.py:397
|
||||||
msgid ""
|
msgid ""
|
||||||
"Invalid game number\n"
|
"Invalid game number\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:412
|
#: pysollib/actions.py:414
|
||||||
msgid "Select next game number"
|
msgid "Select next game number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:421 pysollib/actions.py:431
|
#: pysollib/actions.py:423 pysollib/actions.py:433
|
||||||
msgid "Select new game number"
|
msgid "Select new game number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:422
|
#: pysollib/actions.py:424
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Enter new game number"
|
"Enter new game number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:423
|
#: pysollib/actions.py:425
|
||||||
msgid "&Next number"
|
msgid "&Next number"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:423 pysollib/app.py:1142 pysollib/app.py:1154
|
#: pysollib/actions.py:425 pysollib/app.py:1143 pysollib/app.py:1155
|
||||||
#: pysollib/game.py:904 pysollib/game.py:1828 pysollib/main.py:439
|
#: pysollib/game.py:904 pysollib/game.py:1828 pysollib/main.py:439
|
||||||
#: pysollib/main.py:447 pysollib/tk/colorsdialog.py:132
|
#: pysollib/main.py:447 pysollib/tk/colorsdialog.py:132
|
||||||
#: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143
|
#: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143
|
||||||
|
@ -61,7 +61,7 @@ msgstr ""
|
||||||
#: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:240
|
#: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:240
|
||||||
#: pysollib/tk/selectcardset.py:396 pysollib/tk/selecttile.py:158
|
#: pysollib/tk/selectcardset.py:396 pysollib/tk/selecttile.py:158
|
||||||
#: pysollib/tk/soundoptionsdialog.py:170 pysollib/tk/soundoptionsdialog.py:211
|
#: pysollib/tk/soundoptionsdialog.py:170 pysollib/tk/soundoptionsdialog.py:211
|
||||||
#: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkhtml.py:503
|
#: pysollib/tk/timeoutsdialog.py:92 pysollib/tk/tkhtml.py:499
|
||||||
#: pysollib/tk/tkstats.py:288 pysollib/tk/tkstats.py:573
|
#: pysollib/tk/tkstats.py:288 pysollib/tk/tkstats.py:573
|
||||||
#: pysollib/tk/tkstats.py:647 pysollib/tk/tkstats.py:663
|
#: pysollib/tk/tkstats.py:647 pysollib/tk/tkstats.py:663
|
||||||
#: pysollib/tk/tkstats.py:705 pysollib/tk/tkstats.py:777
|
#: pysollib/tk/tkstats.py:705 pysollib/tk/tkstats.py:777
|
||||||
|
@ -70,12 +70,12 @@ msgstr ""
|
||||||
msgid "&OK"
|
msgid "&OK"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:423 pysollib/app.py:1154 pysollib/game.py:904
|
#: pysollib/actions.py:425 pysollib/app.py:1155 pysollib/game.py:904
|
||||||
#: pysollib/game.py:1290 pysollib/game.py:1305 pysollib/game.py:1312
|
#: pysollib/game.py:1290 pysollib/game.py:1305 pysollib/game.py:1312
|
||||||
#: pysollib/game.py:1318 pysollib/tk/colorsdialog.py:132
|
#: pysollib/game.py:1318 pysollib/tk/colorsdialog.py:132
|
||||||
#: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143
|
#: pysollib/tk/edittextdialog.py:82 pysollib/tk/fontsdialog.py:143
|
||||||
#: pysollib/tk/fontsdialog.py:205 pysollib/tk/menubar.py:893
|
#: pysollib/tk/fontsdialog.py:205 pysollib/tk/menubar.py:894
|
||||||
#: pysollib/tk/menubar.py:895 pysollib/tk/playeroptionsdialog.py:85
|
#: pysollib/tk/menubar.py:896 pysollib/tk/playeroptionsdialog.py:85
|
||||||
#: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:240
|
#: pysollib/tk/playeroptionsdialog.py:160 pysollib/tk/selectcardset.py:240
|
||||||
#: pysollib/tk/selectgame.py:266 pysollib/tk/selectgame.py:407
|
#: pysollib/tk/selectgame.py:266 pysollib/tk/selectgame.py:407
|
||||||
#: pysollib/tk/selecttile.py:158 pysollib/tk/soundoptionsdialog.py:170
|
#: pysollib/tk/selecttile.py:158 pysollib/tk/soundoptionsdialog.py:170
|
||||||
|
@ -83,128 +83,128 @@ msgstr ""
|
||||||
msgid "&Cancel"
|
msgid "&Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:439
|
#: pysollib/actions.py:441
|
||||||
msgid "Select random game"
|
msgid "Select random game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:475
|
#: pysollib/actions.py:477
|
||||||
msgid "Select next game"
|
msgid "Select next game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:508 pysollib/tk/toolbar.py:211
|
#: pysollib/actions.py:510 pysollib/tk/toolbar.py:211
|
||||||
msgid "Quit "
|
msgid "Quit "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:558
|
#: pysollib/actions.py:560
|
||||||
msgid "Clear bookmarks"
|
msgid "Clear bookmarks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:559
|
#: pysollib/actions.py:561
|
||||||
msgid "Clear all bookmarks ?"
|
msgid "Clear all bookmarks ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:569
|
#: pysollib/actions.py:571
|
||||||
msgid "Restart game"
|
msgid "Restart game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:570
|
#: pysollib/actions.py:572
|
||||||
msgid "Restart this game ?"
|
msgid "Restart this game ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:611
|
#: pysollib/actions.py:613
|
||||||
msgid ""
|
msgid ""
|
||||||
"Comments for %s:\n"
|
"Comments for %s:\n"
|
||||||
"\n"
|
"\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:613
|
#: pysollib/actions.py:615
|
||||||
msgid "Comments for "
|
msgid "Comments for "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:631 pysollib/actions.py:667
|
#: pysollib/actions.py:633 pysollib/actions.py:669
|
||||||
msgid "Error while writing to file"
|
msgid "Error while writing to file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:634 pysollib/actions.py:670
|
#: pysollib/actions.py:636 pysollib/actions.py:672
|
||||||
msgid " Info"
|
msgid " Info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:635
|
#: pysollib/actions.py:637
|
||||||
msgid ""
|
msgid ""
|
||||||
"Comments were appended to\n"
|
"Comments were appended to\n"
|
||||||
"\n"
|
"\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:652
|
#: pysollib/actions.py:654
|
||||||
msgid "Demo statistics"
|
msgid "Demo statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:655
|
#: pysollib/actions.py:657
|
||||||
msgid "Your statistics"
|
msgid "Your statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:671
|
#: pysollib/actions.py:673
|
||||||
msgid ""
|
msgid ""
|
||||||
" were appended to\n"
|
" were appended to\n"
|
||||||
"\n"
|
"\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:685
|
#: pysollib/actions.py:687
|
||||||
msgid " Demo"
|
msgid " Demo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:685
|
#: pysollib/actions.py:687
|
||||||
msgid " Demo "
|
msgid " Demo "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:688 pysollib/actions.py:706
|
#: pysollib/actions.py:690 pysollib/actions.py:708
|
||||||
msgid " for "
|
msgid " for "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:694 pysollib/actions.py:713
|
#: pysollib/actions.py:696 pysollib/actions.py:715
|
||||||
msgid "Statistics for "
|
msgid "Statistics for "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:697 pysollib/tk/selectgame.py:350
|
#: pysollib/actions.py:699 pysollib/tk/selectgame.py:350
|
||||||
#: pysollib/tk/toolbar.py:208
|
#: pysollib/tk/toolbar.py:208
|
||||||
msgid "Statistics"
|
msgid "Statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:700
|
#: pysollib/actions.py:702
|
||||||
msgid "Full log"
|
msgid "Full log"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:703
|
#: pysollib/actions.py:705
|
||||||
msgid "Session log"
|
msgid "Session log"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:709
|
#: pysollib/actions.py:711
|
||||||
msgid "Game Info"
|
msgid "Game Info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:718
|
#: pysollib/actions.py:720
|
||||||
msgid "Full log for "
|
msgid "Full log for "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:723
|
#: pysollib/actions.py:725
|
||||||
msgid "Session log for "
|
msgid "Session log for "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:728
|
#: pysollib/actions.py:730
|
||||||
msgid "Reset all statistics"
|
msgid "Reset all statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:729
|
#: pysollib/actions.py:731
|
||||||
msgid ""
|
msgid ""
|
||||||
"Reset ALL statistics and logs for player\n"
|
"Reset ALL statistics and logs for player\n"
|
||||||
"%s ?"
|
"%s ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:735
|
#: pysollib/actions.py:737
|
||||||
msgid "Reset game statistics"
|
msgid "Reset game statistics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:736
|
#: pysollib/actions.py:738
|
||||||
msgid ""
|
msgid ""
|
||||||
"Reset statistics and logs for player\n"
|
"Reset statistics and logs for player\n"
|
||||||
"%s\n"
|
"%s\n"
|
||||||
|
@ -212,27 +212,27 @@ msgid ""
|
||||||
"%s ?"
|
"%s ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:792
|
#: pysollib/actions.py:794
|
||||||
msgid "Play demo"
|
msgid "Play demo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:803
|
#: pysollib/actions.py:805
|
||||||
msgid "Set player options"
|
msgid "Set player options"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:898
|
#: pysollib/actions.py:906
|
||||||
msgid "Sound settings"
|
msgid "Sound settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:919
|
#: pysollib/actions.py:927
|
||||||
msgid "Set colors"
|
msgid "Set colors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:938
|
#: pysollib/actions.py:946
|
||||||
msgid "Set fonts"
|
msgid "Set fonts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/actions.py:947
|
#: pysollib/actions.py:955
|
||||||
msgid "Set timeouts"
|
msgid "Set timeouts"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -240,23 +240,23 @@ msgstr ""
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/app.py:1004
|
#: pysollib/app.py:1005
|
||||||
msgid "Loading %s %s..."
|
msgid "Loading %s %s..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/app.py:1039
|
#: pysollib/app.py:1040
|
||||||
msgid " load error"
|
msgid " load error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/app.py:1040
|
#: pysollib/app.py:1041
|
||||||
msgid "Error while loading "
|
msgid "Error while loading "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/app.py:1134
|
#: pysollib/app.py:1135
|
||||||
msgid "Incompatible "
|
msgid "Incompatible "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/app.py:1136
|
#: pysollib/app.py:1137
|
||||||
msgid ""
|
msgid ""
|
||||||
"The currently selected %s %s\n"
|
"The currently selected %s %s\n"
|
||||||
"is not compatible with the game\n"
|
"is not compatible with the game\n"
|
||||||
|
@ -265,7 +265,7 @@ msgid ""
|
||||||
"Please select a %s type %s.\n"
|
"Please select a %s type %s.\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/app.py:1152
|
#: pysollib/app.py:1153
|
||||||
msgid "Please select a %s type %s"
|
msgid "Please select a %s type %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -678,14 +678,14 @@ msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/braid.py:248 pysollib/games/camelot.py:555
|
#: pysollib/games/braid.py:248 pysollib/games/camelot.py:555
|
||||||
#: pysollib/games/napoleon.py:182 pysollib/games/ultra/dashavatara.py:959
|
#: pysollib/games/napoleon.py:182 pysollib/games/ultra/dashavatara.py:959
|
||||||
#: pysollib/games/ultra/hanafuda1.py:256 pysollib/games/ultra/hexadeck.py:1190
|
#: pysollib/games/ultra/hanafuda1.py:257 pysollib/games/ultra/hexadeck.py:1190
|
||||||
#: pysollib/games/ultra/mughal.py:802
|
#: pysollib/games/ultra/mughal.py:802
|
||||||
msgid " Ascending"
|
msgid " Ascending"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/braid.py:250 pysollib/games/camelot.py:554
|
#: pysollib/games/braid.py:250 pysollib/games/camelot.py:554
|
||||||
#: pysollib/games/napoleon.py:184 pysollib/games/ultra/dashavatara.py:961
|
#: pysollib/games/napoleon.py:184 pysollib/games/ultra/dashavatara.py:961
|
||||||
#: pysollib/games/ultra/hanafuda1.py:258 pysollib/games/ultra/hexadeck.py:1192
|
#: pysollib/games/ultra/hanafuda1.py:259 pysollib/games/ultra/hexadeck.py:1192
|
||||||
#: pysollib/games/ultra/mughal.py:804
|
#: pysollib/games/ultra/mughal.py:804
|
||||||
msgid " Descending"
|
msgid " Descending"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -699,12 +699,12 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224
|
#: pysollib/games/canfield.py:528 pysollib/games/special/tarock.py:224
|
||||||
#: pysollib/stack.py:1287 pysollib/util.py:81
|
#: pysollib/stack.py:1304 pysollib/util.py:81
|
||||||
msgid "King"
|
msgid "King"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/canfield.py:531 pysollib/games/special/tarock.py:224
|
#: pysollib/games/canfield.py:531 pysollib/games/special/tarock.py:224
|
||||||
#: pysollib/stack.py:1286 pysollib/util.py:81
|
#: pysollib/stack.py:1303 pysollib/util.py:81
|
||||||
msgid "Queen"
|
msgid "Queen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -721,11 +721,11 @@ msgid "X"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/golf.py:114 pysollib/games/golf.py:300
|
#: pysollib/games/golf.py:114 pysollib/games/golf.py:300
|
||||||
#: pysollib/stack.py:1898
|
#: pysollib/stack.py:1915
|
||||||
msgid "Tableau. No building."
|
msgid "Tableau. No building."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/golf.py:384 pysollib/stack.py:1831
|
#: pysollib/games/golf.py:385 pysollib/stack.py:1848
|
||||||
msgid "Foundation. Build up regardless of suit."
|
msgid "Foundation. Build up regardless of suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -737,7 +737,7 @@ msgstr ""
|
||||||
msgid "Reserve. Only Kings are acceptable."
|
msgid "Reserve. Only Kings are acceptable."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/larasgame.py:163 pysollib/stack.py:1508
|
#: pysollib/games/larasgame.py:163 pysollib/stack.py:1525
|
||||||
msgid "Round %d"
|
msgid "Round %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -786,7 +786,7 @@ msgstr ""
|
||||||
msgid "Deal %d"
|
msgid "Deal %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/games/numerica.py:259 pysollib/games/royalcotillion.py:841
|
#: pysollib/games/numerica.py:259 pysollib/games/royalcotillion.py:840
|
||||||
msgid "Foundation. Build up by color."
|
msgid "Foundation. Build up by color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -840,7 +840,7 @@ msgstr ""
|
||||||
#: pysollib/games/special/tarock.py:223
|
#: pysollib/games/special/tarock.py:223
|
||||||
#: pysollib/games/ultra/dashavatara.py:351
|
#: pysollib/games/ultra/dashavatara.py:351
|
||||||
#: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254
|
#: pysollib/games/ultra/hexadeck.py:273 pysollib/games/ultra/mughal.py:254
|
||||||
#: pysollib/stack.py:1288 pysollib/util.py:80
|
#: pysollib/stack.py:1305 pysollib/util.py:80
|
||||||
msgid "Ace"
|
msgid "Ace"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1566,201 +1566,201 @@ msgstr ""
|
||||||
msgid "Top 10"
|
msgid "Top 10"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1282
|
#: pysollib/stack.py:1299
|
||||||
msgid "Base card - %s."
|
msgid "Base card - %s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1283
|
#: pysollib/stack.py:1300
|
||||||
msgid "Empty row cannot be filled."
|
msgid "Empty row cannot be filled."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1284
|
#: pysollib/stack.py:1301
|
||||||
msgid "any card"
|
msgid "any card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1285 pysollib/util.py:81
|
#: pysollib/stack.py:1302 pysollib/util.py:81
|
||||||
msgid "Jack"
|
msgid "Jack"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1298
|
#: pysollib/stack.py:1315
|
||||||
msgid "No cards"
|
msgid "No cards"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1299
|
#: pysollib/stack.py:1316
|
||||||
msgid "1 card"
|
msgid "1 card"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1300
|
#: pysollib/stack.py:1317
|
||||||
msgid " cards"
|
msgid " cards"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1517 pysollib/stack.py:1519 pysollib/stack.py:1550
|
#: pysollib/stack.py:1534 pysollib/stack.py:1536 pysollib/stack.py:1567
|
||||||
msgid "Redeal"
|
msgid "Redeal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1519
|
#: pysollib/stack.py:1536
|
||||||
msgid "Stop"
|
msgid "Stop"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1570
|
#: pysollib/stack.py:1587
|
||||||
msgid "Variable redeals."
|
msgid "Variable redeals."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1571
|
#: pysollib/stack.py:1588
|
||||||
msgid "Unlimited redeals."
|
msgid "Unlimited redeals."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1572
|
#: pysollib/stack.py:1589
|
||||||
msgid "No redeals."
|
msgid "No redeals."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1573
|
#: pysollib/stack.py:1590
|
||||||
msgid "One redeal."
|
msgid "One redeal."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1574
|
#: pysollib/stack.py:1591
|
||||||
msgid " redeals."
|
msgid " redeals."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1576
|
#: pysollib/stack.py:1593
|
||||||
msgid "Talon."
|
msgid "Talon."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1762 pysollib/stack.py:2212
|
#: pysollib/stack.py:1779 pysollib/stack.py:2229
|
||||||
msgid "Reserve. No building."
|
msgid "Reserve. No building."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1799
|
#: pysollib/stack.py:1816
|
||||||
msgid "Foundation."
|
msgid "Foundation."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1815
|
#: pysollib/stack.py:1832
|
||||||
msgid "Foundation. Build up by suit."
|
msgid "Foundation. Build up by suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1816
|
#: pysollib/stack.py:1833
|
||||||
msgid "Foundation. Build down by suit."
|
msgid "Foundation. Build down by suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1817 pysollib/stack.py:1833 pysollib/stack.py:1855
|
#: pysollib/stack.py:1834 pysollib/stack.py:1850 pysollib/stack.py:1872
|
||||||
msgid "Foundation. Build by same rank."
|
msgid "Foundation. Build by same rank."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1832
|
#: pysollib/stack.py:1849
|
||||||
msgid "Foundation. Build down regardless of suit."
|
msgid "Foundation. Build down regardless of suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1853
|
#: pysollib/stack.py:1870
|
||||||
msgid "Foundation. Build up by alternate color."
|
msgid "Foundation. Build up by alternate color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1854
|
#: pysollib/stack.py:1871
|
||||||
msgid "Foundation. Build down by alternate color."
|
msgid "Foundation. Build down by alternate color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1928
|
#: pysollib/stack.py:1945
|
||||||
msgid "Tableau. Build up by alternate color."
|
msgid "Tableau. Build up by alternate color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1929
|
#: pysollib/stack.py:1946
|
||||||
msgid "Tableau. Build down by alternate color."
|
msgid "Tableau. Build down by alternate color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1930 pysollib/stack.py:1940 pysollib/stack.py:1949
|
#: pysollib/stack.py:1947 pysollib/stack.py:1957 pysollib/stack.py:1966
|
||||||
#: pysollib/stack.py:1958 pysollib/stack.py:1968 pysollib/stack.py:1991
|
#: pysollib/stack.py:1975 pysollib/stack.py:1985 pysollib/stack.py:2008
|
||||||
#: pysollib/stack.py:2001
|
#: pysollib/stack.py:2018
|
||||||
msgid "Tableau. Build by same rank."
|
msgid "Tableau. Build by same rank."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1938
|
#: pysollib/stack.py:1955
|
||||||
msgid "Tableau. Build up by color."
|
msgid "Tableau. Build up by color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1939
|
#: pysollib/stack.py:1956
|
||||||
msgid "Tableau. Build down by color."
|
msgid "Tableau. Build down by color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1947
|
#: pysollib/stack.py:1964
|
||||||
msgid "Tableau. Build up by suit."
|
msgid "Tableau. Build up by suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1948
|
#: pysollib/stack.py:1965
|
||||||
msgid "Tableau. Build down by suit."
|
msgid "Tableau. Build down by suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1956
|
#: pysollib/stack.py:1973
|
||||||
msgid "Tableau. Build up regardless of suit."
|
msgid "Tableau. Build up regardless of suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1957
|
#: pysollib/stack.py:1974
|
||||||
msgid "Tableau. Build down regardless of suit."
|
msgid "Tableau. Build down regardless of suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1966
|
#: pysollib/stack.py:1983
|
||||||
msgid "Tableau. Build up in any suit but the same."
|
msgid "Tableau. Build up in any suit but the same."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1967
|
#: pysollib/stack.py:1984
|
||||||
msgid "Tableau. Build down in any suit but the same."
|
msgid "Tableau. Build down in any suit but the same."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1989
|
#: pysollib/stack.py:2006
|
||||||
msgid "Tableau. Build up regardless of suit. Sequences of cards in alternate color can be moved as a unit."
|
msgid "Tableau. Build up regardless of suit. Sequences of cards in alternate color can be moved as a unit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1990
|
#: pysollib/stack.py:2007
|
||||||
msgid "Tableau. Build down regardless of suit. Sequences of cards in alternate color can be moved as a unit."
|
msgid "Tableau. Build down regardless of suit. Sequences of cards in alternate color can be moved as a unit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:1999
|
#: pysollib/stack.py:2016
|
||||||
msgid "Tableau. Build up regardless of suit. Sequences of cards in the same suit can be moved as a unit."
|
msgid "Tableau. Build up regardless of suit. Sequences of cards in the same suit can be moved as a unit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2000
|
#: pysollib/stack.py:2017
|
||||||
msgid "Tableau. Build down regardless of suit. Sequences of cards in the same suit can be moved as a unit."
|
msgid "Tableau. Build down regardless of suit. Sequences of cards in the same suit can be moved as a unit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2022
|
#: pysollib/stack.py:2039
|
||||||
msgid "Tableau. Build up by alternate color, can move any face-up cards regardless of sequence."
|
msgid "Tableau. Build up by alternate color, can move any face-up cards regardless of sequence."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2023
|
#: pysollib/stack.py:2040
|
||||||
msgid "Tableau. Build down by alternate color, can move any face-up cards regardless of sequence."
|
msgid "Tableau. Build down by alternate color, can move any face-up cards regardless of sequence."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2024 pysollib/stack.py:2037
|
#: pysollib/stack.py:2041 pysollib/stack.py:2054
|
||||||
msgid "Tableau. Build by same rank, can move any face-up cards regardless of sequence."
|
msgid "Tableau. Build by same rank, can move any face-up cards regardless of sequence."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2035
|
#: pysollib/stack.py:2052
|
||||||
msgid "Tableau. Build up by suit, can move any face-up cards regardless of sequence."
|
msgid "Tableau. Build up by suit, can move any face-up cards regardless of sequence."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2036
|
#: pysollib/stack.py:2053
|
||||||
msgid "Tableau. Build down by suit, can move any face-up cards regardless of sequence."
|
msgid "Tableau. Build down by suit, can move any face-up cards regardless of sequence."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2069
|
#: pysollib/stack.py:2086
|
||||||
msgid "Tableau. Build up or down by color."
|
msgid "Tableau. Build up or down by color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2080
|
#: pysollib/stack.py:2097
|
||||||
msgid "Tableau. Build up or down by alternate color."
|
msgid "Tableau. Build up or down by alternate color."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2091
|
#: pysollib/stack.py:2108
|
||||||
msgid "Tableau. Build up or down by suit."
|
msgid "Tableau. Build up or down by suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2102
|
#: pysollib/stack.py:2119
|
||||||
msgid "Tableau. Build up or down regardless of suit."
|
msgid "Tableau. Build up or down regardless of suit."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2113
|
#: pysollib/stack.py:2130
|
||||||
msgid "Waste."
|
msgid "Waste."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/stack.py:2213
|
#: pysollib/stack.py:2230
|
||||||
msgid "Free cell."
|
msgid "Free cell."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -2082,7 +2082,7 @@ msgstr ""
|
||||||
msgid "&Deal cards"
|
msgid "&Deal cards"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:307 pysollib/tk/menubar.py:342
|
#: pysollib/tk/menubar.py:307
|
||||||
msgid "&Auto drop"
|
msgid "&Auto drop"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -2162,6 +2162,10 @@ msgstr ""
|
||||||
msgid "Auto &face up"
|
msgid "Auto &face up"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: pysollib/tk/menubar.py:342
|
||||||
|
msgid "A&uto drop"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:343
|
#: pysollib/tk/menubar.py:343
|
||||||
msgid "Auto &deal"
|
msgid "Auto &deal"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -2243,159 +2247,163 @@ msgid "&Negative cards bottom"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:374
|
#: pysollib/tk/menubar.py:374
|
||||||
msgid "Shade &filled stacks"
|
msgid "Shrink face-down cards"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:375
|
#: pysollib/tk/menubar.py:375
|
||||||
msgid "A&nimations"
|
msgid "Shade &filled stacks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:376
|
#: pysollib/tk/menubar.py:376
|
||||||
msgid "&None"
|
msgid "A&nimations"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:377
|
#: pysollib/tk/menubar.py:377
|
||||||
msgid "&Timer based"
|
msgid "&None"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:378
|
#: pysollib/tk/menubar.py:378
|
||||||
msgid "&Fast"
|
msgid "&Timer based"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:379
|
#: pysollib/tk/menubar.py:379
|
||||||
msgid "&Slow"
|
msgid "&Fast"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:380
|
#: pysollib/tk/menubar.py:380
|
||||||
msgid "&Very slow"
|
msgid "&Slow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:381
|
#: pysollib/tk/menubar.py:381
|
||||||
msgid "Stick&y mouse"
|
msgid "&Very slow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:382
|
#: pysollib/tk/menubar.py:382
|
||||||
|
msgid "Stick&y mouse"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pysollib/tk/menubar.py:383
|
||||||
msgid "Use mouse for undo/redo"
|
msgid "Use mouse for undo/redo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:384
|
#: pysollib/tk/menubar.py:385
|
||||||
msgid "&Fonts..."
|
msgid "&Fonts..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:385
|
#: pysollib/tk/menubar.py:386
|
||||||
msgid "&Colors..."
|
msgid "&Colors..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:386
|
#: pysollib/tk/menubar.py:387
|
||||||
msgid "Time&outs..."
|
msgid "Time&outs..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:388
|
#: pysollib/tk/menubar.py:389
|
||||||
msgid "&Toolbar"
|
msgid "&Toolbar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:390
|
#: pysollib/tk/menubar.py:391
|
||||||
msgid "Stat&usbar"
|
msgid "Stat&usbar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:391
|
#: pysollib/tk/menubar.py:392
|
||||||
msgid "Show &statusbar"
|
msgid "Show &statusbar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:392
|
#: pysollib/tk/menubar.py:393
|
||||||
msgid "Show &number of cards"
|
msgid "Show &number of cards"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:393
|
#: pysollib/tk/menubar.py:394
|
||||||
msgid "Show &help bar"
|
msgid "Show &help bar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:394
|
#: pysollib/tk/menubar.py:395
|
||||||
msgid "Save games &geometry"
|
msgid "Save games &geometry"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:395
|
#: pysollib/tk/menubar.py:396
|
||||||
msgid "&Demo logo"
|
msgid "&Demo logo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:396
|
#: pysollib/tk/menubar.py:397
|
||||||
msgid "Startup splash sc&reen"
|
msgid "Startup splash sc&reen"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:402
|
#: pysollib/tk/menubar.py:403
|
||||||
msgid "&Help"
|
msgid "&Help"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:403
|
#: pysollib/tk/menubar.py:404
|
||||||
msgid "&Contents"
|
msgid "&Contents"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:404
|
#: pysollib/tk/menubar.py:405
|
||||||
msgid "&How to play"
|
msgid "&How to play"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:405
|
#: pysollib/tk/menubar.py:406
|
||||||
msgid "&Rules for this game"
|
msgid "&Rules for this game"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:406
|
#: pysollib/tk/menubar.py:407
|
||||||
msgid "&License terms"
|
msgid "&License terms"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:409
|
#: pysollib/tk/menubar.py:410
|
||||||
msgid "&About "
|
msgid "&About "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:521
|
#: pysollib/tk/menubar.py:522
|
||||||
msgid "All &games..."
|
msgid "All &games..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:523
|
#: pysollib/tk/menubar.py:524
|
||||||
msgid "Playable pre&view..."
|
msgid "Playable pre&view..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:572
|
#: pysollib/tk/menubar.py:573
|
||||||
msgid "&Mahjongg games"
|
msgid "&Mahjongg games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:610
|
#: pysollib/tk/menubar.py:611
|
||||||
msgid "&Popular games"
|
msgid "&Popular games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:618
|
#: pysollib/tk/menubar.py:619
|
||||||
msgid "&French games"
|
msgid "&French games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:625
|
#: pysollib/tk/menubar.py:626
|
||||||
msgid "&Oriental games"
|
msgid "&Oriental games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:633
|
#: pysollib/tk/menubar.py:634
|
||||||
msgid "&Special games"
|
msgid "&Special games"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:639
|
#: pysollib/tk/menubar.py:640
|
||||||
msgid "All games by name"
|
msgid "All games by name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:893 pysollib/tk/menubar.py:895
|
#: pysollib/tk/menubar.py:894 pysollib/tk/menubar.py:896
|
||||||
#: pysollib/tk/selectcardset.py:240
|
#: pysollib/tk/selectcardset.py:240
|
||||||
msgid "&Load"
|
msgid "&Load"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:895
|
#: pysollib/tk/menubar.py:896
|
||||||
msgid "&Info..."
|
msgid "&Info..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:898
|
#: pysollib/tk/menubar.py:899
|
||||||
msgid "Select "
|
msgid "Select "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:959
|
#: pysollib/tk/menubar.py:960
|
||||||
msgid "Select table background"
|
msgid "Select table background"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/menubar.py:971 pysollib/tk/selecttile.py:177
|
#: pysollib/tk/menubar.py:972 pysollib/tk/selecttile.py:177
|
||||||
msgid "Select table color"
|
msgid "Select table color"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -2550,23 +2558,23 @@ msgstr ""
|
||||||
msgid "by Skill Level"
|
msgid "by Skill Level"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/selectgame.py:170 pysollib/tk/selectgame.py:542
|
#: pysollib/tk/selectgame.py:170 pysollib/tk/selectgame.py:534
|
||||||
msgid "Luck only"
|
msgid "Luck only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/selectgame.py:171 pysollib/tk/selectgame.py:543
|
#: pysollib/tk/selectgame.py:171 pysollib/tk/selectgame.py:535
|
||||||
msgid "Mostly luck"
|
msgid "Mostly luck"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/selectgame.py:172 pysollib/tk/selectgame.py:544
|
#: pysollib/tk/selectgame.py:172 pysollib/tk/selectgame.py:536
|
||||||
msgid "Balanced"
|
msgid "Balanced"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/selectgame.py:173 pysollib/tk/selectgame.py:545
|
#: pysollib/tk/selectgame.py:173 pysollib/tk/selectgame.py:537
|
||||||
msgid "Mostly skill"
|
msgid "Mostly skill"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/selectgame.py:174 pysollib/tk/selectgame.py:546
|
#: pysollib/tk/selectgame.py:174 pysollib/tk/selectgame.py:538
|
||||||
msgid "Skill only"
|
msgid "Skill only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -2744,11 +2752,11 @@ msgstr ""
|
||||||
msgid "Playable Preview - "
|
msgid "Playable Preview - "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/selectgame.py:549
|
#: pysollib/tk/selectgame.py:541
|
||||||
msgid "variable"
|
msgid "variable"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/selectgame.py:550
|
#: pysollib/tk/selectgame.py:542
|
||||||
msgid "unlimited"
|
msgid "unlimited"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -2930,23 +2938,23 @@ msgstr ""
|
||||||
msgid "Text only"
|
msgid "Text only"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/tkhtml.py:255
|
#: pysollib/tk/tkhtml.py:251
|
||||||
msgid "Index"
|
msgid "Index"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/tkhtml.py:259
|
#: pysollib/tk/tkhtml.py:255
|
||||||
msgid "Back"
|
msgid "Back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/tkhtml.py:263
|
#: pysollib/tk/tkhtml.py:259
|
||||||
msgid "Forward"
|
msgid "Forward"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/tkhtml.py:267
|
#: pysollib/tk/tkhtml.py:263
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/tkhtml.py:389
|
#: pysollib/tk/tkhtml.py:385
|
||||||
msgid ""
|
msgid ""
|
||||||
"HTML limitation:\n"
|
"HTML limitation:\n"
|
||||||
"The %s protocol is not supported yet.\n"
|
"The %s protocol is not supported yet.\n"
|
||||||
|
@ -2956,7 +2964,7 @@ msgid ""
|
||||||
"%s\n"
|
"%s\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/tkhtml.py:414 pysollib/tk/tkhtml.py:418
|
#: pysollib/tk/tkhtml.py:410 pysollib/tk/tkhtml.py:414
|
||||||
msgid ""
|
msgid ""
|
||||||
"Unable to service request:\n"
|
"Unable to service request:\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -3204,7 +3212,7 @@ msgstr ""
|
||||||
msgid "Player options"
|
msgid "Player options"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pysollib/tk/toolbar.py:464
|
#: pysollib/tk/toolbar.py:466
|
||||||
msgid "Toolbar"
|
msgid "Toolbar"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PySol 0.0.1\n"
|
"Project-Id-Version: PySol 0.0.1\n"
|
||||||
"POT-Creation-Date: Wed Aug 9 19:09:14 2006\n"
|
"POT-Creation-Date: Fri Aug 11 02:15:03 2006\n"
|
||||||
"PO-Revision-Date: 2006-08-09 23:52+0400\n"
|
"PO-Revision-Date: 2006-08-09 23:52+0400\n"
|
||||||
"Last-Translator: Скоморох <skomoroh@gmail.com>\n"
|
"Last-Translator: Скоморох <skomoroh@gmail.com>\n"
|
||||||
"Language-Team: Russian <ru@li.org>\n"
|
"Language-Team: Russian <ru@li.org>\n"
|
||||||
|
@ -1644,9 +1644,6 @@ msgstr "Le Grande Teton"
|
||||||
msgid "Legion"
|
msgid "Legion"
|
||||||
msgstr "Легион"
|
msgstr "Легион"
|
||||||
|
|
||||||
msgid "Leo"
|
|
||||||
msgstr "Лев"
|
|
||||||
|
|
||||||
msgid "Les Quatre Coins"
|
msgid "Les Quatre Coins"
|
||||||
msgstr "Les Quatre Coins"
|
msgstr "Les Quatre Coins"
|
||||||
|
|
||||||
|
@ -1990,9 +1987,6 @@ msgstr "Маджонг Лабиринт"
|
||||||
msgid "Mahjongg Lattice"
|
msgid "Mahjongg Lattice"
|
||||||
msgstr "Маджонг Решётка"
|
msgstr "Маджонг Решётка"
|
||||||
|
|
||||||
msgid "Mahjongg Leo"
|
|
||||||
msgstr "Маджонг Лев"
|
|
||||||
|
|
||||||
msgid "Mahjongg Lion"
|
msgid "Mahjongg Lion"
|
||||||
msgstr "Маджонг Лион"
|
msgstr "Маджонг Лион"
|
||||||
|
|
||||||
|
@ -3711,6 +3705,12 @@ msgstr "Зевс"
|
||||||
msgid "Zodiac"
|
msgid "Zodiac"
|
||||||
msgstr "Зодиак"
|
msgstr "Зодиак"
|
||||||
|
|
||||||
|
#~ msgid "Leo"
|
||||||
|
#~ msgstr "Лев"
|
||||||
|
|
||||||
|
#~ msgid "Mahjongg Leo"
|
||||||
|
#~ msgstr "Маджонг Лев"
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~ msgid "Big Ground"
|
#~ msgid "Big Ground"
|
||||||
#~ msgstr "Большая гора"
|
#~ msgstr "Большая гора"
|
||||||
|
|
416
po/ru_pysol.po
416
po/ru_pysol.po
File diff suppressed because it is too large
Load diff
|
@ -84,11 +84,8 @@ class AbstractCard:
|
||||||
self.y = y
|
self.y = y
|
||||||
self.item = None
|
self.item = None
|
||||||
self.face_up = 0
|
self.face_up = 0
|
||||||
# To improve display speed, we move cards out of the visible canvas.
|
# To improve display speed, we hide cards (except 2 top cards).
|
||||||
# Because the whole area that will be passed by a move will get
|
|
||||||
# updated by Tk, we must choose an optimal way off the screen.
|
|
||||||
self.hide_stack = None
|
self.hide_stack = None
|
||||||
self.hide_x = self.hide_y = 0
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
# Return a string for debug print statements.
|
# Return a string for debug print statements.
|
||||||
|
@ -99,12 +96,11 @@ class AbstractCard:
|
||||||
|
|
||||||
def moveTo(self, x, y):
|
def moveTo(self, x, y):
|
||||||
# Move the card to absolute position (x, y).
|
# Move the card to absolute position (x, y).
|
||||||
# The card remains hidden.
|
|
||||||
dx, dy = 0, 0
|
dx, dy = 0, 0
|
||||||
if self.game.app.opt.randomize_place:
|
if self.game.app.opt.randomize_place:
|
||||||
d = 1
|
d = 1
|
||||||
dx, dy = randint(-d, d), randint(-d, d)
|
dx, dy = randint(-d, d), randint(-d, d)
|
||||||
self.moveBy(x - self.x + self.hide_x + dx, y - self.y + self.hide_y + dy)
|
self.moveBy(x - self.x + dx, y - self.y + dy)
|
||||||
|
|
||||||
def moveBy(self, dx, dy):
|
def moveBy(self, dx, dy):
|
||||||
# Move the card by (dx, dy).
|
# Move the card by (dx, dy).
|
||||||
|
|
|
@ -1537,7 +1537,7 @@ for %d moves.
|
||||||
self.canvas.update_idletasks()
|
self.canvas.update_idletasks()
|
||||||
return EVENT_HANDLED
|
return EVENT_HANDLED
|
||||||
else:
|
else:
|
||||||
# remove items later
|
# remove items later (find_card_dialog)
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def highlightNotMatching(self):
|
def highlightNotMatching(self):
|
||||||
|
|
|
@ -44,6 +44,7 @@ from pysollib.layout import Layout
|
||||||
from pysollib.hint import CautiousDefaultHint, FreeCellType_Hint
|
from pysollib.hint import CautiousDefaultHint, FreeCellType_Hint
|
||||||
from pysollib.pysoltk import MfxCanvasText
|
from pysollib.pysoltk import MfxCanvasText
|
||||||
|
|
||||||
|
|
||||||
# /***********************************************************************
|
# /***********************************************************************
|
||||||
# //
|
# //
|
||||||
# ************************************************************************/
|
# ************************************************************************/
|
||||||
|
@ -231,6 +232,7 @@ class Fortress(Game):
|
||||||
# /***********************************************************************
|
# /***********************************************************************
|
||||||
# // Bastion
|
# // Bastion
|
||||||
# // Ten by One
|
# // Ten by One
|
||||||
|
# // Castles End
|
||||||
# ************************************************************************/
|
# ************************************************************************/
|
||||||
|
|
||||||
class Bastion(Game):
|
class Bastion(Game):
|
||||||
|
@ -291,6 +293,84 @@ class TenByOne(Bastion):
|
||||||
self.s.talon.dealRowAvail()
|
self.s.talon.dealRowAvail()
|
||||||
|
|
||||||
|
|
||||||
|
class CastlesEnd_Foundation(SS_FoundationStack):
|
||||||
|
def acceptsCards(self, from_stack, cards):
|
||||||
|
if self.game.getState() == 0:
|
||||||
|
if cards[0].suit != self.cap.base_suit:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
return SS_FoundationStack.acceptsCards(self, from_stack, cards)
|
||||||
|
|
||||||
|
class CastlesEnd_StackMethods:
|
||||||
|
def moveMove(self, ncards, to_stack, frames=-1, shadow=-1):
|
||||||
|
state = self.game.getState()
|
||||||
|
self.game.moveMove(ncards, self, to_stack,
|
||||||
|
frames=frames, shadow=shadow)
|
||||||
|
if state == 0:
|
||||||
|
base_rank = to_stack.cards[0].rank
|
||||||
|
self.game.base_rank = base_rank
|
||||||
|
for s in self.game.s.foundations:
|
||||||
|
s.cap.base_rank = base_rank
|
||||||
|
self.fillStack()
|
||||||
|
|
||||||
|
class CastlesEnd_RowStack(CastlesEnd_StackMethods, UD_AC_RowStack):
|
||||||
|
def acceptsCards(self, from_stack, cards):
|
||||||
|
if self.game.getState() == 0:
|
||||||
|
return False
|
||||||
|
return UD_AC_RowStack.acceptsCards(self, from_stack, cards)
|
||||||
|
|
||||||
|
class CastlesEnd_Reserve(CastlesEnd_StackMethods, OpenStack):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class CastlesEnd(Bastion):
|
||||||
|
Foundation_Class = StackWrapper(CastlesEnd_Foundation, min_cards=1, mod=13)
|
||||||
|
RowStack_Class = StackWrapper(CastlesEnd_RowStack, mod=13)
|
||||||
|
ReserveStack_Class = CastlesEnd_Reserve
|
||||||
|
|
||||||
|
def createGame(self):
|
||||||
|
l = Bastion.createGame(self)
|
||||||
|
self.base_rank = None
|
||||||
|
tx, ty, ta, tf = l.getTextAttr(self.s.foundations[-1], 'se')
|
||||||
|
font = self.app.getFont('canvas_default')
|
||||||
|
self.texts.info = MfxCanvasText(self.canvas, tx, ty,
|
||||||
|
anchor=ta, font=font)
|
||||||
|
|
||||||
|
def updateText(self):
|
||||||
|
if self.preview > 1:
|
||||||
|
return
|
||||||
|
if not self.texts.info:
|
||||||
|
return
|
||||||
|
if self.base_rank is None:
|
||||||
|
t = ""
|
||||||
|
else:
|
||||||
|
t = RANKS[self.base_rank]
|
||||||
|
self.texts.info.config(text=t)
|
||||||
|
|
||||||
|
def getState(self):
|
||||||
|
for s in self.s.foundations:
|
||||||
|
if s.cards:
|
||||||
|
return 1
|
||||||
|
return 0
|
||||||
|
|
||||||
|
def _restoreGameHook(self, game):
|
||||||
|
for s in self.s.foundations:
|
||||||
|
s.cap.base_rank = game.loadinfo.base_rank
|
||||||
|
|
||||||
|
def _loadGameHook(self, p):
|
||||||
|
self.loadinfo.addattr(base_rank=p.load())
|
||||||
|
|
||||||
|
def _saveGameHook(self, p):
|
||||||
|
base_rank = NO_RANK
|
||||||
|
for s in self.s.foundations:
|
||||||
|
if s.cards:
|
||||||
|
base_rank = s.cards[0].rank
|
||||||
|
break
|
||||||
|
p.dump(base_rank)
|
||||||
|
|
||||||
|
shallHighlightMatch = Game._shallHighlightMatch_ACW
|
||||||
|
|
||||||
|
|
||||||
# /***********************************************************************
|
# /***********************************************************************
|
||||||
# // Chessboard
|
# // Chessboard
|
||||||
# ************************************************************************/
|
# ************************************************************************/
|
||||||
|
@ -805,3 +885,5 @@ registerGame(GameInfo(535, ExiledKings, "Exiled Kings",
|
||||||
GI.GT_BELEAGUERED_CASTLE | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_BELEAGUERED_CASTLE | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
||||||
registerGame(GameInfo(626, Soother, "Soother",
|
registerGame(GameInfo(626, Soother, "Soother",
|
||||||
GI.GT_4DECK_TYPE | GI.GT_ORIGINAL, 4, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_4DECK_TYPE | GI.GT_ORIGINAL, 4, 0, GI.SL_MOSTLY_SKILL))
|
||||||
|
registerGame(GameInfo(650, CastlesEnd, "Castles End",
|
||||||
|
GI.GT_BELEAGUERED_CASTLE | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_SKILL))
|
||||||
|
|
|
@ -352,6 +352,106 @@ class One234(Calculation):
|
||||||
self.s.talon.dealRow(rows=self.s.foundations)
|
self.s.talon.dealRow(rows=self.s.foundations)
|
||||||
|
|
||||||
|
|
||||||
|
# /***********************************************************************
|
||||||
|
# // Senior Wrangler
|
||||||
|
# ************************************************************************/
|
||||||
|
|
||||||
|
class SeniorWrangler_Talon(DealRowTalonStack):
|
||||||
|
|
||||||
|
def canDealCards(self):
|
||||||
|
if self.round == self.max_rounds:
|
||||||
|
return False
|
||||||
|
return not self.game.isGameWon()
|
||||||
|
|
||||||
|
def dealCards(self, sound=0):
|
||||||
|
num_cards = 0
|
||||||
|
r = self.game.s.rows[self.round-1]
|
||||||
|
if not r.cards:
|
||||||
|
self.game.nextRoundMove(self)
|
||||||
|
return
|
||||||
|
if sound:
|
||||||
|
self.game.startDealSample()
|
||||||
|
old_state = self.game.enterState(self.game.S_DEAL)
|
||||||
|
while r.cards:
|
||||||
|
self.game.flipMove(r)
|
||||||
|
self.game.moveMove(1, r, self, frames=4, shadow=0)
|
||||||
|
self.dealRowAvail(rows=self.game.s.rows[self.round-1:], sound=0)
|
||||||
|
while self.cards:
|
||||||
|
num_cards += self.dealRowAvail(sound=0)
|
||||||
|
self.game.nextRoundMove(self)
|
||||||
|
self.game.leaveState(old_state)
|
||||||
|
if sound:
|
||||||
|
self.game.stopSamples()
|
||||||
|
return num_cards
|
||||||
|
|
||||||
|
class SeniorWrangler_RowStack(BasicRowStack):
|
||||||
|
#clickHandler = BasicRowStack.doubleclickHandler
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class SeniorWrangler(Game):
|
||||||
|
|
||||||
|
def createGame(self):
|
||||||
|
# create layout
|
||||||
|
l, s = Layout(self), self.s
|
||||||
|
# set window
|
||||||
|
self.setSize(l.XM+9.5*l.XS, l.YM+3*l.YS+l.TEXT_HEIGHT)
|
||||||
|
|
||||||
|
# create stacks
|
||||||
|
x, y = l.XM+1.5*l.XS, l.YM
|
||||||
|
for i in range(8):
|
||||||
|
stack = BetsyRoss_Foundation(x, y, self, base_rank=i,
|
||||||
|
max_cards=1, max_move=0, max_accept=0)
|
||||||
|
s.foundations.append(stack)
|
||||||
|
x = x + l.XS
|
||||||
|
x, y = l.XM+1.5*l.XS, l.YM+l.YS
|
||||||
|
for i in range(8):
|
||||||
|
stack = BetsyRoss_Foundation(x, y, self, base_rank=(2*i+3)%13,
|
||||||
|
mod=13, dir=i+1,
|
||||||
|
max_cards=12, max_move=0)
|
||||||
|
tx, ty, ta, tf = l.getTextAttr(stack, "s")
|
||||||
|
font = self.app.getFont("canvas_default")
|
||||||
|
stack.texts.misc = MfxCanvasText(self.canvas, tx, ty,
|
||||||
|
anchor=ta, font=font)
|
||||||
|
s.foundations.append(stack)
|
||||||
|
x = x + l.XS
|
||||||
|
x, y = l.XM+1.5*l.XS, l.YM+2*l.YS+l.TEXT_HEIGHT
|
||||||
|
for i in range(8):
|
||||||
|
stack = SeniorWrangler_RowStack(x, y, self, max_accept=0)
|
||||||
|
s.rows.append(stack)
|
||||||
|
stack.CARD_YOFFSET = 0
|
||||||
|
x += l.XS
|
||||||
|
x, y = l.XM, l.YM+l.YS
|
||||||
|
s.talon = SeniorWrangler_Talon(x, y, self, max_rounds=9)
|
||||||
|
tx, ty, ta, tf = l.getTextAttr(s.talon, "nn")
|
||||||
|
font = self.app.getFont("canvas_default")
|
||||||
|
s.talon.texts.rounds = MfxCanvasText(self.canvas, tx, ty,
|
||||||
|
anchor=ta, font=font)
|
||||||
|
|
||||||
|
# define stack-groups
|
||||||
|
l.defaultStackGroups()
|
||||||
|
|
||||||
|
|
||||||
|
def _shuffleHook(self, cards):
|
||||||
|
top = []
|
||||||
|
ranks = []
|
||||||
|
for c in cards[:]:
|
||||||
|
if c.rank in range(1,9) and c.rank not in ranks:
|
||||||
|
ranks.append(c.rank)
|
||||||
|
cards.remove(c)
|
||||||
|
top.append(c)
|
||||||
|
top.sort(lambda a, b: cmp(b.rank, a.rank))
|
||||||
|
return cards+top
|
||||||
|
|
||||||
|
|
||||||
|
def startGame(self):
|
||||||
|
self.s.talon.dealRow(rows=self.s.foundations[:8], frames=0)
|
||||||
|
for i in range(11):
|
||||||
|
self.s.talon.dealRow(frames=0)
|
||||||
|
self.startDealSample()
|
||||||
|
self.s.talon.dealRow()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# register the game
|
# register the game
|
||||||
registerGame(GameInfo(256, Calculation, "Calculation",
|
registerGame(GameInfo(256, Calculation, "Calculation",
|
||||||
|
@ -365,4 +465,6 @@ registerGame(GameInfo(134, BetsyRoss, "Betsy Ross",
|
||||||
"Quadruple Alliance", "Plus Belle") ))
|
"Quadruple Alliance", "Plus Belle") ))
|
||||||
registerGame(GameInfo(550, One234, "One234",
|
registerGame(GameInfo(550, One234, "One234",
|
||||||
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))
|
||||||
|
registerGame(GameInfo(653, SeniorWrangler, "Senior Wrangler",
|
||||||
|
GI.GT_2DECK_TYPE, 2, 8, GI.SL_BALANCED))
|
||||||
|
|
||||||
|
|
|
@ -377,6 +377,7 @@ class AgnesSorel(Klondike):
|
||||||
# /***********************************************************************
|
# /***********************************************************************
|
||||||
# // 8 x 8
|
# // 8 x 8
|
||||||
# // Achtmal Acht
|
# // Achtmal Acht
|
||||||
|
# // Eight by Eight
|
||||||
# ************************************************************************/
|
# ************************************************************************/
|
||||||
|
|
||||||
class EightTimesEight(Klondike):
|
class EightTimesEight(Klondike):
|
||||||
|
@ -404,6 +405,25 @@ class AchtmalAcht(EightTimesEight):
|
||||||
font=self.app.getFont("canvas_default"))
|
font=self.app.getFont("canvas_default"))
|
||||||
|
|
||||||
|
|
||||||
|
class EightByEight_RowStack(RK_RowStack):
|
||||||
|
def acceptsCards(self, from_stack, cards):
|
||||||
|
if not RK_RowStack.acceptsCards(self, from_stack, cards):
|
||||||
|
return False
|
||||||
|
if not self.cards:
|
||||||
|
return len(cards) == 1
|
||||||
|
return True
|
||||||
|
|
||||||
|
class EightByEight(EightTimesEight):
|
||||||
|
Layout_Method = Layout.klondikeLayout ##gypsyLayout
|
||||||
|
Talon_Class = CanfieldRush_Talon
|
||||||
|
RowStack_Class = EightByEight_RowStack
|
||||||
|
|
||||||
|
def createGame(self):
|
||||||
|
Klondike.createGame(self, rows=8, max_rounds=3)
|
||||||
|
|
||||||
|
shallHighlightMatch = Game._shallHighlightMatch_RK
|
||||||
|
|
||||||
|
|
||||||
# /***********************************************************************
|
# /***********************************************************************
|
||||||
# // Batsford
|
# // Batsford
|
||||||
# // Batsford Again
|
# // Batsford Again
|
||||||
|
@ -627,7 +647,6 @@ class Jane(Klondike):
|
||||||
x = x0 + ((i+1) & 1) * l.XS
|
x = x0 + ((i+1) & 1) * l.XS
|
||||||
stack = OpenStack(x, y, self, max_accept=0)
|
stack = OpenStack(x, y, self, max_accept=0)
|
||||||
stack.CARD_YOFFSET = l.YM / 3
|
stack.CARD_YOFFSET = l.YM / 3
|
||||||
stack.is_open = 1
|
|
||||||
s.reserves.append(stack)
|
s.reserves.append(stack)
|
||||||
y = y + l.YS / 2
|
y = y + l.YS / 2
|
||||||
# not needed, as no cards may be placed on the reserves
|
# not needed, as no cards may be placed on the reserves
|
||||||
|
@ -678,7 +697,7 @@ class Senate(Jane):
|
||||||
playcards = 10
|
playcards = 10
|
||||||
|
|
||||||
l, s = Layout(self), self.s
|
l, s = Layout(self), self.s
|
||||||
self.setSize(3*l.XM+(rows+6)*l.XS, l.YM+2*(l.YS+playcards*l.YOFFSET))
|
self.setSize(l.XM+(rows+7)*l.XS, l.YM+2*(l.YS+playcards*l.YOFFSET))
|
||||||
|
|
||||||
x, y = l.XM, l.YM
|
x, y = l.XM, l.YM
|
||||||
for i in range(rows):
|
for i in range(rows):
|
||||||
|
@ -686,22 +705,22 @@ class Senate(Jane):
|
||||||
x += l.XS
|
x += l.XS
|
||||||
|
|
||||||
for y in l.YM, l.YM+l.YS+playcards*l.YOFFSET:
|
for y in l.YM, l.YM+l.YS+playcards*l.YOFFSET:
|
||||||
x = 2*l.XM+rows*l.XS
|
x = l.XM+rows*l.XS+l.XS/2
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
stack = OpenStack(x, y, self, max_accept=0)
|
stack = OpenStack(x, y, self, max_accept=0)
|
||||||
stack.CARD_XOFFSET, stack.CARD_YOFFSET = 0, l.YOFFSET
|
stack.CARD_XOFFSET, stack.CARD_YOFFSET = 0, l.YOFFSET
|
||||||
s.reserves.append(stack)
|
s.reserves.append(stack)
|
||||||
x += l.XS
|
x += l.XS
|
||||||
x = 3*l.XM+(rows+4)*l.XS
|
x = l.XM+(rows+5)*l.XS
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
y = l.YM+l.YS
|
y = l.YM+l.YS
|
||||||
for j in range(4):
|
for j in range(4):
|
||||||
s.foundations.append(SS_FoundationStack(x, y, self, suit=j))
|
s.foundations.append(SS_FoundationStack(x, y, self, suit=j))
|
||||||
y += l.YS
|
y += l.YS
|
||||||
x += l.XS
|
x += l.XS
|
||||||
x, y = 3*l.XM+(rows+5)*l.XS, l.YM
|
x, y = self.width-l.XS, l.YM
|
||||||
s.talon = AgnesBernauer_Talon(x, y, self)
|
s.talon = AgnesBernauer_Talon(x, y, self)
|
||||||
l.createText(s.talon, 'sw')
|
l.createText(s.talon, 'nw')
|
||||||
|
|
||||||
l.defaultStackGroups()
|
l.defaultStackGroups()
|
||||||
|
|
||||||
|
@ -1430,5 +1449,7 @@ registerGame(GameInfo(633, Athena, "Athena",
|
||||||
GI.GT_KLONDIKE, 1, -1, GI.SL_BALANCED))
|
GI.GT_KLONDIKE, 1, -1, GI.SL_BALANCED))
|
||||||
registerGame(GameInfo(634, Chinaman, "Chinaman",
|
registerGame(GameInfo(634, Chinaman, "Chinaman",
|
||||||
GI.GT_KLONDIKE, 1, 1, GI.SL_BALANCED))
|
GI.GT_KLONDIKE, 1, 1, GI.SL_BALANCED))
|
||||||
|
registerGame(GameInfo(651, EightByEight, "Eight by Eight",
|
||||||
|
GI.GT_KLONDIKE, 2, 2, GI.SL_BALANCED))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -765,6 +765,53 @@ class DerLetzteMonarch(Game):
|
||||||
return diff in (-13, -1, 1, 13)
|
return diff in (-13, -1, 1, 13)
|
||||||
|
|
||||||
|
|
||||||
|
# /***********************************************************************
|
||||||
|
# // Doublets
|
||||||
|
# ************************************************************************/
|
||||||
|
|
||||||
|
class DoubletsII(Game):
|
||||||
|
FILL_STACKS_AFTER_DROP = False # for Nestor_RowStack
|
||||||
|
|
||||||
|
def createGame(self):
|
||||||
|
l, s = Layout(self), self.s
|
||||||
|
self.setSize(l.XM+12*l.XS, l.YM+3*l.YS+3*l.YOFFSET)
|
||||||
|
|
||||||
|
x, y = l.XM, l.YM
|
||||||
|
for i in range(12):
|
||||||
|
s.rows.append(Nestor_RowStack(x, y, self,
|
||||||
|
max_move=1, max_accept=1,
|
||||||
|
dir=0, base_rank=NO_RANK))
|
||||||
|
x += l.XS
|
||||||
|
x, y = l.XM, self.height-l.YS
|
||||||
|
s.talon = TalonStack(x, y, self)
|
||||||
|
l.createText(s.talon, 'n')
|
||||||
|
|
||||||
|
x, y = self.width-l.XS, self.height-l.YS
|
||||||
|
s.foundations.append(AbstractFoundationStack(x, y, self, suit=ANY_SUIT,
|
||||||
|
max_move=0, max_cards=52,
|
||||||
|
base_rank=ANY_RANK, max_accept=0))
|
||||||
|
l.createText(s.foundations[0], "n")
|
||||||
|
|
||||||
|
l.defaultStackGroups()
|
||||||
|
|
||||||
|
def startGame(self):
|
||||||
|
for i in range(3):
|
||||||
|
self.s.talon.dealRow(frames=0, flip=0)
|
||||||
|
self.startDealSample()
|
||||||
|
self.s.talon.dealRow()
|
||||||
|
|
||||||
|
def fillStack(self, stack):
|
||||||
|
if stack in self.s.rows:
|
||||||
|
if stack.cards:
|
||||||
|
stack.flipMove()
|
||||||
|
else:
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
# register the game
|
# register the game
|
||||||
registerGame(GameInfo(89, MonteCarlo, "Monte Carlo",
|
registerGame(GameInfo(89, MonteCarlo, "Monte Carlo",
|
||||||
GI.GT_PAIRING_TYPE, 1, 0, GI.SL_MOSTLY_LUCK,
|
GI.GT_PAIRING_TYPE, 1, 0, GI.SL_MOSTLY_LUCK,
|
||||||
|
@ -795,4 +842,6 @@ registerGame(GameInfo(329, TheWishOpen, "The Wish (open)",
|
||||||
ranks=(0, 6, 7, 8, 9, 10, 11, 12) ))
|
ranks=(0, 6, 7, 8, 9, 10, 11, 12) ))
|
||||||
registerGame(GameInfo(368, Vertical, "Vertical",
|
registerGame(GameInfo(368, Vertical, "Vertical",
|
||||||
GI.GT_PAIRING_TYPE | GI.GT_OPEN, 1, 0, GI.SL_MOSTLY_LUCK))
|
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))
|
||||||
|
|
||||||
|
|
|
@ -124,39 +124,40 @@ class Boudoir(Game):
|
||||||
def createGame(self):
|
def createGame(self):
|
||||||
|
|
||||||
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.5*l.XS, l.YM+4*l.YS)
|
||||||
|
|
||||||
x, y = l.XM, l.YM+l.YS-l.TEXT_HEIGHT/2
|
x, y = l.XM, l.YM+l.YS
|
||||||
s.talon = WasteTalonStack(x, y, self, max_rounds=3)
|
s.talon = WasteTalonStack(x, y, self, max_rounds=3)
|
||||||
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,
|
s.talon.texts.rounds = MfxCanvasText(self.canvas, tx, ty,
|
||||||
anchor=ta, font=font)
|
anchor=ta, font=font)
|
||||||
l.createText(s.talon, "s")
|
l.createText(s.talon, 'ne')
|
||||||
y += l.YS+l.TEXT_HEIGHT
|
y += l.YS
|
||||||
s.waste = WasteStack(x, y, self)
|
s.waste = WasteStack(x, y, self)
|
||||||
l.createText(s.waste, "s")
|
l.createText(s.waste, 'ne')
|
||||||
|
|
||||||
x, y = l.XM+l.XS, l.YM
|
x, y = l.XM+1.5*l.XS, l.YM
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
s.foundations.append(SS_FoundationStack(x, y, self, suit=i, max_cards=13))
|
s.foundations.append(SS_FoundationStack(x, y, self, suit=i,
|
||||||
|
max_cards=13))
|
||||||
x += l.XS
|
x += l.XS
|
||||||
|
|
||||||
x = l.XM+l.XS
|
x = l.XM+1.5*l.XS
|
||||||
y += l.YS
|
y += l.YS
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
s.rows.append(AbstractFoundationStack(x, y, self, suit=i,
|
s.rows.append(AbstractFoundationStack(x, y, self, suit=i,
|
||||||
max_cards=1, max_move=0, base_rank=QUEEN))
|
max_cards=1, max_move=0, base_rank=QUEEN))
|
||||||
x += l.XS
|
x += l.XS
|
||||||
|
|
||||||
x = l.XM+l.XS
|
x = l.XM+1.5*l.XS
|
||||||
y += l.YS
|
y += l.YS
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
s.rows.append(AbstractFoundationStack(x, y, self, suit=i,
|
s.rows.append(AbstractFoundationStack(x, y, self, suit=i,
|
||||||
max_cards=1, max_move=0, base_rank=JACK))
|
max_cards=1, max_move=0, base_rank=JACK))
|
||||||
x += l.XS
|
x += l.XS
|
||||||
|
|
||||||
x = l.XM+l.XS
|
x = l.XM+1.5*l.XS
|
||||||
y += l.YS
|
y += l.YS
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
s.foundations.append(SS_FoundationStack(x, y, self, suit=i,
|
s.foundations.append(SS_FoundationStack(x, y, self, suit=i,
|
||||||
|
|
|
@ -146,7 +146,7 @@ class Terrace(Game):
|
||||||
self.setSize(l.XM + maxrows*l.XS + l.XM, l.YM + 3*l.YS + h)
|
self.setSize(l.XM + maxrows*l.XS + l.XM, l.YM + 3*l.YS + h)
|
||||||
|
|
||||||
# extra settings
|
# extra settings
|
||||||
self.base_card = None
|
self.base_rank = None
|
||||||
|
|
||||||
# create stacks
|
# create stacks
|
||||||
x, y = l.XM + w1, l.YM
|
x, y = l.XM + w1, l.YM
|
||||||
|
|
|
@ -281,6 +281,64 @@ class Saxony(Game):
|
||||||
self.s.talon.dealRow()
|
self.s.talon.dealRow()
|
||||||
|
|
||||||
|
|
||||||
|
# /***********************************************************************
|
||||||
|
# // Ladies Battle
|
||||||
|
# ************************************************************************/
|
||||||
|
|
||||||
|
class LadiesBattle_RowStack(AC_RowStack):
|
||||||
|
def acceptsCards(self, from_stack, cards):
|
||||||
|
if not AC_RowStack.acceptsCards(self, from_stack, cards):
|
||||||
|
return False
|
||||||
|
if from_stack in self.game.s.reserves:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class LadiesBattle(Game):
|
||||||
|
Hint_Class = CautiousDefaultHint
|
||||||
|
|
||||||
|
def createGame(self):
|
||||||
|
l, s = Layout(self), self.s
|
||||||
|
self.setSize(l.XM+9*l.XS, max(l.YM+l.YS+20*l.YOFFSET, l.YM+6*l.YS))
|
||||||
|
|
||||||
|
x, y, = l.XM+1.5*l.XS, l.YM
|
||||||
|
for i in range(6):
|
||||||
|
s.rows.append(LadiesBattle_RowStack(x, y, self,
|
||||||
|
max_move=1, mod=13))
|
||||||
|
x = x + l.XS
|
||||||
|
x, y = l.XM, l.YM+l.YS/2
|
||||||
|
for i in range(4):
|
||||||
|
s.reserves.append(OpenStack(x, y, self, max_accept=0))
|
||||||
|
y += l.YS
|
||||||
|
x, y = self.width-l.XS, l.YM+l.YS/2
|
||||||
|
for i in range(4):
|
||||||
|
s.foundations.append(SS_FoundationStack(x, y, self, suit=i,
|
||||||
|
base_rank=QUEEN, mod=13))
|
||||||
|
y += l.YS
|
||||||
|
x, y = self.width-l.XS, self.height-l.YS
|
||||||
|
s.talon = DealRowTalonStack(x, y, self)
|
||||||
|
l.createText(s.talon, "sw")
|
||||||
|
l.defaultStackGroups()
|
||||||
|
|
||||||
|
def _shuffleHook(self, cards):
|
||||||
|
return self._shuffleHookMoveToTop(cards,
|
||||||
|
lambda c: (c.rank in (JACK, QUEEN), (c.rank, c.suit)))
|
||||||
|
|
||||||
|
def startGame(self):
|
||||||
|
self.s.talon.dealRow(rows=self.s.reserves, frames=0)
|
||||||
|
self.s.talon.dealRow(rows=self.s.foundations, frames=0)
|
||||||
|
self.startDealSample()
|
||||||
|
self.s.talon.dealRow()
|
||||||
|
|
||||||
|
def fillStack(self, stack):
|
||||||
|
if stack in self.s.rows and not stack.cards:
|
||||||
|
if self.s.talon.cards:
|
||||||
|
self.s.talon.flipMove()
|
||||||
|
self.s.talon.moveMove(1, stack)
|
||||||
|
|
||||||
|
shallHighlightMatch = Game._shallHighlightMatch_ACW
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# register the game
|
# register the game
|
||||||
registerGame(GameInfo(303, Tournament, "Tournament",
|
registerGame(GameInfo(303, Tournament, "Tournament",
|
||||||
|
@ -292,6 +350,8 @@ registerGame(GameInfo(386, KingsdownEights, "Kingsdown Eights",
|
||||||
GI.GT_2DECK_TYPE, 2, 0, GI.SL_BALANCED))
|
GI.GT_2DECK_TYPE, 2, 0, GI.SL_BALANCED))
|
||||||
registerGame(GameInfo(645, Saxony, "Saxony",
|
registerGame(GameInfo(645, Saxony, "Saxony",
|
||||||
GI.GT_2DECK_TYPE, 2, 0, GI.SL_MOSTLY_SKILL))
|
GI.GT_2DECK_TYPE, 2, 0, GI.SL_MOSTLY_SKILL))
|
||||||
|
registerGame(GameInfo(652, LadiesBattle, "Ladies Battle",
|
||||||
|
GI.GT_1DECK_TYPE, 1, 0, GI.SL_MOSTLY_LUCK))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -211,6 +211,11 @@ class Stack:
|
||||||
# its face up on a (single or double) click, and also support
|
# its face up on a (single or double) click, and also support
|
||||||
# moving a subpile around.
|
# moving a subpile around.
|
||||||
|
|
||||||
|
# constants
|
||||||
|
MIN_VISIBLE_XOFFSET = 5
|
||||||
|
MIN_VISIBLE_YOFFSET = 5
|
||||||
|
SHRINK_FACTOR = 2.
|
||||||
|
|
||||||
def __init__(self, x, y, game, cap={}):
|
def __init__(self, x, y, game, cap={}):
|
||||||
# Arguments are the stack's nominal x and y position (the top
|
# Arguments are the stack's nominal x and y position (the top
|
||||||
# left corner of the first card placed in the stack), and the
|
# left corner of the first card placed in the stack), and the
|
||||||
|
@ -239,6 +244,8 @@ class Stack:
|
||||||
model.id = id
|
model.id = id
|
||||||
model.game = game
|
model.game = game
|
||||||
model.cards = []
|
model.cards = []
|
||||||
|
#
|
||||||
|
model.is_filled = False
|
||||||
|
|
||||||
# capabilites - the game logic
|
# capabilites - the game logic
|
||||||
model.cap = Struct(
|
model.cap = Struct(
|
||||||
|
@ -305,8 +312,6 @@ class Stack:
|
||||||
view.is_open = -1
|
view.is_open = -1
|
||||||
view.can_hide_cards = -1
|
view.can_hide_cards = -1
|
||||||
view.max_shadow_cards = -1
|
view.max_shadow_cards = -1
|
||||||
#
|
|
||||||
view.is_filled = False
|
|
||||||
|
|
||||||
def destruct(self):
|
def destruct(self):
|
||||||
# help breaking circular references
|
# help breaking circular references
|
||||||
|
@ -360,23 +365,12 @@ class Stack:
|
||||||
self.can_hide_cards = 0
|
self.can_hide_cards = 0
|
||||||
elif self.canvas.preview:
|
elif self.canvas.preview:
|
||||||
self.can_hide_cards = 0
|
self.can_hide_cards = 0
|
||||||
if self.can_hide_cards:
|
|
||||||
# compute hide-off direction (see class Card)
|
|
||||||
CW, CH = self.game.app.images.CARDW, self.game.app.images.CARDH
|
|
||||||
cx = self.x + CW / 2
|
|
||||||
cy = self.y + CH / 2
|
|
||||||
if cy < 3 * CH / 2:
|
|
||||||
self.hide_x, self.hide_y = 0, -10000 # hide at top
|
|
||||||
elif cx < 3 * CW / 2:
|
|
||||||
self.hide_x, self.hide_y = -10000, 0 # hide at left
|
|
||||||
elif cy > self.game.height - 3 * CH / 2:
|
|
||||||
self.hide_x, self.hide_y = 0, 10000 # hide at bottom
|
|
||||||
else:
|
|
||||||
self.hide_x, self.hide_y = 10000, 0 # hide at right
|
|
||||||
if self.is_open < 0:
|
if self.is_open < 0:
|
||||||
self.is_open = (self.is_visible and
|
self.is_open = False
|
||||||
(abs(self.CARD_XOFFSET[0]) >= 5 or
|
if (self.is_visible and
|
||||||
abs(self.CARD_YOFFSET[0]) >= 5))
|
(abs(self.CARD_XOFFSET[0]) >= self.MIN_VISIBLE_XOFFSET or
|
||||||
|
abs(self.CARD_YOFFSET[0]) >= self.MIN_VISIBLE_YOFFSET)):
|
||||||
|
self.is_open = True
|
||||||
if self.max_shadow_cards < 0:
|
if self.max_shadow_cards < 0:
|
||||||
self.max_shadow_cards = 999999
|
self.max_shadow_cards = 999999
|
||||||
if abs(self.CARD_YOFFSET[0]) != self.game.app.images.CARD_YOFFSET:
|
if abs(self.CARD_YOFFSET[0]) != self.game.app.images.CARD_YOFFSET:
|
||||||
|
@ -385,9 +379,11 @@ class Stack:
|
||||||
self.max_shadow_cards = 1
|
self.max_shadow_cards = 1
|
||||||
if (self.game.app.opt.shrink_face_down and
|
if (self.game.app.opt.shrink_face_down and
|
||||||
type(ox) is int and type(oy) is int):
|
type(ox) is int and type(oy) is int):
|
||||||
if ((ox == 0 and oy >= self.game.app.images.CARD_YOFFSET/2) or
|
# no shrink if xoffset/yoffset too small
|
||||||
(oy == 0 and ox >= self.game.app.images.CARD_XOFFSET/2)):
|
f = self.SHRINK_FACTOR
|
||||||
self.shrink_face_down = 2
|
if ((ox == 0 and oy >= self.game.app.images.CARD_YOFFSET/f) or
|
||||||
|
(oy == 0 and ox >= self.game.app.images.CARD_XOFFSET/f)):
|
||||||
|
self.shrink_face_down = f
|
||||||
# bottom image
|
# bottom image
|
||||||
if self.is_visible:
|
if self.is_visible:
|
||||||
self.prepareBottom()
|
self.prepareBottom()
|
||||||
|
@ -745,7 +741,7 @@ class Stack:
|
||||||
for c in cards[-2:]:
|
for c in cards[-2:]:
|
||||||
##print "refresh unhide 1", c, c.hide_stack
|
##print "refresh unhide 1", c, c.hide_stack
|
||||||
c.unhide()
|
c.unhide()
|
||||||
##print "refresh unhide 1", c, c.hide_stack, c.hide_x, c.hide_y
|
##print "refresh unhide 1", c, c.hide_stack
|
||||||
# update the card postions and stacking order
|
# update the card postions and stacking order
|
||||||
item = cards[0].item
|
item = cards[0].item
|
||||||
x, y = view.x, view.y
|
x, y = view.x, view.y
|
||||||
|
@ -778,17 +774,15 @@ class Stack:
|
||||||
format = "%d"
|
format = "%d"
|
||||||
if format:
|
if format:
|
||||||
t = format % len(self.cards)
|
t = format % len(self.cards)
|
||||||
if 0 and self.game.app.debug:
|
if 0 and self.game.app.debug >= 4:
|
||||||
visible = 0
|
visible = 0
|
||||||
for c in self.cards:
|
for c in self.cards:
|
||||||
if c.isHidden():
|
if c.isHidden():
|
||||||
assert c.hide_stack is not None
|
assert c.hide_stack is not None
|
||||||
assert c.hide_x != 0 or c.hide_y != 0
|
|
||||||
else:
|
else:
|
||||||
visible = visible + 1
|
visible = visible + 1
|
||||||
assert c.hide_stack is None
|
assert c.hide_stack is None
|
||||||
assert c.hide_x == 0 and c.hide_y == 0
|
t = t + " (%d)" % visible
|
||||||
t = t + " %2d" % visible
|
|
||||||
self.texts.ncards.config(text=t)
|
self.texts.ncards.config(text=t)
|
||||||
|
|
||||||
def basicShallHighlightSameRank(self, card):
|
def basicShallHighlightSameRank(self, card):
|
||||||
|
@ -800,11 +794,10 @@ class Stack:
|
||||||
return True
|
return True
|
||||||
if not self.is_open:
|
if not self.is_open:
|
||||||
return False
|
return False
|
||||||
dx, dy = self.getOffsetFor(card)
|
## dx, dy = self.getOffsetFor(card)
|
||||||
if dx == 0 and dy <= 4:
|
## if ((dx == 0 and dy <= self.MIN_VISIBLE_XOFFSET) or
|
||||||
return False
|
## (dx <= self.MIN_VISIBLE_YOFFSET and dy == 0)):
|
||||||
if dx <= 4 and dy == 0:
|
## return False
|
||||||
return False
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def basicShallHighlightMatch(self, card):
|
def basicShallHighlightMatch(self, card):
|
||||||
|
@ -984,7 +977,7 @@ class Stack:
|
||||||
if self.game.demo:
|
if self.game.demo:
|
||||||
self.game.stopDemo(event)
|
self.game.stopDemo(event)
|
||||||
if self.game.busy: return EVENT_HANDLED
|
if self.game.busy: return EVENT_HANDLED
|
||||||
if not self.game.app.opt.sticky_mouse: # 1:
|
if not self.game.app.opt.sticky_mouse:
|
||||||
# use a timer to update the drag
|
# use a timer to update the drag
|
||||||
# this allows us to skip redraws on slow machines
|
# this allows us to skip redraws on slow machines
|
||||||
drag = self.game.drag
|
drag = self.game.drag
|
||||||
|
@ -1229,6 +1222,9 @@ class Stack:
|
||||||
def _shadeStack(self):
|
def _shadeStack(self):
|
||||||
if not self.game.app.opt.shade_filled_stacks:
|
if not self.game.app.opt.shade_filled_stacks:
|
||||||
return
|
return
|
||||||
|
## if (self.CARD_XOFFSET != (0,) or
|
||||||
|
## self.CARD_YOFFSET != (0,)):
|
||||||
|
## return
|
||||||
if not self.images.shade_img:
|
if not self.images.shade_img:
|
||||||
img = self.game.app.images.getShade()
|
img = self.game.app.images.getShade()
|
||||||
self.images.shade_img = img
|
self.images.shade_img = img
|
||||||
|
@ -1237,11 +1233,11 @@ class Stack:
|
||||||
if img is None:
|
if img is None:
|
||||||
return
|
return
|
||||||
if not self.items.shade_item:
|
if not self.items.shade_item:
|
||||||
self.game.canvas.update_idletasks()
|
#self.game.canvas.update_idletasks()
|
||||||
card = self.cards[-1]
|
card = self.cards[-1]
|
||||||
item = MfxCanvasImage(self.game.canvas, card.x, card.y,
|
item = MfxCanvasImage(self.game.canvas, card.x, card.y,
|
||||||
image=img, anchor=ANCHOR_NW)
|
image=img, anchor=ANCHOR_NW)
|
||||||
##item.tkraise()
|
#item.tkraise()
|
||||||
item.addtag(self.group)
|
item.addtag(self.group)
|
||||||
self.items.shade_item = item
|
self.items.shade_item = item
|
||||||
|
|
||||||
|
@ -1355,17 +1351,9 @@ class DealRow_StackMethods:
|
||||||
for r in stacks:
|
for r in stacks:
|
||||||
assert not self.getCard().face_up
|
assert not self.getCard().face_up
|
||||||
assert r is not self
|
assert r is not self
|
||||||
if frames == 0 and self.game.moves.state == self.game.S_INIT:
|
if flip:
|
||||||
# optimized a little bit for initial dealing
|
self.game.flipMove(self)
|
||||||
c = self.removeCard(update=0)
|
self.game.moveMove(1, self, r, frames=frames)
|
||||||
r.addCard(c, update=0)
|
|
||||||
# doing the flip after the move seems to be a little faster
|
|
||||||
if flip:
|
|
||||||
c.showFace()
|
|
||||||
else:
|
|
||||||
if flip:
|
|
||||||
self.game.flipMove(self)
|
|
||||||
self.game.moveMove(1, self, r, frames=frames)
|
|
||||||
self.game.leaveState(old_state)
|
self.game.leaveState(old_state)
|
||||||
return len(stacks)
|
return len(stacks)
|
||||||
|
|
||||||
|
|
|
@ -49,36 +49,7 @@ from tkcanvas import MfxCanvasGroup, MfxCanvasImage
|
||||||
# //
|
# //
|
||||||
# ************************************************************************/
|
# ************************************************************************/
|
||||||
|
|
||||||
# any Tk version
|
class _HideableCard(AbstractCard):
|
||||||
class _HideableCard_1(AbstractCard):
|
|
||||||
def hide(self, stack):
|
|
||||||
if stack is self.hide_stack:
|
|
||||||
return
|
|
||||||
if self.hide_stack:
|
|
||||||
hx, hy = stack.hide_x - self.hide_x, stack.hide_y - self.hide_y
|
|
||||||
else:
|
|
||||||
hx, hy = stack.hide_x, stack.hide_y
|
|
||||||
####self.item.move(hx, hy)
|
|
||||||
item = self.item
|
|
||||||
item.canvas.tk.call(item.canvas._w, "move", item.id, hx, hy)
|
|
||||||
self.hide_x, self.hide_y = stack.hide_x, stack.hide_y
|
|
||||||
self.hide_stack = stack
|
|
||||||
##print "hide:", self.id, hx, hy, self.item.coords()
|
|
||||||
|
|
||||||
def unhide(self):
|
|
||||||
if self.hide_stack is None:
|
|
||||||
return 0
|
|
||||||
####self.item.move(-self.hide_x, -self.hide_y)
|
|
||||||
item = self.item
|
|
||||||
item.canvas.tk.call(item.canvas._w, "move", item.id, -self.hide_x, -self.hide_y)
|
|
||||||
##print "unhide:", self.id, -self.hide_x, -self.hide_y, self.item.coords()
|
|
||||||
self.hide_x, self.hide_y = 0, 0
|
|
||||||
self.hide_stack = None
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
# needs Tk 8.3.0 or better
|
|
||||||
class _HideableCard_2(AbstractCard):
|
|
||||||
def hide(self, stack):
|
def hide(self, stack):
|
||||||
if stack is self.hide_stack:
|
if stack is self.hide_stack:
|
||||||
return
|
return
|
||||||
|
@ -95,11 +66,6 @@ class _HideableCard_2(AbstractCard):
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
_HideableCard =_HideableCard_1
|
|
||||||
if 1 and tkversion >= (8, 3, 0, 0):
|
|
||||||
_HideableCard =_HideableCard_2
|
|
||||||
|
|
||||||
|
|
||||||
# /***********************************************************************
|
# /***********************************************************************
|
||||||
# // New implemetation since 2.10
|
# // New implemetation since 2.10
|
||||||
# //
|
# //
|
||||||
|
|
|
@ -339,7 +339,7 @@ class PysolMenubar(PysolMenubarActions):
|
||||||
menu.add_command(label=n_("&Player options..."), command=self.mOptPlayerOptions)
|
menu.add_command(label=n_("&Player options..."), command=self.mOptPlayerOptions)
|
||||||
submenu = MfxMenu(menu, label=n_("&Automatic play"))
|
submenu = MfxMenu(menu, label=n_("&Automatic play"))
|
||||||
submenu.add_checkbutton(label=n_("Auto &face up"), variable=self.tkopt.autofaceup, command=self.mOptAutoFaceUp)
|
submenu.add_checkbutton(label=n_("Auto &face up"), variable=self.tkopt.autofaceup, command=self.mOptAutoFaceUp)
|
||||||
submenu.add_checkbutton(label=n_("&Auto drop"), variable=self.tkopt.autodrop, command=self.mOptAutoDrop)
|
submenu.add_checkbutton(label=n_("A&uto drop"), variable=self.tkopt.autodrop, command=self.mOptAutoDrop)
|
||||||
submenu.add_checkbutton(label=n_("Auto &deal"), variable=self.tkopt.autodeal, command=self.mOptAutoDeal)
|
submenu.add_checkbutton(label=n_("Auto &deal"), variable=self.tkopt.autodeal, command=self.mOptAutoDeal)
|
||||||
submenu.add_separator()
|
submenu.add_separator()
|
||||||
submenu.add_checkbutton(label=n_("&Quick play"), variable=self.tkopt.quickplay, command=self.mOptQuickPlay)
|
submenu.add_checkbutton(label=n_("&Quick play"), variable=self.tkopt.quickplay, command=self.mOptQuickPlay)
|
||||||
|
|
|
@ -221,6 +221,8 @@ def plain_text():
|
||||||
if gi.category == GI.GC_FRENCH:
|
if gi.category == GI.GC_FRENCH:
|
||||||
##print str(gi.gameclass)
|
##print str(gi.gameclass)
|
||||||
print gi.name.encode('utf-8')
|
print gi.name.encode('utf-8')
|
||||||
|
for n in gi.altnames:
|
||||||
|
print n.encode('utf-8')
|
||||||
##name = gi.name.lower()
|
##name = gi.name.lower()
|
||||||
##name = re.sub('\W', '', name)
|
##name = re.sub('\W', '', name)
|
||||||
##print id, name #, gi.si.game_type, gi.si.game_type == GI.GC_FRENCH
|
##print id, name #, gi.si.game_type, gi.si.game_type == GI.GC_FRENCH
|
||||||
|
|
Loading…
Add table
Reference in a new issue