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

Compare commits

...

1172 commits

Author SHA1 Message Date
Joe R
bdd3093a2b Compress tile images 2025-03-30 15:42:45 -04:00
Joe R
c4a62baf79 Add Cribbage Patience II game 2025-03-30 14:04:18 -04:00
Joe R
b1370fce08 Add more alternate names 2025-03-25 19:09:39 -04:00
Joe R
7b85049f7c Add Flamboyant game 2025-03-25 17:42:31 -04:00
Joe R
afc74a86f5 Remove extra paragraph tags to improve documentation formatting 2025-03-23 19:41:21 -04:00
Joe R
50e003e256 Add Ace of Penguins to the compatibility list 2025-03-17 19:44:23 -04:00
Joe R
78de569074 Fix for the total text crashing Ninety-One on Android (#436) 2025-03-17 18:04:38 -04:00
Joe R
a79c81109b Fix binding error in Kivy 2025-03-15 20:11:50 -04:00
Joe R
c14be7b73e Add Wizard's Castle game 2025-03-14 22:09:56 -04:00
Joe R
69c1440b2b Improve display details of cardset info window 2025-03-14 19:21:14 -04:00
Joe R
72386af5e6 Configure highlight matching for more games 2025-03-10 22:02:24 -04:00
Joe R
a57f1eae38 Add Noumea game 2025-03-10 19:47:40 -04:00
Shlomi Fish
6f0c6e00e1
Condition "chdir" in script dir being local. (#434)
So "python3 scripts/linux-install.py" as documented in README will work.
2025-03-09 19:44:55 -04:00
Joe R
512d3ea466 Improve new Mahjongg layouts 2025-03-06 23:13:43 -05:00
Joe R
e7e9f0ff87 Configure topmost dialogs to not stay on top when PySol loses focus 2025-03-06 22:38:13 -05:00
Joe R
9773eee2d6 Add Wizard's Storeroom game 2025-03-03 21:28:35 -05:00
Joe R
015e860557 Fix endgame hints for Crossword 2025-03-03 19:37:54 -05:00
Joe R
04b7eacfcb Fix highlight match logic for Nines/Tens/Elevens 2025-03-01 22:24:17 -05:00
Joe R
52e2ffc58f Add two mahjongg layouts 2025-03-01 16:17:53 -05:00
Joe R
81150b4681 Add Relaxed Cruel game 2025-02-26 19:55:01 -05:00
Joe R
f799093e35 Restore unfinished Thirteen game as Pyramid Thirteen, using correct AisleRiot rules 2025-02-23 22:32:22 -05:00
Joe R
12118d12ed Clean up Scorpion type games 2025-02-23 14:18:08 -05:00
Joe R
fd4a4e1378 Fill in missing translated names 2025-02-20 18:59:01 -05:00
Joe R
63a63fdfd3 Add Louis game 2025-02-20 18:47:21 -05:00
Joe R
ff9cc5e98c Add FAQ to the in-app documentation 2025-02-20 17:26:10 -05:00
Joe R
cadf8b2084 Fix some controls being unselectable by tab 2025-02-18 19:16:04 -05:00
Joe R
f4dec3ed16 Add Ides of March game 2025-02-17 21:24:26 -05:00
Joe R
5c8d5c26b4 Cleanup 2025-02-17 20:49:25 -05:00
Joe R
cb0dd1ec2f Add definition of super move to the glossary 2025-02-13 21:09:17 -05:00
Joe R
dc5ab96c80 Add Families game 2025-02-13 20:55:16 -05:00
Joe R
54a978b4e2 Fix flake8 2025-02-11 21:56:10 -05:00
Joe R
5b9f64a7eb Support alternate names for alternate deck games 2025-02-11 21:39:43 -05:00
Joe R
21c2780e8e Tweak menu text for consistency 2025-02-06 21:56:32 -05:00
Joe R
ed2da8cd46 Restore lost Outback Patience game, with the correct rules 2025-02-06 19:59:16 -05:00
Joe R
054c0f0368 Enable log for demo games 2025-01-28 23:32:15 -05:00
Joe R
487d1c52f3 Use Python 3.13 in AppVeyor 2025-01-28 19:38:23 -05:00
Joe R
6852bb40ff Add Little Ishido game 2025-01-24 21:58:56 -05:00
Joe R
6006e0f4c0 Shift children's games to use tag rather than deprecated list 2025-01-24 20:03:08 -05:00
Joe R
68138c7284 Add Colours game 2025-01-23 18:01:20 -05:00
Joe R
96a06108af Fix flake8 2025-01-20 21:06:13 -05:00
Joe R
ac03fa741d Add Microbe game 2025-01-20 20:18:32 -05:00
Joe R
7cac54b714 Add more alternate names 2025-01-20 19:25:16 -05:00
lufebe16
b189c4b3b0 Android/Kivy:
- Metadata update
2025-01-13 16:56:39 +01:00
Joe R
4566cb2fc5 Update MacOS version 2025-01-11 12:25:32 -05:00
Joe R
40929f913e 3.2 release 2025-01-11 12:17:10 -05:00
Joe R
ef69c03a38 Add section to the cardset customization doc for the required files 2025-01-11 12:08:45 -05:00
Joe R
0cdd06ddad Add the ability to sort the log 2025-01-09 18:58:16 -05:00
Joe R
a6827ee7e2 Update game count in intro documentation 2025-01-06 23:02:26 -05:00
Joe R
5d1ed621e3 Allow resizing of log and comments windows 2025-01-06 18:28:00 -05:00
Joe R
4c031b9686 Fix undumping of random states 2025-01-04 12:55:38 -05:00
Joe R
2c69371265 Update copyright year to 2025 2025-01-04 12:08:06 -05:00
Joe R
7940e62285 Add topmost logic to HTML viewer 2024-12-28 21:20:58 -05:00
Joe R
9cd7a2c5fe Add random game option to Android version 2024-12-28 19:14:57 -05:00
Joe R
5005ef6796 Consolidate raiseAll logic into app.py 2024-12-24 23:23:21 -05:00
Joe R
cafdafe047 Add topmost logic to solver dialog 2024-12-24 22:39:45 -05:00
Joe R
911f83d249 Add option to keep dialogs always on top 2024-12-22 17:21:10 -05:00
Joe R
abb9605dd4 Add hint logic to account for multi-waste pile games (like Display or Rosamund's Bower) 2024-12-21 15:44:37 -05:00
Joe R
180d3d57df Fix mismatched game ID when loading games from the command line 2024-12-11 20:45:39 -05:00
Joe R
5d9b462304 Run typo check on game rules 2024-12-11 17:43:18 -05:00
lufebe16
d18c857a76 Android/Kivy:
- metadata update
2024-12-07 11:59:01 +01:00
Joe R
d5d426fe91 Add documentation for deal all cards option to Accordion type game rules 2024-12-01 17:55:22 -05:00
Joe R
2e6cb6ad35 Sharpen and reduce noise on joker images 2024-12-01 13:56:42 -05:00
lufebe16
c9c315818d Kivy/Android:
- Added new menu option to adjust font size in general.
- Fixed a bug with doubleclick moves addressed in #117.
2024-11-29 10:06:41 +01:00
Joe R
4471a8a623 Fix error with game preview 2024-11-28 10:56:09 -05:00
lufebe16
289df06b95 Kivy/Android:
- zoom: card selection improved (bug fix)
2024-11-27 09:35:39 +01:00
Joe R
f844c0eae2 Fix slow dealing issue 2024-11-26 22:59:18 -05:00
Joe R
a5e0c96450 Fix formatting in a few game rules files 2024-11-26 22:04:31 -05:00
Joe R
d36c19b158 Refresh forms to reduce unresponsiveness 2024-11-26 21:32:43 -05:00
Joe R
61eb1f0361 Fix error saving comments to the comments.txt file 2024-11-24 16:04:21 -05:00
Joe R
86d92c2636 Fix inconsistent capitalization on some menu bar items 2024-11-24 15:22:46 -05:00
Joe R
5392190c35 Unset busy when the demo ends 2024-11-21 20:52:23 -05:00
lufebe16
cb2252b74e Android/Kivy:
- metadata update
2024-11-20 09:32:25 +01:00
Joe R
d7d9bb3ea6 Add option to clear filters 2024-11-16 11:40:32 -05:00
Joe R
8cbac328a9 Trim strings in the select all games submenu 2024-11-14 23:36:50 -05:00
Joe R
b6454ce541 Add basic hint to Crossword for stuck checking 2024-11-14 17:58:17 -05:00
lufebe16
0135e386c2 Android/Kivy:
- Event handling: Pass through for empty stacks.
- Menu entry to reset zoom.
2024-11-12 10:47:35 +01:00
lufebe16
70909f6469 Android/Kivy:
- zoom settings persistence
- event mapping
2024-11-11 11:35:47 +01:00
Joe R
673cb847bc Expose drag cursor option 2024-11-10 18:27:57 -05:00
Joe R
91b1ba9be9 Disallow moving cards from the foundation in Arachnida 2024-11-10 12:20:37 -05:00
lufebe16
2bfc6bdd3d Android/Kivy version
- Zoom: bug fixes and refactoring
2024-11-09 13:50:49 +01:00
Joe R
552585f143 Catch error when a cardset image fails to load 2024-11-08 21:26:23 -05:00
lufebe16
880fb11979 Android version
- Added two finger zoom to main widget.
2024-11-07 09:39:16 +01:00
Joe R
934d82b5f4 Some format cleanup of How to Use help file 2024-11-06 21:52:53 -05:00
Joe R
87a33b72b1 Set full picture and find card dialogs to be always on top 2024-11-06 20:50:15 -05:00
lufebe16
b7569e79c2 Android version
- version info updates
- bug fix
2024-10-31 09:34:34 +01:00
Joe R
ba202f67c1 Move fullscreen logic to wm_map method 2024-10-30 18:49:08 -04:00
Joe R
d0ca03a49a Add fullscreen mode 2024-10-29 23:14:23 -04:00
Joe R
f448248741 Add stack help for Four Kingdoms 2024-10-29 20:16:46 -04:00
Joe R
eb3bb5dad8 Remove restriction on random game selection by category (#254) 2024-10-29 17:53:50 -04:00
Joe R
49e48bada4 Remove config validation warning 2024-10-26 09:26:05 -04:00
Joe R
dcfac1032d Document "Use Mouse for Undo/Redo" feature 2024-10-24 23:47:17 -04:00
Sandeepa Dilshan Alagiyawanna
ad39c3aa22
Added Detailed Comments -simplex.py (#408)
* Added comments -clearthedungeon.py

* Added Comments -simplex.py

* Update simplex.py

* Added Detailed Comments -simplex.py

* Update simplex.py according to tests
2024-10-24 20:29:35 -04:00
Sandeepa Dilshan Alagiyawanna
98c9202e34
Added comments -clearthedungeon.py (#407)
* Added comments -clearthedungeon.py

* Added Comments -simplex.py

* Update simplex.py
2024-10-23 19:34:23 -04:00
Surani Naranpanawa
1fad63af73
Added comments to royaleast.py and sanibel.py (#404)
* Added comments to royaleast.py and sanibel.py

* Update royaleast.py

I have removed unnecessary white spaces and edited the longer lines.

* Update sanibel.py

I have removed the white spaces and edited the longer lines.

* Update royaleast.py

* Update sanibel.py

---------

Co-authored-by: Surani02 <surainaranpanawa@gmail.com>
2024-10-22 18:14:00 -04:00
Alexandre Detiste
f360600fcd
finish removing dependency on six (#403)
* finish removing dependency on six

* fix tkinter.FileDialog

* fix filedialog <> FileDialog
2024-10-22 18:11:32 -04:00
Joe R
b3cdb7e4b8 Fix deprecated GitHub action artifact version 2024-10-19 18:03:27 -04:00
Joe R
dab3eea6cb 3.1 release 2024-10-19 17:08:20 -04:00
Joe R
8c58941d23 Add locale folder to the repo as a workaround for the gettext failures 2024-10-19 15:08:51 -04:00
Joe R
3778ab2c1f Fix mismatched log frames 2024-10-18 18:53:30 -04:00
Joe R
56489cb7bc Add random game command line option 2024-10-17 23:44:44 -04:00
Joe R
910f927727 Fix for command line parameters not checking compatible cardsets 2024-10-17 23:28:28 -04:00
Surani Naranpanawa
cc32c0373e
Added comments to the algerian.py (#401)
* Added comments to the algerian.py

* Update algerian.py

I made changes to the code so that it would pass flake8.

* Update algerian.py

I have revised the comments to comply with Flake8 standards.

* Update algerian.py

I have removed the trailing spaces to ensure AppVeyor passes successfully.

---------

Co-authored-by: Surani02 <surainaranpanawa@gmail.com>
2024-10-17 08:59:54 -04:00
Joe R
b77989cbdb Update redeals for Devil's Grip 2024-10-15 23:31:36 -04:00
Joe R
41c17c74f3 Switch the session log to being the default tab on the log window 2024-10-15 18:47:57 -04:00
Joe R
df8d05e0c5 Correct Hanoi formula for minimum number of moves in the docs (#397) 2024-10-13 14:20:46 -04:00
Joe R
66995aedaf Fix inconsistent numbers in Memory rules (#394) 2024-10-07 19:02:29 -04:00
Joe R
fbc0817a1e Fix grammar of more game rules 2024-10-05 11:08:46 -04:00
Joe R
dfd3b063dd Disable autodrop for Samegame (#386) 2024-10-05 10:01:49 -04:00
Joe R
83289d5432 Fix missing HTML tag 2024-09-26 21:57:14 -04:00
Joe R
4478212d20 Add more alternate names 2024-09-23 20:31:00 -04:00
Alexandre Detiste
dd16750d5f
import tkinter directly (#383)
* import tkinter directly

* linter

* linter
2024-09-21 17:10:10 -04:00
Joe R
68d6b64fa2 Document Python 3.7 as the minimum supported version 2024-09-19 22:30:45 -04:00
Joe R
679c9a74c1 Add missing button icons 2024-09-19 22:20:40 -04:00
Joe R
4a3d6e7383 Delete game statistics when deleting a game 2024-09-19 21:41:56 -04:00
Alexandre Detiste
148f189a74
trim usage of six (#382)
This is artisanal manual craftwork :-)

     def mDone(self, button):
         if button == 0:        # "OK" or double click
-            if isinstance(self.tree.selection_key, six.string_types):
-                self.key = str(self.tree.selection_key)
-            else:
-                self.key = self.tree.selection_key
+            self.key = self.tree.selection_key
2024-09-18 20:33:10 -04:00
Joe R
1149d4fd4f Remove mentions of Python 2.7 2024-09-17 23:00:10 -04:00
Joe R
57adebfcdc Add F5 as a shortcut for refreshing the display, to help with testing 2024-09-17 22:49:01 -04:00
Alexandre Detiste
83baa54164
remove "import imp/import importlib hybridation" (#381) 2024-09-17 22:42:51 -04:00
Alexandre Detiste
d7c145ac18
remove usage of old Random2 backport (#379) 2024-09-15 12:06:34 -04:00
Joe R
b74dcde44a Configure AppVeyor to build 2024-09-11 21:06:48 -04:00
Joe R
bd2edf2f19 Add Four Kingdoms game 2024-09-08 09:55:22 -04:00
Joe R
792fbca78a Add option to replay a specific game/deal from the log 2024-09-06 22:45:08 -04:00
Joe R
a0ea7a3870 Update and correct documentation pages 2024-08-21 20:18:57 -04:00
Joe R
166025313b Update search field verbiage for clarity 2024-08-04 21:19:58 -04:00
Joe R
18f8e3e32b Track size of table tiles and add option to search them by size 2024-08-04 20:23:42 -04:00
Joe R
fd230df4f2 Perform minor cleanup of resource.py 2024-07-28 23:35:19 -04:00
Joe R
d15ff23d49 Fix to support equivalent image file extensions 2024-07-28 12:45:24 -04:00
Joe R
23f41d9553 Clean up images and restore missing images 2024-07-22 19:18:10 -04:00
Joe R
77f1125156 Add Eleven Triangle game 2024-07-19 19:40:42 -04:00
Joe R
b26821048c Prevent moving stacks to the foundation in Ace of Hearts 2024-07-19 18:32:46 -04:00
Joe R
3a356670bb Add possible icons for remaining buttons 2024-07-15 19:04:00 -04:00
Joe R
885b2925ab Fix Astrocyte to use correct hints 2024-07-15 18:03:44 -04:00
Joe R
b92debbbfd Add Xerxes and Zingara games 2024-07-13 18:37:24 -04:00
Joe R
13c611949d Make verbiage consistent on select windows 2024-07-13 17:23:03 -04:00
Joe R
447dc4afea Clean up find card images 2024-07-09 19:11:28 -04:00
Joe R
69394fa3b9 Add Ace of Hearts game 2024-07-05 18:14:17 -04:00
Joe R
180f3fa225 Add more alternate names 2024-07-05 17:32:41 -04:00
Joe R
85d455d4f7 Trim trailing space 2024-07-04 17:41:45 -04:00
Joe R
6a32b1f2fa Add King's Way game 2024-07-04 17:06:19 -04:00
Joe R
ea0ce6f6f3 Fix email display in credits page 2024-06-30 10:47:05 -04:00
Joe R
a42b76d263 Enable button icons (as an enableable option) 2024-06-30 10:01:21 -04:00
Joe R
3cbcc8d214 Add Russian Cell game 2024-06-28 22:45:47 -04:00
Joe R
0cace3a07b Add temp fix for new issue with xgettext command in AppVeyor 2024-06-28 22:04:35 -04:00
Joe R
9274e47de6 Remove duplicate/unused images 2024-06-28 20:17:57 -04:00
Joe R
b3c8390fac Add Sevastopol game 2024-06-23 20:22:59 -04:00
Joe R
b62630ab5f Cleanup of table tiles to remove duplicates and consolidate name references. 2024-06-23 15:46:19 -04:00
Joe R
58e2eb89c9 Set new game finished message to clarify if the demo was used. 2024-06-22 12:20:41 -04:00
Joe R
764fb5207e Added Carousel game. 2024-06-15 11:08:22 -04:00
Joe R
ceee32e212 Game rule documentation fixes. 2024-06-15 08:51:16 -04:00
Joe R
b951d86579 Added Nines game. 2024-06-11 20:01:26 -04:00
Joe R
a189d42328 Fixed incompatibility error with string types on older versions of Python. 2024-06-11 17:48:13 -04:00
Shlomi Fish
abd95b8887
Update the cardsets’ package version to 3.0. (#368)
This is the latest release.
2024-06-09 14:30:37 -04:00
Joe R
90ffaeb2d1 Fixed resetting of cardset on cancelling select game. 2024-06-07 19:11:23 -04:00
Joe R
7ef3b1d359 Added search option for compatible cardsets. 2024-05-31 20:32:20 -04:00
Joe R
b64ef10374 Added basic, but workable, hint logic for Ishido type games. 2024-05-22 20:16:20 -04:00
Joe R
66d2eaba5f Moved cardset change fix to cancel button. 2024-05-16 17:34:03 -04:00
Joe R
efdb843179 Copied over some important names to the FC credits page. Checked for dead links. 2024-05-12 22:38:47 -04:00
Joe R
a14eef2b60 Fixed bug where the preview can partially change the main game cardset. 2024-05-12 22:32:17 -04:00
Joe R
69b98c9982 Corrected list item tag. 2024-04-23 18:57:11 -04:00
lufebe16
34292e2743 Kivy/android:
- version 3.0.0 metadata updates
- fixed card flip duration
2024-04-04 19:30:48 +02:00
Joe R
0162c92740 Finalized 3.0 release. 2024-03-31 12:01:38 -04:00
Joe R
c6ad8148b0 3.0 release! 2024-03-31 11:49:28 -04:00
Joe R
eeea22da7f Some minor cleanup/final prep. 2024-03-31 11:43:00 -04:00
Joe R
a7f3741eb3 Cardsets package version 3. 2024-03-31 10:00:52 -04:00
Joe R
aa48e35166 Crediting Remix Icon as well. 2024-03-30 11:27:58 -04:00
Joe R
f28e69b0b0 Updated credits and copyright. 2024-03-30 11:22:04 -04:00
Joe R
e8bc34f6e6 Ishido is a required cardset type. 2024-03-30 07:51:40 -04:00
Joe R
4231e96668 Game categorization updates. 2024-03-28 23:32:56 -04:00
Joe R
9f78391e0d Added Obstruction game. 2024-03-28 20:31:27 -04:00
Martin
71e06d4f98
Optimize images to save 2.7MB (#363)
* Optimize PNGs with oxipng

* Optimize GIFs with gifsicle

* Optimize SVGs with svgo

* Optimize JPEGs with jpegoptim

---------

Co-authored-by: Joe R <joeraz5@verizon.net>
2024-03-27 23:15:37 -04:00
lufebe16
a392ef4054 Kivy/Android:
- metadata update
2024-03-27 11:30:16 +01:00
lufebe16
8a8b00baab Kivy/Android
- documentation
2024-03-27 09:28:22 +01:00
Joe R
be31314271 Added Trumps Row game. 2024-03-26 22:30:30 -04:00
lufebe16
468feeb4e1 Android/Kivy:
- metadata updates
- some cleanup
2024-03-23 10:53:26 +01:00
Joe R
d9d02d47ca Added category to the tree for games with jokers. 2024-03-21 18:28:01 -04:00
Joe R
526abc03ba Added Double Uintah game. 2024-03-21 17:37:25 -04:00
Joe R
c1421fc92f Some cleanup of Tarock game file. 2024-03-19 21:44:29 -04:00
Joe R
6375d53902 Corrected Aces Up rules. 2024-03-19 21:40:15 -04:00
Joe R
96a071fca0 Added Fool's Up game. 2024-03-19 21:37:33 -04:00
lufebe16
de50c45145 fixes: language (de) and cardset option (android version). 2024-03-18 13:15:29 +01:00
Joe R
96700c59e1 Cleanup of Mahjongg. Fixed the old layout import scripts. 2024-03-16 20:38:47 -04:00
Joe R
713f498068 Added Ninety-One game. 2024-03-16 14:52:10 -04:00
Joe R
d3a4548f69 Option to filter by game subcategory/cardset subtype. 2024-03-15 23:07:33 -04:00
Joe R
a6df89489a Fixed bug where deprecated game categories appear in Android version. 2024-03-15 20:32:29 -04:00
Joe R
572103b2c4 Klondike with jokers. 2024-03-15 19:35:03 -04:00
Joe R
b31ea75798 Added Cribbage Patience game. 2024-03-13 19:16:43 -04:00
lufebe16
77fd05e65a Android Version 2.24 2024-03-12 18:15:06 +01:00
Joe R
2dfca42824 Added Wildcards game. 2024-03-06 22:06:57 -05:00
Joe R
6c79c25195 Added additional clarification on suit order to Hanafuda documentation. 2024-03-06 21:42:03 -05:00
Joe R
1339a22ba4 Added Petal game. 2024-03-05 19:10:08 -05:00
Joe R
fc259817aa Alternate names. 2024-03-05 18:18:36 -05:00
lufebe16
1753f63034 android build scripts:
- bug fix
- refactoring
2024-03-05 13:22:14 +01:00
Joe R
28808ecc70 Added Big Alhambra game. 2024-03-03 14:15:59 -05:00
Joe R
32d735defc Update to all games script. 2024-03-03 12:53:56 -05:00
Joe R
351abaf907 Added Samegame game. 2024-03-03 11:38:13 -05:00
Joe R
3e70bdf149 A couple more variants for the Other Graphics options. 2024-02-29 23:12:31 -05:00
lufebe16
864e1a6fee fdroid.init updated 2024-02-26 16:45:52 +01:00
Joe R
44cf52f0a3 Added Morphy game. 2024-02-22 22:00:55 -05:00
Joe R
6f7c243664 Updated a couple games to use their more common name as the primary name. 2024-02-22 21:43:35 -05:00
Joe R
fe5013bdea Enhancements to Eighteens game. 2024-02-20 22:41:23 -05:00
Joe R
be12039d0f Loading the cardset to the cache at the start, to prevent errors when the preview switches cardset type. 2024-02-18 16:11:26 -05:00
Joe R
3547c5ad0a Alignment of Interlock type game foundations. 2024-02-18 13:00:47 -05:00
Joe R
4eebd5d33c Flake8 fix. 2024-02-15 22:59:52 -05:00
Joe R
9559173797 Fixed missing index in Love a Duck. 2024-02-15 22:34:51 -05:00
lufebe16
cba1fd815f - cardset prepare option changes (android build)
- action against occasional black screen on android resume
- startup phase cosmetics
2024-02-14 09:57:24 +01:00
Joe R
b42a43fb0f Added Eighteens game. 2024-02-11 21:19:05 -05:00
Joe R
65b013e7c8 Removed trailing space. 2024-02-11 11:23:48 -05:00
Joe R
9e90157d3e Added recent and favorite games filters to advanced search. 2024-02-11 11:10:18 -05:00
Joe R
af2f730816 Removed limit on number of pause/demo text images loaded per style. 2024-02-06 23:38:13 -05:00
Joe R
a94d0235b8 Added Vincent game. 2024-02-06 21:48:10 -05:00
lufebe16
4f2f17b166 Kivy/Android
- project metadata updates
2024-02-03 17:39:27 +01:00
Joe R
c36e2c68df Fixed flake8 in scripts. 2024-01-31 20:55:49 -05:00
Joe R
6d1b81d57b Take away is a golf type game, and other organization fixes. 2024-01-31 20:33:39 -05:00
Joe R
5b6496432c Added Appreciate game. 2024-01-31 20:19:10 -05:00
Joe R
2a1651cbc0 Fixed error in HTML generation. 2024-01-27 20:12:42 -05:00
Joe R
c50cfdd566 Fixed import order. 2024-01-26 22:31:57 -05:00
Joe R
fa63e28f0b Consolidated special games. 2024-01-26 21:51:13 -05:00
lufebe16
20533ac05e Kivy/Android
- some refactorings an clean ups
2024-01-23 15:39:24 +01:00
Joe R
ea7fe7c2e8 Separate directory for import/export boards, to avoid confusion with saved games. 2024-01-20 12:10:11 -05:00
Joe R
dc985d5882 Added Club game. 2024-01-20 11:29:49 -05:00
Joe R
c11f57ce11 Hint logic for Tile Puzzle. 2024-01-18 23:42:57 -05:00
Joe R
d7ec6a559a Working import for black hole solver games. 2024-01-18 22:17:19 -05:00
lufebe16
b4998aa341 Kivy/Android
- animation handling for special games
2024-01-16 09:31:33 +01:00
Joe R
5ba38d0688 Minor cleanup. 2024-01-15 23:15:50 -05:00
Joe R
5c4304ba44 Option to clear the recent games list. 2024-01-15 22:17:09 -05:00
lufebe16
d3067f2397 EightCards:
- index error on click to empty talon fixed.
- move pair when second click goes to reserve stack too.
2024-01-11 16:18:19 +01:00
lufebe16
7dd72522c4 Kivy/Android
- toolbar pos tied to device orientation
- added additional options for it
- refactoring
2024-01-11 10:34:41 +01:00
Joe R
caa85016b1 Added Sarlacc game. 2024-01-09 18:49:58 -05:00
lufebe16
97e90f147c Kivy/Android
- upstart sequence and fullscreen handling fixes
2024-01-08 14:54:12 +01:00
lufebe16
87fe16413e Kivy/Android
- refactoring
2024-01-08 14:54:12 +01:00
Joe R
a35f0ad2f5 Fixed error in Rosamund's Bower auto-deal logic. 2024-01-06 23:07:54 -05:00
Joe R
725ee0dcaa Added hexagonal pegged layout. 2024-01-06 21:55:47 -05:00
lufebe16
f6b5672cf6 Kivy/Android
- Demo now waits for animation end before next step.
- Demo command closes menu after selection.
- Hint arrow is kept on top during demo
- Hint arrow fading animation.
2024-01-04 14:23:43 +01:00
Joe R
e1b74be079 Fix for invalid sequence move in Blue Jacket. 2024-01-03 20:34:55 -05:00
Joe R
f466df1644 Added Blue Jacket game. 2024-01-03 20:33:48 -05:00
Joe R
d0a2b97a9e Added Rosamund's Bower game. 2024-01-03 19:30:57 -05:00
lufebe16
23657469c4 Kivy/Android
- added navigation buttons to html display
- fixed line formatting in html displays
- title line formatting as centered and multiline if needed
- html text rendering revised to circumvent hardware limits
- screen rotation lock changes
- balkenbreite
2024-01-03 09:50:02 +01:00
Joe R
301d461875 Added Quadruple Yukon variant. 2023-12-30 12:30:01 -05:00
Joe R
c835bc09aa Moved card size options to a new tab, for better experience on smaller monitors. 2023-12-30 09:40:48 -05:00
lufebe16
0ec7bc1cf8 flake8 2023-12-28 14:18:51 +01:00
lufebe16
49d4445c6b display of license text fixed in android 2023-12-28 12:20:06 +01:00
Joe R
20e0de112f New alternate names. 2023-12-26 11:44:03 -05:00
Joe R
499439bc13 Added Binary Star game. 2023-12-26 10:43:31 -05:00
Joe R
5852bad127 Disable favorite games menu when there are no favorites. 2023-12-26 09:26:36 -05:00
lufebe16
2017b4f23b Kivy/Android
- size of menu unified to 0.333 for landscape and 0.5 for portrait mode

- added code to hopefully prevent black screen on resume
- removed old outdated workarounds
2023-12-23 11:08:23 +01:00
lufebe16
2c48745781 Kivy/Android
- refactoring
2023-12-20 17:03:13 +01:00
Joe R
a961bca6ff Added Thirty-Nine Steps game. 2023-12-19 22:06:41 -05:00
Joe R
f190b3d30e Sorting of favorite games. 2023-12-19 21:59:58 -05:00
Joe R
dda8348806 Added Interlock and Love a Duck games. 2023-12-17 21:34:10 -05:00
lufebe16
7bc56fc101 Kivy/Android
- soft card flip
2023-12-13 18:23:58 +01:00
lufebe16
c5b22563a8 Kivy/Android
- switching of redeal images (redeal/stopped) corrected.
 - new wrapper class for options management. Refactorings.
 - redeal, pause and demo logo style selections updated.
2023-12-12 10:49:50 +01:00
Joe R
611bd37024 Added The Lucky Number game. 2023-12-10 15:53:41 -05:00
lufebe16
917e7a1311 Kivy/Android
- visual update of favorites list corrected
2023-12-10 11:18:38 +01:00
lufebe16
b49f82ad02 Kivy/Android
- card selection menu grouped by cardset type
2023-12-06 19:21:57 +01:00
lufebe16
9816c15d94 Kivy/Android
- updated mkcards
2023-12-06 11:08:57 +01:00
lufebe16
c9194ea419 Kivy/Android
- Introduced tree view generators in menubar.py
- applied to the option menu.
2023-12-06 10:05:04 +01:00
Joe R
1df1f6a80c Added four additional cardset styles. 2023-12-05 21:26:48 -05:00
Joe R
c2bc849fc1 Added Yukon Kings game. 2023-12-05 20:28:24 -05:00
lufebe16
2f87a554be Kivy/Android
- refactorings (menubar)
2023-12-04 15:24:42 +01:00
lufebe16
a36cb9ce12 Kivy/Android
- Refactoring of app start.
2023-12-04 14:30:35 +01:00
lufebe16
fa0d0cf144 Kivy/Android
- Text color adaptation to current background settings.
2023-12-04 14:30:35 +01:00
Sérgio Basto
0afc62478e
pycotap is not need to run PySolFC (#353)
pycotap is only needed for the single unittest, tap_unittests.py
2023-12-03 10:04:54 -05:00
Joe R
10af041972 Scoring option for Ishido. 2023-12-02 17:56:17 -05:00
Joe R
9db799f330 Ishido initial deals should include every color/symbol. 2023-12-02 16:42:04 -05:00
Joe R
3e5631dbb4 Corrected erroneous max cards logic in Fourteens game. 2023-12-01 22:33:34 -05:00
Joe R
50e7d65e31 Added Juvenile game. 2023-12-01 18:39:17 -05:00
lufebe16
224d21a2d2 Kivy/Android
- refactoring, hardening, flake8
2023-11-30 11:42:02 +01:00
Joe R
10c6b5c61d Open Proils is an open game. 2023-11-29 18:42:22 -05:00
Joe R
a99bacbb83 Added Valentine game. 2023-11-29 18:20:07 -05:00
lufebe16
288bd920af Kivy/Android
- reworked positioning during animations
2023-11-29 14:04:43 +01:00
lufebe16
ce0e6ff856 Kivy/Android
- solved some speed issues
- cleanups
2023-11-28 17:50:48 +01:00
lufebe16
2520934d35 Kivy
- Added notifications for save and load commands
- some fixes
2023-11-28 11:45:27 +01:00
lufebe16
492acd6961 Kivy/Android Version
- MfxCanvas implemented with new base class LImage
- MfxCanvas background updates adapted
- Screen rotation lock change: locks on card selection, i.e.
  when the user plays, unlocks on menu selection or pause.
- animations callback implemented in MfxCanvasGroup (mainly for
  mahjongg games) in order to have correct placments with undo
  when animation is enabled
- animation scheduling implemented on a tasking basis. New
  module LTaskQ added.
- refactorings and clean ups
2023-11-26 20:21:44 +01:00
Joe R
069c8e8a7b Fixed bug with the preview using the wrong cardset after loading one with a subtype. 2023-11-26 12:02:40 -05:00
Joe R
b05c922d3b Added missing game types to all games script. 2023-11-26 11:35:51 -05:00
Joe R
634937b076 Added Cascade game. 2023-11-24 13:57:49 -05:00
Joe R
78ca717778 Enhancements to other graphics menu. 2023-11-24 12:24:32 -05:00
lufebe16
c3ffbff146 Kivy Version
- refactorings & some clean up
2023-11-23 17:49:38 +01:00
Joe R
9609f5e133 Corrected a few typos and formatting issues in the rules. 2023-11-23 11:21:54 -05:00
Joe R
9fb0e33cb6 Added Devil's Grip game. 2023-11-20 20:21:06 -05:00
Joe R
7d1a70564e Split picture gallery type games into their own category. 2023-11-20 20:14:37 -05:00
lufebe16
2811ac4ba8 Android build
- updated to p4a v2023.09.16 (kivy 2.2.1, python 3.10)
2023-11-19 22:10:59 +01:00
lufebe16
b91e69964e Kivy Version:
- reimplemented LImage class (image placement) as a workaround to
  the stock image class (which has got some performance issues in
  never kivy versions).
- prevented pretyping during animations
- clean ups
2023-11-19 17:52:21 +01:00
Joe R
d613fd8b4b Updated restart icon. 2023-11-19 10:49:09 -05:00
Joe R
aaed778cd6 Added The Bogey game. 2023-11-19 10:06:10 -05:00
Joe R
6edb6f7222 Added lexterror's basket weave background. 2023-11-16 20:16:49 -05:00
Joe R
477fc8202c Added Klondike Territory game. 2023-11-16 19:11:56 -05:00
lufebe16
9a4df67df3 Kivy Version
- adjusted animation time settings
- some clean ups
2023-11-15 11:33:02 +01:00
Joe R
953c3fc9cb Added Komika style pause and demo text. 2023-11-14 20:42:58 -05:00
Joe R
9d3bae687d Added Eight Cards game. 2023-11-14 19:33:39 -05:00
Joe R
c8ea09c319 Added options to change/select other graphics. 2023-11-11 18:32:59 -05:00
Joe R
3483bd16a8 Restored lost Mahjongg layouts (see issue #301). 2023-11-11 12:27:33 -05:00
Joe R
19639b5727 Expanded popular games list. 2023-11-10 22:22:34 -05:00
Joe R
254f445388 Update the menu's game ID after changing the game, in case the user cancels. 2023-11-10 20:37:53 -05:00
lufebe16
5c51f927eb Kivy Version card placement revised, fixes:
- Mahjongg tile overlapping (3d simulation) implemented
- Animation is now synchronised (so as the tk version does)-
  This prevents some stacking order corruptions reported
  earlier.
2023-11-09 16:08:57 +01:00
Joe R
48f8a70989 Three and four deck Picture Gallery variants. 2023-11-05 14:56:22 -05:00
Joe R
c4a18d3557 Added Ishido game. 2023-11-05 13:12:02 -05:00
lufebe16
e01d0fe7a7 Android version.
- added code to resize 4k images in apk build.
- added code to resize '4k' cardsets in apk build.
- deleted obsolet directory android as anounced earlier.
2023-11-05 09:58:19 +01:00
lufebe16
92f1870b23 Kivy:
- Background image placement reworked.
2023-11-01 14:55:37 +01:00
Joe R
7e43859ad6 Separated table tiles into 4K and normal resolution. 2023-10-29 11:20:09 -04:00
lufebe16
c867b2b6d5 Android
- Build procedure adapted to load cardsets from PySolFC-Cardsets.
  (hopefully a temporary change)
2023-10-19 18:39:59 +02:00
lufebe16
b966794a9a Android
- filtering gif
- metadata updates
2023-10-19 16:39:35 +02:00
Joe R
7741fa7dcc Do not show "Uncategorized" cardsets list if all cardsets have been categorized. 2023-10-14 15:14:09 -04:00
Joe R
05fc7a8baa Added Alexander the Great game. 2023-10-14 12:58:48 -04:00
lufebe16
901a04bbb4 Kivy/Android:
- reworked screen rotation lock
- refactorings
2023-10-14 14:24:11 +02:00
Ciarán
0b0f8f6e72
Logo tweaks (#341)
* Commit SVG forms of both vertical and hoz logo

* Optimise SVGs through SVGO

* Make svg version of logo_vertical

* Run logo_vertical through SVGMO

* Switch to Open Sans version of A

* Hires exports

* Generate low res versions
2023-10-13 19:12:15 -04:00
Shlomi Fish
14184fea95 add some long-term tasks 2023-10-12 13:02:25 +03:00
Shlomi Fish
6896284776 add some long-term tasks 2023-10-12 12:13:26 +03:00
Joe R
5161a82b66 Added glossary entries for different deck types. 2023-10-09 20:23:16 -04:00
Joe R
be1929a33e Redeal stack for Archway (discussed in issue #332). 2023-10-09 19:24:52 -04:00
Joe R
622c8a455c Some minor HTML fixes/updates. 2023-10-02 20:55:37 -04:00
Joe R
e858b38de1 Added Yukon Cells game. 2023-10-02 17:24:51 -04:00
lufebe16
c027e6ca0e Kivy/Android:
- Added full picture hint to menu.
2023-09-30 17:08:07 +02:00
lufebe16
96699c8fa2 Kivy/Android version:
- toolbar posions top and bottom implemented
- localisation (de) updates
2023-09-28 18:00:14 +02:00
Joe R
529e8c006f Flake8 tweaks. 2023-09-27 20:26:52 -04:00
Joe R
a28aaeeb4f Added show full picture option for puzzle type games. 2023-09-27 20:04:12 -04:00
lufebe16
0112e831ff removed a redundancy from buildozer.init 2023-09-27 09:35:29 +02:00
Joe R
55d5111fb4 Added Ricochet game. 2023-09-24 20:11:24 -04:00
Joe R
7dd94e551c Added Crispy game. 2023-09-24 19:34:58 -04:00
lufebe16
969536551e kivy version
- toast emulation updated
- toolbar new and restart button behaviour reworked
2023-09-23 12:18:53 +02:00
Joe R
c85cdf608b Added Portugal to the list of cardset nationalities. 2023-09-22 21:56:53 -04:00
Joe R
b455e386f1 Added quad deck game variants. 2023-09-22 19:04:06 -04:00
lufebe16
ae9aa78cde more rework on toolbar and menu options
- toolbar button configurations added to option menu
 - refactoring
 - metadata (fastlane) updated
2023-09-21 12:18:55 +02:00
lufebe16
158c3137fd toolbar updates (#333)
- quit button removed, makes no sense with kivy/android version
- shuffle/autodrop button managed dynamically
- delayed execution on new and restart buttons, to prevent
  accicental activation while playing
2023-09-19 15:03:31 +02:00
Joe R
187bae25cb Added Dnieper game. 2023-09-17 22:32:09 -04:00
Joe R
3649bbb661 Added check to ensure that all necessary cardset types are available. 2023-09-17 20:01:01 -04:00
lufebe16
e7a1979477 android version:
- screen rotation lock added as proposed by issue #320
- triggered (maybe experimental) by a long tap (5 seconds) to the play ground.
2023-09-16 15:27:58 +02:00
Joe R
27e11a6a4f Added Seven Up game. 2023-09-14 19:14:15 -04:00
Joe R
40bd9f0093 Corrected missed logic in the Kivy menubar. 2023-09-14 18:25:12 -04:00
lufebe16
e5f675d132 updated kivy version to 2.2.1 (for python11) in buildozer/pipreq.txt
removed test.py from buildozer dir (shoudnt ever be).
2023-09-14 20:43:19 +02:00
Joe R
c4e87a1294 Added Astrocyte game. 2023-09-12 18:22:39 -04:00
Joe R
f947fe084f Made sure numbers in game names are correctly hyphenated. 2023-09-08 22:55:14 -04:00
Joe R
49fa530d65 Updated XM Solitaire compatibility list based on current standards. 2023-09-08 19:26:20 -04:00
Joe R
efcfba4922 Russian Patience fits with the Klondike type. 2023-09-05 20:38:23 -04:00
Joe R
8a1940b3d3 Added Tens game. 2023-09-05 18:32:34 -04:00
Joe R
df95421d91 Set up cardsets advanced search to only show options that are registered. 2023-09-05 17:26:40 -04:00
Joe R
b30334410b Moved startup splash screen option to the spash screen itself, so it's easier to know how to disable it. 2023-09-03 19:27:06 -04:00
Joe R
f10379af00 Added Relaxed Clock game. 2023-09-03 09:55:26 -04:00
Joe R
8c6310c0b1 Formic is more of a golf-type game, more commonly known as Ants. 2023-09-01 22:23:37 -04:00
Joe R
bafede48f8 Bottom images for jokers. 2023-09-01 18:47:20 -04:00
Joe R
fc84e712b3 Added Canberra game. 2023-08-30 21:24:50 -04:00
Joe R
96351ef518 More alternate names. 2023-08-29 19:52:45 -04:00
Joe R
3e132dcb94 Added Nine Across game. 2023-08-29 17:24:28 -04:00
Joe R
4674831507 Disabled (useless) hint in Matrix. 2023-08-27 12:55:28 -04:00
Joe R
3ef949d461 Added support for Picture Puzzle games, based on a concept from UltraSol. 2023-08-27 12:20:04 -04:00
Joe R
f9024e563a Refactoring of Hypotenuse and related games to remove unused parameters. 2023-08-25 20:38:11 -04:00
Joe R
d6b6eb6b98 Added Deuces and Queens game. 2023-08-23 19:16:54 -04:00
Joe R
d00762b352 Grand Duchess is in the Numerica game family. 2023-08-23 18:28:51 -04:00
Joe R
d93ad0dbfe Refactoring/cleanup of Aces and Kings game file. 2023-08-23 17:40:57 -04:00
Joe R
29f737c633 Added Napoleon's Shoulder game. 2023-08-20 21:32:26 -04:00
Joe R
7499599ba3 Fix for cardset viewer to support Matching cardsets. 2023-08-20 15:36:14 -04:00
Joe R
54178a10e5 Added Clear the Dungeon game. 2023-08-20 12:24:46 -04:00
Joe R
1e9151eedb Fixed some documentation typos. 2023-08-16 23:15:19 -04:00
Joe R
867029e24b Option to play Four Rivers without gravity. 2023-08-16 18:42:02 -04:00
Joe R
be47aee6be Updated display text for French cardsets to account for the possibility of jokers. 2023-08-14 19:59:08 -04:00
Joe R
a01090df65 Added Open Proils game. 2023-08-14 18:56:19 -04:00
Joe R
8fc0f28b2f Fixed play next song action. 2023-08-12 20:27:07 -04:00
Joe R
a8c34cd380 Added Stewart game. 2023-08-12 20:08:29 -04:00
Joe R
f0fb0500dd Updated copyright notice on formatter.py (see issue #331). 2023-08-12 19:47:02 -04:00
Joe R
fb25046868 Spacing updates for flake8. 2023-08-11 20:56:29 -04:00
Joe R
13a29b34ea
Version 7 of the cardset format with subtype and joker support. (#330) 2023-08-11 20:30:29 -04:00
Joe R
9237c30df4 2.21.0 release 2023-07-10 21:06:02 -04:00
Joe R
595f681bd0 Updated game translation files. 2023-07-08 22:05:40 -04:00
Joe R
c3e5ddc17b Updates to release scripts. 2023-07-08 17:58:16 -04:00
Shlomi Fish
829a5bdfcc
Fix tidyall tests. (#325)
See:

https://metacpan.org/release/Code-TidyAll .
2023-07-05 20:40:21 -04:00
Joe R
75a3000ca1 New logic for getting resampling method, for compatibility with newer Pillow versions. 2023-07-02 11:07:24 -04:00
Joe R
d2358c4e18 Tracking the last PySol version in the config. 2023-07-02 09:54:35 -04:00
Joe R
8098843e1e Fixed spacing issue. 2023-06-29 22:57:22 -04:00
Joe R
7808c546e8 Added option to search games by games played/won/lost. 2023-06-29 22:37:30 -04:00
Joe R
a23a3deee2 More alt names. 2023-06-29 18:02:12 -04:00
Joe R
fbe29ce447 A few game rule documentation fixes. 2023-06-27 22:13:25 -04:00
Joe R
3dc2540d51 Added Gartoon icon set. 2023-06-21 22:01:03 -04:00
Joe R
162b1eb2bf Updated GitHub action to use MacOS 12. 2023-06-13 23:38:10 -04:00
Joe R
1269e6164d Reset Mac OS to Python 3.9. 2023-06-13 19:22:24 -04:00
Joe R
b7edf01752 Added Four Rivers game. 2023-06-08 17:55:04 -04:00
Joe R
14ffba2a84 Cleared out old icon files. 2023-06-06 18:29:43 -04:00
Joe R
4b8420163d Clarified copyright on table tile images. 2023-06-06 18:25:40 -04:00
Joe R
4ece8b6849 Further table tile image compression. Removed a couple images due to a potential license conflict. 2023-06-03 19:42:02 -04:00
Joe R
9d7df9f3a9 Disabled (useless) hints in Hanoi-type games. Fixes stuck-checking. 2023-06-03 09:46:26 -04:00
Joe R
1d1378ed26 Ran image compression on table tiles. 2023-06-03 09:31:38 -04:00
Arthusppp
2062d0c5df
Fix for the "Please enter your name" translation (#317)
* Fix for translation "Please enter your name"

Fix for translation "Please enter your name"

* Remove unnecessary text from the pl_pysol.po file

Remove unnecessary text from the pl_pysol.po file
2023-06-01 21:39:34 -04:00
Joe R
d2e83ae8fd Disabled flip animations in preview. 2023-05-30 21:01:31 -04:00
Joe R
2988f1b2f8 Cleanup of localization file generation logic. 2023-05-30 18:13:01 -04:00
Arthusppp
ed7bb31f07
PySolFC does translate all texts in the Game Finished window (#315)
* PySolFC does translate the Game Finished window

* Fix E501 line too long
2023-05-29 22:48:57 -04:00
Arthusppp
ddddf08400
Update Polish translation (#314)
to była perfekcyjna gra!
2023-05-28 22:47:49 -04:00
Joe R
633974782f More alternate names. 2023-05-25 20:45:38 -04:00
Joe R
4dcf1f2da6 Added Housefly game. 2023-05-25 17:33:13 -04:00
Joe R
3a37c1157d Added face-down flip assist option. 2023-05-18 18:54:37 -04:00
Joe R
47c51f454c Noted original German name for German Clock. 2023-05-16 20:24:21 -04:00
Joe R
31ada5672e Corrections to documentation - added missing links. 2023-05-16 17:54:20 -04:00
Joe R
8b0b20568d Copied extended solid color choice list to Kivy. 2023-05-13 19:39:33 -04:00
Joe R
d0c000f797 Added Magic Montana game. 2023-05-13 18:10:50 -04:00
Joe R
de3e8cc3f8 Expanded the solid color list in the table tile selection window. 2023-05-12 21:48:55 -04:00
Joe R
e55deecd99 Added more alternate names. 2023-05-09 21:08:09 -04:00
Joe R
ac06c9157d Added Aces Square game. 2023-05-09 20:44:39 -04:00
Joe R
71638129e5 Corrected code styling in test.py to fix flake8 validation and CI builds. 2023-05-04 20:28:48 -04:00
Joe R
d7102003f1 Exposed enable/disable flip animation option. 2023-05-04 20:15:48 -04:00
Joe R
d98278b373 Added new tarock deck variations of Klondike and Yukon. 2023-05-01 18:50:45 -04:00
Joe R
4a6514c5c5 Ran image compression on 4K table tiles. 2023-05-01 17:21:55 -04:00
Alexey Radkov
5adaa7747d Restore mistakenly removed shebang
(cherry picked from commit 8c9a3aebec)
2023-04-29 11:30:06 -04:00
Alexey Radkov
5402486d1c Well: show the height of stacks of the rows
Without this hint, tracking the height of the rows stacks gets very hard and
uncomfortable. Note that this information doesn't expose any undesirable
secrets because the player knows the base card of each row right after the
dealing the cards. This change will let the player track all the 4 rows base
cards easily during the game.

(cherry picked from commit a04f60833c)
2023-04-29 11:29:51 -04:00
lufebe16
eaae284140 android version.
- moved additional summaries from fdroid to fastlane.
2023-04-29 10:50:54 +02:00
lufebe16
4779ca43ee android version
- pubspec.json added
2023-04-28 20:02:50 +02:00
Joe R
df4b97ba2b Fixed error in Beehive demo and other enhancements to the Beehive game. 2023-04-25 20:17:13 -04:00
Joe R
8b46d12433 Fixed error in Beehive demo and other enhancements to the Beehive game. 2023-04-25 20:17:01 -04:00
Joe R
1086a5b584 Added Kiev game. 2023-04-25 17:41:37 -04:00
lufebe16
1cfb7c3f69 Android support:
- mkcards restored
- new file buildozer.run
- build instructions adapted
2023-04-23 11:42:12 +02:00
lufebe16
04c9f80a41 Some cardsets removed from android build. apk gets too large otherwise. 2023-04-21 19:44:37 +02:00
lufebe16
144f2b752b Kivy version updates:
- Android version checks restricted to android os present, corrects #310
- In buildozer.spec added support for 64k (#303). Blows up the apk by
  ca. 12M.
2023-04-21 18:23:04 +02:00
Joe R
d3efb6dd15 Exposed compress stack option. 2023-04-19 22:17:55 -04:00
Joe R
5fecd4e123 4K table tiles (by lex81) 2023-04-19 19:36:42 -04:00
Joe R
0bd695b26d 2.20.1 release 2023-04-16 15:40:24 -04:00
lufebe16
e932affd3f Some error corrections in fastlane metadata 2023-04-13 14:18:24 +02:00
Joe R
1623454091 Set to use new version of PyInstaller and Python 3.11. 2023-04-11 22:17:23 -04:00
Joe R
b0d5c9d7b0 Added ttkthemes theme names for localization. 2023-04-05 19:52:51 -04:00
Joe R
644f55e4f7 Fixed Three Shuffles and a Draw draw sound effect to not play during a demo. 2023-04-01 16:13:21 -04:00
Joe R
3182cc4b88 Better-res images for tarock/hex a trump bottoms. 2023-04-01 11:11:01 -04:00
Joe R
7b3ff699fe Allow localization of date formatting labels. 2023-03-29 19:51:31 -04:00
Joe R
4d0fb6942f Made sorting of games/cardsets/table tile lists case-insensitive. 2023-03-29 17:37:04 -04:00
lufebe16
dec1fd88f2 Added comment to README.android 2023-03-27 20:20:23 +02:00
lufebe16
cafe58aa69 - fastlane sructure corrected 2023-03-27 18:39:21 +02:00
lufebe16
755e1b444c - android permissions update 2023-03-27 18:25:45 +02:00
lufebe16
6810345d81 Fastlane metadata added for android support 2023-03-27 18:25:45 +02:00
Joe R
8439cf07cb Fixed tkraise syntax to correct find card highlight overlaps. 2023-03-23 20:38:30 -04:00
Joe R
0c0feeae97 Ensured icon style menu is correctly sorted. 2023-03-23 16:43:21 -04:00
Joe R
69bbec8e70 Moved talon in Flake to eliminate overlap, and other cleanup. 2023-03-20 22:59:18 -04:00
Joe R
976e6ea756 Use separate deck shuffling for Double Fives. 2023-03-20 19:14:06 -04:00
Joe R
c959844d54 Check for mismatched game IDs between held and last games, to prevent a crash with an invalid config. 2023-03-18 20:55:28 -04:00
Joe R
42b3fba6c0 A few corrections in the game rules docs. 2023-03-15 21:54:06 -04:00
Joe R
90c77ebd74 Check protected games when loading previous game. 2023-03-15 20:52:13 -04:00
Arthusppp
db0dbb84ec
Update Polish Translation (#302)
Update Polish Translation
2023-03-11 17:08:33 -05:00
Joe R
48ab207ab4 Updated games POT. 2023-03-09 21:26:41 -05:00
Joe R
4160d75b6a Minor cleanup of Aglet game. 2023-03-09 18:22:02 -05:00
lufebe16
ae40b654a1 Updated android build instructions 2023-03-01 11:28:18 +01:00
lufebe16
19a8a93d76 Android build updates 2023-03-01 09:57:24 +01:00
lufebe16
ac77fe9e1e Android build updates 2023-02-28 20:59:52 +01:00
Joe R
0c6aa7e1b8 Version 2.20.0 release. 2023-02-26 22:33:42 -05:00
Joe R
7044c9aacb Updated cardsets to 2.2. 2023-02-26 21:44:14 -05:00
Joe R
d3262b2c5c A few more alternate names. 2023-02-24 22:57:44 -05:00
Joe R
83c5b8be44 Added The Plot game. 2023-02-24 22:26:15 -05:00
Joe R
a306f65424 Added alt unpickler hack for backward compatibility with saves. 2023-02-24 20:51:35 -05:00
Joe R
0a10c72524 Solver documentation page. 2023-02-22 23:43:58 -05:00
Joe R
11ee25afc2 Added Preference game. 2023-02-22 21:20:37 -05:00
Joe R
d591db1e1c Enhancements to All in a Row II playability. 2023-02-22 20:20:09 -05:00
Joe R
bb06d86a2c Added Cromwell game. 2023-02-18 10:07:41 -05:00
Joe R
20096a88c8 Documentation on plugins, and code to support multiple versions of plugin import module. 2023-02-15 19:29:40 -05:00
Joe R
007f930066 Added Taking Silk game. 2023-02-15 18:26:32 -05:00
Joe R
5bbd2cc462 Removed unused import. 2023-02-13 19:25:59 -05:00
Joe R
7171b806a2 Removed unneeded labels from Knockout game. 2023-02-13 17:49:59 -05:00
Joe R
4a9257dee3 Added Double Putt game. 2023-02-11 14:26:52 -05:00
Joe R
55c00ddda3 Brazilian Portuguese translation (provided by Álvaro Moret, Matheus Knack, and Vanderson Faria of Universidade Federal do Espírito Santo). 2023-02-11 13:07:54 -05:00
Joe R
2b6aa110cc Clarified correct vs. incorrect version of All in a Row game. 2023-02-11 11:14:04 -05:00
Joe R
4aac672ebd Added Yeast Dough game. 2023-02-03 21:02:37 -05:00
Joe R
99f19d17d1 Added section on the demo to the assist options documentation. 2023-02-03 20:47:03 -05:00
Joe R
fdddc014e0 Added Demons and Thieves game. 2023-01-31 19:48:09 -05:00
Joe R
b40ffe8981 More game organization updates. 2023-01-31 17:44:41 -05:00
Joe R
efbb3489b3 Added Six by Six game. 2023-01-28 13:06:48 -05:00
Joe R
03de3e84a6 Matching type cardset support for allowing Memory games to use any cardset. 2023-01-28 10:44:57 -05:00
Joe R
b4d75cb46c A few documentation corrections. 2023-01-26 17:28:07 -05:00
Joe R
6304039c11 Corrected typo in Polish PO file. 2023-01-25 21:33:52 -05:00
Joe R
d4363d14d8 Added hint count to finished game with help message (issue #291). 2023-01-25 20:36:54 -05:00
Joe R
c803ed9344 Fixed omission in news asciidoc. 2023-01-25 19:56:05 -05:00
Joe R
956bc359b6 Added Pitt the Younger game. 2023-01-22 18:45:30 -05:00
Joe R
e7ebe6fb38 Added Jacks in the Box game. 2023-01-17 19:37:45 -05:00
Joe R
a04f24dfb7 Fixes for 23 Skidoo game and Accordion game organization. 2023-01-17 18:21:00 -05:00
Joe R
b49dd96bc8 Ported cardset customization guide to HTML and added it to the main documentation. 2023-01-14 14:14:04 -05:00
Joe R
26ff013153 Added 23 Skidoo game. 2023-01-14 13:05:42 -05:00
Joe R
1a5f73f59f Localization for extended calculation displays. 2023-01-08 18:15:41 -05:00
Joe R
c320312df9 Added McClellan game. 2023-01-08 17:52:27 -05:00
Joe R
f4210f67d5 Added documentation page for assist options. 2023-01-03 19:41:49 -05:00
Joe R
13f406599e Refactored Moosehide stack usage to remove duplicate stack. 2023-01-03 17:30:24 -05:00
Joe R
808b1d7d0a Added Lasker game. 2022-12-30 16:18:12 -05:00
Joe R
a438dc8861 Fixed import order. 2022-12-30 15:10:19 -05:00
Joe R
f3661a0aee Additional options and documentation for Solitaire Wizard. 2022-12-30 09:56:00 -05:00
Joe R
3ea9f7f481 A few game organization updates. 2022-12-28 23:40:44 -05:00
Joe R
c3ba33a1aa Added Carcassonne game. 2022-12-28 10:58:12 -05:00
Joe R
ca7a86bb5d Restored Save Game Geometry option for Pillowless installs. 2022-12-28 10:20:12 -05:00
Joe R
ccd250eb14 Added Roaming Proils game. 2022-12-26 10:53:25 -05:00
Joe R
81fae5e03d Horizontal layout for Neptune game. 2022-12-26 10:05:04 -05:00
Joe R
bdab8cf8a6 Added Wading Pool game. 2022-12-21 21:24:33 -05:00
Joe R
abd4b5327b Organized Double Montana/two deck Montana variants. 2022-12-21 20:54:14 -05:00
Joe R
0a55fffdb7 Added Vineyard game. 2022-12-17 19:59:16 -05:00
Joe R
4f2f874d26 Improvements to random logic to prevent choosing an option where there are no possible games. 2022-12-17 18:05:50 -05:00
lufebe16
ef404e3fc1 Updates
- android storage assignment
- build instructions
2022-12-14 10:49:47 +01:00
Joe R
4ec4a9911f Added Patient Pairs game. 2022-12-12 21:44:13 -05:00
Joe R
432620d436 More alternate names. 2022-12-12 18:54:56 -05:00
Joe R
c87bd34832 Added Agnes Two game. 2022-12-07 21:37:35 -05:00
Joe R
fbb369d93b Improvements to Knockout family games and full-deck variant. 2022-12-07 18:36:23 -05:00
lufebe16
bd49171a4c Android Storage access:
- Added private storage as a fallback, if permissions not granted.
- maybe will solve issue #284 with the next version.
2022-12-05 15:19:14 +01:00
lufebe16
a7e55513bd Kivy version scaling issues
- scaling of redeal image based on card size.
     - correction of fonts size and selection frame thickness.
2022-12-05 13:37:33 +01:00
Joe R
ff85c289ae Added my virtual environment to the git ignore - this will make managing branches easier for me. 2022-12-01 20:06:37 -05:00
Joe R
5ec791c572 Added Ceiling Fan game. 2022-12-01 18:37:43 -05:00
Drew Csillag
525df63f35
Update my email address (#283) 2022-12-01 17:48:05 -05:00
Joe R
442d75aeef Added Fair Maids game. 2022-11-26 19:13:35 -05:00
Joe R
9c604ca806 More alternate names. 2022-11-26 18:43:49 -05:00
lufebe16
96e4576572 Build support for android:
- fdroid.init fixed
2022-11-25 18:06:47 +01:00
lufebe16
a69bee95cc Build support for android:
- added fdroid.init
2022-11-24 13:57:31 +01:00
Joe R
5357713b87 Added Smokey game. 2022-11-22 22:20:46 -05:00
Joe R
8bef814a05 Combined Gargantua and Jumbo games - they're the same game. 2022-11-22 21:48:30 -05:00
Joe R
44cc06875d Added Bobby game and refactoring of games in the same family. 2022-11-22 18:07:31 -05:00
lufebe16
4e0add4e5d Build support for android:
- android support library replaced by androidx appcompat
2022-11-21 16:33:21 +01:00
Joe R
3ed6bcf984 Some minor documentation format corrections. 2022-11-20 14:57:13 -05:00
Joe R
73dca1b206 Added two-deck Fourteen game. 2022-11-20 10:49:58 -05:00
lufebe16
db3180abba flake8! 2022-11-18 18:07:25 +01:00
lufebe16
86bf23c1fa Build support for android reworked:
- New build support for android is based on buildozer.
- Support files and instructions see directory 'buildozer'
2022-11-18 16:05:09 +01:00
Joe R
21c7eaf660 Added Old Fashioned game. 2022-11-17 20:16:35 -05:00
Joe R
1ec22ad16f Unlimited redeal option for Hit or MIss game. 2022-11-17 17:49:01 -05:00
Joe R
9493f79f9c Ladybug is probably more of a variable redeals game. 2022-11-17 17:13:16 -05:00
Joe R
f31d14c7f6 Added Dimensions game. 2022-11-14 22:06:10 -05:00
Joe R
472b68a9c7 Improved support for multi-deck Calculation type games. 2022-11-14 20:59:28 -05:00
Joe R
be5946f099 Updated contributing.md with more instructions to help keep game metadata accurate. 2022-11-11 22:27:29 -05:00
Joe R
146dbeec86 Added Simple Tens game. 2022-11-11 22:04:00 -05:00
Joe R
2a1628e6cb Added more alternate names. 2022-11-09 20:35:12 -05:00
Joe R
52f05e3aa8 Added Wildflower game. 2022-11-09 20:15:52 -05:00
Joe R
2f464fe54b Baker's Dozen with two decks. 2022-11-07 20:06:28 -05:00
Joe R
fa22e6afc5 Corrected KDE Patience/KPatience compatibility list to correctly match latest version. 2022-11-07 18:00:11 -05:00
Joe R
23894e38c6 Added King's Audience game. 2022-11-02 18:44:03 -04:00
Joe R
e7f8944adb Sorting lists of alternate names. 2022-11-02 18:08:25 -04:00
Joe R
ed3fa526de Added Station game. 2022-10-30 20:36:11 -04:00
Shlomi Fish
21a671a8e2 add dash-dash-version-cli-flag
"--version"
2022-10-28 09:43:38 +03:00
Joe R
ebae446b33 Added Tasmanian Patience game. 2022-10-23 15:31:19 -04:00
Joe R
2d8efe9f42 New layout for Open Osmium/Open Peek that's more monitor-friendly. 2022-10-23 12:51:29 -04:00
Joe R
82ef3b4b0e Updated intro help page to better reflect current versions of PySolFC. 2022-10-19 18:55:52 -04:00
Joe R
3f1c66cd0c Half Klondike game. 2022-10-19 17:19:57 -04:00
Joe R
331fbfc776 Flathub release announcement. 2022-10-11 20:31:03 -04:00
Joe R
7be495236e Appdata XML file. 2022-10-11 18:48:39 -04:00
Joe R
3879a9196b Version 2.18.0. 2022-10-07 23:10:51 -04:00
Joe R
48684d316c Allow app paths (from ssokolow's flatpak implementation). 2022-10-07 18:57:24 -04:00
Joe R
3cd6b6ecb2 Fixed manual undo causing false stuck notifications. 2022-10-06 22:50:14 -04:00
Joe R
1dd012d7d9 More alternate names. 2022-10-02 18:29:42 -04:00
Joe R
147cefba91 Checking canvas size against .99 to reduce chance of infinite loop. 2022-10-02 15:41:03 -04:00
Joe R
18c3549f66 Fixed error in statistics sorting. 2022-09-26 22:34:01 -04:00
Joe R
8cef44437b Updated localization files. 2022-09-26 21:06:29 -04:00
Joe R
425573060f Better verbiage for time and move statistics. 2022-09-26 20:08:42 -04:00
Joe R
e6783debec Use PyInstaller 5.3 for now. 2022-09-23 20:01:32 -04:00
Joe R
d72fd96db7 Some game rule revisions. 2022-09-23 19:50:56 -04:00
Joe R
53bb15b373 Fixed the select game and cardset windows after adding scaling options. 2022-09-19 23:49:23 -04:00
Joe R
3fd823b2f5 Option to select image scaling method, as discussed in issue #275. 2022-09-19 22:26:44 -04:00
Joe R
02e68785ee Removed old options.cfg items that are no longer relevant. 2022-09-19 18:45:28 -04:00
Joe R
3451b6b113 Blocked typing into advanced search dropdowns. 2022-09-16 23:28:09 -04:00
Joe R
a39251f5a5 Scaled select windows to main window size. 2022-09-16 22:16:31 -04:00
Joe R
c81ccfa186 Added Alt+F4 binding for certain environments 2022-09-12 20:51:36 -04:00
Joe R
ad67cb642b Brisbane is a Yukon type game. 2022-09-12 19:58:24 -04:00
Joe R
7f0c6e18ec A few more table tiles. 2022-09-11 18:31:42 -04:00
Joe R
cc3a1297cd Fixed updating find card dialog when changing game category. 2022-09-11 11:29:12 -04:00
Joe R
c7922075ba Added Nuvola icon set. 2022-09-11 10:58:41 -04:00
Joe R
97b48b4d4b The final missing game rules for the docs! 2022-09-08 19:29:08 -04:00
Joe R
798ef4699a Fixed flake8 error. 2022-09-08 18:17:37 -04:00
Joe R
6fbcc1186e Updated confirm discard game verbiage (as per issue #270). 2022-09-08 17:56:20 -04:00
Joe R
39f810b423 Five additional sets of rules for the docs. 2022-09-04 13:52:49 -04:00
Joe R
f614186a79 Fixed Le Grande Teton game to properly account for the number of ranks in a tarock deck. 2022-09-04 13:08:10 -04:00
Joe R
c704b6380d Three Peaks is the same as Tri Peaks, which was added in 4.70, but was replaced. 2022-09-04 11:20:07 -04:00
Joe R
cdcde7b212 Added missing stack description to Bastille Day game. 2022-09-02 21:02:53 -04:00
Joe R
72bbd7ab0a Five more sets of rules for the docs. 2022-09-02 19:03:26 -04:00
Joe R
a00c8e52d3 Updated rules for double deck Montana games and Penguin. 2022-08-29 20:00:04 -04:00
Joe R
df4a9b021e Prevented the scroll bar help info from expanding the window. 2022-08-29 17:19:59 -04:00
Joe R
6f1d8c958b Added a missed game to the AisleRiot compatibility list. 2022-08-22 22:56:54 -04:00
Joe R
1c11b39a8b Support for find card in trump only games. 2022-08-22 20:10:28 -04:00
Joe R
c00e73d2d7 Added game search options for PySol versions and popular games. 2022-08-22 17:55:30 -04:00
Joe R
a3e8bcc8d8 Six more missing rules for the documentation. 2022-08-20 10:37:58 -04:00
Joe R
fe5a16ec54 Added stack for games that you can't manually deal cards in, for stuck checking. 2022-08-20 09:40:31 -04:00
Joe R
701c1628d5 Find card support for Ganjifa games. 2022-08-18 21:16:40 -04:00
Joe R
0f26fa283c Fix for single card redeal causing a stuck trigger in Matrimony. 2022-08-13 18:04:20 -04:00
Joe R
32daef2b02 Five more missing game docs. 2022-08-13 16:20:55 -04:00
Joe R
d2c59377dc Advanced search feature. 2022-08-13 12:22:17 -04:00
Joe R
99ae5c39bb Added/fixed variable redeals category in the game selection tree. 2022-08-11 19:33:10 -04:00
Joe R
3464052a5c Organization updates for Ocean Towers/Double Seahaven Towers. 2022-08-11 17:10:55 -04:00
Joe R
fc34af4289 Fixed error when clicking an empty search list. 2022-08-09 20:57:37 -04:00
Joe R
de47580559 Probably the last larger batch of missing game documentation. 2022-08-09 17:46:04 -04:00
Joe R
bfc65193f0 Fixed new flake8 rule issues. 2022-08-03 20:56:14 -04:00
Joe R
42e6288e16 Blocked stuck notifications from appearing right before winning the game. 2022-08-03 19:09:34 -04:00
Joe R
02e62afb16 Stuck notification option. 2022-07-28 18:56:41 -04:00
Joe R
6fe410ac24 Corrections to status bar variables in Kivy. 2022-07-28 18:19:34 -04:00
Joe R
ed811016de FIxed demo and stuck indicator getting stuck too early in Hit or Miss. 2022-07-28 16:56:23 -04:00
Joe R
b5a305340d Checking for "None" drag handlers to prevent errors when clicking certain stacks. 2022-07-26 21:35:44 -04:00
Joe R
fbcd5d4ec8 Combined code for Double Line and Grandfather, as they're almost identical games. 2022-07-26 18:56:21 -04:00
Joe R
1d290d1ed1 Fixed sizing of Genesis game to eliminate potential overlap. 2022-07-22 23:30:47 -04:00
Joe R
795b1bc49c Another batch of missing game docs. 2022-07-22 20:14:15 -04:00
Joe R
98789e635f Corrected import order. 2022-07-17 09:31:54 -04:00
Joe R
8bbf3bbebe Revamped the status bar functionality - better design and cleaner options list. 2022-07-17 09:22:38 -04:00
Joe R
f968a2c9e4 Fixed error in Hit or Miss game. 2022-07-16 22:57:07 -04:00
Joe R
61343e9b54 Fixed invalid redo comparison. 2022-07-16 10:54:18 -04:00
Joe R
f5dd4be72f Combined Brazilian Patience and Hypotenuse games as they're duplicates. 2022-07-12 20:18:04 -04:00
Joe R
bc48b3777f Find card enabled for Mahjongg, Tarock, and Hex A games. 2022-07-12 19:39:41 -04:00
Joe R
5f5744e13a Ten more game rules for the documentation. 2022-07-12 17:51:24 -04:00
Joe R
92230480fd Corrected capitalization and typo in cardset styles list. 2022-07-09 17:04:02 -04:00
Joe R
67fbd4c132 Find card support for Hanafuda games. 2022-07-09 13:48:01 -04:00
Joe R
8d575bb747 Added image resampling option. 2022-07-06 18:39:48 -04:00
Joe R
ee5fcbad76 Twenty-four more missing rules added to the documentation. 2022-07-03 19:35:00 -04:00
Joe R
d07594148a Updated tree display icons (from Remix Icon). 2022-07-03 09:20:54 -04:00
Joe R
756772ac0f Added Wood Gloss table tile (by lexterror). 2022-07-01 22:49:42 -04:00
Joe R
068ae67943 Added ten missing game rules. 2022-07-01 21:27:46 -04:00
Joe R
79aca30779 Additional updates to game name consistency. 2022-06-26 09:23:29 -04:00
Joe R
f43ef2645c Fix imports and autodrop crash. 2022-06-23 18:16:19 -04:00
Joe R
1144360d27 Fixed Napoleon's Tomb game. 2022-06-23 17:28:25 -04:00
Joe R
862c955c2c Exposed extra large icon option. 2022-06-19 18:50:49 -04:00
Joe R
0c20a2e0cf Touched up "default" icon set. 2022-06-19 15:26:48 -04:00
Joe R
d71e5711a6 Fixed some miscategorized games. 2022-06-17 21:09:16 -04:00
Joe R
09f875de93 Cleaned up run-tests.pl 2022-06-17 18:41:11 -04:00
Joe R
58dc9a5886 Fixed toolbar state for new hint button. 2022-06-13 17:06:46 -04:00
Joe R
bf66e6d819 Made capitalization of game names consistent. 2022-06-13 16:42:45 -04:00
Joe R
41f481b4ab 24 more missing game rules. 2022-06-09 18:33:15 -04:00
Joe R
e1cee1a6c2 Fixed forced autodrop in Salic Law game. 2022-06-09 18:05:21 -04:00
Joe R
a8c307fd3a Added text above toolbar icon option. 2022-06-04 21:36:49 -04:00
Joe R
2487830d7e Updated documentation for Intrigue family games. 2022-06-04 16:18:47 -04:00
Joe R
139fe83466 Updated Crystal icon set. 2022-06-02 18:48:23 -04:00
Joe R
40f8ac7dcb Fixed trailing space test. 2022-06-02 18:16:19 -04:00
Joe R
80a2208f50 Fixed incorrect rules for Amazons game. 2022-06-02 17:57:10 -04:00
Joe R
90f79aa68b Reduced extra window padding on the player options window. 2022-05-31 20:52:05 -04:00
Joe R
f288362299 A dozen more game rules. 2022-05-31 17:58:53 -04:00
Joe R
f23f58933f Twenty-two additional missing game rules. 2022-05-28 17:10:54 -04:00
Joe R
dba9e4442b Added hint button to the toolbar. 2022-05-28 15:30:21 -04:00
Joe R
2abdc419f3 Added free hint option. 2022-05-26 22:28:49 -04:00
Joe R
b80bfc4ca6 Corrected overlapping text in a few games. 2022-05-26 20:07:06 -04:00
Joe R
30d3b047ce Ten more missing game rules. 2022-05-22 11:27:41 -04:00
Joe R
a1fd67077e Restored historic info about Mahjongg game versions and protected games. 2022-05-22 10:46:19 -04:00
Joe R
7a6f1c5c51 Restored cardsets download link to the main repo. 2022-05-16 20:32:08 -04:00
Joe R
d7a57ef65f Two dozen more missing game rules. 2022-05-16 20:13:31 -04:00
Sérgio Basto
7427190dcf
Requires python-attrs >= 18.2.0 (#255)
See issue #159
2022-05-13 20:31:38 -04:00
Joe R
72ee1c6aaf 2.16 release 2022-05-10 18:45:08 -04:00
Joe R
99f1de637c Removed placeholder text from documentation. 2022-05-03 19:20:58 -04:00
Joe R
02fbe321e5 Display only one error message when starting without any available cardsets. 2022-05-03 18:03:25 -04:00
Joe R
af1fba247a Attempted to feather borders around joker images. 2022-04-30 12:40:44 -04:00
Joe R
53ac444792 Fixed Kivy help button and updated Kivy toolbar. 2022-04-28 22:09:57 -04:00
Joe R
5f3d08cb8a Fixed regions for Greater Wheel. 2022-04-28 17:05:09 -04:00
Joe R
980cd425e1 Fix for handling of overly long game menus. 2022-04-24 13:27:43 -04:00
Joe R
31765ceda7 Added Pygame to Mac installer (for issue #250). 2022-04-19 19:23:51 -04:00
Joe R
f5cc29566e Added two dozen more missing game rules. 2022-04-15 21:16:19 -04:00
Joe R
72b411d8d5 Enlarged the layout for Waterfall - cards overlap way too easily. 2022-04-15 20:23:07 -04:00
Joe R
2de01609e1 Updated Bluecurve icons from the original library, for better quality. 2022-04-11 22:50:45 -04:00
Joe R
344b98d35e Updated Q.C. label positions. 2022-04-11 18:36:39 -04:00
Joe R
6cd5a793e7 Added light variation of remix toolbar icons, for darker interfaces. 2022-04-08 19:42:43 -04:00
Joe R
38f875fbd1 Fix for Ripple Fan redealing. 2022-04-01 22:08:59 -04:00
Joe R
c8003f0e14 Fixed initial display when selecting fonts. 2022-04-01 20:52:13 -04:00
Joe R
eb15b277be Added missing rules for ten more games. 2022-03-24 16:59:58 -04:00
Joe R
36b3f89b52 Fixed overlapping labels in Betsy Ross. 2022-03-22 19:59:47 -04:00
Joe R
9273e09841 Fixed text positioning for Napoleon Takes/Leaves Moscow. 2022-03-22 18:04:10 -04:00
Joe R
0583f741f0 Added missing rules for 20 more games. 2022-03-19 13:39:07 -04:00
Joe R
9e957b65ec Added a few more CC0 (or equivalent license) table tile images. 2022-03-19 13:13:30 -04:00
Joe R
b2d07def7e Fixed display cutoff in Senate game. 2022-03-19 09:08:45 -04:00
Joe R
396ca108b9 New dialog icons (from Remix Icon) 2022-03-17 23:38:09 -04:00
Joe R
5af91ccdd7 Scaled help window to the screen. 2022-03-17 21:48:05 -04:00
Joe R
a05044e40e Removed unnecessary logic forcing Four Seasons and House in the Wood to use Wikipedia rules. 2022-03-17 19:27:30 -04:00
Joe R
2a2d1c59db Improvements to scaling and resizing of "save-aspect" table tiles. 2022-03-14 21:59:04 -04:00
Joe R
2e7bbb4851 First post-2.15 batch of game rules. 2022-03-14 19:09:27 -04:00
Joe R
6d2c1490c3 2.15 release 2022-03-12 14:03:42 -05:00
Joe R
e5792e44dd Added "Report a Bug" to the menu bar, hoping this will make it easier to get feedback on the 2.15 beta. 2022-03-12 09:05:21 -05:00
Joe R
2225c68b74 Fixed naming of Osmosis type games to be more accurate. 2022-03-12 08:59:39 -05:00
Joe R
f5dcfe2979 Fix for Mahjongg game short name sorting. 2022-03-09 19:49:54 -05:00
Joe R
ff4bd148fa Added missing methods causing a crash in Kivy. 2022-03-09 18:47:25 -05:00
Joe R
56a49f124f Documentation revisions. 2022-03-07 22:02:06 -05:00
Joe R
7dde34079d Fixed an issue with overlapping stacks. 2022-03-07 18:35:03 -05:00
Joe R
44e0e2d6e3 Take into account title bar when determining tree window locations. 2022-03-07 18:10:10 -05:00
Joe R
41edf474d6 Moved text displays to limit auto-scaling overlap. 2022-03-05 17:21:14 -05:00
Joe R
6b00824e64 One last batch of missing game rules for the next release. 2022-03-05 15:09:53 -05:00
Joe R
304d6f5b70 New default look and feel, and prep for Cardsets 2.1 release. 2022-03-05 15:00:08 -05:00
Joe R
09a08f2988 Added error message when trying to start with a missing cardset. 2022-03-05 12:15:11 -05:00
Joe R
ee80a93558 Fixed duplicate "Castle" entry in Mahjongg games menu. 2022-03-05 10:41:49 -05:00
Joe R
bd825ad348 Removed directory check from install script. 2022-03-02 22:20:02 -05:00
Joe R
9d303d265d Code to prevent error when letters are missing. 2022-03-02 21:49:38 -05:00
Joe R
f4bed0f620 Corrected scaling issue in Octagon game. 2022-02-27 22:52:40 -05:00
Joe R
716bea0043 Added more missing game rules. 2022-02-27 20:44:05 -05:00
Joe R
62051a86bc Ensured Mahjongg scaling properly carries over to preview mode. 2022-02-24 21:18:44 -05:00
Joe R
de6f23910b Corrected scaling issues for Mahjongg type games. 2022-02-24 17:34:16 -05:00
Joe R
bbaeb54266 Added ttkthemes support 2022-02-20 11:20:49 -05:00
Joe R
feed149bd9 Fix for ImageDraw issue. 2022-02-20 11:11:47 -05:00
Joe R
72c979d00f Added Pillow logic for creating missing images. 2022-02-20 11:01:42 -05:00
Joe R
4c2dd59928 Added config option to use cardset bottoms. 2022-02-18 21:13:41 -05:00
Joe R
e81257ebd0 Don't mask unknown images. 2022-02-18 19:47:04 -05:00
cardset
4ad11dc85a masking bottoms
Should mask now load bottoms, resize bottoms and subsample.

Separated load bottoms from resize bottoms
2022-02-18 19:37:40 -05:00
Joe R
4adb91dffd Attempted to correct errors with Linux install script. 2022-02-12 11:53:41 -05:00
Joe R
1031f3f562 Organized menu bar and updated POT translations for latest games. 2022-02-12 11:50:19 -05:00
Joe R
fd694be7b2 Exposed toolbar icon size option. 2022-02-08 22:42:06 -05:00
Joe R
158e76a130 Fixed crash in Ladybug game in Kivy. 2022-02-06 22:54:39 -05:00
Joe R
b49844e15b Added bug reporting instructions to the documentation. 2022-02-06 18:46:31 -05:00
Joe R
42b97cf1ed Fix for preview bottoms and undo in Cruel. 2022-02-06 18:20:14 -05:00
Joe R
41ff8873e5
Merge pull request #241 from cardset/master
changes because of slow loading of bottoms
2022-02-06 18:16:21 -05:00
cardset
94603866a7 Update bakersdozen.py
Other redeal rules for game Cruel,
and fixing only one card may move.
2022-01-25 08:43:38 +01:00
cardset
dc98900763 changes because of slow loading of bottoms
Because ImageTK.PhotoImage and Image.resizing have problems witht zeros in alphachannel, i masked the image to eliminate the 0s
2022-01-24 14:48:17 +01:00
Joe R
54e34bb4c0 Added Neptune game. 2022-01-22 15:06:33 -05:00
Joe R
b98bdbbe23 Updated POT. 2022-01-20 21:44:02 -05:00
Joe R
27e2813d0e Exposed the Randomize Card Placement option. 2022-01-20 17:21:24 -05:00
Joe R
bc8eb4270c Updated size of progression graph to fit larger statistics window. 2022-01-18 20:21:47 -05:00
Joe R
b55c0a9015 Some game organization, particularly with Colorado family games. 2022-01-18 17:30:29 -05:00
Joe R
780c399e6f Added Guardian game. 2022-01-11 19:02:32 -05:00
Joe R
960f3a801e Added remaining missing bottom images. 2022-01-11 17:31:00 -05:00
Joe R
be097063ef Added Knockout and Herz zu Herz games. 2022-01-08 12:57:28 -05:00
Joe R
052fd0b78d Added Stripped Deck game category. 2022-01-08 10:34:33 -05:00
Joe R
d73bed3aaa A couple corrections to Beleaguered Castle type game categorization. 2022-01-06 17:03:35 -05:00
Joe R
1ac1fd0452 Added Relaxed Raglan variant. 2022-01-02 19:37:22 -05:00
Joe R
bc1ec96857 Simplified center offset logic to remove extraneous variables. 2022-01-02 18:49:04 -05:00
Joe R
ff458a7058 Added Lights Out game. 2022-01-02 11:42:37 -05:00
Joe R
bdcb25d0d4 Fixed rules and functionality of Anno Domini game (for New Years). 2021-12-31 23:20:48 -05:00
Joe R
8b957386ce Added Malmaison game. 2021-12-31 19:52:56 -05:00
Joe R
3f9853f7ec Fixed HTTPS linking in the documentation. 2021-12-28 17:13:02 -05:00
Joe R
14658b9a6c Restored "What's New?" documentation page, properly updated for PySolFC. 2021-12-28 14:02:12 -05:00
Joe R
29317ea00c Corrected rules for Step-Up to make the game more playable. 2021-12-28 13:26:12 -05:00
Joe R
e0c9fe7652 Added Pluto game. 2021-12-26 13:16:18 -05:00
Joe R
46bda40762 Added missing rules for 25 more games. 2021-12-26 12:10:30 -05:00
Joe R
fe2a061f7f
Merge pull request #236 from joeraz/feature/search
Search functionality
2021-12-26 10:43:56 -05:00
Joe R
ca57b37aab Game/cardset/table tile search functionality. 2021-12-22 20:30:04 -05:00
Joe R
9928cd8790 Added Pyramid Dozen game. 2021-12-20 20:41:26 -05:00
Joe R
393de563a7 Some minor menubar cleanup. 2021-12-20 19:27:19 -05:00
Joe R
a8c94d1d11 Added many alternate names, inventors, and compatibility programs. 2021-12-15 23:03:00 -05:00
Joe R
a258946d30 Added Moojub game. 2021-12-15 18:51:19 -05:00
Joe R
659760b43a Added more missing game rules. 2021-12-13 22:59:16 -05:00
Joe R
723d3ff85f Added Archway game. 2021-12-13 17:47:33 -05:00
Joe R
88201c0ca6 Updated POT file. 2021-12-10 22:23:27 -05:00
Joe R
cb227689bd Set version to 2.14.1 2021-12-10 21:15:20 -05:00
Joe R
e5833ebe80 Added Memory Sequence game. 2021-12-10 18:00:16 -05:00
Joe R
8cab449500 Updated POT files. 2021-12-09 19:31:06 -05:00
Joe R
3f67f461c0 Fix for misalignment of Shisen-Sho hint arrow. 2021-12-07 20:13:41 -05:00
Joe R
deebc72ac0 Added Swiss Patience game. 2021-12-04 17:28:01 -05:00
Joe R
dbd2a88580 Adjusted Dial/German Clock games to have a consistent style, being variants of the same game. 2021-12-04 13:33:03 -05:00
Joe R
7c242bdcd2 Added Flow game. 2021-12-04 10:10:16 -05:00
Shlomi Fish
93923f9d19 fix issue#229: restore old boolean behavior
See: https://github.com/shlomif/PySolFC/pull/230#issuecomment-981240814
2021-12-03 07:58:46 +02:00
Shlomi Fish
ffa0ae1a2f tentative fix for issue#229
See: https://github.com/shlomif/PySolFC/issues/229

pygame2 compat.
2021-12-03 07:58:46 +02:00
Joe R
7af8fde4c0 Revamped Pegged game and added manual first card removal option. 2021-12-02 20:40:44 -05:00
Joe R
940a5d584e Fixed incorrect rules for The Spark type games (old version is renamed Kilowatt). 2021-12-02 16:51:32 -05:00
Joe R
5ed1236ab5 Added Single Spark game. 2021-11-26 20:02:32 -05:00
Joe R
99bc75f4c1 Selected date format is saved and persists. 2021-11-26 19:13:02 -05:00
Joe R
7f7c710973 Added date format option to statistics. 2021-11-23 22:30:26 -05:00
Joe R
c16921cf9a Added Ladybug game. 2021-11-23 17:15:38 -05:00
Joe R
660445ece4 Fix for error when saving logs. 2021-11-20 11:05:38 -05:00
Joe R
2d87058ce8 Added Casino Canfield variation. 2021-11-19 19:53:52 -05:00
Joe R
962dc3ffeb Re-enabled toolbar style selection option. 2021-11-19 17:57:59 -05:00
Joe R
c2bc75caf7 Added Rainbow Fan game. 2021-11-15 21:41:39 -05:00
Joe R
024248bac6 Added version number to documentation footers. 2021-11-15 21:03:09 -05:00
Joe R
48af00fb7e Added Up and Up game. 2021-11-13 12:57:33 -05:00
Shlomi Fish
c1a20c7668 Fix tidyall tests.
See:

https://metacpan.org/release/Code-TidyAll .
2021-11-12 07:30:03 +02:00
Joe R
e73510b290 Flake8 fix. 2021-11-07 13:14:39 -05:00
Joe R
e54b6cc2d1 Added Display game. 2021-11-07 13:08:32 -05:00
Joe R
a95c7a1e42 Added common hanafuda bottoms and fixed some hanafuda game layouts. 2021-10-28 22:20:26 -04:00
Joe R
8c476e391f Fixed some errors in game rule documentation. 2021-10-22 20:25:33 -04:00
Joe R
6cbf173723 Added Siegecraft game. 2021-10-22 18:05:30 -04:00
Joe R
f0df3b0f58 Added additional open game tags to special games. 2021-10-19 22:00:31 -04:00
Joe R
7ca623ecf0 Fix for dealing sound in Daddy Longlegs. 2021-10-19 17:26:59 -04:00
Joe R
bdb62f94b7 Added Fire and Ice game. 2021-10-18 22:25:21 -04:00
Joe R
d6ca9c9e25 Fix for issue #226. 2021-10-11 21:45:52 -04:00
Joe R
2b8cb6464a Added Block Ten game. 2021-10-10 21:00:29 -04:00
Joe R
2de479320b Added German Clock game. 2021-10-10 10:39:58 -04:00
Joe R
1bc31007c5 Fixed Numerica game scaling to avoid cutoff. 2021-10-09 18:11:45 -04:00
Joe R
513962b8f3 Refactor of dialog geometry logic. 2021-10-09 15:47:20 -04:00
Leah Neukirchen
5d9dae8fcb Add Churchill Solitaire game. 2021-10-08 17:45:44 +02:00
Joe R
c9ac0e6f69 Some minor refactoring of Hit or Miss. 2021-10-01 20:15:52 -04:00
Joe R
2d7199e56f Added missing rules for about 20 more games. 2021-10-01 19:58:06 -04:00
Joe R
abf3cd3d25 Added option to move cards with one click in Camelot. 2021-09-24 21:19:22 -04:00
Joe R
900ba03979 Set the version to 2.14.0. 2021-09-19 14:26:09 -04:00
Joe R
8b46b0a757 Extended table tile image categorization to the Kivy version. 2021-09-19 13:59:53 -04:00
Joe R
d7e2532dad Updated formatter spacing to fix gmake test. 2021-09-19 11:20:51 -04:00
Joe R
382a744c74 Removed unnecessary region that breaks MatsuKiri preview. 2021-09-16 17:55:45 -04:00
Joe R
a6f4b23e8f Added missing open game tags. 2021-09-16 17:12:51 -04:00
Joe R
9246a3d247 Gave Scorpion Towers a cleaner layout, based on Seahaven Towers. 2021-09-14 19:52:35 -04:00
Joe R
66cec95dd5 Auto and manual scaling are mutually exclusive. 2021-09-14 18:31:54 -04:00
Joe R
e3d99bcbee Added some terms to the glossary. 2021-09-12 14:58:48 -04:00
Joe R
b149b3c301 Added Yukonic Plague game. 2021-09-12 14:45:28 -04:00
Joe R
ff30f50bfe Reset table tile when changing card size. (Fix for #222) 2021-09-11 12:59:17 -04:00
Joe R
faa474dd0b Added option to reset card scaling. 2021-09-11 09:54:44 -04:00
Joe R
13d34238e2 Fixed window/tree scaling on smaller screens. 2021-09-09 20:09:29 -04:00
Joe R
87c8160761 Fixed crash in Decade hints. 2021-09-08 21:53:33 -04:00
Joe R
48bb9d650b Fixed Decade hints. 2021-09-08 21:18:11 -04:00
Juhani Numminen
50545452bd Update python version used in macOS package 2021-09-08 11:24:22 +03:00
Joe R
2e9f242ce8 Failsafe to account for missing cardsets in playable preview. 2021-09-06 10:07:49 -04:00
Joe R
699ccb00ac Updated games by compatibility data. 2021-09-04 15:01:01 -04:00
Joe R
36a0bfbc14 Fixed up some sections of the documentation. 2021-09-04 10:07:08 -04:00
Joe R
6eead026cd Added Scorpion Towers game. 2021-09-04 09:13:36 -04:00
Joe R
0ad6143cb8 Added a Backbone variant closer to AisleRiot rules. 2021-09-02 20:58:00 -04:00
Joe R
2b4e228be9 Fixed accordion padding. 2021-09-02 20:01:38 -04:00
Joe R
e927d60a25 Playable preview now loads and uses cardsets of the correct type for each game. 2021-09-01 18:54:45 -04:00
Shlomi Fish
ea897ab8dc Extract a method or a function.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2021-08-30 09:59:36 +03:00
Shlomi Fish
6dfbdb1e61 refactoring 2021-08-30 09:48:55 +03:00
Shlomi Fish
a86bb4f222 fix os.symlink() args order 2021-08-30 09:44:54 +03:00
Joe R
441c6718fb A couple game organization corrections. 2021-08-28 21:31:59 -04:00
Joe R
8909990e89 Added Unusual game. 2021-08-28 15:04:00 -04:00
Joe R
f2457f03eb Potential fix for issue #220 2021-08-27 19:32:47 -04:00
Joe R
a2ac356741 Minor cleanup of Montana type game documentation. 2021-08-23 22:43:52 -04:00
Joe R
b23c2d724e Added option to return to the game after winning, and enabled winning of Cribbage/Poker Shuffle. 2021-08-23 19:18:21 -04:00
Joe R
2ed9aa4168 Added Trigon game. 2021-08-23 18:53:53 -04:00
Joe R
db720f0079 Updated text display alignment for a few games. 2021-08-21 20:05:39 -04:00
Joe R
bd3e3cd083 Added Racing Aces game. 2021-08-21 19:53:00 -04:00
Shlomi Fish
79d27d2749 issue217 : formatting.py deprecated fix.
This file is derived from /usr/lib/python3.9/formatter.py . All changes
are placed under CC0.

See:

* https://github.com/shlomif/PySolFC/issues/217

* https://bugzilla.redhat.com/show_bug.cgi?id=1990043
2021-08-19 07:21:15 +03:00
Joe R
4231c0f1ef Re-fixed flake8. 2021-08-17 21:38:22 -04:00
Joe R
fc240083d6 Added Bear River game. 2021-08-17 21:34:40 -04:00
Joe R
e9b36e10c9 Sorted imports. 2021-08-14 18:48:06 -04:00
Joe R
0fb76d00fc Better organization in table tile selection window. 2021-08-14 18:42:48 -04:00
Joe R
752337c361 Fix for Pillowless crash. 2021-08-14 17:43:52 -04:00
Joe R
30ec715bb0 Added Triple Rail game. 2021-08-14 12:18:46 -04:00
Joe R
d2283a90d6 Added Maverick game. 2021-08-14 12:07:38 -04:00
Juhani Numminen
cfa07e6c90 macOS: fix workflow by invoking python3 not python 2021-08-12 15:20:13 +03:00
Juhani Numminen
56dc087e8b github ci: report any flake8 code as failure. 2021-08-12 14:24:41 +03:00
Juhani Numminen
dade1ce20d macOS: Get python from python.org to avoid grahical issues 2021-08-12 14:20:19 +03:00
Joe R
a011e762df Added Decade game. 2021-08-05 19:20:43 -04:00
Joe R
896454d1e4 Added Preserve aspect ratio option to the menu. 2021-08-05 17:29:15 -04:00
Joe R
e64a85ba36 Added Following game. 2021-08-02 18:46:28 -04:00
Joe R
69ddbe2b37 Added missing game types for select game window. 2021-07-29 20:11:59 -04:00
Joe R
8f0d71eeea Fix for flake8. 2021-07-29 17:47:09 -04:00
Joe R
541b97b92f Added option to delete custom games. 2021-07-29 17:35:09 -04:00
Joe R
c9275edb26 Acey and Kingsley game. 2021-07-26 18:31:09 -04:00
Joe R
747b1fd60b Got Accordion's Revenge to work correctly under Kivy. 2021-07-24 21:03:51 -04:00
Joe R
8c41f7be61 A more traditional Double FreeCell variant. 2021-07-24 11:54:54 -04:00
Joe R
cb7c094ad4 Updated game DB categories. 2021-07-24 08:38:23 -04:00
Joe R
d60cf672e3 Added a bunch more new game rules. 2021-07-20 23:42:07 -04:00
Joe R
50ee8c9158 Added Sticko game. 2021-07-20 18:21:16 -04:00
Joe R
92e562b4f8 Improved scaling of cardsets window for smaller screens. 2021-07-18 10:53:42 -04:00
Joe R
d9c98ae017 Added Accordion's Revenge game. 2021-07-17 09:39:57 -04:00
Joe R
1a446862bd Fix for center layout not saving (issue #215) 2021-07-16 18:45:45 -04:00
Joe R
94fc987173 Updates to AisleRiot compatibility list. 2021-07-16 16:45:04 -04:00
Juhani Numminen
d4a1d89ebc Add macOS packaging workflow 2021-07-14 15:53:25 +03:00
Juhani Numminen
dd0efc9428 macOS: make the .app able to start up
Launching the app in a Terminal window works (by typing 'PySolFC.app/Contents/MacOS/PySolFC')
but clicking in Finder window fails. emulate_shell_environment might fix this
per https://github.com/pyinstaller/pyinstaller/issues/5109#issuecomment-808033464
2021-07-14 11:23:12 +03:00
Joe R
8f2e47cfd1 Set the version to 2.12.0 2021-07-11 13:12:59 -04:00
Joe R
e6fabe78a1 Updated minimal cardsets version. 2021-07-10 21:14:18 -04:00
Joe R
22f4909923 Fixed a typo. 2021-07-10 19:46:51 -04:00
Joe R
bff44bebce Fixed crash when selecting cardset without PIL. 2021-07-10 13:33:20 -04:00
Joe R
808382a7a1 Added Quatorze game. 2021-07-09 22:16:00 -04:00
Juhani Numminen
c1b7efbbf8 Appveyor: Inno Setup 6 on the current base image
Source: https://github.com/appveyor/ci/issues/2948
2021-07-08 17:46:10 +03:00
Juhani Numminen
9ff8d3b616 Appveyor: newer base image which comes with strawberryperl installed
https://www.appveyor.com/docs/windows-images-software/
https://www.appveyor.com/docs/build-environment/
2021-07-08 16:59:25 +03:00
Juhani Numminen
ac3291dbb8 Update docs 2021-07-08 16:37:32 +03:00
Juhani Numminen
e04440a625 Fix CapsLock preventing use of single-letter keybindings (issue #141)
The code block in question can be removed because Tk will decide whether it
reports us an event with e.g. Ctrl-R or just the R key.

https://www.tcl.tk/man/tcl8.4/TkCmd/bind.html
in section MULTIPLE MATCHES; "[...] the most specific binding is chosen [...]"
2021-07-08 12:20:37 +03:00
Juhani Numminen
e1ca461333 Replace Travis badge with GitHub Actions one 2021-07-07 18:13:34 +03:00
Juhani Numminen
7a85d02682 Add github actions CI 2021-07-07 18:13:34 +03:00
Juhani Numminen
515f77f0fa Fix files left open after reading 2021-07-07 18:13:34 +03:00
Juhani Numminen
2cb63cb3fc Skip all python2 tests by default
python2 is deprecated
2021-07-07 18:13:34 +03:00
Juhani Numminen
076ee8d11a Run unittests via a single TAP test
Enable standard unittest discovery by creating __init__.py files
and renaming test modules to test*.py.
2021-07-07 18:13:34 +03:00
Joe R
1de339fca9 Additional Crossword bugfix. 2021-07-05 21:29:54 -04:00
Joe R
007455af3f Updated GameDB categories. 2021-07-04 18:19:36 -04:00
Joe R
981f738df6 Added hi-res Neo cardset to the default bundle. 2021-07-04 15:18:08 -04:00
Joe R
6ab53a4a62 Added Cribbage Square game, and variations. 2021-07-04 14:48:59 -04:00
Joe R
2ccad87c26 Fix for card flipping issue in Crossword. 2021-07-04 13:06:28 -04:00
Joe R
e9b0675884 Added option to enable/disable other sound samples (the clock sound in Grandfather's Clock). 2021-06-26 11:00:39 -04:00
Joe R
2aec2ea9b1 Fix for crash in game preview. 2021-06-26 08:50:51 -04:00
Joe R
0d774623e2 Added a Hex A version of Yukon. 2021-06-20 22:06:39 -04:00
Joe R
5aa9071893 Improved playable preview display for large monitors and when working with high resolution cardsets. 2021-06-20 15:45:39 -04:00
Joe R
dcd12cd66a Added additional multi-deck game variations. 2021-06-20 13:41:31 -04:00
Joe R
25f6818496 Fix for Flake8 validation error. 2021-06-14 22:24:53 -04:00
Joe R
080b0043e3 Updated compatible cardset check to run when selecting cardsets. 2021-06-13 19:08:14 -04:00
Joe R
040d546174 Added Aces and Kings game. 2021-06-13 11:35:01 -04:00
Joe R
4ea2c1aa95 Added additional missing game rules. 2021-06-11 13:09:44 -04:00
Joe R
655c293c80 Added additional Poker Square variants. 2021-06-11 09:12:23 -04:00
Joe R
c416d42a96 Removed deal animation from preview and combined game select options. 2021-06-08 21:54:15 -04:00
Joe R
5e3f55f04e Fixed rules for Exit. 2021-06-08 18:13:09 -04:00
Joe R
3d9d074cae Added short deck Montana variants. 2021-06-05 12:31:45 -04:00
Joe R
28c77b8a83 Improved organization of relaxed variants. 2021-06-01 23:55:36 -04:00
Joe R
412e3b43a7 Fix for conflict in random number sources when restarting loaded game. 2021-06-01 18:50:03 -04:00
Joe R
84617c5083 Added King's Secrets game. 2021-05-28 23:06:08 -04:00
Joe R
1025b5402b Minor wizard utility cleanup. 2021-05-23 15:38:04 -04:00
Shlomi Fish
ba735bf1a2 Try to fix issue #177 .
See: https://github.com/shlomif/PySolFC/issues/177 - custom game wizard
failure due to bytestring vs. unicode string. Thanks to @Neelix57 and
@Butterfly for the report and some investigation.
2021-05-23 14:02:48 -04:00
Joe R
98ba9b07dc Added Precedence game. 2021-05-22 11:35:36 -04:00
Joe R
866081f46d Bugfix in playable preview. 2021-05-16 23:43:49 -04:00
Joe R
72ff4f6079 Added option to center the game layout on the screen. 2021-05-16 11:13:50 -04:00
Joe R
0b27e6fd72 Added Beehive game. 2021-05-09 18:19:16 -04:00
Joe R
6d7073b067 Organized three peaks variations. 2021-05-09 09:58:26 -04:00
Joe R
fe9ad5a64f Fixed bug and added stack labels to Camelot game. 2021-05-05 19:44:46 -04:00
Joe R
09c23f21ad Added Autumn Leaves game. 2021-05-05 17:15:54 -04:00
Joe R
58a31f8abb Added enable/disable music option. 2021-05-03 23:33:19 -04:00
Joe R
344b637194 Added missing rules for about 20 games. 2021-05-02 15:54:08 -04:00
Joe R
323fd511cb Added four deck terrace variants. 2021-05-02 10:22:16 -04:00
Joe R
86ee7c9767 Added 8 foundation variation of Take Away/Eliminator. 2021-05-01 22:52:19 -04:00
Joe R
9a7bc59c8b Removed a leading space in the "Pyramid's Stones" alternate name that was throwing off the sorting. 2021-04-27 16:54:46 -04:00
Joe R
f7c28b5011 Added Uintah game. 2021-04-27 07:43:29 +03:00
Joe R
0e1ecd1c1e Enhanced higher resolution cardset support. 2021-04-25 13:46:53 -04:00
Shlomi Fish
7436b7193b Extract a method or a function.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2021-04-25 09:21:28 +03:00
Joe R
dba55c20fd Split spread stacks logic from auto-scale logic. 2021-04-25 08:51:04 +03:00
Joe R
c792b7ff77 Added Greater Wheel, a four-deck variation of Great Wheel. 2021-04-25 08:26:48 +03:00
Joe R
bc8fc2c5b0 Improved organization of the special games category. 2021-04-23 21:33:20 -04:00
Shlomi Fish
65dfcd62ac fix runtime startup bug. 2021-04-23 18:49:13 +03:00
Joe R
9fab5f8d1f Added Crossword game. 2021-04-23 18:37:20 +03:00
Shlomi Fish
0e7ad946a6 update 2021-04-17 08:14:52 +03:00
Juhani Numminen
dbe57dda67 fix osx travis error during create-dmg step
workaround for https://github.com/create-dmg/create-dmg/issues/72

Error message on travis:

Running AppleScript to make Finder stuff pretty: /usr/bin/osascript "/var/folders/z3/_825pg0s3jvf0hb_q8kzmg5h0000gn/T/createdmg.tmp.XXXXXXXXXX.jubvb1lu" "Install PySolFC"
/var/folders/z3/_825pg0s3jvf0hb_q8kzmg5h0000gn/T/createdmg.tmp.XXXXXXXXXX.jubvb1lu:394:406: execution error: Finder got an error: AppleEvent timed out. (-1712)
Failed running AppleScript
2021-01-22 15:47:29 +02:00
Juhani Numminen
0d0b39e4bc travis: config rewrite to have osx working again
Do not attempt to run python2 tests on osx.

Homebrew updating was taking a long time, causing timeouts.

Reduced the number of homebrew formulas to cut down install time.
Some of the removed ones are already provided in the osx image.

osx_image updated because only the newer ones work without
travis's homebrew addon flag 'update: true'
https://changelog.travis-ci.com/xcode-11-3-1-xcode-11-2-1-xcode-11-1-and-xcode11-images-updated-142286

Config updated with the help of live validator:
https://config.travis-ci.com/explore

Added sudo flag "-H" to "sudo pip*" as pip suggests.

Trying to make use of cached of $HOME/perl_modules.
2021-01-22 14:34:07 +02:00
Juhani Numminen
c60a8cb577 tidyall run-tests.pl with a newer version of tidyall 2021-01-22 14:08:34 +02:00
Joe R
f91817ee51 Added additional multi-deck variations of Golf and Forty Thieves. 2020-12-13 21:36:16 -05:00
Joe R
3b53d94305 Added Hit or Miss game. 2020-12-03 17:39:58 -05:00
Guillaumegaillard
5876134d11 Make auto_scale spread non-talon stacks on canvas
make card size, scale and canvas changes independent
check scale x after change cardset
2020-11-23 16:26:22 +02:00
cardset
93793c01db Again cardset-viewer
- changed the imports
- added shebang
- changed a lot of variable names because of pylint: doesn't conform to snake_case naming style
2020-11-12 10:05:14 +02:00
cardset
afe0e080c0 Update cardset_viewer.py
Nächster Versuch
2020-11-12 10:05:14 +02:00
cardset
d6e197f8c8 Update cardset_viewer.py
Rewritten
2020-11-12 10:05:14 +02:00
Juhani Numminen
69b0cc86ff Avoid errors when options.cfg has no data
In that case res==False which was not accounted for, resulting in
AttributeError: 'bool' object has no attribute 'items'.

Closes #193.
2020-11-06 18:10:44 +02:00
Shlomi Fish
bc1023dc14 add a get-up-and-running script
See: https://sourceforge.net/p/pysolfc/discussion/503709/thread/b37cd50f/
2020-11-02 14:23:28 +02:00
Shlomi Fish
94927cbbc0 add a get-up-and-running script
See: https://sourceforge.net/p/pysolfc/discussion/503709/thread/b37cd50f/
2020-11-02 14:21:24 +02:00
Juhani Numminen
b265b28502 Enhance icon sets (.ico and .icns)
* Extract size 16x16 and 32x32 PNG's from .icns
* Put a sharper version of 128x128 in .icns
* Pack multiple icon sizes into .ico
2020-10-20 17:11:18 +03:00
Juhani Numminen
372fcba9de Window icon: Sort by largest, otherwise macOS Dock presents ugly low-res icon 2020-10-20 16:54:25 +03:00
Shlomi Fish
7da41a93be Allow to swap the mouse keys using the ini file.
See: https://sourceforge.net/p/pysolfc/discussion/503708/thread/5d77434ff8/

" PySolFC / Discussion / Open Discussion: Any way to remap mouse buttons? "

We may not have covered all the affected calls to bind().
2020-10-19 18:18:13 +03:00
Shlomi Fish
934db8da3b cleanup the last commit
Merge an identical if/else and indent comments
2020-10-19 15:00:24 +03:00
cardset
c6811cca29 Info/Settings Sliders Moved
Moved Offset Sliders to the same place as Scale Sliders. I think that makes more sense in operation and overview. It also avoids that wrong values could be saved
2020-10-19 09:14:43 +02:00
Juhani Numminen
91f785c574 Fix list of packages to install with apt-get
libperl-dev is not necessary, while the old python-glade2, python-gnome2 and python-gtk2
libraries are no longer installable in Ubuntu 20.04 LTS or Debian 10.

Update for this section requested in sf.net ticket #39; https://sourceforge.net/p/pysolfc/bugs/39/
2020-10-15 15:56:27 +03:00
Juhani Numminen
bb2769a63a Change comment which had non-runnable command in it
This was brought up on a mailing list
https://groups.google.com/d/msg/foss-card-games/uJLry-w498E/HmwiTxUkDQAJ
2020-10-15 15:32:35 +03:00
Juhani Numminen
1c79d5437e Refactor initCardsets
Make variable names descriptive.

Don't check for duplicate or empty strings in result of getSearchDirs() because
that is not necessary. Document those properties in a comment in resource.py.

Wrap try...except more closely around expressions where we want to catch.
2020-10-15 12:30:36 +03:00
Juhani Numminen
24ccdf634b macOS: use "PySolFC Help" menuitem provided by tk
The details are explained in this tutorial
https://tkdocs.com/tutorial/menus.html

For this to work, init() must destroy the tkinter.Tk instance it creates
so that was uncommented.
2020-10-14 14:59:38 +03:00
Juhani Numminen
7255ad9e68 macOS: Update travis to python 3.9 2020-10-12 23:35:15 +03:00
Juhani Numminen
451700aefa macOS: Create PySolFC.dmg for convenient installation 2020-10-12 23:35:15 +03:00
Juhani Numminen
97e981d900 macOS: ensure the application window is shown
py2app's "argv_emulation" feature prevents the Tkinter window from being shown
when PySolFC.app is launched.

This did not affect launching pysol.py using Terminal on macOS.

Solution found here: https://stackoverflow.com/questions/12992316/tkinter-py2app-created-application-doesnt-show-window-on-initial-launch
2020-10-12 23:35:15 +03:00
Juhani Numminen
d3faa78e75 Prune pysollib.macosx; it no longer had any effect 2020-10-12 23:35:15 +03:00
Juhani Numminen
07aac001b7 Clarify where a COPYRIGHT file should exist 2020-10-11 16:47:16 +03:00
Juhani Numminen
278b3261d9 Optimize cardsetparser
Apply the EAFP principle:
Regex matching was just doing extra the work because int() will check that
its argument is suitable in any case.

EAFP as in https://stackoverflow.com/questions/11360858/what-is-the-eafp-principle-in-python
2020-10-11 16:27:43 +03:00
Juhani Numminen
755b1d51d3 Remove file that shouldn't be there 2020-10-11 14:38:27 +03:00
Shlomi Fish
cb0ddeeccd use https:// link instead of mailto:
The mailto: link is available there
2020-10-11 13:27:05 +03:00
Shlomi Fish
dda2f3b520 revise some confusing phrasing 2020-10-11 13:23:14 +03:00
Shlomi Fish
d145642a9b Rename variables to make them more descriptive.
We used "lines_list" instead of "line" in singular. "list" is
the ADT ( https://en.wikipedia.org/wiki/Abstract_data_type )
rather than its python class.
2020-10-11 13:02:01 +03:00
Juhani Numminen
12601364dc Invoke init_tile() only when tile is used 2020-10-10 21:23:35 +03:00
Juhani Numminen
0be465dea1 Add error message for a missing card back (#185) 2020-10-10 21:22:58 +03:00
Neelix57
0f15613a15 fix cardset tutorial 2020-10-10 21:22:07 +03:00
Neelix57
1b14baf856 modify cardset tutorial 2020-10-10 21:21:52 +03:00
Juhani Numminen
da5b85c064 contrib/install-pysolfc.sh: pip install pygame for sound output (#180) 2020-10-08 15:10:22 +03:00
Juhani Numminen
a8a262a68c AppVeyor fix: change py2exe to pyinstaller
py2exe seems abandoned and still requires python < 3.4
while attrs does not support such an old python version anymore.

* https://ci.appveyor.com/project/shlomif/pysolfc/builds/35127928

To accommodate pyinstaller's directory layout, dist was changed to
dist/pysol in scripts/create_iss.py.

scripts/build.bat had become unmaintained and outdated.
2020-10-08 15:04:36 +03:00
Shlomi Fish
95a0d7d007 refactor/modernize the calls to open()
use "with", flags
2020-10-06 18:43:15 +03:00
Juhani Numminen
bf9ce90a5b Refactor cardset config.txt parser to a new module 2020-10-06 14:35:28 +03:00
Shlomi Fish
dfff276fc1 Rework the cardset tutorial formatting and grammar.
I hereby disclaim any implicit or explicit ownership of my changes in this
changeset, and put them under a multiple licence consisting of your choice of
one of more of:

- The CC0 / Public Domain - https://creativecommons.org/choose/zero/ .

- The MIT / Expat license - https://en.wikipedia.org/wiki/MIT_License

- The default licence of your project

Crediting me will be nice, but not mandatory, and you can change the licence
of the project without needing my permission.
2020-10-05 10:14:24 +03:00
Neelix57
55088a81bb add cardset tutorial 2020-10-04 20:46:09 +02:00
Neelix57
f35d7fb9f4 improvements
pysol_po_improvement
2020-09-30 10:59:26 +03:00
Shlomi Fish
e1d62726c5 Fix tidyall tests.
See:

https://metacpan.org/release/Code-TidyAll .
2020-09-30 10:48:47 +03:00
Shlomi Fish
05d78d5490 travis fix #1: flake8 formatting 2020-09-26 18:52:15 +03:00
Neelix57
eff7beacee Add files via upload 2020-09-26 12:18:14 +03:00
Neelix57
4be8f02a4e Add files via upload 2020-09-26 12:18:14 +03:00
Neelix57
f1baad5347 gen-html.py translation 2020-09-26 12:18:14 +03:00
Shlomi Fish
9708704b87 Remove trailing whitespace.
See:

* http://www.shlomifish.org/lecture/C-and-CPP/bad-elements/#trailing-whitespace

* http://vim.wikia.com/wiki/Highlight_unwanted_spaces
2020-09-20 16:02:26 +03:00
Neelix57
58d43d12fb upload rules 2020-09-20 15:55:00 +03:00
Neelix57
6fb107547a upload rules 2020-09-20 15:55:00 +03:00
Neelix57
bbb4c6c0f1 improvements 2020-09-20 10:49:05 +02:00
Shlomi Fish
3f84e44121 Add French help translation ( by Eric / Neelix57 )
Thanks, Eric!

Translation of the help pages / manual.
2020-09-10 13:03:08 +03:00
Shlomi Fish
622d881a34 Add French translation ( by Eric / Neelix57 )
Thanks, Eric!
2020-09-07 17:20:38 +03:00
Shlomi Fish
ee282b6219 document how to submit changesets 2020-09-07 11:21:16 +03:00
Shlomi Fish
39d59547af flake8 compliance 2020-09-07 11:20:53 +03:00
Shlomi Fish
b24da7cc92 Gracefully handle pypi pysol_cards dependency
See:
https://sourceforge.net/p/pysolfc/discussion/503708/thread/208461caee/

Thanks to Fred.
2020-08-27 12:04:42 +03:00
Shlomi Fish
e2c11a7ba0 fix flake8 + tidyall tests 2020-08-27 11:52:59 +03:00
Shlomi Fish
e9e19afc46 Use freecell-solver wo which fc-solve.
No need for the executable if freecell_solver.py exists and
can be instantiated.
2020-06-24 16:59:40 +03:00
Shlomi Fish
bb8785e76b prepare for the new release 2020-06-22 13:28:22 +03:00
Shlomi Fish
38def5a0e7 optimize by using .recycle() 2020-06-20 13:45:48 +03:00
Shlomi Fish
18a460a1e7 implement black_hole_solver lib. 2020-06-19 16:19:12 +03:00
Shlomi Fish
7eb29a216f refactoring: del some unhelpful comments 2020-06-18 12:45:38 +03:00
Shlomi Fish
b518678d8d extract a method which delegates 2020-06-18 12:07:35 +03:00
Shlomi Fish
41c2633fcd update the solver iter and states counts. 2020-06-18 11:55:41 +03:00
Shlomi Fish
3de9955879 try2fix flake 8 tests [travis/etc.] 2020-06-17 20:53:11 +03:00
Shlomi Fish
db348ee91b trap import error better [fix] 2020-06-17 20:15:39 +03:00
Shlomi Fish
fcc55dfe56 refactoring: avoid underused vars 2020-06-17 20:11:54 +03:00
Shlomi Fish
697f15c9df convert to .format() 2020-06-17 14:22:39 +03:00
Shlomi Fish
d9efba4456 Refactoring / code cleanup.
See:

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2020-06-17 13:48:48 +03:00
Shlomi Fish
14d4c0c509 rename 2020-06-17 13:17:30 +03:00
Shlomi Fish
fa85fbdadd fix simple simon solver 2020-06-17 13:07:48 +03:00
Shlomi Fish
e49c3a153f rename and persist across invocations 2020-06-17 12:42:16 +03:00
Shlomi Fish
1ee67d9ca8 add not(use_lib) to fix subsequent solving 2020-06-17 11:50:12 +03:00
Shlomi Fish
c96d25d628 disable a debug print() call 2020-06-17 11:43:06 +03:00
Shlomi Fish
556ceed9a6 stringify "args" list 2020-06-17 10:21:02 +03:00
Shlomi Fish
2a04901a77 fix flake8 tests 2020-06-17 10:04:31 +03:00
Shlomi Fish
faf8341c5e fix cmd line args 2020-06-16 22:57:16 +03:00
Shlomi Fish
f998b53d79 fix ncards 2020-06-16 22:35:59 +03:00
Shlomi Fish
fee9f6e20e WiP support for using solvers' DLLs 2020-06-16 22:29:42 +03:00
Shlomi Fish
653e84b049 avoid duplicate code. 2020-06-16 10:34:05 +03:00
Shlomi Fish
d04601ad1c add a test for ScorpionTail_RowStack.
A similar bug was fixed in Scorpion_RowStack.
2020-06-16 10:34:05 +03:00
Shlomi Fish
730ecf775b Fix for ScorpionTail in python3.
It is hacky and there may be many similar bugs.

See https://github.com/shlomif/PySolFC/issues/164 .

It also needs tests.
2020-06-16 10:34:05 +03:00
Shlomi Fish
8e4ed1e157 Tentative fix for Scorpion Tail/etc. play.
See https://github.com/shlomif/PySolFC/issues/164

Thanks to @Arcorann. Needs tests.
2020-06-16 10:34:05 +03:00
Shlomi Fish
408a8fbb08 fix flake8 tests 2020-06-12 07:07:31 +03:00
Shlomi Fish
478fa82e86 fixed already 2020-05-29 15:31:40 +03:00
Shlomi Fish
7e6cf5694b remove unused and bad "tests" - see tests/ 2020-05-29 15:30:38 +03:00
Shlomi Fish
3653a51176 fix in pysol-cards.py now 2020-05-27 09:17:40 +03:00
Shlomi Fish
a219bdb29c temp fix for reset() in pysolfc/mtrandom deals.
See: https://github.com/shlomif/PySolFC/issues/163 . Thanks
to @RobertAJMarshall .
2020-05-27 09:10:25 +03:00
Robert Marshall
e43dcb207c Avoid an unexpected pause state around stats 2020-05-26 18:58:46 +01:00
Shlomi Fish
2437c702fd extract more code to pysol_cards 2020-05-26 18:56:14 +03:00
Shlomi Fish
467a0f14e0 remove an old comment 2020-05-25 15:06:39 +03:00
Shlomi Fish
88cdccea5b extract more code to pysol_cards 2020-05-25 14:51:49 +03:00
Shlomi Fish
7914c6e805 extract more code to pysol_cards 2020-05-25 14:50:45 +03:00
Shlomi Fish
3ef4b3c6dc extract more code to pysol_cards 2020-05-25 14:20:15 +03:00
Shlomi Fish
12cf1e507f Rename variable/s to make them more descriptive. 2020-05-25 14:06:08 +03:00
Shlomi Fish
b311ff83fd extract more code to pysol_cards 2020-05-25 13:47:16 +03:00
Shlomi Fish
a8fd45e2f8 extract more code to pysol_cards 2020-05-25 13:42:02 +03:00
Roderik Ploszek
068d72d634 test Windows version in the installer
Windows XP SP3 or higher is required
see issue #161
2020-05-25 11:30:25 +02:00
Shlomi Fish
b6f014f6e0 extract more code to pysol_cards 2020-05-25 12:15:49 +03:00
Shlomi Fish
c4545ab114 extract more code to pysol_cards 2020-05-25 11:49:15 +03:00
Shlomi Fish
3ca47be6e2 refactor: remove unused code 2020-05-25 11:26:05 +03:00
Shlomi Fish
bea4266889 refactor: clean up imports 2020-05-25 11:24:27 +03:00
Shlomi Fish
7896974496 refactor: remove unused code 2020-05-25 11:17:38 +03:00
Shlomi Fish
91ef2ca74e extract more code to pysol_cards 2020-05-24 22:13:09 +03:00
Robert Marshall
c5864cc0f6 Pause when showing stats
.. stats is modal so clock shouldn't be ticking
2020-05-09 16:37:20 +03:00
Shlomi Fish
0ac4339252 Require a minimal version of "attr".
See: https://github.com/shlomif/PySolFC/issues/159 . Thanks to
@radub7 for the report.
2020-04-22 20:21:10 +03:00
Shlomi Fish
39f181e087 Python2 compatibility: travis rebuild for new pysol-cards 2020-03-28 16:08:42 +03:00
Shlomi Fish
e615b64dfc typo 2020-03-28 15:22:22 +03:00
Shlomi Fish
f1aedee62c move to upstream PyPI pysol_cards 2020-03-28 14:57:17 +03:00
Shlomi Fish
4ee74a3e2a move to upstream PyPI pysol_cards 2020-03-28 14:55:09 +03:00
Shlomi Fish
5b80116b69 move to upstream PyPI pysol_cards 2020-03-28 14:39:00 +03:00
Shlomi Fish
7d55cd045c move to upstream PyPI pysol_cards 2020-03-28 14:34:12 +03:00
Juhani Numminen
e1a1a8d169 Retire pysol.xbm & .xpm & the unused code that uses them 2020-03-11 14:57:28 +02:00
Shlomi Fish
2ea33f8e7a new 2.8.0 release 2020-03-05 17:45:29 +02:00
Juhani Numminen
fb8d69b1c8 travis osx: Install python3 from python.org & build Pillow from source
Unlike python of Homebrew, the python.org version comes bundled with
a recent Tk that is much less buggy than macOS stock Tk.

py2app does not seem to work with Pillow's pypi wheels.
2020-03-03 09:06:35 +02:00
Juhani Numminen
dc86d9338d Work around Playable Preview launching unresponsive help window 2020-03-02 14:38:49 +02:00
Juhani Numminen
12ca8c5535 Playable preview: swap incorrect actions for Rules and Cancel buttons
Line 435 assigns id 10 (not 1) to the Rules button.
2020-03-02 14:09:21 +02:00
Juhani Numminen
6016a6a5c1 No such thing as pysollib.app.comments (#153) 2020-03-02 13:21:35 +02:00
Juhani Numminen
300d5dca7a Fix command line option error message
TypeError: unsupported operand type(s) for +: 'GetoptError' and 'str'
caused by commit 65b86f2d1d
2020-03-01 12:07:48 +02:00
Juhani Numminen
0d98da15e6 Fix py2 compatibility: wm_iconphoto does not exist in python2.7 2020-03-01 11:42:43 +02:00
Juhani Numminen
e5e60d3232 Load icons from either images/misc or images/icons 2020-02-29 11:40:05 +02:00
Juhani Numminen
f5b1cf0eea Tk: set window icon
make_help_toplevel changed from Tk to Toplevel since Tk creates another
Tcl interpreter, causing errors like this:
'_tkinter.TclError: can't use "pyimage228" as iconphoto: not a photo image'

1024x1024 logo file is renamed because it has large margins on each side
which is unsuitable for a window icon.
2020-02-28 20:16:58 +02:00
Shlomi Fish
a34e169031 Prepare for 2.8.0 release.
See https://github.com/shlomif/PySolFC/issues/151 .

Not releasing yet.
2020-02-28 16:54:34 +02:00
lufebe16
e09efe375e Apk build scripts
- refactoring
2020-02-27 20:15:14 +01:00
Shlomi Fish
1365523131 appveyor: fix invocation 2020-02-27 19:57:15 +02:00
Shlomi Fish
864e7b9b52 pin the fcs version - reproducible builds 2020-02-27 19:28:11 +02:00
Shlomi Fish
25f1b222a1 fix tidyall/flake8 tests 2020-02-27 19:27:41 +02:00
lufebe16
ad79d2429f Apk build scripts
- updated for use with p4a version 2019.10.6.
- additions to build instructions.
2020-02-27 15:39:11 +01:00
lufebe16
11aff68af1 Updates kivy version:
- added support for right mouse button (desktop only)
- corrected a problem with virtualenv in mkp4a.init
2020-02-27 09:56:51 +01:00
Shlomi Fish
2983648a4c Add python3 PATH for pip3 on macOS.
The travis-CI builds have been failing and this is an attempt to fix them.
2020-02-23 15:24:43 +02:00
Shlomi Fish
047a58238d Add python3 to homebrew on macOS.
The travis-CI builds have been failing and this is an attempt to fix them.
2020-02-23 14:22:46 +02:00
Shlomi Fish
96a91f6148 SHOULD_PUT_bye_for_now_FIRST = False
To avoid complaints about non random music.
2020-02-23 12:30:37 +02:00
Juhani Numminen
984ab3570a Import ttk from standard library, drop local copy 2020-02-11 23:38:28 +02:00
Juhani Numminen
97c957d055 Fix whitespace in pyramid.py 2020-02-11 22:10:00 +02:00
lufebe16
81fab2028a Corrections on game 'pyramid'
- For TypeError reported with #147. (clickhandler failed to return a value)
- For index out of range (in pyramid.y)
2020-02-10 18:01:20 +01:00
Juhani Numminen
80d99e508d Fix 'TclError: unknown option' for tk
Partly reverts commit b9a46ecf35
2020-02-09 22:19:47 +02:00
Juhani Numminen
032b645e0f Do not catch exceptions too broadly in mainloop
StopIteration seems to be the expected way to stop, at least
for the tk and tile interfaces.
2020-02-09 22:07:16 +02:00
Juhani Numminen
00f6f70e93 Fix menu colors on macOS with dark menu bar
Widget colors and all scrollbars look just fine without these lines
despite the comments.
2020-02-09 17:36:26 +02:00
Shlomi Fish
57b9c9d41e fix a crash on "open game" 2020-02-09 11:44:52 +02:00
Shlomi Fish
2258274c77 Refactoring / code cleanup.
Use a frozenset()-like list.

See:

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2020-02-07 11:44:24 +02:00
Shlomi Fish
0306d648fa fix load/save 2020-02-07 11:31:34 +02:00
Juhani Numminen
d807f2c45c README: Change venv to reference PKGTREE and list more pre-requisites (#149) 2020-02-03 11:08:42 +02:00
Juhani Numminen
468553b3c5 install-pysolfc.sh: Use bash array for holding a program name and arguments
The previous scalar variable with quoted "$PIP" caused a "command not found"
error because that erroneously put prog name and arguments in a single token.
2020-02-03 10:56:59 +02:00
Shlomi Fish
c2ec2d5195 Add 13 column Bisley - thanks to qunka.
See:

* https://github.com/shlomif/PySolFC/issues/148

* https://gist.github.com/qunka/3adac1878b481eb419ff6f3e1726add5

Thanks to https://github.com/qunka .
2020-01-07 11:38:37 +02:00
Shlomi Fish
b3f79c9df8 Extract a function or class to step away from God Object.
See:

* https://en.wikipedia.org/wiki/God_object

* https://www.c-sharpcorner.com/article/god-object-a-code-smell/ .

This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-12-30 20:38:25 +02:00
Shlomi Fish
fab74e9a4b Extract a function or class to step away from God Object.
See:

* https://en.wikipedia.org/wiki/God_object

* https://www.c-sharpcorner.com/article/god-object-a-code-smell/ .

This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-12-29 11:37:13 +02:00
Shlomi Fish
b250a567ae avoid leftover py2 test files. 2019-12-29 11:13:52 +02:00
Shlomi Fish
0f662fdb12 Extract a function or class to step away from God Object.
See:

* https://en.wikipedia.org/wiki/God_object

* https://www.c-sharpcorner.com/article/god-object-a-code-smell/ .

This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-12-29 11:08:56 +02:00
Shlomi Fish
c017d36bd5 appveyor fix #1 - temply invalidate caches 2019-12-27 21:46:17 +02:00
Topi Miettinen
d2964fad0a
Skiz help: fix typo
decending -> descending
2019-12-22 10:57:02 +02:00
Shlomi Fish
d7c87ca066 move functionality to pysol-cards PyPI module 2019-12-10 12:14:31 +02:00
Shlomi Fish
0961401105 fix tests 2019-11-13 08:39:59 +02:00
Topi Miettinen
e65c236dc9
Describe order of Ganjifa suits
Help for Dashavatara Ganjifa games refer to general Ganjifa help for
order of suits, but it was actually missing.
2019-10-27 12:44:49 +02:00
lufebe16
063c35db0d Android build script adaptations. 2019-10-15 16:17:31 +02:00
lufebe16
70fedf618a Added android permission request dialog 2019-10-14 19:58:22 +02:00
lufebe16
64cd1b73f2 Double tap added to cardselection (kivy toolkit)
- fixes issue #117
2019-10-02 11:35:56 +02:00
lufebe16
92f2d5f602 fixed2: allow game restore to accept older storage format. 2019-09-27 11:24:03 +02:00
lb@lb7520
97267e9a77 fixed: restore game 2019-09-26 12:21:58 +02:00
lb@lb7520
263858838f language selection
- option 'language' added to option section 'general'
- language selection code in kivy menubar
- mygettext refactored
- translations (german) updated
2019-09-25 19:46:17 +02:00
lb@lb7520
4a297ee434 german translations (revised) 2019-09-24 16:48:41 +02:00
lb@lb7520
6cc0ff767c german translations (mainly kivy/android related)
- updated kivy/android files
- executed 'make pot' to update message-ids
- german translations added
2019-09-23 19:55:50 +02:00
Juhani Numminen
ef0c45841d Update translations after string changes 2019-08-31 13:22:21 +03:00
Juhani Numminen
65b86f2d1d Improve internationalization
- More strings marked for translation
- Used format strings instead of concatinating fragments
- Removed space before '?' or '!' from sentences in English

Following the GNU gettext guidelines at
https://www.gnu.org/software/gettext/manual/gettext.html#Preparing-Strings
2019-08-31 13:22:21 +03:00
Shlomi Fish
34609fc9d2 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-08-29 16:55:47 +03:00
Shlomi Fish
5bc41f5614 Add more items to "how you can contribute". 2019-08-29 15:54:34 +03:00
Shlomi Fish
a472160ca7 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-08-27 21:32:20 +03:00
Juhani Numminen
a5d584371e Refactor and comment locale_dir selection 2019-08-20 16:23:05 +03:00
Juhani Numminen
93c9535216 Detect LANG for gettext on android 2019-08-20 11:54:49 +03:00
Juhani Numminen
8bef9848a5 setup*.py: Install locale/ also on macOS and Windows 2019-08-20 11:54:49 +03:00
lb@lb7520
bd4be45118 Changes to apk build procedures used with fdroid build.
- mkp4a.init: 1 optional parameter
- mkp4a.unsigned: 2 paramters (sdk and ndk paths)
- mkp4a.preload: new helper script
2019-08-20 10:04:55 +02:00
Shlomi Fish
a8dbceec93 valid xhtml5 2019-08-16 16:30:39 +03:00
Shlomi Fish
b5224318ae Fix the website build.
See https://github.com/shlomif/pysolfc-website/ - do not remove.
2019-08-16 15:42:49 +03:00
Shlomi Fish
cbae7ebbf5 gnumakefile cleanup. 2019-08-16 15:29:09 +03:00
Shlomi Fish
052318895e Update .gitignore: add generated files or remove old. 2019-08-16 15:08:31 +03:00
Shlomi Fish
7bbacfb97e Extract a method or a function.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-08-14 20:49:03 +03:00
Shlomi Fish
0ffcc12afc Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-08-14 19:42:24 +03:00
Shlomi Fish
9b0b862406 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-08-14 18:25:34 +03:00
Shlomi Fish
23843dc2a8 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-08-14 17:59:27 +03:00
lb@lb7520
18febbe240 cardconv updated.
png images converted from gifs by IM resulted in an indexed png format. This
lead to Problems with tranparency, especially with ganijfa and hanafuda
cardsets. To circumvent these problems IM had to be advised to produce
32 bit mode rgba format.
affects android apk build process only.
2019-08-13 10:00:49 +02:00
lb@lb520
5b75c1b413 Further corrections to python3 / android. Card images format has been changed to png. And a bugfix. 2019-08-12 09:50:38 +02:00
lb@lb520
81da718007 additional deletes in mkp4a.init to allow apk builds out of the repo
fix for a gradle bug (in mkp4a.common)
2019-08-09 11:16:31 +02:00
Juhani Numminen
fdebf13171 android: adapt to python3.
android: Install p4a using pip
Add 'set -e' to sh scripts, they must stop upon any error
README.md: kivy does not specifically require python2
android: Overhaul initialization scripts
android: Simplify apk build scripts by using the 'common' file
Merge the scripts cardconv and cardsetsgiftobmp
android: Fix startup script shebang to python3
android: Simplify mkkeystore and ignore the keystore file
android: Fix up debian prerequisites

The package cython (as opposed to cython3) even caused me to produce
an apk that did not start (TypeError: must be str, not bytes).

Android SDK requires java8; install and set as the default.

The build processes complained about lld and libtinfo5; added in.

mercurial (or hg) is seemingly unused.

The pip pcakges were needed by android/initsdk.py which is gone.

android: Ensure that the html files are built
2019-08-08 19:12:44 +03:00
Shlomi Fish
15365f6267 moved functionality to pysol-cards.py 2019-08-08 18:44:49 +03:00
Shlomi Fish
c71c2fa07a Fix the 'picturegallery' game.
See https://github.com/shlomif/PySolFC/issues/140 . Thanks to
@scottfurry for testing.
2019-08-07 12:28:29 +03:00
Juhani Numminen
836eb54008 Add an error message to pysol_cards version check 2019-08-06 20:07:30 +03:00
Shlomi Fish
fd5bf10ddd moved functionality to pysol-cards.py 2019-08-04 18:47:19 +03:00
Shlomi Fish
0082962a93 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-07-31 16:10:28 +03:00
Shlomi Fish
4d61d73f3a consolidate diffs 2019-07-30 12:37:22 +03:00
Shlomi Fish
6b228291cc update to latest pypi ver 2019-07-30 12:36:31 +03:00
Juhani Numminen
52348a4daa travis: Simplify pip install step 2019-07-28 22:28:56 +03:00
Juhani Numminen
d1e1e436a1 travis: Change language from python to generic
Travis's python virtualenv setup does not help too much in our case
because we use both python2 and python3 while travis will setup the
virtualenv for only one at a time.
2019-07-28 22:28:56 +03:00
Juhani Numminen
76882c9dd1 travis: linux: Use alternative way to install deps, apt addon is not working anymore?!
Strip down some dependencies:
 - libperl-dev is not used.
 - perl will come with cpanminus.
 - make is installed in Travis' ubuntu image anyway.
 - python3 will follow from the python3-* modules.
 - Explicitly mention python-pip.
2019-07-28 22:28:56 +03:00
Juhani Numminen
e80c3637dd travis: osx: Do not set CPPFLAGS etc, nothing will be compiled 2019-07-28 22:28:56 +03:00
Juhani Numminen
edf3470dfe travis: Change Ubuntu 14.04 to 18.04 2019-07-28 22:28:56 +03:00
Juhani Numminen
dbe4a96ac9 repack-min-cardsets: Remove temporary directory before copying (github #135)
If the directory is not removed, on the second run of the script,
duplicated subdirectories will be created, e.g.
    $dest_vbase/cardset-standard/cardset-standard/
that will essentially double the unpacked size.
2019-07-28 19:06:36 +03:00
Shlomi Fish
bc93657311 fix flake8 tests 2019-07-28 10:19:56 +03:00
Frédéric Brière
0abb801203 Define canMoveCards() for Hanafuda sequence stacks
Any stack of Hanafuda cards is always deemed movable, even if it is out
of sequence.  The effect can easily be seen a game such as Firecracker,
where:

 - Any stack can be dragged as a whole (but not released)
 - "Highlight piles" will highlight everything
 - Asking for a hint will ignore most valid moves

This is due to Hanafuda_SequenceStack lacking a canMoveCards() method.
2019-07-28 10:15:38 +03:00
Juhani Numminen
26631a7a22 Remove checks for individual cardsets' COPYRIGHT files
It is not strictly necessary to check the presence of the COPYRIGHT file
since pysollib/{tile,tk}/selectcardset.py will work even if it's missing.

In the Debian package, individual COPYRIGHT files are missing as all license
information should be in one file anyway, /usr/share/doc/pysolfc/copyright.

Thanks to Bernhard Reiter who originally wrote this patch:
https://salsa.debian.org/games-team/pysolfc/blob/87493fb/debian/patches/remove_checks_for_copyright_files
2019-07-28 10:05:05 +03:00
Juhani Numminen
1137dbb39b Improve Filesystem Hierarchy Standard compliance
These are actually for binaries, not data:
/usr/games       "Games and educational binaries"
/usr/local/games "Local game binaries"

The directories for the data:
/usr/share/games "Static data files for /usr/games"

"The requirements for the contents of [/usr/local/share] are the same as for
/usr/share."

Quoting https://refspecs.linuxfoundation.org/FHS_3.0/fhs-3.0.html
2019-07-28 10:05:05 +03:00
Shlomi Fish
70e1159947 consolidate diffs 2019-07-28 08:35:40 +03:00
Shlomi Fish
3c93a19508 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-07-26 16:21:07 +03:00
Shlomi Fish
602f9ebc93 add missing attribute.
See https://github.com/shlomif/PySolFC/issues/129 .
2019-07-26 00:04:07 +03:00
Shlomi Fish
b785d35e0b Add missing package - 'game'.
See https://github.com/shlomif/PySolFC/issues/130 .

Thanks to @scottfurry .
2019-07-25 23:27:49 +03:00
Shlomi Fish
fb4f801ecc minimal ver of pysol_cards.
See https://github.com/shlomif/PySolFC/issues/128 .
2019-07-25 20:04:36 +03:00
Shlomi Fish
4929787315 fix travis failures. 2019-07-24 11:56:39 +03:00
Shlomi Fish
e1d461b78d moved functionality to pysol-cards.py 2019-07-24 02:35:54 +03:00
Shlomi Fish
6dd98f5984 Extract a function or class to step away from God Object.
See:

* https://en.wikipedia.org/wiki/God_object

* https://www.c-sharpcorner.com/article/god-object-a-code-smell/ .

This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-07-22 14:31:56 +03:00
Shlomi Fish
198038b1c9 moved functionality to pysol-cards.py 2019-07-21 11:27:58 +03:00
Juhani Numminen
52eeb40942 Makefile: On Windows, use ; as path separator instead of : 2019-07-19 01:38:40 +03:00
Juhani Numminen
acbf11de31 Remove extraneous plurals from po/de*, add msgfmt checks 2019-07-19 01:38:40 +03:00
Juhani Numminen
45f8c312a4 Simplify po/pysol.pot generation 2019-07-19 01:38:40 +03:00
Juhani Numminen
81432ef353 Split de.po into de_pysol.po and de_games.po
All the other languages are that way.
2019-07-19 01:38:39 +03:00
Juhani Numminen
1b89ae2346 Improve Makefile
The PYTHONPATH is now set centrally, except for the tests.
Environment for the tests is prepared using target-specific variables.
https://www.gnu.org/software/make/manual/make.html#Target_002dspecific

To ensure exiting on command failure, "set -e" is added before loops,
and otherwise ";" is replaced with "&&" between commands.
https://www.debian.org/doc/debian-policy/ch-source.html#error-trapping-in-makefiles

"mkdir -p" does not need an existence test beforehand.

Changed all python invocations to python3.

LANG and PYSOL_DEBUG were never exported so they probably had no effect.
Removed for simplicity.
2019-07-19 01:38:39 +03:00
Juhani Numminen
0b5698dff0 Generate all_games.html in the data/html directory 2019-07-19 01:38:39 +03:00
Shlomi Fish
dba230b40a moved functionality to pysol-cards.py 2019-07-18 21:35:45 +03:00
Shlomi Fish
6d4a1191cc Refactoring / code cleanup.
See:

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-07-18 14:43:58 +03:00
Juhani Numminen
c9de855dd8 Install icons to standard locations for linux desktop
Also reorganize icons in subdirectories indicating size.

See the Icon Theme Specification:
https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#install_icons
2019-07-18 11:09:08 +03:00
Shlomi Fish
9a51c55402 list prereqs.
See https://caremad.io/posts/2013/07/setup-vs-requirement/ .
2019-07-16 21:03:51 +03:00
Juhani Numminen
3e873a3fde Delete local copy of configobj in favor of the pypi package
The "validate" module does come in the same pypi package.
2019-07-16 12:57:24 +03:00
Shlomi Fish
7934babad2 Extract a method or a function.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-07-15 17:17:04 +03:00
Shlomi Fish
62005c7c42 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-07-15 14:17:03 +03:00
Shlomi Fish
c30d131181 install the attrs.py deps. 2019-07-15 12:52:19 +03:00
Shlomi Fish
18efc0e5d3 Extract a common class/struct.
This is Refactoring / code cleanup.

See:

* https://en.wikipedia.org/wiki/God_object

* https://en.wikipedia.org/wiki/Extract_class

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-07-14 22:56:06 +03:00
Juhani Numminen
63c6aa5816 Don't duplicate locales, e.g. de -> de_DE
The duplication seems to be unnecessary. Setting environment variable
LANG=it_CH gives Italian as PySolFC language, even if we didn't explicitly
create 'it_CH'.
2019-07-14 14:02:43 +03:00
Juhani Numminen
5062f0e0d9 Install all translations, not only Russian 2019-07-14 14:02:32 +03:00
Shlomi Fish
0aad4261d8 appveyor fix #1 - os.sep 2019-07-14 08:58:46 +03:00
Juhani Numminen
c13b8587fc
Update pysol.desktop for unix desktop integration
Encoding has been deprecated - see https://specifications.freedesktop.org/desktop-entry-spec/1.0/apc.html

StartupWMClass adds a startup animation. xprop was used to find out the value for WM_CLASS; it was tested on KDE Plasma 5.
2019-07-13 16:53:14 +03:00
Shlomi Fish
41b4e75f15 fix travis / dist tests. 2019-06-24 18:12:24 +03:00
Shlomi Fish
69a2036f94 remove pointless comments 2019-06-24 17:23:13 +03:00
Shlomi Fish
7cb6d9c8b5 extract a method. 2019-06-24 16:53:57 +03:00
Shlomi Fish
fd797ffbf5 fix pysol --deal 1/24/1000.
Low ms deals without the ms prefix caused an error.
2019-06-05 15:06:51 +03:00
Shlomi Fish
4a53c175f5 Extract ms_rearrange . 2019-06-05 15:00:12 +03:00
Shlomi Fish
86d2e6368f speedup.
See https://github.com/shlomif/PySolFC/issues/119 .
2019-06-04 22:31:27 +03:00
Shlomi Fish
843d74d90f Extract a function or class to step away from God Object.
See:

* https://en.wikipedia.org/wiki/God_object

* https://www.c-sharpcorner.com/article/god-object-a-code-smell/ .

This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-06-04 16:05:10 +03:00
Shlomi Fish
ebbb1313e9 refactoring 2019-06-04 15:36:45 +03:00
Shlomi Fish
7bbddccf80 refactoring 2019-06-04 15:27:37 +03:00
Shlomi Fish
d8e7a3e3ef Extract a function or class to step away from God Object.
See:

* https://en.wikipedia.org/wiki/God_object

* https://www.c-sharpcorner.com/article/god-object-a-code-smell/ .

This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-06-04 15:12:39 +03:00
Shlomi Fish
c12be2eaed optimization 2019-05-31 19:28:27 +03:00
Shlomi Fish
b6da50d20f Extract a function or class to step away from God Object.
See:

* https://en.wikipedia.org/wiki/God_object

* https://www.c-sharpcorner.com/article/god-object-a-code-smell/ .

This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-05-31 19:23:27 +03:00
Shlomi Fish
75ffea5005 Extract a method or a function.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-05-31 18:32:47 +03:00
Shlomi Fish
a073d20af7 Refactoring / code cleanup.
See:

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-05-31 18:09:57 +03:00
Shlomi Fish
9acc97be8a Refactoring / code cleanup.
See:

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-05-31 17:22:49 +03:00
Shlomi Fish
26e5aeb045 Rename variable/s to make them more descriptive.
dir is a py builtin.
2019-05-31 16:42:57 +03:00
Shlomi Fish
32411ab0ec Refactoring. 2019-05-31 16:32:24 +03:00
Shlomi Fish
efddc917b2 Extract a method or a function.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-05-31 16:03:22 +03:00
Shlomi Fish
2bec58be2d Fix next deal / Ctrl+N for ms deals. 2019-05-23 19:10:57 +03:00
Shlomi Fish
74441a1746 Convert functionality to pysol-cards mod. 2019-05-23 17:26:27 +03:00
Shlomi Fish
4853b2dc5f pickle backcompat. 2019-05-16 18:46:05 +03:00
Shlomi Fish
2d60bdf726 travis / py3 fix - str.replace. 2019-05-05 21:16:07 +03:00
Shlomi Fish
6fbbe82593 Link to PySolFC-Cardsets.
See https://github.com/shlomif/PySolFC/issues/113 .
2019-05-05 18:34:32 +03:00
Shlomi Fish
76804c6d76 flake8 2019-04-30 18:25:01 +03:00
Shlomi Fish
9142b90cb2 Refactoring / code cleanup.
Remove the unused "Comments" class.

See:

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-04-30 17:49:36 +03:00
Shlomi Fish
ea73eb32a3 refactoring 2019-04-30 17:40:18 +03:00
Shlomi Fish
6317008876 traverse the tree for matching modules.
To avoid misses.
2019-04-30 17:35:43 +03:00
Shlomi Fish
33c8f6e375 add tests. 2019-04-30 17:20:47 +03:00
Shlomi Fish
824407b136 Extract a common module/library/header.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-04-30 17:14:57 +03:00
Shlomi Fish
9af86cddfb Extract a common module/library/header.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-04-29 15:14:36 +03:00
Shlomi Fish
90323173a7 Extract a common module/library/header.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2019-04-29 15:08:04 +03:00
Shlomi Fish
9e148b88fe implement the --deal command line param.
It implements a starting deal seed/index/number.
2019-04-29 14:51:01 +03:00
Shlomi Fish
da256a30b0 use normal print to avoid b"...". 2019-04-29 14:25:04 +03:00
Shlomi Fish
cb25f39136 abort on invalid command line game. 2019-04-29 14:24:21 +03:00
Shlomi Fish
4cb94702f3 Add the release process documentation. 2019-04-25 22:22:49 +03:00
Shlomi Fish
436bca2852 Add missing NEWS and AUTHORS to the source dist. 2019-04-25 22:06:16 +03:00
Shlomi Fish
918f177acc prepare for v2.6.4 release. 2019-04-25 21:23:56 +03:00
Roderik Ploszek
9bf8f475bb Fix Three Peaks scoring
Score is correctly updated after moving a card to the waste stack or
after winning a game. Double counting is prevented by the score_counted
variable.

see https://github.com/shlomif/PySolFC/issues/111
2019-04-22 09:28:18 +02:00
Shlomi Fish
961634e685 travis ci: fix #1 - failing tests 2019-04-08 20:03:53 +03:00
Shlomi Fish
3ce505826e add credits 2019-04-08 19:03:49 +03:00
Shlomi Fish
d082812426 convert to markdown 2019-04-08 18:53:24 +03:00
Shlomi Fish
d3561e0e77 merge differences between */toolbar.py.
Refactoring.
2019-04-08 18:34:27 +03:00
Shlomi Fish
a452aba812 update the logo url in the html. 2019-04-08 17:45:44 +03:00
ghostofiht
1477ee275e
logo updated 2019-04-08 16:28:17 +03:00
ghostofiht
a54b87c722
Delete logo_horizontal.svg 2019-04-08 16:28:03 +03:00
ghostofiht
dbba3af299
logo updated 2019-04-08 16:24:46 +03:00
ghostofiht
18b4171e7f
Delete logo_horizontal.png.svg 2019-04-08 16:24:33 +03:00
ghostofiht
24ff063652
logo updated 2019-04-08 16:23:40 +03:00
ghostofiht
f919ff690e
logo added 2019-04-08 15:52:58 +03:00
ghostofiht
4126d48c78
logo updated 2019-04-08 15:46:47 +03:00
Shlomi Fish
0696750457 bump version to 2.6.3 2019-04-07 13:40:31 +03:00
Shlomi Fish
7593aaed4c First version of the NEWS file.
Based on the site's front page - thanks to https://pandoc.org/ .
2019-04-06 21:48:38 +03:00
Shlomi Fish
1d3ffc4e1d Try fixing issue #108 - compat with pillow 6.0
See https://github.com/shlomif/PySolFC/issues/108 .
2019-04-05 17:37:04 +03:00
Shlomi Fish
2e67242e92 Fix the window size on startup.
See https://github.com/shlomif/PySolFC/issues/84 :

<<<

Yes, I can confirm that the "Save games geometry" option is present in
that build, and that it works! +1

The default startup window looks like this though (which is something
that should be addressed):

>>>
2019-04-05 16:26:55 +03:00
Shlomi Fish
48e24c2021 try fix save games geometry.
See https://github.com/shlomif/PySolFC/issues/84 .
2019-04-04 13:11:44 +03:00
Shlomi Fish
80252696c8 try restore Save game geometry on USE_PIL.
See https://github.com/shlomif/PySolFC/issues/84 .
2019-04-04 12:39:24 +03:00
Shlomi Fish
5438388789 ignore the cardset files.
See https://github.com/shlomif/PySolFC/issues/101 . Thanks to
@scottfurry .
2019-04-04 01:54:23 +03:00
Shlomi Fish
4deb3ebb58 bump the version to 2.6.2 2019-02-27 22:52:26 +02:00
Jonathan Lovelace
f9a09f864e .travis.yml: Download minimal cardset tarball from SourceForge and include its cardsets in packages. 2019-02-22 01:01:35 -05:00
Jonathan Lovelace
efd87e1257 Brewfile: Install a current version of Perl.
The one used by default seems to be 5.18, which while not _very_ old (released 2013 or 2014,
depending on which patch version) seems a likely cause of the test failures I'm seeing in
CI but am unable to reproduce in my Linux environment (where 5.24.3 is the oldest version
available).
2019-02-21 16:12:06 -05:00
Shlomi Fish
d3b1674a47 Fix spider illegal moves canMove bug.
See https://sourceforge.net/p/pysolfc/bugs/36/ . TODO: add tests.
2019-02-19 19:45:51 +02:00
Shlomi Fish
91e5cdafa3 Fix the indentation.
See http://perl-begin.org/tutorials/bad-elements/#no-indentation .
2019-02-19 17:14:17 +02:00
Shlomi Fish
490f8f2f25 bump the version 2019-02-16 22:01:05 +02:00
Shlomi Fish
8a93f4ba13 Try to fix issue#100.
site module is not present.
2019-02-16 21:58:24 +02:00
Shlomi Fish
cebd349e28 compat with py2app - issue #100.
It does not provide site.PREFIXES .
2019-02-16 13:06:02 +02:00
Shlomi Fish
97106adf9a bump the version 2019-02-14 18:28:32 +02:00
Shlomi Fish
f8e2e88e04 append rather than completely overwrite 2019-02-14 18:01:05 +02:00
Shlomi Fish
204bc6b5fa optimize travis.yml 2019-01-26 19:53:49 +02:00
Shlomi Fish
e4643f71e7 add support for solving three golf variants.
Using the BlackHoleSolverWrapper .

See https://github.com/shlomif/PySolFC/issues/98 issue98.
2019-01-26 19:09:31 +02:00
Shlomi Fish
0c19541e8d Allow to skip python2 tests.
So one won't have to have these deps installed.
2019-01-18 20:41:07 +02:00
Shlomi Fish
ed18fd8156 Order imports based on flake8-import-order.
Tested on ci. See https://github.com/PyCQA/flake8-import-order . In the
process did some other cleanups and
https://en.wikipedia.org/wiki/Code_refactoring .
2019-01-11 23:55:06 +02:00
Shlomi Fish
8f8e1304f8 Remove unused dep on "ack". 2018-12-17 22:25:08 +02:00
Stephen
25cf0d993f use travis addon for apt and homebrew 2018-12-17 08:51:53 -08:00
Shlomi Fish
5e10f11ca5 Refactoring / code cleanup.
See:

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2018-12-06 23:49:44 +02:00
Shlomi Fish
2b2d23f958 Extract a method or a function.
This is Refactoring / code cleanup.

See:

* https://refactoring.com/catalog/extractMethod.html

* https://en.wikipedia.org/wiki/Code_refactoring

* https://www.refactoring.com/

* https://www.joelonsoftware.com/2002/01/23/rub-a-dub-dub/

Some small optimisations may have slipped in as well.
2018-12-06 23:41:49 +02:00
Shlomi Fish
f95a6a5ba8 perltidy 2018-12-06 21:12:13 +02:00
Shlomi Fish
63ae7a4ffa appveyor: invalidate cache 2018-12-06 21:01:37 +02:00
Shlomi Fish
c0076b5b36 Better fix for SourceForge bug #31.
See https://sourceforge.net/p/pysolfc/bugs/31/ . Thanks to Caelia Renee
Chapin for the fix and to Kevin Knerr for the report. Test case by
@shlomif.
2018-12-06 19:26:20 +02:00
3555 changed files with 133879 additions and 41506 deletions

View file

@ -1,29 +1,27 @@
---
image: Visual Studio 2022
environment:
matrix:
- PYTHON: "C:\\PYTHON34"
- PYTHON: "C:\\Python313"
# Shamelessly taken from https://github.com/plicease/Dist-Zilla-PluginBundle-Author-Plicease/blob/master/.appveyor.yml
# Thanks!
install:
- choco install strawberryperl
# - choco install strawberryperl
- copy %PYTHON%\python.exe %PYTHON%\python3.exe
- SET PATH=%PYTHON%;C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%
- python3 -mpip install flake8
- python3 -mpip install random2
- python3 -mpip install py2exe
- python3 -mpip install pycotap
- python3 -mpip install six
- python3 -mpip install Pillow
- python3 -mpip install pygame
- SET PATH=%PYTHON%;%PYTHON%\Scripts;C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%
- python3 -mpip install Pillow attrs configobj flake8 flake8-import-order
pycotap pygame pyinstaller pysol-cards setuptools six
ttkthemes
- perl -v
- copy C:\msys64\mingw64\bin\mingw32-make.exe C:\msys64\mingw64\bin\make.exe
- SET PATH=C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%
- SET PERL5LIB=C:/_P5/lib/perl5
- SET PERL_LOCAL_LIB_ROOT=C:/_P5
- SET PERL_MB_OPT=--install_base C:/_P5
- SET PERL_MM_OPT=INSTALL_BASE=C:/_P5
- perl -v
- cpanm --notest Code::TidyAll::Plugin::Flake8 File::Find::Object Perl::Tidy Task::FreecellSolver::Testing Test::Code::TidyAll Test::TrailingSpace
- cpanm --notest Code::TidyAll::Plugin::Flake8 File::Find::Object
Perl::Tidy Task::FreecellSolver::Testing Test::Code::TidyAll
Test::TrailingSpace
- echo %PATH%
build: off
test_script:
@ -34,35 +32,40 @@ test_script:
- gmake pretest
- perl run-tests.pl
- gmake rules
- gmake pot
- gmake mo
- python3 setup.py py2exe
- appveyor DownloadFile https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.0/PySolFC-Cardsets-2.0.tar.bz2/download -FileName cardsets.tar.bz2
- tar xf cardsets.tar.bz2
- xargs -ta scripts\cardsets_to_bundle -I file cp -rt dist\data\ PySolFC-Cardsets-2.0\file
#- gmake pot
#- gmake mo
- pyinstaller pysol.py --windowed --icon=data\pysol.ico
- python3 setup.py install_data -d dist\pysol
- appveyor DownloadFile https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-3.0.0.tar.xz/download -FileName cardsets.tar.xz
- 7z x cardsets.tar.xz -so | 7z x -si -ttar
- mv PySolFC-Cardsets--Minimal-3.0.0/cardset-* dist/pysol/data
- appveyor DownloadFile https://sourceforge.net/projects/pysolfc/files/PySol-Music/PySol-Music-4.50/pysol-music-4.50.tar.xz/download -FileName music.tar.xz
- 7z x music.tar.xz -so | 7z x -si -ttar
- move pysol-music-4.50\data\music dist\data\music
- ps: |
$apiUrl = 'https://ci.appveyor.com/api'
$project = Invoke-RestMethod -Method Get -Uri "$apiUrl/projects/shlomif/fc-solve"
$jobId = $project.build.jobs[0].jobId
Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts/fc-solve/pkg-build/fc-solve-for-pysol.zip" -OutFile fc-solve.zip
- move pysol-music-4.50\data\music dist\pysol\data\music
# - ps: |
# $apiUrl = 'https://ci.appveyor.com/api'
# $project = Invoke-RestMethod -Method Get -Uri "$apiUrl/projects/shlomif/fc-solve"
# $jobId = $project.build.jobs[0].jobId
# Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts/fc-solve/pkg-build/fc-solve-for-pysol.zip" -OutFile fc-solve.zip
#
# For reproducible builds:
# See: https://reproducible-builds.org/ .
- SET FC_SOLVE_VER=5.20.0
- appveyor DownloadFile https://sourceforge.net/projects/fc-solve/files/fc-solve/DO-NOT-USE--fc-solve-for-pysol/fc-solve-for-pysol--v%FC_SOLVE_VER%.zip -FileName fc-solve.zip
- 7z x fc-solve.zip
- move fcs-pysol dist\freecell-solver
- 7z a -r pysol_win_dist.7z dist\
- move fcs-pysol dist\pysol\freecell-solver
- 7z a -r pysol_win_dist.7z dist\pysol\
- SET PYTHONPATH=%cd%
- python3 scripts\create_iss.py
- appveyor DownloadFile https://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe -FileName vcredist_x86.exe
- SET PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 5"
- SET PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 6"
- ISCC /Q setup.iss
artifacts:
- path: pysol_win_dist.7z
name: pysol_win_dist
- path: dist\PySolFC_*_setup.exe
- path: dist\pysol\PySolFC_*_setup.exe
name: pysol_win_installer
cache:
- C:\_P5 -> .appveyor.yml
- C:\strawberry -> .appveyor.yml
# - C:\_P5 -> .appveyor.yml
# - C:\strawberry -> .appveyor.yml
shallow_clone: true

37
.github/workflows/ci.yml vendored Normal file
View file

@ -0,0 +1,37 @@
name: CI tests at GitHub
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
check:
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install flake8 flake8-import-order \
attrs configobj pycotap pysol-cards setuptools six
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
flake8 . --show-source
- name: Run unit tests
run: |
python -m unittest -v
- name: Individually import each Python module
run: |
python scripts/gen_individual_importing_tests.py
prove tests/individually-importing/*.py

60
.github/workflows/macos-package.yml vendored Normal file
View file

@ -0,0 +1,60 @@
name: macOS package
on:
push:
tags: [ '**' ]
workflow_dispatch:
jobs:
build:
runs-on: macos-14
steps:
- uses: actions/checkout@v2
- name: Set up python
env:
PYVER: '3.9.7'
PYVER_SHORT: '3.9'
run: |
wget -O python.pkg "https://www.python.org/ftp/python/${PYVER}/python-${PYVER}-macosx10.9.pkg"
sudo installer -pkg python.pkg -target /
echo "/Library/Frameworks/Python.framework/Versions/${PYVER_SHORT}/bin" >> $GITHUB_PATH
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install --no-binary=Pillow \
Pillow attrs configobj py2app pycotap pygame pysol-cards setuptools six ttkthemes
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
brew install create-dmg
- name: Get cardsets
run: |
wget -O cardsets-pack.tar.xz "https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-3.0.0.tar.xz/download"
tar -xJf cardsets-pack.tar.xz
mv PySolFC-Cardsets--Minimal-3.0.0/cardset-* data
- name: Prepare game rules (process the HTML) and translations
run: |
make rules mo
- name: Create the executable .app
run: |
PYTHONPATH="." python3 setup_osx.py py2app
zip -q -r -X PySolFC-app.zip dist
- name: Make the .dmg for easy installation
run:
create-dmg --volname "Install PySolFC"
--volicon data/PySol.icns
--background html-src/images/pysollogo01.png
--window-size 800 400
--icon PySolFC.app 200 185
--app-drop-link 600 185
--skip-jenkins
PySolFC.dmg dist
- name: Upload zipped app
uses: actions/upload-artifact@v4
with:
name: pysolfc-app
path: PySolFC-app.zip
- name: Upload dmg
uses: actions/upload-artifact@v4
with:
name: pysolfc-dmg
path: PySolFC.dmg

25
.gitignore vendored
View file

@ -1,6 +1,7 @@
*.pyc
/.tidyall.d/
/MANIFEST
/_Inline/
/build/*
/data/cardsets/*
/data/html/*
@ -9,9 +10,31 @@
/html
/html-src/html/*
/images
/locale/*
/po/de.po
/po/fr.po
/po/it.po
/po/pl.po
/po/ru.po
/po/pt_BR.po
/tests/individually-importing/*.py
/tests/unit-generated/*.py
PySolFC-Cardsets--Minimal-2.0.*
PySolFC-Cardsets--Minimal-2.0/
PySolFC-Cardsets-2.0.*
PySolFC-Cardsets-2.0/
PySolFC-Cardsets--Minimal-3.0.*
PySolFC-Cardsets--Minimal-3.0/
PySolFC-Cardsets-3.0.*
PySolFC-Cardsets-3.0/
android/*.apk
android/*.zip
android/bin/keystore
buildozer/.buildozer*
buildozer/PySolFC-Cardsets*
buildozer/cardsets
buildozer/bin
buildozer/tmp
buildozer/support*
buildozer/ENV
buildozer/VENV
venv*

View file

@ -3,6 +3,6 @@ ignore = tests/individually-importing/*
select = **/*.py
[PerlTidy]
argv = -ci=4 -bl -cti=0
argv = -ci=4 -bl -cti=0 --character-encoding=none
ignore = **/{cmpdigest,valgrind,verify}--*.t
select = **/*.{pl,pm,t}

View file

@ -1,45 +1,65 @@
dist: trusty
language: generic
os:
- linux
- osx
before_install:
- if test "$TRAVIS_OS_NAME" = "linux" ; then sudo apt-get update -qq ; sudo apt-get install -y ack-grep cpanminus libperl-dev make perl python-glade2 python-gnome2 python-gnome2-dev python-gtk2 python-setuptools python-tk python3 python3-pip python3-setuptools python3-tk ; sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep ; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew update; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew list python &>/dev/null || brew install python; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew list python3 &>/dev/null || brew install python3; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew install pyenv-virtualenv; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew bundle ; brew link gettext --force ; export PATH="$PATH:/usr/local/bin" ; export DYLD_LIBRARY_PATH="/usr/local/opt/curl/lib:/usr/local/opt/openssl/lib:${DYLD_LIBRARY_PATH}" ; export PATH="/usr/local/opt/openssl/bin:$PATH" ; export LDFLAGS="$LDFLAGS -L/usr/local/opt/openssl/lib" ; export CPPFLAGS="$CPPFLAGS -I/usr/local/opt/openssl/include" ; export CPPFLAGS="$CPPFLAGS -I$(brew --prefix openssl)/include" PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig:$PKG_CONFIG_PATH" LDFLAGS="$LDFLAGS -L$(brew --prefix openssl)/lib" ;fi
install:
- sudo cpanm Code::TidyAll::Plugin::Flake8 Perl::Tidy Test::Code::TidyAll Test::Differences Test::TrailingSpace
- export PY_MODS='pycotap random2 six'
- "`which python3` -m pip install --upgrade flake8 $PY_MODS"
- "sudo /usr/bin/python3 -m pip install --upgrade $PY_MODS || true"
- "sudo `which python2` -m pip install --upgrade $PY_MODS"
- which python
- which python2
language: python
python:
- "3.6"
matrix:
exclude:
- os: osx
python: "3.6"
include:
- os: osx
language: generic
env: TOXENV=py35
script:
- "sh -x scripts/travis-ci-build"
- if test "$TRAVIS_OS_NAME" = "osx" ; then PYTHONPATH="`pwd`" python3 setup_osx.py py2app ; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then find . -iname '*.app' ; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then (cd dist; tar -cvf ../PySolFC.app.tar PySolFC.app/ ; ); xz PySolFC.app.tar ; fi
dist: bionic
osx_image: xcode12.2
addons:
apt:
- cpanminus
- python3-pip
- python3-setuptools
- python3-tk
homebrew:
- perl
- cpanminus
- create-dmg
cache:
directories:
- $HOME/perl_modules
- $HOME/tidyall_d
deploy:
provider: releases
api_key:
token:
secure: SrKnXigL/oUHNbqpbGx0DB1o+LAEkfPA2QTBllXxg4V+1vGAHBT9FRecp8Do+no/zSPRttH+sPDEPBXMMAV0BWVKKw5Mxas/S5ulVkNdfxpTq1bKjI3EjZbVsS1zZlHe0P77TDFDAj8zyeiYecBM08suhd9OvScieiPlpFPE1UYp9vvNKaBgc66IRNnIDRBdktW4YLsgvkrpXnxGPy8gGwylsTeOzNs5/r5dzHswGdksJl46kqCIbV+s4/Xcx+BEnfibWzEFZmLQoGKhoukbSis3YXGIlERcgiVU6v7S2D4wbwUXSAKOj/Io7z/88Co2P3Qbm538kf/pjeR9+DaM1HsHQQcL0detCjjLog+ekKr2fM00QI1yRmqOiZtuXxTMpneYX73EBmPt4la4rjKmnlhS+NTxrynHcPZD8QopCPvoZ3sUD6dQCrbi8kcGxe13srfdJ3KjuWZXdedLIOgNELbj5o6GNivsanWna59yoJzChC5/H5Jjllncvzbp56TZfEkM1NJkE84jjSS8Sn2KLXjD0woHIsuUSkRNExrCt/6QmIub/QxZPUhwQ2J0xCv1IJPdd0XvO3gCqasG3UA2Q0OlP172x92ocOV/wm1/4wfoG6v/mn+bX5ZwvrsMmm+r3FKKlM8L3T33yFjMzgG/YMoRN8w7pXUIkdtZK8EEDVg=
# file: dist/PySolFC.app
file: PySolFC.app.tar.xz
file: PySolFC.dmg
on:
repo: shlomif/PySolFC
tags: true
skip_cleanup: true
before_install:
- if test "$TRAVIS_OS_NAME" = "osx" ; then
wget --content-disposition https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-2.2.0.tar.xz/download &&
tar xJf PySolFC-Cardsets--Minimal-3.0.0.tar.xz &&
mv PySolFC-Cardsets--Minimal-3.0.0/cardset-* data ;
fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then
PYVER=3.9.1 &&
PYVER_SHORT=3.9 &&
wget -O python.pkg "https://www.python.org/ftp/python/${PYVER}/python-${PYVER}-macosx10.9.pkg" &&
sudo installer -pkg python.pkg -target / &&
export PATH="/Library/Frameworks/Python.framework/Versions/${PYVER_SHORT}/bin:${PATH}" ;
fi
- cpanm local::lib
- eval "$(perl -Mlocal::lib=${HOME}/perl_modules)"
install:
# Tests are failing for them sometimes
- cpanm --notest Capture::Tiny IPC::System::Simple
- cpanm Code::TidyAll::Plugin::Flake8 Perl::Tidy Test::Code::TidyAll Test::Differences Test::TrailingSpace
- export PY_MODS='attrs configobj pycotap pysol-cards setuptools six'
- if test "$TRAVIS_OS_NAME" = "osx" ; then export PY_MODS="--no-binary=Pillow Pillow $PY_MODS" ; fi
- sudo -H pip3 install --upgrade wheel
- sudo -H pip3 install --upgrade $PY_MODS flake8 flake8-import-order
script:
- export TIDYALL_DATA_DIR="$HOME/tidyall_d"
- bash -x scripts/travis-ci-build
- if test "$TRAVIS_OS_NAME" = "osx" ; then PYTHONPATH="." python3 setup_osx.py py2app ; fi
- if test "$TRAVIS_OS_NAME" = "osx" ; then
create-dmg --volname "Install PySolFC"
--volicon data/PySol.icns
--background html-src/images/pysollogo01.png
--window-size 800 400
--icon PySolFC.app 200 185
--app-drop-link 600 185
--skip-jenkins
PySolFC.dmg dist ; fi

37
AUTHORS
View file

@ -1,37 +0,0 @@
Main Authors
============
Markus Franz Xaver Johannes Oberhumer <markus@oberhumer.com>
author of PySol
T. Kirk
author of Ultrasol
Skomoroh <skomoroh@users.sourceforge.net>
author of PySolFC
Brian Lenihan <brianl@users.sourceforge.net>
macOS package maintainer
Shlomi Fish ( http://www.shlomifish.org/ )
Continued PySolFC maintenance, port to python 3, test suite
(Note: he places all his changes under the MIT/Expat licence).
https://github.com/lufebe16
Added the Kivy toolkit
Roderik Ploszek ( https://github.com/Programator2 )
Fixes and enhancements
Games contributors
==================
Mark Andrews
Galen Brooks <galen@nine.com>
Andrew Csillag <drew_csillag@geocities.com>
Michael Foord
Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
Nicola Larosa
John Stoneham <obijohn99@aol.com>
David Svoboda <svoboda@users.sourceforge.net>
Translations
============
Holger Schäkel <Holger@Schaekel-row.de> (de)
Jerzy Trzeciak <artusek@wp.pl> (pl)

45
AUTHORS.md Normal file
View file

@ -0,0 +1,45 @@
Main Authors
============
* Markus Franz Xaver Johannes Oberhumer https://www.oberhumer.com/
* Author of PySol
* T. Kirk
* Author of Ultrasol
* [Skomoroh](https://sourceforge.net/u/skomoroh/profile/)
* Author of PySolFC
* [Brian Lenihan](https://sourceforge.net/u/brianl/profile/)
* macOS package maintainer
* [Shlomi Fish](https://www.shlomifish.org/)
* Continued PySolFC maintenance, port to python 3, test suite (Note: he places all his changes under the Expat licence).
* [lufebe16](https://github.com/lufebe16)
* Added the Kivy toolkit and all the Android app related code and build procedures.
* [Roderik Ploszek](https://github.com/Programator2)
* Fixes and enhancements
* [Joe R.](https://github.com/joeraz)
* Many new games and continued PySolFC maintenance and development.
Games contributors
==================
* Mark Andrews
* Galen Brooks <galen@nine.com>
* Andrew Csillag <drew@thecsillags.com>
* Michael Foord
* Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
* Nicola Larosa
* John Stoneham <obijohn99@aol.com>
* David Svoboda <svoboda@users.sourceforge.net>
Enhancements
============
* [ghostofiht](https://github.com/ghostofiht) - Contributed a new logo design.
* [Trueno font](https://fontlibrary.org/en/font/trueno) under the [OFL](https://en.wikipedia.org/wiki/SIL_Open_Font_License) by [Julieta Ulanovsky](http://www.zkysky.com.ar/) - used in the logo.
* [Remix Icon](https://remixicon.com/) - used for many icons throughout the app.
Translations
============
* Holger Schäkel <Holger@Schaekel-row.de> (de)
* Jerzy Trzeciak <artusek@wp.pl> (pl)

View file

@ -1,5 +0,0 @@
brew "cpanminus"
brew "gettext"
brew "gnutls"
brew "openssl"
brew "tcl-tk"

View file

@ -5,13 +5,14 @@ for general guidelines for contributing to open source.
# Contribution constraints
- The [Travis-CI build](https://travis-ci.org/shlomif/PySolFC) and [AppVeyor build](https://ci.appveyor.com/project/shlomif/pysolfc) (which also run the test suite) should pass on each commit.
- The [GitHub Actions CI build](https://github.com/shlomif/PySolFC/actions) and [AppVeyor build](https://ci.appveyor.com/project/shlomif/pysolfc) (which also run the test suite) should pass on each commit.
- Your contributions should be under [GPLv3+](https://en.wikipedia.org/wiki/GNU_General_Public_License#Version_3) or a [compatible free software licence](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses), but please don't put them under the [AGPL](https://en.wikipedia.org/wiki/Affero_General_Public_License), which adds additional restrictions.
- The code should be compatible with both Python 2.7.x and Python 3.4.x-and-above.
- The code should be compatible with Python 3.7 and above.
# How you can contribute
- Translate PySol to a human language you know.
- Test the "master" branch version of the version control repository or other prereleases.
- Try to reproduce [open issues](https://github.com/shlomif/PySolFC/issues)
- Try to fix bugs.
- Add new games.
@ -20,6 +21,7 @@ for general guidelines for contributing to open source.
- Add new features.
- Contribute graphics
- Improve the site
- Package PySol for a new package repository or OS, or update existing packages.
- Make a monetary donation.
- [Star](https://help.github.com/articles/about-stars/) or [Watch](https://help.github.com/articles/watching-and-unwatching-repositories/) the repository on GitHub
@ -30,6 +32,49 @@ custom variants. It lives in the Edit menu.
Otherwise, the games' sources live under
[the pysollib/games/](pysollib/games/) directory in the repository, and are
written in Python 2.7/3.x and you can try inheriting from an existing
written in Python 3.x and you can try inheriting from an existing
variant [class](https://en.wikipedia.org/wiki/Class_%28computer_programming%29).
In addition to adding the game's source code, be sure to add the game's metadata. At minimum, you should:
- In html-src/rules, create a rules file for the game in question. Use an existing rules file as a guideline. Ideally, each set of game rules should be written in such a way that a non-PySol user can read the rules and know how to play the game with their own deck of cards. For games that are only slightly different from other games, referencing the more common variant's rules is okay.
- In the pysollib/gamedb.py file, update the GAMES_BY_PYSOL_VERSION dictionary to include the new game's ID for the "dev" key. If the "dev" entry does not exist, add it.
- If you know the inventor for the game, update the inventor's entry in the GAMES_BY_INVENTORS dictionary in the same file.
## Contributing changesets / patches / diffs
One can contribute changesets either by opening [pull-requests](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/creating-an-issue-or-pull-request) or merge requests,
or by submitting patches generated by [git diff](https://git-scm.com/docs/git-diff) or [git format-patch](https://git-scm.com/docs/git-format-patch)
to a developer's email (e.g [@shlomif's](https://www.shlomifish.org/me/contact-me/) ) or uploading it to a web service (e.g: a pastesite, dropbox,
or Google Drive).
# The Release Process
Before publishing a release, please open an issue in GitHub, indicating your intent to do so, to confirm with any other developers if they have any objections, or any WIP features/tickets that should be included in the upcoming release. It's best to do this a week or two before you plan to actually publish the release. No responses on this for a couple weeks can be considered approval to proceed. Releases tagged without verifying with other developers may be removed.
In order to publish a new version, follow these steps:
1. Update `NEWS.asciidoc`. The release notes should also be added to `html-src/news.html`, along with `templates/index.html` in the website repo.
2. Update the `VERSION_TUPLE =` line in `pysollib/settings.py`.
3. Check the `GAMES_BY_PYSOL_VERSION` dictionary in the `pysollib/gamedb.py` file. If there's a "dev" entry in this dictionary, change that entry's key to be the new version number. If there isn't a "dev" entry, ignore this step.
4. Test using `gmake test` .
5. `git commit` the changes .
6. `git tag pysolfc-2.6.5` (or equivalent version).
7. `git push` and `git push --tags` to https://github.com/shlomif/PySolFC .
8. Wait for the AppVeyor build for the tag to complete and scan the .exe using https://www.virustotal.com/ .
9. Grab the macOS installer (.dmg) from [GitHub Actions](https://github.com/shlomif/PySolFC/actions/workflows/macos-package.yml) (look for an artifact called `pysolfc-dmg`).
10. Run `gmake dist`.
11. Use [rexz9](https://github.com/shlomif/shlomif-computer-settings/blob/567b6ab3f4272ad66bf331536dc80bf58bfff3af/shlomif-settings/bash-aliases/user_aliases.bash#L57) on `dist/PySol*.tar.xz`.
12. Go to https://sourceforge.net/projects/pysolfc/files/PySolFC/ and add a folder called PySolFC-2.6.5 (note the capitalisation).
13. Add the tar.xz, the .exe and the .dmg there and mark them as defaults for the right OSes.
# Long-term, large-scale, tasks
Support SVG cardsets.
An optional [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) (Read-eval-print loop)
Listen on a TCP / HTTP+REST port.
A web-based version.
Support a more secure saved-games format than the pickle-based-one.

View file

@ -4,30 +4,36 @@
## code
##
include pysol.py setup.py setup_osx.py setup.cfg MANIFEST.in Makefile
include COPYING README.md AUTHORS README.android README.kivy
include COPYING README.md AUTHORS.md README.android README.kivy
include NEWS.asciidoc
#recursive-include pysollib *.py
include pysollib/*.py pysollib/macosx/*.py pysollib/configobj/*.py
include pysollib/*.py
include pysollib/winsystems/*.py
include pysollib/tk/*.py pysollib/tile/*.py pysollib/pysolgtk/*.py
include pysollib/game/*.py
include pysollib/games/*.py pysollib/games/special/*.py
include pysollib/games/ultra/*.py pysollib/games/mahjongg/*.py
include pysollib/games/mahjongg/*.py
include data/tcl/*.tcl
include data/pysol.desktop
include data/pysolfc.glade
graft data/themes
recursive-exclude data/themes *.py
include scripts/build.bat scripts/create_iss.py scripts/mahjongg_utils.py
include scripts/pygettext.py scripts/all_games.py scripts/cardset_viewer.py
include scripts/cardconv scripts/cardsetsgiftobmp
include scripts/create_iss.py scripts/mahjongg_utils.py
include scripts/all_games.py scripts/cardset_viewer.py
include scripts/cardconv
include scripts/gen_individual_importing_tests.py
recursive-include tests/ *.pm *.py *.t *.yml
exclude tests/individually-importing/*
include tests/individually-importing/PLACEHOLDER
recursive-include tests/lib *.pm *.py
recursive-include tests/unit/data *
include tests/style/*.t
include tests/unit-generated/PLACEHOLDER
include .tidyallrc
include android/*.py
include android/mk*
include android/initsdk
include android/initsupport
include android/debian/*
#graft data/plugins
##
@ -42,7 +48,7 @@ graft html-src
#graft data/images
recursive-include data/images *.gif *.png *.jpg
graft data/tiles
include data/pysol.xbm data/pysol.xpm data/pysol.ico data/PySol.icns
include data/pysol.ico data/PySol.icns
##
## data - sound
##
@ -79,6 +85,16 @@ graft data/cardset-standard
graft data/cardset-tuxedo
graft data/cardset-vienna-2k
graft data/cardset-dondorf
graft data/cardset-neo
graft data/cardset-neo-hex
graft data/cardset-neo-tarock
graft data/cardset-uni-mahjongg
graft data/cardset-louie-mantia-hanafuda
graft data/cardset-mughal-ganjifa-xl
graft data/cardset-dashavatara-ganjifa-xl
graft data/cardset-next-matrix
graft data/cardset-matching
graft data/cardset-matching-xl
##
## exclude dirs
##

View file

@ -1,82 +1,72 @@
# Makefile for PySolFC
override LANG=C
override PYSOL_DEBUG=1
ifeq ($(OS),Windows_NT)
path_sep = ;
else
path_sep = :
endif
export PYTHONPATH := $(PYTHONPATH)$(path_sep)$(CURDIR)
PYSOLLIB_FILES=pysollib/tk/*.py pysollib/tile/*.py pysollib/*.py \
pysollib/games/*.py pysollib/games/special/*.py \
pysollib/games/ultra/*.py pysollib/games/mahjongg/*.py \
pysollib/kivy/*.py
.PHONY : all install dist all_games_html rules pot mo
.PHONY: all install dist rpm all_games_html rules pot mo pretest test runtest
all:
@echo "No default target"
install:
python setup.py install
python3 setup.py install
dist: all_games_html rules mo
python3 setup.py sdist
rpm: all_games_html rules mo
python setup.py bdist_rpm
python3 setup.py bdist_rpm
all_games_html:
PYTHONPATH=`pwd` ./scripts/all_games.py html id doc/rules bare > docs/all_games.html
DOCS_DIR = docs
HTML_DIR = data/html
ALL_GAMES_HTML_BASE = all_games.html
ALL_GAMES_HTML = $(HTML_DIR)/$(ALL_GAMES_HTML_BASE)
ALL_GAMES_HTML__FOR_WEBSITE = $(DOCS_DIR)/$(ALL_GAMES_HTML_BASE)
all_games_html: $(ALL_GAMES_HTML)
$(ALL_GAMES_HTML) $(ALL_GAMES_HTML__FOR_WEBSITE): rules
cd $(HTML_DIR) && $(CURDIR)/scripts/all_games.py html id rules > $(ALL_GAMES_HTML_BASE)
./scripts/all_games.py html id doc/rules bare > $(ALL_GAMES_HTML__FOR_WEBSITE)
rules:
export PYTHONPATH=`pwd`; (cd html-src && ./gen-html.py)
cd html-src && ./gen-html.py
cp -r html-src/images html-src/html
rm -rf data/html
mv html-src/html data
pot:
PYTHONPATH=`pwd` ./scripts/all_games.py gettext > po/games.pot
PYTHONPATH=`pwd` ./scripts/pygettext.py -k n_ --ngettext-keyword ungettext -o po/pysol-1.pot $(PYSOLLIB_FILES)
xgettext -L C --keyword=N_ -o po/pysol-2.pot data/glade-translations
msgcat po/pysol-1.pot po/pysol-2.pot > po/pysol.pot
rm -f po/pysol-1.pot po/pysol-2.pot
for lng in ru pl; do \
mv -f po/$${lng}_pysol.po po/$${lng}_pysol.old.po; \
msgmerge po/$${lng}_pysol.old.po po/pysol.pot > po/$${lng}_pysol.po; \
rm -f po/$${lng}_pysol.old.po; \
mv -f po/$${lng}_games.po po/$${lng}_games.old.po; \
msgmerge po/$${lng}_games.old.po po/games.pot > po/$${lng}_games.po; \
rm -f po/$${lng}_games.old.po; \
./scripts/all_games.py gettext > po/games.pot
xgettext --keyword=n_ --add-comments=TRANSLATORS: -o po/pysol.pot \
pysollib/*.py pysollib/*/*.py pysollib/*/*/*.py data/pysolfc.glade
set -e; \
for lng in de fr pl it ru pt_BR; do \
msgmerge --update --quiet --backup=none po/$${lng}_pysol.po po/pysol.pot; \
msgmerge --update --quiet --backup=none po/$${lng}_games.po po/games.pot; \
done
mo:
for loc in ru ru_RU de de_AT de_BE de_DE de_LU de_CH pl pl_PL it it_IT; do \
test -d locale/$${loc}/LC_MESSAGES || mkdir -p locale/$${loc}/LC_MESSAGES; \
set -e; \
for lang in de fr pl it ru pt_BR; do \
mkdir -p locale/$${lang}/LC_MESSAGES; \
msgcat --use-first po/$${lang}_games.po po/$${lang}_pysol.po > po/$${lang}.po; \
msgfmt --check -o locale/$${lang}/LC_MESSAGES/pysol.mo po/$${lang}.po; \
done
for lang in ru pl it; do \
msgcat --use-first po/$${lang}_games.po po/$${lang}_pysol.po > po/$${lang}.po 2>/dev/null; \
done
for lang in ru de pl it; do \
msgfmt -o locale/$${lang}/LC_MESSAGES/pysol.mo po/$${lang}.po; \
done
cp -f locale/ru/LC_MESSAGES/pysol.mo locale/ru_RU/LC_MESSAGES/pysol.mo
for dir in de_AT de_BE de_DE de_LU de_CH; do \
cp -f locale/de/LC_MESSAGES/pysol.mo locale/$${dir}/LC_MESSAGES/pysol.mo; \
done
cp -f locale/pl/LC_MESSAGES/pysol.mo locale/pl_PL/LC_MESSAGES/pysol.mo
cp -f locale/it/LC_MESSAGES/pysol.mo locale/it_IT/LC_MESSAGES/pysol.mo
pretest:
@rm -f tests/individually-importing/*.py # To avoid stray files
python scripts/gen_individual_importing_tests.py
rm -f tests/individually-importing/*.py tests/unit-generated/*.py # To avoid stray files
python3 scripts/gen_individual_importing_tests.py
TEST_ENV_PATH = "`pwd`:`pwd`/tests/lib"
TEST_ENV = PYTHONPATH=$(TEST_ENV_PATH) PERL5LIB=$(TEST_ENV_PATH)
TEST_FILES = tests/style/*.t tests/unit-generated/*.py tests/individually-importing/*.py
TEST_ENV_PATH = $(CURDIR)$(path_sep)$(CURDIR)/tests/lib
TEST_FILES = tests/style/*.t tests/t/*.py tests/individually-importing/*.py
define RUN_TESTS
$(TEST_ENV) $1 $(TEST_FILES)
endef
test runtest: export PERL5LIB := $(PERL5LIB)$(path_sep)$(TEST_ENV_PATH)
test: pretest
$(call RUN_TESTS,prove)
prove $(TEST_FILES)
runtest: pretest
$(call RUN_TESTS,runprove)
runprove $(TEST_FILES)

241
NEWS.asciidoc Normal file
View file

@ -0,0 +1,241 @@
[[news]]
=== News
* _11 January, 2025:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-3.2.0/[PySolFC
v3.2.0]. New in this release:
** New fullscreen mode, accessible by pressing F11.
** Easy option to clear advanced search options.
** Lots of bugfixes and enhancements.
* _19 October, 2024:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-3.1.0/[PySolFC
v3.1.0]. New in this release:
** Ten new games.
** Cleanup of duplicate images to reduce package size.
** Some extra cardset/table tile filter options.
** Many enhancements, bugfixes, etc.
* _31 March, 2024:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-3.0.0/[PySolFC
v3.0.0] - the biggest release in over 15 years. Additionally, there is a new Cardsets release
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-3.0/[PySolFC-Cardsets v.3.0]. New in this release:
** 120 new games.
** Support for several new types of games/decks, including tile puzzles, Ishido-type tile matching games, joker deck games, and more.
** New game and cardset categories.
** Ability to change the style of virtually any of the graphics in PySol.
** Some UI/Quality of Life improvements.
** Bugfixes.
* _10 July, 2023:_ There is a new beta release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.21.0/[PySolFC
v2.21.0]. New in this release:
** Ten new games.
** Compatibility with Pillow 10.0.
** Several new display options.
** Other bugfixes and enhancements.
* _16 April, 2023:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.20.1/[PySolFC
v2.20.1]. New in this release:
** The release packages have been updated to use the latest version of Python, and all the dependent libraries.
** New alternate release packages for Windows and Mac that include the full cardsets library (these are larger and may take longer to download/install).
** Bugfixes and other enhancements.
* _26 February, 2023:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.20.0/[PySolFC
v2.20.0]. Additionally, there is a new Cardsets release
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.2/[PySolFC-Cardsets v.2.2]. New in this release:
** Over 40 new games, bringing the total to 1,200!
** Memory games can now use any type of cardset, including new Matching type cardsets.
** New options in the Solitaire Wizard.
** Additional documentation for a number of PySol's features.
** Bugfixes and other enhancements.
* _11 October, 2022:_ Linux users, PySolFC is now available https://flathub.org/apps/details/io.sourceforge.pysolfc.PySolFC[on Flathub].
* _9 October, 2022:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.18.0/[PySolFC
v2.18.0]. New in this release:
** Advanced search feature - the ability to search for games, cardsets, or table tiles based on many different criteria.
** Complete documentation containing rules for all 1,100+ games.
** Revamped status bar, displaying more info.
** The Find Card feature now supports all types of games.
** Many new display and assist options.
** Bugfixes, code cleanup, etc.
* _10 May, 2022_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.16.0/[PySolFC
v2.16.0]. Anyone upgrading from a version prior to 2.15.0 should read the notes for that version before upgrading. New in this release:
** Enhancements to many images and graphical displays.
** More game rules in the documentation.
** Bugfixes, cleanup, and other enhancements.
* _12 March, 2022_ There is a new beta release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.15.0/[PySolFC
v2.15.0]. Additionally, there is a new Cardsets release https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.1/[PySolFC-Cardsets v.2.1]
(required to run 2.15). This is a pretty sizable release, so this beta version
is being offered before a stable 2.16 in the next couple months. Any https://github.com/shlomif/PySolFC/issues[feedback
and bug reports] are greatly appreciated. The full list of changes for this release
is quite long, but here are the highlights:
** 35 new games, plus enhancements and fixes to many existing games.
** Many new game rules added to the documentation.
** New high resolution default display. This new display uses high resolution
cardsets and scaling to make the games look impressive on larger monitors.
*** Note that the new high-resolution options will not override your currently selected
options for existing users. If you want to use the new settings, you can delete or
rename your options.cfg file.
*** Also note that because of these changes, upgrading your version of PySolFC Cardsets
is required even if you're using the minimal package. If you are using the Windows or
Mac installer, this will be handled automatically, but you'll need to upgrade if you're
setting it up manually.
** New feature to search for games, cardsets, and table tiles by name.
** Many new display options.
** Bugfixes and cleanup.
** And more.
* _10 December, 2021:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.14.1/[PySolFC
v2.14.1]. This release fixes a number of bugs, including one that causes
crashes for some users when opening the select game/cardset/table tile window.
* _19 September, 2021:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.14.0/[PySolFC
v2.14.0]. New in this release:
** 16 new games
** Support for Python 3.10 (Minimum requirement is still Python 2.7)
** A new macOS package.
** Enhancements to the tree select dialogs for selecting games, cardsets, and table tiles.
** Further additions/improvements to the documentation.
** Many bugfixes and cleanups.
* _11 July, 2021:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.12.0/[PySolFC
v2.12.0]. New in this release:
** 40 new games!
** Support for using higher resolution cardsets. The high resolution "Neo"
cardset has been added to the Windows Installer package and is available in
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.1PRE/[a preview release of
PySolFC-Cardsets 2.1].
** Improved organization and categorization of the games list.
** New display options - added option to center the game layout in the window.
** New audio options - can now disable music without disabling sound effects.
** Improved documentation - added rules to a large number of games that were missing them.
** Bugfixes and cleanup.
* _22 June, 2020:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.10.0/[PySolFC
v2.10.0]. New in this release:
** Fix moving cards in the Scorpion Tail game.
** Make use of https://pypi.org/project/pysol-cards/[the pysol-cards PyPI module]
** One can optionally load the Freecell Solver and the Black Hole Solver using their DLLs.
** Test Windows Version in the installer: https://github.com/shlomif/PySolFC/issues/161
** Pause when showing statistics: https://github.com/shlomif/PySolFC/pull/162
* _5 March, 2020:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.8.0/[PySolFC
v2.8.0]. New in this release:
** Better kivy/Android support
** Using ttk and configobj as shipped in the python dist (instead of forked versions)
** Requiring https://pypi.org/project/attrs/[attrs] and https://pypi.org/project/pysol-cards/[pysol-cards] from PyPI
** Added tests, bug fixes and refactorings.
** Add the +-g+ and +--deal+ command line options.
* _25 April, 2019:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.4/[PySolFC
v2.6.4]. New in this release:
** A https://github.com/shlomif/PySolFC/issues/107[new logo] thanks to @ghostofiht.
** Fix for https://github.com/shlomif/PySolFC/issues/110[Freezes] (pygame upgrade)
** Fixed https://github.com/shlomif/PySolFC/issues/111[Three Peaks scoring].
* _7 April, 2019:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.3/[PySolFC
v2.6.3]. New in this release:
** Compatibility with Pillow 6.x - https://github.com/shlomif/PySolFC/issues/108
** Restore the "Save games geometry" feature - https://github.com/shlomif/PySolFC/issues/84
** Added a NEWS.asciidoc file.
* _4 March, 2019:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.2/[PySolFC
v2.6.2]. New in this release:
** Fixes for the Windows and macOS packages.
** Forbid illegal moves in Spider and some other variants.
* _14 February, 2019:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.0/[PySolFC
v2.6.0]. New in this release:
** Support for solving
https://en.wikipedia.org/wiki/Golf_(patience)[Golf] using
https://github.com/shlomif/black-hole-solitaire[a solver]
** An untested macOS package (we need testers)
** A https://sourceforge.net/p/pysolfc/bugs/31/[bug] fix
** Ability to run the test suite without python 2.x and/or pygtk
** Code cleanups.
* _23 June, 2018:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.4.0/[PySolFC
v2.4.0]. New in this release:
** The Windows installer now includes the revitalised PySol-music
package. For more info, see
https://github.com/shlomif/PySolFC/issues/82[this bug].
** Many improvements to the test suite and the board import
functionality.
** Some bug fixes.
* _16 April, 2018:_ There is a new stable release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.2.0/[PySolFC
v2.2.0]. New in this release:
** The Microsoft Windows binary installer now contains and supports the
solver for Freecell and other games.
** Many bug fixes.
* _31 March, 2018:_ There is a new beta release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
v2.1.4]. New in this release:
** We now provide a Microsoft Windows binary installer again, thanks to
the great work of https://github.com/Programator2[Roderik Ploszek]. Note
that the solvers (for FreeCell/etc.) are not installed as part of it
yet, but they are available separately.
** https://github.com/shlomif/pysol-sound-server[pysol-sound-server] was
updated to support Python 3.x.
** Fixes for the board export / solver input, and for redealing upon
restart of the "ms*" deals.
** Various cleanups.
* _5 March, 2018:_ There is a new beta source release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
v2.1.3]. New in this release:
** Support for the https://kivy.org/[kivy] toolkit for running under
Android-based devices (currently python 2.7-only)
** Fixed the help system and removed the need for the sgmllib module.
** Other fixes and cleanups.
** Currently there is no Microsoft Windows binary package. Help or
insights will be appreciated.
* _19 November, 2017:_ There is a new beta source release
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
v2.1.0], the first one in almost 8 years. New in this release:
** The code is now compatible with both Python 2.7.x and Python 3.x
** One can deal all
https://fc-solve.shlomifish.org/faq.html#what_are_ms_deals[MS
FreeCell/FC-pro deals] by specifying e.g: "ms100000" as the seed.
** Support for Black Hole and All in a Row solver was added.
** Test suite and CI were added to the repository.
** The code now passes flake8 validation.
** Some improvements to the solver dialog.
* _15 November, 2017:_ Development of the Python sources has recently
resumed using a https://github.com/shlomif/PySolFC[a GitHub project] and
other resources and Shlomi Fish (@shlomif) has received an admin status
on the SourceForge project and this site. A new source release which
adds compatibility with Python version 3.x and some other improvements
is expected soon.
* _04 December, 2009:_
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.0/[PySolFC
v.2.0] (1061 games) and
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.0/[PySolFC-Cardsets
v.2.0] (153 cardsets)
** The license was changed to the GPLv3 or newer.
** 13 new games.
** Migration to new
https://code.google.com/archive/p/python-ttk/[python-ttk] module.
** Improved the look of the deck (required
http://effbot.org/downloads/#pil[python-imaging v.1.1.7]).
** Fixed Hanafuda games
(https://sourceforge.net/p/pysolfc/bugs/9/[ticket]).
** New config-file option: sound_sample_buffer_size
(https://sourceforge.net/p/pysolfc/bugs/10/[ticket]).
** Portable version for windows
(https://sourceforge.net/p/pysolfc/patches/3/[ticket]).
** Many other bugfixes.
* _06 September, 2007:_
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-1.1/[PySolFC
v.1.1] (1048 games)
** 48 new games (one game was removed)
** Solitaire Wizard
** improved Mahjongg games
** human readable config file (options.cfg)
** stack becomes compact when a card goes off screen
** Clearlooks theme for Tile widget set
** a huge number of other improvements
* _30 August, 2007:_
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-1.1/[PySolFC-Cardsets
v.1.1] (152 cardsets)
* _21 February, 2007:_
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-1.0/[PySolFC
v.1.0] (1001 games)

View file

@ -1,7 +1,28 @@
Prerequisites (needs root):
History:
--------
On a 'freshly installed' Ubuntu 16.04 (32bit), the following
The Android project was created in 2016 as a separate project (on Bitbucket)
forked from a long inactive Sourceforge repository by lufebe16. The first
version (as 0.8) was released with fdroid in March 2017.
In 2016, shlomif started working diligently on the official project.
Following his request to combine these two projects, the Android version
was merged into his repo (now on github) in February 2018. The
first joint version (as 2.2.0) was released in April 2018.
Build Prerequisites (needs root):
---------------------------------
You need a linux workstation (either native or virtual). It needs
x86 hardware (either intel or amd). No graphic desktop is needed,
cmdline only is sufficient.
On freshly installed systems you will need to add about the
following packages:
On a 'freshly installed' Ubuntu or Debian, the following
additional packages had to be installed:
- python-setuptools
@ -13,10 +34,6 @@ Prerequisites (needs root):
- virtualenv (python-virtualenv)
- zip,unzip
On a freshly installed debian stretch/xfce:
-> consult script files in directory android/debian.
On a 'simple' gentoo installation the following packages had to be
installed in addition:
@ -31,10 +48,7 @@ Prerequisites (needs root):
- dev-vcs/git
- dev-java/ant
and python modules:
- python3 -m pip install requests --user.
- python3 -m pip install clint --user.
For detailed instructions consult buildozer/build-instruction.txt.
NOTES:
1) This information is supplied to give you a hint, when running into
@ -42,48 +56,28 @@ Prerequisites (needs root):
2) All builds need an working (fairly fast) internet connection and
6 GB of free disk space.
Build with 'python-for-android' (as user):
go to the android directory, then
$ ./mkp4a.init [<sdkdir>] [<ndkdir>] # prepare sdk and p4a installation
$ ./mkkeystore # if you want to build a release version.
$ ./mkp4a.debug # build debug apk
$ ./mkp4a.release <passwd1> [<passwd2>] # build release apk
$ ./mkp4a.unsigned # build an unsigned release apk
The build system will download all required additional
packages (such as the android sdk and more). Do the first build will
take a while. All in all you will need up to 6 GB of free disk space.
If you have Android Studio installed, you may call mkp4a.init
with optional parameter <sdk-dir> and ev. in addition as
second parameter <ndk-dir> (if not default) to prevent them
from downloading a new. (Note that currently android ndk version
should be less 14, otherwise the build will fail).
Resulted apks will appear in directory android.
Cardsets:
---------
Cardsets should be installed in ${HOME}/.PySolFC/cardsets/. On an
android device this is equivalent to /sdcard/.PySolFC/cardsets/.
Cardsets must use the bmp image format. Use scripts/cardsetsgiftobmp
(on a linux system) to convert them, before copying to the device.
The Apk includes a minimal set of cards for playing.
Possible known build issues:
Additional user supplied data:
------------------------------
2) for android ndk: needs a Version <=13 (because needs ant support).
NOTE:
To be able to add additional resources to your app, you need to
enable storage access in the android settings for the app. Go to
Settings/Apps/PySolFC/Permissions.
3) python-for-android, on downloading recipes:
Resources are stored in ~/.PySolFC/. On an android device this is
equivalent to /sdcard/.PySolFC/.
('CA CERTIFICATE VALIDATION FAILED' when downloading python.2.7 or
some 'recipes')
Additional cardsets can be installed in ~/.PySolFC/cardsets/.
Important: Cardsets must use the 'png' image format. Use
scripts/cardconv (on a gnu/linux system) to convert, before copying
them to the device.
Solution:
Try the download address with firefox. if it works, view the
site certificate and download (export) it from the browser.
Copy the resulting *.crt to /usr/local/ca-certificates and
run update-ca-certificates.
Byond cardsets you may also wish to add your own backgrounds. You can
add them to ~/.PySolFC/data/tiles (patterns) and to
~/.PySolFC/data/tiles/save-aspect/ (images). 'png' and 'jpg' image
formats are supported.

View file

@ -2,7 +2,7 @@
Introduction
------------
This is a version of the PySol FC open source project
This is a version of the PySolFC open source project
(http://pysolfc.sourceforge.net)
Early investigations of the code showed, that it would not be
@ -25,24 +25,18 @@ Images
The original images supplied by the collection are of type
gif. In kivy, that image type loads very slowly. Moreover, many
cards cannot be loaded, because of decoding errors.
To prevent these problems, the kivy version was
modified to not read any gif images.
To prevent these problems, the kivy version was modified to not read
any gif images.
Some cardsets have been translated to PNG, a format
that is processed by both the tk and the kivy versions.
For all GIF images in the directories data/images and data/tiles,
corresponding images in the PNG format have been added.
Some others, for which transparency information is not
processed correctly even from the PBF images, have been translated
to the BMP image format (while keeping their GIF variant for
the tk version). BMP format is only processed by the
kivy version.
To convert the cardsets to png format, a shell script, 'cardconv' , has been
added to the scripts directory. It requires Bash and ImageMagick
to be installed.
Additional cardsets are available from the SourceForge
project. To use them with kivy, they need to be converted to
the BMP format. A shell script, 'cardsetsgiftobmp' , has been added
to the scripts directory (it requires Bash and ImageMagick).
Additional cardsets are available from the SourceForge project. To use
them with kivy, make sure they to also convert them to the png format if
needed.
For all GIF images in the directories data/images and data/tiles ,
corresponding images in the PNG format have been added too.
LB170321.
LB230126.

109
README.md
View file

@ -1,42 +1,54 @@
<p align="center"><img src="html-src/images/high_res/logo_horizontal.png" alt="PySol FC logo" height="180px"></p>
# PySol Fan Club edition
This is an open source and portable (Windows, Linux and Mac OS X) collection
of Card Solitaire/Patience games written in Python. Its homepage is
http://pysolfc.sourceforge.net/ .
https://pysolfc.sourceforge.io/.
The maintenance branch of PySol FC on GitHub by [Shlomi
Fish](http://www.shlomifish.org/) and by some other
Fish](https://www.shlomifish.org/) and by some other
people, has gained official status, ported the code to Python 3,
and implemented some other enhancements.
- [![Build Status](https://travis-ci.org/shlomif/PySolFC.svg)](https://travis-ci.org/shlomif/PySolFC)
- [![CI tests at GitHub](https://github.com/shlomif/PySolFC/actions/workflows/ci.yml/badge.svg)](https://github.com/shlomif/PySolFC/actions/workflows/ci.yml)
[![AppVeyor Build status](https://ci.appveyor.com/api/projects/status/04re7umgl3yuukmh?svg=true)](https://ci.appveyor.com/project/shlomif/pysolfc)
## Call for Contributors
[Shlomi Fish](https://github.com/shlomif), who adopted PySol FC, and maintained
it for several years, has stepped down as its primary maintainer
due to the fact he no longer plays PySol, or other computer card games too
much and that it has been a time sink for him. (Also see
[this Twitter discussion](https://twitter.com/bagder/status/1336793880709238786)
). We are looking for other contributors and there are still
[some large-scale features](https://github.com/shlomif/PySolFC/issues) that
can be implemented.
# Screenshots
![Image](<http://i.imgur.com/jQkTGwf.jpg>)
![Screenshot of PySol FC](https://i.imgur.com/jQkTGwf.jpg)
## Requirements.
- Python (2.7 or 3.x)
- Python (3.7 or later)
- Tkinter (Tcl/Tk 8.4 or later)
- For sound support (optional)
- PySol-Sound-Server fork: https://github.com/shlomif/pysol-sound-server (mp3, wav, tracker music)
- (or: ) PyGame: http://www.pygame.org/ (mp3, ogg, wav, midi, tracker music)
- (or: ) PyGame: https://www.pygame.org/ (mp3, ogg, wav, midi, tracker music)
- Other packages (optional):
- Tile (ttk): http://tktable.sourceforge.net/tile/ (0.8.0 or later)
- PIL (Python Imaging Library): http://www.pythonware.com/products/pil
- Freecell Solver: http://fc-solve.shlomifish.org/ .
- [Black Hole Solitaire Solver](http://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/)
- Pillow (Python Imaging Library): https://pillow.readthedocs.io/
- TTKThemes: https://ttkthemes.readthedocs.io/
- Freecell Solver: https://fc-solve.shlomifish.org/
- [Black Hole Solitaire Solver](https://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/)
## Installation.
We provide an [installer for Windows](https://sourceforge.net/projects/pysolfc/files/PySolFC/)
as well as an Android package on F-droid.
For installation from source, see: http://www.python.org/doc/current/inst/
(requires Windows XP SP3 or higher) as well as an
[Android package on F-droid](https://f-droid.org/packages/org.lufebe16.pysolfc/).
### Running from source without installation.
@ -52,6 +64,12 @@ After following steps similar to these (on
#### Step 1 - install the dependencies
On Fedora you can do:
```
sudo dnf builddep PySolFC
```
On Mageia you can do:
```
@ -61,11 +79,17 @@ sudo urpmi git make pygtk2 pygtk2.0-libglade gnome-python-canvas tkinter
On Debian / Ubuntu / etc. you can do:
```
sudo apt-get install -y ack-grep cpanminus libperl-dev make perl python-glade2 python-gnome2 python-gnome2-dev python-gtk2 python-setuptools python-tk
sudo apt-get install cpanminus make perl python3-setuptools python3-tk
```
#### Step 2 - build PySol.
You can try running:
```
python3 scripts/linux-install.py
```
```
git clone https://github.com/shlomif/PySolFC.git
cd PySolFC
@ -73,15 +97,15 @@ cd PySolFC
gmake test
gmake rules
ln -s data/images images
tar -xvf PySolFC-Cardsets-2.0.tar.bz2 # Need to be downloaded from sourceforge
tar -xvf PySolFC-Cardsets-3.0.tar.bz2 # Needs to be downloaded from sourceforge
mkdir -p ~/.PySolFC
rmdir ~/.PySolFC/cardsets
ln -s "`pwd`/PySolFC-Cardsets-2.0" ~/.PySolFC/cardsets
ln -s "`pwd`/PySolFC-Cardsets-3.0" ~/.PySolFC/cardsets
python pysol.py
```
<b>Note!</b> If you are using a Debian derivative (e.g: Debian, Ubuntu, or
Linu Mint) and you are getting an error of "No cardsets were found !!! Main
Linux Mint) and you are getting an error of "No cardsets were found !!! Main
data directory is `[insert dir here]` Please check your PySol installation.",
then you likely installed the cardsets package which has removed some files
that are needed by pysol from source (without the debian modifications).
@ -94,20 +118,24 @@ per the instructions above.
At the moment, this only works on POSIX (Linux, FreeBSD and similar) systems.
Windows and Mac users - you'll need to chip in with a script for your system.
#### 1 - Install build prerequisites: six and random2
#### 1 - Install build prerequisite: pysol-cards
This is kind of stupid and maybe it can be fixed in the future, but for now:
```
pip install six
pip install random2
pip install pysol-cards
```
You may want to use your OS distribution package system instead, for example:
```
sudo apt-get install python-six
sudo apt-get install python-random2
sudo apt-get install python3-pysol-cards
```
For Pillow compilation, libjpeg headers and libraries need to be available:
```
sudo apt-get install libjpeg-dev
```
#### 2 - Clone the source from version control
@ -120,10 +148,10 @@ cd PySolFC
#### 3 - Create your virtual environment.
```
PKGDIR=/usr/local/packages/PySolFC # or whatever
export PKGDIR
mkdir -p "$PKGDIR"
( cd "$PKGDIR" && python -m venv ./env )
PKGTREE=/usr/local/packages/PySolFC # or whatever
export PKGTREE
mkdir -p "$PKGTREE"
( cd "$PKGTREE" && python -m venv ./env )
```
#### 4 - Run the install script
@ -137,28 +165,38 @@ mkdir -p "$PKGDIR"
#### 6 - Enjoy playing
```
"$PKGDIR"/env/bin/pysol.py
"$PKGTREE"/env/bin/pysol.py
```
## Alternate toolkit.
- Python2 (2.7 or later)
- Kivy (10.0 or later)
### Alternate toolkit.
- Kivy
- Features:
- Sound support integrated.
- Android apk build support.
- Running from source without installation:
```
python2 pysol.py --kivy
python pysol.py --kivy
```
### Android App
On the basis of Kivy an Android App is also available. You may build
your own using appropriate build instructions in README.android and
in Directory buildozer.
Some versions will also be published on F-droid.
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/packages/org.lufebe16.pysolfc/)
### Configuring Freecell Solver
If you want to use the solver, you should configure freecell-solver
( http://fc-solve.shlomifish.org/ ) by passing the following options
( https://fc-solve.shlomifish.org/ ) by passing the following options
to its CMake-based build-system:
`-DMAX_NUM_FREECELLS=8 -DMAX_NUM_STACKS=20 -DMAX_NUM_INITIAL_CARDS_IN_A_STACK=60`.
@ -181,6 +219,7 @@ to its CMake-based build-system:
- [PySol-Sound-Server fork](https://github.com/shlomif/pysol-sound-server)
- [Sources for the PySolFC web site](https://github.com/shlomif/pysolfc-website)
- [PySolFC Announcements Drafts](https://github.com/shlomif/pysolfc-announcements)
- [PySolFC-Cardsets tarballs sources repo](https://github.com/shlomif/PySolFC-Cardsets)
- [Extra mahjongg cardsets for PySolFC - originally for flowersol](https://github.com/shlomif/PySol-Extra-Mahjongg-Cardsets)
- [The old "pysol-music" distribution](https://github.com/shlomif/pysol-music)
@ -207,7 +246,7 @@ To facilitate coordination about contributing to PySol, please join us for a
real time Internet chat on
the <a href="irc://irc.freenode.net/##pysol">##pysol</a> chat room on
[Freenode](http://freenode.net/) (note the double
octothorpe/hash-sign/pound-sign) . We may set up
octothorpe/hash-sign/pound-sign). We may set up
chat rooms on different services in the future.
In addition, we set up a

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1,001 KiB

After

Width:  |  Height:  |  Size: 972 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 KiB

After

Width:  |  Height:  |  Size: 642 KiB

View file

@ -1,19 +0,0 @@
Actions to take upon a freshly installed Debian stretch/xfce (virtualbox).
Do something like:
user$ su
- enter root password.
root$ ./apt-install.sh
- .... some output.
root$ exit
user$ ./pip-install.sh
- .....some output.
Now all required packages are installed to proceed with the
android build.
LB170709.

View file

@ -1,12 +0,0 @@
#!/bin/bash
# als root ausführen!
apt-get install -y mercurial git default-jdk
apt-get install -y cython cython3
apt-get install -y python3-pip
apt-get install -y python3-yaml
apt-get install -y virtualenv
apt-get install -y pkg-config
apt-get install -y automake autoconf libtool
apt-get install -y zlib1g-dev
apt-get install -y libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev

View file

@ -1,8 +0,0 @@
#!/bin/bash
# als user installieren !
python3 -m pip install --user pyasn1
python3 -m pip install --user pyasn1_modules
python3 -m pip install --user requests
python3 -m pip install --user clint

View file

@ -1,240 +0,0 @@
#! /usr/bin/env python3
# -*- coding: iso-8859-1 -*-
import sys
import os
import requests
import logging
import hashlib
import glob
from zipfile import ZipFile, ZipInfo
from clint.textui import progress
cachefiles = [
('https://dl.google.com/android/repository/platform-tools-latest-linux.zip',
'',
'platform-tools'),
('https://dl.google.com/android/repository/tools_r25.2.5-linux.zip',
'577516819c8b5fae680f049d39014ff1ba4af870b687cab10595783e6f22d33e',
'tools'),
('https://dl.google.com/android/repository/android-19_r04.zip',
'5efc3a3a682c1d49128daddb6716c433edf16e63349f32959b6207524ac04039',
'platform'),
('https://dl.google.com/android/repository/build-tools_r26-linux.zip',
'7422682f92fb471d4aad4c053c9982a9a623377f9d5e4de7a73cd44ebf2f3c61',
'build-tools'),
('https://dl.google.com/'
'android/repository/android-ndk-r12b-linux-x86_64.zip',
'eafae2d614e5475a3bcfd7c5f201db5b963cc1290ee3e8ae791ff0c66757781e',
'ndk'),
]
# https://stackoverflow.com/questions/39296101:
class MyZipFile(ZipFile):
def extract(self, member, path=None, pwd=None):
if not isinstance(member, ZipInfo):
member = self.getinfo(member)
if path is None:
path = os.getcwd()
ret_val = self._extract_member(member, path, pwd)
attr = member.external_attr >> 16
os.chmod(ret_val, attr)
return ret_val
# Reused from fdroidserver:
def sha256_for_file(path):
with open(path, 'rb') as f:
s = hashlib.sha256()
while True:
data = f.read(4096)
if not data:
break
s.update(data)
return s.hexdigest()
# Adapted from fdroidserver:
def update_cache(cachedir, cachefiles):
for srcurl, shasum, typ in cachefiles:
filename = os.path.basename(srcurl)
local_filename = os.path.join(cachedir, filename)
if os.path.exists(local_filename):
local_length = os.path.getsize(local_filename)
else:
local_length = -1
if (typ == 'ndk') and (ndkloc is not None):
continue
elif (typ != 'tools') and (sdkloc is not None):
continue
resume_header = {}
download = True
try:
r = requests.head(srcurl, allow_redirects=True, timeout=60)
if r.status_code == 200:
content_length = int(r.headers.get('content-length'))
else:
content_length = local_length # skip the download
except requests.exceptions.RequestException as e:
content_length = local_length # skip the download
logger.warn('%s', e)
if local_length == content_length:
download = False
elif local_length > content_length:
logger.info('deleting corrupt file from cache: %s',
local_filename)
os.remove(local_filename)
logger.info("Downloading %s to cache", filename)
elif local_length > -1 and local_length < content_length:
logger.info("Resuming download of %s", local_filename)
resume_header = {
'Range': 'bytes=%d-%d' % (local_length, content_length)}
else:
logger.info("Downloading %s to cache", filename)
if download:
r = requests.get(srcurl, headers=resume_header,
stream=True, verify=False, allow_redirects=True)
content_length = int(r.headers.get('content-length'))
with open(local_filename, 'ab') as f:
for chunk in progress.bar(
r.iter_content(chunk_size=65536),
expected_size=(content_length / 65536) + 1):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
if not shasum == '':
v = sha256_for_file(local_filename)
if v == shasum:
logger.info("Shasum verified for %s", local_filename)
else:
logger.critical(
"Invalid shasum of '%s' detected for %s", v, local_filename)
os.remove(local_filename)
sys.exit(1)
# Build the sdk from zips.
def build_sdk(sdkdir, cachedir, cachfiles):
for srcurl, shasum, typ in cachefiles:
filename = os.path.basename(srcurl)
local_filename = os.path.join(cachedir, filename)
if typ == 'tools':
if os.path.exists(local_filename):
print('Extract: %s' % local_filename)
zf = MyZipFile(local_filename)
zf.extractall(sdkdir)
elif typ == 'platform-tools':
if (sdkloc is None) and (os.path.exists(local_filename)):
print('Extract: %s' % local_filename)
zf = MyZipFile(local_filename)
zf.extractall(sdkdir)
else:
print('Link to: %s' % sdkloc)
os.symlink(sdkloc + '/platform-tools',
sdkdir + '/platform-tools')
elif typ == 'platform':
if (sdkloc is None) and (os.path.exists(local_filename)):
print('Extract: %s' % local_filename)
zf = MyZipFile(local_filename)
zf.extractall(sdkdir + '/platforms')
else:
print('Link to: %s' % sdkloc)
os.symlink(sdkloc + '/platforms', sdkdir + '/platforms')
elif typ == 'build-tools':
if (sdkloc is None) and (os.path.exists(local_filename)):
print('Extract: %s' % local_filename)
zf = MyZipFile(local_filename)
zf.extractall(sdkdir + '/build-tools')
else:
print('Link to: %s' % sdkloc)
os.symlink(sdkloc + '/build-tools', sdkdir + '/build-tools')
elif typ == 'ndk':
if ndkloc is None:
print('Extract: %s' % local_filename)
zf = MyZipFile(local_filename)
zf.extractall(sdkdir)
lst = glob.glob(sdkdir + '/*-ndk-*')
print(lst)
os.rename(lst[0], sdkdir + '/ndk-bundle')
else:
print('Link to: %s' % ndkloc)
os.symlink(ndkloc, sdkdir + '/ndk-bundle')
logger = logging.getLogger('prepare-fdroid-build')
logging.basicConfig(format='%(message)s', level=logging.INFO)
logger.setLevel(logging.INFO)
# command line arguments
sdkloc = None
ndkloc = None
if len(sys.argv) > 1:
sdkloc = sys.argv[1]
if (len(sdkloc) > 0) and (sdkloc[-1] == '/'):
sdkloc = sdkloc[:-1]
if not os.path.isdir(sdkloc):
sdkloc = None
if len(sys.argv) > 2:
ndkloc = sys.argv[2]
if (len(ndkloc) > 0) and (ndkloc[-1] == '/'):
ndkloc = ndkloc[:-1]
if not os.path.isdir(ndkloc):
ndkloc = None
fdroidmode = None
if len(sys.argv) > 3:
fdroidmode = sys.argv[3]
if (len(fdroidmode) > 0):
fdroidmode = '1'
if sdkloc == "":
sdkloc = None
if ndkloc == "":
ndkloc = None
logger.info('sdkloc = %s' % sdkloc)
logger.info('ndkloc = %s' % ndkloc)
# sdkloc and ndkloc already set by the user and fdroidmode:
# nothing to do.
if (sdkloc is not None) and (ndkloc is not None) and (fdroidmode is not None):
sys.exit(0)
# cache dir (using the same as in fdroidserver/buildserver)
cachedir = os.path.join(os.getenv('HOME'), '.cache', 'fdroidserver')
logger.info('cachedir name is: %s', cachedir)
if not os.path.exists(cachedir):
os.makedirs(cachedir, 0o755)
logger.info('created cachedir %s', cachedir)
# sdkdir location
sdkdir = os.path.join(os.getenv('HOME'), '.cache', 'sdk-for-p4a')
logger.info('sdkdir name is: %s', sdkdir)
if not os.path.exists(sdkdir):
os.makedirs(sdkdir, 0o755)
logger.debug('created sdkdir %s', sdkdir)
update_cache(cachedir, cachefiles)
build_sdk(sdkdir, cachedir, cachefiles)
else:
logger.info('sdkdir %s already exists', sdkdir)

View file

@ -1,46 +0,0 @@
#!/bin/bash
echo '### prepare cardsets'
if [ ! -f ./PySolFC-Cardsets-2.0.tar.bz2 ]
then
echo '### downloading cardets'
# wget http://downloads.sourceforge.net/pysolfc/PySolFC-Cardsets-2.0.tar.bz2
wget https://netix.dl.sourceforge.net/project/pysolfc/PySolFC-Cardsets/PySolFC-Cardsets-2.0/PySolFC-Cardsets-2.0.tar.bz2
fi
if [ -f ./PySolFC-Cardsets-2.0.tar.bz2 ]
then
if [ ! -d ./PySolFC-Cardsets-2.0 ]
then
echo '### extracting selected cardets'
tar -xjvf PySolFC-Cardsets-2.0.tar.bz2 \
PySolFC-Cardsets-2.0/cardset-crystal-mahjongg \
PySolFC-Cardsets-2.0/cardset-dashavatara-ganjifa \
PySolFC-Cardsets-2.0/cardset-dondorf \
PySolFC-Cardsets-2.0/cardset-hexadeck \
PySolFC-Cardsets-2.0/cardset-kintengu \
PySolFC-Cardsets-2.0/cardset-matrix \
PySolFC-Cardsets-2.0/cardset-mughal-ganjifa \
PySolFC-Cardsets-2.0/cardset-oxymoron \
PySolFC-Cardsets-2.0/cardset-standard \
PySolFC-Cardsets-2.0/cardset-vienna-2k \
PySolFC-Cardsets-2.0/cardset-greywyvern
fi
if [ -d ./PySolFC-Cardsets-2.0 ]
then
echo '### processing cardets'
cd PySolFC-Cardsets-2.0
../../scripts/cardsetsgiftobmp
for i in cardset-*-bmp
do
rm -rf `basename $i -bmp`
done
cd ..
fi
else
echo '### error downloading cardsets'
fi
echo '### end cardsets'

View file

@ -1,17 +0,0 @@
#!/bin/bash
# memo:
# keytool -genkey -v -keystore my-release-keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 12000
if [ ! -d bin ]
then
echo "mkdir bin"
mkdir bin
fi
if [ -f ./bin/keystore ]
then
echo "keystore is already defined"
else
keytool -genkey -v -keystore ./bin/keystore -alias python -keyalg RSA -keysize 2048 -validity 12000
fi

View file

@ -1,8 +0,0 @@
#!/bin/bash
rm -rf tmp
python3 -m pythonforandroid.toolchain clean_dists
python3 -m pythonforandroid.toolchain clean_builds
rm -f *.apk
rm -rf PySolFC-Cardsets-2.0

View file

@ -1,12 +0,0 @@
#!/bin/bash
rm -rf tmp
rm -f *.apk
rm -f *.bz2
rm -f *.zip
rm -rf PySolFC-Cardsets-2.0
rm -rf ~/.local/share/python-for-android/packages
rm -rf ~/.local/share/python-for-android/build
rm -rf ~/.local/share/python-for-android/dists
python3 -m pip uninstall python-for-android -y
exit 0

View file

@ -1,32 +0,0 @@
#!/bin/bash
package='org.lufebe16.pysolfc'
version=`./version.py`
name='PySolFC'
tmpdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
if [ "$1" ]
then
package=${package}.dbg
name=${name}dbg
fi
python3 -m pythonforandroid.toolchain apk \
--sdk-dir ${HOME}/.cache/sdk-for-p4a \
--ndk-dir ${HOME}/.cache/sdk-for-p4a/ndk-bundle \
--android-api 19 \
--ndk-version r12b \
--arch armeabi-v7a \
--dist-name pysolfc \
--name ${name} \
--bootstrap=sdl2 \
--requirements kivy,hostpython2,random2 \
--minsdk 14 \
--private ${tmpdir} \
--package ${package} \
--version ${version} \
--orientation sensor \
--color=always \
--icon ${tmpdir}/data/images/misc/pysol01.png \
--presplash ${tmpdir}/data/images/misc/pysol06.png \
--copy-libs

View file

@ -1,56 +0,0 @@
#!/bin/bash
echo '### prepare sdk'
./initsdk.py $1 $2 $3
echo '### install p4a'
p4adir=${HOME}/.cache/tmp-for-p4a
mkdir -p ${p4adir}
p4aversion='0.5.3'
if [ ! -f ${p4adir}/${p4aversion}.zip ]
then
wget "https://github.com/kivy/python-for-android/archive/${p4aversion}.zip"
cp -a ./${p4aversion}.zip ${p4adir}/${p4aversion}.zip
rm -f ./${p4aversion}.zip
fi
if [ -f ${p4adir}/${p4aversion}.zip ]
then
python3 -m pip install -q --user "${p4adir}/${p4aversion}.zip"
else
echo "### download of ${p4aversion}.zip failed"
fi
echo '### prepare source'
srcdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
mkdir -p ${srcdir}
rm -rf ${srcdir}
cp -a .. ${srcdir}
rm -rf ${srcdir}/android
rm -rf ${srcdir}/src
cp -a main.py ${srcdir}/main.py
mkdir -p ${srcdir}/data/images/cards/bottoms/trumps-only
echo "" > ${srcdir}/data/images/cards/bottoms/trumps-only/.keep
echo '### prepare cardsets'
cardsdir=${HOME}/.cache/tmp-for-p4a/pysolfc
if [ ! -d ${cardsdir}/PySolFC-Cardsets-2.0 ]
then
./mkcards
mv PySolFC-Cardsets-2.0 ${cardsdir}/
rm -f PySolFC-Cardsets-2.0.tar.bz2
fi
if [ -d ${cardsdir}/PySolFC-Cardsets-2.0 ]
then
echo '### copying cardsets'
cp -a ${cardsdir}/PySolFC-Cardsets-2.0/* ${srcdir}/data
fi
echo '### end init'

View file

@ -1,64 +0,0 @@
#!/bin/bash
pass1=""
pass2=""
keyalias="python"
keystore="${PWD}/bin/keystore"
if [ $1 ]
then
pass1=$1
pass2=$1
else
echo "usage: ./mkp4a.release <keystore-password> [<keyalias-password>] [<keyalias>] [<keystore-path>]"
echo " (use ./mkkeystore to create one in default location)"
exit
fi
if [ $2 ]
then
pass2=$2
fi
if [ $3 ]
then
keyalias=$3
fi
if [ $4 ]
then
keystore=$4
fi
export P4A_RELEASE_KEYSTORE="$keystore"
export P4A_RELEASE_KEYSTORE_PASSWD="$pass1"
export P4A_RELEASE_KEYALIAS_PASSWD="$pass2"
export P4A_RELEASE_KEYALIAS="$keyalias"
version=`./version.py`
tmpdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
python3 -m pythonforandroid.toolchain apk \
--sdk-dir ${HOME}/.cache/sdk-for-p4a \
--ndk-dir ${HOME}/.cache/sdk-for-p4a/ndk-bundle \
--android-api 19 \
--ndk-version r12b \
--arch armeabi-v7a \
--dist-name pysolfc \
--name PySolFC \
--bootstrap=sdl2 \
--requirements kivy,hostpython2,random2 \
--release \
--sign \
--minsdk 14 \
--private ${tmpdir} \
--package org.lufebe16.pysolfc \
--version ${version} \
--orientation sensor \
--color=always \
--icon ${tmpdir}/data/images/misc/pysol01.png \
--presplash ${tmpdir}/data/images/misc/pysol06.png \
--copy-libs
# keystore options (instead environment vars):
#
# keystore: --keystore <file>
# key alias --signkey <keyalias>
# keystore passwd --keystorepw <pass1>
# key passwd --signkeypw <pass2>

View file

@ -1,57 +0,0 @@
#!/bin/bash
echo '### p4a started'
# sdk-dir and nkd-dir from command line (fdroid mode)
sdkdir="${HOME}/.cache/sdk-for-p4a"
ndkdir="${HOME}/.cache/sdk-for-p4a/ndk-bundle"
if [ $1 ]
then
echo "set sdk to: $1"
sdkdir="$1"
fi
if [ $2 ]
then
echo "set ndk to: $2"
ndkdir="$2"
fi
echo '### run toolchain'
version=`./version.py`
tmpdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
python3 -m pythonforandroid.toolchain apk \
--sdk-dir ${sdkdir} \
--ndk-dir ${ndkdir} \
--android-api 19 \
--ndk-version r12b \
--arch armeabi-v7a \
--dist-name pysolfc \
--name PySolFC \
--bootstrap=sdl2 \
--requirements kivy,hostpython2,random2 \
--release \
--minsdk 14 \
--private ${tmpdir} \
--package org.lufebe16.pysolfc \
--version ${version} \
--orientation sensor \
--color=always \
--icon ${tmpdir}/data/images/misc/pysol01.png \
--presplash ${tmpdir}/data/images/misc/pysol06.png \
--copy-libs
# python3 -m pythonforandroid.toolchain apk
# ...
# --release #1
# --sign #2
# ...
#
# ad 1,2:
# ohne: -> debug version
# 1: -> release unsigned
# 1 und 2: -> release version.
echo '### p4a finished'

View file

@ -1,33 +0,0 @@
#!/usr/bin/env python3
# ---------------------------------------------------------------------------
#
# PySol -- a Python Solitaire game
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING.
# If not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ---------------------------------------------------------------------------
# import pychecker.checker
# Starter for kivy/android using buildozer: Needs an explizitly
# named main.py as startpoint.
if True:
import sys
sys.path.insert(0, '..')
if True:
from pysollib.settings import VERSION
print(VERSION)

306
appdata.xml Normal file
View file

@ -0,0 +1,306 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2022 Stephan Sokolow -->
<!-- Copyright 2021-2022 Joe R. (@joeraz) -->
<!-- Copyright 2017-2021 Shlomi Fish -->
<component type="desktop-application">
<id>io.sourceforge.pysolfc.PySolFC</id>
<metadata_license>FSFAP</metadata_license>
<project_license>GPL-3.0-or-later</project_license>
<name>PySolFC</name>
<summary>Solitaire game compilation</summary>
<description>
<p>A collection of more than 1200 Solitaire games, using various deck types
including international standard, hex-a-deck, mahjongg, and hanafuda.</p>
</description>
<launchable type="desktop-id">pysol.desktop</launchable>
<categories>
<category>Game</category>
<category>CardGame</category>
</categories>
<keywords>
<keyword>cards</keyword>
<keyword>klondike</keyword>
<keyword>patience</keyword>
<!-- "pysolfc" omitted because it's also the title.
Possibly remove from .desktop file Keywords field. -->
<keyword>solitaire</keyword>
</keywords>
<screenshots>
<screenshot type="default">
<image>https://pysolfc.sourceforge.io/img/PySolFC_2.18_1.png</image>
<caption>Klondike with default theme</caption>
</screenshot>
<screenshot>
<image>https://pysolfc.sourceforge.io/img/PySolFC_2.18_2.png</image>
<caption>Clock, Neo cards, Fractal Blue table, custom backs</caption>
</screenshot>
<screenshot>
<image>https://pysolfc.sourceforge.io/img/PySolFC_2.18_3.png</image>
<caption>Bits n Bytes, Neo Hex cards, Felt Green table, custom backs</caption>
</screenshot>
<screenshot>
<image>https://pysolfc.sourceforge.io/img/PySolFC_2.18_4.png</image>
<caption>Firecracker, Louie Mantia Hanafuda cards, Mountains table</caption>
</screenshot>
<screenshot>
<image>https://pysolfc.sourceforge.io/img/PySolFC_2.18_5.png</image>
<caption>Mahjongg Taipei, Uni Mahjongg Tiles, Wood table</caption>
</screenshot>
<screenshot>
<image>https://pysolfc.sourceforge.io/img/PySolFC_2.18_6.png</image>
<caption>Shisen-Sho 24x12, KMahjongg tileset, Nostalgy table</caption>
</screenshot>
</screenshots>
<content_rating type="oars-1.1"/>
<url type="homepage">https://pysolfc.sourceforge.io/</url>
<url type="bugtracker">https://github.com/shlomif/PySolFC/issues</url>
<url type="help">https://pysolfc.sourceforge.io/doc/index.html</url>
<url type="vcs-browser">https://github.com/shlomif/PySolFC</url>
<url type="contribute">https://github.com/shlomif/PySolFC/blob/master/CONTRIBUTING.md</url>
<provides>
<binary>pysol.py</binary>
<python3>pysollib</python3>
<python3>pysol_cards</python3>
</provides>
<requires>
<!-- Meaning: Requires one of pointing, tablet, or touch -->
<control>pointing</control>
<control>tablet</control>
<control>touch</control>
</requires>
<requires>
<!-- Meaning: Will never use Internet access even if offered -->
<internet>offline-only</internet>
</requires>
<supports>
<control>keyboard</control>
</supports>
<releases>
<release version="2.18.0" date="2022-09-09">
<description>
<ul>
<li>Advanced search feature - the ability to search for games, cardsets, or table tiles based on many different criteria.</li>
<li>Complete documentation containing rules for all 1,100+ games.</li>
<li>Revamped status bar, displaying more info.</li>
<li>The Find Card feature now supports all types of games.</li>
<li>Many new display and assist options.</li>
<li>Bugfixes, code cleanup, etc.</li>
</ul>
</description>
</release>
<release version="2.16.0" date="2022-05-10">
<description>
<p>Anyone upgrading from a version prior to 2.15.0 should read the notes for that version before upgrading. New in this release:</p>
<ul>
<li>Enhancements to many images and graphical displays.</li>
<li>More game rules in the documentation.</li>
<li>Bugfixes, cleanup, and other enhancements.</li>
</ul>
</description>
</release>
<release version="2.15.0" date="2022-03-12" type="development">
<description>
<p>
This is a pretty sizable release, so this beta version is being
offered before a stable 2.16 in the next month or two. Any feedback
and bug reports are greatly appreciated. The full list of changes for
this release is quite long, but here are the highlights:
</p>
<ul>
<li>
There is a new Cardsets release - PySolFC-Cardsets v.2.1 (required
to run 2.15).
</li>
<li>
35 new games, plus enhancements and fixes to many existing games.
</li>
<li>
New high resolution default display. This new display uses high
resolution cardsets and scaling to make the games look impressive
on larger monitors, but will still scale for smaller displays
too.
</li>
<li>
Note that the new high-resolution options will not override your
currently selected options for existing users. If you want to use
the new settings, you can delete or rename your options.cfg file.
</li>
<li>
New feature to search for games, cardsets, and table tiles by
name.
</li>
<li>Many new display options.</li>
<li>Many missing game rules added to the documentation.</li>
<li>Bugfixes and cleanup.</li>
<li>And more.</li>
</ul>
</description>
</release>
<release version="2.14.1" date="2021-12-10">
<p>
This release fixes a number of bugs, including one that causes crashes
for some users when opening the select game/cardset/table tile window.
</p>
</release>
<release version="2.14.0" date="2021-09-19">
<description>
<ul>
<li>16 new games</li>
<li>
Support for Python 3.10 (Minimum requirement is still Python 2.7)
</li>
<li>A new macOS package.</li>
<li>
Enhancements to the tree select dialogs for selecting games,
cardsets, and table tiles.
</li>
<li>Further additions/improvements to the documentation.</li>
<li>Many bugfixes and cleanups.</li>
</ul>
</description>
</release>
<release version="2.12.0" date="2021-07-11">
<description>
<ul>
<li>40 new games!</li>
<li>
Support for using higher resolution cardsets. The high resolution
"Neo" cardset has been added to the Windows Installer package and
is available in a preview release of PySolFC-Cardsets 2.1
</li>
<li>Improved organization and categorization of the games list.</li>
<li>
New display options - added option to center the game layout in
the window.
</li>
<li>
New audio options - can now disable music without disabling sound
effects.
</li>
<li>
Improved documentation - added rules to a large number of games
that were missing them.
</li>
<li>Bugfixes and cleanup.</li>
</ul>
</description>
</release>
<release version="2.10.0" date="2020-06-22">
<description>
<ul>
<li>Fix moving cards in the Scorpion Tail game.</li>
<li>One can optionally load the Freecell Solver and the Black Hole
Solver using their DLLs (for better speed).</li>
<li>Test Windows Version in the installer</li>
<li>Pause when showing statistics</li>
<li>Some cleanups and refactoring.</li>
</ul>
</description>
</release>
<release version="2.8.0" date="2020-03-05">
<description>
<ul>
<li>A new logo thanks to @ghostofiht.</li>
<li>Fix for freezes (pygame upgrade)</li>
<li>Fixed Three Peaks scoring</li>
<li>Compatibility with Pillow 6.x</li>
<li>Restore the "Save games geometry" feature</li>
<li>Added a NEWS.asciidoc file.</li>
<li>Better kivy/Android support</li>
<li>Using ttk and configobj as shipped in the python dist (instead of
forked versions)</li>
<li>Requiring <code>attrs</code> and <code>pysol-cards</code> from
PyPI</li>
<li>Added tests, bug fixes and refactorings.</li>
<li>Add the -g and --deal command line options.</li>
</ul>
</description>
</release>
<release version="2.6.2" date="2019-03-04">
<description>
<ul>
<li>Fixes for the Windows and macOS packages.</li>
<li>Forbid illegal moves in Spider and some other variants.</li>
</ul>
</description>
</release>
<release version="2.6.0" date="2019-02-14">
<description>
<ul>
<li>Support for solving Golf using a solver</li>
<li>An untested macOS package (we need testers)</li>
<li>A bug fix</li>
<li>Ability to run the test suite without python 2.x and/or
pygtk</li>
<li>Code cleanups.</li>
</ul>
</description>
</release>
<release version="2.4.0" date="2018-06-23">
<description>
<ul>
<li>The Windows installer now includes the revitalised PySol-music
package. For more info, see shlomif/PySolFC#82.</li>
<li>Many improvements to the test suite and the board import
functionality.</li>
<li>Some bug fixes.</li>
</ul>
</description>
</release>
<release version="2.2.0" date="2018-04-16">
<description>
<ul>
<li>The Microsoft Windows binary installer now contains and supports
the solver for Freecell and other games.</li>
<li>Many bug fixes.</li>
</ul>
</description>
</release>
<release version="2.1.4" date="2018-03-31" type="development">
<description>
<ul>
<li>We now provide a Microsoft Windows binary installer again, thanks
to the great work of Roderik Ploszek. Note that the solvers (for
FreeCell/etc.) are not installed as part of it yet, but they are
available separately.</li>
<li><code>pysol-sound-server</code> was updated to support Python
3.x.</li>
<li>Fixes for the board export / solver input, and for redealing upon
restart of the "ms*" deals.</li>
<li>Various cleanups.</li>
</ul>
</description>
</release>
<release version="2.1.3" date="2018-03-05" type="development">
<description>
<ul>
<li>Support for the kivy toolkit for running under Android-based
devices (currently python 2.7-only)</li>
<li>Fixed the help system and removed the need for the sgmllib
module.</li>
<li>Other fixes and cleanups.</li>
<li>Currently there is no Microsoft Windows binary package. Help or
insights will be appreciated.</li>
</ul>
</description>
</release>
<release version="2.1.0" date="2017-11-19" type="development">
<description>
<ul>
<li>The code is now compatible with both Python 2.7.x and Python
3.x</li>
<li>One can deal all MS FreeCell/FC-pro deals by specifying e.g:
"ms100000" as the seed.</li>
<li>Support for Black Hole and All in a Row solver was added.</li>
<li>Test suite and CI were added to the repository.</li>
<li>The code now passes flake8 validation.</li>
<li>Some improvements to the solver dialog.</li>
</ul>
</description>
</release>
<release version="2.0" date="2009-12-04"/>
<release version="1.1" date="2007-09-06"/>
<release version="1.0" date="2007-02-21"/>
</releases>
<translation type="gettext">pysol</translation>
</component>

19
buildozer/aversion Executable file
View file

@ -0,0 +1,19 @@
#!/bin/bash
appdir=""
if [ "$1" ]
then
appdir=$1
else
exit 1
fi
# current android version mumber.
version="3.2.0"
sversion=$(echo $version | sed -E "s:(.*)\..*:\1:")
tuple=$(echo $version | sed -E "s:(.*)\.(.*)\.(.*):(\1, \2, \3):")
# patch different version info accordingly.
sed -E "s:VERSION_TUPLE =.*:VERSION_TUPLE = $tuple:" -i $appdir/pysollib/settings.py
sed -E "s:(.*\(')dev(',.*):\1fc-$sversion\2:" -i $appdir/pysollib/gamedb.py
echo "VERSION = $version"

View file

@ -0,0 +1,89 @@
MEMO:
-----
This is a memo on how to proceed to get an android
app out of the repo.
You should have python and virtualenv installed on
your system. You might need to add missing
packages to your system with your os package manager
and through pip.
Prepare
-------
Move to directory buildozer.
First create and enter a virtualenv and load the
required python modules using pip install.
$> virtualenv --system-site-packages ENV
$> . ENV/bin/activate
$> pip install -r pipreq.txt
Then prepare the source package. The script
assembles all necessary files in the
subdirectory ./tmp/. It also includes a minimal
set of cards.
$> ./buildozer.init
Up to this point it should work fine.
Make a debug version
--------------------
Run the buildozer command. Its work is
defined in the file buildozer.spec. Only
minimal changes have been made to the default
setup, to reflect the local situation.
Execution of buildozer needs some time. You
will have to accept a lizense from google.
$> ./buildozer.run
Finally if all worked fine, the apk file is found in
directory ./bin/.
If it fails, set the log_level in buildozer.spec to 2
to get better information on what to do.
Make a release Version:
-----------------------
$> ./buildozer.run release
Without signing information the result apk is a
'release-unsigned' that can be signed afterwards
with jarsigner.
Alternatively signing information could be supplied
through Environment vars. See buildozer and
python-for-android documentatin for further
instructions.
test notes:
----------
1) on a debian testing desktop developer installation
zip archiver was missing. apt install zip solved
that.
2) on a gentoo linux recipe pyjnius didnt find
javac, the java compiler. Added a link to it
in ENV/bin.
3) built apks worked on android 7 and android 8.
(no newer devices had been available)
4) on fdroid, that provided a light weight build server
with debian bullseye the following additional packages had
to be installed (apt-get):
- ant autoconf build-essential ccache gettext imagemagick
- libffi-dev libltdl-dev libssl-dev libtool python3-tk
- virtualenv wget zlib1g-dev

39
buildozer/buildozer.init Executable file
View file

@ -0,0 +1,39 @@
#!/bin/bash
set -eux
tmpdir=./tmp
# NOTE: $1 will be set with fdroid builds only.
echo '### prepare source'
(cd .. && make rules && make all_games_html && make mo)
mkdir -p ${tmpdir}
rm -rf ${tmpdir}/*
cp -a ../data ${tmpdir}
cp -a ../docs ${tmpdir}
cp -a ../html-src ${tmpdir}
cp -a ../locale ${tmpdir}
cp -a ../po ${tmpdir}
cp -a ../pysollib ${tmpdir}
cp -a ../scripts ${tmpdir}
cp -a ../pysol.py ${tmpdir}
cp -a main.py ${tmpdir}
mkdir -p ${tmpdir}/data/images/cards/bottoms/trumps-only
echo "" > ${tmpdir}/data/images/cards/bottoms/trumps-only/.keep
echo '### prepare cardsets'
./mkcards
./resize4k ${tmpdir}/data/tiles
cp -a cardsets/* ${tmpdir}/data
echo '### eval version'
./aversion ${tmpdir} > ${tmpdir}/version.txt
echo '### end init'

27
buildozer/buildozer.run Executable file
View file

@ -0,0 +1,27 @@
#!/bin/bash
#set -eux
echo '### prepare jvm heap for gradle'
export GRADLE_OPTS="-Xms1724m -Xmx5048m -Dorg.gradle.jvmargs='-Xms1724m -Xmx5048m'"
echo '### run buildozer'
if [ "$1" == "test" ]
then
echo '### ... release.test'
buildozer --profile test android release
exit 0
fi
if [ "$1" ]
then
echo '### ... release'
buildozer android release
else
echo '### ... debug'
buildozer android debug
fi
echo '### end run'

447
buildozer/buildozer.spec Normal file
View file

@ -0,0 +1,447 @@
[app]
# (str) Title of your application
title = PySolFC
# (str) Package name
package.name = pysolfc
# (str) Package domain (needed for android/ios packaging)
package.domain = org.lufebe16
# (str) Source code where the main.py live
source.dir = ./tmp
# (list) Source files to include (let empty to include all the files)
#source.include_exts = py,png,jpg,kv,atlas
# (list) List of inclusions using pattern matching
#source.include_patterns = assets/*,images/*.png
# (list) Source files to exclude (let empty to not exclude anything)
#source.exclude_exts = spec
source.exclude_exts = spec,gif
# (list) List of directory to exclude (let empty to not exclude anything)
#source.exclude_dirs = tests, bin, venv
# (list) List of exclusions using pattern matching
# Do not prefix with './'
#source.exclude_patterns = license,images/*/*.jpg
# (str) Application versioning (method 1)
# version = 0.1
# (str) Application versioning (method 2)
version.regex = VERSION = (.*)
version.filename = %(source.dir)s/version.txt
# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy,pysol-cards,configobj,attrs
# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy
# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png
presplash.filename = %(source.dir)s/data/images/logo-with-margin-1024.png
# (str) Icon of the application
#icon.filename = %(source.dir)s/data/icon.png
icon.filename = %(source.dir)s/data/images/icons/48x48/pysol.png
# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
orientation = portrait, landscape
# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY
#
# OSX Specific
#
#
# author = © Copyright Info
# change the major version of python used by the app
osx.python_version = 3
# Kivy version to use
osx.kivy_version = 1.9.1
#
# Android specific
#
# (bool) Indicate if the application should be fullscreen or not
fullscreen = 0
# (string) Presplash background color (for android toolchain)
# Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
# red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
# darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
# olive, purple, silver, teal.
android.presplash_color = #101010
# (string) Presplash animation using Lottie format.
# see https://lottiefiles.com/ for examples and https://airbnb.design/lottie/
# for general documentation.
# Lottie files can be created using various tools, like Adobe After Effect or Synfig.
#android.presplash_lottie = "path/to/lottie/file.json"
# (str) Adaptive icon of the application (used if Android API level is 26+ at runtime)
#icon.adaptive_foreground.filename = %(source.dir)s/data/icon_fg.png
#icon.adaptive_background.filename = %(source.dir)s/data/icon_bg.png
# (list) Permissions
#android.permissions = INTERNET
android.permissions = WRITE_EXTERNAL_STORAGE, MANAGE_EXTERNAL_STORAGE
# (list) features (adds uses-feature -tags to manifest)
#android.features = android.hardware.usb.host
# (int) Target Android API, should be as high as possible.
android.api = 34
# (int) Minimum API your APK / AAB will support.
#android.minapi = 21
# (int) Android SDK version to use
#android.sdk = 20
# (str) Android NDK version to use
#android.ndk = 23b
# (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
#android.ndk_api = 21
# (bool) Use --private data storage (True) or --dir public storage (False)
#android.private_storage = True
# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =
# (str) Android SDK directory (if empty, it will be automatically downloaded.)
#android.sdk_path =
# (str) ANT directory (if empty, it will be automatically downloaded.)
#android.ant_path =
# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
# android.skip_update = False
# (bool) If True, then automatically accept SDK license
# agreements. This is intended for automation only. If set to False,
# the default, you will be shown the license when first running
# buildozer.
# android.accept_sdk_license = False
# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.kivy.android.PythonActivity
# (str) Full name including package path of the Java class that implements Android Activity
# use that parameter together with android.entrypoint to set custom Java class instead of PythonActivity
#android.activity_class_name = org.kivy.android.PythonActivity
# (str) Extra xml to write directly inside the <manifest> element of AndroidManifest.xml
# use that parameter to provide a filename from where to load your custom XML code
#android.extra_manifest_xml = ./src/android/extra_manifest.xml
# (str) Extra xml to write directly inside the <manifest><application> tag of AndroidManifest.xml
# use that parameter to provide a filename from where to load your custom XML arguments:
android.extra_manifest_application_arguments = ./src/manifest/extra_attributes.xml
# (str) Full name including package path of the Java class that implements Python Service
# use that parameter to set custom Java class instead of PythonService
#android.service_class_name = org.kivy.android.PythonService
# (str) Android app theme, default is ok for Kivy-based app
# android.apptheme = "@android:style/Theme.NoTitleBar"
# (list) Pattern to whitelist for the whole project
#android.whitelist =
# (str) Path to a custom whitelist file
#android.whitelist_src =
# (str) Path to a custom blacklist file
#android.blacklist_src =
# (list) List of Java .jar files to add to the libs so that pyjnius can access
# their classes. Don't add jars that you do not need, since extra jars can slow
# down the build process. Allows wildcards matching, for example:
# OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar
# (list) List of Java files to add to the android project (can be java or a
# directory containing the files)
#android.add_src =
# (list) Android AAR archives to add
#android.add_aars =
# (list) Put these files or directories in the apk assets directory.
# Either form may be used, and assets need not be in 'source.include_exts'.
# 1) android.add_assets = source_asset_relative_path
# 2) android.add_assets = source_asset_path:destination_asset_relative_path
#android.add_assets =
# (list) Gradle dependencies to add
#android.gradle_dependencies =
android.gradle_dependencies =
androidx.appcompat:appcompat:1.4.2
# (bool) Enable AndroidX support. Enable when 'android.gradle_dependencies'
# contains an 'androidx' package, or any package from Kotlin source.
# android.enable_androidx requires android.api >= 28
#android.enable_androidx = False
android.enable_androidx = True
# (list) add java compile options
# this can for example be necessary when importing certain java libraries using the 'android.gradle_dependencies' option
# see https://developer.android.com/studio/write/java8-support for further information
# android.add_compile_options = "sourceCompatibility = 1.8", "targetCompatibility = 1.8"
# (list) Gradle repositories to add {can be necessary for some android.gradle_dependencies}
# please enclose in double quotes
# e.g. android.gradle_repositories = "maven { url 'https://kotlin.bintray.com/ktor' }"
#android.add_gradle_repositories =
# (list) packaging options to add
# see https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html
# can be necessary to solve conflicts in gradle_dependencies
# please enclose in double quotes
# e.g. android.add_packaging_options = "exclude 'META-INF/common.kotlin_module'", "exclude 'META-INF/*.kotlin_module'"
#android.add_packaging_options =
# (list) Java classes to add as activities to the manifest.
#android.add_activities = com.example.ExampleActivity
# (str) OUYA Console category. Should be one of GAME or APP
# If you leave this blank, OUYA support will not be enabled
#android.ouya.category = GAME
# (str) Filename of OUYA Console icon. It must be a 732x412 png image.
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png
# (str) XML file to include as an intent filters in <activity> tag
#android.manifest.intent_filters =
# (str) launchMode to set for the main activity
#android.manifest.launch_mode = standard
# (list) Android additional libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
#android.add_libs_arm64_v8a = libs/android-v8/*.so
#android.add_libs_x86 = libs/android-x86/*.so
#android.add_libs_mips = libs/android-mips/*.so
# (bool) Indicate whether the screen should stay on
# Don't forget to add the WAKE_LOCK permission if you set this to True
#android.wakelock = False
# (list) Android application meta-data to set (key=value format)
#android.meta_data =
# (list) Android library project to add (will be added in the
# project.properties automatically.)
#android.library_references =
# (list) Android shared libraries which will be added to AndroidManifest.xml using <uses-library> tag
#android.uses_library =
# (str) Android logcat filters to use
#android.logcat_filters = *:S python:D
# (bool) Android logcat only display log for activity's pid
#android.logcat_pid_only = False
# (str) Android additional adb arguments
#android.adb_args = -H host.docker.internal
# (bool) Copy library instead of making a libpymodules.so
#android.copy_libs = 1
# (list) The Android archs to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
# In past, was `android.arch` as we weren't supporting builds for multiple archs at the same time.
android.archs = arm64-v8a, armeabi-v7a
#android.archs = x86
#android.archs = x86_64
#android.archs = armeabi-v7a
# (int) overrides automatic versionCode computation (used in build.gradle)
# this is not the same as app version and should only be edited if you know what you're doing
# android.numeric_version = 1
# (bool) enables Android auto backup feature (Android API >=23)
android.allow_backup = True
# (str) XML file for custom backup rules (see official auto backup documentation)
# android.backup_rules =
# (str) If you need to insert variables into your AndroidManifest.xml file,
# you can do so with the manifestPlaceholders property.
# This property takes a map of key-value pairs. (via a string)
# Usage example : android.manifest_placeholders = [myCustomUrl:\"org.kivy.customurl\"]
# android.manifest_placeholders = [:]
# (bool) disables the compilation of py to pyc/pyo files when packaging
# android.no-compile-pyo = True
# (str) The format used to package the app for release mode (aab or apk or aar).
# android.release_artifact = aab
android.release_artifact = apk
# (str) The format used to package the app for debug mode (apk or aar).
# android.debug_artifact = apk
android.debug_artifact = apk
#
# Python for android (p4a) specific
#
# (str) python-for-android URL to use for checkout
#p4a.url =
# (str) python-for-android fork to use in case if p4a.url is not specified, defaults to upstream (kivy)
#p4a.fork = kivy
# (str) python-for-android branch to use, defaults to master
#p4a.branch = master
# (str) python-for-android specific commit to use, defaults to HEAD, must be within p4a.branch
p4a.commit = v2024.01.21
# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
#p4a.source_dir =
#p4a.source_dir = /home/lb/SourcePackages/python-for-android/python-for-android
# (str) The directory in which python-for-android should look for your own build recipes (if any)
#p4a.local_recipes =
# (str) Filename to the hook for p4a
#p4a.hook =
# (str) Bootstrap to use for android builds
# p4a.bootstrap = sdl2
# (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)
#p4a.port =
# Control passing the --use-setup-py vs --ignore-setup-py to p4a
# "in the future" --use-setup-py is going to be the default behaviour in p4a, right now it is not
# Setting this to false will pass --ignore-setup-py, true will pass --use-setup-py
# NOTE: this is general setuptools integration, having pyproject.toml is enough, no need to generate
# setup.py if you're using Poetry, but you need to add "toml" to source.include_exts.
#p4a.setup_py = false
# (str) extra command line arguments to pass when invoking pythonforandroid.toolchain
#p4a.extra_args =
#
# iOS specific
#
# (str) Path to a custom kivy-ios folder
#ios.kivy_ios_dir = ../kivy-ios
# Alternately, specify the URL and branch of a git checkout:
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master
# Another platform dependency: ios-deploy
# Uncomment to use a custom checkout
#ios.ios_deploy_dir = ../ios_deploy
# Or specify URL and branch
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.10.0
# (bool) Whether or not to sign the code
ios.codesign.allowed = false
# (str) Name of the certificate to use for signing the debug version
# Get a list of available identities: buildozer ios list_identities
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"
# (str) The development team to use for signing the debug version
#ios.codesign.development_team.debug = <hexstring>
# (str) Name of the certificate to use for signing the release version
#ios.codesign.release = %(ios.codesign.debug)s
# (str) The development team to use for signing the release version
#ios.codesign.development_team.release = <hexstring>
# (str) URL pointing to .ipa file to be installed
# This option should be defined along with `display_image_url` and `full_size_image_url` options.
#ios.manifest.app_url =
# (str) URL pointing to an icon (57x57px) to be displayed during download
# This option should be defined along with `app_url` and `full_size_image_url` options.
#ios.manifest.display_image_url =
# (str) URL pointing to a large icon (512x512px) to be used by iTunes
# This option should be defined along with `app_url` and `display_image_url` options.
#ios.manifest.full_size_image_url =
[buildozer]
# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2
# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 1
# (str) Path to build artifact storage, absolute or relative to spec file
# build_dir = ./.buildozer
# (str) Path to build output (i.e. .apk, .aab, .ipa) storage
# bin_dir = ./bin
# -----------------------------------------------------------------------------
# List as sections
#
# You can define all the "list" as [section:key].
# Each line will be considered as a option to the list.
# Let's take [app] / source.exclude_patterns.
# Instead of doing:
#
#[app]
#source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
#
# This can be translated into:
#
#[app:source.exclude_patterns]
#license
#data/audio/*.wav
#data/images/original/*
#
# -----------------------------------------------------------------------------
# Profiles
#
# You can extend section / key with a profile
# For example, you want to deploy a demo version of your application without
# HD content. You could first change the title to add "(demo)" in the name
# and extend the excluded directories to remove the HD content.
#
#[app@demo]
#title = My Application (demo)
#
#[app:source.exclude_patterns@demo]
#images/hd/*
#
# Then, invoke the command line with the "demo" profile:
#
#buildozer --profile demo android debug
[app@test]
title = PySolFC.test
package.name = pysolfc.test

51
buildozer/fdroid.init Executable file
View file

@ -0,0 +1,51 @@
#!/bin/bash
set -eux
if [[ -z ${AAPI+x} ]]
then
exit 1
fi
python3 -m venv FINIT
source FINIT/bin/activate
pip3 install attrs
pip3 install pysol_cards
tmpdir=..
echo '### prepare source'
(cd .. && make rules && make all_games_html && make mo)
cp -a main.py ${tmpdir}
mkdir -p ${tmpdir}/data/images/cards/bottoms/trumps-only
echo "" > ${tmpdir}/data/images/cards/bottoms/trumps-only/.keep
echo '### prepare cardsets'
./mkcards
cp -a cardsets/* ${tmpdir}/data
echo '### resize 4k images'
./resize4k ${tmpdir}/data/tiles
echo '### eval version'
./aversion ${tmpdir} > ${tmpdir}/version.txt
echo '### prepare buildozer'
sed -r "s:#? ?source\.dir =.*:source.dir = ..:" -i buildozer.spec
sed -r "s:#? ?source\.exclude_dirs =.*:source.exclude_dirs = Screenshots,android,buildozer,contrib,tests,fastlane:" -i buildozer.spec
sed -r "s:#? ?source\.exclude_patterns =.*:source.exclude_patterns = README.*,AUTHORS.md,CONTRIBUTING.md,COPYING,MANIFEST.in,Makefile,NEWS.asciidoc,appdata.xml,pysol.py,run-tests.pl,setup.cfg,setup.py,setup_osx.py,local.properties,p4a_env_vars.txt:" -i buildozer.spec
sed -r "s:#? ?android\.skip_update =.*:android.skip_update = True:" -i buildozer.spec
sed -r "s:#? ?android\.accept_sdk_license =.*:android.accept_sdk_license = False:" -i buildozer.spec
sed -r "s:#? ?log_level =.*:log_level = 2:" -i buildozer.spec
sed -r "s:#? ?warn_on_root =.*:warn_on_root = 0:" -i buildozer.spec
echo '### end init'
deactivate
rm -rf FINIT

5
buildozer/helpers/avdmanager Executable file
View file

@ -0,0 +1,5 @@
#!/bin/sh
# Fake avdmanager. Runs in the context of a python-for-android build.
# (maybe useful in f-droid builds, do not use otherwise)
platforms=$(ls -1 $ANDROIDSDK/platforms
echo $platforms | sed -e "s/android-/\nAPI level: /g"

7
buildozer/helpers/setapiforp4a Executable file
View file

@ -0,0 +1,7 @@
#!/bin/sh
# produces a fake avdmanager from buildozer settings
# may be useful with fdroid build scripts (outputs a fake avdmanager script)
echo "#!/bin/bash"
cat buildozer.spec | \
grep -e "^android[.]api" | \
sed -e "s/android.api\(.*\)/echo 'API level:\1'/"

8
buildozer/helpers/setbuildvars Executable file
View file

@ -0,0 +1,8 @@
#!/bin/sh
VP4A='v2024.01.21'
VBUILDOZER='3ebc09e885457db4747e67a1250c2aea1ca7a046'
VCPYTHON='v3.11.5'
VCYTHON='3.0.10'
AAPI=$(cat buildozer.spec | grep -e "^android[.]api" | sed -E "s/^.*([0-9].).*/\1/")
export AAPI

View file

@ -1,4 +1,4 @@
#!/usr/bin/env python2.7
#!/usr/bin/env python3
# ---------------------------------------------------------------------------
#
# PySol -- a Python Solitaire game
@ -23,6 +23,7 @@
# Starter for kivy/android using buildozer: Needs an explizitly
# named main.py as startpoint.
import os
import sys
if '--kivy' not in sys.argv:
sys.argv.append('--kivy')
@ -34,4 +35,6 @@ init()
if runmain:
from pysollib.main import main
os.environ['KIVY_NO_CONSOLELOG'] = "No"
sys.exit(main(sys.argv))

35
buildozer/minimal.txt Normal file
View file

@ -0,0 +1,35 @@
cardset-2000
cardset-blaren-7x7
cardset-crystal-mahjongg
cardset-dashavatara-ganjifa
cardset-dashavatara-ganjifa-xl
cardset-dojouji-3x3
cardset-dondorf
cardset-eternal-dragon-10x10
cardset-gnome-mahjongg-1
cardset-gpl
cardset-hanafuda-200-years
cardset-hexadeck
cardset-hofamterspiel-9x9
cardset-hokusai-6x6
cardset-knave-of-hearts-4x4
cardset-louie-mantia-hanafuda
cardset-matching
cardset-matching-xl
cardset-matrix
cardset-mid-winter-eve-8x8
cardset-mini-ishido
cardset-mughal-ganjifa
cardset-mughal-ganjifa-xl
cardset-neo
cardset-neo-hex
cardset-neo-tarock
cardset-next-matrix
cardset-oxymoron
cardset-simple-ishido
cardset-standard
cardset-tuxedo
cardset-uni-mahjongg
cardset-victoria-falls-5x5
cardset-vienna-2k
cardset-z-minimal

52
buildozer/mkcards Executable file
View file

@ -0,0 +1,52 @@
#!/bin/bash
#set -eux
rm -rf cardsets
if [ 1 ]; then
cardsets_dir=PySolFC-Cardsets
if [ ! -d ${cardsets_dir} ]; then
echo '### downloading cardset repo'
mkdir ${cardsets_dir}
pushd ${cardsets_dir}
mkdir repo
pushd repo
git init
git remote add -t master origin https://github.com/shlomif/PySolFC-Cardsets.git
git fetch --depth 1 origin 3.0
git checkout -q FETCH_HEAD
popd
echo '### choose a minimal set'
for d in $(cat ../minimal.txt)
do
mv repo/${d} .
done
rm repo -rf
echo '### processing cardsets'
../../scripts/cardconv gif png
for i in cardset-*-png; do
rm -rf `basename $i -png`
done
popd
fi
# cp -a ${cardsets_dir} ${cardsets_dir}-orig
ln -s ${cardsets_dir} cardsets
fi
pushd cardsets
echo '### resize big cardsets'
for i in cardset-*; do
../resizecards $i
done
popd
echo '### end cardsets'

12
buildozer/pipreq.txt Normal file
View file

@ -0,0 +1,12 @@
attrs==23.2.0
build==1.2.1
-e git+https://github.com/kivy/buildozer.git@3ebc09e885457db4747e67a1250c2aea1ca7a046#egg=buildozer
certifi==2024.2.2
colorama==0.4.6
configobj==5.0.8
Kivy==2.3.0
pip==24.0
pysol_cards==0.16.0
setuptools==69.1.1
toml==0.10.2
wheel==0.42.0

20
buildozer/pubspec.json Normal file
View file

@ -0,0 +1,20 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "org.lufebe16.pysolfc",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 102130200,
"versionName": "3.2.0",
"outputFile": "pysolfc-release.apk"
}
],
"elementType": "File"
}

37
buildozer/resize4k Executable file
View file

@ -0,0 +1,37 @@
#!/usr/bin/bash
location='.'
if [ $1 ]
then
location=$1
fi
pushd $location
dir='save-aspect-4k'
if [ -d $dir ]
then
pushd 'save-aspect-4k'
for f in *.jpg
do
echo $f
convert $f -resize 1920x1920 -quality 65 temp_$f
mv -f temp_$f $f
done
popd
fi
dir='stretch-4k'
if [ -d $dir ]
then
pushd 'stretch-4k'
for f in *.jpg
do
echo $f
convert $f -resize 1920x1920 -quality 65 temp_$f
mv -f temp_$f $f
done
popd
fi
popd

119
buildozer/resizecards Executable file
View file

@ -0,0 +1,119 @@
#!/usr/bin/env python3
# -*- mode: python; coding: utf-8; -*-
import sys
import os
import math
carddir = ""
filename = ""
maxw = 100
maxh = 150
# arguments:
# 1: cardset directory
# 2: maximum card width
# 3: maximum card height
if len(sys.argv) < 2:
exit (1)
if len(sys.argv) > 1:
carddir = sys.argv[1]
filename = sys.argv[1]+"/config.txt"
if len(sys.argv) > 2:
maxw = int(sys.argv[2])
if len(sys.argv) > 3:
maxh = int(sys.argv[3])
#print (filename)
#print (carddir)
#print (maxw,"x",maxh)
# 1: read the config file line by line and extract x,y, xoffset, yoffset.
lines_list = None
with open(filename, "rt") as f:
lines_list = f.readlines()
lines_list = [line.strip() for line in lines_list]
if not lines_list[0].startswith("PySol"):
exit (1)
#print (lines_list)
cardw, cardh, cardd = (int(x) for x in lines_list[2].split())
xoffs, yoffs, sxoffs, syoffs = (int(x) for x in lines_list[3].split())
#print (cardw,cardh)
#print (xoffs,yoffs)
# 2: calculate scale factor.
scale = maxw / cardw
scaleh = maxh / cardh
if scaleh < scale:
scale = scaleh
#print (scale)
if scale >= 1.0:
exit (0)
# 3: convert all images to (width)x(height) with imagemagick if needed.
def img_size(f):
stream = os.popen('identify '+f)
info = stream.read().split()
dims = info[2].split('x')
w = int(dims[0])
h = int(dims[1])
return (w,h)
cardw = int(math.floor(cardw*scale))
cardh = int(math.floor(cardh*scale))
xoffs = int(math.ceil(xoffs*scale))
yoffs = int(math.ceil(yoffs*scale))
#print (cardw,cardh)
#print (xoffs,yoffs)
first = True
effw = cardw
effh = cardh
for fn in os.listdir(path=carddir):
file = carddir+'/'+fn
fileo = carddir+'/conv-'+fn
if fn.endswith('.png') and not fn.startswith('shadow'):
cmd = "convert "+file+" -resize "+str(cardw)+"x"+str(cardh)+" "+fileo
cmd2 = "mv -f "+fileo+" "+file
#print (cmd)
os.system(cmd)
os.system(cmd2)
if first:
effw,effh = img_size(file)
#print ('eff-size:',effw,effh)
first = False
if fn.endswith('.png') and fn.startswith('shadow'):
w,h = img_size(file)
if w>h:
w = int(w*scale)
else:
h = int(h*scale)
cmd = "convert "+file+" -resize '"+str(w)+"x"+str(h)+"!' "+fileo
cmd2 = "mv -f "+fileo+" "+file
#print (cmd)
os.system(cmd)
os.system(cmd2)
# 4: rewrite the config file.
print ('rescaled by',scale,':',carddir)
cardw = effw
cardh = effh
lines_list[2] = str(cardw)+" "+str(cardh)+" "+str(cardd)
lines_list[3] = str(xoffs)+" "+str(yoffs)+" "+str(sxoffs)+" "+str(syoffs)
#print (lines_list)
with open(carddir+"/config.txt", "w") as f:
for l in lines_list:
f.write(l+"\n")

View file

@ -0,0 +1 @@
android:requestLegacyExternalStorage="true"

8
buildozer/version Executable file
View file

@ -0,0 +1,8 @@
#!/usr/bin/env python3
# ---------------------------------------------------------------------------
import sys
sys.path.insert(0, str(".."))
from pysollib.settings import VERSION # noqa: E402,I202
print("VERSION =", VERSION)

View file

@ -0,0 +1,207 @@
Cardset Customization Tutorial
==============================
:Author: Eric Rausch
:Email: <neelix570@gmail.com>
Setting up a Cardset
--------------------
The easiest way to create a cardset would be to copy an existing cardset folder of the same type in your cardsets directory. All cardsets need a number of files to work.
* An image for each card - these images should be the same format and the same size, as defined in the config.txt file (described below). These files should be named something like 01s.png for the ace of spades. The first two (or more) digits represent the rank, and the letter after represents the suit. The suits are labeled hcds in French decks or decks that use French suits (i.e. Hex A or Tarock decks), and the suits are alphabetical for other decks. The suit letter z is used for jokers or trumps.
* A shade file - shade.png, for example.
* At least one back image, as defined in the config.txt file below.
* A config.txt file, the format described below.
* A copyright file, containing copyright info.
The following optional files may also be added, but are only used under certain circumstances.
* Bottom images. A number of images for the bottoms of stacks. These are not used unless your PySol install does not support generating stack bottoms, or you enable them manually (currently only possible through editing the options.cfg file). Which bottoms are used depend on the cardset type. Each bottom has a version with a suffix of -n, indicating the negative bottom that gets used if the appropriate option is enabled.
* Shadow images. These will only be used if your PySol install does not support auto-generated shadows.
config.txt template
-------------------
....
PySolFC solitaire cardset;$A;$FMT;$B;$C;$D,$E;$F;$G;$H
<internal_name>;<cardset_name>
X Y D
XOFF YOFF SXOFF SYOFF
back01.ext
back01.ext;back02.ext;back03.ext
....
Line 1
------
*$A:* The cardset version number that belongs to the number of fields divided through ";" on the first line (e.g. `.gif;1;78;8,1016` -> `$A=4`)
( *WARNING:* For Mahjongg, $A must always be 6 or 7 and the $F field must be included in the line; however, you can put `0` in `$F` if you wish, in that case. )
( *NOTE:* $D and $E are comma separated and count for one field )
*$FMT:* The format of the images used - .gif, .png, .jpg, .ppm, and .bmp are supported
*$B:* The type of the cardset (see types below)
Cardsets Types:
~~~~~~~~~~~~~~~
* French = 1
* Hanafuda = 2
* Tarock = 3
* Mahjongg = 4
* Hex A Deck = 5
* Mughal Ganjifa = 6
* Navagraha Ganjiga = 7
* Dashavatara Ganjifa = 8
* Trumps Only = 9
* Matching = 10
* Puzzle = 11
* Ishido = 12
*$C:* The number of cards in the cardset, generally 42, 48, 52, 68, 78, 96 or 120
*$D:* The Style of the cardset (this field can hold one or more comma separated values)
Cardsets Styles:
~~~~~~~~~~~~~~~~
* Abstract = 35
* Adult = 1
* Animals = 2
* Anime = 3
* Art = 4
* Cartoons = 5
* Children = 6
* Classic Look = 7
* Collectors = 8
* Computers = 9
* Divination = 36
* Engines = 10
* Fantasy = 11
* Four Color = 37
* Ganjifa= 30
* Hanafuda = 12
* Hex A Deck = 29
* Holiday = 13
* Ishido = 34
* Mahjongg = 28
* Matching = 32
* Monochrome = 38
* Movies = 14
* Matrix = 31
* Music = 15
* Nature = 16
* Operating Systems = 17
* People = 19
* Places = 20
* Plain = 21
* Products = 22
* Puzzle = 33
* Round Cardsets = 18
* Science Fiction = 23
* Sports = 24
* Tarock = 27
* Vehicles = 25
* Video Games = 26
*$E:* The origin (country) of the cardset
Cardsets Origins:
~~~~~~~~~~~~~~~~~
* Australia = 1021
* Austria = 1001
* Belgium = 1019
* Canada = 1010
* China = 1011
* Czech Republic = 1012
* Denmark = 1013
* England = 1003
* France = 1004
* Germany = 1006
* Great Britain = 1014
* Hungary = 1015
* India = 1020
* Italy = 1005
* Japan = 1016
* Netherlands = 1002
* Portugal = 1022
* Russia = 1007
* Spain = 1008
* Sweden = 1017
* Switzerland = 1009
* USA = 1018
*$F:* The Year the cardset was created (in the range 1000 to 2299)
*$G:* The subtype of the cardset. Usually 0 - for French type cardsets, a value of 1 is used if there are jokers. For Puzzle type cardsets, it is the number of pieces per row/column.
*$H:* Whether the cardset is a 3D Mahjongg cardset - 1 if it is, 0 if it isn't. For cardsets with a version less than 7, version 6 cardsets treat this value as 1, and older version cardsets treat it as 0.
Line 2
------
`<internal_name>`: A name for PySolFC to identify your cardset (without spaces)
( *TIP:* You could add a number prefix (e.g. 123-cardset-name) )
`<cardset_name>`: Your cardset name as it should appear in the cardset manager. Note that a cardset name of more than 30 characters will be truncated.
Line 3
------
* *X:* The cards' width (the card image width)
* *Y:* The cards' height (the card image height)
* *D:* The color depth (mostly 8)
Line 4
------
* *XOFF:* The horizontal offset of the cards
* *YOFF:* The vertical offset of the cards
* *SXOFF:* The offset of the horizontal shadow (mostly 7)
* *SYOFF:* The offset of the vertical shadow (mostly 7)
Line 5
------
`back01.ext`: The name of the default back image (where `ext` means the file extension
e.g: `png` or `gif`.)
Line 6
------
`back01.ext;back02.ext;back03.ext;…``: The name of the other back images, including the default one.
About this document:
--------------------
*NOTE:*
This tutorial may be incomplete. It is given as is, without any warranty,
to help players customize their own cardsets.
You are welcome to send any suggestions to: mailto:neelix570@gmail.com[the Author's E-mail],
https://github.com/shlomif/PySolFC/issues[PySol FC's GitHub issue tracker] or
https://sourceforge.net/p/pysolfc/_list/tickets[PySol FC's Sourceforge issue tracker].
*NOTE 2:*
You should also place a file called `COPYRIGHT` in the same directory as `config.txt`,
containing the text that can be accessed via `Info/Settings`.
License:
~~~~~~~~
This tutorial was created under the terms of the GNU General Public License
version 3 or later. You can redistribute it as is and/or modify it.
Shlomi Fish, hereby puts his modifications to this document under
https://github.com/shlomif/shlomif-computer-settings/blob/master/shlomif-settings/git/commit-messages/cc0-copyright-disclaimer.txt[CC0 / Public Domain / MIT License / GPL terms]
Credits:
~~~~~~~~
Credits go to:
mailto:andsa@web.de[Andreas Sauer] for clarifying certain points +
https://www.shlomifish.org/[Shlomi Fish] for making some improvements to this tutorial

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,131 @@
<h2>Remerciements pour PySol à</h2>
<ul>
<li> Volker Weidner pour l'avoir fait connaître le Solitaire
</li><li> Guido van Rossum pour le programme initial
</li><li> <a href="http://www.inetarena.com/~grania/">T. Kirk</a> pour les nombreux jeux et styles de cartes
</li><li> the Gnome AisleRiot team pour sa contribution à la documentation
</li><li> Les équipes AfterStep et KDE pour certaines icônes.
</li><li> Python, Tcl/Tk &amp; les équipes Linux pour avoir rendu possible la conception de ce programme
</li></ul>
<h2>Les contributeurs sont</h2>
<ul>
<li> T. Kirk &lt;grania@mailcity.com&gt;<br> beaucoup de Ganjifa <a href="ganjifa.html">Ganjifa</a>, <a href="hanafuda.html">Hanafuda</a> et de jeux de type Tarot.
</li><li> Andrew Csillag &lt;drew@thecsillags.com&gt;
<ul>
<li> <a href="rules/canfield.html">Canfield</a>
</li></ul>
</li><li> Deon Ramsey &lt;miavir@furry.de&gt;
<ul>
<li> <a href="rules/nomad.html">Nomad</a>
</li></ul>
</li><li> Galen Brooks &lt;galen@nine.com&gt;
<ul>
<li> <a href="rules/numerica.html">Numerica</a>
</li></ul>
</li><li> Matthew Hohlfeld &lt;hohlfeld@cs.ucsd.edu&gt;
<ul>
<li> <a href="rules/larasgame.html">Lara's Game</a>
</li></ul>
</li></ul>
<h2>Les contributeurs pour les styles de cartes sont</h2>
<ul>
<li> Bao Trinh &lt;bao@cs.umd.edu&gt;
</li><li> DJ Delorie &lt;dj@delorie.com&gt;
</li><li> Donald R. Woods &lt;woods@sun.com&gt;
</li><li> Felix Bellaby &lt;felix@pooh.u-net.com&gt;
</li><li> Heiko Eissfeldt &lt;heiko@colossus.escape.de&gt;
</li><li> Jochen Tuchbreiter &lt;whynot@mabi.de&gt;
</li><li> John Fitzgibbon
</li><li> John Heidemann &lt;johnh@isi.edu&gt;
</li><li> Jonathan Blandford &lt;jrb@mit.edu&gt;
</li><li> Joseph L. Traub &lt;jtraub@zso.dec.com&gt;
</li><li> Michael Bischoff &lt;mbi@mo.math.nat.tu-bs.de&gt;
</li><li> Mike Naylor &lt;mike.naylor@5x5poker.com&gt;
</li><li> Oliver Xymoron &lt;oxymoron@waste.org&gt;
</li><li> Rene Seindal &lt;rene@seindal.dk&gt;
</li><li> Rudy Muller &lt;rudy.muller@net.HCC.nl&gt;
</li><li> Ryu Changwoo &lt;cwryu@eve.kaist.ac.kr&gt;
</li><li> T. Kirk &lt;grania@mailcity.com&gt;
</li><li> The Papa &lt;papalini@biancaneve.ing.unifi.it&gt;
</li></ul>
<h2>Les contributeurs pour la musique sont</h2>
<ul>
<li> <a href="http://hem.passagen.se/dachande/">Carl Larsson</a> aka <i>Nightbeat</i>
&lt;nightbeat@traxinspace.com&gt;
</li></ul>
<h2>Remerciements spéciaux à</h2>
<ul>
<li> Andy Markebo &lt;flognat@fukt.hk-r.se&gt;
</li><li> Charles B. Dorsett
</li><li> Christian Tismer &lt;tismer@tismer.com&gt;
</li><li> Dylan Thurston &lt;Dylan.Thurston@math.unige.ch&gt;
</li><li> Jan Nijtmans &lt;j.nijtmans@chello.nl&gt;
</li><li> Jordan Russel &lt;jordanr@iname.com&gt;
</li><li> Kevin O'Connor &lt;koconnor@cse.Buffalo.EDU&gt;
</li><li> Marc-Andre Lemburg &lt;mal@lemburg.com&gt;
</li><li> Mark Hammond &lt;MHammond@skippinet.com.au&gt;
</li><li> Neil Schemenauer &lt;nascheme@enme.ucalgary.ca&gt;
</li><li> Thomas Gellekum &lt;tg@ihf.rwth-aachen.de&gt;
</li><li> Vladimir Marangozov &lt;Vladimir.Marangozov@inrialpes.fr&gt;
</li><li> Zachary Roadhouse &lt;Zachary_Roadhouse@brown.edu&gt;
</li><li> Natascha
</li></ul>
<h2>PySol utilise les technologies OpenSource suivantes</h2>
<ul>
<li> <a href="http://www.python.org/">Le langage de programmation Python</a>
</li><li> <a href="http://www.scriptics.com/">The Tcl/Tk GUI Toolkit</a>
</li><li> <a href="http://www.devolution.com/~slouken/projects/SDL/index.html">The SDL Simple DirectMedia Layer</a>
</li><li> <a href="http://www.lokigames.com/development/smpeg.php3">The SDL MPEG Player Library</a>
</li><li> <a href="http://mikmod.darkorb.net/">The MikMod Sound Library</a>
</li></ul>
<h2>PySol a été développé à l'aide des technologies OpenSource suivantes</h2>
<ul>
<li> <a href="http://www.linux.org/">Le système d'exploitation Linux</a>
</li><li> <a href="http://www.xfree86.org/">The XFree86 X Window System</a>
</li><li> <a href="http://www.kde.org/">L'environnement de bureau KDE</a>
</li><li> <a href="http://fte.sourceforge.net/">L'éditeur de texte FTE</a>
</li><li> <a href="http://www.jordanr.dhs.org/">The Inno Setup Win32 Installer</a>
</li></ul>

View file

@ -0,0 +1,3 @@
<h1>Règles générales du jeu de Ganjifa</h1>
Le Ganjifa est un jeu de cartes provenant d'Inde et d'autre pays de cette région. Généralement ronds, mais certains jeux sont de forme rectangulaire. La différence la plus significative entre le Ganjifa et les autres types de jeux de cartes est que ces cartes sont traditionnellement peinte une par une à la main. Les jeux comportent généralement 8 à 12 familles de cartes, chaque famille comportant généralement 12 valeurs. Les deux jeux les plus courants sont le Mughal qui compte 8 suites et le Dashavatara en qui en compte 10. Les suites contiennent des cartes de pépin allant d'as au 10 et deux cartes de cour, le Wazir et le Mir. L'ordre des suites est: Matsya, Kuchha, Varaha, Narsingha, Vamana, Parashurama, Rama, Krishna, Buddha, and Kalanki. Les jeux de Ganjifa solitaires se jouent de la même façon que les jeux standards, mais leur plus grand nombre de cartes (96 ou 120) y ajoutent de la complexité. Le fait que chaque suite a sa propre couleur rend le jeu plus intéressant dans les jeux disposés en colonnes de "couleurs alternées".
<img alt="" src="images/ganjifa.gif">

View file

@ -0,0 +1,270 @@
#!/usr/bin/env python3
import builtins
import os
import sys
from pysollib.gamedb import GAME_DB
from pysollib.gamedb import GI
from pysollib.mfxutil import latin1_normalize
from pysollib.mygettext import fix_gettext
# outdir = '../html'
pysollib_dir = '../'
builtins._ = lambda x: x
builtins.n_ = lambda x: x
import pysollib.games # noqa: E402,F402,I100,I202
import pysollib.games.mahjongg # noqa: E402,F402
import pysollib.games.special # noqa: E402,F401,F402
try:
os.mkdir('html')
except Exception:
pass
try:
os.mkdir('html/rules')
except Exception:
pass
def merge_dicts(x, y):
ret = x.copy()
ret.update(y)
return ret
pysollib_path = os.path.join(sys.path[0], pysollib_dir)
sys.path[0] = os.path.normpath(pysollib_path)
# print sys.path
fix_gettext()
files = [
('credits.html', 'PySol Credits'),
('ganjifa.html', 'PySol - Règles générales du Ganjifa'),
('general_rules.html', 'PySol - Règles générales'),
('glossary.html', 'PySol - Glossaire'),
('hanafuda.html', 'PySol - Règles générales des jeux de cartes à fleurs'),
('hexadeck.html', 'PySol - Règles générales du jeu Hex A Deck'),
('howtoplay.html', 'Comment jouer à PySol'),
('index.html', 'PySol - une collection de jeux de solitaire'),
('install.html', 'PySol - Installation'),
('intro.html', 'PySol - Introduction'),
('license.html', 'Licence de PySol'),
('news.html', 'PySol - une collection de jeux de solitaire'),
# ('rules_alternate.html', 'PySol - a Solitaire Game Collection'),
# ('rules.html', 'PySol - a Solitaire Game Collection'),
]
rules_files = [
# ('hanoipuzzle.html', ),
('mahjongg.html', 'PySol - Règles du Mahjongg'),
('matrix.html', 'PySol - Règles du Matrix'),
('pegged.html', 'PySol - Règles du Pegged'),
('shisensho.html', 'PySol - Règles du Shisen-Sho'),
('spider.html', 'PySol - Règles du Spider'),
('freecell.html', 'PySol - Règles du FreeCell'),
]
wikipedia_files = [
('houseinthewood.html', 'PySol - Règles de House in the Woods'),
('fourseasons.html', 'PySol - Règles du Four Seasons'),
]
def _fmt(fmt, params):
return fmt % merge_dicts(params, {'logo_url': "images/pysollogo03.png",
'logo_alt': "PySol FC Logo"})
main_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>%(title)s</title>
<meta name="license" content="GNU General Public License">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
alink="#FF0000">
<img src="%(logo_url)s" alt="%(logo_alt)s">
<br>
'''
main_footer = '''
<p>
<br>
%(back_to_index_link)s
</body>
</html>'''
rules_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>%(title)s</title>
<meta name="license" content="GNU General Public License">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
link="#FF0000">
<img src="../%(logo_url)s" alt="%(logo_alt)s">
<br>
'''
rules_footer = '''
<p>
%(footer)s
<br>
<a href="../glossary.html">Glossaire</a>
<br>
<a href="../general_rules.html">Règles générales</a>
<p>
<a href="../index.html">Sommaire</a>
</body>
</html>'''
wikipedia_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>%(title)s</title>
<meta name="license" content="GNU General Public License">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
alink="#FF0000">
<img src="../%(logo_url)s" alt="%(logo_alt)s">
<br>
'''
def getGameRulesFilename(n):
if n.startswith('Mahjongg'):
return 'mahjongg.html'
return latin1_normalize(n) + '.html'
def gen_main_html():
for infile, title in files:
outfile = open(os.path.join('html', infile), 'w')
print(_fmt(main_header, {'title': title}), file=outfile)
with open(infile, 'r') as file:
print(file.read(), file=outfile)
s = '<a href="index.html">Sommaire</a>'
if infile == 'index.html':
s = ''
print(_fmt(main_footer, {'back_to_index_link': s}), file=outfile)
outfile.close()
def gen_rules_html():
# ls = glob(os.path.join('rules', '*.html'))
rules_ls = os.listdir('rules')
rules_ls.sort()
wikipedia_ls = os.listdir('wikipedia')
wikipedia_ls.sort()
games = GAME_DB.getGamesIdSortedByName()
rules_list = []
files_list = []
for fn, tt in rules_files:
rules_list.append(('rules', fn, tt, ''))
files_list.append(fn)
for fn, tt in wikipedia_files:
rules_list.append(('wikipedia', fn, tt, ''))
files_list.append(fn)
altnames = []
# open file of list of all rules
out_rules = open(os.path.join('html', 'rules.html'), 'w')
print(_fmt(
main_header,
{'title': 'PySol - une collection de jeux de solitaire'}),
file=out_rules)
with open('rules.html', 'r') as file:
print(file.read(), file=out_rules)
for id in games:
# create list of rules
gi = GAME_DB.get(id)
rules_fn = gi.rules_filename
if not rules_fn:
rules_fn = getGameRulesFilename(gi.name)
if rules_fn in files_list:
continue
if rules_fn in rules_ls:
rules_dir = 'rules'
elif rules_fn in wikipedia_ls:
rules_dir = 'wikipedia'
else:
print('missing rules for %s (file: %s)'
% (gi.name, rules_fn))
continue
# print '>>>', rules_fn
title = 'PySol - Règles pour ' + gi.name
s = ''
if gi.si.game_type == GI.GT_HANAFUDA:
s = '<a href="../hanafuda.html">' + \
'Règles générales des jeux de cartes à fleurs</a>'
elif gi.si.game_type == GI.GT_DASHAVATARA_GANJIFA:
s = '<a href="../ganjifa.html">A-propos du Ganjifa</a>'
elif gi.si.game_type == GI.GT_HEXADECK:
s = '<a href="../hexadeck.html">' + \
'Règles générales du jeu Hex A Deck</a>'
elif gi.si.game_type == GI.GT_MUGHAL_GANJIFA:
s = '<a href="../ganjifa.html">A-propos du Ganjifa</a>'
# print '***', gi.name, '***'
rules_list.append((rules_dir, rules_fn, title, s))
files_list.append(rules_fn)
# rules_list.append((rules_fn, gi.name))
print('<li><a href="rules/%s">%s</a>'
% (rules_fn, gi.name), file=out_rules)
for n in gi.altnames:
altnames.append((n, rules_fn))
print('</ul>\n' + _fmt(main_footer,
{'back_to_index_link':
'<a href="index.html">Sommaire</a>'}),
file=out_rules)
out_rules.close()
# create file of altnames
out_rules_alt = open(os.path.join('html', 'rules_alternate.html'), 'w')
print(_fmt(
main_header, {'title': 'PySol - une collection de jeux de solitaire'}),
file=out_rules_alt)
with open('rules_alternate.html', 'r') as file:
print(file.read(), file=out_rules_alt)
altnames.sort()
for name, fn in altnames:
print('<li> <a href="rules/%s">%s</a>'
% (fn, name), file=out_rules_alt)
print('</ul>\n' + _fmt(main_footer,
{'back_to_index_link':
'<a href="index.html">Sommaire</a>'}),
file=out_rules_alt)
out_rules_alt.close()
# create rules
for dir, filename, title, footer in rules_list:
outfile = open(
os.path.join('html', 'rules', filename), 'w', encoding='utf-8')
if dir == 'rules':
print(_fmt(rules_header, {'title': title}), file=outfile)
else: # d == 'wikipedia'
print(_fmt(wikipedia_header, {'title': title}), file=outfile)
with open(os.path.join(dir, filename), 'r', encoding='utf-8') as file:
print(file.read(), file=outfile)
print(_fmt(rules_footer, {'footer': footer}), file=outfile)
outfile.close()
gen_main_html()
gen_rules_html()

View file

@ -0,0 +1,15 @@
<h1>Règles générales</h1>
<p>
Certaines caractéristiques sont communes à tous les jeux inclus dans cet ensemble. La plupart utilisent un ou deux jeux de 52 cartes standard. Le Roi est toujours la carte la plus forte. K signifie Roi, Q signifie Dame et J signifie Valet. Les cartes sont toujours empilées par ordre croissant ou décroissant, dans la zone principale de jeu, appelée le tableau, ou empilées de côtés, sur des emplacements appelés fondations. Certaines piles sont formées par ordre de valeurs de la même couleur de cartes, d'autres sont formées en alternant les couleurs.
<p>
Le talon est formé par les cartes restantes. Certaines personnes l'appellent le stock ou la main.
<p>
Le but commun à tous ces jeux est d'utiliser toutes les cartes dans les fondations ou toutes celles du talon selon les règles du jeu. Quand toutes les cartes sont utilisées, la partie est gagnée. Sinon, vous perdez.
<p>
Les cartes sont prises au talon d'un clic gauche ou en appuyant sur &lt;D&gt;. Pour certain jeu, il est possible de retourner les cartes d'un clic gauche. Pour déplacer une carte, cliquez dessus et glissez-là jusqu'à lemplacement de destination. Si un mouvement n'est pas autorisé, la carte ne bougera pas. Si une ou plusieurs cartes peuvent être déplacées vers les fondations ou les défausse d'as, un appui sur la touche &lt;A&gt; le fera automatiquement. Quelquefois, la touche &lt;A&gt; déplacera plus de cartes que vous ne voulez vers les fondations. Il vous est possible de renvoyer des cartes vers le tableau. Vous pouvez aussi utiliser la touche "annuler" &lt;Z&gt;.
<p>
Pour mieux comprendre ces règles, vous pouvez toujours regarder le jeu de démonstration :-)

View file

@ -0,0 +1,185 @@
<h1>Glossaire</h1>
<p>Note de l'auteur: Ces définitions sont données à titre de de référence uniquement. Voir les règles des jeux pour plus de détails. Chaque jeu définit ses propres règles.</p>
<dl>
<dt><b>CARTE DE DEPART</b></dt>
<dd>
<p>La première carte placée sur une fondation. Généralement, les autres fondations commencent par une carte de même valeur. Voir: FONDATION</p>
</dd>
<dt><b>COULEUR DE CARTES</b></dt>
<dd>
<p>Quatre types différents dans un JEU STANDARD. Généralement Trèfles, Piques, Coeurs et Carreaux.</p>
</dd>
<dt><b>DEFAUSSE</b></dt>
<dd>
<p>Une pile de cartes, face visible, généralement située près du Talon. La carte du dessus est généralement jouable.</p>
</dd>
<dt><b>EMPILEMENT INDEPENDAMMENT DE LA COULEUR DE CARTES</b></dt>
<dd>
<p>Voir EMPILEMENT PAR ORDRE DE VALEUR.</p>
</dd>
<dt><b>EMPILEMENT PAR COULEUR</b></dt>
<dd>
<p>On peur placer une carte uniquement sur un carte de même couleur. Exemple: Placer un Carreau sur un Coeur est valide, placer un Carreau sur un Trèfle ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR COULEURS ALTERNEES</b></dt>
<dd>
<p>On place les cartes en alternant les couleurs. Exemple: Placer un Carreau sur un Pique est accepté, placer un Carreau sir un Coeur ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR COULEUR DE CARTES</b></dt>
<dd>
<p>On peut placer une carte uniquement sur un carte de même couleur de cartes. Exemple: Placer un Pique sur un Pique est valide, placer un Pique sur un Trèfle ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR ORDRE DE VALEUR</b></dt>
<dd>
<p>EMPILEMENT Par ordre CROISSANT ou DECROISSANT indépendamment de la couleur ou de la couleur de cartes.</p>
</dd>
<dt><b>EMPILEMENT PAR SUITE DE MÊME COULEURS</b></dt>
<dd>
<p>On ne peut placer une carte que sur une pile de la même couleur. Exemple: Placer un Carreau sur un Coeur est valide, placer un Coeur sur un autre ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR ORDRE CROISSANT OU DECROISSANT</b></dt>
<dd>
<p>On peut placer une carte sur une autre d'une valeur immédiatement supérieure ou inférieure. Exemple: Placer un Valet sur une Dame ou un 10 est valide, placer un 10 sur une Dame ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR ORDRE CROISSANT</b></dt>
<dd>
<p>On place toujours une carte, sur une carte de valeur inférieure. Généralement, on place une carte de valeur immédiatement supérieure à la précédente. Exemple: Placer une Dame sur un Valet est valide, placer une Dame sur un Roi ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR ORDRE CROISSANT PAR ECART DE *</b></dt>
<dd>
<p>On place toujours une carte, sur une carte de valeur inférieure par écart de *. Exemple: Si * est 2, placer un 10 sur un 8 est valide, placer un 10 sur un 9 ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR ORDRE DECROISSANT</b></dt>
<dd>
<p>On place toujours une carte, sur une carte de valeur supérieure. Généralement, on place une carte de valeur immédiatement supérieure à la précédente. Exemple: Placer un 10 sur un Valet est valide, placer un 10 sur un 9 ne l'est pas.</p>
</dd>
<dt><b>EMPILEMENT PAR ORDRE DECROISSANT PAR ECART DE *</b></dt>
<dd>
<p>On place toujours une carte, sur une carte de valeur supérieure par écart de *. Exemple: Si * est 2, placer un 10 sur une Dame est valide, placer un 10 sur un Valet ne l'est pas.</p>
</dd>
<dt><b>EMPILER</b></dt>
<dd>
<p>La possibilité de placer une carte (ou un groupe de cartes) sur une autre. Par rapport à la valeur, vous pouvez empiler les cartes par ordre CROISSANT, DECROISSANT ou CROISSANT/DECROISSANT par *. Par rapport à la couleur/couleur de cartes, vous pouvez empiler les cartes par COULEUR DE CARTES, COULEUR, par COULEURS ALTERNEES, par SUITES DE MEME COULEUR ou INDEPENDAMMENT DE LA COULEUR DE CARTES. Notez que tous les jeux d'empilement suivent deux de ces règles, dont un de chaque liste.</p>
</dd>
<dt><b>EMPLACEMENT</b></dt>
<dd>
<p>Voir PILE.</p>
</dd>
<dt><b>FONDATION</b></dt>
<dd>
<p>Si un jeu comporte une fondation, le jeu est généralement gagné une fois les toutes les cartes placées sur la(les) fondation(s).</p>
</dd>
<dt><b>JEU</b></dt>
<dd>
<p>Le jeu de cartes utilisé. La plupart des jeux se jouent avec un JEU STANDARD, mais les jeux se jouant avec un JEU DOUBLE, un JEU A JOKER ou un JEU TRONQUÉ ne sont pas rare.</p>
</dd>
<dt><b>JEU A JOKER</b></dt>
<dd>
<p>Un jeu de cartes consistant en un JEU STANDARD et deux Jokers, comptant 54 cartes.</p>
</dd>
<dt><b>JEU DOUBLE</b></dt>
<dd>
<p>Un jeu de cartes consistant en deux JEUX STANDARDS, comptant 104 cartes.</p>
</dd>
<dt><b>JEU STANDARD</b></dt>
<dd>
<p>Un jeu de 52 cartes. Il comporte 4 couleurs de cartes comptant 13 cartes chacune. Chaque couleur de cartes compte un As, 2 à 10, Valet, Dame, et Roi. Les couleurs de cartes sont généralement Trèfles, Piques, Coeurs et Carreaux. Ces couleurs de cartes peuvent être regroupées en deux couleurs, généralement noir et rouge. Les Trèfles et les Piques sont noires, les Coeurs et les Carreaux sont rouges. PySol offre la possibilité d'utiliser des jeux différents. Dans ce cas, les nouvelles couleurs et/ou couleurs de cartes sont substituées par ces modèles.</p>
</dd>
<dt><b>JEU TRONQUÉ</b></dt>
<dd>
<p>Un jeu de 32 cartes. Il comporte 4 couleurs de cartes comptant 8 cartes chacune. Chaque couleur de cartes compte un As, 7 à 10, Valet, Dame, et Roi.</p>
</dd>
<dt><b>PILE</b></dt>
<dd>
<p>Une zone désignée dans laquelle des cartes peuvent être placées.</p>
</dd>
<dt><b>RANG</b></dt>
<dd>
<p>Voir VALEUR.</p>
</dd>
<dt><b>RÉSERVE</b></dt>
<dd>
<p>Les cartes de la réserve peuvent généralement être jouées n'importe où. On ne peut généralement pas empiler de cartes dessus.</p>
</dd>
<dt><b>STOCK</b></dt>
<dd>
<p>Voir TALON.</p>
</dd>
<dt><b>SUITE CONTINUE</b></dt>
<dd>
<p>Dans certains jeux, les empilements de cartes peuvent continuer après avoir posé la carte la plus forte ou la plus faible. Dans les empilements par ORDRE CROISSANT, vous pouvez placer un As sur un Roi. Dans les empilements par ORDRE DECROISSANT, vous pouvez placer un Roi sur un AS.</p>
</dd>
<dt><b>TABLEAU</b></dt>
<dd>
<p>La zone de jeu dans laquelle se déroule la plus grande partie du jeu. Accepte généralement les emplacements de cartes.</p>
</dd>
<dt><b>TALON</b></dt>
<dd>
<p>Ce qu'il reste de cartes après la distribution, qui se fait généralement face cachée.</p>
</dd>
<dt><b>VALEUR</b></dt>
<dd>
<p>La valeur de la carte. Les cartes numérotés ont généralement la valeur associée au chiffre qui y figure. Les As peuvent prendre la plus forte ou la plus faible valeur. S'ils ont la valeur la plus forte, ils valent 1. S'ils ont la valeur la pus faible, il valent 14. J, Q et K prennent généralement les valeurs 11, 12 et 13 respectivement. Certains jeux peuvent fixer les valeurs de ces cartes à 10. Dans ce cas un As ayant la valeur la plus forte prend la valeur 11.</p>
</dd>
</dl>

View file

@ -0,0 +1,8 @@
<h1>Règles générales des jeux de cartes à fleurs.</h1>
<p>
Certaines caractéristiques sont communes à tous les jeux se jouant avec des cartes de Hanafuda. Tous se jouent avec un ou plusieurs jeux à fleurs asiatiques. On trouve ce jeu dans de nombreuse régions du Pacifique, ainsi qu'à Hawaii. Il comprend 12 couleurs de cartes comptant 4 cartes chacune. Les couleurs de cartes sont associées aux 12 mois de l'année. Pour une bonne explication de ce que sont les couleurs de cartes, visitez le<a href="http://hanafubuki.org/">site Hanafuda et Kabufuda de Graham Leonard</a>.
<p>
La plupart des jeux de cartes à fleurs solitaires se jouent comme les jeux de cartes de western, à quelques différences près. Voir les <a href="general_rules.html">Règles Générales</a> pour les instructions de base sur les jeux de solitaire. Le but du jeu est généralement de déplacer toutes les cartes du tableau vers les fondations. Le plus difficile lorsqu'on découvre les cartes de Hanafuda, est de retenir quelles cartes appartiennent à quelle couleur de cartes ainsi que leurs valeurs. La valeur des couleurs de cartes est quelquefois aussi important que la valeur des cartes dans leurs suites de couleurs. Essayez de garder cette image d'aide du hanafuda afficher afin de pouvoir vous y référer an jouant.
<img alt="" src="images/hanahelp.gif">

View file

@ -0,0 +1,2 @@
<h1>Règles générales du jeu Hex A Deck</h1>
Le jeu Hex A Deck est similaire à quelques jeux de cartes parus au début du XXème siècle, comptant 16 cartes dans chaque couleur de cartes. Ces jeux étaient prévus pour être joués du temps ou des jeux populaires tels que le Whist, étaient joués à 5 ou 6 joueurs. Les cartes supplémentaires étaient autant de cartes en plus dans les mains de chaque joueur, ce qui rendait le jeu plus intéressant. Les Magiciens du Hex A Deck correspondent aux Jokers des jeux classiques. Le rôle principal du Magicien dans ce jeu, est de bloquer la défausse au plus mauvais moment. Soit au meilleur moment. Ils y réussissent toujours très bien. Dans les jeux utilisant des piles de couleurs alternées, ils peuvent remplacer n'importe quelle couleur. Leurs valeurs vont de 1 à 4 et ne peuvent quelquefois être placée que par ordre de valeur. Les valeurs peuvent ne pas être indiquées sur les cartes. Si c'est le cas, il existe généralement un moyen de les identifier. Leur valeur peut-être déterminée par certains éléments de comparaison visuels. Le Magicien ayant la valeur la plus élevée est le plus complet ou le plus gros, ou encore le chapeau le plus grand. Ils se placent sur leur fondation respective s'il y en a une, et par ordre décroissant. Du premier au quatrième. Dans certains cas, les Magiciens ne peuvent être retirés du tableau que quand toutes les autres cartes ont rejoint les fondations. Dans certains jeux, ils ne peuvent pas être joués. Ils sont présents pour rendre le jeu plus intéressant. Ce qui rend le jeu plus difficile. En cela, ils sont très efficaces.

View file

@ -0,0 +1,114 @@
<h1>Comment jouer à PySol</h1>
<h2>Utilisation de la souris</h2>
<p>
Bouton Gauche:
<ul type="disc">
<li> Déplacer les cartes
</li><li> Cliquez sur le talon pour distribuer de nouvelles cartes.
</li></ul>
<p>
Bouton Droit (ou double-clic Gauche)
<ul type="disc">
<li> Déplacer les cartes vers les fondations
</li><li> Jeu rapide (si activé)
</li></ul>
<p>
Bouton du Milieu (ou Ctrl+clic Droit):
<ul type="disc">
<li> Voir les cartes partiellement cachées
</li></ul>
<p>
Ctrl+Clic Gauche:
<ul type="disc">
<li> Affiche en surbrillance toutes les cartes correspondantes.
</li></ul>
<p>
Maj+Clic Gauche:
<ul type="disc">
<li> Affiche en surbrillance toutes les cartes de même valeur.
</li></ul>
<h2>Jeu à deux mains</h2>
<p>
Placer trois doigts sur '<i>A</i>' (déplacer auto), '<i>S</i>' (annuler) et '<i>D</i>' (distribuer). Vous pouvez ainsi atteindre '<i>R</i>' (répéter).
<p>
Les gauchers préféreront '<i>L</i>' (déplacer auto), '<i>K</i>' (annuler) et '<i>J</i>' (distribuer).
<!--
<h2>Point-and-Click play</h2>
<p>
If you prefer Point-and-Click over Drag-and-Drop you can enable
<i>Quick play</i> and use the right mouse button. See below.
-->
<h2>Jeu automatique</h2>
<p>
Notez que le jeu automatique peut gâcher le jeu. Évitez de l'activer. Ou n'utilisez que le <i>retournement automatique</i>. Certains jeux désactivent automatiquement cette fonctionnalité, sinon ils n'ont plus aucun intérêt.
<p>
Retourner automatiquement
<ul type="disc">
<li> Retourne automatiquement toutes les cartes.
</li></ul>
Déplacement automatiquement
<ul type="disc">
<li> Déplace automatiquement les cartes vers les fondations.
</li></ul>
Distribuer automatiquement
<ul type="disc">
<li> Distribue automatiquement les cartes à la défausse si elle est vide.
</li></ul>
Jeu rapide
<ul type="disc">
<li> Utilisez le bouton droit de la souris pour déplacer rapidement les piles de cartes. Ce système n'est pas très intuitif, il n'utilise pas le système d'indice.
</li></ul>
<h2>L'animation est trop lente...</h2>
<p>
Malheureusement, il manque un concept de sprite à Tcl/Tk toolkit, ce qui provoque (double-buffer invisible), beaucoup de répétition de dessin lors du déplacement des cartes.
<p>
Désactiver l'<i>ombre des cartes</i>, l'<i>ombrage des mouvements possibles</i>, la mosaïque d'arrière-plan de table et les sons améliorera l'affichage.
<h2>Les arrière-plans de table sont de mauvaise qualité</h2>
<p>
Ils ne doivent être activés qu'en mode couleurs vraies - sinon la qualité sera mauvaise en raison du tramage.
<p>
Vous pouvez ajouter vos propres mosaïques d'arrière-plan. Pour ce faire, copiez les images dans le répertoire <i>data/tiles</i> ou dans <i>~/.PySolFC/tiles</i> de votre répertoire personnel.
<!-- They must be in GIF or PPM format. -->
<h2>Notes à propos du système de score</h2>
<p>
<ul type="disc">
<li> La prise en compte des scores commence après le premier mouvement. Même si vous annulez tous les mouvements, les scores ne sera pas annulé.
</li><li> Vous perdrez la partie si vous utilisez un indice ou si vous démarrer la démo.
</li><li> Vous pouvez recommencer à tout moment pour avoir une chance supplémentaire de gagner.
</li><li> Si vous ne voulez pas enregistrer le score d'un jeu perdu, vous pouvez temporairement modifiez les paramètres du joueur.
</li><li> Les parties chargées ne comptent pas.
</li><li> Si vous gagnez une partie sans utiliser <i>Annuler</i>, <i>Jeu rapide</i> ni aucune des autres fonctions d'assistance, vous recevrez une récompense spéciale.
<!--
<li> There are no score values in PySol - you win a game, or you lose it.
And don't even think about asking me to implement this nonsense - get
a nice pinball game if you're a highscore freak...
-->
</li><li> Enfin, gardez toujours à l'esprit que ceci est un jeu de <b>Patience</b>. Détendez-vos et amusez-vous.
</li></ul>
<h2>Raccourcis clavier non-documentés</h2>
<ul type="disc">
<li> <i>Space</i> - Distribuer
</li><li> <i>S</i> - Annuler
</li><li> <i>Retour arrière</i> - Annuler
</li><li>
<i>Ctrl-A</i> - Déplacement + Retournement automatique
</li><li> <i>Ctrl-B</i> - Changer l'arrière-plan des cartes
</li><li> <i>Ctrl-H</i> - Afficher le classement interne en donnant un indice
</li><li> <i>Ctrl-I</i> - Changer de mosaïque de table
</li><li> <i>Ctrl-N</i> - Débuter une nouvelle partie avec le numéro de jeu suivant
</li><li> <i>Ctrl-P</i> - Modifier le nom du joueur
</li><li> <i>Ctrl-U</i> - Jouer la musique suivante
</li></ul>

View file

@ -0,0 +1,32 @@
<h1>PySol - une collection de jeux de solitaire</h1>
<p> <a href="intro.html">Introduction</a>
<p> <a href="install.html">Installation</a>
<p> <a href="howtoplay.html">Comment jouer</a>
<h2>Règles</h2>
<ul>
<li> <a href="glossary.html">Glossaire</a>
</li><li> <a href="general_rules.html">Règles générales</a>
</li><li> <a href="rules.html">Règles individuelles des jeux</a>
</li><li> <a href="rules_alternate.html">Noms alternatifs</a>
</li></ul><!-- <p> <a href="news.html">What's new ?</a> -->
<p> <a href="license.html">Licence de PySol</a>
<p>
<hr>
<p> Visitez le <a href="http://pysolfc.sourceforge.net/">site officiel de PySolFC</a>.
<!--
<p>
Copyright (C) 1998-2003 by <a href="mailto:markus@oberhumer.com">Markus
F.X.J. Oberhumer</a>.<br>
Copyright (C) 2003 by Mt. Hood Playing Card Co.<br>
Copyright (C) 2005 by <a href="mailto:skomoroh@gmail.com">Skomoroh</a>.<br>
All Rights Reserved.
-->
<p>
PySol est distribué sous la licence
<a href="license.html">GNU General Public Licence</a>.

View file

@ -0,0 +1,32 @@
<h1>Installation</h1>
<p>
Le programme étant un script Pyrhon, il n'est pas nécessaire de le compiler. Il suffit de le lancer.
<p>
PySol nécessite Python 2.3 et Tcl/Tk 8.4 ou supérieur. Tous deux peuvent être téléchargés librement pour les plateformes Unix, Windows et Macintosh.
<p>
PySol est un logiciel libre et <i>Open Source</i> distribué sous la licence
<a href="license.html">GNU General Public Licence</a>.
<h2>Windows 95/98/ME/NT/2000</h2>
PySol est distribué sous la forme d'un fichier dinstallation autonome, il n'a besoin d'aune installation supplémentaire.
<p>
Su vous souhaitez modifier le code source de PySol ou écrire vos propres programmes en Python, vous pouvez télécharger le système de développement à l'adresse <a href="http://www.python.org/download/download_windows.html">http://www.python.org/download/download_windows.html</a>.
<h2>Unix</h2>
En principe, votre système est fourni avec Python et Tcl/Tk.<br> Sinon visitez <a href="http://www.python.org/download/">http://www.python.org/download/</a> pour récupérer le code source.
<p>
Il existe également des paquets installables pour toutes les distributions les plus courantes de Linux, FreeBSD et HPUX.
<h2>Macintosh</h2>
Des fichiers d'installation autonomes sont disponibles pour Python et Tcl/Tk à l'adresse<br> <a href="http://www.python.org/download/download_mac.html">http://www.python.org/download/download_mac.html</a>
<p>
N'ayant pas accès à une machine Mac, tous les commentaires concernant l'installation et l'apparence sont les bienvenus. Le "Portage' de X11 à Windows n'a nécessité que quelques changements mineurs dans les paramètres de police, j'espère qu'il en est de même sous Mac.
<p>
[ On m'a rapporté que PySol fonctionne bien sous Mac - il suffit de placer 'pysol.py' dans l'interpréteur Python. Il vous faudra simplement allouer beaucoup de mémoire à l'interpréteur Python. ]

View file

@ -0,0 +1,39 @@
<h1>Introduction</h1>
<p>
Vous vous demandez peut-être "Pourquoi encore un autre jeu de solitaire". La réponse est simple...
<h3>Avantages de PySol</h3>
<ul>
<li> il contient actuellement plus de 1000 jeux de solitaire différents
</li><li> il est basé sur moteur de solitaire extensible
</li><li> beaucoup de jeux classiques comme le Forty Thieves, le FreeCell, le Klondike et le Spider
</li><li> des jeux spéciaux tels que le Ganjifa, le Hanafuda, le Poker ainsi que des jeux de type Tarot
</li><li> une interface moderne
</li><li> de multiples style de cartes et arrière-plans
</li><li> des mosaïques d'arrière-plan de table
</li><li> annuler et répéter illimités
</li><li> des marques-pages persistant
</li><li> chargement et sauvegarde des jeux
</li><li> des statistiques pour le joueur
</li><li> un système d'indices pour se débloquer
</li><li> des jeux en mode démo
</li><li> un assistant de création de jeux de solitaire
</li><li> il supporte les plug-ins écrits par les utilisateurs
</li><li> des échantillons de sons et des musiques de fond
</li><li> un navigateur d'aide HTML intégré
</li><li> beaucoup de documentation
</li><li> il est compatible avec tous les systèmes Unix/X11, Windows 95/98/2000/XP et Mac OSX
</li><li> il est écrit en 100% pur Python
</li><li> il est distribué sous licence GNU General Public Licence
</li><li> <i>il s'agit d'un Freeware de qualité commerciale</i>
</li></ul><!--
<h3>Legal terms</h3>
<p>
PySol is Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 by <a href="mailto:markus@oberhumer.com">Markus F.X.J. Oberhumer</a>.<br>
All Rights Reserved.
<p>
PySol is distributed under the terms of the
<a href="license.html">GNU General Public License</a>.
-->

View file

@ -0,0 +1,657 @@
<p align="center">
<b>GNU GENERAL PUBLIC LICENSE</b><br>
Version 3, 29 June 2007
<p>
Copyright (C) 2007 <a href="http://fsf.org/">Free Software Foundation, Inc.</a>
<p>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
<p align="center">
<b>TERMS AND CONDITIONS</b>
<p>
0. Definitions.
<p>
"This License" refers to version 3 of the GNU General Public License.
<p>
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
<p>
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
<p>
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
<p>
A "covered work" means either the unmodified Program or a work based
on the Program.
<p>
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
<p>
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
<p>
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
<p>
1. Source Code.
<p>
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
<p>
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
<p>
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
<p>
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
<p>
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
<p>
The Corresponding Source for a work in source code form is that
same work.
<p>
2. Basic Permissions.
<p>
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
<p>
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
<p>
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
<p>
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
<p>
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
<p>
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
<p>
4. Conveying Verbatim Copies.
<p>
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
<p>
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
<p>
5. Conveying Modified Source Versions.
<p>
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
<p>
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
<p>
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
<p>
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
<p>
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
<p>
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
<p>
6. Conveying Non-Source Forms.
<p>
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
<p>
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
<p>
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
<p>
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
<p>
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
<p>
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
<p>
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
<p>
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
<p>
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
<p>
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
<p>
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
<p>
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
<p>
7. Additional Terms.
<p>
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
<p>
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
<p>
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
<p>
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
<p>
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
<p>
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
<p>
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
<p>
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
<p>
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
<p>
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
<p>
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
<p>
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
<p>
8. Termination.
<p>
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
<p>
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
<p>
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
<p>
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
<p>
9. Acceptance Not Required for Having Copies.
<p>
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
<p>
10. Automatic Licensing of Downstream Recipients.
<p>
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
<p>
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
<p>
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
<p>
11. Patents.
<p>
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
<p>
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
<p>
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
<p>
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
<p>
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
<p>
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
<p>
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
<p>
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
<p>
12. No Surrender of Others' Freedom.
<p>
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
<p>
13. Use with the GNU Affero General Public License.
<p>
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
<p>
14. Revised Versions of this License.
<p>
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
<p>
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
<p>
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
<p>
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
<p>
15. Disclaimer of Warranty.
<p>
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
<p>
16. Limitation of Liability.
<p>
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
<p>
17. Interpretation of Sections 15 and 16.
<p>
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
<p align="center">
<b>END OF TERMS AND CONDITIONS</b>

View file

@ -0,0 +1,221 @@
<pre>
==================================================================
User visible changes for PySol - a solitaire game collection
==================================================================
Changes in 4.82 (02 Sep 2003, 202 games)
* support Python 2.3
- a number of small bug fixes
+ stay tuned for Pysol 5 with *lots* of improvements :-)
Changes in 4.81 (24 Jun 2002, 202 games)
* adapted for new pysol-sound-server 3.00
- fixed Spider-type games
Changes in 4.80 (28 Nov 2001, 202 games)
* support Python 2.2
Changes in 4.73 (28 Sep 2001, 202 games)
- fixed rules of Irmgard
- a number of other bug fixes
Changes in 4.72 (31 May 2001, 202 games)
- fixed a problem when using hints in Black Hole
Changes in 4.71 (20 Apr 2001, 202 games)
* improved dynamic scrollbar handling
* support both Python 1.5, Python 2.0 and Python 2.1 within one package
Changes in 4.70 (05 Mar 2001, 202 games)
* 1 new game
* added dynamic scrollbars
* support both Python 1.5 and Python 2.0 within one package
* fixed some minor problems
Changes in 4.60 (02 Aug 2000, 201 games)
* 6 new games
* added persistent bookmarks
* implemented smart playing that keeps the redo history
* new statistics dialog featuring real 3D bar charts
- Windows: fixed a problem where the sound could cause crashes
- corrected a number of game rules and descriptions
Changes in 4.50 (11 Jun 2000, 195 games)
* added support for small toolbar icons
* added "Alternate Names" to the game selection dialog
* improved the sound dialog
- moved the Mahjongg games to the new PyJongg package
Changes in 4.41 (30 May 2000, 195 games)
* 6 new games
- Windows: avoid loading incompatible DLLs from the system directory
Changes in 4.30 (23 May 2000, 189 games)
* 6 new games
- fixed an internal error in Grasshopper and Double Grasshopper
- corrected rules of Penguin
Changes in 4.20 (27 Apr 2000, 183 games)
* 14 new games, including HexADeck and Memory type variants
* added a "Recent games" menubar entry
* improved statistics dialog
- really fixed the detection of Straights in Poker type games
- fixed a problem when changing the card background
Changes in 4.10 (18 Apr 2000, 169 games)
- fixed a memory leak
Changes in 4.00 (12 Apr 2000, 169 games)
* PySol now plays Tarock type games
* display a floating "Demo" logo while playing demo games
* options are now saved automatically at program exit
- Poker type games: cards for a Straight can now be in any sequence
- fixed a scoring problem in Casino Klondike and Vegas Klondike
Changes in 3.40 (12 Feb 2000, 161 games)
* 3 new games
* updated the pysol-sound-server
- fixed a problem with winning in Golf type games
- some other minor fixes
Changes in 3.30 (26 Jan 2000, 158 games)
* 7 new games
* converted the pysol-sound-server into a Python extension module
Changes in 3.21 (21 Jan 2000, 151 games)
* 2 new games
* updated the pysol-sound-server
- Windows: added the missing PyWinTypes15.dll to the setup file
Changes in 3.20 (18 Jan 2000, 149 games)
* added 8 Hanafuda type games (Oonsoo, Pagoda, MatsuKiri, ...)
* added 2 Poker type games (Poker Shuffle, Poker Square)
* added 13 other new games (Der Katzenschwanz, Perpetual Motion,
Die Schlange, Three Shuffles and a Draw, Vegas Klondike, ...)
* background music is supported under Win32 as well
- corrected redeal rules of La Belle Lucie and Trefoil
- corrected rules of Aces Up
Changes in 3.10 (21 Dec 1999, 126 games)
* 17 new games
* new sound support (including background MP3 and MOD music under Unix)
* added a playable preview dialog (yes, you can play games there :-)
* nice cardset and table-tile select dialogs
* added "Hold and quit" to continue a game on next start
- quite a number of bug and feature fixes
Changes in 3.00 (04 Nov 1999, 111 games)
* bought a new solitaire book and implemented 67 new games :-)
* added a menubar entry for popular games
* new assist function: highlight all cards with the same rank
(shift-click the left mouse button)
* added images for the Talon redeal state
* FreeCell game numbers are now compatible to the FreeCell FAQ
* added a "Next number" button to the game number dialog
* improved statistics and log views
* the bundled version now ships as pre-compiled Python bytecode
because it loads faster and uses much less memory
- corrected some layout problems
Changes in 2.99 (13 Oct 1999, 44 games)
* 1 new game: Lara's Game
* re-enabled the relaxed game variants
* due to popular demand I've finally implemented "Quick play"
* statistics and logs can be exported to a file
* a huge number of other improvements
- saved games are not compatible with previous versions
- some changes in key and mouse bindings
Changes in 2.91 (23 Jun 1999, 43 games)
- check for Python 1.5.2 at program startup
- some other minor fixes
Changes in 2.90 (16 Jun 1999, 43 games)
* added 19 new games (2 games disabled)
* implemented a nice select-game tree dialog
* starting a new game is noticeably faster now
* documentation updated
- PySol now requires Python 1.5.2
Changes in 2.14 (26 May 1999, 24 games)
- fixed rules of Calculation which got broken in 2.02
Changes in 2.13 (13 May 1999, 24 games)
- fixed a small bug in "Select game by number..."
Changes in 2.12 (20 Apr 1999, 24 games)
- another small bug fix
Changes in 2.11 (07 Apr 1999, 24 games)
- some finor fixes
Changes in 2.10 (11 Mar 1999, 24 games)
* major display speed improvements
* added support for background table tiles
* rearranged source code to prepare for a future Gnome, KDE,
wxWindows or JPython/Swing version
- fixed rules of Spider and Divorce which got broken in 2.02
Changes in 2.02 (20 Jan 1999, 24 games)
* 1 new game: Canfield
* new assist function: autoplay
* new assist function: automatic face up
* new assist function: highlight all matching cards
(control-click the left mouse button)
* can change card background
* support for timer-based animations
* improved interaction with the window manager (X11)
Changes in 2.01 (21 Dec 1998, 23 games)
* 4 new games: Eight Off, Dead King Golf, Relaxed Golf and Grandfather's Clock
* created new package PySol-Cardsets - get it from the PySol home page
* implemented a statusbar
* new assist function: highlight all moveable piles
* enabled tearoff menus under Unix
* improved table layout with small and large cardsets
Changes in 2.00 (30 Nov 1998, 19 games)
* 2 new games: Calculation and Numerica
* implemented support for plugins - now you can easily add your own games
* new option to automatically shade legal moves
* added additional cardsets for low and high screen resolutions
* major source code rearrangements
Changes in 1.12 (13 Oct 1998, 17 games)
* display a progress bar during startup
Changes in 1.11 (09 Oct 1998, 17 games)
* 3 new games: Big Harp, Eiffel Tower and Matriarchy
* enhanced statistics, can change player name
* added "Select game by number"
* implemented tooltips
- some fixes for Windows (vanishing menubar, problems when $HOME was
not set, better toplevel geometry)
- corrected rules of Ground for a Divorce
Changes in 1.10 (02 Oct 1998, 14 games)
* 1 new game: Ground for a Divorce
* added a toolbar
* implemented shadows
Changes in 1.03 (26 Sep 1998, 13 games)
* 4 new games: Spider, Relaxed Spider, Braid and Forty Thieves
* middle mouse button (or Control-left) shows partially hidden cards
* menus restructured
* major source code rearrangements
Changes in 1.02 (16 Sep 1998, 9 games)
* 1 new game: Picture Gallery
* added strict-rules variants of FreeCell and Seahaven Towers
* added a small manual page
* improved animation speed
Changes in 1.01 (14 Sep 1998, 6 games)
* 2 new games: FreeCell and Seahaven Towers
* the Undo key is now bound both to 'z' as well as 's'
Changes in 1.00 (10 Sep 1998, 4 games)
* includes 4 games: Gypsy, Irmgard, 8x8 and Klondike
* first public release
</pre>

View file

@ -0,0 +1,11 @@
<h1>PySol - Règles des jeux</h1>
<hr>
<h2>Concepts de base</h2>
<ul>
<li> <a href="glossary.html">Glossaire</a>
</li><li> <a href="general_rules.html">Règles générales</a>
</li></ul>
<h2>Règles des jeux</h2>
<ul>
</ul>

View file

@ -0,0 +1,13 @@
<h1>10 x 8</h1>
Type Klondike. Deux jeux. Donnes illimitées.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Similaire au <a href="8x8.html">8 x 8</a> avec 8 lignes et aux variantes du <a href="../hexadeck.html">Hex A Deck</a>.
<h3>Règles</h3>
Le jeu se joue comme le 8 x 8. Les combinaisons sont formées par ordre décroissant en alternant les couleurs. Les magiciens se jouent dans l'ordre de leur valeur dans le tableau, alternant rouge et noir. Chaque carte ou suite de cartes peut être déposée sur un emplacement vide. Les cartes du talon sont retournées une par une. Les cartes des fondations peuvent être replacées sur le tableau.
<h3>Stratégie</h3>
Essayez de libérer des emplacements.

View file

@ -0,0 +1,21 @@
<h1>8 x 8</h1>
<p>
Type Klondike. 2 jeux. Donnes illimitées.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Règles</h3>
<p>
Les huit piles de cartes dans le tableau sont toutes recouvertes d'une carte visible.
<p>
Les suites sont formées par ordre décroissant, en alternant les couleurs. N'importe quelle carte ou suite de cartes peut être placée sur un emplacement vide.
<p>
Cliquez sur le talon pour retourner une carte. Le nombre de donnes est illimité.
<p>
Les cartes des fondations peuvent être replacées sur le tableau.
<h3>Stratégie</h3>
<p>
Essayez de libérer des emplacements.

View file

@ -0,0 +1,27 @@
<h1>Abacus</h1>
<p>
Type Yukon. 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Une combinaison d'éléments de <a href="yukon.html">type Yukon</a> et de <a href="calculation.html">type Calculation</a>.
<h3>Règles</h3>
<p>
Les quatre fondations se construisent par suite croissante de la manière suivante: La première pile en partant de l'As et en ajoutant 1. La seconde pile en partant de 2 et en ajoutant 2. La troisième pile en partant de trois et en ajoutant 3. La quatrième pile en partant de 4 et en ajoutant 4.
<pRE>
Trèfle: A 2 3 4 5 6 7 8 9 10 V D R
Pique: 2 4 6 8 10 D A 3 5 7 9 V R
Cœur: 3 6 9 D 2 5 8 V A 4 7 10 R
Carreau: 4 8 D 3 7 V 2 6 10 A 5 9 R
</pRE>
<p>
Les cartes du tableau doivent former une suite décroissante dans le sens inverse des fondations: Trèfle, en retirant 1, Pique, en retirant 2, Cœur, en retirant 3 et Carreau en retirant 4.
<p>
Les groupes de cartes peuvent être déplacés indépendamment. N'importe quelle carte ou suite de cartes peut être placée sur un emplacement vide.
<p>
Si aucun mouvement n'est possible, cliquez sur le talon. Une carte sera distribuée à chaque pile.

View file

@ -0,0 +1,23 @@
<h1>Aces Up</h1>
<p>
Type 1 jeu de cartes. 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes, sauf les As, vers la fondation.
<h3>Règles</h3>
<p>
Déplacez les cartes de valeur plus faible d'une couleur donnée vers la fondation. L'As est la carte ayant la valeur la plus élevée.
<p>
Aucune carte ne peut être déplacée sur le tableau. Une carte peut être placée sur un emplacement vide.
<p>
Si aucun mouvement n'est possible, cliquez sur le talon. Une carte sera distribuée à chaque pile.
<h3>Notes</h3>
<p>
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.
<h3>Pour info</h3>
<p>
Ce jeu est aussi connu sous les appellations <i>Aces High</i>, <i>Drivel</i> ou <i>Idiot's Delight</i>.

View file

@ -0,0 +1,16 @@
<h1>Ace Up 5</h1>
<p>
Type 1 jeu de cartes. 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes, sauf les As, vers la fondation.
<h3>Description rapide</h3>
<p>
Similaire à <a href="acesup.html">Aces Up</a>, avec cinq piles.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,19 @@
<h1>Agnes Sorel</h1>
<p>
Type Gypsy. 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Règles</h3>
<p>
Les cartes de mêmes couleurs forment une suite décroissante. Les groupes de cartes de couleurs identiques peuvent être déplacés entièrement.
<p>
Une carte sera distribuée à chaque pile. Il n'y a qu'une seule donne.
<p>
Les fondations sont construites en suite croissante, allant du Roi à l'As Les cartes déposées sur les fondations peuvent être replacées dans le tableau. Double-cliquez sur une carte du tableau pour la placer vers l'une des fondations.
<h3>Stratégie</h3>
<p>
Essayez, autant que possible, de former des suites de couleur de cartes. Essayez d'obtenir un maximum de points, ce jeu étant très difficile.

View file

@ -0,0 +1,14 @@
<h1>Akbar's Conquest</h1>
Type Braid. Deux jeux. Trois donnes.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Similaire au <a href="braid.html">Braid</a> joué avec deux jeux de Mughal <a href="../ganjifa.html">Ganjifa</a>.
<h3>Règles</h3>
Le jeu se joue comme le Braid. Dans cette variante, vous avez deux cordes, dont chacune a sa corde de réserve. Les fondations sont au nombre de seize, placées aux deux extrémités. Les deux colonnes suivantes sont les huit cordes de réserve. Il y a encore deux colonnes contenant quatre réserves générales chacune. Les deux colonnes intérieures sont les deux cordes. Chaque corde reçoit seize cartes. Lorsqu'une corde de réserve se libère, la carte en haut de la corde correspondante y est déposée. Lorsque toutes les cartes d'une corde sont retirées, une carte de l'autre corde est utilisée.
<p>
Le jeu doit son nom à l'inventeur d'un splendide jeu de Ganija à douze couleurs. Ce jeu fût sculpté dans de l'ivoire et peint à la main par des artisans de la cour. Toutes les cartes de ce jeu ont aujourd'hui disparues.
<h3>Stratégie</h3>
Créez des suites où vous pouvez, après avoir tiré une carte correcte du talon. Ce type de jeu est très stratégique et demande beaucoup d'attention.

View file

@ -0,0 +1,14 @@
<h1>Akbar's Triumph</h1>
Type Braid. 1 jeu. Trois donnes.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Similaire au <a href="braid.html">Braid</a> joué avec un jeu de Mughal <a href="../ganjifa.html">Ganjifa</a>.
<h3>Règles</h3>
Le jeu se joue comme le Braid. Dans cette variante, vous avez deux cordes, dont chacune a sa corde de réserve. Les fondations sont au nombre de huit, placées aux deux extrémités. Les deux colonnes suivantes sont les huit cordes de réserve. Il y a encore deux colonnes contenant quatre réserves générales chacune. Les deux colonnes intérieures sont les deux cordes. Chaque corde reçoit douze cartes. Lorsqu'une corde de réserve se libère, la carte en haut de la corde correspondante y est déposée. Lorsque toutes les cartes d'une corde sont retirées, une carte de l'autre corde est utilisée.
<p>
Le jeu doit son nom à l'inventeur d'un splendide jeu de Ganija à douze couleurs. Ce jeu fût sculpté dans de l'ivoire et peint à la main par des artisans de la cour. Toutes les cartes de ce jeu ont aujourd'hui disparues.
<h3>Stratégie</h3>
Créez des suites où vous pouvez, après avoir tiré une carte correcte du talon. Ce type de jeu est très stratégique et demande beaucoup d'attention.

View file

@ -0,0 +1,16 @@
<h1>Alaska</h1>
<p>
Type Yukon. 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire au <a href="yukon.html">Yukon</a>, à la différence que les suites peuvent être formées par ordre <b>croissant ou décroissant</b> par couleur de cartes.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,26 @@
<h1>All in a Row</h1>
<p>
Type Fan 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Move all cards to the bottom in a single row.
<h3>Règles</h3>
<p>
Les cartes sont empilées dans l'ordre croissant ou décroissant de valeur sans tenir compte des couleurs ni de la couleur de cartes, en enchaînant les suites de manière circulaire, du Roi à l'As et de l'As au Roi.(
<p>
Aucune formation n'est possible dans le tableau. Seule la première carte de chaque pile peu être déplacée.
<p>
N'importe quelle carte peut être jouée en début de jeu.
<h3>Notes</h3>
<p>
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.
<h3>Stratégie</h3>
<p>
Planifiez votre jeu à l'avance. Un seul mauvais mouvement peu vous empêcher de gagner la partie.

View file

@ -0,0 +1,16 @@
<h1>American Toad</h1>
<p>
Type Canfield. 2 jeux. Deux donnes.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire au <a href="doublecanfield.html">Double Canfield</a>, à la différence que les cartes se rangent par couleur de cartes, les cartes sont distribuées une par une, la réserve est ouverte et il n'y a que deux donnes.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,13 @@
<h1>Appachan's Waterfall</h1>
Type Dashavatara Ganjifa. 1 jeu. 1 donne.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers la fondation.
<h3>Description rapide</h3>
Formez des suites complètes par ordre décroissant de valeur dans le tableau, puis, déplacez-les ver la fondation par ordre croissant de valeur et par couleur de cartes. Référez-vous à la description générale du <a href="../ganjifa.html">Ganjifa</a> pour l'ordre de couleur de cartes utilisé.
<h3>Règles</h3>
Les cartes sont déplacées sur le tableau par ordre décroissant de valeur sans tenir compte de la couleur de cartes. Les cartes ne peuvent être déplacées vers la fondation que lorsqu'une suite de douze cartes est complétée et seulement par ordre croissant de couleur de cartes. L'ordre des couleurs est le suivant: Le poisson, la tortue, etc. Lorsqu'une suite de couleur peut être déplacée vers la fondation, appuyez sur (a)uto ou jouer avec la fonction Déplacer auto et les douze cartes seront déplacées dans l'ordre. Quatre cartes sont distribuées sur chacune des dix colonnes au début du jeu. Appuyez sur (d)istribuer ou cliquez sur le talon pour distribuer la série suivante de cartes. Les réserves situées de chaque côté de la fondation peuvent recevoir une carte chacune. Les cartes placées dans les réserves ne peuvent être jouées que sur les colonnes.
<h3>Stratégie</h3>
Essayez de rendre jouable chaque colonne avant de distribuer les cartes suivantes. Les cartes ne se rangent que par valeur, il est donc aisé d'essayer de les trier directement par couleur de cartes.

View file

@ -0,0 +1,14 @@
<h1>Ashrafi</h1>
Type Mughal Ganjifa 1 jeu. 1 donne.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Ce jeu est similaire au <a href="freecell.html">Free Cell</a>. Les colonnes sont rangées par valeur uniquement, pas plus de douze cartes par colonne.
<h3>Règles</h3>
Sur le tableau, les cartes sont rangées par ordre décroissant de valeur, sans tenir compte de la couleur de cartes. Chaque colonne est limitée à douze cartes. Les quatre réserves situées sous les fondations peuvent recevoir une carte chacune. Les fondations se construisent par ordre croissant et par couleur de cartes, en commençant par l'As. Seuls les Mirs (rois), peuvent être déposés sur un emplacement vide.
<h3>Stratégie</h3>
Essayez de libérer d'abord les As. Garder les réserves libres autant que possible. Construisez vos suites sur les Mirs, pour dégager le maximum de colonnes.

View file

@ -0,0 +1,26 @@
<h1>Ashta Dikapala</h1>
<p>
Un jeu de Moghul Ganjifa 1 donne.
<h3>But du jeu</h3>
<p>
Ranger les huit gardiens dans l'ordre.
<h3>Règles</h3>
<p>
Ce jeu est similaire à <a href="picturegallery.html">Picture Gallery</a>. On dispose trois colonnes de jeu, une colonne contenant les cartes distribuées du talon et trois réserves acceptant une carte chacune.
<p>
Les cartes doivent être placées dans les trois lignes du haut comme suit:
<ul>
<li>La première ligne commence par un Trois et est construite par des suites incrémentées par trois.
</li><li>La seconde, commence par un deux.
</li><li>La troisième commence par un As.
</li></ul>
<p>
Si vous libérez un espace en bas, il y sera automatiquement placé une carte du talon. Si le talon est vide, vous pouvez placer n'importe quelle carte sur un emplacement vide. Vous pouvez déplacer n'importe quelle carte du vers les cellules vides tant qu'il reste des cartes au talon. Quand le talon est vide, vous pouvez toujours encore déplacer les cartes se trouvant sur les cellules vides. Si plus aucun déplacement n'est possible, cliquez sur le talon pour distribuer une rangée de cartes.
<p>
Vous gagnez si toutes les suites sont rangées dans l'ordre.
<h3>Stratégie</h3>
<p>
Du fait du nombre de piles, le jeu requiert beaucoup de concentration, mais il n'est pas très difficile de réussir.

View file

@ -0,0 +1,16 @@
<h1>Ashwapati</h1>
Type Mughal Ganjifa 1 jeu. Donnes illimitées.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Ce jeu est similaire au <a href="klondike.html">Klondike</a>. Les suites sont formées en ordre décroissant et par couleur de cartes.
<h3>Règles</h3>
Sur le tableau, les cartes sont rangées par ordre décroissant de valeur, dans la même couleur de cartes. Les fondations se construisent par ordre croissant et par couleur de cartes, en commençant par l'As. N'importe quel carte ou suite de cartes peut être déposée sur un emplacement vide. Les cartes du talon sont retournées une par une. Il n'y a pas de limite au nombre de donnes. Les cartes des fondations peuvent être replacées sur le tableau.
<p>
Ce jeu fait partie d'une série de jeux dont les noms finissent par "pati", ce qui signifie "seigneur de". Ashwapati signifie "Lord of Horses", en français 'Seigneur des chevaux". Les noms sont les noms des couleurs de cartes d'un jeu de Ganjifa à douze couleurs.
<h3>Stratégie</h3>
Déplacez les cartes vers les piles les plus basses.

View file

@ -0,0 +1,19 @@
<h1>Auld Lang Syne</h1>
<p>
Type Numerica 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Règles</h3>
<p>
Les fondations se construisent par ordre croissant de valeur sans tenir compte de la couleur de cartes. Les As sont placés en début de partie.
<p>
Il n'y a pas de jeu sur le tableau. Les cartes sont placées directement sur les fondations et les emplacements vides ne peuvent pas être utilisés.
<p>
Si aucun mouvement n'est possible, cliquez sur le talon. Une carte sera distribuée à chaque pile.
<h3>Notes</h3>
<p>
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.

View file

@ -0,0 +1,16 @@
<h1>Baby Spiderette</h1>
<p>
Type Spider 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Regroupez toutes les cartes par ensemble de 13 cartes par ordre décroissant et par couleur de cartes du Roi jusqu'à l'As et placez ces ensembles sur les fondations.
<h3>Description rapide</h3>
<p>
Similaire à <a href="spiderette.html">Spiderette</a>, mais un peu plus simple, car les groupes formés par <i>&gt;valeur décroissante</i>&gt; peuvent être déplacés.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,14 @@
<h1>Bad Seven (Die böse Sieben)</h1>
<p>
Type 2 jeux de cartes. 2 paquets réduits. Deux donnes.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Règles</h3>
<p>
Ce jeu se joue avec deux jeux de cartes réduits.
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,13 @@
<h1>Type Baker's Dozen</h1>
<p>
Type Baker's Dozen 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Règles</h3>
<p>
Les suites sont formées par ordre décroissant, sans tenir compte de la couleur de cartes. Une seule carte peut être déplacée à la fois.
<p>
Les emplacements libres ne peuvent pas être utilisés. Les Rois sont placés au bas des colonnes de cartes dès le début de la partie.

View file

@ -0,0 +1,23 @@
<h1>Baker's Game</h1>
<p>
Type FreeCell 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire au <a href="freecell.html">FreeCell</a>, les suites étant formées par ordre décroissant, par couleur de cartes.
<h3>Règles</h3>
<p>
Toutes les cartes sont distribuées en début de partie. 4 cellules libres sont à votre disposition, qui peuvent recevoir chacune une carte.
<p>
Une carte ne peut être placée que sur une carte de la même couleur de cartes.
<p>
Les cartes ne peuvent être déplacées que par groupe contenant le même nombre de cartes que de cellules libres disponibles. C'est-à-dire que s'il ne reste plus que deux cellules libres, vous ne pourrez déplacer qu'un groupe de deux cartes.
<h3>Pour info</h3>
<p>
Le jeu <i>Baker's Game</i> doit son nom du mathématicien C.L. Baker et fût d'abord publié dans la colonne <i>Mathematical Games</i> de juin 1968 de Martin Gardner dans le journal <i>Scientific American</i>.

View file

@ -0,0 +1,10 @@
<h1>Balarama</h1>
Type Dashavatara Ganjifa 1 jeu. 1 donne.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Les suites sont formées par ordre décroissant, en alternant les couleurs. Pas plus de douze par colonne. Chaque carte ou suite de cartes peut être déposée sur un emplacement vide.
<h3>Règles</h3>
Toutes les cartes sont distribuées aux seize colonnes en début de partie. Les sont regroupées par ordre décroissant en alternant les couleurs. Vois les règles générales du jeu de <a href="../ganjifa.html">Ganjifa</a>, pour plus de détails. Les fondations sont construites par ordre croissant et par couleur. Chaque carte ou suite de cartes peut être déposée sur un emplacement vide. Les quatre réserves peuvent recevoir une carte chacune.
<h3>Stratégie</h3>
Un emplacement libre peut s'avérer plus utile que les réserves. Essayez de libérer des emplacements.

View file

@ -0,0 +1,16 @@
<h1>Batsford</h1>
<p>
Type Klondike. 2 jeux. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire au <a href="doubleklondike.html">Double Klondike</a>, avec 10 colonnes, une seule donne et une réserve pouvant recevoir jusqu'à 3 Rois.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,17 @@
<h1>Type Beleaguered Castle</h1>
<p>
Type Beleaguered Castle 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Règles</h3>
<p>
Les As sont placés sure les fondations en début de partie.
<p>
Les suites sont formées par ordre décroissant, sans tenir compte de la couleur de cartes. Une seule carte peut-être déplacée à la fois et les emplacements libres ne peuvent recevoir qu'une seule carte.
<h3>Stratégie</h3>
<p>
Formez les fondations équitablement. Essayez de garder toujours, au moins un emplacement de libre.

View file

@ -0,0 +1,29 @@
<h1>Betsy Ross</h1>
<p>
Type 1 jeu de cartes. 1 jeu. 3 donnes.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire à <a href="calculation.html">Calculation</a>, utilise une défausse et 3 donnes.
<h3>Règles</h3>
<p>
Les quatre fondations, situées en haut, ne sont pas jouables.
<p>
Les quatre fondations du bas sont formées sans tenir compte de la couleur de cartes et de la manière suivante: La première pile commence par 4, est incrémenté de 2. La troisième pile commence par 6, est incrémentée de 3. La quatrième pile commence par 8, est incrémentée de 4.
<pRE>
1: 2 3 4 5 6 7 8 9 10 V D R
2: 4 6 8 10 D A 3 5 7 9 V R
3: 6 9 D 2 5 8 V A 4 7 10 R
4: 8 D 3 7 V 2 6 10 A 5 9 R
</pRE>
<p>
Cliquez sur le talon pour retourner une carte. Il y a 3 donnes.
<h3>Pour info</h3>
<p>
Ce jeu est connu sous d'autres noms, tels que <i>Fairest</i>, <i>Four Kings</i>, <i>Musical Patience</i>, <i>Quadruple Alliance</i> ou <i>Plus Belle</i>.

View file

@ -0,0 +1,16 @@
<h1>Big Braid</h1>
<p>
Type Napoléon Trois jeux. 3 donnes.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire au jeu <a href="braid.html">Braid</a>, avec 3 jeux.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,16 @@
<h1>Big Divorce</h1>
<p>
Type Spider Trois jeux. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire à <a href="groundsforadivorce.html">Grounds for a Divorce</a>, avec trois jeux et 13 piles de cartes.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,17 @@
<h1>Big Easy</h1>
Type Hanafuda 2 jeux. Donnes illimitées.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Il s'agit d'une version double jeu de cartes de <a href="littleeasy.html">Little Easy</a>. Les suites sont formées en ordre décroissant et par couleur de cartes. Les fondations sont formées de cartes de rangs identiques, dans l'ordre des couleurs de cartes. Seule une carte de premier rang peut être placée sur un emplacement libre.
<h3>Règles</h3>
Les règles sont les mêmes que pour le jeu <a href="littleeasy.html">Little Easy</a>.
<h3>Stratégie</h3>
Désactivez "Déplacer auto" et travaillez sur les colonnes du tableau jusqu'à ce que toutes les cartes soient ouvertes. Ces jeux semblent simples par leurs noms et par la façon d'y jouer, mais sont plus difficiles à gagner qu'ils en ont l'air.
<h3>Auteur</h3>
Ce jeu et sa documentation originale sont écrits par <a href="mailto:grania@mailcity.com">T. Kirk</a>.

View file

@ -0,0 +1,23 @@
<h1>Big Harp (Die große Harfe)</h1>
<p>
Type Klondike. 2 jeux. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire au <a href="doubleklondike.html">Double Klondike</a>, avec dix piles de cartes, n'importe quelle carte peut être déposée sur un emplacement vide et une seule donne.
<h3>Règles</h3>
<p>
Les suites sont formées par ordre décroissant, en alternant les couleurs. N'importe quelle carte ou suite de cartes peut être placée sur un emplacement vide.
<p>
Les cartes du talon sont retournée sur la défausse, une par une. La première carte de la défausse peut être placée sur l'une des piles du tableau ou sur une des fondations. Il n'y a qu'une seule donne.
<p>
Les cartes des fondations peuvent être replacées sur le tableau.
<h3>Pour info</h3>
<p>
Les jeux <i>Small Harp</i> et <i>Big Harp</i> sont les versions allemandes des jeux <i>Klondike</i> et <i>Double Klondike</i>.

View file

@ -0,0 +1,16 @@
<h1>Big Spider</h1>
<p>
Type Spider Trois jeux. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
<p>
Similaire au <a href="spider.html">Spider</a>, avec trois jeux de cartes et 13 piles de cartes au tableau.
<h3>Règles</h3>
<p>
<i>[À venir]
</i>

View file

@ -0,0 +1,18 @@
<h1>Big Sumo</h1>
Type Hanafuda 2 jeux. 1 donne.
<h3>But du jeu</h3>
Déplacez toutes les cartes vers les fondations.
<h3>Description rapide</h3>
Ce jeu est similaire au <a href="freecell.html">Free Cell</a>. Les suites du tableau sont formées de la première à la quatrième valeur par couleur de cartes et de la quatrième à la première dans les fondations. Seule une carte de premier rang peut être placée sur un emplacement libre.
<h3>Règles</h3>
Ceci est une version à deux jeux de cartes du <a href="sumo.html">Sumo</a>. Les suites sont formées par ordre décroissant de valeur dans le tableau et par ordre croissant dans les fondations. Les cartes de troisième et quatrième rang (ordures), ne sont pas interchangeables. Seule une carte de premier rang ou une série de cartes ordonnées peuvent être placées sur un emplacement vide.
<h3>Stratégie</h3>
Ne placez dans les réserves que des cartes qui peuvent en être retirées.
<h3>Auteur</h3>
<p>
Ce jeu et sa documentation originale sont écrits par <a href="mailto:grania@mailcity.com">T. Kirk</a>.

View file

@ -0,0 +1,27 @@
<h1>Bits n Bytes</h1>
<p>
Type Hex A Deck. 1 jeu. 2 donnes.
<h3>But du jeu</h3>
<p>
Remplissez tous les emplacements du tableau.
<h3>Description rapide</h3>
<p>
Placez sur les cases non-marquées une carte de valeur correspondante à celle placée sur la fondation et sur celle marquée d'une valeur en bit les cartes de valeurs correspondantes.
<h3>Règles</h3>
<p>
En début de partie, la première colonne reçoit quatre cartes de valeurs différentes, une de chaque couleur de cartes, ce sont les cartes "objectif". Les deux colonnes suivantes sont les cases "octet". Elles sont recouvertes par des cartes de valeur égale à celles des cartes "objectif". Les quatre colonnes de droite sont les cases "bit". Elles sont recouvertes par de cartes de couleur identiques à elles des cartes "objectif", dont le bit significatif le plus faible correspond avec celui de la carte "objectif".
<p>
Les cartes du talon sont retournée sur la défausse, deux par deux. Vous avez droit à deux donnes.
<p>
L'unique fonction du magicien dans ce jeu, est de bloquer la défausse au mauvais moment.
<h3>Stratégie</h3>
<p>
Comme il n'y a que quatre cartes de chaque valeur, essayez d'occuper les cases "octet" en premier.
<h3>Auteur</h3>
<p>
Ce jeu et sa documentation originale sont écrits par <a href="mailto:grania@mailcity.com">T. Kirk</a> et font partie intégrante de la version officielle de PySol.

View file

@ -0,0 +1,21 @@
<h1>Black Hole</h1>
<p>
Type Fan 1 jeu. 1 donne.
<h3>But du jeu</h3>
<p>
Déplacez toutes les cartes vers la fondation.
<h3>Règles</h3>
<p>
La fondation the <i>Black Hole</i> ou "trou noir") peu se construire dans l'ordre croissant ou décroissant de valeur sans tenir compte des couleurs ni de la couleur de cartes, en enchaînant les suites de manière circulaire, du Roi à l'As et de l'As au Roi.(
<p>
Aucune formation n'est possible dans le tableau. Seule la carte du dessus peut être déplacée.
<h3>Notes</h3>
<p>
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.
<h3>Stratégie</h3>
<p>
Planifiez votre jeu à l'avance. Un seul mauvais mouvement peu vous empêcher de gagner la partie.

Some files were not shown because too many files have changed in this diff Show more