Compare commits
526 commits
pysolfc-2.
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
bdd3093a2b | ||
|
c4a62baf79 | ||
|
b1370fce08 | ||
|
7b85049f7c | ||
|
afc74a86f5 | ||
|
50e003e256 | ||
|
78de569074 | ||
|
a79c81109b | ||
|
c14be7b73e | ||
|
69c1440b2b | ||
|
72386af5e6 | ||
|
a57f1eae38 | ||
|
6f0c6e00e1 | ||
|
512d3ea466 | ||
|
e7e9f0ff87 | ||
|
9773eee2d6 | ||
|
015e860557 | ||
|
04b7eacfcb | ||
|
52e2ffc58f | ||
|
81150b4681 | ||
|
f799093e35 | ||
|
12118d12ed | ||
|
fd4a4e1378 | ||
|
63a63fdfd3 | ||
|
ff9cc5e98c | ||
|
cadf8b2084 | ||
|
f4dec3ed16 | ||
|
5c8d5c26b4 | ||
|
cb0dd1ec2f | ||
|
dc5ab96c80 | ||
|
54a978b4e2 | ||
|
5b9f64a7eb | ||
|
21c2780e8e | ||
|
ed2da8cd46 | ||
|
054c0f0368 | ||
|
487d1c52f3 | ||
|
6852bb40ff | ||
|
6006e0f4c0 | ||
|
68138c7284 | ||
|
96a06108af | ||
|
ac03fa741d | ||
|
7cac54b714 | ||
|
b189c4b3b0 | ||
|
4566cb2fc5 | ||
|
40929f913e | ||
|
ef69c03a38 | ||
|
0cdd06ddad | ||
|
a6827ee7e2 | ||
|
5d1ed621e3 | ||
|
4c031b9686 | ||
|
2c69371265 | ||
|
7940e62285 | ||
|
9cd7a2c5fe | ||
|
5005ef6796 | ||
|
cafdafe047 | ||
|
911f83d249 | ||
|
abb9605dd4 | ||
|
180d3d57df | ||
|
5d9b462304 | ||
|
d18c857a76 | ||
|
d5d426fe91 | ||
|
2e6cb6ad35 | ||
|
c9c315818d | ||
|
4471a8a623 | ||
|
289df06b95 | ||
|
f844c0eae2 | ||
|
a5e0c96450 | ||
|
d36c19b158 | ||
|
61eb1f0361 | ||
|
86d92c2636 | ||
|
5392190c35 | ||
|
cb2252b74e | ||
|
d7d9bb3ea6 | ||
|
8cbac328a9 | ||
|
b6454ce541 | ||
|
0135e386c2 | ||
|
70909f6469 | ||
|
673cb847bc | ||
|
91b1ba9be9 | ||
|
2bfc6bdd3d | ||
|
552585f143 | ||
|
880fb11979 | ||
|
934d82b5f4 | ||
|
87a33b72b1 | ||
|
b7569e79c2 | ||
|
ba202f67c1 | ||
|
d0ca03a49a | ||
|
f448248741 | ||
|
eb3bb5dad8 | ||
|
49e48bada4 | ||
|
dcfac1032d | ||
|
ad39c3aa22 | ||
|
98c9202e34 | ||
|
1fad63af73 | ||
|
f360600fcd | ||
|
b3cdb7e4b8 | ||
|
dab3eea6cb | ||
|
8c58941d23 | ||
|
3778ab2c1f | ||
|
56489cb7bc | ||
|
910f927727 | ||
|
cc32c0373e | ||
|
b77989cbdb | ||
|
41c17c74f3 | ||
|
df8d05e0c5 | ||
|
66995aedaf | ||
|
fbc0817a1e | ||
|
dfd3b063dd | ||
|
83289d5432 | ||
|
4478212d20 | ||
|
dd16750d5f | ||
|
68d6b64fa2 | ||
|
679c9a74c1 | ||
|
4a3d6e7383 | ||
|
148f189a74 | ||
|
1149d4fd4f | ||
|
57adebfcdc | ||
|
83baa54164 | ||
|
d7c145ac18 | ||
|
b74dcde44a | ||
|
bd2edf2f19 | ||
|
792fbca78a | ||
|
a0ea7a3870 | ||
|
166025313b | ||
|
18f8e3e32b | ||
|
fd230df4f2 | ||
|
d15ff23d49 | ||
|
23f41d9553 | ||
|
77f1125156 | ||
|
b26821048c | ||
|
3a356670bb | ||
|
885b2925ab | ||
|
b92debbbfd | ||
|
13c611949d | ||
|
447dc4afea | ||
|
69394fa3b9 | ||
|
180f3fa225 | ||
|
85d455d4f7 | ||
|
6a32b1f2fa | ||
|
ea0ce6f6f3 | ||
|
a42b76d263 | ||
|
3cbcc8d214 | ||
|
0cace3a07b | ||
|
9274e47de6 | ||
|
b3c8390fac | ||
|
b62630ab5f | ||
|
58e2eb89c9 | ||
|
764fb5207e | ||
|
ceee32e212 | ||
|
b951d86579 | ||
|
a189d42328 | ||
|
abd95b8887 | ||
|
90ffaeb2d1 | ||
|
7ef3b1d359 | ||
|
b64ef10374 | ||
|
66d2eaba5f | ||
|
efdb843179 | ||
|
a14eef2b60 | ||
|
69b98c9982 | ||
|
34292e2743 | ||
|
0162c92740 | ||
|
c6ad8148b0 | ||
|
eeea22da7f | ||
|
a7f3741eb3 | ||
|
aa48e35166 | ||
|
f28e69b0b0 | ||
|
e8bc34f6e6 | ||
|
4231e96668 | ||
|
9f78391e0d | ||
|
71e06d4f98 | ||
|
a392ef4054 | ||
|
8a8b00baab | ||
|
be31314271 | ||
|
468feeb4e1 | ||
|
d9d02d47ca | ||
|
526abc03ba | ||
|
c1421fc92f | ||
|
6375d53902 | ||
|
96a071fca0 | ||
|
de50c45145 | ||
|
96700c59e1 | ||
|
713f498068 | ||
|
d3a4548f69 | ||
|
a6df89489a | ||
|
572103b2c4 | ||
|
b31ea75798 | ||
|
77fd05e65a | ||
|
2dfca42824 | ||
|
6c79c25195 | ||
|
1339a22ba4 | ||
|
fc259817aa | ||
|
1753f63034 | ||
|
28808ecc70 | ||
|
32d735defc | ||
|
351abaf907 | ||
|
3e70bdf149 | ||
|
864e1a6fee | ||
|
44cf52f0a3 | ||
|
6f7c243664 | ||
|
fe5013bdea | ||
|
be12039d0f | ||
|
3547c5ad0a | ||
|
4eebd5d33c | ||
|
9559173797 | ||
|
cba1fd815f | ||
|
b42a43fb0f | ||
|
65b013e7c8 | ||
|
9e90157d3e | ||
|
af2f730816 | ||
|
a94d0235b8 | ||
|
4f2f17b166 | ||
|
c36e2c68df | ||
|
6d1b81d57b | ||
|
5b6496432c | ||
|
2a1651cbc0 | ||
|
c50cfdd566 | ||
|
fa63e28f0b | ||
|
20533ac05e | ||
|
ea7fe7c2e8 | ||
|
dc985d5882 | ||
|
c11f57ce11 | ||
|
d7ec6a559a | ||
|
b4998aa341 | ||
|
5ba38d0688 | ||
|
5c4304ba44 | ||
|
d3067f2397 | ||
|
7dd72522c4 | ||
|
caa85016b1 | ||
|
97e90f147c | ||
|
87fe16413e | ||
|
a35f0ad2f5 | ||
|
725ee0dcaa | ||
|
f6b5672cf6 | ||
|
e1b74be079 | ||
|
f466df1644 | ||
|
d0a2b97a9e | ||
|
23657469c4 | ||
|
301d461875 | ||
|
c835bc09aa | ||
|
0ec7bc1cf8 | ||
|
49d4445c6b | ||
|
20e0de112f | ||
|
499439bc13 | ||
|
5852bad127 | ||
|
2017b4f23b | ||
|
2c48745781 | ||
|
a961bca6ff | ||
|
f190b3d30e | ||
|
dda8348806 | ||
|
7bc56fc101 | ||
|
c5b22563a8 | ||
|
611bd37024 | ||
|
917e7a1311 | ||
|
b49f82ad02 | ||
|
9816c15d94 | ||
|
c9194ea419 | ||
|
1df1f6a80c | ||
|
c2bc849fc1 | ||
|
2f87a554be | ||
|
a36cb9ce12 | ||
|
fa0d0cf144 | ||
|
0afc62478e | ||
|
10af041972 | ||
|
9db799f330 | ||
|
3e5631dbb4 | ||
|
50e7d65e31 | ||
|
224d21a2d2 | ||
|
10c6b5c61d | ||
|
a99bacbb83 | ||
|
288bd920af | ||
|
ce0e6ff856 | ||
|
2520934d35 | ||
|
492acd6961 | ||
|
069c8e8a7b | ||
|
b05c922d3b | ||
|
634937b076 | ||
|
78ca717778 | ||
|
c3ffbff146 | ||
|
9609f5e133 | ||
|
9fb0e33cb6 | ||
|
7d1a70564e | ||
|
2811ac4ba8 | ||
|
b91e69964e | ||
|
d613fd8b4b | ||
|
aaed778cd6 | ||
|
6edb6f7222 | ||
|
477fc8202c | ||
|
9a4df67df3 | ||
|
953c3fc9cb | ||
|
9d3bae687d | ||
|
c8ea09c319 | ||
|
3483bd16a8 | ||
|
19639b5727 | ||
|
254f445388 | ||
|
5c51f927eb | ||
|
48f8a70989 | ||
|
c4a18d3557 | ||
|
e01d0fe7a7 | ||
|
92f1870b23 | ||
|
7e43859ad6 | ||
|
c867b2b6d5 | ||
|
b966794a9a | ||
|
7741fa7dcc | ||
|
05fc7a8baa | ||
|
901a04bbb4 | ||
|
0b0f8f6e72 | ||
|
14184fea95 | ||
|
6896284776 | ||
|
5161a82b66 | ||
|
be1929a33e | ||
|
622c8a455c | ||
|
e858b38de1 | ||
|
c027e6ca0e | ||
|
96699c8fa2 | ||
|
529e8c006f | ||
|
a28aaeeb4f | ||
|
0112e831ff | ||
|
55d5111fb4 | ||
|
7dd94e551c | ||
|
969536551e | ||
|
c85cdf608b | ||
|
b455e386f1 | ||
|
ae9aa78cde | ||
|
158c3137fd | ||
|
187bae25cb | ||
|
3649bbb661 | ||
|
e7a1979477 | ||
|
27e11a6a4f | ||
|
40bd9f0093 | ||
|
e5f675d132 | ||
|
c4e87a1294 | ||
|
f947fe084f | ||
|
49fa530d65 | ||
|
efcfba4922 | ||
|
8a1940b3d3 | ||
|
df95421d91 | ||
|
b30334410b | ||
|
f10379af00 | ||
|
8c6310c0b1 | ||
|
bafede48f8 | ||
|
fc84e712b3 | ||
|
96351ef518 | ||
|
3e132dcb94 | ||
|
4674831507 | ||
|
3ef949d461 | ||
|
f9024e563a | ||
|
d6b6eb6b98 | ||
|
d00762b352 | ||
|
d93ad0dbfe | ||
|
29f737c633 | ||
|
7499599ba3 | ||
|
54178a10e5 | ||
|
1e9151eedb | ||
|
867029e24b | ||
|
be47aee6be | ||
|
a01090df65 | ||
|
8fc0f28b2f | ||
|
a8c34cd380 | ||
|
f0fb0500dd | ||
|
fb25046868 | ||
|
13a29b34ea | ||
|
9237c30df4 | ||
|
595f681bd0 | ||
|
c3e5ddc17b | ||
|
829a5bdfcc | ||
|
75a3000ca1 | ||
|
d2358c4e18 | ||
|
8098843e1e | ||
|
7808c546e8 | ||
|
a23a3deee2 | ||
|
fbe29ce447 | ||
|
3dc2540d51 | ||
|
162b1eb2bf | ||
|
1269e6164d | ||
|
b7edf01752 | ||
|
14ffba2a84 | ||
|
4b8420163d | ||
|
4ece8b6849 | ||
|
9d7df9f3a9 | ||
|
1d1378ed26 | ||
|
2062d0c5df | ||
|
d2e83ae8fd | ||
|
2988f1b2f8 | ||
|
ed7bb31f07 | ||
|
ddddf08400 | ||
|
633974782f | ||
|
4dcf1f2da6 | ||
|
3a37c1157d | ||
|
47c51f454c | ||
|
31ada5672e | ||
|
8b0b20568d | ||
|
d0c000f797 | ||
|
de3e8cc3f8 | ||
|
e55deecd99 | ||
|
ac06c9157d | ||
|
71638129e5 | ||
|
d7102003f1 | ||
|
d98278b373 | ||
|
4a6514c5c5 | ||
|
5adaa7747d | ||
|
5402486d1c | ||
|
eaae284140 | ||
|
4779ca43ee | ||
|
df4b97ba2b | ||
|
8b46d12433 | ||
|
1086a5b584 | ||
|
1cfb7c3f69 | ||
|
04c9f80a41 | ||
|
144f2b752b | ||
|
d3efb6dd15 | ||
|
5fecd4e123 | ||
|
0bd695b26d | ||
|
e932affd3f | ||
|
1623454091 | ||
|
b0d5c9d7b0 | ||
|
644f55e4f7 | ||
|
3182cc4b88 | ||
|
7b3ff699fe | ||
|
4d0fb6942f | ||
|
dec1fd88f2 | ||
|
cafe58aa69 | ||
|
755e1b444c | ||
|
6810345d81 | ||
|
8439cf07cb | ||
|
0c0feeae97 | ||
|
69bbec8e70 | ||
|
976e6ea756 | ||
|
c959844d54 | ||
|
42b3fba6c0 | ||
|
90c77ebd74 | ||
|
db0dbb84ec | ||
|
48ab207ab4 | ||
|
4160d75b6a | ||
|
ae40b654a1 | ||
|
19a8a93d76 | ||
|
ac77fe9e1e | ||
|
0c6aa7e1b8 | ||
|
7044c9aacb | ||
|
d3262b2c5c | ||
|
83c5b8be44 | ||
|
a306f65424 | ||
|
0a10c72524 | ||
|
11ee25afc2 | ||
|
d591db1e1c | ||
|
bb06d86a2c | ||
|
20096a88c8 | ||
|
007f930066 | ||
|
5bbd2cc462 | ||
|
7171b806a2 | ||
|
4a9257dee3 | ||
|
55c00ddda3 | ||
|
2b6aa110cc | ||
|
4aac672ebd | ||
|
99f19d17d1 | ||
|
fdddc014e0 | ||
|
b40ffe8981 | ||
|
efbb3489b3 | ||
|
03de3e84a6 | ||
|
b4d75cb46c | ||
|
6304039c11 | ||
|
d4363d14d8 | ||
|
c803ed9344 | ||
|
956bc359b6 | ||
|
e7ebe6fb38 | ||
|
a04f24dfb7 | ||
|
b49dd96bc8 | ||
|
26ff013153 | ||
|
1a5f73f59f | ||
|
c320312df9 | ||
|
f4210f67d5 | ||
|
13f406599e | ||
|
808b1d7d0a | ||
|
a438dc8861 | ||
|
f3661a0aee | ||
|
3ea9f7f481 | ||
|
c3ba33a1aa | ||
|
ca7a86bb5d | ||
|
ccd250eb14 | ||
|
81fae5e03d | ||
|
bdab8cf8a6 | ||
|
abd4b5327b | ||
|
0a55fffdb7 | ||
|
4f2f874d26 | ||
|
ef404e3fc1 | ||
|
4ec4a9911f | ||
|
432620d436 | ||
|
c87bd34832 | ||
|
fbb369d93b | ||
|
bd49171a4c | ||
|
a7e55513bd | ||
|
ff85c289ae | ||
|
5ec791c572 | ||
|
525df63f35 | ||
|
442d75aeef | ||
|
9c604ca806 | ||
|
96e4576572 | ||
|
a69bee95cc | ||
|
5357713b87 | ||
|
8bef814a05 | ||
|
44cc06875d | ||
|
4e0add4e5d | ||
|
3ed6bcf984 | ||
|
73dca1b206 | ||
|
db3180abba | ||
|
86bf23c1fa | ||
|
21c7eaf660 | ||
|
1ec22ad16f | ||
|
9493f79f9c | ||
|
f31d14c7f6 | ||
|
472b68a9c7 | ||
|
be5946f099 | ||
|
146dbeec86 | ||
|
2a1628e6cb | ||
|
52f05e3aa8 | ||
|
2f464fe54b | ||
|
fa22e6afc5 | ||
|
23894e38c6 | ||
|
e7f8944adb | ||
|
ed3fa526de | ||
|
21a671a8e2 | ||
|
ebae446b33 | ||
|
2d8efe9f42 | ||
|
82ef3b4b0e | ||
|
3f1c66cd0c | ||
|
331fbfc776 | ||
|
7be495236e |
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
image: Visual Studio 2019
|
||||
image: Visual Studio 2022
|
||||
environment:
|
||||
matrix:
|
||||
- PYTHON: "C:\\Python39"
|
||||
- PYTHON: "C:\\Python313"
|
||||
# Shamelessly taken from https://github.com/plicease/Dist-Zilla-PluginBundle-Author-Plicease/blob/master/.appveyor.yml
|
||||
# Thanks!
|
||||
install:
|
||||
|
@ -10,7 +10,7 @@ install:
|
|||
- copy %PYTHON%\python.exe %PYTHON%\python3.exe
|
||||
- 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==5.3 pysol-cards random2 setuptools six
|
||||
pycotap pygame pyinstaller pysol-cards setuptools six
|
||||
ttkthemes
|
||||
- perl -v
|
||||
- copy C:\msys64\mingw64\bin\mingw32-make.exe C:\msys64\mingw64\bin\make.exe
|
||||
|
@ -32,13 +32,13 @@ test_script:
|
|||
- gmake pretest
|
||||
- perl run-tests.pl
|
||||
- gmake rules
|
||||
- gmake pot
|
||||
- gmake mo
|
||||
#- 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-2.1.0.tar.xz/download -FileName cardsets.tar.xz
|
||||
- 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-2.1.0/cardset-* dist/pysol/data
|
||||
- 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\pysol\data\music
|
||||
|
@ -51,7 +51,7 @@ test_script:
|
|||
# For reproducible builds:
|
||||
# See: https://reproducible-builds.org/ .
|
||||
- SET FC_SOLVE_VER=5.20.0
|
||||
- appveyor DownloadFile https://netix.dl.sourceforge.net/project/fc-solve/fc-solve/DO-NOT-USE--fc-solve-for-pysol/fc-solve-for-pysol--v%FC_SOLVE_VER%.zip -FileName fc-solve.zip
|
||||
- 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\pysol\freecell-solver
|
||||
- 7z a -r pysol_win_dist.7z dist\pysol\
|
||||
|
|
2
.github/workflows/ci.yml
vendored
|
@ -23,7 +23,7 @@ jobs:
|
|||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install flake8 flake8-import-order \
|
||||
attrs configobj pycotap pysol-cards random2 setuptools six
|
||||
attrs configobj pycotap pysol-cards setuptools six
|
||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
- name: Lint with flake8
|
||||
run: |
|
||||
|
|
14
.github/workflows/macos-package.yml
vendored
|
@ -7,7 +7,7 @@ on:
|
|||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-10.15
|
||||
runs-on: macos-14
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
@ -23,14 +23,14 @@ jobs:
|
|||
run: |
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install --no-binary=Pillow \
|
||||
Pillow attrs configobj py2app pycotap pygame pysol-cards random2 setuptools six ttkthemes
|
||||
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 --content-disposition https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-2.1.0.tar.xz/download
|
||||
tar xJf PySolFC-Cardsets--Minimal-2.1.0.tar.xz
|
||||
mv PySolFC-Cardsets--Minimal-2.1.0/cardset-* data
|
||||
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
|
||||
|
@ -49,12 +49,12 @@ jobs:
|
|||
--skip-jenkins
|
||||
PySolFC.dmg dist
|
||||
- name: Upload zipped app
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pysolfc-app
|
||||
path: PySolFC-app.zip
|
||||
- name: Upload dmg
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pysolfc-dmg
|
||||
path: PySolFC.dmg
|
||||
|
|
16
.gitignore
vendored
|
@ -10,17 +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*
|
||||
|
|
|
@ -29,9 +29,9 @@ deploy:
|
|||
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.1.0.tar.xz/download &&
|
||||
tar xJf PySolFC-Cardsets--Minimal-2.1.0.tar.xz &&
|
||||
mv PySolFC-Cardsets--Minimal-2.1.0/cardset-* data ;
|
||||
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 &&
|
||||
|
@ -46,7 +46,7 @@ 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 random2 setuptools six'
|
||||
- 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
|
||||
|
|
|
@ -11,19 +11,19 @@ Main Authors
|
|||
* 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).
|
||||
* https://github.com/lufebe16
|
||||
* Added the Kivy toolkit
|
||||
* [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)
|
||||
* Continued PySolFC maintenance and development.
|
||||
* Many new games and continued PySolFC maintenance and development.
|
||||
|
||||
Games contributors
|
||||
==================
|
||||
|
||||
* Mark Andrews
|
||||
* Galen Brooks <galen@nine.com>
|
||||
* Andrew Csillag <drew_csillag@geocities.com>
|
||||
* Andrew Csillag <drew@thecsillags.com>
|
||||
* Michael Foord
|
||||
* Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
|
||||
* Nicola Larosa
|
||||
|
@ -36,6 +36,7 @@ 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
|
||||
============
|
||||
|
|
|
@ -7,7 +7,7 @@ for general guidelines for contributing to open source.
|
|||
|
||||
- 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
|
||||
|
||||
|
@ -32,9 +32,14 @@ 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,
|
||||
|
@ -44,17 +49,32 @@ 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. Test using `gmake test` .
|
||||
4. `git commit` the changes .
|
||||
5. `git tag pysolfc-2.6.5` (or equivalent version).
|
||||
6. `git push` and `git push --tags` to https://github.com/shlomif/PySolFC .
|
||||
7. Wait for the AppVeyor build for the tag to complete and scan the .exe using https://www.virustotal.com/ .
|
||||
8. 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`).
|
||||
9. Run `gmake dist`.
|
||||
10. Use [rexz9](https://github.com/shlomif/shlomif-computer-settings/blob/567b6ab3f4272ad66bf331536dc80bf58bfff3af/shlomif-settings/bash-aliases/user_aliases.bash#L57) on `dist/PySol*.tar.xz`.
|
||||
11. Go to https://sourceforge.net/projects/pysolfc/files/PySolFC/ and add a folder called PySolFC-2.6.5 (note the capitalisation).
|
||||
12. Add the tar.xz, the .exe and the .dmg there and mark them as defaults for the right OSes.
|
||||
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.
|
||||
|
|
|
@ -12,7 +12,7 @@ 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
|
||||
|
@ -93,6 +93,8 @@ 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
|
||||
##
|
||||
|
|
4
Makefile
|
@ -43,14 +43,14 @@ 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 ; do \
|
||||
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:
|
||||
set -e; \
|
||||
for lang in ru de pl it; do \
|
||||
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; \
|
||||
|
|
|
@ -1,5 +1,51 @@
|
|||
[[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:
|
||||
|
|
103
README.android
|
@ -1,10 +1,28 @@
|
|||
|
||||
Prerequisites (needs root):
|
||||
History:
|
||||
--------
|
||||
|
||||
(For updated information on these subjects please consult the scripts in
|
||||
android/debian).
|
||||
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.
|
||||
|
||||
On a 'freshly installed' Ubuntu 16.04 (32bit), the following
|
||||
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
|
||||
|
@ -16,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:
|
||||
|
||||
|
@ -34,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
|
||||
|
@ -45,60 +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):
|
||||
|
||||
Use the cloned repo or an unpacked distribution tarball.
|
||||
|
||||
go to the android directory, then
|
||||
|
||||
$ ./mkp4a.init # 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
|
||||
|
||||
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:
|
||||
---------
|
||||
|
||||
The Apk includes a minimal set of cards for playing.
|
||||
The Apk includes a minimal set of cards for playing.
|
||||
|
||||
Additional cardsets can 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/cardconv
|
||||
(on a linux system) to convert them, before copying to the device.
|
||||
Additional user supplied data:
|
||||
------------------------------
|
||||
|
||||
Important Notice on python3/kivy 1.11.x (pysol verson 2.6.4 ff):
|
||||
In kivy, using python3, the support for bmp images depends on OpenGL.
|
||||
On fairly up to date Android OpenGL ES 3.x is available. ES (Embedded
|
||||
System) release is a subset of the full OpenGL. Due to this, bmp image
|
||||
support will be broken on android, but not on up to date workstations.
|
||||
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.
|
||||
|
||||
As gif images are still slow and error prone, the best we can do is to
|
||||
use png images instead of bmp (as noted above).
|
||||
Resources are stored in ~/.PySolFC/. On an android device this is
|
||||
equivalent to /sdcard/.PySolFC/.
|
||||
|
||||
Possible known build issues:
|
||||
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.
|
||||
|
||||
2) for android ndk: needs a Version <=13 (because needs ant support).
|
||||
|
||||
3) python-for-android, on downloading recipes:
|
||||
|
||||
('CA CERTIFICATE VALIDATION FAILED' when downloading python.2.7 or
|
||||
some 'recipes')
|
||||
|
||||
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.
|
||||
|
|
30
README.kivy
|
@ -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, 'cardconv' , 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.
|
||||
|
|
34
README.md
|
@ -31,7 +31,7 @@ can be implemented.
|
|||
|
||||
## Requirements.
|
||||
|
||||
- Python (2.7 or 3.x)
|
||||
- Python (3.7 or later)
|
||||
- Tkinter (Tcl/Tk 8.4 or later)
|
||||
|
||||
- For sound support (optional)
|
||||
|
@ -97,15 +97,15 @@ cd PySolFC
|
|||
gmake test
|
||||
gmake rules
|
||||
ln -s data/images images
|
||||
tar -xvf PySolFC-Cardsets-2.0.tar.bz2 # Needs 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).
|
||||
|
@ -118,21 +118,18 @@ 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, random2 and pysol-cards
|
||||
#### 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:
|
||||
|
@ -171,20 +168,31 @@ mkdir -p "$PKGTREE"
|
|||
"$PKGTREE"/env/bin/pysol.py
|
||||
```
|
||||
|
||||
## Alternate toolkit.
|
||||
|
||||
- Kivy (10.0 or later)
|
||||
### Alternate toolkit.
|
||||
|
||||
- Kivy
|
||||
- Features:
|
||||
- Sound support integrated.
|
||||
- Android apk build support.
|
||||
|
||||
- Running from source without installation:
|
||||
|
||||
```
|
||||
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
|
||||
|
|
Before Width: | Height: | Size: 1,001 KiB After Width: | Height: | Size: 972 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.1 MiB |
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 642 KiB |
|
@ -1,16 +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
|
||||
|
||||
Now all required packages are installed to proceed with the
|
||||
android build.
|
||||
|
||||
LB170709.
|
|
@ -1,34 +0,0 @@
|
|||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
# install as root
|
||||
|
||||
apt-get install -y \
|
||||
git \
|
||||
openjdk-8-jdk \
|
||||
cython3 \
|
||||
python3-pip \
|
||||
python3-yaml \
|
||||
virtualenv \
|
||||
pkg-config \
|
||||
automake autoconf libtool \
|
||||
zlib1g-dev \
|
||||
libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev \
|
||||
libtinfo5 \
|
||||
lld
|
||||
|
||||
update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
|
||||
|
||||
apt-get install -y --no-install-recommends \
|
||||
imagemagick \
|
||||
python3-tk \
|
||||
ccache \
|
||||
libltdl-dev
|
||||
|
||||
# set python3 as default.
|
||||
# make python alternatives selectable.
|
||||
# (debian stretch, adapt for different versions)
|
||||
|
||||
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
|
||||
update-alternatives --install /usr/bin/python python /usr/bin/python3.5 2
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
# This script mimics the instructions laid out in the p4a documentation:
|
||||
# https://python-for-android.readthedocs.io/en/latest/quickstart/
|
||||
|
||||
. mkp4a.common
|
||||
|
||||
urlbase=https://dl.google.com/android/repository/
|
||||
|
||||
if [[ -d $ndkdir ]]; then
|
||||
echo "Skipping NDK installation: NDK directory already exists."
|
||||
else
|
||||
mkdir -p $ndkdir
|
||||
ndk_zip=android-ndk-${ndkver}-linux-x86_64.zip
|
||||
[ -a $ndk_zip ] || wget $urlbase/$ndk_zip
|
||||
unzip -d $(dirname $ndkdir) $ndk_zip
|
||||
fi
|
||||
|
||||
if [[ -d $sdkdir ]]; then
|
||||
echo "Skipping SDK installation: SDK directory already exists."
|
||||
else
|
||||
mkdir -p $sdkdir
|
||||
tools_zip=sdk-tools-linux-4333796.zip
|
||||
[ -a $tools_zip ] || wget $urlbase/$tools_zip
|
||||
unzip -d $sdkdir $tools_zip
|
||||
|
||||
$sdkdir/tools/bin/sdkmanager 'platforms;android-27'
|
||||
$sdkdir/tools/bin/sdkmanager 'build-tools;29.0.1'
|
||||
fi
|
||||
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
# Download android support library from maven
|
||||
|
||||
. mkp4a.common
|
||||
|
||||
liburl="https://maven.google.com/com/android/support/support-v4/24.1.1"
|
||||
libname="support-v4-24.1.1.aar"
|
||||
|
||||
. mkp4a.preload supportlib ${liburl} ${libname}
|
|
@ -1,27 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
. mkp4a.common
|
||||
|
||||
echo '### prepare cardsets'
|
||||
|
||||
if [ ! -f ${cardsets_file} ]; then
|
||||
echo '### downloading cardsets'
|
||||
wget https://netix.dl.sourceforge.net/project/pysolfc/PySolFC-Cardsets/minimal/${cardsets_file}
|
||||
fi
|
||||
|
||||
if [ ! -d ${cardsets_dir} ]; then
|
||||
echo '### extracting cardsets'
|
||||
tar -xf ${cardsets_file}
|
||||
fi
|
||||
|
||||
echo '### processing cardsets'
|
||||
(
|
||||
cd ${cardsets_dir}
|
||||
../../scripts/cardconv gif png
|
||||
for i in cardset-*-png; do
|
||||
rm -rf `basename $i -png`
|
||||
done
|
||||
)
|
||||
|
||||
echo '### end cardsets'
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
# memo:
|
||||
# keytool -genkey -v -keystore my-release-keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 12000
|
||||
|
||||
mkdir -p bin
|
||||
|
||||
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
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
rm -rf tmp
|
||||
python3 -m pythonforandroid.toolchain clean_dists
|
||||
python3 -m pythonforandroid.toolchain clean_builds
|
||||
rm -f *.apk
|
||||
rm -rf PySolFC-Cardsets--Minimal-2.1.0
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
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
|
|
@ -1,36 +0,0 @@
|
|||
# Common constants for various scripts in this directory.
|
||||
|
||||
version=$(PYTHONPATH=.. python3 -c \
|
||||
'from pysollib.settings import VERSION; print(VERSION)')
|
||||
|
||||
tmpdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
|
||||
|
||||
cardsets_dir='PySolFC-Cardsets--Minimal-2.1.0'
|
||||
cardsets_file="${cardsets_dir}.tar.xz"
|
||||
|
||||
p4aver="2019.10.6"
|
||||
ndkver="r19c"
|
||||
|
||||
sdkdir="${HOME}/.cache/sdk-for-p4a/sdk"
|
||||
ndkdir="${HOME}/.cache/sdk-for-p4a/android-ndk-${ndkver}"
|
||||
pkgdir="${HOME}/.local/share/python-for-android/packages"
|
||||
|
||||
# gradle may need this.
|
||||
export TERM="xterm"
|
||||
|
||||
p4a_options="\
|
||||
--sdk-dir ${sdkdir} \
|
||||
--ndk-dir ${ndkdir} \
|
||||
--dist-name pysolfc \
|
||||
--name PySolFC \
|
||||
--package org.lufebe16.pysolfc \
|
||||
--version ${version} \
|
||||
--bootstrap sdl2 \
|
||||
--requirements python3,attrs,configobj,kivy,pysol-cards,random2,six \
|
||||
--private ${tmpdir} \
|
||||
--orientation sensor \
|
||||
--icon ${tmpdir}/data/images/icons/48x48/pysol.png \
|
||||
--presplash ${tmpdir}/data/images/logo-with-margin-1024.png \
|
||||
--copy-libs \
|
||||
--add-jar ${tmpdir}/support-v4-24.1.1.aar \
|
||||
--color always"
|
|
@ -1,11 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
. mkp4a.common
|
||||
|
||||
new_options=${p4a_options}
|
||||
new_options=${new_options/PySolFC/PySolFCdbg}
|
||||
new_options=${new_options/org.lufebe16.pysolfc/org.lufebe16.pysolfc.dbg}
|
||||
|
||||
python3 -m pythonforandroid.toolchain apk \
|
||||
${new_options}
|
|
@ -1,71 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
. mkp4a.common
|
||||
|
||||
# NOTE: $1 will be set with fdroid builds only.
|
||||
|
||||
echo '### prepare sdk'
|
||||
|
||||
if [[ $# == 0 ]]
|
||||
then
|
||||
./initsupport
|
||||
./initsdk
|
||||
fi
|
||||
|
||||
echo '### install p4a'
|
||||
|
||||
if [[ $# == 0 ]]
|
||||
then
|
||||
if not python3 -m pip install -q --user "python-for-android==${p4aver}"
|
||||
then
|
||||
echo "obviously inside a virtualenv, so omit --user"
|
||||
if python3 -m pip install -q "python-for-android==${p4aver}"
|
||||
then
|
||||
echo "done"
|
||||
fi
|
||||
else
|
||||
echo "done"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo '### prepare source'
|
||||
|
||||
(cd .. && make rules && make all_games_html && make mo)
|
||||
|
||||
mkdir -p ${tmpdir}
|
||||
rm -rf ${tmpdir}
|
||||
cp -a .. ${tmpdir}
|
||||
rm -rf ${tmpdir}/android
|
||||
rm -rf ${tmpdir}/src
|
||||
|
||||
# remove useless load from the app
|
||||
rm -rf ${tmpdir}/.git
|
||||
rm -rf ${tmpdir}/.gitignore
|
||||
rm -rf ${tmpdir}/Screenshots
|
||||
rm -rf ${tmpdir}/build
|
||||
rm -rf ${tmpdir}/contrib
|
||||
rm -rf ${tmpdir}/dist
|
||||
rm -rf ${tmpdir}/runtests.pl
|
||||
rm -rf ${tmpdir}/tests
|
||||
rm -rf ${tmpdir}/Brewfile
|
||||
rm -rf ${tmpdir}/.appveyor.yml
|
||||
rm -rf ${tmpdir}/.perltidyrc
|
||||
rm -rf ${tmpdir}/.travis.yml
|
||||
|
||||
rm -rf ${tmpdir}/setup.py
|
||||
rm -rf ${tmpdir}/setup_osx.py
|
||||
rm -rf ${tmpdir}/setup.cfg
|
||||
|
||||
cp -a ${pkgdir}/supportlib/support-v4-24.1.1.aar ${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
|
||||
|
||||
cp -a ${cardsets_dir}/* ${tmpdir}/data
|
||||
|
||||
echo '### end init'
|
|
@ -1,30 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# package preload helper for fdroid build.
|
||||
|
||||
set -eux
|
||||
|
||||
if [[ $# < 3 ]]
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
packagebase=${HOME}'/.local/share/python-for-android/packages'
|
||||
|
||||
packagedir=${packagebase}/$1
|
||||
packageurl=$2
|
||||
packagename=$3
|
||||
packagemark='.mark-'${packagename}
|
||||
|
||||
if [[ $# == 4 ]]
|
||||
then
|
||||
packagemark='.mark'$4
|
||||
fi
|
||||
|
||||
mkdir -p ${packagedir}
|
||||
cd ${packagedir}
|
||||
if [ ! -f ${packagemark} ]
|
||||
then
|
||||
wget -nv ${packageurl}/${packagename}
|
||||
touch ${packagemark}
|
||||
fi
|
|
@ -1,43 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
. mkp4a.common
|
||||
|
||||
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"
|
||||
|
||||
python3 -m pythonforandroid.toolchain apk \
|
||||
${p4a_options} \
|
||||
--release \
|
||||
--sign
|
||||
|
||||
# keystore options (instead environment vars):
|
||||
#
|
||||
# keystore: --keystore <file>
|
||||
# key alias --signkey <keyalias>
|
||||
# keystore passwd --keystorepw <pass1>
|
||||
# key passwd --signkeypw <pass2>
|
|
@ -1,29 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -eux
|
||||
|
||||
. mkp4a.common
|
||||
|
||||
# NOTE: $1 and $2 (sdk and ndk) used with fdroid build only.
|
||||
|
||||
if [[ $# == 2 ]]
|
||||
then
|
||||
sdkdir=$1
|
||||
ndkdir=$2
|
||||
fi
|
||||
|
||||
python3 -m pythonforandroid.toolchain apk \
|
||||
${p4a_options} \
|
||||
--sdk-dir ${sdkdir} \
|
||||
--ndk-dir ${ndkdir} \
|
||||
--release
|
||||
|
||||
# python3 -m pythonforandroid.toolchain apk
|
||||
# ...
|
||||
# --release #1
|
||||
# --sign #2
|
||||
# ...
|
||||
#
|
||||
# ad 1,2:
|
||||
# ohne: -> debug version
|
||||
# 1: -> release unsigned
|
||||
# 1 und 2: -> release version.
|
|
@ -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
|
@ -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
|
@ -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"
|
89
buildozer/build-instructions.txt
Normal 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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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
|
@ -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")
|
1
buildozer/src/manifest/extra_attributes.xml
Normal file
|
@ -0,0 +1 @@
|
|||
android:requestLegacyExternalStorage="true"
|
8
buildozer/version
Executable 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)
|
|
@ -3,12 +3,26 @@ 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
|
||||
PySolFC solitaire cardset;$A;$FMT;$B;$C;$D,$E;$F;$G;$H
|
||||
<internal_name>;<cardset_name>
|
||||
X Y D
|
||||
XOFF YOFF SXOFF SYOFF
|
||||
|
@ -21,11 +35,11 @@ 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 and the $F field must be included in the line; however, you can put `0` in `$F` if you wish, in that case. )
|
||||
( *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; e.g. .gif, .png, .jpg (which types could exactly be used ?)
|
||||
*$FMT:* The format of the images used - .gif, .png, .jpg, .ppm, and .bmp are supported
|
||||
|
||||
*$B:* The type of the cardset (see types below)
|
||||
|
||||
|
@ -41,14 +55,18 @@ Cardsets Types:
|
|||
* 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 de cardset (this field can hold one or more comma separated values)
|
||||
*$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
|
||||
|
@ -58,13 +76,18 @@ Cardsets Styles:
|
|||
* 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
|
||||
|
@ -74,6 +97,7 @@ Cardsets Styles:
|
|||
* Places = 20
|
||||
* Plain = 21
|
||||
* Products = 22
|
||||
* Puzzle = 33
|
||||
* Round Cardsets = 18
|
||||
* Science Fiction = 23
|
||||
* Sports = 24
|
||||
|
@ -102,6 +126,7 @@ Cardsets Origins:
|
|||
* Italy = 1005
|
||||
* Japan = 1016
|
||||
* Netherlands = 1002
|
||||
* Portugal = 1022
|
||||
* Russia = 1007
|
||||
* Spain = 1008
|
||||
* Sweden = 1017
|
||||
|
@ -110,6 +135,9 @@ Cardsets Origins:
|
|||
|
||||
*$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
|
||||
------
|
||||
|
@ -118,13 +146,13 @@ Line 2
|
|||
|
||||
( *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
|
||||
`<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)
|
||||
* *X:* The cards' width (the card image width)
|
||||
* *Y:* The cards' height (the card image height)
|
||||
* *D:* The color depth (mostly 8)
|
||||
|
||||
Line 4
|
||||
|
|
|
@ -1516,7 +1516,7 @@ moves that it won't guess).
|
|||
<p>
|
||||
|
||||
This game and documentation has been written by
|
||||
<a href="mailto:drew_csillag@geocities.com">Drew Csillag</a>
|
||||
<a href="mailto:drew@thecsillags.com">Drew Csillag</a>
|
||||
and is part of the official PySol distribution.
|
||||
|
||||
<h1>Carlton</h1>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<h2>Les contributeurs sont</h2>
|
||||
<ul>
|
||||
<li> T. Kirk <grania@mailcity.com><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 <andrew@starmedia.net>
|
||||
</li><li> Andrew Csillag <drew@thecsillags.com>
|
||||
|
||||
<ul>
|
||||
<li> <a href="rules/canfield.html">Canfield</a>
|
||||
|
|
|
@ -18,7 +18,6 @@ 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
|
||||
import pysollib.games.ultra # noqa: E402,F401,F402
|
||||
|
||||
try:
|
||||
os.mkdir('html')
|
||||
|
|
|
@ -26,4 +26,4 @@ Le solveur automatique est totalement inutile. N'utilisez pas les indices. Ils d
|
|||
|
||||
<h3>Auteur</h3>
|
||||
<p>
|
||||
Ce jeu et sa documentation originale sont écrits par <a href="mailto:drew_csillag@geocities.com">Drew Csillag</a> et font partie intégrante de la version officielle de PySol.
|
||||
Ce jeu et sa documentation originale sont écrits par <a href="mailto:drew@thecsillags.com">Drew Csillag</a> et font partie intégrante de la version officielle de PySol.
|
||||
|
|
|
@ -6,7 +6,7 @@ PIP="${PKGTREE}/env/bin/pip"
|
|||
PYPROG="${PKGTREE}/env/bin/python"
|
||||
VERSION="$(env PYTHONPATH=`pwd` "$PYPROG" -c 'from pysollib.settings import VERSION ; print(VERSION)')"
|
||||
XZBALL="dist/PySolFC-${VERSION}.tar.xz"
|
||||
reqs=(pillow pygame random2 six)
|
||||
reqs=(pillow pygame six)
|
||||
|
||||
make dist
|
||||
|
||||
|
|
BIN
data/images/buttons/bluecurve/apply.png
Normal file
After Width: | Height: | Size: 663 B |
BIN
data/images/buttons/bluecurve/back.png
Normal file
After Width: | Height: | Size: 592 B |
Before Width: | Height: | Size: 592 B |
Before Width: | Height: | Size: 676 B After Width: | Height: | Size: 669 B |
BIN
data/images/buttons/bluecurve/clear.png
Normal file
After Width: | Height: | Size: 829 B |
BIN
data/images/buttons/bluecurve/color.png
Normal file
After Width: | Height: | Size: 903 B |
BIN
data/images/buttons/bluecurve/help.png
Normal file
After Width: | Height: | Size: 989 B |
Before Width: | Height: | Size: 226 B |
Before Width: | Height: | Size: 460 B After Width: | Height: | Size: 437 B |
BIN
data/images/buttons/bluecurve/next.png
Normal file
After Width: | Height: | Size: 574 B |
Before Width: | Height: | Size: 567 B |
Before Width: | Height: | Size: 634 B After Width: | Height: | Size: 630 B |
BIN
data/images/buttons/bluecurve/reset.png
Normal file
After Width: | Height: | Size: 807 B |
BIN
data/images/buttons/bluecurve/save.png
Normal file
After Width: | Height: | Size: 633 B |
BIN
data/images/buttons/bluecurve/statistics.png
Normal file
After Width: | Height: | Size: 724 B |
BIN
data/images/buttons/remix/apply.png
Normal file
After Width: | Height: | Size: 295 B |
BIN
data/images/buttons/remix/back.png
Normal file
After Width: | Height: | Size: 412 B |
BIN
data/images/buttons/remix/cancel.png
Normal file
After Width: | Height: | Size: 270 B |
BIN
data/images/buttons/remix/clear.png
Normal file
After Width: | Height: | Size: 398 B |
BIN
data/images/buttons/remix/color.png
Normal file
After Width: | Height: | Size: 620 B |
BIN
data/images/buttons/remix/help.png
Normal file
After Width: | Height: | Size: 619 B |
BIN
data/images/buttons/remix/new.png
Normal file
After Width: | Height: | Size: 155 B |
BIN
data/images/buttons/remix/next.png
Normal file
After Width: | Height: | Size: 312 B |
BIN
data/images/buttons/remix/ok.png
Normal file
After Width: | Height: | Size: 215 B |
BIN
data/images/buttons/remix/reset.png
Normal file
After Width: | Height: | Size: 597 B |
BIN
data/images/buttons/remix/save.png
Normal file
After Width: | Height: | Size: 256 B |
BIN
data/images/buttons/remix/statistics.png
Normal file
After Width: | Height: | Size: 280 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 965 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 965 B |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1 KiB |
Before Width: | Height: | Size: 1,006 B After Width: | Height: | Size: 579 B |
Before Width: | Height: | Size: 1,006 B After Width: | Height: | Size: 579 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 725 B |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 725 B |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 578 B |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 578 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 722 B |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 722 B |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 588 B |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 588 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 674 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 674 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 568 B |