From f3661a0aeee131517931ed82b9efb84dc21a4f4a Mon Sep 17 00:00:00 2001 From: Joe R Date: Fri, 30 Dec 2022 09:56:00 -0500 Subject: [PATCH] Additional options and documentation for Solitaire Wizard. --- html-src/gen-html.py | 1 + html-src/index.html | 6 +- html-src/solitaire_wizard.html | 95 ++++++++++++++++++++++++ po/de_pysol.po | 70 +++++++++++++++++- po/fr_pysol.po | 70 +++++++++++++++++- po/it_pysol.po | 70 +++++++++++++++++- po/pl_pysol.po | 70 +++++++++++++++++- po/pysol.pot | 66 +++++++++++++++++ po/ru_pysol.po | 70 +++++++++++++++++- pysollib/customgame.py | 59 ++++++++++++--- pysollib/games/spider.py | 16 +--- pysollib/stack.py | 130 +++++++++++++++++++++++++++++++++ pysollib/wizardutil.py | 64 ++++++++++------ 13 files changed, 733 insertions(+), 54 deletions(-) create mode 100644 html-src/solitaire_wizard.html diff --git a/html-src/gen-html.py b/html-src/gen-html.py index d2e1d96c..c5745ee0 100755 --- a/html-src/gen-html.py +++ b/html-src/gen-html.py @@ -61,6 +61,7 @@ files = [ ('report_bug.html', 'PySol - Report a Bug'), # ('rules_alternate.html', 'PySol - a Solitaire Game Collection'), # ('rules.html', 'PySol - a Solitaire Game Collection'), + ('solitaire_wizard.html', 'PySol - Solitaire Wizard'), ] rules_files = [ diff --git a/html-src/index.html b/html-src/index.html index 662d2e66..7e80bb1d 100644 --- a/html-src/index.html +++ b/html-src/index.html @@ -11,11 +11,15 @@
  • Individual Game Rules
  • Alternate Names +

    Features

    +

    Misc


    Visit the official PySolFC Home diff --git a/html-src/solitaire_wizard.html b/html-src/solitaire_wizard.html new file mode 100644 index 00000000..97548055 --- /dev/null +++ b/html-src/solitaire_wizard.html @@ -0,0 +1,95 @@ +

    Solitaire Wizard

    +

    +The Solitaire Wizard is a feature in PySol that allows you to create and play +custom solitaire games. +

    +Also note that the Solitaire Wizard may not be enabled in mobile versions of +PySol. + +Below are the different options you can set when using the Solitaire Wizard: + +

    General

    +
      +
    • Initial Setting - The initial setting automatically configures the +Solitaire Wizard options to match one of several sample games.
    • +
    • Name - This is the name of the game you wish to create.
    • +
    • Skill Level - Whether the game is more luck or skill. This doesn't +affect the actual game, but is used to categorize it in PySol, and to help +with sorting.
    • +
    • Number of Decks - The number of decks used.
    • +
    • Layout - The physical layout of the card piles. This is purely +aesthetic and doesn't affect gameplay.
    • +
    + +

    Talon

    +
      +
    • Type - This determines when and how cards are dealt from the talon. +Cards can be dealt either all at the beginning, to a waste pile, reserves, or +foundations, or to the tableau, either in normal style, Spider style (don't allow +dealing from the talon if there are empty piles), or Grounds for a Divorce style +(do not deal to empty tableau piles).
    • +
    • Number of Redeals - How many times the player is allowed to redeal. +In each redeal, the pile(s) where the cards from the talon are dealt are +combined to form a new talon.
    • +
    • # of cards dealt to waste - If dealing cards from the talon to the +waste, this indicates how many are dealt at once.
    • +
    • Shuffle during Redeal - Whether the deck should be shuffled when +doing a redeal.
    • +
    + +

    Foundations

    +
      +
    • Type - This determines what cards can be moved to the foundations. +Foundations can be built by same suit, same color, alternate color, +any suit but the same, rank regardless of suit, or Spider style +(move entire sequences to the foundations once complete).
    • +
    • Base Card - Which rank is used to start the foundations - either ace +or king, or any card.
    • +
    • Direction - Whether the foundation is built up or down.
    • +
    • Move - Whether you're allowed to move the top card from a foundation.
    • +
    • First card sets base cards - If the base card is set to any, this +indicates whether all four foundations must start with the same rank - once the +first card is moved to the foundations, all other foundations must start from +the same base rank.
    • +
    + +

    Tableau

    +
      +
    • Number of tableau piles - How many tableau piles there are.
    • +
    • Type - This determines how foundations are built - by same suit, +alternate color, same color, rank regardless of suit, any suit but the same, +up or down, Spider style (can be built regardless of suit, but only sequences +that match the suit option can be moved as a unit), Yukon style (cards can +be moved regardless of sequence), or no building on the tableau allowed.
    • +
    • Base Card - What card can fill an empty tableau pile.
    • +
    • Direction - Whether the tableau piles are built up or down.
    • +
    • Move - Whether sequences can be moved together, or cards can only +be moved singly.
    • +
    • Wrapping - Whether wrapping from king to ace or ace to king is +allowed.
    • +
    • Use "Super Move" feature - If sequences normally cannot be moved +together, a "Super Move" allows you to move sequences regardless, if there +are enough empty stacks/reserves to make the move normally.
    • +
    + +

    Reserves

    +
      +
    • Number of reserves - How many reserves there are.
    • +
    • Max # of accepted cards - How many cards you can move to each +reserve.
    • + +

      Opening deal

      +
        +
      • Type - How the cards are dealt to the tableau. Rectangular +deals have the cards dealt relatively evenly, triangular deals involve +each pile getting one more card than the previous, and pyramid deals are +similar, but piles after the center one have one fewer than the previous.
      • +
      • # of face-down cards dealt to the tableau pile - How many +cards are dealt face-down to each pile. Note that the top card of +each tableau pile is always face-up.
      • +
      • # of cards dealt to the reserve - How many cards are dealt +face-up to each reserve.
      • +
      • Max # of dealt cards - How many cards can be dealt from the +talon at the start of the game at most.
      • +
      • Deal first cards to foundations - Whether the first cards are +dealt to the foundations at the start of the game.
      • diff --git a/po/de_pysol.po b/po/de_pysol.po index 69568725..428a6871 100644 --- a/po/de_pysol.po +++ b/po/de_pysol.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PySol 0.0.1\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2022-09-26 20:59-0400\n" +"PO-Revision-Date: 2022-12-30 09:31-0500\n" "Last-Translator: H. Schaekel \n" "Language-Team: German\n" "Language: de\n" @@ -1223,6 +1223,12 @@ msgstr "Endablage. Aufwärts setzen nach Farbe" msgid "Foundation. Build down by color." msgstr "Endablage. Abwärts setzen nach Farbe." +msgid "Foundation. Build up in any suit but the same." +msgstr "" + +msgid "Foundation. Build down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322 msgid "Tableau. No building." msgstr "Tableau. Keine Erstellung." @@ -1305,6 +1311,21 @@ msgstr "" "Tableau. Aufgebaut unabhängig von der Farbe. Sequenzen von Karten in der " "gleichen Farbe können als eine Einheit bewegt werden." +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in the same color " +"can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in any suit but the " +"same can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build down regardless of suit. Sequences of cards in any suit but " +"the same can be moved as a unit." +msgstr "" + #: pysollib/stack.py:2654 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " @@ -1344,6 +1365,26 @@ msgstr "" "Tableau. Erstellt nach unten nach Farbe. Es kann jede aufgedeckte Karte " "unabhängig der Sequenz bewegt werden." +msgid "" +"Tableau. Build up by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build down by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build up by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + +msgid "" +"Tableau. Build down by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + #: pysollib/stack.py:2694 pysollib/stack.py:2697 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " @@ -1368,6 +1409,9 @@ msgstr "Tableau. Aufbau nach oben oder unten im Rang." msgid "Tableau. Build up or down regardless of suit." msgstr "Tableau. Aufbau nach oben oder unten unabhängig von der Farbe." +msgid "Tableau. Build up or down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2874 msgid "Waste." msgstr "Zwischentalon." @@ -1698,6 +1742,9 @@ msgstr "Anzahl der Karten in der Zwischentalon :" msgid "Shuffle during redeal:" msgstr "Mischen während Neudecks:" +msgid "No building" +msgstr "" + #: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184 #: pysollib/wizardutil.py:224 msgid "Same suit" @@ -1728,6 +1775,12 @@ msgstr "Spinne alternative Farbe" msgid "Spider rank" msgstr "Spinne Rang" +msgid "Spider same color" +msgstr "" + +msgid "Spider any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249 #: pysollib/wizardutil.py:252 msgid "Any" @@ -1747,6 +1800,9 @@ msgstr "Hoch" msgid "Down" msgstr "Unten" +msgid "Same rank" +msgstr "" + #: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259 msgid "Direction:" msgstr "Richtung:" @@ -1793,6 +1849,9 @@ msgstr "Oben oder unten nach Rang" msgid "Up or down by same color" msgstr "Oben oder unten nach gleicher Farbe" +msgid "Up or down by any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:238 msgid "Yukon same suit" msgstr "Yukon gleiche Farbe" @@ -1805,6 +1864,12 @@ msgstr "Yukon alternative Farben" msgid "Yukon rank" msgstr "Yukon Rang" +msgid "Yukon same color" +msgstr "" + +msgid "Yukon any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264 msgid "Sequence" msgstr "Sequenz" @@ -1833,6 +1898,9 @@ msgstr "Triangel" msgid "Rectangle" msgstr "Rechteck" +msgid "Pyramid" +msgstr "" + #: pysollib/wizardutil.py:308 msgid "# of face-down cards dealt to the tableau pile:" msgstr "Anzahl verdeckter Karten auf dem Stapel:" diff --git a/po/fr_pysol.po b/po/fr_pysol.po index 7ae2aa3b..62f1bd07 100644 --- a/po/fr_pysol.po +++ b/po/fr_pysol.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: 1.02\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2022-09-26 20:59-0400\n" +"PO-Revision-Date: 2022-12-30 09:31-0500\n" "Last-Translator: Eric Rausch \n" "Language-Team: French\n" "Language: fr\n" @@ -1253,6 +1253,12 @@ msgstr "Fondation. Croissant par couleur." msgid "Foundation. Build down by color." msgstr "Fondation. Décroissant par couleur." +msgid "Foundation. Build up in any suit but the same." +msgstr "" + +msgid "Foundation. Build down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322 msgid "Tableau. No building." msgstr "Tableau. Aucun empilement." @@ -1335,6 +1341,21 @@ msgstr "" "Tableau. Décroissant indépendamment de l'enseigne. Les ensembles de cartes " "d'une même enseigne peuvent être déplacés entièrement." +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in the same color " +"can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in any suit but the " +"same can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build down regardless of suit. Sequences of cards in any suit but " +"the same can be moved as a unit." +msgstr "" + #: pysollib/stack.py:2654 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " @@ -1374,6 +1395,26 @@ msgstr "" "Tableau. Décroissant par enseigne, toutes les cartes ouvertes peuvent être " "déplacées sans former de suite." +msgid "" +"Tableau. Build up by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build down by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build up by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + +msgid "" +"Tableau. Build down by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + #: pysollib/stack.py:2694 pysollib/stack.py:2697 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " @@ -1398,6 +1439,9 @@ msgstr "Tableau. Croissant ou décroissant par enseigne." msgid "Tableau. Build up or down regardless of suit." msgstr "Tableau. Croissant ou décroissant indépendamment de l'enseigne." +msgid "Tableau. Build up or down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2874 msgid "Waste." msgstr "Défausse." @@ -1728,6 +1772,9 @@ msgstr "Nombre de cartes sur la défausse:" msgid "Shuffle during redeal:" msgstr "Mélanger lors de la donne:" +msgid "No building" +msgstr "" + #: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184 #: pysollib/wizardutil.py:224 msgid "Same suit" @@ -1758,6 +1805,12 @@ msgstr "Spider - Couleur alternée" msgid "Spider rank" msgstr "Spider - Valeur" +msgid "Spider same color" +msgstr "" + +msgid "Spider any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249 #: pysollib/wizardutil.py:252 msgid "Any" @@ -1777,6 +1830,9 @@ msgstr "Haut" msgid "Down" msgstr "Bas" +msgid "Same rank" +msgstr "" + #: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259 msgid "Direction:" msgstr "Direction:" @@ -1823,6 +1879,9 @@ msgstr "Croissant ou décroissant par valeur" msgid "Up or down by same color" msgstr "Croissant ou décroissant par couleur" +msgid "Up or down by any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:238 msgid "Yukon same suit" msgstr "Yukon - Enseigne" @@ -1835,6 +1894,12 @@ msgstr "Yukon - Couleur alternée" msgid "Yukon rank" msgstr "Yukon - Valeur" +msgid "Yukon same color" +msgstr "" + +msgid "Yukon any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264 msgid "Sequence" msgstr "Suite de cartes" @@ -1863,6 +1928,9 @@ msgstr "Triangle" msgid "Rectangle" msgstr "Rectangle" +msgid "Pyramid" +msgstr "" + #: pysollib/wizardutil.py:308 msgid "# of face-down cards dealt to the tableau pile:" msgstr "# de cartes retournées au tableau:" diff --git a/po/it_pysol.po b/po/it_pysol.po index 393162d7..ac28be1e 100644 --- a/po/it_pysol.po +++ b/po/it_pysol.po @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: it_pysol\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2022-09-26 21:00-0400\n" +"PO-Revision-Date: 2022-12-30 09:31-0500\n" "Last-Translator: Giuliano Colla \n" "Language-Team: Italiano \n" "Language: it\n" @@ -1261,6 +1261,12 @@ msgstr "Casa. Crescente per colore." msgid "Foundation. Build down by color." msgstr "Casa. Decrescente per colore." +msgid "Foundation. Build up in any suit but the same." +msgstr "" + +msgid "Foundation. Build down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322 msgid "Tableau. No building." msgstr "Tableau. Non accetta carte." @@ -1343,6 +1349,21 @@ msgstr "" "Tableau. Decrescente indipendentemente dal seme. Sequenze di carte dello " "stesso seme si possono spostare in blocco." +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in the same color " +"can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in any suit but the " +"same can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build down regardless of suit. Sequences of cards in any suit but " +"the same can be moved as a unit." +msgstr "" + #: pysollib/stack.py:2654 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " @@ -1382,6 +1403,26 @@ msgstr "" "Tableau. Decrescente per seme, si possono spostare le carte a faccia in su " "indipendentemente dalla sequenza." +msgid "" +"Tableau. Build up by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build down by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build up by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + +msgid "" +"Tableau. Build down by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + #: pysollib/stack.py:2694 pysollib/stack.py:2697 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " @@ -1406,6 +1447,9 @@ msgstr "Tableau. Crescente o decrescente per seme." msgid "Tableau. Build up or down regardless of suit." msgstr "Tableau. Crescente o decrescente indipendentemente dal seme." +msgid "Tableau. Build up or down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2874 msgid "Waste." msgstr "Pozzo." @@ -1736,6 +1780,9 @@ msgstr "Numero di carte nel pozzo:" msgid "Shuffle during redeal:" msgstr "Mescola nella ridistribuzione:" +msgid "No building" +msgstr "" + #: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184 #: pysollib/wizardutil.py:224 msgid "Same suit" @@ -1766,6 +1813,12 @@ msgstr "Spider alternate color" msgid "Spider rank" msgstr "Spider rank" +msgid "Spider same color" +msgstr "" + +msgid "Spider any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249 #: pysollib/wizardutil.py:252 msgid "Any" @@ -1785,6 +1838,9 @@ msgstr "Ascendente" msgid "Down" msgstr "Discendente" +msgid "Same rank" +msgstr "" + #: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259 msgid "Direction:" msgstr "Direzione:" @@ -1831,6 +1887,9 @@ msgstr "Ascendente o discendente per valore" msgid "Up or down by same color" msgstr "Ascendente o discendente stesso colore" +msgid "Up or down by any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:238 msgid "Yukon same suit" msgstr "Yuokon stesso seme" @@ -1843,6 +1902,12 @@ msgstr "Yukon colori alterni" msgid "Yukon rank" msgstr "Yukon per valore" +msgid "Yukon same color" +msgstr "" + +msgid "Yukon any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264 msgid "Sequence" msgstr "Sequenza" @@ -1871,6 +1936,9 @@ msgstr "Triangolo" msgid "Rectangle" msgstr "Rettangolo" +msgid "Pyramid" +msgstr "" + #: pysollib/wizardutil.py:308 msgid "# of face-down cards dealt to the tableau pile:" msgstr "Numero di carte coperte nel tableau:" diff --git a/po/pl_pysol.po b/po/pl_pysol.po index 6b0220e1..da7d4478 100644 --- a/po/pl_pysol.po +++ b/po/pl_pysol.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2022-09-26 21:00-0400\n" +"PO-Revision-Date: 2022-12-30 09:32-0500\n" "Last-Translator: Jerzy Trzeciak \n" "Language-Team: Polish \n" "Language: pl\n" @@ -1257,6 +1257,12 @@ msgstr "Stos bazowy. Układaj w górę wg barwy." msgid "Foundation. Build down by color." msgstr "Stos bazowy. Układaj w dół wg barwy." +msgid "Foundation. Build up in any suit but the same." +msgstr "" + +msgid "Foundation. Build down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322 msgid "Tableau. No building." msgstr "Stół gry. Nie układaj." @@ -1339,6 +1345,21 @@ msgstr "" "Stół gry. Układaj w dół niezależnie od koloru. Sekwens kart tego samego " "koloru można przenieść jako całość." +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in the same color " +"can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in any suit but the " +"same can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build down regardless of suit. Sequences of cards in any suit but " +"the same can be moved as a unit." +msgstr "" + #: pysollib/stack.py:2654 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " @@ -1378,6 +1399,26 @@ msgstr "" "Stół gry. Układaj w dół wg koloru. Można przenosić odkryte karty niezależnie " "od sekwensu." +msgid "" +"Tableau. Build up by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build down by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build up by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + +msgid "" +"Tableau. Build down by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + #: pysollib/stack.py:2694 pysollib/stack.py:2697 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " @@ -1402,6 +1443,9 @@ msgstr "Stół gry. Układaj w górę lub w dół wg koloru." msgid "Tableau. Build up or down regardless of suit." msgstr "Stół gry. Ukladaj w górę lub w dół niezależnie od koloru." +msgid "Tableau. Build up or down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2874 msgid "Waste." msgstr "Zrzut." @@ -1732,6 +1776,9 @@ msgstr "Liczba kart przełożonych do zrzutu:" msgid "Shuffle during redeal:" msgstr "Przetasuj przy ponownym rozdaniu:" +msgid "No building" +msgstr "" + #: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184 #: pysollib/wizardutil.py:224 msgid "Same suit" @@ -1763,6 +1810,12 @@ msgstr "Pająk kolory naprzemiennie" msgid "Spider rank" msgstr "Pająk wartość" +msgid "Spider same color" +msgstr "" + +msgid "Spider any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249 #: pysollib/wizardutil.py:252 msgid "Any" @@ -1782,6 +1835,9 @@ msgstr "W górę" msgid "Down" msgstr "W dół" +msgid "Same rank" +msgstr "" + #: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259 msgid "Direction:" msgstr "Kierunek:" @@ -1828,6 +1884,9 @@ msgstr "W górę lub w dół wg wartości" msgid "Up or down by same color" msgstr "W górę lub w dół ta sama barwa" +msgid "Up or down by any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:238 msgid "Yukon same suit" msgstr "Yukon jeden kolor" @@ -1841,6 +1900,12 @@ msgstr "Yukon barwy naprzemiennie" msgid "Yukon rank" msgstr "Yukon rank" +msgid "Yukon same color" +msgstr "" + +msgid "Yukon any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264 msgid "Sequence" msgstr "Sekwens" @@ -1869,6 +1934,9 @@ msgstr "Trójkąt" msgid "Rectangle" msgstr "Prostokąt" +msgid "Pyramid" +msgstr "" + #: pysollib/wizardutil.py:308 msgid "# of face-down cards dealt to the tableau pile:" msgstr "Liczba kart zakrytych rozłożonych na stół gry:" diff --git a/po/pysol.pot b/po/pysol.pot index f21bf55b..3262407d 100644 --- a/po/pysol.pot +++ b/po/pysol.pot @@ -1167,6 +1167,12 @@ msgstr "" msgid "Foundation. Build down by color." msgstr "" +msgid "Foundation. Build up in any suit but the same." +msgstr "" + +msgid "Foundation. Build down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322 msgid "Tableau. No building." msgstr "" @@ -1241,6 +1247,21 @@ msgid "" "can be moved as a unit." msgstr "" +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in the same color " +"can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in any suit but the same " +"can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build down regardless of suit. Sequences of cards in any suit but the same " +"can be moved as a unit." +msgstr "" + #: pysollib/stack.py:2654 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " @@ -1270,6 +1291,24 @@ msgid "" "sequence." msgstr "" +msgid "" +"Tableau. Build up by color, can move any face-up cards regardless of sequence." +msgstr "" + +msgid "" +"Tableau. Build down by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build up by any suit but the same, can move any face-up cards regardless of sequence." +msgstr "" + +msgid "" +"Tableau. Build down by any suit but the same, can move any face-up cards regardless of " +"sequence." +msgstr "" + #: pysollib/stack.py:2694 pysollib/stack.py:2697 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " @@ -1292,6 +1331,9 @@ msgstr "" msgid "Tableau. Build up or down regardless of suit." msgstr "" +msgid "Tableau. Build up or down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2874 msgid "Waste." msgstr "" @@ -1622,6 +1664,9 @@ msgstr "" msgid "Shuffle during redeal:" msgstr "" +msgid "No building" +msgstr "" + #: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184 #: pysollib/wizardutil.py:224 msgid "Same suit" @@ -1652,6 +1697,12 @@ msgstr "" msgid "Spider rank" msgstr "" +msgid "Spider same color" +msgstr "" + +msgid "Spider any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249 #: pysollib/wizardutil.py:252 msgid "Any" @@ -1671,6 +1722,9 @@ msgstr "" msgid "Down" msgstr "" +msgid "Same rank" +msgstr "" + #: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259 msgid "Direction:" msgstr "" @@ -1717,6 +1771,9 @@ msgstr "" msgid "Up or down by same color" msgstr "" +msgid "Up or down by any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:238 msgid "Yukon same suit" msgstr "" @@ -1729,6 +1786,12 @@ msgstr "" msgid "Yukon rank" msgstr "" +msgid "Yukon same color" +msgstr "" + +msgid "Yukon any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264 msgid "Sequence" msgstr "" @@ -1757,6 +1820,9 @@ msgstr "" msgid "Rectangle" msgstr "" +msgid "Pyramid" +msgstr "" + #: pysollib/wizardutil.py:308 msgid "# of face-down cards dealt to the tableau pile:" msgstr "" diff --git a/po/ru_pysol.po b/po/ru_pysol.po index 321a19e4..033b5861 100644 --- a/po/ru_pysol.po +++ b/po/ru_pysol.po @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-12-10 10:19-0500\n" -"PO-Revision-Date: 2022-09-26 21:00-0400\n" +"PO-Revision-Date: 2022-12-30 09:32-0500\n" "Last-Translator: Skomoroh \n" "Language-Team: Russian \n" "Language: ru\n" @@ -1250,6 +1250,12 @@ msgstr "Базовая ячейка. Складывать по возраста msgid "Foundation. Build down by color." msgstr "Базовая ячейка. Складывать по убыванию в соответствии с цветом." +msgid "Foundation. Build up in any suit but the same." +msgstr "" + +msgid "Foundation. Build down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2459 pysollib/games/golf.py:126 pysollib/games/golf.py:322 msgid "Tableau. No building." msgstr "Игровой стол. Без выкладывания." @@ -1332,6 +1338,21 @@ msgstr "" "Игровой стол. Складывать по убыванию не считаясь с мастью. Можно перемещать " "серии карт одинаковой масти." +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in the same color " +"can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build up regardless of suit. Sequences of cards in any suit but the " +"same can be moved as a unit." +msgstr "" + +msgid "" +"Tableau. Build down regardless of suit. Sequences of cards in any suit but " +"the same can be moved as a unit." +msgstr "" + #: pysollib/stack.py:2654 msgid "" "Tableau. Build up by alternate color, can move any face-up cards regardless " @@ -1371,6 +1392,26 @@ msgstr "" "Игровой стол. Складывать по убыванию в соответствии с мастью, можно " "перемещать любую серию открытых карт." +msgid "" +"Tableau. Build up by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build down by color, can move any face-up cards regardless of " +"sequence." +msgstr "" + +msgid "" +"Tableau. Build up by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + +msgid "" +"Tableau. Build down by any suit but the same, can move any face-up cards " +"regardless of sequence." +msgstr "" + #: pysollib/stack.py:2694 pysollib/stack.py:2697 msgid "" "Tableau. Build up regardless of suit, can move any face-up cards regardless " @@ -1398,6 +1439,9 @@ msgid "Tableau. Build up or down regardless of suit." msgstr "" "Игровой стол. Складывать по возрастанию или убыванию не считаясь с мастью." +msgid "Tableau. Build up or down in any suit but the same." +msgstr "" + #: pysollib/stack.py:2874 msgid "Waste." msgstr "Сброс." @@ -1728,6 +1772,9 @@ msgstr "Кол-во карт сдающихся на сброс:" msgid "Shuffle during redeal:" msgstr "Тасовать при пересдаче:" +msgid "No building" +msgstr "" + #: pysollib/wizardutil.py:176 pysollib/wizardutil.py:184 #: pysollib/wizardutil.py:224 msgid "Same suit" @@ -1758,6 +1805,12 @@ msgstr "Паук чередуя цвет" msgid "Spider rank" msgstr "Паук в соответствии с достоинством" +msgid "Spider same color" +msgstr "" + +msgid "Spider any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:191 pysollib/wizardutil.py:249 #: pysollib/wizardutil.py:252 msgid "Any" @@ -1777,6 +1830,9 @@ msgstr "Вверх" msgid "Down" msgstr "Вниз" +msgid "Same rank" +msgstr "" + #: pysollib/wizardutil.py:200 pysollib/wizardutil.py:259 msgid "Direction:" msgstr "Направление:" @@ -1823,6 +1879,9 @@ msgstr "По возрастанию или убыванию в соответс msgid "Up or down by same color" msgstr "По возрастанию или убыванию в соответствии с цветом" +msgid "Up or down by any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:238 msgid "Yukon same suit" msgstr "Юкон в соответствии с мастью" @@ -1835,6 +1894,12 @@ msgstr "Юкон чередуя цвет" msgid "Yukon rank" msgstr "Юкон в соответствии с достоинством" +msgid "Yukon same color" +msgstr "" + +msgid "Yukon any suit but the same" +msgstr "" + #: pysollib/wizardutil.py:263 pysollib/wizardutil.py:264 msgid "Sequence" msgstr "Последовательность" @@ -1863,6 +1928,9 @@ msgstr "Треугольник" msgid "Rectangle" msgstr "Прямоугольник" +msgid "Pyramid" +msgstr "" + #: pysollib/wizardutil.py:308 msgid "# of face-down cards dealt to the tableau pile:" msgstr "Кол-во закрытых карт сдающихся на ячейку игрового стола:" diff --git a/pysollib/customgame.py b/pysollib/customgame.py index 61d94dd1..cac70789 100644 --- a/pysollib/customgame.py +++ b/pysollib/customgame.py @@ -40,7 +40,11 @@ from pysollib.stack import \ SpiderTalonStack, \ Spider_AC_Foundation, \ Spider_AC_RowStack, \ + Spider_BO_Foundation, \ + Spider_BO_RowStack, \ Spider_RK_Foundation, \ + Spider_SC_Foundation, \ + Spider_SC_RowStack, \ Spider_SS_Foundation, \ Spider_SS_RowStack, \ StackWrapper, \ @@ -50,13 +54,16 @@ from pysollib.stack import \ SuperMoveSC_RowStack, \ SuperMoveSS_RowStack, \ UD_AC_RowStack, \ + UD_BO_RowStack, \ UD_RK_RowStack, \ UD_SC_RowStack, \ UD_SS_RowStack, \ WasteStack, \ WasteTalonStack, \ Yukon_AC_RowStack, \ + Yukon_BO_RowStack, \ Yukon_RK_RowStack, \ + Yukon_SC_RowStack, \ Yukon_SS_RowStack from pysollib.util import ACE, ANY_RANK, ANY_SUIT, \ KING, \ @@ -101,17 +108,23 @@ class CustomGame(Game): # max_move if s['found_type'] not in (Spider_SS_Foundation, Spider_AC_Foundation, - Spider_RK_Foundation,): + Spider_RK_Foundation, + Spider_SC_Foundation, + Spider_BO_Foundation,): kw['max_move'] = s['found_max_move'] # suit if s['found_type'] in (Spider_SS_Foundation, Spider_AC_Foundation, - Spider_RK_Foundation,): + Spider_RK_Foundation, + Spider_SC_Foundation, + Spider_BO_Foundation,): kw['suit'] = ANY_SUIT # fix dir and base_rank for Spider foundations if s['found_type'] in (Spider_SS_Foundation, Spider_AC_Foundation, - Spider_RK_Foundation,): + Spider_RK_Foundation, + Spider_SC_Foundation, + Spider_BO_Foundation,): kw['dir'] = -kw['dir'] if s['found_base_card'] == KING: kw['base_rank'] = ACE @@ -138,7 +151,8 @@ class CustomGame(Game): if s['rows_wrap']: kw['mod'] = 13 if s['rows_type'] in (UD_SS_RowStack, UD_AC_RowStack, - UD_RK_RowStack, UD_SC_RowStack): + UD_RK_RowStack, UD_SC_RowStack, + UD_BO_RowStack): kw['max_move'] = 1 # Super Move if s['rows_super_move'] and kw['max_move'] == 1: @@ -205,7 +219,8 @@ class CustomGame(Game): # shallHighlightMatch for c, f in ( - ((Spider_AC_RowStack, Spider_SS_RowStack), + ((Spider_AC_RowStack, Spider_SS_RowStack, + Spider_SC_RowStack, Spider_BO_RowStack), (self._shallHighlightMatch_RK, self._shallHighlightMatch_RKW)), ((AC_RowStack, UD_AC_RowStack, @@ -220,10 +235,12 @@ class CustomGame(Game): Yukon_RK_RowStack, SuperMoveRK_RowStack), (self._shallHighlightMatch_RK, self._shallHighlightMatch_RKW)), - ((SC_RowStack, UD_SC_RowStack, SuperMoveSC_RowStack), + ((SC_RowStack, UD_SC_RowStack, + Yukon_SC_RowStack, SuperMoveSC_RowStack), (self._shallHighlightMatch_SC, self._shallHighlightMatch_SCW)), - ((BO_RowStack, SuperMoveBO_RowStack), + ((BO_RowStack, UD_BO_RowStack, + Yukon_SC_RowStack, SuperMoveBO_RowStack), (self._shallHighlightMatch_BO, self._shallHighlightMatch_BOW)), ): @@ -236,13 +253,17 @@ class CustomGame(Game): # getQuickPlayScore if s['rows_type'] in (Spider_AC_RowStack, - Spider_SS_RowStack,): + Spider_SS_RowStack, + Spider_BO_RowStack, + Spider_SC_RowStack,): self.getQuickPlayScore = self._getSpiderQuickPlayScore # canDropCards if s['found_type'] in (Spider_SS_Foundation, Spider_AC_Foundation, - Spider_RK_Foundation,): + Spider_RK_Foundation, + Spider_SC_Foundation, + Spider_BO_Foundation,): for stack in self.s.rows: stack.canDropCards = stack.spiderCanDropCards @@ -261,7 +282,9 @@ class CustomGame(Game): # TODO if s['rows_type'] in (Yukon_SS_RowStack, Yukon_AC_RowStack, - Yukon_RK_RowStack): + Yukon_RK_RowStack, + Yukon_SC_RowStack, + Yukon_BO_RowStack,): self.Hint_Class = Yukon_Hint def _shuffleHook(self, cards): @@ -270,7 +293,9 @@ class CustomGame(Game): return cards if s['found_type'] in (Spider_SS_Foundation, Spider_AC_Foundation, - Spider_RK_Foundation,): + Spider_RK_Foundation, + Spider_SC_Foundation, + Spider_BO_Foundation,): return cards base_card = s['found_base_card'] if base_card == ANY_RANK: @@ -334,7 +359,17 @@ class CustomGame(Game): flip, frames, max_cards) face_down -= 1 max_rows -= 1 - + elif s['deal_type'] == 'pyramid': + # pyramid + for i in range(1, len(self.s.rows)): + if max_rows <= 1: + break + flip = (face_down <= 0) + mc = max_cards - len(self.s.rows) + frames, max_cards = deal(self.s.rows[i:min(i+mc, -i)], + flip, frames, max_cards) + face_down -= 1 + max_rows -= 1 else: # rectangle for i in range(max_rows-1): diff --git a/pysollib/games/spider.py b/pysollib/games/spider.py index 59e451c6..258eca41 100644 --- a/pysollib/games/spider.py +++ b/pysollib/games/spider.py @@ -29,7 +29,6 @@ from pysollib.hint import FreeCellSolverWrapper from pysollib.hint import SpiderType_Hint, YukonType_Hint from pysollib.layout import Layout from pysollib.mfxutil import kwdefault -from pysollib.mygettext import _ from pysollib.stack import \ AC_FoundationStack, \ AC_RowStack, \ @@ -46,6 +45,7 @@ from pysollib.stack import \ SS_RowStack, \ Spider_AC_Foundation, \ Spider_AC_RowStack, \ + Spider_SC_RowStack, \ Spider_SS_Foundation, \ Spider_SS_RowStack, \ StackWrapper, \ @@ -1141,20 +1141,8 @@ class ScorpionII(Scorpion): # * Tarantula # ************************************************************************ -class Tarantula_RowStack(Spider_RowStack): - def _isSequence(self, cards): - return isSameColorSequence(cards, self.cap.mod, self.cap.dir) - - def _isAcceptableSequence(self, cards): - return isRankSequence(cards, self.cap.mod, self.cap.dir) - - def getHelp(self): - return _('Tableau. Build down regardless of suit. Sequences of cards ' - 'in the same color can be moved as a unit.') - - class Tarantula(Spider): - RowStack_Class = Tarantula_RowStack + RowStack_Class = Spider_SC_RowStack def getQuickPlayScore(self, ncards, from_stack, to_stack): if to_stack.cards: diff --git a/pysollib/stack.py b/pysollib/stack.py index e2cf842e..344df4ef 100644 --- a/pysollib/stack.py +++ b/pysollib/stack.py @@ -2411,6 +2411,31 @@ class SC_FoundationStack(SS_FoundationStack): return _('Foundation. Build by same rank.') +# A ButOwn_FoundationStack builds up in rank and any suit but the same. +# It is used in only a few games. +class BO_FoundationStack(SS_FoundationStack): + def __init__(self, x, y, game, suit, **cap): + kwdefault(cap, base_suit=suit) + SS_FoundationStack.__init__(self, x, y, game, ANY_SUIT, **cap) + + def acceptsCards(self, from_stack, cards): + if not SS_FoundationStack.acceptsCards(self, from_stack, cards): + return False + if self.cards: + # check the suit + if cards[0].suit == self.cards[-1].suit: + return False + return True + + def getHelp(self): + if self.cap.dir > 0: + return _('Foundation. Build up in any suit but the same.') + elif self.cap.dir < 0: + return _('Foundation. Build down in any suit but the same.') + else: + return _('Foundation. Build by same rank.') + + # Spider-type foundations class Spider_SS_Foundation(AbstractFoundationStack): def __init__(self, x, y, game, suit=ANY_SUIT, **cap): @@ -2433,6 +2458,14 @@ class Spider_AC_Foundation(Spider_SS_Foundation): return isAlternateColorSequence(cards, self.cap.mod, self.cap.dir) +class Spider_SC_Foundation(Spider_SS_Foundation): + def acceptsCards(self, from_stack, cards): + if not AbstractFoundationStack.acceptsCards(self, from_stack, cards): + return False + # now check the cards + return isSameColorSequence(cards, self.cap.mod, self.cap.dir) + + class Spider_RK_Foundation(Spider_SS_Foundation): def acceptsCards(self, from_stack, cards): if not AbstractFoundationStack.acceptsCards(self, from_stack, cards): @@ -2441,6 +2474,13 @@ class Spider_RK_Foundation(Spider_SS_Foundation): return isRankSequence(cards, self.cap.mod, self.cap.dir) +class Spider_BO_Foundation(Spider_SS_Foundation): + def acceptsCards(self, from_stack, cards): + if not AbstractFoundationStack.acceptsCards(self, from_stack, cards): + return False + # now check the cards + return isAnySuitButOwnSequence(cards, self.cap.mod, self.cap.dir) + # ************************************************************************ # * Abstract classes for row stacks. # ************************************************************************ @@ -2657,6 +2697,44 @@ class Spider_SS_RowStack(SS_RowStack): return _('Tableau. Build by same rank.') +# A Spider_SameColor_RowStack builds down by rank and color, +# but accepts sequences that match by rank only. +class Spider_SC_RowStack(SC_RowStack): + def _isAcceptableSequence(self, cards): + return isRankSequence(cards, self.cap.mod, self.cap.dir) + + def getHelp(self): + if self.cap.dir > 0: + return _('Tableau. Build up regardless of suit. ' + 'Sequences of cards in the same color can be moved ' + 'as a unit.') + elif self.cap.dir < 0: + return _('Tableau. Build down regardless of suit. ' + 'Sequences of cards in the same color can be moved ' + 'as a unit.') + else: + return _('Tableau. Build by same rank.') + + +# A Spider_ButOwn_RowStack builds down by rank and any suit but own, +# but accepts sequences that match by rank only. +class Spider_BO_RowStack(BO_RowStack): + def _isAcceptableSequence(self, cards): + return isRankSequence(cards, self.cap.mod, self.cap.dir) + + def getHelp(self): + if self.cap.dir > 0: + return _('Tableau. Build up regardless of suit. ' + 'Sequences of cards in any suit but the same ' + 'can be moved as a unit.') + elif self.cap.dir < 0: + return _('Tableau. Build down regardless of suit. ' + 'Sequences of cards in any suit but the same ' + 'can be moved as a unit.') + else: + return _('Tableau. Build by same rank.') + + # A Yukon_AlternateColor_RowStack builds down by rank and alternate color, # but can move any face-up cards regardless of sequence. class Yukon_AC_RowStack(BasicRowStack): @@ -2712,6 +2790,25 @@ class Yukon_SS_RowStack(Yukon_AC_RowStack): 'face-up cards regardless of sequence.') +# A Yukon_SameColor_RowStack builds down by rank and color, +# but can move any face-up cards regardless of sequence. +class Yukon_SC_RowStack(Yukon_AC_RowStack): + def _isYukonSequence(self, c1, c2): + return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank and + c1.color == c2.color) + + def getHelp(self): + if self.cap.dir > 0: + return _('Tableau. Build up by color, can move any face-up cards ' + 'regardless of sequence.') + elif self.cap.dir < 0: + return _('Tableau. Build down by color, can move any ' + 'face-up cards regardless of sequence.') + else: + return _('Tableau. Build by same rank, can move any ' + 'face-up cards regardless of sequence.') + + # A Yukon_Rank_RowStack builds down by rank # but can move any face-up cards regardless of sequence. class Yukon_RK_RowStack(Yukon_AC_RowStack): @@ -2729,6 +2826,25 @@ class Yukon_RK_RowStack(Yukon_AC_RowStack): return _('Tableau. Build by same rank, can move any ' 'face-up cards regardless of sequence.') + +# A Yukon_ButOwn_RowStack builds down by rank and suit, +# but can move any face-up cards regardless of sequence. +class Yukon_BO_RowStack(Yukon_AC_RowStack): + def _isYukonSequence(self, c1, c2): + return ((c1.rank + self.cap.dir) % self.cap.mod == c2.rank and + c1.suit != c2.suit) + + def getHelp(self): + if self.cap.dir > 0: + return _('Tableau. Build up by any suit but the same, ' + 'can move any face-up cards regardless of sequence.') + elif self.cap.dir < 0: + return _('Tableau. Build down by any suit but the same, ' + 'can move any face-up cards regardless of sequence.') + else: + return _('Tableau. Build by same rank, can move any ' + 'face-up cards regardless of sequence.') + # # King-versions of some of the above stacks: they accepts only Kings or # sequences starting with a King as base_rank cards (i.e. when empty). @@ -2809,6 +2925,20 @@ class UD_RK_RowStack(SequenceRowStack): return _('Tableau. Build up or down regardless of suit.') +# up or down by rank ignoring suit +class UD_BO_RowStack(SequenceRowStack): + def __init__(self, x, y, game, **cap): + kwdefault(cap, max_move=1, max_accept=1) + SequenceRowStack.__init__(self, x, y, game, **cap) + + def _isSequence(self, cards): + return (isAnySuitButOwnSequence(cards, self.cap.mod, 1) or + isAnySuitButOwnSequence(cards, self.cap.mod, -1)) + + def getHelp(self): + return _('Tableau. Build up or down in any suit but the same.') + + # To simplify playing we also consider the number of free rows. # See also the "SuperMove" section in the FreeCell FAQ. class SuperMoveStack_StackMethods: diff --git a/pysollib/wizardutil.py b/pysollib/wizardutil.py index c6c7d6b8..f7c09817 100644 --- a/pysollib/wizardutil.py +++ b/pysollib/wizardutil.py @@ -28,6 +28,8 @@ from pysollib.layout import Layout from pysollib.mygettext import _, n_ from pysollib.stack import AC_FoundationStack, \ AC_RowStack, \ + BasicRowStack, \ + BO_FoundationStack, \ BO_RowStack, \ DealReserveRedealTalonStack, \ DealRowRedealTalonStack, \ @@ -42,16 +44,23 @@ from pysollib.stack import AC_FoundationStack, \ SpiderTalonStack, \ Spider_AC_Foundation, \ Spider_AC_RowStack, \ + Spider_BO_Foundation, \ + Spider_BO_RowStack, \ Spider_RK_Foundation, \ + Spider_SC_Foundation, \ + Spider_SC_RowStack, \ Spider_SS_Foundation, \ Spider_SS_RowStack, \ UD_AC_RowStack, \ + UD_BO_RowStack, \ UD_RK_RowStack, \ UD_SC_RowStack, \ UD_SS_RowStack, \ WasteTalonStack, \ Yukon_AC_RowStack, \ + Yukon_BO_RowStack, \ Yukon_RK_RowStack, \ + Yukon_SC_RowStack, \ Yukon_SS_RowStack from pysollib.util import ACE, ANY_RANK, KING, NO_RANK, UNLIMITED_MOVES from pysollib.wizardpresets import presets @@ -173,13 +182,16 @@ TalonShuffle = WizSetting( widget='check', ) FoundType = WizSetting( - values_map=((n_('Same suit'), SS_FoundationStack), - (n_('Alternate color'), AC_FoundationStack), - (n_('Same color'), SC_FoundationStack), - (n_('Rank'), RK_FoundationStack), - (n_('Spider same suit'), Spider_SS_Foundation), - (n_('Spider alternate color'), Spider_AC_Foundation), - (n_('Spider rank'), Spider_RK_Foundation), + values_map=((n_('Same suit'), SS_FoundationStack), + (n_('Alternate color'), AC_FoundationStack), + (n_('Same color'), SC_FoundationStack), + (n_('Rank'), RK_FoundationStack), + (n_('Any suit but the same'), BO_FoundationStack), + (n_('Spider same suit'), Spider_SS_Foundation), + (n_('Spider alternate color'), Spider_AC_Foundation), + (n_('Spider same color'), Spider_SC_Foundation), + (n_('Spider rank'), Spider_RK_Foundation), + (n_('Spider any suit but the same'), Spider_BO_Foundation), ), default=n_('Same suit'), label=_('Type:'), @@ -221,23 +233,30 @@ RowsNum = WizSetting( var_name='rows_num', ) RowsType = WizSetting( - values_map=((n_('Same suit'), SS_RowStack), - (n_('Alternate color'), AC_RowStack), - (n_('Same color'), SC_RowStack), - (n_('Rank'), RK_RowStack), - (n_('Any suit but the same'), BO_RowStack), + values_map=((n_('No building'), BasicRowStack), - (n_('Up or down by same suit'), UD_SS_RowStack), - (n_('Up or down by alternate color'), UD_AC_RowStack), - (n_('Up or down by rank'), UD_RK_RowStack), - (n_('Up or down by same color'), UD_SC_RowStack), + (n_('Same suit'), SS_RowStack), + (n_('Alternate color'), AC_RowStack), + (n_('Same color'), SC_RowStack), + (n_('Rank'), RK_RowStack), + (n_('Any suit but the same'), BO_RowStack), - (n_('Spider same suit'), Spider_SS_RowStack), - (n_('Spider alternate color'), Spider_AC_RowStack), + (n_('Up or down by same suit'), UD_SS_RowStack), + (n_('Up or down by alternate color'), UD_AC_RowStack), + (n_('Up or down by same color'), UD_SC_RowStack), + (n_('Up or down by rank'), UD_RK_RowStack), + (n_('Up or down by any suit but the same'), UD_BO_RowStack), - (n_('Yukon same suit'), Yukon_SS_RowStack), - (n_('Yukon alternate color'), Yukon_AC_RowStack), - (n_('Yukon rank'), Yukon_RK_RowStack), + (n_('Spider same suit'), Spider_SS_RowStack), + (n_('Spider alternate color'), Spider_AC_RowStack), + (n_('Spider same color'), Spider_SC_RowStack), + (n_('Spider any suit but the same'), Spider_BO_RowStack), + + (n_('Yukon same suit'), Yukon_SS_RowStack), + (n_('Yukon alternate color'), Yukon_AC_RowStack), + (n_('Yukon same color'), Yukon_SC_RowStack), + (n_('Yukon rank'), Yukon_RK_RowStack), + (n_('Yukon any suit but the same'), Yukon_BO_RowStack), ), default=n_('Alternate color'), label=_('Type:'), @@ -254,7 +273,7 @@ RowsBaseCard = WizSetting( var_name='rows_base_card', ) RowsDir = WizSetting( - values_map=((n_('Up'), 1), (n_('Down'), -1)), + values_map=((n_('Up'), 1), (n_('Down'), -1), (n_('Same rank'), 0)), default=n_('Down'), label=_('Direction:'), var_name='rows_dir', @@ -296,6 +315,7 @@ ReservesMaxAccept = WizSetting( DealType = WizSetting( values_map=((n_('Triangle'), 'triangle'), (n_('Rectangle'), 'rectangle'), + (n_('Pyramid'), 'pyramid') ), default=n_('Rectangle'), label=_('Type:'),