mirror of
https://github.com/shlomif/PySolFC.git
synced 2025-04-05 00:02:29 -04:00
Compare commits
1172 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 | ||
|
3879a9196b | ||
|
48684d316c | ||
|
3cd6b6ecb2 | ||
|
1dd012d7d9 | ||
|
147cefba91 | ||
|
18c3549f66 | ||
|
8cef44437b | ||
|
425573060f | ||
|
e6783debec | ||
|
d72fd96db7 | ||
|
53bb15b373 | ||
|
3fd823b2f5 | ||
|
02e68785ee | ||
|
3451b6b113 | ||
|
a39251f5a5 | ||
|
c81ccfa186 | ||
|
ad67cb642b | ||
|
7f0c6e18ec | ||
|
cc3a1297cd | ||
|
c7922075ba | ||
|
97b48b4d4b | ||
|
798ef4699a | ||
|
6fbcc1186e | ||
|
39f810b423 | ||
|
f614186a79 | ||
|
c704b6380d | ||
|
cdcde7b212 | ||
|
72bbd7ab0a | ||
|
a00c8e52d3 | ||
|
df4a9b021e | ||
|
6f1d8c958b | ||
|
1c11b39a8b | ||
|
c00e73d2d7 | ||
|
a3e8bcc8d8 | ||
|
fe5a16ec54 | ||
|
701c1628d5 | ||
|
0f26fa283c | ||
|
32daef2b02 | ||
|
d2c59377dc | ||
|
99ae5c39bb | ||
|
3464052a5c | ||
|
fc34af4289 | ||
|
de47580559 | ||
|
bfc65193f0 | ||
|
42e6288e16 | ||
|
02e62afb16 | ||
|
6fe410ac24 | ||
|
ed811016de | ||
|
b5a305340d | ||
|
fbcd5d4ec8 | ||
|
1d290d1ed1 | ||
|
795b1bc49c | ||
|
98789e635f | ||
|
8bbf3bbebe | ||
|
f968a2c9e4 | ||
|
61343e9b54 | ||
|
f5dd4be72f | ||
|
bc48b3777f | ||
|
5f5744e13a | ||
|
92230480fd | ||
|
67fbd4c132 | ||
|
8d575bb747 | ||
|
ee5fcbad76 | ||
|
d07594148a | ||
|
756772ac0f | ||
|
068ae67943 | ||
|
79aca30779 | ||
|
f43ef2645c | ||
|
1144360d27 | ||
|
862c955c2c | ||
|
0c20a2e0cf | ||
|
d71e5711a6 | ||
|
09f875de93 | ||
|
58dc9a5886 | ||
|
bf66e6d819 | ||
|
41f481b4ab | ||
|
e1cee1a6c2 | ||
|
a8c307fd3a | ||
|
2487830d7e | ||
|
139fe83466 | ||
|
40f8ac7dcb | ||
|
80a2208f50 | ||
|
90f79aa68b | ||
|
f288362299 | ||
|
f23f58933f | ||
|
dba9e4442b | ||
|
2abdc419f3 | ||
|
b80bfc4ca6 | ||
|
30d3b047ce | ||
|
a1fd67077e | ||
|
7a6f1c5c51 | ||
|
d7a57ef65f | ||
|
7427190dcf | ||
|
72ee1c6aaf | ||
|
99f1de637c | ||
|
02fbe321e5 | ||
|
af1fba247a | ||
|
53ac444792 | ||
|
5f3d08cb8a | ||
|
980cd425e1 | ||
|
31765ceda7 | ||
|
f5cc29566e | ||
|
72b411d8d5 | ||
|
2de01609e1 | ||
|
344b98d35e | ||
|
6cd5a793e7 | ||
|
38f875fbd1 | ||
|
c8003f0e14 | ||
|
eb15b277be | ||
|
36b3f89b52 | ||
|
9273e09841 | ||
|
0583f741f0 | ||
|
9e957b65ec | ||
|
b2d07def7e | ||
|
396ca108b9 | ||
|
5af91ccdd7 | ||
|
a05044e40e | ||
|
2a2d1c59db | ||
|
2e7bbb4851 | ||
|
6d2c1490c3 | ||
|
e5792e44dd | ||
|
2225c68b74 | ||
|
f5dcfe2979 | ||
|
ff4bd148fa | ||
|
56a49f124f | ||
|
7dde34079d | ||
|
44e0e2d6e3 | ||
|
41edf474d6 | ||
|
6b00824e64 | ||
|
304d6f5b70 | ||
|
09a08f2988 | ||
|
ee80a93558 | ||
|
bd825ad348 | ||
|
9d303d265d | ||
|
f4bed0f620 | ||
|
716bea0043 | ||
|
62051a86bc | ||
|
de6f23910b | ||
|
bbaeb54266 | ||
|
feed149bd9 | ||
|
72c979d00f | ||
|
4c2dd59928 | ||
|
e81257ebd0 | ||
|
4ad11dc85a | ||
|
4adb91dffd | ||
|
1031f3f562 | ||
|
fd694be7b2 | ||
|
158e76a130 | ||
|
b49844e15b | ||
|
42b97cf1ed | ||
|
41ff8873e5 | ||
|
94603866a7 | ||
|
dc98900763 | ||
|
54e34bb4c0 | ||
|
b98bdbbe23 | ||
|
27e2813d0e | ||
|
bc8eb4270c | ||
|
b55c0a9015 | ||
|
780c399e6f | ||
|
960f3a801e | ||
|
be097063ef | ||
|
052fd0b78d | ||
|
d73bed3aaa | ||
|
1ac1fd0452 | ||
|
bc1ec96857 | ||
|
ff458a7058 | ||
|
bdcb25d0d4 | ||
|
8b957386ce | ||
|
3f9853f7ec | ||
|
14658b9a6c | ||
|
29317ea00c | ||
|
e0c9fe7652 | ||
|
46bda40762 | ||
|
fe2a061f7f | ||
|
ca57b37aab | ||
|
9928cd8790 | ||
|
393de563a7 | ||
|
a8c94d1d11 | ||
|
a258946d30 | ||
|
659760b43a | ||
|
723d3ff85f | ||
|
88201c0ca6 | ||
|
cb227689bd | ||
|
e5833ebe80 | ||
|
8cab449500 | ||
|
3f67f461c0 | ||
|
deebc72ac0 | ||
|
dbd2a88580 | ||
|
7c242bdcd2 | ||
|
93923f9d19 | ||
|
ffa0ae1a2f | ||
|
7af8fde4c0 | ||
|
940a5d584e | ||
|
5ed1236ab5 | ||
|
99bc75f4c1 | ||
|
7f7c710973 | ||
|
c16921cf9a | ||
|
660445ece4 | ||
|
2d87058ce8 | ||
|
962dc3ffeb | ||
|
c2bc75caf7 | ||
|
024248bac6 | ||
|
48af00fb7e | ||
|
c1a20c7668 | ||
|
e73510b290 | ||
|
e54b6cc2d1 | ||
|
a95c7a1e42 | ||
|
8c476e391f | ||
|
6cbf173723 | ||
|
f0df3b0f58 | ||
|
7ca623ecf0 | ||
|
bdb62f94b7 | ||
|
d6ca9c9e25 | ||
|
2b8cb6464a | ||
|
2de479320b | ||
|
1bc31007c5 | ||
|
513962b8f3 | ||
|
5d9dae8fcb | ||
|
c9ac0e6f69 | ||
|
2d7199e56f | ||
|
abf3cd3d25 | ||
|
900ba03979 | ||
|
8b46b0a757 | ||
|
d7e2532dad | ||
|
382a744c74 | ||
|
a6f4b23e8f | ||
|
9246a3d247 | ||
|
66cec95dd5 | ||
|
e3d99bcbee | ||
|
b149b3c301 | ||
|
ff30f50bfe | ||
|
faa474dd0b | ||
|
13d34238e2 | ||
|
87c8160761 | ||
|
48bb9d650b | ||
|
50545452bd | ||
|
2e9f242ce8 | ||
|
699ccb00ac | ||
|
36a0bfbc14 | ||
|
6eead026cd | ||
|
0ad6143cb8 | ||
|
2b4e228be9 | ||
|
e927d60a25 | ||
|
ea897ab8dc | ||
|
6dfbdb1e61 | ||
|
a86bb4f222 | ||
|
441c6718fb | ||
|
8909990e89 | ||
|
f2457f03eb | ||
|
a2ac356741 | ||
|
b23c2d724e | ||
|
2ed9aa4168 | ||
|
db720f0079 | ||
|
bd3e3cd083 | ||
|
79d27d2749 | ||
|
4231c0f1ef | ||
|
fc240083d6 | ||
|
e9b36e10c9 | ||
|
0fb76d00fc | ||
|
752337c361 | ||
|
30ec715bb0 | ||
|
d2283a90d6 | ||
|
cfa07e6c90 | ||
|
56dc087e8b | ||
|
dade1ce20d | ||
|
a011e762df | ||
|
896454d1e4 | ||
|
e64a85ba36 | ||
|
69ddbe2b37 | ||
|
8f0d71eeea | ||
|
541b97b92f | ||
|
c9275edb26 | ||
|
747b1fd60b | ||
|
8c41f7be61 | ||
|
cb7c094ad4 | ||
|
d60cf672e3 | ||
|
50ee8c9158 | ||
|
92e562b4f8 | ||
|
d9c98ae017 | ||
|
1a446862bd | ||
|
94fc987173 | ||
|
d4a1d89ebc | ||
|
dd0efc9428 | ||
|
8f2e47cfd1 | ||
|
e6fabe78a1 | ||
|
22f4909923 | ||
|
bff44bebce | ||
|
808382a7a1 | ||
|
c1b7efbbf8 | ||
|
9ff8d3b616 | ||
|
ac3291dbb8 | ||
|
e04440a625 | ||
|
e1ca461333 | ||
|
7a85d02682 | ||
|
515f77f0fa | ||
|
2cb63cb3fc | ||
|
076ee8d11a | ||
|
1de339fca9 | ||
|
007455af3f | ||
|
981f738df6 | ||
|
6ab53a4a62 | ||
|
2ccad87c26 | ||
|
e9b0675884 | ||
|
2aec2ea9b1 | ||
|
0d774623e2 | ||
|
5aa9071893 | ||
|
dcd12cd66a | ||
|
25f6818496 | ||
|
080b0043e3 | ||
|
040d546174 | ||
|
4ea2c1aa95 | ||
|
655c293c80 | ||
|
c416d42a96 | ||
|
5e3f55f04e | ||
|
3d9d074cae | ||
|
28c77b8a83 | ||
|
412e3b43a7 | ||
|
84617c5083 | ||
|
1025b5402b | ||
|
ba735bf1a2 | ||
|
98ba9b07dc | ||
|
866081f46d | ||
|
72ff4f6079 | ||
|
0b27e6fd72 | ||
|
6d7073b067 | ||
|
fe9ad5a64f | ||
|
09c23f21ad | ||
|
58a31f8abb | ||
|
344b637194 | ||
|
323fd511cb | ||
|
86ee7c9767 | ||
|
9a7bc59c8b | ||
|
f7c28b5011 | ||
|
0e1ecd1c1e | ||
|
7436b7193b | ||
|
dba55c20fd | ||
|
c792b7ff77 | ||
|
bc8fc2c5b0 | ||
|
65dfcd62ac | ||
|
9fab5f8d1f | ||
|
0e7ad946a6 | ||
|
dbe57dda67 | ||
|
0d0b39e4bc | ||
|
c60a8cb577 | ||
|
f91817ee51 | ||
|
3b53d94305 | ||
|
5876134d11 | ||
|
93793c01db | ||
|
afe0e080c0 | ||
|
d6e197f8c8 | ||
|
69b0cc86ff | ||
|
bc1023dc14 | ||
|
94927cbbc0 | ||
|
b265b28502 | ||
|
372fcba9de | ||
|
7da41a93be | ||
|
934db8da3b | ||
|
c6811cca29 | ||
|
91f785c574 | ||
|
bb2769a63a | ||
|
1c79d5437e | ||
|
24ccdf634b | ||
|
7255ad9e68 | ||
|
451700aefa | ||
|
97e981d900 | ||
|
d3faa78e75 | ||
|
07aac001b7 | ||
|
278b3261d9 | ||
|
755b1d51d3 | ||
|
cb0ddeeccd | ||
|
dda2f3b520 | ||
|
d145642a9b | ||
|
12601364dc | ||
|
0be465dea1 | ||
|
0f15613a15 | ||
|
1b14baf856 | ||
|
da5b85c064 | ||
|
a8a262a68c | ||
|
95a0d7d007 | ||
|
bf9ce90a5b | ||
|
dfff276fc1 | ||
|
55088a81bb | ||
|
f35d7fb9f4 | ||
|
e1d62726c5 | ||
|
05d78d5490 | ||
|
eff7beacee | ||
|
4be8f02a4e | ||
|
f1baad5347 | ||
|
9708704b87 | ||
|
58d43d12fb | ||
|
6fb107547a | ||
|
bbb4c6c0f1 | ||
|
3f84e44121 | ||
|
622d881a34 | ||
|
ee282b6219 | ||
|
39d59547af | ||
|
b24da7cc92 | ||
|
e2c11a7ba0 | ||
|
e9e19afc46 | ||
|
bb8785e76b | ||
|
38def5a0e7 | ||
|
18a460a1e7 | ||
|
7eb29a216f | ||
|
b518678d8d | ||
|
41c2633fcd | ||
|
3de9955879 | ||
|
db348ee91b | ||
|
fcc55dfe56 | ||
|
697f15c9df | ||
|
d9efba4456 | ||
|
14d4c0c509 | ||
|
fa85fbdadd | ||
|
e49c3a153f | ||
|
1ee67d9ca8 | ||
|
c96d25d628 | ||
|
556ceed9a6 | ||
|
2a04901a77 | ||
|
faf8341c5e | ||
|
f998b53d79 | ||
|
fee9f6e20e | ||
|
653e84b049 | ||
|
d04601ad1c | ||
|
730ecf775b | ||
|
8e4ed1e157 | ||
|
408a8fbb08 | ||
|
478fa82e86 | ||
|
7e6cf5694b | ||
|
3653a51176 | ||
|
a219bdb29c | ||
|
e43dcb207c | ||
|
2437c702fd | ||
|
467a0f14e0 | ||
|
88cdccea5b | ||
|
7914c6e805 | ||
|
3ef4b3c6dc | ||
|
12cf1e507f | ||
|
b311ff83fd | ||
|
a8fd45e2f8 | ||
|
068d72d634 | ||
|
b6f014f6e0 | ||
|
c4545ab114 | ||
|
3ca47be6e2 | ||
|
bea4266889 | ||
|
7896974496 | ||
|
91ef2ca74e | ||
|
c5864cc0f6 | ||
|
0ac4339252 | ||
|
39f181e087 | ||
|
e615b64dfc | ||
|
f1aedee62c | ||
|
4ee74a3e2a | ||
|
5b80116b69 | ||
|
7d55cd045c | ||
|
e1a1a8d169 | ||
|
2ea33f8e7a | ||
|
fb8d69b1c8 | ||
|
dc86d9338d | ||
|
12ca8c5535 | ||
|
6016a6a5c1 | ||
|
300d5dca7a | ||
|
0d98da15e6 | ||
|
e5e60d3232 | ||
|
f5b1cf0eea | ||
|
a34e169031 | ||
|
e09efe375e | ||
|
1365523131 | ||
|
864e7b9b52 | ||
|
25f1b222a1 | ||
|
ad79d2429f | ||
|
11aff68af1 | ||
|
2983648a4c | ||
|
047a58238d | ||
|
96a91f6148 | ||
|
984ab3570a | ||
|
97c957d055 | ||
|
81fab2028a | ||
|
80d99e508d | ||
|
032b645e0f | ||
|
00f6f70e93 | ||
|
57b9c9d41e | ||
|
2258274c77 | ||
|
0306d648fa | ||
|
d807f2c45c | ||
|
468553b3c5 | ||
|
c2ec2d5195 | ||
|
b3f79c9df8 | ||
|
fab74e9a4b | ||
|
b250a567ae | ||
|
0f662fdb12 | ||
|
c017d36bd5 | ||
|
d2964fad0a | ||
|
d7c87ca066 | ||
|
0961401105 | ||
|
e65c236dc9 | ||
|
063c35db0d | ||
|
70fedf618a | ||
|
64cd1b73f2 | ||
|
92f2d5f602 | ||
|
97267e9a77 | ||
|
263858838f | ||
|
4a297ee434 | ||
|
6cc0ff767c | ||
|
ef0c45841d | ||
|
65b86f2d1d | ||
|
34609fc9d2 | ||
|
5bc41f5614 | ||
|
a472160ca7 | ||
|
a5d584371e | ||
|
93c9535216 | ||
|
8bef9848a5 | ||
|
bd4be45118 | ||
|
a8dbceec93 | ||
|
b5224318ae | ||
|
cbae7ebbf5 | ||
|
052318895e | ||
|
7bbacfb97e | ||
|
0ffcc12afc | ||
|
9b0b862406 | ||
|
23843dc2a8 | ||
|
18febbe240 | ||
|
5b75c1b413 | ||
|
81da718007 | ||
|
fdebf13171 | ||
|
15365f6267 | ||
|
c71c2fa07a | ||
|
836eb54008 | ||
|
fd5bf10ddd | ||
|
0082962a93 | ||
|
4d61d73f3a | ||
|
6b228291cc | ||
|
52348a4daa | ||
|
d1e1e436a1 | ||
|
76882c9dd1 | ||
|
e80c3637dd | ||
|
edf3470dfe | ||
|
dbe4a96ac9 | ||
|
bc93657311 | ||
|
0abb801203 | ||
|
26631a7a22 | ||
|
1137dbb39b | ||
|
70e1159947 | ||
|
3c93a19508 | ||
|
602f9ebc93 | ||
|
b785d35e0b | ||
|
fb4f801ecc | ||
|
4929787315 | ||
|
e1d461b78d | ||
|
6dd98f5984 | ||
|
198038b1c9 | ||
|
52eeb40942 | ||
|
acbf11de31 | ||
|
45f8c312a4 | ||
|
81432ef353 | ||
|
1b89ae2346 | ||
|
0b5698dff0 | ||
|
dba230b40a | ||
|
6d4a1191cc | ||
|
c9de855dd8 | ||
|
9a51c55402 | ||
|
3e873a3fde | ||
|
7934babad2 | ||
|
62005c7c42 | ||
|
c30d131181 | ||
|
18efc0e5d3 | ||
|
63c6aa5816 | ||
|
5062f0e0d9 | ||
|
0aad4261d8 | ||
|
c13b8587fc | ||
|
41b4e75f15 | ||
|
69a2036f94 | ||
|
7cb6d9c8b5 | ||
|
fd797ffbf5 | ||
|
4a53c175f5 | ||
|
86d2e6368f | ||
|
843d74d90f | ||
|
ebbb1313e9 | ||
|
7bbddccf80 | ||
|
d8e7a3e3ef | ||
|
c12be2eaed | ||
|
b6da50d20f | ||
|
75ffea5005 | ||
|
a073d20af7 | ||
|
9acc97be8a | ||
|
26e5aeb045 | ||
|
32411ab0ec | ||
|
efddc917b2 | ||
|
2bec58be2d | ||
|
74441a1746 | ||
|
4853b2dc5f | ||
|
2d60bdf726 | ||
|
6fbbe82593 | ||
|
76804c6d76 | ||
|
9142b90cb2 | ||
|
ea73eb32a3 | ||
|
6317008876 | ||
|
33c8f6e375 | ||
|
824407b136 | ||
|
9af86cddfb | ||
|
90323173a7 | ||
|
9e148b88fe | ||
|
da256a30b0 | ||
|
cb25f39136 | ||
|
4cb94702f3 | ||
|
436bca2852 | ||
|
918f177acc | ||
|
9bf8f475bb | ||
|
961634e685 | ||
|
3ce505826e | ||
|
d082812426 | ||
|
d3561e0e77 | ||
|
a452aba812 | ||
|
1477ee275e | ||
|
a54b87c722 | ||
|
dbba3af299 | ||
|
18b4171e7f | ||
|
24ff063652 | ||
|
f919ff690e | ||
|
4126d48c78 | ||
|
0696750457 | ||
|
7593aaed4c | ||
|
1d3ffc4e1d | ||
|
2e67242e92 | ||
|
48e24c2021 | ||
|
80252696c8 | ||
|
5438388789 | ||
|
4deb3ebb58 | ||
|
f9a09f864e | ||
|
efd87e1257 | ||
|
d3b1674a47 | ||
|
91e5cdafa3 | ||
|
490f8f2f25 | ||
|
8a93f4ba13 | ||
|
cebd349e28 | ||
|
97106adf9a | ||
|
f8e2e88e04 | ||
|
204bc6b5fa | ||
|
e4643f71e7 | ||
|
0c19541e8d | ||
|
ed18fd8156 | ||
|
8f8e1304f8 | ||
|
25cf0d993f | ||
|
5e10f11ca5 | ||
|
2b2d23f958 | ||
|
f95a6a5ba8 | ||
|
63ae7a4ffa | ||
|
c0076b5b36 |
3555 changed files with 133879 additions and 41506 deletions
|
@ -1,29 +1,27 @@
|
|||
---
|
||||
image: Visual Studio 2022
|
||||
environment:
|
||||
matrix:
|
||||
- PYTHON: "C:\\PYTHON34"
|
||||
- PYTHON: "C:\\Python313"
|
||||
# Shamelessly taken from https://github.com/plicease/Dist-Zilla-PluginBundle-Author-Plicease/blob/master/.appveyor.yml
|
||||
# Thanks!
|
||||
install:
|
||||
- choco install strawberryperl
|
||||
# - choco install strawberryperl
|
||||
- copy %PYTHON%\python.exe %PYTHON%\python3.exe
|
||||
- SET PATH=%PYTHON%;C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%
|
||||
- python3 -mpip install flake8
|
||||
- python3 -mpip install random2
|
||||
- python3 -mpip install py2exe
|
||||
- python3 -mpip install pycotap
|
||||
- python3 -mpip install six
|
||||
- python3 -mpip install Pillow
|
||||
- python3 -mpip install pygame
|
||||
- SET PATH=%PYTHON%;%PYTHON%\Scripts;C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%
|
||||
- python3 -mpip install Pillow attrs configobj flake8 flake8-import-order
|
||||
pycotap pygame pyinstaller pysol-cards setuptools six
|
||||
ttkthemes
|
||||
- perl -v
|
||||
- copy C:\msys64\mingw64\bin\mingw32-make.exe C:\msys64\mingw64\bin\make.exe
|
||||
- SET PATH=C:\strawberry\c\bin;C:\strawberry\perl\site\bin;C:\strawberry\perl\bin;%PATH%
|
||||
- SET PERL5LIB=C:/_P5/lib/perl5
|
||||
- SET PERL_LOCAL_LIB_ROOT=C:/_P5
|
||||
- SET PERL_MB_OPT=--install_base C:/_P5
|
||||
- SET PERL_MM_OPT=INSTALL_BASE=C:/_P5
|
||||
- perl -v
|
||||
- cpanm --notest Code::TidyAll::Plugin::Flake8 File::Find::Object Perl::Tidy Task::FreecellSolver::Testing Test::Code::TidyAll Test::TrailingSpace
|
||||
- cpanm --notest Code::TidyAll::Plugin::Flake8 File::Find::Object
|
||||
Perl::Tidy Task::FreecellSolver::Testing Test::Code::TidyAll
|
||||
Test::TrailingSpace
|
||||
- echo %PATH%
|
||||
build: off
|
||||
test_script:
|
||||
|
@ -34,35 +32,40 @@ test_script:
|
|||
- gmake pretest
|
||||
- perl run-tests.pl
|
||||
- gmake rules
|
||||
- gmake pot
|
||||
- gmake mo
|
||||
- python3 setup.py py2exe
|
||||
- appveyor DownloadFile https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.0/PySolFC-Cardsets-2.0.tar.bz2/download -FileName cardsets.tar.bz2
|
||||
- tar xf cardsets.tar.bz2
|
||||
- xargs -ta scripts\cardsets_to_bundle -I file cp -rt dist\data\ PySolFC-Cardsets-2.0\file
|
||||
#- gmake pot
|
||||
#- gmake mo
|
||||
- pyinstaller pysol.py --windowed --icon=data\pysol.ico
|
||||
- python3 setup.py install_data -d dist\pysol
|
||||
- appveyor DownloadFile https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-3.0.0.tar.xz/download -FileName cardsets.tar.xz
|
||||
- 7z x cardsets.tar.xz -so | 7z x -si -ttar
|
||||
- mv PySolFC-Cardsets--Minimal-3.0.0/cardset-* dist/pysol/data
|
||||
- appveyor DownloadFile https://sourceforge.net/projects/pysolfc/files/PySol-Music/PySol-Music-4.50/pysol-music-4.50.tar.xz/download -FileName music.tar.xz
|
||||
- 7z x music.tar.xz -so | 7z x -si -ttar
|
||||
- move pysol-music-4.50\data\music dist\data\music
|
||||
- ps: |
|
||||
$apiUrl = 'https://ci.appveyor.com/api'
|
||||
$project = Invoke-RestMethod -Method Get -Uri "$apiUrl/projects/shlomif/fc-solve"
|
||||
$jobId = $project.build.jobs[0].jobId
|
||||
Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts/fc-solve/pkg-build/fc-solve-for-pysol.zip" -OutFile fc-solve.zip
|
||||
- move pysol-music-4.50\data\music dist\pysol\data\music
|
||||
# - ps: |
|
||||
# $apiUrl = 'https://ci.appveyor.com/api'
|
||||
# $project = Invoke-RestMethod -Method Get -Uri "$apiUrl/projects/shlomif/fc-solve"
|
||||
# $jobId = $project.build.jobs[0].jobId
|
||||
# Invoke-RestMethod -Method Get -Uri "$apiUrl/buildjobs/$jobId/artifacts/fc-solve/pkg-build/fc-solve-for-pysol.zip" -OutFile fc-solve.zip
|
||||
#
|
||||
# For reproducible builds:
|
||||
# See: https://reproducible-builds.org/ .
|
||||
- SET FC_SOLVE_VER=5.20.0
|
||||
- appveyor DownloadFile https://sourceforge.net/projects/fc-solve/files/fc-solve/DO-NOT-USE--fc-solve-for-pysol/fc-solve-for-pysol--v%FC_SOLVE_VER%.zip -FileName fc-solve.zip
|
||||
- 7z x fc-solve.zip
|
||||
- move fcs-pysol dist\freecell-solver
|
||||
- 7z a -r pysol_win_dist.7z dist\
|
||||
- move fcs-pysol dist\pysol\freecell-solver
|
||||
- 7z a -r pysol_win_dist.7z dist\pysol\
|
||||
- SET PYTHONPATH=%cd%
|
||||
- python3 scripts\create_iss.py
|
||||
- appveyor DownloadFile https://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe -FileName vcredist_x86.exe
|
||||
- SET PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 5"
|
||||
- SET PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 6"
|
||||
- ISCC /Q setup.iss
|
||||
artifacts:
|
||||
- path: pysol_win_dist.7z
|
||||
name: pysol_win_dist
|
||||
- path: dist\PySolFC_*_setup.exe
|
||||
- path: dist\pysol\PySolFC_*_setup.exe
|
||||
name: pysol_win_installer
|
||||
cache:
|
||||
- C:\_P5 -> .appveyor.yml
|
||||
- C:\strawberry -> .appveyor.yml
|
||||
# - C:\_P5 -> .appveyor.yml
|
||||
# - C:\strawberry -> .appveyor.yml
|
||||
shallow_clone: true
|
||||
|
||||
|
|
37
.github/workflows/ci.yml
vendored
Normal file
37
.github/workflows/ci.yml
vendored
Normal file
|
@ -0,0 +1,37 @@
|
|||
name: CI tests at GitHub
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
check:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
python -m pip install flake8 flake8-import-order \
|
||||
attrs configobj pycotap pysol-cards setuptools six
|
||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
- name: Lint with flake8
|
||||
run: |
|
||||
flake8 . --show-source
|
||||
- name: Run unit tests
|
||||
run: |
|
||||
python -m unittest -v
|
||||
- name: Individually import each Python module
|
||||
run: |
|
||||
python scripts/gen_individual_importing_tests.py
|
||||
prove tests/individually-importing/*.py
|
60
.github/workflows/macos-package.yml
vendored
Normal file
60
.github/workflows/macos-package.yml
vendored
Normal file
|
@ -0,0 +1,60 @@
|
|||
name: macOS package
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: [ '**' ]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macos-14
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up python
|
||||
env:
|
||||
PYVER: '3.9.7'
|
||||
PYVER_SHORT: '3.9'
|
||||
run: |
|
||||
wget -O python.pkg "https://www.python.org/ftp/python/${PYVER}/python-${PYVER}-macosx10.9.pkg"
|
||||
sudo installer -pkg python.pkg -target /
|
||||
echo "/Library/Frameworks/Python.framework/Versions/${PYVER_SHORT}/bin" >> $GITHUB_PATH
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python3 -m pip install --upgrade pip
|
||||
python3 -m pip install --no-binary=Pillow \
|
||||
Pillow attrs configobj py2app pycotap pygame pysol-cards setuptools six ttkthemes
|
||||
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||
brew install create-dmg
|
||||
- name: Get cardsets
|
||||
run: |
|
||||
wget -O cardsets-pack.tar.xz "https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-3.0.0.tar.xz/download"
|
||||
tar -xJf cardsets-pack.tar.xz
|
||||
mv PySolFC-Cardsets--Minimal-3.0.0/cardset-* data
|
||||
- name: Prepare game rules (process the HTML) and translations
|
||||
run: |
|
||||
make rules mo
|
||||
- name: Create the executable .app
|
||||
run: |
|
||||
PYTHONPATH="." python3 setup_osx.py py2app
|
||||
zip -q -r -X PySolFC-app.zip dist
|
||||
- name: Make the .dmg for easy installation
|
||||
run:
|
||||
create-dmg --volname "Install PySolFC"
|
||||
--volicon data/PySol.icns
|
||||
--background html-src/images/pysollogo01.png
|
||||
--window-size 800 400
|
||||
--icon PySolFC.app 200 185
|
||||
--app-drop-link 600 185
|
||||
--skip-jenkins
|
||||
PySolFC.dmg dist
|
||||
- name: Upload zipped app
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pysolfc-app
|
||||
path: PySolFC-app.zip
|
||||
- name: Upload dmg
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: pysolfc-dmg
|
||||
path: PySolFC.dmg
|
25
.gitignore
vendored
25
.gitignore
vendored
|
@ -1,6 +1,7 @@
|
|||
*.pyc
|
||||
/.tidyall.d/
|
||||
/MANIFEST
|
||||
/_Inline/
|
||||
/build/*
|
||||
/data/cardsets/*
|
||||
/data/html/*
|
||||
|
@ -9,9 +10,31 @@
|
|||
/html
|
||||
/html-src/html/*
|
||||
/images
|
||||
/locale/*
|
||||
/po/de.po
|
||||
/po/fr.po
|
||||
/po/it.po
|
||||
/po/pl.po
|
||||
/po/ru.po
|
||||
/po/pt_BR.po
|
||||
/tests/individually-importing/*.py
|
||||
/tests/unit-generated/*.py
|
||||
PySolFC-Cardsets--Minimal-2.0.*
|
||||
PySolFC-Cardsets--Minimal-2.0/
|
||||
PySolFC-Cardsets-2.0.*
|
||||
PySolFC-Cardsets-2.0/
|
||||
PySolFC-Cardsets--Minimal-3.0.*
|
||||
PySolFC-Cardsets--Minimal-3.0/
|
||||
PySolFC-Cardsets-3.0.*
|
||||
PySolFC-Cardsets-3.0/
|
||||
android/*.apk
|
||||
android/*.zip
|
||||
android/bin/keystore
|
||||
buildozer/.buildozer*
|
||||
buildozer/PySolFC-Cardsets*
|
||||
buildozer/cardsets
|
||||
buildozer/bin
|
||||
buildozer/tmp
|
||||
buildozer/support*
|
||||
buildozer/ENV
|
||||
buildozer/VENV
|
||||
venv*
|
||||
|
|
|
@ -3,6 +3,6 @@ ignore = tests/individually-importing/*
|
|||
select = **/*.py
|
||||
|
||||
[PerlTidy]
|
||||
argv = -ci=4 -bl -cti=0
|
||||
argv = -ci=4 -bl -cti=0 --character-encoding=none
|
||||
ignore = **/{cmpdigest,valgrind,verify}--*.t
|
||||
select = **/*.{pl,pm,t}
|
||||
|
|
90
.travis.yml
90
.travis.yml
|
@ -1,45 +1,65 @@
|
|||
dist: trusty
|
||||
language: generic
|
||||
os:
|
||||
- linux
|
||||
- osx
|
||||
before_install:
|
||||
- if test "$TRAVIS_OS_NAME" = "linux" ; then sudo apt-get update -qq ; sudo apt-get install -y ack-grep cpanminus libperl-dev make perl python-glade2 python-gnome2 python-gnome2-dev python-gtk2 python-setuptools python-tk python3 python3-pip python3-setuptools python3-tk ; sudo dpkg-divert --local --divert /usr/bin/ack --rename --add /usr/bin/ack-grep ; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew update; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew list python &>/dev/null || brew install python; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew list python3 &>/dev/null || brew install python3; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew install pyenv-virtualenv; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then brew bundle ; brew link gettext --force ; export PATH="$PATH:/usr/local/bin" ; export DYLD_LIBRARY_PATH="/usr/local/opt/curl/lib:/usr/local/opt/openssl/lib:${DYLD_LIBRARY_PATH}" ; export PATH="/usr/local/opt/openssl/bin:$PATH" ; export LDFLAGS="$LDFLAGS -L/usr/local/opt/openssl/lib" ; export CPPFLAGS="$CPPFLAGS -I/usr/local/opt/openssl/include" ; export CPPFLAGS="$CPPFLAGS -I$(brew --prefix openssl)/include" PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig:$PKG_CONFIG_PATH" LDFLAGS="$LDFLAGS -L$(brew --prefix openssl)/lib" ;fi
|
||||
install:
|
||||
- sudo cpanm Code::TidyAll::Plugin::Flake8 Perl::Tidy Test::Code::TidyAll Test::Differences Test::TrailingSpace
|
||||
- export PY_MODS='pycotap random2 six'
|
||||
- "`which python3` -m pip install --upgrade flake8 $PY_MODS"
|
||||
- "sudo /usr/bin/python3 -m pip install --upgrade $PY_MODS || true"
|
||||
- "sudo `which python2` -m pip install --upgrade $PY_MODS"
|
||||
- which python
|
||||
- which python2
|
||||
language: python
|
||||
python:
|
||||
- "3.6"
|
||||
matrix:
|
||||
exclude:
|
||||
- os: osx
|
||||
python: "3.6"
|
||||
include:
|
||||
- os: osx
|
||||
language: generic
|
||||
env: TOXENV=py35
|
||||
script:
|
||||
- "sh -x scripts/travis-ci-build"
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then PYTHONPATH="`pwd`" python3 setup_osx.py py2app ; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then find . -iname '*.app' ; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then (cd dist; tar -cvf ../PySolFC.app.tar PySolFC.app/ ; ); xz PySolFC.app.tar ; fi
|
||||
dist: bionic
|
||||
osx_image: xcode12.2
|
||||
addons:
|
||||
apt:
|
||||
- cpanminus
|
||||
- python3-pip
|
||||
- python3-setuptools
|
||||
- python3-tk
|
||||
homebrew:
|
||||
- perl
|
||||
- cpanminus
|
||||
- create-dmg
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/perl_modules
|
||||
- $HOME/tidyall_d
|
||||
deploy:
|
||||
provider: releases
|
||||
api_key:
|
||||
token:
|
||||
secure: SrKnXigL/oUHNbqpbGx0DB1o+LAEkfPA2QTBllXxg4V+1vGAHBT9FRecp8Do+no/zSPRttH+sPDEPBXMMAV0BWVKKw5Mxas/S5ulVkNdfxpTq1bKjI3EjZbVsS1zZlHe0P77TDFDAj8zyeiYecBM08suhd9OvScieiPlpFPE1UYp9vvNKaBgc66IRNnIDRBdktW4YLsgvkrpXnxGPy8gGwylsTeOzNs5/r5dzHswGdksJl46kqCIbV+s4/Xcx+BEnfibWzEFZmLQoGKhoukbSis3YXGIlERcgiVU6v7S2D4wbwUXSAKOj/Io7z/88Co2P3Qbm538kf/pjeR9+DaM1HsHQQcL0detCjjLog+ekKr2fM00QI1yRmqOiZtuXxTMpneYX73EBmPt4la4rjKmnlhS+NTxrynHcPZD8QopCPvoZ3sUD6dQCrbi8kcGxe13srfdJ3KjuWZXdedLIOgNELbj5o6GNivsanWna59yoJzChC5/H5Jjllncvzbp56TZfEkM1NJkE84jjSS8Sn2KLXjD0woHIsuUSkRNExrCt/6QmIub/QxZPUhwQ2J0xCv1IJPdd0XvO3gCqasG3UA2Q0OlP172x92ocOV/wm1/4wfoG6v/mn+bX5ZwvrsMmm+r3FKKlM8L3T33yFjMzgG/YMoRN8w7pXUIkdtZK8EEDVg=
|
||||
# file: dist/PySolFC.app
|
||||
file: PySolFC.app.tar.xz
|
||||
file: PySolFC.dmg
|
||||
on:
|
||||
repo: shlomif/PySolFC
|
||||
tags: true
|
||||
skip_cleanup: true
|
||||
before_install:
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then
|
||||
wget --content-disposition https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/minimal/PySolFC-Cardsets--Minimal-2.2.0.tar.xz/download &&
|
||||
tar xJf PySolFC-Cardsets--Minimal-3.0.0.tar.xz &&
|
||||
mv PySolFC-Cardsets--Minimal-3.0.0/cardset-* data ;
|
||||
fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then
|
||||
PYVER=3.9.1 &&
|
||||
PYVER_SHORT=3.9 &&
|
||||
wget -O python.pkg "https://www.python.org/ftp/python/${PYVER}/python-${PYVER}-macosx10.9.pkg" &&
|
||||
sudo installer -pkg python.pkg -target / &&
|
||||
export PATH="/Library/Frameworks/Python.framework/Versions/${PYVER_SHORT}/bin:${PATH}" ;
|
||||
fi
|
||||
- cpanm local::lib
|
||||
- eval "$(perl -Mlocal::lib=${HOME}/perl_modules)"
|
||||
install:
|
||||
# Tests are failing for them sometimes
|
||||
- cpanm --notest Capture::Tiny IPC::System::Simple
|
||||
- cpanm Code::TidyAll::Plugin::Flake8 Perl::Tidy Test::Code::TidyAll Test::Differences Test::TrailingSpace
|
||||
- export PY_MODS='attrs configobj pycotap pysol-cards setuptools six'
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then export PY_MODS="--no-binary=Pillow Pillow $PY_MODS" ; fi
|
||||
- sudo -H pip3 install --upgrade wheel
|
||||
- sudo -H pip3 install --upgrade $PY_MODS flake8 flake8-import-order
|
||||
script:
|
||||
- export TIDYALL_DATA_DIR="$HOME/tidyall_d"
|
||||
- bash -x scripts/travis-ci-build
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then PYTHONPATH="." python3 setup_osx.py py2app ; fi
|
||||
- if test "$TRAVIS_OS_NAME" = "osx" ; then
|
||||
create-dmg --volname "Install PySolFC"
|
||||
--volicon data/PySol.icns
|
||||
--background html-src/images/pysollogo01.png
|
||||
--window-size 800 400
|
||||
--icon PySolFC.app 200 185
|
||||
--app-drop-link 600 185
|
||||
--skip-jenkins
|
||||
PySolFC.dmg dist ; fi
|
||||
|
|
37
AUTHORS
37
AUTHORS
|
@ -1,37 +0,0 @@
|
|||
Main Authors
|
||||
============
|
||||
|
||||
Markus Franz Xaver Johannes Oberhumer <markus@oberhumer.com>
|
||||
author of PySol
|
||||
T. Kirk
|
||||
author of Ultrasol
|
||||
Skomoroh <skomoroh@users.sourceforge.net>
|
||||
author of PySolFC
|
||||
Brian Lenihan <brianl@users.sourceforge.net>
|
||||
macOS package maintainer
|
||||
Shlomi Fish ( http://www.shlomifish.org/ )
|
||||
Continued PySolFC maintenance, port to python 3, test suite
|
||||
(Note: he places all his changes under the MIT/Expat licence).
|
||||
https://github.com/lufebe16
|
||||
Added the Kivy toolkit
|
||||
Roderik Ploszek ( https://github.com/Programator2 )
|
||||
Fixes and enhancements
|
||||
|
||||
Games contributors
|
||||
==================
|
||||
|
||||
Mark Andrews
|
||||
Galen Brooks <galen@nine.com>
|
||||
Andrew Csillag <drew_csillag@geocities.com>
|
||||
Michael Foord
|
||||
Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
|
||||
Nicola Larosa
|
||||
John Stoneham <obijohn99@aol.com>
|
||||
David Svoboda <svoboda@users.sourceforge.net>
|
||||
|
||||
|
||||
Translations
|
||||
============
|
||||
|
||||
Holger Schäkel <Holger@Schaekel-row.de> (de)
|
||||
Jerzy Trzeciak <artusek@wp.pl> (pl)
|
45
AUTHORS.md
Normal file
45
AUTHORS.md
Normal file
|
@ -0,0 +1,45 @@
|
|||
Main Authors
|
||||
============
|
||||
|
||||
* Markus Franz Xaver Johannes Oberhumer https://www.oberhumer.com/
|
||||
* Author of PySol
|
||||
* T. Kirk
|
||||
* Author of Ultrasol
|
||||
* [Skomoroh](https://sourceforge.net/u/skomoroh/profile/)
|
||||
* Author of PySolFC
|
||||
* [Brian Lenihan](https://sourceforge.net/u/brianl/profile/)
|
||||
* macOS package maintainer
|
||||
* [Shlomi Fish](https://www.shlomifish.org/)
|
||||
* Continued PySolFC maintenance, port to python 3, test suite (Note: he places all his changes under the Expat licence).
|
||||
* [lufebe16](https://github.com/lufebe16)
|
||||
* Added the Kivy toolkit and all the Android app related code and build procedures.
|
||||
* [Roderik Ploszek](https://github.com/Programator2)
|
||||
* Fixes and enhancements
|
||||
* [Joe R.](https://github.com/joeraz)
|
||||
* Many new games and continued PySolFC maintenance and development.
|
||||
|
||||
Games contributors
|
||||
==================
|
||||
|
||||
* Mark Andrews
|
||||
* Galen Brooks <galen@nine.com>
|
||||
* Andrew Csillag <drew@thecsillags.com>
|
||||
* Michael Foord
|
||||
* Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
|
||||
* Nicola Larosa
|
||||
* John Stoneham <obijohn99@aol.com>
|
||||
* David Svoboda <svoboda@users.sourceforge.net>
|
||||
|
||||
|
||||
Enhancements
|
||||
============
|
||||
|
||||
* [ghostofiht](https://github.com/ghostofiht) - Contributed a new logo design.
|
||||
* [Trueno font](https://fontlibrary.org/en/font/trueno) under the [OFL](https://en.wikipedia.org/wiki/SIL_Open_Font_License) by [Julieta Ulanovsky](http://www.zkysky.com.ar/) - used in the logo.
|
||||
* [Remix Icon](https://remixicon.com/) - used for many icons throughout the app.
|
||||
|
||||
Translations
|
||||
============
|
||||
|
||||
* Holger Schäkel <Holger@Schaekel-row.de> (de)
|
||||
* Jerzy Trzeciak <artusek@wp.pl> (pl)
|
5
Brewfile
5
Brewfile
|
@ -1,5 +0,0 @@
|
|||
brew "cpanminus"
|
||||
brew "gettext"
|
||||
brew "gnutls"
|
||||
brew "openssl"
|
||||
brew "tcl-tk"
|
|
@ -5,13 +5,14 @@ for general guidelines for contributing to open source.
|
|||
|
||||
# Contribution constraints
|
||||
|
||||
- The [Travis-CI build](https://travis-ci.org/shlomif/PySolFC) and [AppVeyor build](https://ci.appveyor.com/project/shlomif/pysolfc) (which also run the test suite) should pass on each commit.
|
||||
- The [GitHub Actions CI build](https://github.com/shlomif/PySolFC/actions) and [AppVeyor build](https://ci.appveyor.com/project/shlomif/pysolfc) (which also run the test suite) should pass on each commit.
|
||||
- Your contributions should be under [GPLv3+](https://en.wikipedia.org/wiki/GNU_General_Public_License#Version_3) or a [compatible free software licence](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses), but please don't put them under the [AGPL](https://en.wikipedia.org/wiki/Affero_General_Public_License), which adds additional restrictions.
|
||||
- The code should be compatible with both Python 2.7.x and Python 3.4.x-and-above.
|
||||
- The code should be compatible with Python 3.7 and above.
|
||||
|
||||
# How you can contribute
|
||||
|
||||
- Translate PySol to a human language you know.
|
||||
- Test the "master" branch version of the version control repository or other prereleases.
|
||||
- Try to reproduce [open issues](https://github.com/shlomif/PySolFC/issues)
|
||||
- Try to fix bugs.
|
||||
- Add new games.
|
||||
|
@ -20,6 +21,7 @@ for general guidelines for contributing to open source.
|
|||
- Add new features.
|
||||
- Contribute graphics
|
||||
- Improve the site
|
||||
- Package PySol for a new package repository or OS, or update existing packages.
|
||||
- Make a monetary donation.
|
||||
- [Star](https://help.github.com/articles/about-stars/) or [Watch](https://help.github.com/articles/watching-and-unwatching-repositories/) the repository on GitHub
|
||||
|
||||
|
@ -30,6 +32,49 @@ custom variants. It lives in the Edit menu.
|
|||
|
||||
Otherwise, the games' sources live under
|
||||
[the pysollib/games/](pysollib/games/) directory in the repository, and are
|
||||
written in Python 2.7/3.x and you can try inheriting from an existing
|
||||
written in Python 3.x and you can try inheriting from an existing
|
||||
variant [class](https://en.wikipedia.org/wiki/Class_%28computer_programming%29).
|
||||
|
||||
In addition to adding the game's source code, be sure to add the game's metadata. At minimum, you should:
|
||||
- In html-src/rules, create a rules file for the game in question. Use an existing rules file as a guideline. Ideally, each set of game rules should be written in such a way that a non-PySol user can read the rules and know how to play the game with their own deck of cards. For games that are only slightly different from other games, referencing the more common variant's rules is okay.
|
||||
- In the pysollib/gamedb.py file, update the GAMES_BY_PYSOL_VERSION dictionary to include the new game's ID for the "dev" key. If the "dev" entry does not exist, add it.
|
||||
- If you know the inventor for the game, update the inventor's entry in the GAMES_BY_INVENTORS dictionary in the same file.
|
||||
|
||||
## Contributing changesets / patches / diffs
|
||||
|
||||
One can contribute changesets either by opening [pull-requests](https://docs.github.com/en/desktop/contributing-and-collaborating-using-github-desktop/creating-an-issue-or-pull-request) or merge requests,
|
||||
or by submitting patches generated by [git diff](https://git-scm.com/docs/git-diff) or [git format-patch](https://git-scm.com/docs/git-format-patch)
|
||||
to a developer's email (e.g [@shlomif's](https://www.shlomifish.org/me/contact-me/) ) or uploading it to a web service (e.g: a pastesite, dropbox,
|
||||
or Google Drive).
|
||||
|
||||
# The Release Process
|
||||
|
||||
Before publishing a release, please open an issue in GitHub, indicating your intent to do so, to confirm with any other developers if they have any objections, or any WIP features/tickets that should be included in the upcoming release. It's best to do this a week or two before you plan to actually publish the release. No responses on this for a couple weeks can be considered approval to proceed. Releases tagged without verifying with other developers may be removed.
|
||||
|
||||
In order to publish a new version, follow these steps:
|
||||
|
||||
1. Update `NEWS.asciidoc`. The release notes should also be added to `html-src/news.html`, along with `templates/index.html` in the website repo.
|
||||
2. Update the `VERSION_TUPLE =` line in `pysollib/settings.py`.
|
||||
3. Check the `GAMES_BY_PYSOL_VERSION` dictionary in the `pysollib/gamedb.py` file. If there's a "dev" entry in this dictionary, change that entry's key to be the new version number. If there isn't a "dev" entry, ignore this step.
|
||||
4. Test using `gmake test` .
|
||||
5. `git commit` the changes .
|
||||
6. `git tag pysolfc-2.6.5` (or equivalent version).
|
||||
7. `git push` and `git push --tags` to https://github.com/shlomif/PySolFC .
|
||||
8. Wait for the AppVeyor build for the tag to complete and scan the .exe using https://www.virustotal.com/ .
|
||||
9. Grab the macOS installer (.dmg) from [GitHub Actions](https://github.com/shlomif/PySolFC/actions/workflows/macos-package.yml) (look for an artifact called `pysolfc-dmg`).
|
||||
10. Run `gmake dist`.
|
||||
11. Use [rexz9](https://github.com/shlomif/shlomif-computer-settings/blob/567b6ab3f4272ad66bf331536dc80bf58bfff3af/shlomif-settings/bash-aliases/user_aliases.bash#L57) on `dist/PySol*.tar.xz`.
|
||||
12. Go to https://sourceforge.net/projects/pysolfc/files/PySolFC/ and add a folder called PySolFC-2.6.5 (note the capitalisation).
|
||||
13. Add the tar.xz, the .exe and the .dmg there and mark them as defaults for the right OSes.
|
||||
|
||||
# Long-term, large-scale, tasks
|
||||
|
||||
Support SVG cardsets.
|
||||
|
||||
An optional [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) (Read-eval-print loop)
|
||||
|
||||
Listen on a TCP / HTTP+REST port.
|
||||
|
||||
A web-based version.
|
||||
|
||||
Support a more secure saved-games format than the pickle-based-one.
|
||||
|
|
36
MANIFEST.in
36
MANIFEST.in
|
@ -4,30 +4,36 @@
|
|||
## code
|
||||
##
|
||||
include pysol.py setup.py setup_osx.py setup.cfg MANIFEST.in Makefile
|
||||
include COPYING README.md AUTHORS README.android README.kivy
|
||||
include COPYING README.md AUTHORS.md README.android README.kivy
|
||||
include NEWS.asciidoc
|
||||
#recursive-include pysollib *.py
|
||||
include pysollib/*.py pysollib/macosx/*.py pysollib/configobj/*.py
|
||||
include pysollib/*.py
|
||||
include pysollib/winsystems/*.py
|
||||
include pysollib/tk/*.py pysollib/tile/*.py pysollib/pysolgtk/*.py
|
||||
include pysollib/game/*.py
|
||||
include pysollib/games/*.py pysollib/games/special/*.py
|
||||
include pysollib/games/ultra/*.py pysollib/games/mahjongg/*.py
|
||||
include pysollib/games/mahjongg/*.py
|
||||
include data/tcl/*.tcl
|
||||
include data/pysol.desktop
|
||||
include data/pysolfc.glade
|
||||
graft data/themes
|
||||
recursive-exclude data/themes *.py
|
||||
include scripts/build.bat scripts/create_iss.py scripts/mahjongg_utils.py
|
||||
include scripts/pygettext.py scripts/all_games.py scripts/cardset_viewer.py
|
||||
include scripts/cardconv scripts/cardsetsgiftobmp
|
||||
include scripts/create_iss.py scripts/mahjongg_utils.py
|
||||
include scripts/all_games.py scripts/cardset_viewer.py
|
||||
include scripts/cardconv
|
||||
include scripts/gen_individual_importing_tests.py
|
||||
|
||||
recursive-include tests/ *.pm *.py *.t *.yml
|
||||
exclude tests/individually-importing/*
|
||||
include tests/individually-importing/PLACEHOLDER
|
||||
recursive-include tests/lib *.pm *.py
|
||||
|
||||
recursive-include tests/unit/data *
|
||||
include tests/style/*.t
|
||||
include tests/unit-generated/PLACEHOLDER
|
||||
|
||||
include .tidyallrc
|
||||
include android/*.py
|
||||
include android/mk*
|
||||
include android/initsdk
|
||||
include android/initsupport
|
||||
include android/debian/*
|
||||
#graft data/plugins
|
||||
##
|
||||
|
@ -42,7 +48,7 @@ graft html-src
|
|||
#graft data/images
|
||||
recursive-include data/images *.gif *.png *.jpg
|
||||
graft data/tiles
|
||||
include data/pysol.xbm data/pysol.xpm data/pysol.ico data/PySol.icns
|
||||
include data/pysol.ico data/PySol.icns
|
||||
##
|
||||
## data - sound
|
||||
##
|
||||
|
@ -79,6 +85,16 @@ graft data/cardset-standard
|
|||
graft data/cardset-tuxedo
|
||||
graft data/cardset-vienna-2k
|
||||
graft data/cardset-dondorf
|
||||
graft data/cardset-neo
|
||||
graft data/cardset-neo-hex
|
||||
graft data/cardset-neo-tarock
|
||||
graft data/cardset-uni-mahjongg
|
||||
graft data/cardset-louie-mantia-hanafuda
|
||||
graft data/cardset-mughal-ganjifa-xl
|
||||
graft data/cardset-dashavatara-ganjifa-xl
|
||||
graft data/cardset-next-matrix
|
||||
graft data/cardset-matching
|
||||
graft data/cardset-matching-xl
|
||||
##
|
||||
## exclude dirs
|
||||
##
|
||||
|
|
88
Makefile
88
Makefile
|
@ -1,82 +1,72 @@
|
|||
# Makefile for PySolFC
|
||||
|
||||
override LANG=C
|
||||
override PYSOL_DEBUG=1
|
||||
ifeq ($(OS),Windows_NT)
|
||||
path_sep = ;
|
||||
else
|
||||
path_sep = :
|
||||
endif
|
||||
export PYTHONPATH := $(PYTHONPATH)$(path_sep)$(CURDIR)
|
||||
|
||||
PYSOLLIB_FILES=pysollib/tk/*.py pysollib/tile/*.py pysollib/*.py \
|
||||
pysollib/games/*.py pysollib/games/special/*.py \
|
||||
pysollib/games/ultra/*.py pysollib/games/mahjongg/*.py \
|
||||
pysollib/kivy/*.py
|
||||
|
||||
.PHONY : all install dist all_games_html rules pot mo
|
||||
.PHONY: all install dist rpm all_games_html rules pot mo pretest test runtest
|
||||
|
||||
all:
|
||||
@echo "No default target"
|
||||
|
||||
install:
|
||||
python setup.py install
|
||||
python3 setup.py install
|
||||
|
||||
dist: all_games_html rules mo
|
||||
python3 setup.py sdist
|
||||
|
||||
rpm: all_games_html rules mo
|
||||
python setup.py bdist_rpm
|
||||
python3 setup.py bdist_rpm
|
||||
|
||||
all_games_html:
|
||||
PYTHONPATH=`pwd` ./scripts/all_games.py html id doc/rules bare > docs/all_games.html
|
||||
DOCS_DIR = docs
|
||||
HTML_DIR = data/html
|
||||
ALL_GAMES_HTML_BASE = all_games.html
|
||||
ALL_GAMES_HTML = $(HTML_DIR)/$(ALL_GAMES_HTML_BASE)
|
||||
ALL_GAMES_HTML__FOR_WEBSITE = $(DOCS_DIR)/$(ALL_GAMES_HTML_BASE)
|
||||
all_games_html: $(ALL_GAMES_HTML)
|
||||
|
||||
$(ALL_GAMES_HTML) $(ALL_GAMES_HTML__FOR_WEBSITE): rules
|
||||
cd $(HTML_DIR) && $(CURDIR)/scripts/all_games.py html id rules > $(ALL_GAMES_HTML_BASE)
|
||||
./scripts/all_games.py html id doc/rules bare > $(ALL_GAMES_HTML__FOR_WEBSITE)
|
||||
|
||||
rules:
|
||||
export PYTHONPATH=`pwd`; (cd html-src && ./gen-html.py)
|
||||
cd html-src && ./gen-html.py
|
||||
cp -r html-src/images html-src/html
|
||||
rm -rf data/html
|
||||
mv html-src/html data
|
||||
|
||||
pot:
|
||||
PYTHONPATH=`pwd` ./scripts/all_games.py gettext > po/games.pot
|
||||
PYTHONPATH=`pwd` ./scripts/pygettext.py -k n_ --ngettext-keyword ungettext -o po/pysol-1.pot $(PYSOLLIB_FILES)
|
||||
xgettext -L C --keyword=N_ -o po/pysol-2.pot data/glade-translations
|
||||
msgcat po/pysol-1.pot po/pysol-2.pot > po/pysol.pot
|
||||
rm -f po/pysol-1.pot po/pysol-2.pot
|
||||
for lng in ru pl; do \
|
||||
mv -f po/$${lng}_pysol.po po/$${lng}_pysol.old.po; \
|
||||
msgmerge po/$${lng}_pysol.old.po po/pysol.pot > po/$${lng}_pysol.po; \
|
||||
rm -f po/$${lng}_pysol.old.po; \
|
||||
mv -f po/$${lng}_games.po po/$${lng}_games.old.po; \
|
||||
msgmerge po/$${lng}_games.old.po po/games.pot > po/$${lng}_games.po; \
|
||||
rm -f po/$${lng}_games.old.po; \
|
||||
./scripts/all_games.py gettext > po/games.pot
|
||||
xgettext --keyword=n_ --add-comments=TRANSLATORS: -o po/pysol.pot \
|
||||
pysollib/*.py pysollib/*/*.py pysollib/*/*/*.py data/pysolfc.glade
|
||||
set -e; \
|
||||
for lng in de fr pl it ru pt_BR; do \
|
||||
msgmerge --update --quiet --backup=none po/$${lng}_pysol.po po/pysol.pot; \
|
||||
msgmerge --update --quiet --backup=none po/$${lng}_games.po po/games.pot; \
|
||||
done
|
||||
|
||||
mo:
|
||||
for loc in ru ru_RU de de_AT de_BE de_DE de_LU de_CH pl pl_PL it it_IT; do \
|
||||
test -d locale/$${loc}/LC_MESSAGES || mkdir -p locale/$${loc}/LC_MESSAGES; \
|
||||
set -e; \
|
||||
for lang in de fr pl it ru pt_BR; do \
|
||||
mkdir -p locale/$${lang}/LC_MESSAGES; \
|
||||
msgcat --use-first po/$${lang}_games.po po/$${lang}_pysol.po > po/$${lang}.po; \
|
||||
msgfmt --check -o locale/$${lang}/LC_MESSAGES/pysol.mo po/$${lang}.po; \
|
||||
done
|
||||
for lang in ru pl it; do \
|
||||
msgcat --use-first po/$${lang}_games.po po/$${lang}_pysol.po > po/$${lang}.po 2>/dev/null; \
|
||||
done
|
||||
for lang in ru de pl it; do \
|
||||
msgfmt -o locale/$${lang}/LC_MESSAGES/pysol.mo po/$${lang}.po; \
|
||||
done
|
||||
cp -f locale/ru/LC_MESSAGES/pysol.mo locale/ru_RU/LC_MESSAGES/pysol.mo
|
||||
for dir in de_AT de_BE de_DE de_LU de_CH; do \
|
||||
cp -f locale/de/LC_MESSAGES/pysol.mo locale/$${dir}/LC_MESSAGES/pysol.mo; \
|
||||
done
|
||||
cp -f locale/pl/LC_MESSAGES/pysol.mo locale/pl_PL/LC_MESSAGES/pysol.mo
|
||||
cp -f locale/it/LC_MESSAGES/pysol.mo locale/it_IT/LC_MESSAGES/pysol.mo
|
||||
|
||||
pretest:
|
||||
@rm -f tests/individually-importing/*.py # To avoid stray files
|
||||
python scripts/gen_individual_importing_tests.py
|
||||
rm -f tests/individually-importing/*.py tests/unit-generated/*.py # To avoid stray files
|
||||
python3 scripts/gen_individual_importing_tests.py
|
||||
|
||||
TEST_ENV_PATH = "`pwd`:`pwd`/tests/lib"
|
||||
TEST_ENV = PYTHONPATH=$(TEST_ENV_PATH) PERL5LIB=$(TEST_ENV_PATH)
|
||||
TEST_FILES = tests/style/*.t tests/unit-generated/*.py tests/individually-importing/*.py
|
||||
TEST_ENV_PATH = $(CURDIR)$(path_sep)$(CURDIR)/tests/lib
|
||||
TEST_FILES = tests/style/*.t tests/t/*.py tests/individually-importing/*.py
|
||||
|
||||
define RUN_TESTS
|
||||
$(TEST_ENV) $1 $(TEST_FILES)
|
||||
endef
|
||||
test runtest: export PERL5LIB := $(PERL5LIB)$(path_sep)$(TEST_ENV_PATH)
|
||||
|
||||
test: pretest
|
||||
$(call RUN_TESTS,prove)
|
||||
prove $(TEST_FILES)
|
||||
|
||||
runtest: pretest
|
||||
$(call RUN_TESTS,runprove)
|
||||
runprove $(TEST_FILES)
|
||||
|
|
241
NEWS.asciidoc
Normal file
241
NEWS.asciidoc
Normal file
|
@ -0,0 +1,241 @@
|
|||
[[news]]
|
||||
=== News
|
||||
* _11 January, 2025:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-3.2.0/[PySolFC
|
||||
v3.2.0]. New in this release:
|
||||
** New fullscreen mode, accessible by pressing F11.
|
||||
** Easy option to clear advanced search options.
|
||||
** Lots of bugfixes and enhancements.
|
||||
* _19 October, 2024:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-3.1.0/[PySolFC
|
||||
v3.1.0]. New in this release:
|
||||
** Ten new games.
|
||||
** Cleanup of duplicate images to reduce package size.
|
||||
** Some extra cardset/table tile filter options.
|
||||
** Many enhancements, bugfixes, etc.
|
||||
* _31 March, 2024:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-3.0.0/[PySolFC
|
||||
v3.0.0] - the biggest release in over 15 years. Additionally, there is a new Cardsets release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-3.0/[PySolFC-Cardsets v.3.0]. New in this release:
|
||||
** 120 new games.
|
||||
** Support for several new types of games/decks, including tile puzzles, Ishido-type tile matching games, joker deck games, and more.
|
||||
** New game and cardset categories.
|
||||
** Ability to change the style of virtually any of the graphics in PySol.
|
||||
** Some UI/Quality of Life improvements.
|
||||
** Bugfixes.
|
||||
* _10 July, 2023:_ There is a new beta release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.21.0/[PySolFC
|
||||
v2.21.0]. New in this release:
|
||||
** Ten new games.
|
||||
** Compatibility with Pillow 10.0.
|
||||
** Several new display options.
|
||||
** Other bugfixes and enhancements.
|
||||
* _16 April, 2023:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.20.1/[PySolFC
|
||||
v2.20.1]. New in this release:
|
||||
** The release packages have been updated to use the latest version of Python, and all the dependent libraries.
|
||||
** New alternate release packages for Windows and Mac that include the full cardsets library (these are larger and may take longer to download/install).
|
||||
** Bugfixes and other enhancements.
|
||||
* _26 February, 2023:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.20.0/[PySolFC
|
||||
v2.20.0]. Additionally, there is a new Cardsets release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.2/[PySolFC-Cardsets v.2.2]. New in this release:
|
||||
** Over 40 new games, bringing the total to 1,200!
|
||||
** Memory games can now use any type of cardset, including new Matching type cardsets.
|
||||
** New options in the Solitaire Wizard.
|
||||
** Additional documentation for a number of PySol's features.
|
||||
** Bugfixes and other enhancements.
|
||||
* _11 October, 2022:_ Linux users, PySolFC is now available https://flathub.org/apps/details/io.sourceforge.pysolfc.PySolFC[on Flathub].
|
||||
* _9 October, 2022:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.18.0/[PySolFC
|
||||
v2.18.0]. New in this release:
|
||||
** Advanced search feature - the ability to search for games, cardsets, or table tiles based on many different criteria.
|
||||
** Complete documentation containing rules for all 1,100+ games.
|
||||
** Revamped status bar, displaying more info.
|
||||
** The Find Card feature now supports all types of games.
|
||||
** Many new display and assist options.
|
||||
** Bugfixes, code cleanup, etc.
|
||||
* _10 May, 2022_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.16.0/[PySolFC
|
||||
v2.16.0]. Anyone upgrading from a version prior to 2.15.0 should read the notes for that version before upgrading. New in this release:
|
||||
** Enhancements to many images and graphical displays.
|
||||
** More game rules in the documentation.
|
||||
** Bugfixes, cleanup, and other enhancements.
|
||||
* _12 March, 2022_ There is a new beta release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.15.0/[PySolFC
|
||||
v2.15.0]. Additionally, there is a new Cardsets release https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.1/[PySolFC-Cardsets v.2.1]
|
||||
(required to run 2.15). This is a pretty sizable release, so this beta version
|
||||
is being offered before a stable 2.16 in the next couple months. Any https://github.com/shlomif/PySolFC/issues[feedback
|
||||
and bug reports] are greatly appreciated. The full list of changes for this release
|
||||
is quite long, but here are the highlights:
|
||||
** 35 new games, plus enhancements and fixes to many existing games.
|
||||
** Many new game rules added to the documentation.
|
||||
** New high resolution default display. This new display uses high resolution
|
||||
cardsets and scaling to make the games look impressive on larger monitors.
|
||||
*** Note that the new high-resolution options will not override your currently selected
|
||||
options for existing users. If you want to use the new settings, you can delete or
|
||||
rename your options.cfg file.
|
||||
*** Also note that because of these changes, upgrading your version of PySolFC Cardsets
|
||||
is required even if you're using the minimal package. If you are using the Windows or
|
||||
Mac installer, this will be handled automatically, but you'll need to upgrade if you're
|
||||
setting it up manually.
|
||||
** New feature to search for games, cardsets, and table tiles by name.
|
||||
** Many new display options.
|
||||
** Bugfixes and cleanup.
|
||||
** And more.
|
||||
* _10 December, 2021:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.14.1/[PySolFC
|
||||
v2.14.1]. This release fixes a number of bugs, including one that causes
|
||||
crashes for some users when opening the select game/cardset/table tile window.
|
||||
* _19 September, 2021:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.14.0/[PySolFC
|
||||
v2.14.0]. New in this release:
|
||||
** 16 new games
|
||||
** Support for Python 3.10 (Minimum requirement is still Python 2.7)
|
||||
** A new macOS package.
|
||||
** Enhancements to the tree select dialogs for selecting games, cardsets, and table tiles.
|
||||
** Further additions/improvements to the documentation.
|
||||
** Many bugfixes and cleanups.
|
||||
* _11 July, 2021:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.12.0/[PySolFC
|
||||
v2.12.0]. New in this release:
|
||||
** 40 new games!
|
||||
** Support for using higher resolution cardsets. The high resolution "Neo"
|
||||
cardset has been added to the Windows Installer package and is available in
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.1PRE/[a preview release of
|
||||
PySolFC-Cardsets 2.1].
|
||||
** Improved organization and categorization of the games list.
|
||||
** New display options - added option to center the game layout in the window.
|
||||
** New audio options - can now disable music without disabling sound effects.
|
||||
** Improved documentation - added rules to a large number of games that were missing them.
|
||||
** Bugfixes and cleanup.
|
||||
* _22 June, 2020:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.10.0/[PySolFC
|
||||
v2.10.0]. New in this release:
|
||||
** Fix moving cards in the Scorpion Tail game.
|
||||
** Make use of https://pypi.org/project/pysol-cards/[the pysol-cards PyPI module]
|
||||
** One can optionally load the Freecell Solver and the Black Hole Solver using their DLLs.
|
||||
** Test Windows Version in the installer: https://github.com/shlomif/PySolFC/issues/161
|
||||
** Pause when showing statistics: https://github.com/shlomif/PySolFC/pull/162
|
||||
* _5 March, 2020:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.8.0/[PySolFC
|
||||
v2.8.0]. New in this release:
|
||||
** Better kivy/Android support
|
||||
** Using ttk and configobj as shipped in the python dist (instead of forked versions)
|
||||
** Requiring https://pypi.org/project/attrs/[attrs] and https://pypi.org/project/pysol-cards/[pysol-cards] from PyPI
|
||||
** Added tests, bug fixes and refactorings.
|
||||
** Add the +-g+ and +--deal+ command line options.
|
||||
* _25 April, 2019:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.4/[PySolFC
|
||||
v2.6.4]. New in this release:
|
||||
** A https://github.com/shlomif/PySolFC/issues/107[new logo] thanks to @ghostofiht.
|
||||
** Fix for https://github.com/shlomif/PySolFC/issues/110[Freezes] (pygame upgrade)
|
||||
** Fixed https://github.com/shlomif/PySolFC/issues/111[Three Peaks scoring].
|
||||
* _7 April, 2019:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.3/[PySolFC
|
||||
v2.6.3]. New in this release:
|
||||
** Compatibility with Pillow 6.x - https://github.com/shlomif/PySolFC/issues/108
|
||||
** Restore the "Save games geometry" feature - https://github.com/shlomif/PySolFC/issues/84
|
||||
** Added a NEWS.asciidoc file.
|
||||
* _4 March, 2019:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.2/[PySolFC
|
||||
v2.6.2]. New in this release:
|
||||
** Fixes for the Windows and macOS packages.
|
||||
** Forbid illegal moves in Spider and some other variants.
|
||||
* _14 February, 2019:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.6.0/[PySolFC
|
||||
v2.6.0]. New in this release:
|
||||
** Support for solving
|
||||
https://en.wikipedia.org/wiki/Golf_(patience)[Golf] using
|
||||
https://github.com/shlomif/black-hole-solitaire[a solver]
|
||||
** An untested macOS package (we need testers)
|
||||
** A https://sourceforge.net/p/pysolfc/bugs/31/[bug] fix
|
||||
** Ability to run the test suite without python 2.x and/or pygtk
|
||||
** Code cleanups.
|
||||
* _23 June, 2018:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.4.0/[PySolFC
|
||||
v2.4.0]. New in this release:
|
||||
** The Windows installer now includes the revitalised PySol-music
|
||||
package. For more info, see
|
||||
https://github.com/shlomif/PySolFC/issues/82[this bug].
|
||||
** Many improvements to the test suite and the board import
|
||||
functionality.
|
||||
** Some bug fixes.
|
||||
* _16 April, 2018:_ There is a new stable release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.2.0/[PySolFC
|
||||
v2.2.0]. New in this release:
|
||||
** The Microsoft Windows binary installer now contains and supports the
|
||||
solver for Freecell and other games.
|
||||
** Many bug fixes.
|
||||
* _31 March, 2018:_ There is a new beta release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
|
||||
v2.1.4]. New in this release:
|
||||
** We now provide a Microsoft Windows binary installer again, thanks to
|
||||
the great work of https://github.com/Programator2[Roderik Ploszek]. Note
|
||||
that the solvers (for FreeCell/etc.) are not installed as part of it
|
||||
yet, but they are available separately.
|
||||
** https://github.com/shlomif/pysol-sound-server[pysol-sound-server] was
|
||||
updated to support Python 3.x.
|
||||
** Fixes for the board export / solver input, and for redealing upon
|
||||
restart of the "ms*" deals.
|
||||
** Various cleanups.
|
||||
* _5 March, 2018:_ There is a new beta source release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
|
||||
v2.1.3]. New in this release:
|
||||
** Support for the https://kivy.org/[kivy] toolkit for running under
|
||||
Android-based devices (currently python 2.7-only)
|
||||
** Fixed the help system and removed the need for the sgmllib module.
|
||||
** Other fixes and cleanups.
|
||||
** Currently there is no Microsoft Windows binary package. Help or
|
||||
insights will be appreciated.
|
||||
* _19 November, 2017:_ There is a new beta source release
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.1/[PySolFC
|
||||
v2.1.0], the first one in almost 8 years. New in this release:
|
||||
** The code is now compatible with both Python 2.7.x and Python 3.x
|
||||
** One can deal all
|
||||
https://fc-solve.shlomifish.org/faq.html#what_are_ms_deals[MS
|
||||
FreeCell/FC-pro deals] by specifying e.g: "ms100000" as the seed.
|
||||
** Support for Black Hole and All in a Row solver was added.
|
||||
** Test suite and CI were added to the repository.
|
||||
** The code now passes flake8 validation.
|
||||
** Some improvements to the solver dialog.
|
||||
* _15 November, 2017:_ Development of the Python sources has recently
|
||||
resumed using a https://github.com/shlomif/PySolFC[a GitHub project] and
|
||||
other resources and Shlomi Fish (@shlomif) has received an admin status
|
||||
on the SourceForge project and this site. A new source release which
|
||||
adds compatibility with Python version 3.x and some other improvements
|
||||
is expected soon.
|
||||
* _04 December, 2009:_
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-2.0/[PySolFC
|
||||
v.2.0] (1061 games) and
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-2.0/[PySolFC-Cardsets
|
||||
v.2.0] (153 cardsets)
|
||||
** The license was changed to the GPLv3 or newer.
|
||||
** 13 new games.
|
||||
** Migration to new
|
||||
https://code.google.com/archive/p/python-ttk/[python-ttk] module.
|
||||
** Improved the look of the deck (required
|
||||
http://effbot.org/downloads/#pil[python-imaging v.1.1.7]).
|
||||
** Fixed Hanafuda games
|
||||
(https://sourceforge.net/p/pysolfc/bugs/9/[ticket]).
|
||||
** New config-file option: sound_sample_buffer_size
|
||||
(https://sourceforge.net/p/pysolfc/bugs/10/[ticket]).
|
||||
** Portable version for windows
|
||||
(https://sourceforge.net/p/pysolfc/patches/3/[ticket]).
|
||||
** Many other bugfixes.
|
||||
* _06 September, 2007:_
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-1.1/[PySolFC
|
||||
v.1.1] (1048 games)
|
||||
** 48 new games (one game was removed)
|
||||
** Solitaire Wizard
|
||||
** improved Mahjongg games
|
||||
** human readable config file (options.cfg)
|
||||
** stack becomes compact when a card goes off screen
|
||||
** Clearlooks theme for Tile widget set
|
||||
** a huge number of other improvements
|
||||
* _30 August, 2007:_
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC-Cardsets/PySolFC-Cardsets-1.1/[PySolFC-Cardsets
|
||||
v.1.1] (152 cardsets)
|
||||
* _21 February, 2007:_
|
||||
https://sourceforge.net/projects/pysolfc/files/PySolFC/PySolFC-1.0/[PySolFC
|
||||
v.1.0] (1001 games)
|
|
@ -1,7 +1,28 @@
|
|||
|
||||
Prerequisites (needs root):
|
||||
History:
|
||||
--------
|
||||
|
||||
On a 'freshly installed' Ubuntu 16.04 (32bit), the following
|
||||
The Android project was created in 2016 as a separate project (on Bitbucket)
|
||||
forked from a long inactive Sourceforge repository by lufebe16. The first
|
||||
version (as 0.8) was released with fdroid in March 2017.
|
||||
|
||||
In 2016, shlomif started working diligently on the official project.
|
||||
Following his request to combine these two projects, the Android version
|
||||
was merged into his repo (now on github) in February 2018. The
|
||||
first joint version (as 2.2.0) was released in April 2018.
|
||||
|
||||
|
||||
Build Prerequisites (needs root):
|
||||
---------------------------------
|
||||
|
||||
You need a linux workstation (either native or virtual). It needs
|
||||
x86 hardware (either intel or amd). No graphic desktop is needed,
|
||||
cmdline only is sufficient.
|
||||
|
||||
On freshly installed systems you will need to add about the
|
||||
following packages:
|
||||
|
||||
On a 'freshly installed' Ubuntu or Debian, the following
|
||||
additional packages had to be installed:
|
||||
|
||||
- python-setuptools
|
||||
|
@ -13,10 +34,6 @@ Prerequisites (needs root):
|
|||
- virtualenv (python-virtualenv)
|
||||
- zip,unzip
|
||||
|
||||
On a freshly installed debian stretch/xfce:
|
||||
|
||||
-> consult script files in directory android/debian.
|
||||
|
||||
On a 'simple' gentoo installation the following packages had to be
|
||||
installed in addition:
|
||||
|
||||
|
@ -31,10 +48,7 @@ Prerequisites (needs root):
|
|||
- dev-vcs/git
|
||||
- dev-java/ant
|
||||
|
||||
and python modules:
|
||||
|
||||
- python3 -m pip install requests --user.
|
||||
- python3 -m pip install clint --user.
|
||||
For detailed instructions consult buildozer/build-instruction.txt.
|
||||
|
||||
NOTES:
|
||||
1) This information is supplied to give you a hint, when running into
|
||||
|
@ -42,48 +56,28 @@ Prerequisites (needs root):
|
|||
2) All builds need an working (fairly fast) internet connection and
|
||||
6 GB of free disk space.
|
||||
|
||||
|
||||
Build with 'python-for-android' (as user):
|
||||
|
||||
go to the android directory, then
|
||||
|
||||
$ ./mkp4a.init [<sdkdir>] [<ndkdir>] # prepare sdk and p4a installation
|
||||
$ ./mkkeystore # if you want to build a release version.
|
||||
|
||||
$ ./mkp4a.debug # build debug apk
|
||||
$ ./mkp4a.release <passwd1> [<passwd2>] # build release apk
|
||||
$ ./mkp4a.unsigned # build an unsigned release apk
|
||||
|
||||
The build system will download all required additional
|
||||
packages (such as the android sdk and more). Do the first build will
|
||||
take a while. All in all you will need up to 6 GB of free disk space.
|
||||
|
||||
If you have Android Studio installed, you may call mkp4a.init
|
||||
with optional parameter <sdk-dir> and ev. in addition as
|
||||
second parameter <ndk-dir> (if not default) to prevent them
|
||||
from downloading a new. (Note that currently android ndk version
|
||||
should be less 14, otherwise the build will fail).
|
||||
|
||||
Resulted apks will appear in directory android.
|
||||
|
||||
Cardsets:
|
||||
---------
|
||||
|
||||
Cardsets should be installed in ${HOME}/.PySolFC/cardsets/. On an
|
||||
android device this is equivalent to /sdcard/.PySolFC/cardsets/.
|
||||
Cardsets must use the bmp image format. Use scripts/cardsetsgiftobmp
|
||||
(on a linux system) to convert them, before copying to the device.
|
||||
The Apk includes a minimal set of cards for playing.
|
||||
|
||||
Possible known build issues:
|
||||
Additional user supplied data:
|
||||
------------------------------
|
||||
|
||||
2) for android ndk: needs a Version <=13 (because needs ant support).
|
||||
NOTE:
|
||||
To be able to add additional resources to your app, you need to
|
||||
enable storage access in the android settings for the app. Go to
|
||||
Settings/Apps/PySolFC/Permissions.
|
||||
|
||||
3) python-for-android, on downloading recipes:
|
||||
Resources are stored in ~/.PySolFC/. On an android device this is
|
||||
equivalent to /sdcard/.PySolFC/.
|
||||
|
||||
('CA CERTIFICATE VALIDATION FAILED' when downloading python.2.7 or
|
||||
some 'recipes')
|
||||
Additional cardsets can be installed in ~/.PySolFC/cardsets/.
|
||||
Important: Cardsets must use the 'png' image format. Use
|
||||
scripts/cardconv (on a gnu/linux system) to convert, before copying
|
||||
them to the device.
|
||||
|
||||
Solution:
|
||||
Try the download address with firefox. if it works, view the
|
||||
site certificate and download (export) it from the browser.
|
||||
Copy the resulting *.crt to /usr/local/ca-certificates and
|
||||
run update-ca-certificates.
|
||||
Byond cardsets you may also wish to add your own backgrounds. You can
|
||||
add them to ~/.PySolFC/data/tiles (patterns) and to
|
||||
~/.PySolFC/data/tiles/save-aspect/ (images). 'png' and 'jpg' image
|
||||
formats are supported.
|
||||
|
|
30
README.kivy
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, 'cardsetsgiftobmp' , has been added
|
||||
to the scripts directory (it requires Bash and ImageMagick).
|
||||
Additional cardsets are available from the SourceForge project. To use
|
||||
them with kivy, make sure they to also convert them to the png format if
|
||||
needed.
|
||||
|
||||
For all GIF images in the directories data/images and data/tiles ,
|
||||
corresponding images in the PNG format have been added too.
|
||||
|
||||
LB170321.
|
||||
LB230126.
|
||||
|
|
109
README.md
109
README.md
|
@ -1,42 +1,54 @@
|
|||
<p align="center"><img src="html-src/images/high_res/logo_horizontal.png" alt="PySol FC logo" height="180px"></p>
|
||||
|
||||
# PySol Fan Club edition
|
||||
|
||||
This is an open source and portable (Windows, Linux and Mac OS X) collection
|
||||
of Card Solitaire/Patience games written in Python. Its homepage is
|
||||
http://pysolfc.sourceforge.net/ .
|
||||
https://pysolfc.sourceforge.io/.
|
||||
|
||||
The maintenance branch of PySol FC on GitHub by [Shlomi
|
||||
Fish](http://www.shlomifish.org/) and by some other
|
||||
Fish](https://www.shlomifish.org/) and by some other
|
||||
people, has gained official status, ported the code to Python 3,
|
||||
and implemented some other enhancements.
|
||||
|
||||
- [](https://travis-ci.org/shlomif/PySolFC)
|
||||
- [](https://github.com/shlomif/PySolFC/actions/workflows/ci.yml)
|
||||
[](https://ci.appveyor.com/project/shlomif/pysolfc)
|
||||
|
||||
## Call for Contributors
|
||||
|
||||
[Shlomi Fish](https://github.com/shlomif), who adopted PySol FC, and maintained
|
||||
it for several years, has stepped down as its primary maintainer
|
||||
due to the fact he no longer plays PySol, or other computer card games too
|
||||
much and that it has been a time sink for him. (Also see
|
||||
[this Twitter discussion](https://twitter.com/bagder/status/1336793880709238786)
|
||||
). We are looking for other contributors and there are still
|
||||
[some large-scale features](https://github.com/shlomif/PySolFC/issues) that
|
||||
can be implemented.
|
||||
|
||||
# Screenshots
|
||||
|
||||

|
||||

|
||||
|
||||
## Requirements.
|
||||
|
||||
- Python (2.7 or 3.x)
|
||||
- Python (3.7 or later)
|
||||
- Tkinter (Tcl/Tk 8.4 or later)
|
||||
|
||||
- For sound support (optional)
|
||||
- PySol-Sound-Server fork: https://github.com/shlomif/pysol-sound-server (mp3, wav, tracker music)
|
||||
- (or: ) PyGame: http://www.pygame.org/ (mp3, ogg, wav, midi, tracker music)
|
||||
- (or: ) PyGame: https://www.pygame.org/ (mp3, ogg, wav, midi, tracker music)
|
||||
|
||||
- Other packages (optional):
|
||||
- Tile (ttk): http://tktable.sourceforge.net/tile/ (0.8.0 or later)
|
||||
- PIL (Python Imaging Library): http://www.pythonware.com/products/pil
|
||||
- Freecell Solver: http://fc-solve.shlomifish.org/ .
|
||||
- [Black Hole Solitaire Solver](http://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/)
|
||||
- Pillow (Python Imaging Library): https://pillow.readthedocs.io/
|
||||
- TTKThemes: https://ttkthemes.readthedocs.io/
|
||||
- Freecell Solver: https://fc-solve.shlomifish.org/
|
||||
- [Black Hole Solitaire Solver](https://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/)
|
||||
|
||||
## Installation.
|
||||
|
||||
We provide an [installer for Windows](https://sourceforge.net/projects/pysolfc/files/PySolFC/)
|
||||
as well as an Android package on F-droid.
|
||||
|
||||
For installation from source, see: http://www.python.org/doc/current/inst/
|
||||
(requires Windows XP SP3 or higher) as well as an
|
||||
[Android package on F-droid](https://f-droid.org/packages/org.lufebe16.pysolfc/).
|
||||
|
||||
### Running from source without installation.
|
||||
|
||||
|
@ -52,6 +64,12 @@ After following steps similar to these (on
|
|||
|
||||
#### Step 1 - install the dependencies
|
||||
|
||||
On Fedora you can do:
|
||||
|
||||
```
|
||||
sudo dnf builddep PySolFC
|
||||
```
|
||||
|
||||
On Mageia you can do:
|
||||
|
||||
```
|
||||
|
@ -61,11 +79,17 @@ sudo urpmi git make pygtk2 pygtk2.0-libglade gnome-python-canvas tkinter
|
|||
On Debian / Ubuntu / etc. you can do:
|
||||
|
||||
```
|
||||
sudo apt-get install -y ack-grep cpanminus libperl-dev make perl python-glade2 python-gnome2 python-gnome2-dev python-gtk2 python-setuptools python-tk
|
||||
sudo apt-get install cpanminus make perl python3-setuptools python3-tk
|
||||
```
|
||||
|
||||
#### Step 2 - build PySol.
|
||||
|
||||
You can try running:
|
||||
|
||||
```
|
||||
python3 scripts/linux-install.py
|
||||
```
|
||||
|
||||
```
|
||||
git clone https://github.com/shlomif/PySolFC.git
|
||||
cd PySolFC
|
||||
|
@ -73,15 +97,15 @@ cd PySolFC
|
|||
gmake test
|
||||
gmake rules
|
||||
ln -s data/images images
|
||||
tar -xvf PySolFC-Cardsets-2.0.tar.bz2 # Need to be downloaded from sourceforge
|
||||
tar -xvf PySolFC-Cardsets-3.0.tar.bz2 # Needs to be downloaded from sourceforge
|
||||
mkdir -p ~/.PySolFC
|
||||
rmdir ~/.PySolFC/cardsets
|
||||
ln -s "`pwd`/PySolFC-Cardsets-2.0" ~/.PySolFC/cardsets
|
||||
ln -s "`pwd`/PySolFC-Cardsets-3.0" ~/.PySolFC/cardsets
|
||||
python pysol.py
|
||||
```
|
||||
|
||||
<b>Note!</b> If you are using a Debian derivative (e.g: Debian, Ubuntu, or
|
||||
Linu Mint) and you are getting an error of "No cardsets were found !!! Main
|
||||
Linux Mint) and you are getting an error of "No cardsets were found !!! Main
|
||||
data directory is `[insert dir here]` Please check your PySol installation.",
|
||||
then you likely installed the cardsets package which has removed some files
|
||||
that are needed by pysol from source (without the debian modifications).
|
||||
|
@ -94,20 +118,24 @@ per the instructions above.
|
|||
At the moment, this only works on POSIX (Linux, FreeBSD and similar) systems.
|
||||
Windows and Mac users - you'll need to chip in with a script for your system.
|
||||
|
||||
#### 1 - Install build prerequisites: six and random2
|
||||
#### 1 - Install build prerequisite: pysol-cards
|
||||
|
||||
This is kind of stupid and maybe it can be fixed in the future, but for now:
|
||||
|
||||
```
|
||||
pip install six
|
||||
pip install random2
|
||||
pip install pysol-cards
|
||||
```
|
||||
|
||||
You may want to use your OS distribution package system instead, for example:
|
||||
|
||||
```
|
||||
sudo apt-get install python-six
|
||||
sudo apt-get install python-random2
|
||||
sudo apt-get install python3-pysol-cards
|
||||
```
|
||||
|
||||
For Pillow compilation, libjpeg headers and libraries need to be available:
|
||||
|
||||
```
|
||||
sudo apt-get install libjpeg-dev
|
||||
```
|
||||
|
||||
#### 2 - Clone the source from version control
|
||||
|
@ -120,10 +148,10 @@ cd PySolFC
|
|||
#### 3 - Create your virtual environment.
|
||||
|
||||
```
|
||||
PKGDIR=/usr/local/packages/PySolFC # or whatever
|
||||
export PKGDIR
|
||||
mkdir -p "$PKGDIR"
|
||||
( cd "$PKGDIR" && python -m venv ./env )
|
||||
PKGTREE=/usr/local/packages/PySolFC # or whatever
|
||||
export PKGTREE
|
||||
mkdir -p "$PKGTREE"
|
||||
( cd "$PKGTREE" && python -m venv ./env )
|
||||
```
|
||||
|
||||
#### 4 - Run the install script
|
||||
|
@ -137,28 +165,38 @@ mkdir -p "$PKGDIR"
|
|||
#### 6 - Enjoy playing
|
||||
|
||||
```
|
||||
"$PKGDIR"/env/bin/pysol.py
|
||||
"$PKGTREE"/env/bin/pysol.py
|
||||
```
|
||||
|
||||
## Alternate toolkit.
|
||||
|
||||
- Python2 (2.7 or later)
|
||||
- Kivy (10.0 or later)
|
||||
### Alternate toolkit.
|
||||
|
||||
- Kivy
|
||||
- Features:
|
||||
- Sound support integrated.
|
||||
- Android apk build support.
|
||||
|
||||
- Running from source without installation:
|
||||
|
||||
```
|
||||
python2 pysol.py --kivy
|
||||
python pysol.py --kivy
|
||||
```
|
||||
|
||||
### Android App
|
||||
|
||||
On the basis of Kivy an Android App is also available. You may build
|
||||
your own using appropriate build instructions in README.android and
|
||||
in Directory buildozer.
|
||||
|
||||
Some versions will also be published on F-droid.
|
||||
|
||||
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png"
|
||||
alt="Get it on F-Droid"
|
||||
height="80">](https://f-droid.org/packages/org.lufebe16.pysolfc/)
|
||||
|
||||
|
||||
### Configuring Freecell Solver
|
||||
|
||||
If you want to use the solver, you should configure freecell-solver
|
||||
( http://fc-solve.shlomifish.org/ ) by passing the following options
|
||||
( https://fc-solve.shlomifish.org/ ) by passing the following options
|
||||
to its CMake-based build-system:
|
||||
`-DMAX_NUM_FREECELLS=8 -DMAX_NUM_STACKS=20 -DMAX_NUM_INITIAL_CARDS_IN_A_STACK=60`.
|
||||
|
||||
|
@ -181,6 +219,7 @@ to its CMake-based build-system:
|
|||
- [PySol-Sound-Server fork](https://github.com/shlomif/pysol-sound-server)
|
||||
- [Sources for the PySolFC web site](https://github.com/shlomif/pysolfc-website)
|
||||
- [PySolFC Announcements Drafts](https://github.com/shlomif/pysolfc-announcements)
|
||||
- [PySolFC-Cardsets tarballs sources repo](https://github.com/shlomif/PySolFC-Cardsets)
|
||||
- [Extra mahjongg cardsets for PySolFC - originally for flowersol](https://github.com/shlomif/PySol-Extra-Mahjongg-Cardsets)
|
||||
- [The old "pysol-music" distribution](https://github.com/shlomif/pysol-music)
|
||||
|
||||
|
@ -207,7 +246,7 @@ To facilitate coordination about contributing to PySol, please join us for a
|
|||
real time Internet chat on
|
||||
the <a href="irc://irc.freenode.net/##pysol">##pysol</a> chat room on
|
||||
[Freenode](http://freenode.net/) (note the double
|
||||
octothorpe/hash-sign/pound-sign) . We may set up
|
||||
octothorpe/hash-sign/pound-sign). We may set up
|
||||
chat rooms on different services in the future.
|
||||
|
||||
In addition, we set up a
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1,001 KiB After Width: | Height: | Size: 972 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.1 MiB |
Binary file not shown.
Before Width: | Height: | Size: 660 KiB After Width: | Height: | Size: 642 KiB |
|
@ -1,19 +0,0 @@
|
|||
Actions to take upon a freshly installed Debian stretch/xfce (virtualbox).
|
||||
|
||||
Do something like:
|
||||
|
||||
user$ su
|
||||
- enter root password.
|
||||
|
||||
root$ ./apt-install.sh
|
||||
- .... some output.
|
||||
|
||||
root$ exit
|
||||
|
||||
user$ ./pip-install.sh
|
||||
- .....some output.
|
||||
|
||||
Now all required packages are installed to proceed with the
|
||||
android build.
|
||||
|
||||
LB170709.
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/bash
|
||||
# als root ausführen!
|
||||
|
||||
apt-get install -y mercurial git default-jdk
|
||||
apt-get install -y cython cython3
|
||||
apt-get install -y python3-pip
|
||||
apt-get install -y python3-yaml
|
||||
apt-get install -y virtualenv
|
||||
apt-get install -y pkg-config
|
||||
apt-get install -y automake autoconf libtool
|
||||
apt-get install -y zlib1g-dev
|
||||
apt-get install -y libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# als user installieren !
|
||||
|
||||
python3 -m pip install --user pyasn1
|
||||
python3 -m pip install --user pyasn1_modules
|
||||
python3 -m pip install --user requests
|
||||
python3 -m pip install --user clint
|
|
@ -1,240 +0,0 @@
|
|||
#! /usr/bin/env python3
|
||||
# -*- coding: iso-8859-1 -*-
|
||||
|
||||
import sys
|
||||
import os
|
||||
import requests
|
||||
import logging
|
||||
import hashlib
|
||||
import glob
|
||||
from zipfile import ZipFile, ZipInfo
|
||||
from clint.textui import progress
|
||||
|
||||
cachefiles = [
|
||||
('https://dl.google.com/android/repository/platform-tools-latest-linux.zip',
|
||||
'',
|
||||
'platform-tools'),
|
||||
('https://dl.google.com/android/repository/tools_r25.2.5-linux.zip',
|
||||
'577516819c8b5fae680f049d39014ff1ba4af870b687cab10595783e6f22d33e',
|
||||
'tools'),
|
||||
('https://dl.google.com/android/repository/android-19_r04.zip',
|
||||
'5efc3a3a682c1d49128daddb6716c433edf16e63349f32959b6207524ac04039',
|
||||
'platform'),
|
||||
('https://dl.google.com/android/repository/build-tools_r26-linux.zip',
|
||||
'7422682f92fb471d4aad4c053c9982a9a623377f9d5e4de7a73cd44ebf2f3c61',
|
||||
'build-tools'),
|
||||
('https://dl.google.com/'
|
||||
'android/repository/android-ndk-r12b-linux-x86_64.zip',
|
||||
'eafae2d614e5475a3bcfd7c5f201db5b963cc1290ee3e8ae791ff0c66757781e',
|
||||
'ndk'),
|
||||
]
|
||||
|
||||
# https://stackoverflow.com/questions/39296101:
|
||||
|
||||
|
||||
class MyZipFile(ZipFile):
|
||||
|
||||
def extract(self, member, path=None, pwd=None):
|
||||
if not isinstance(member, ZipInfo):
|
||||
member = self.getinfo(member)
|
||||
|
||||
if path is None:
|
||||
path = os.getcwd()
|
||||
|
||||
ret_val = self._extract_member(member, path, pwd)
|
||||
attr = member.external_attr >> 16
|
||||
os.chmod(ret_val, attr)
|
||||
return ret_val
|
||||
|
||||
# Reused from fdroidserver:
|
||||
|
||||
|
||||
def sha256_for_file(path):
|
||||
with open(path, 'rb') as f:
|
||||
s = hashlib.sha256()
|
||||
while True:
|
||||
data = f.read(4096)
|
||||
if not data:
|
||||
break
|
||||
s.update(data)
|
||||
return s.hexdigest()
|
||||
|
||||
# Adapted from fdroidserver:
|
||||
|
||||
|
||||
def update_cache(cachedir, cachefiles):
|
||||
for srcurl, shasum, typ in cachefiles:
|
||||
filename = os.path.basename(srcurl)
|
||||
local_filename = os.path.join(cachedir, filename)
|
||||
|
||||
if os.path.exists(local_filename):
|
||||
local_length = os.path.getsize(local_filename)
|
||||
else:
|
||||
|
||||
local_length = -1
|
||||
|
||||
if (typ == 'ndk') and (ndkloc is not None):
|
||||
continue
|
||||
elif (typ != 'tools') and (sdkloc is not None):
|
||||
continue
|
||||
|
||||
resume_header = {}
|
||||
download = True
|
||||
|
||||
try:
|
||||
r = requests.head(srcurl, allow_redirects=True, timeout=60)
|
||||
if r.status_code == 200:
|
||||
content_length = int(r.headers.get('content-length'))
|
||||
else:
|
||||
content_length = local_length # skip the download
|
||||
except requests.exceptions.RequestException as e:
|
||||
content_length = local_length # skip the download
|
||||
logger.warn('%s', e)
|
||||
|
||||
if local_length == content_length:
|
||||
download = False
|
||||
elif local_length > content_length:
|
||||
logger.info('deleting corrupt file from cache: %s',
|
||||
local_filename)
|
||||
os.remove(local_filename)
|
||||
logger.info("Downloading %s to cache", filename)
|
||||
elif local_length > -1 and local_length < content_length:
|
||||
logger.info("Resuming download of %s", local_filename)
|
||||
resume_header = {
|
||||
'Range': 'bytes=%d-%d' % (local_length, content_length)}
|
||||
else:
|
||||
logger.info("Downloading %s to cache", filename)
|
||||
|
||||
if download:
|
||||
r = requests.get(srcurl, headers=resume_header,
|
||||
stream=True, verify=False, allow_redirects=True)
|
||||
content_length = int(r.headers.get('content-length'))
|
||||
with open(local_filename, 'ab') as f:
|
||||
for chunk in progress.bar(
|
||||
r.iter_content(chunk_size=65536),
|
||||
expected_size=(content_length / 65536) + 1):
|
||||
if chunk: # filter out keep-alive new chunks
|
||||
f.write(chunk)
|
||||
if not shasum == '':
|
||||
v = sha256_for_file(local_filename)
|
||||
if v == shasum:
|
||||
logger.info("Shasum verified for %s", local_filename)
|
||||
else:
|
||||
logger.critical(
|
||||
"Invalid shasum of '%s' detected for %s", v, local_filename)
|
||||
os.remove(local_filename)
|
||||
sys.exit(1)
|
||||
|
||||
# Build the sdk from zips.
|
||||
|
||||
|
||||
def build_sdk(sdkdir, cachedir, cachfiles):
|
||||
for srcurl, shasum, typ in cachefiles:
|
||||
filename = os.path.basename(srcurl)
|
||||
local_filename = os.path.join(cachedir, filename)
|
||||
|
||||
if typ == 'tools':
|
||||
if os.path.exists(local_filename):
|
||||
print('Extract: %s' % local_filename)
|
||||
zf = MyZipFile(local_filename)
|
||||
zf.extractall(sdkdir)
|
||||
elif typ == 'platform-tools':
|
||||
if (sdkloc is None) and (os.path.exists(local_filename)):
|
||||
print('Extract: %s' % local_filename)
|
||||
zf = MyZipFile(local_filename)
|
||||
zf.extractall(sdkdir)
|
||||
else:
|
||||
print('Link to: %s' % sdkloc)
|
||||
os.symlink(sdkloc + '/platform-tools',
|
||||
sdkdir + '/platform-tools')
|
||||
elif typ == 'platform':
|
||||
if (sdkloc is None) and (os.path.exists(local_filename)):
|
||||
print('Extract: %s' % local_filename)
|
||||
zf = MyZipFile(local_filename)
|
||||
zf.extractall(sdkdir + '/platforms')
|
||||
else:
|
||||
print('Link to: %s' % sdkloc)
|
||||
os.symlink(sdkloc + '/platforms', sdkdir + '/platforms')
|
||||
elif typ == 'build-tools':
|
||||
if (sdkloc is None) and (os.path.exists(local_filename)):
|
||||
print('Extract: %s' % local_filename)
|
||||
zf = MyZipFile(local_filename)
|
||||
zf.extractall(sdkdir + '/build-tools')
|
||||
else:
|
||||
print('Link to: %s' % sdkloc)
|
||||
os.symlink(sdkloc + '/build-tools', sdkdir + '/build-tools')
|
||||
elif typ == 'ndk':
|
||||
if ndkloc is None:
|
||||
print('Extract: %s' % local_filename)
|
||||
zf = MyZipFile(local_filename)
|
||||
zf.extractall(sdkdir)
|
||||
lst = glob.glob(sdkdir + '/*-ndk-*')
|
||||
print(lst)
|
||||
os.rename(lst[0], sdkdir + '/ndk-bundle')
|
||||
else:
|
||||
print('Link to: %s' % ndkloc)
|
||||
os.symlink(ndkloc, sdkdir + '/ndk-bundle')
|
||||
|
||||
|
||||
logger = logging.getLogger('prepare-fdroid-build')
|
||||
logging.basicConfig(format='%(message)s', level=logging.INFO)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
# command line arguments
|
||||
|
||||
sdkloc = None
|
||||
ndkloc = None
|
||||
if len(sys.argv) > 1:
|
||||
sdkloc = sys.argv[1]
|
||||
if (len(sdkloc) > 0) and (sdkloc[-1] == '/'):
|
||||
sdkloc = sdkloc[:-1]
|
||||
if not os.path.isdir(sdkloc):
|
||||
sdkloc = None
|
||||
|
||||
if len(sys.argv) > 2:
|
||||
ndkloc = sys.argv[2]
|
||||
if (len(ndkloc) > 0) and (ndkloc[-1] == '/'):
|
||||
ndkloc = ndkloc[:-1]
|
||||
if not os.path.isdir(ndkloc):
|
||||
ndkloc = None
|
||||
|
||||
fdroidmode = None
|
||||
if len(sys.argv) > 3:
|
||||
fdroidmode = sys.argv[3]
|
||||
if (len(fdroidmode) > 0):
|
||||
fdroidmode = '1'
|
||||
|
||||
if sdkloc == "":
|
||||
sdkloc = None
|
||||
if ndkloc == "":
|
||||
ndkloc = None
|
||||
|
||||
logger.info('sdkloc = %s' % sdkloc)
|
||||
logger.info('ndkloc = %s' % ndkloc)
|
||||
|
||||
# sdkloc and ndkloc already set by the user and fdroidmode:
|
||||
# nothing to do.
|
||||
|
||||
if (sdkloc is not None) and (ndkloc is not None) and (fdroidmode is not None):
|
||||
sys.exit(0)
|
||||
|
||||
# cache dir (using the same as in fdroidserver/buildserver)
|
||||
cachedir = os.path.join(os.getenv('HOME'), '.cache', 'fdroidserver')
|
||||
logger.info('cachedir name is: %s', cachedir)
|
||||
|
||||
if not os.path.exists(cachedir):
|
||||
os.makedirs(cachedir, 0o755)
|
||||
logger.info('created cachedir %s', cachedir)
|
||||
|
||||
# sdkdir location
|
||||
sdkdir = os.path.join(os.getenv('HOME'), '.cache', 'sdk-for-p4a')
|
||||
logger.info('sdkdir name is: %s', sdkdir)
|
||||
|
||||
if not os.path.exists(sdkdir):
|
||||
os.makedirs(sdkdir, 0o755)
|
||||
logger.debug('created sdkdir %s', sdkdir)
|
||||
|
||||
update_cache(cachedir, cachefiles)
|
||||
build_sdk(sdkdir, cachedir, cachefiles)
|
||||
else:
|
||||
logger.info('sdkdir %s already exists', sdkdir)
|
|
@ -1,46 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo '### prepare cardsets'
|
||||
|
||||
if [ ! -f ./PySolFC-Cardsets-2.0.tar.bz2 ]
|
||||
then
|
||||
echo '### downloading cardets'
|
||||
# wget http://downloads.sourceforge.net/pysolfc/PySolFC-Cardsets-2.0.tar.bz2
|
||||
wget https://netix.dl.sourceforge.net/project/pysolfc/PySolFC-Cardsets/PySolFC-Cardsets-2.0/PySolFC-Cardsets-2.0.tar.bz2
|
||||
fi
|
||||
|
||||
if [ -f ./PySolFC-Cardsets-2.0.tar.bz2 ]
|
||||
then
|
||||
if [ ! -d ./PySolFC-Cardsets-2.0 ]
|
||||
then
|
||||
echo '### extracting selected cardets'
|
||||
tar -xjvf PySolFC-Cardsets-2.0.tar.bz2 \
|
||||
PySolFC-Cardsets-2.0/cardset-crystal-mahjongg \
|
||||
PySolFC-Cardsets-2.0/cardset-dashavatara-ganjifa \
|
||||
PySolFC-Cardsets-2.0/cardset-dondorf \
|
||||
PySolFC-Cardsets-2.0/cardset-hexadeck \
|
||||
PySolFC-Cardsets-2.0/cardset-kintengu \
|
||||
PySolFC-Cardsets-2.0/cardset-matrix \
|
||||
PySolFC-Cardsets-2.0/cardset-mughal-ganjifa \
|
||||
PySolFC-Cardsets-2.0/cardset-oxymoron \
|
||||
PySolFC-Cardsets-2.0/cardset-standard \
|
||||
PySolFC-Cardsets-2.0/cardset-vienna-2k \
|
||||
PySolFC-Cardsets-2.0/cardset-greywyvern
|
||||
fi
|
||||
|
||||
if [ -d ./PySolFC-Cardsets-2.0 ]
|
||||
then
|
||||
echo '### processing cardets'
|
||||
cd PySolFC-Cardsets-2.0
|
||||
../../scripts/cardsetsgiftobmp
|
||||
for i in cardset-*-bmp
|
||||
do
|
||||
rm -rf `basename $i -bmp`
|
||||
done
|
||||
cd ..
|
||||
fi
|
||||
else
|
||||
echo '### error downloading cardsets'
|
||||
fi
|
||||
|
||||
echo '### end cardsets'
|
|
@ -1,17 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# memo:
|
||||
# keytool -genkey -v -keystore my-release-keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 12000
|
||||
|
||||
if [ ! -d bin ]
|
||||
then
|
||||
echo "mkdir bin"
|
||||
mkdir bin
|
||||
fi
|
||||
|
||||
if [ -f ./bin/keystore ]
|
||||
then
|
||||
echo "keystore is already defined"
|
||||
else
|
||||
keytool -genkey -v -keystore ./bin/keystore -alias python -keyalg RSA -keysize 2048 -validity 12000
|
||||
fi
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
rm -rf tmp
|
||||
python3 -m pythonforandroid.toolchain clean_dists
|
||||
python3 -m pythonforandroid.toolchain clean_builds
|
||||
rm -f *.apk
|
||||
rm -rf PySolFC-Cardsets-2.0
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
rm -rf tmp
|
||||
rm -f *.apk
|
||||
rm -f *.bz2
|
||||
rm -f *.zip
|
||||
rm -rf PySolFC-Cardsets-2.0
|
||||
rm -rf ~/.local/share/python-for-android/packages
|
||||
rm -rf ~/.local/share/python-for-android/build
|
||||
rm -rf ~/.local/share/python-for-android/dists
|
||||
python3 -m pip uninstall python-for-android -y
|
||||
exit 0
|
|
@ -1,32 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
package='org.lufebe16.pysolfc'
|
||||
version=`./version.py`
|
||||
name='PySolFC'
|
||||
tmpdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
|
||||
|
||||
if [ "$1" ]
|
||||
then
|
||||
package=${package}.dbg
|
||||
name=${name}dbg
|
||||
fi
|
||||
|
||||
python3 -m pythonforandroid.toolchain apk \
|
||||
--sdk-dir ${HOME}/.cache/sdk-for-p4a \
|
||||
--ndk-dir ${HOME}/.cache/sdk-for-p4a/ndk-bundle \
|
||||
--android-api 19 \
|
||||
--ndk-version r12b \
|
||||
--arch armeabi-v7a \
|
||||
--dist-name pysolfc \
|
||||
--name ${name} \
|
||||
--bootstrap=sdl2 \
|
||||
--requirements kivy,hostpython2,random2 \
|
||||
--minsdk 14 \
|
||||
--private ${tmpdir} \
|
||||
--package ${package} \
|
||||
--version ${version} \
|
||||
--orientation sensor \
|
||||
--color=always \
|
||||
--icon ${tmpdir}/data/images/misc/pysol01.png \
|
||||
--presplash ${tmpdir}/data/images/misc/pysol06.png \
|
||||
--copy-libs
|
|
@ -1,56 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo '### prepare sdk'
|
||||
|
||||
./initsdk.py $1 $2 $3
|
||||
|
||||
echo '### install p4a'
|
||||
|
||||
p4adir=${HOME}/.cache/tmp-for-p4a
|
||||
mkdir -p ${p4adir}
|
||||
|
||||
p4aversion='0.5.3'
|
||||
if [ ! -f ${p4adir}/${p4aversion}.zip ]
|
||||
then
|
||||
wget "https://github.com/kivy/python-for-android/archive/${p4aversion}.zip"
|
||||
cp -a ./${p4aversion}.zip ${p4adir}/${p4aversion}.zip
|
||||
rm -f ./${p4aversion}.zip
|
||||
fi
|
||||
if [ -f ${p4adir}/${p4aversion}.zip ]
|
||||
then
|
||||
python3 -m pip install -q --user "${p4adir}/${p4aversion}.zip"
|
||||
else
|
||||
echo "### download of ${p4aversion}.zip failed"
|
||||
fi
|
||||
|
||||
echo '### prepare source'
|
||||
|
||||
srcdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
|
||||
|
||||
mkdir -p ${srcdir}
|
||||
rm -rf ${srcdir}
|
||||
cp -a .. ${srcdir}
|
||||
rm -rf ${srcdir}/android
|
||||
rm -rf ${srcdir}/src
|
||||
cp -a main.py ${srcdir}/main.py
|
||||
mkdir -p ${srcdir}/data/images/cards/bottoms/trumps-only
|
||||
echo "" > ${srcdir}/data/images/cards/bottoms/trumps-only/.keep
|
||||
|
||||
echo '### prepare cardsets'
|
||||
|
||||
cardsdir=${HOME}/.cache/tmp-for-p4a/pysolfc
|
||||
|
||||
if [ ! -d ${cardsdir}/PySolFC-Cardsets-2.0 ]
|
||||
then
|
||||
./mkcards
|
||||
mv PySolFC-Cardsets-2.0 ${cardsdir}/
|
||||
rm -f PySolFC-Cardsets-2.0.tar.bz2
|
||||
fi
|
||||
|
||||
if [ -d ${cardsdir}/PySolFC-Cardsets-2.0 ]
|
||||
then
|
||||
echo '### copying cardsets'
|
||||
cp -a ${cardsdir}/PySolFC-Cardsets-2.0/* ${srcdir}/data
|
||||
fi
|
||||
|
||||
echo '### end init'
|
|
@ -1,64 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
pass1=""
|
||||
pass2=""
|
||||
keyalias="python"
|
||||
keystore="${PWD}/bin/keystore"
|
||||
if [ $1 ]
|
||||
then
|
||||
pass1=$1
|
||||
pass2=$1
|
||||
else
|
||||
echo "usage: ./mkp4a.release <keystore-password> [<keyalias-password>] [<keyalias>] [<keystore-path>]"
|
||||
echo " (use ./mkkeystore to create one in default location)"
|
||||
exit
|
||||
fi
|
||||
if [ $2 ]
|
||||
then
|
||||
pass2=$2
|
||||
fi
|
||||
if [ $3 ]
|
||||
then
|
||||
keyalias=$3
|
||||
fi
|
||||
if [ $4 ]
|
||||
then
|
||||
keystore=$4
|
||||
fi
|
||||
|
||||
export P4A_RELEASE_KEYSTORE="$keystore"
|
||||
export P4A_RELEASE_KEYSTORE_PASSWD="$pass1"
|
||||
export P4A_RELEASE_KEYALIAS_PASSWD="$pass2"
|
||||
export P4A_RELEASE_KEYALIAS="$keyalias"
|
||||
|
||||
version=`./version.py`
|
||||
tmpdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
|
||||
|
||||
python3 -m pythonforandroid.toolchain apk \
|
||||
--sdk-dir ${HOME}/.cache/sdk-for-p4a \
|
||||
--ndk-dir ${HOME}/.cache/sdk-for-p4a/ndk-bundle \
|
||||
--android-api 19 \
|
||||
--ndk-version r12b \
|
||||
--arch armeabi-v7a \
|
||||
--dist-name pysolfc \
|
||||
--name PySolFC \
|
||||
--bootstrap=sdl2 \
|
||||
--requirements kivy,hostpython2,random2 \
|
||||
--release \
|
||||
--sign \
|
||||
--minsdk 14 \
|
||||
--private ${tmpdir} \
|
||||
--package org.lufebe16.pysolfc \
|
||||
--version ${version} \
|
||||
--orientation sensor \
|
||||
--color=always \
|
||||
--icon ${tmpdir}/data/images/misc/pysol01.png \
|
||||
--presplash ${tmpdir}/data/images/misc/pysol06.png \
|
||||
--copy-libs
|
||||
|
||||
# keystore options (instead environment vars):
|
||||
#
|
||||
# keystore: --keystore <file>
|
||||
# key alias --signkey <keyalias>
|
||||
# keystore passwd --keystorepw <pass1>
|
||||
# key passwd --signkeypw <pass2>
|
|
@ -1,57 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo '### p4a started'
|
||||
|
||||
# sdk-dir and nkd-dir from command line (fdroid mode)
|
||||
|
||||
sdkdir="${HOME}/.cache/sdk-for-p4a"
|
||||
ndkdir="${HOME}/.cache/sdk-for-p4a/ndk-bundle"
|
||||
if [ $1 ]
|
||||
then
|
||||
echo "set sdk to: $1"
|
||||
sdkdir="$1"
|
||||
fi
|
||||
if [ $2 ]
|
||||
then
|
||||
echo "set ndk to: $2"
|
||||
ndkdir="$2"
|
||||
fi
|
||||
|
||||
echo '### run toolchain'
|
||||
|
||||
version=`./version.py`
|
||||
tmpdir=${HOME}/.cache/tmp-for-p4a/pysolfc/src
|
||||
|
||||
python3 -m pythonforandroid.toolchain apk \
|
||||
--sdk-dir ${sdkdir} \
|
||||
--ndk-dir ${ndkdir} \
|
||||
--android-api 19 \
|
||||
--ndk-version r12b \
|
||||
--arch armeabi-v7a \
|
||||
--dist-name pysolfc \
|
||||
--name PySolFC \
|
||||
--bootstrap=sdl2 \
|
||||
--requirements kivy,hostpython2,random2 \
|
||||
--release \
|
||||
--minsdk 14 \
|
||||
--private ${tmpdir} \
|
||||
--package org.lufebe16.pysolfc \
|
||||
--version ${version} \
|
||||
--orientation sensor \
|
||||
--color=always \
|
||||
--icon ${tmpdir}/data/images/misc/pysol01.png \
|
||||
--presplash ${tmpdir}/data/images/misc/pysol06.png \
|
||||
--copy-libs
|
||||
|
||||
# python3 -m pythonforandroid.toolchain apk
|
||||
# ...
|
||||
# --release #1
|
||||
# --sign #2
|
||||
# ...
|
||||
#
|
||||
# ad 1,2:
|
||||
# ohne: -> debug version
|
||||
# 1: -> release unsigned
|
||||
# 1 und 2: -> release version.
|
||||
|
||||
echo '### p4a finished'
|
|
@ -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
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
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
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
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
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
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
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
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
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
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
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/env python2.7
|
||||
#!/usr/bin/env python3
|
||||
# ---------------------------------------------------------------------------
|
||||
#
|
||||
# PySol -- a Python Solitaire game
|
||||
|
@ -23,6 +23,7 @@
|
|||
# Starter for kivy/android using buildozer: Needs an explizitly
|
||||
# named main.py as startpoint.
|
||||
|
||||
import os
|
||||
import sys
|
||||
if '--kivy' not in sys.argv:
|
||||
sys.argv.append('--kivy')
|
||||
|
@ -34,4 +35,6 @@ init()
|
|||
|
||||
if runmain:
|
||||
from pysollib.main import main
|
||||
|
||||
os.environ['KIVY_NO_CONSOLELOG'] = "No"
|
||||
sys.exit(main(sys.argv))
|
35
buildozer/minimal.txt
Normal file
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
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
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
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
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
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
1
buildozer/src/manifest/extra_attributes.xml
Normal file
|
@ -0,0 +1 @@
|
|||
android:requestLegacyExternalStorage="true"
|
8
buildozer/version
Executable file
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)
|
207
contrib/customize_cardset.asciidoc
Normal file
207
contrib/customize_cardset.asciidoc
Normal file
|
@ -0,0 +1,207 @@
|
|||
Cardset Customization Tutorial
|
||||
==============================
|
||||
:Author: Eric Rausch
|
||||
:Email: <neelix570@gmail.com>
|
||||
|
||||
Setting up a Cardset
|
||||
--------------------
|
||||
The easiest way to create a cardset would be to copy an existing cardset folder of the same type in your cardsets directory. All cardsets need a number of files to work.
|
||||
|
||||
* An image for each card - these images should be the same format and the same size, as defined in the config.txt file (described below). These files should be named something like 01s.png for the ace of spades. The first two (or more) digits represent the rank, and the letter after represents the suit. The suits are labeled hcds in French decks or decks that use French suits (i.e. Hex A or Tarock decks), and the suits are alphabetical for other decks. The suit letter z is used for jokers or trumps.
|
||||
* A shade file - shade.png, for example.
|
||||
* At least one back image, as defined in the config.txt file below.
|
||||
* A config.txt file, the format described below.
|
||||
* A copyright file, containing copyright info.
|
||||
|
||||
The following optional files may also be added, but are only used under certain circumstances.
|
||||
|
||||
* Bottom images. A number of images for the bottoms of stacks. These are not used unless your PySol install does not support generating stack bottoms, or you enable them manually (currently only possible through editing the options.cfg file). Which bottoms are used depend on the cardset type. Each bottom has a version with a suffix of -n, indicating the negative bottom that gets used if the appropriate option is enabled.
|
||||
* Shadow images. These will only be used if your PySol install does not support auto-generated shadows.
|
||||
|
||||
config.txt template
|
||||
-------------------
|
||||
|
||||
....
|
||||
PySolFC solitaire cardset;$A;$FMT;$B;$C;$D,$E;$F;$G;$H
|
||||
<internal_name>;<cardset_name>
|
||||
X Y D
|
||||
XOFF YOFF SXOFF SYOFF
|
||||
back01.ext
|
||||
back01.ext;back02.ext;back03.ext
|
||||
....
|
||||
|
||||
Line 1
|
||||
------
|
||||
|
||||
*$A:* The cardset version number that belongs to the number of fields divided through ";" on the first line (e.g. `.gif;1;78;8,1016` -> `$A=4`)
|
||||
|
||||
( *WARNING:* For Mahjongg, $A must always be 6 or 7 and the $F field must be included in the line; however, you can put `0` in `$F` if you wish, in that case. )
|
||||
|
||||
( *NOTE:* $D and $E are comma separated and count for one field )
|
||||
|
||||
*$FMT:* The format of the images used - .gif, .png, .jpg, .ppm, and .bmp are supported
|
||||
|
||||
*$B:* The type of the cardset (see types below)
|
||||
|
||||
Cardsets Types:
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
* French = 1
|
||||
* Hanafuda = 2
|
||||
* Tarock = 3
|
||||
* Mahjongg = 4
|
||||
* Hex A Deck = 5
|
||||
* Mughal Ganjifa = 6
|
||||
* Navagraha Ganjiga = 7
|
||||
* Dashavatara Ganjifa = 8
|
||||
* Trumps Only = 9
|
||||
* Matching = 10
|
||||
* Puzzle = 11
|
||||
* Ishido = 12
|
||||
|
||||
*$C:* The number of cards in the cardset, generally 42, 48, 52, 68, 78, 96 or 120
|
||||
|
||||
*$D:* The Style of the cardset (this field can hold one or more comma separated values)
|
||||
|
||||
Cardsets Styles:
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
||||
* Abstract = 35
|
||||
* Adult = 1
|
||||
* Animals = 2
|
||||
* Anime = 3
|
||||
* Art = 4
|
||||
* Cartoons = 5
|
||||
* Children = 6
|
||||
* Classic Look = 7
|
||||
* Collectors = 8
|
||||
* Computers = 9
|
||||
* Divination = 36
|
||||
* Engines = 10
|
||||
* Fantasy = 11
|
||||
* Four Color = 37
|
||||
* Ganjifa= 30
|
||||
* Hanafuda = 12
|
||||
* Hex A Deck = 29
|
||||
* Holiday = 13
|
||||
* Ishido = 34
|
||||
* Mahjongg = 28
|
||||
* Matching = 32
|
||||
* Monochrome = 38
|
||||
* Movies = 14
|
||||
* Matrix = 31
|
||||
* Music = 15
|
||||
* Nature = 16
|
||||
* Operating Systems = 17
|
||||
* People = 19
|
||||
* Places = 20
|
||||
* Plain = 21
|
||||
* Products = 22
|
||||
* Puzzle = 33
|
||||
* Round Cardsets = 18
|
||||
* Science Fiction = 23
|
||||
* Sports = 24
|
||||
* Tarock = 27
|
||||
* Vehicles = 25
|
||||
* Video Games = 26
|
||||
|
||||
*$E:* The origin (country) of the cardset
|
||||
|
||||
Cardsets Origins:
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Australia = 1021
|
||||
* Austria = 1001
|
||||
* Belgium = 1019
|
||||
* Canada = 1010
|
||||
* China = 1011
|
||||
* Czech Republic = 1012
|
||||
* Denmark = 1013
|
||||
* England = 1003
|
||||
* France = 1004
|
||||
* Germany = 1006
|
||||
* Great Britain = 1014
|
||||
* Hungary = 1015
|
||||
* India = 1020
|
||||
* Italy = 1005
|
||||
* Japan = 1016
|
||||
* Netherlands = 1002
|
||||
* Portugal = 1022
|
||||
* Russia = 1007
|
||||
* Spain = 1008
|
||||
* Sweden = 1017
|
||||
* Switzerland = 1009
|
||||
* USA = 1018
|
||||
|
||||
*$F:* The Year the cardset was created (in the range 1000 to 2299)
|
||||
|
||||
*$G:* The subtype of the cardset. Usually 0 - for French type cardsets, a value of 1 is used if there are jokers. For Puzzle type cardsets, it is the number of pieces per row/column.
|
||||
|
||||
*$H:* Whether the cardset is a 3D Mahjongg cardset - 1 if it is, 0 if it isn't. For cardsets with a version less than 7, version 6 cardsets treat this value as 1, and older version cardsets treat it as 0.
|
||||
|
||||
Line 2
|
||||
------
|
||||
|
||||
`<internal_name>`: A name for PySolFC to identify your cardset (without spaces)
|
||||
|
||||
( *TIP:* You could add a number prefix (e.g. 123-cardset-name) )
|
||||
|
||||
`<cardset_name>`: Your cardset name as it should appear in the cardset manager. Note that a cardset name of more than 30 characters will be truncated.
|
||||
|
||||
Line 3
|
||||
------
|
||||
|
||||
* *X:* The cards' width (the card image width)
|
||||
* *Y:* The cards' height (the card image height)
|
||||
* *D:* The color depth (mostly 8)
|
||||
|
||||
Line 4
|
||||
------
|
||||
|
||||
* *XOFF:* The horizontal offset of the cards
|
||||
* *YOFF:* The vertical offset of the cards
|
||||
* *SXOFF:* The offset of the horizontal shadow (mostly 7)
|
||||
* *SYOFF:* The offset of the vertical shadow (mostly 7)
|
||||
|
||||
Line 5
|
||||
------
|
||||
|
||||
`back01.ext`: The name of the default back image (where `ext` means the file extension
|
||||
e.g: `png` or `gif`.)
|
||||
|
||||
Line 6
|
||||
------
|
||||
|
||||
`back01.ext;back02.ext;back03.ext;…``: The name of the other back images, including the default one.
|
||||
|
||||
About this document:
|
||||
--------------------
|
||||
|
||||
*NOTE:*
|
||||
This tutorial may be incomplete. It is given as is, without any warranty,
|
||||
to help players customize their own cardsets.
|
||||
You are welcome to send any suggestions to: mailto:neelix570@gmail.com[the Author's E-mail],
|
||||
https://github.com/shlomif/PySolFC/issues[PySol FC's GitHub issue tracker] or
|
||||
https://sourceforge.net/p/pysolfc/_list/tickets[PySol FC's Sourceforge issue tracker].
|
||||
|
||||
*NOTE 2:*
|
||||
You should also place a file called `COPYRIGHT` in the same directory as `config.txt`,
|
||||
containing the text that can be accessed via `Info/Settings`.
|
||||
|
||||
License:
|
||||
~~~~~~~~
|
||||
|
||||
This tutorial was created under the terms of the GNU General Public License
|
||||
version 3 or later. You can redistribute it as is and/or modify it.
|
||||
|
||||
Shlomi Fish, hereby puts his modifications to this document under
|
||||
https://github.com/shlomif/shlomif-computer-settings/blob/master/shlomif-settings/git/commit-messages/cc0-copyright-disclaimer.txt[CC0 / Public Domain / MIT License / GPL terms]
|
||||
|
||||
Credits:
|
||||
~~~~~~~~
|
||||
|
||||
Credits go to:
|
||||
|
||||
mailto:andsa@web.de[Andreas Sauer] for clarifying certain points +
|
||||
|
||||
https://www.shlomifish.org/[Shlomi Fish] for making some improvements to this tutorial
|
11483
contrib/help-pages-translation-to-french/all.htm
Normal file
11483
contrib/help-pages-translation-to-french/all.htm
Normal file
File diff suppressed because it is too large
Load diff
7551
contrib/help-pages-translation-to-french/all_games.html
Normal file
7551
contrib/help-pages-translation-to-french/all_games.html
Normal file
File diff suppressed because it is too large
Load diff
131
contrib/help-pages-translation-to-french/credits.html
Normal file
131
contrib/help-pages-translation-to-french/credits.html
Normal file
|
@ -0,0 +1,131 @@
|
|||
<h2>Remerciements pour PySol à</h2>
|
||||
<ul>
|
||||
<li> Volker Weidner pour l'avoir fait connaître le Solitaire
|
||||
</li><li> Guido van Rossum pour le programme initial
|
||||
</li><li> <a href="http://www.inetarena.com/~grania/">T. Kirk</a> pour les nombreux jeux et styles de cartes
|
||||
</li><li> the Gnome AisleRiot team pour sa contribution à la documentation
|
||||
</li><li> Les équipes AfterStep et KDE pour certaines icônes.
|
||||
</li><li> Python, Tcl/Tk & les équipes Linux pour avoir rendu possible la conception de ce programme
|
||||
</li></ul>
|
||||
|
||||
<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 <drew@thecsillags.com>
|
||||
|
||||
<ul>
|
||||
<li> <a href="rules/canfield.html">Canfield</a>
|
||||
</li></ul>
|
||||
</li><li> Deon Ramsey <miavir@furry.de>
|
||||
|
||||
<ul>
|
||||
<li> <a href="rules/nomad.html">Nomad</a>
|
||||
</li></ul>
|
||||
</li><li> Galen Brooks <galen@nine.com>
|
||||
|
||||
<ul>
|
||||
<li> <a href="rules/numerica.html">Numerica</a>
|
||||
</li></ul>
|
||||
</li><li> Matthew Hohlfeld <hohlfeld@cs.ucsd.edu>
|
||||
|
||||
<ul>
|
||||
<li> <a href="rules/larasgame.html">Lara's Game</a>
|
||||
</li></ul>
|
||||
</li></ul>
|
||||
|
||||
<h2>Les contributeurs pour les styles de cartes sont</h2>
|
||||
<ul>
|
||||
<li> Bao Trinh <bao@cs.umd.edu>
|
||||
|
||||
</li><li> DJ Delorie <dj@delorie.com>
|
||||
|
||||
</li><li> Donald R. Woods <woods@sun.com>
|
||||
|
||||
</li><li> Felix Bellaby <felix@pooh.u-net.com>
|
||||
|
||||
</li><li> Heiko Eissfeldt <heiko@colossus.escape.de>
|
||||
|
||||
</li><li> Jochen Tuchbreiter <whynot@mabi.de>
|
||||
|
||||
</li><li> John Fitzgibbon
|
||||
|
||||
</li><li> John Heidemann <johnh@isi.edu>
|
||||
|
||||
</li><li> Jonathan Blandford <jrb@mit.edu>
|
||||
|
||||
</li><li> Joseph L. Traub <jtraub@zso.dec.com>
|
||||
|
||||
</li><li> Michael Bischoff <mbi@mo.math.nat.tu-bs.de>
|
||||
|
||||
</li><li> Mike Naylor <mike.naylor@5x5poker.com>
|
||||
|
||||
</li><li> Oliver Xymoron <oxymoron@waste.org>
|
||||
|
||||
</li><li> Rene Seindal <rene@seindal.dk>
|
||||
|
||||
</li><li> Rudy Muller <rudy.muller@net.HCC.nl>
|
||||
|
||||
</li><li> Ryu Changwoo <cwryu@eve.kaist.ac.kr>
|
||||
|
||||
</li><li> T. Kirk <grania@mailcity.com>
|
||||
|
||||
</li><li> The Papa <papalini@biancaneve.ing.unifi.it>
|
||||
|
||||
</li></ul>
|
||||
|
||||
<h2>Les contributeurs pour la musique sont</h2>
|
||||
<ul>
|
||||
<li> <a href="http://hem.passagen.se/dachande/">Carl Larsson</a> aka <i>Nightbeat</i>
|
||||
<nightbeat@traxinspace.com>
|
||||
|
||||
</li></ul>
|
||||
|
||||
<h2>Remerciements spéciaux à</h2>
|
||||
<ul>
|
||||
<li> Andy Markebo <flognat@fukt.hk-r.se>
|
||||
|
||||
</li><li> Charles B. Dorsett
|
||||
|
||||
</li><li> Christian Tismer <tismer@tismer.com>
|
||||
|
||||
</li><li> Dylan Thurston <Dylan.Thurston@math.unige.ch>
|
||||
|
||||
</li><li> Jan Nijtmans <j.nijtmans@chello.nl>
|
||||
|
||||
</li><li> Jordan Russel <jordanr@iname.com>
|
||||
|
||||
</li><li> Kevin O'Connor <koconnor@cse.Buffalo.EDU>
|
||||
|
||||
</li><li> Marc-Andre Lemburg <mal@lemburg.com>
|
||||
|
||||
</li><li> Mark Hammond <MHammond@skippinet.com.au>
|
||||
|
||||
</li><li> Neil Schemenauer <nascheme@enme.ucalgary.ca>
|
||||
|
||||
</li><li> Thomas Gellekum <tg@ihf.rwth-aachen.de>
|
||||
|
||||
</li><li> Vladimir Marangozov <Vladimir.Marangozov@inrialpes.fr>
|
||||
|
||||
</li><li> Zachary Roadhouse <Zachary_Roadhouse@brown.edu>
|
||||
|
||||
</li><li> Natascha
|
||||
|
||||
</li></ul>
|
||||
|
||||
<h2>PySol utilise les technologies OpenSource suivantes</h2>
|
||||
<ul>
|
||||
<li> <a href="http://www.python.org/">Le langage de programmation Python</a>
|
||||
</li><li> <a href="http://www.scriptics.com/">The Tcl/Tk GUI Toolkit</a>
|
||||
</li><li> <a href="http://www.devolution.com/~slouken/projects/SDL/index.html">The SDL Simple DirectMedia Layer</a>
|
||||
</li><li> <a href="http://www.lokigames.com/development/smpeg.php3">The SDL MPEG Player Library</a>
|
||||
</li><li> <a href="http://mikmod.darkorb.net/">The MikMod Sound Library</a>
|
||||
</li></ul>
|
||||
|
||||
<h2>PySol a été développé à l'aide des technologies OpenSource suivantes</h2>
|
||||
<ul>
|
||||
<li> <a href="http://www.linux.org/">Le système d'exploitation Linux</a>
|
||||
</li><li> <a href="http://www.xfree86.org/">The XFree86 X Window System</a>
|
||||
</li><li> <a href="http://www.kde.org/">L'environnement de bureau KDE</a>
|
||||
</li><li> <a href="http://fte.sourceforge.net/">L'éditeur de texte FTE</a>
|
||||
</li><li> <a href="http://www.jordanr.dhs.org/">The Inno Setup Win32 Installer</a>
|
||||
</li></ul>
|
3
contrib/help-pages-translation-to-french/ganjifa.html
Normal file
3
contrib/help-pages-translation-to-french/ganjifa.html
Normal file
|
@ -0,0 +1,3 @@
|
|||
<h1>Règles générales du jeu de Ganjifa</h1>
|
||||
Le Ganjifa est un jeu de cartes provenant d'Inde et d'autre pays de cette région. Généralement ronds, mais certains jeux sont de forme rectangulaire. La différence la plus significative entre le Ganjifa et les autres types de jeux de cartes est que ces cartes sont traditionnellement peinte une par une à la main. Les jeux comportent généralement 8 à 12 familles de cartes, chaque famille comportant généralement 12 valeurs. Les deux jeux les plus courants sont le Mughal qui compte 8 suites et le Dashavatara en qui en compte 10. Les suites contiennent des cartes de pépin allant d'as au 10 et deux cartes de cour, le Wazir et le Mir. L'ordre des suites est: Matsya, Kuchha, Varaha, Narsingha, Vamana, Parashurama, Rama, Krishna, Buddha, and Kalanki. Les jeux de Ganjifa solitaires se jouent de la même façon que les jeux standards, mais leur plus grand nombre de cartes (96 ou 120) y ajoutent de la complexité. Le fait que chaque suite a sa propre couleur rend le jeu plus intéressant dans les jeux disposés en colonnes de "couleurs alternées".
|
||||
<img alt="" src="images/ganjifa.gif">
|
270
contrib/help-pages-translation-to-french/gen-html.py
Executable file
270
contrib/help-pages-translation-to-french/gen-html.py
Executable file
|
@ -0,0 +1,270 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import builtins
|
||||
import os
|
||||
import sys
|
||||
|
||||
from pysollib.gamedb import GAME_DB
|
||||
from pysollib.gamedb import GI
|
||||
from pysollib.mfxutil import latin1_normalize
|
||||
from pysollib.mygettext import fix_gettext
|
||||
# outdir = '../html'
|
||||
pysollib_dir = '../'
|
||||
|
||||
|
||||
builtins._ = lambda x: x
|
||||
builtins.n_ = lambda x: x
|
||||
|
||||
import pysollib.games # noqa: E402,F402,I100,I202
|
||||
import pysollib.games.mahjongg # noqa: E402,F402
|
||||
import pysollib.games.special # noqa: E402,F401,F402
|
||||
|
||||
try:
|
||||
os.mkdir('html')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
try:
|
||||
os.mkdir('html/rules')
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def merge_dicts(x, y):
|
||||
ret = x.copy()
|
||||
ret.update(y)
|
||||
return ret
|
||||
|
||||
|
||||
pysollib_path = os.path.join(sys.path[0], pysollib_dir)
|
||||
sys.path[0] = os.path.normpath(pysollib_path)
|
||||
# print sys.path
|
||||
|
||||
fix_gettext()
|
||||
|
||||
files = [
|
||||
('credits.html', 'PySol Credits'),
|
||||
('ganjifa.html', 'PySol - Règles générales du Ganjifa'),
|
||||
('general_rules.html', 'PySol - Règles générales'),
|
||||
('glossary.html', 'PySol - Glossaire'),
|
||||
('hanafuda.html', 'PySol - Règles générales des jeux de cartes à fleurs'),
|
||||
('hexadeck.html', 'PySol - Règles générales du jeu Hex A Deck'),
|
||||
('howtoplay.html', 'Comment jouer à PySol'),
|
||||
('index.html', 'PySol - une collection de jeux de solitaire'),
|
||||
('install.html', 'PySol - Installation'),
|
||||
('intro.html', 'PySol - Introduction'),
|
||||
('license.html', 'Licence de PySol'),
|
||||
('news.html', 'PySol - une collection de jeux de solitaire'),
|
||||
# ('rules_alternate.html', 'PySol - a Solitaire Game Collection'),
|
||||
# ('rules.html', 'PySol - a Solitaire Game Collection'),
|
||||
]
|
||||
|
||||
rules_files = [
|
||||
# ('hanoipuzzle.html', ),
|
||||
('mahjongg.html', 'PySol - Règles du Mahjongg'),
|
||||
('matrix.html', 'PySol - Règles du Matrix'),
|
||||
('pegged.html', 'PySol - Règles du Pegged'),
|
||||
('shisensho.html', 'PySol - Règles du Shisen-Sho'),
|
||||
('spider.html', 'PySol - Règles du Spider'),
|
||||
('freecell.html', 'PySol - Règles du FreeCell'),
|
||||
]
|
||||
wikipedia_files = [
|
||||
('houseinthewood.html', 'PySol - Règles de House in the Woods'),
|
||||
('fourseasons.html', 'PySol - Règles du Four Seasons'),
|
||||
]
|
||||
|
||||
|
||||
def _fmt(fmt, params):
|
||||
return fmt % merge_dicts(params, {'logo_url': "images/pysollogo03.png",
|
||||
'logo_alt': "PySol FC Logo"})
|
||||
|
||||
|
||||
main_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>%(title)s</title>
|
||||
<meta name="license" content="GNU General Public License">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
</head>
|
||||
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
|
||||
alink="#FF0000">
|
||||
<img src="%(logo_url)s" alt="%(logo_alt)s">
|
||||
<br>
|
||||
'''
|
||||
main_footer = '''
|
||||
<p>
|
||||
<br>
|
||||
%(back_to_index_link)s
|
||||
</body>
|
||||
</html>'''
|
||||
|
||||
rules_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>%(title)s</title>
|
||||
<meta name="license" content="GNU General Public License">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
</head>
|
||||
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
|
||||
link="#FF0000">
|
||||
<img src="../%(logo_url)s" alt="%(logo_alt)s">
|
||||
<br>
|
||||
'''
|
||||
rules_footer = '''
|
||||
<p>
|
||||
%(footer)s
|
||||
<br>
|
||||
<a href="../glossary.html">Glossaire</a>
|
||||
<br>
|
||||
<a href="../general_rules.html">Règles générales</a>
|
||||
|
||||
<p>
|
||||
<a href="../index.html">Sommaire</a>
|
||||
</body>
|
||||
</html>'''
|
||||
|
||||
wikipedia_header = '''<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>%(title)s</title>
|
||||
<meta name="license" content="GNU General Public License">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
</head>
|
||||
<body text="#000000" bgcolor="#F7F3FF" link="#0000FF" vlink="#660099"
|
||||
alink="#FF0000">
|
||||
<img src="../%(logo_url)s" alt="%(logo_alt)s">
|
||||
<br>
|
||||
'''
|
||||
|
||||
|
||||
def getGameRulesFilename(n):
|
||||
if n.startswith('Mahjongg'):
|
||||
return 'mahjongg.html'
|
||||
return latin1_normalize(n) + '.html'
|
||||
|
||||
|
||||
def gen_main_html():
|
||||
for infile, title in files:
|
||||
outfile = open(os.path.join('html', infile), 'w')
|
||||
print(_fmt(main_header, {'title': title}), file=outfile)
|
||||
with open(infile, 'r') as file:
|
||||
print(file.read(), file=outfile)
|
||||
s = '<a href="index.html">Sommaire</a>'
|
||||
if infile == 'index.html':
|
||||
s = ''
|
||||
print(_fmt(main_footer, {'back_to_index_link': s}), file=outfile)
|
||||
outfile.close()
|
||||
|
||||
|
||||
def gen_rules_html():
|
||||
# ls = glob(os.path.join('rules', '*.html'))
|
||||
rules_ls = os.listdir('rules')
|
||||
rules_ls.sort()
|
||||
wikipedia_ls = os.listdir('wikipedia')
|
||||
wikipedia_ls.sort()
|
||||
|
||||
games = GAME_DB.getGamesIdSortedByName()
|
||||
rules_list = []
|
||||
files_list = []
|
||||
for fn, tt in rules_files:
|
||||
rules_list.append(('rules', fn, tt, ''))
|
||||
files_list.append(fn)
|
||||
for fn, tt in wikipedia_files:
|
||||
rules_list.append(('wikipedia', fn, tt, ''))
|
||||
files_list.append(fn)
|
||||
altnames = []
|
||||
|
||||
# open file of list of all rules
|
||||
out_rules = open(os.path.join('html', 'rules.html'), 'w')
|
||||
print(_fmt(
|
||||
main_header,
|
||||
{'title': 'PySol - une collection de jeux de solitaire'}),
|
||||
file=out_rules)
|
||||
with open('rules.html', 'r') as file:
|
||||
print(file.read(), file=out_rules)
|
||||
|
||||
for id in games:
|
||||
# create list of rules
|
||||
|
||||
gi = GAME_DB.get(id)
|
||||
|
||||
rules_fn = gi.rules_filename
|
||||
if not rules_fn:
|
||||
rules_fn = getGameRulesFilename(gi.name)
|
||||
|
||||
if rules_fn in files_list:
|
||||
continue
|
||||
|
||||
if rules_fn in rules_ls:
|
||||
rules_dir = 'rules'
|
||||
elif rules_fn in wikipedia_ls:
|
||||
rules_dir = 'wikipedia'
|
||||
else:
|
||||
print('missing rules for %s (file: %s)'
|
||||
% (gi.name, rules_fn))
|
||||
continue
|
||||
|
||||
# print '>>>', rules_fn
|
||||
|
||||
title = 'PySol - Règles pour ' + gi.name
|
||||
s = ''
|
||||
if gi.si.game_type == GI.GT_HANAFUDA:
|
||||
s = '<a href="../hanafuda.html">' + \
|
||||
'Règles générales des jeux de cartes à fleurs</a>'
|
||||
elif gi.si.game_type == GI.GT_DASHAVATARA_GANJIFA:
|
||||
s = '<a href="../ganjifa.html">A-propos du Ganjifa</a>'
|
||||
elif gi.si.game_type == GI.GT_HEXADECK:
|
||||
s = '<a href="../hexadeck.html">' + \
|
||||
'Règles générales du jeu Hex A Deck</a>'
|
||||
elif gi.si.game_type == GI.GT_MUGHAL_GANJIFA:
|
||||
s = '<a href="../ganjifa.html">A-propos du Ganjifa</a>'
|
||||
# print '***', gi.name, '***'
|
||||
|
||||
rules_list.append((rules_dir, rules_fn, title, s))
|
||||
files_list.append(rules_fn)
|
||||
# rules_list.append((rules_fn, gi.name))
|
||||
print('<li><a href="rules/%s">%s</a>'
|
||||
% (rules_fn, gi.name), file=out_rules)
|
||||
for n in gi.altnames:
|
||||
altnames.append((n, rules_fn))
|
||||
|
||||
print('</ul>\n' + _fmt(main_footer,
|
||||
{'back_to_index_link':
|
||||
'<a href="index.html">Sommaire</a>'}),
|
||||
file=out_rules)
|
||||
|
||||
out_rules.close()
|
||||
|
||||
# create file of altnames
|
||||
out_rules_alt = open(os.path.join('html', 'rules_alternate.html'), 'w')
|
||||
print(_fmt(
|
||||
main_header, {'title': 'PySol - une collection de jeux de solitaire'}),
|
||||
file=out_rules_alt)
|
||||
with open('rules_alternate.html', 'r') as file:
|
||||
print(file.read(), file=out_rules_alt)
|
||||
altnames.sort()
|
||||
for name, fn in altnames:
|
||||
print('<li> <a href="rules/%s">%s</a>'
|
||||
% (fn, name), file=out_rules_alt)
|
||||
print('</ul>\n' + _fmt(main_footer,
|
||||
{'back_to_index_link':
|
||||
'<a href="index.html">Sommaire</a>'}),
|
||||
file=out_rules_alt)
|
||||
out_rules_alt.close()
|
||||
|
||||
# create rules
|
||||
for dir, filename, title, footer in rules_list:
|
||||
outfile = open(
|
||||
os.path.join('html', 'rules', filename), 'w', encoding='utf-8')
|
||||
if dir == 'rules':
|
||||
print(_fmt(rules_header, {'title': title}), file=outfile)
|
||||
else: # d == 'wikipedia'
|
||||
print(_fmt(wikipedia_header, {'title': title}), file=outfile)
|
||||
with open(os.path.join(dir, filename), 'r', encoding='utf-8') as file:
|
||||
print(file.read(), file=outfile)
|
||||
print(_fmt(rules_footer, {'footer': footer}), file=outfile)
|
||||
outfile.close()
|
||||
|
||||
|
||||
gen_main_html()
|
||||
gen_rules_html()
|
15
contrib/help-pages-translation-to-french/general_rules.html
Normal file
15
contrib/help-pages-translation-to-french/general_rules.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
<h1>Règles générales</h1>
|
||||
<p>
|
||||
Certaines caractéristiques sont communes à tous les jeux inclus dans cet ensemble. La plupart utilisent un ou deux jeux de 52 cartes standard. Le Roi est toujours la carte la plus forte. K signifie Roi, Q signifie Dame et J signifie Valet. Les cartes sont toujours empilées par ordre croissant ou décroissant, dans la zone principale de jeu, appelée le tableau, ou empilées de côtés, sur des emplacements appelés fondations. Certaines piles sont formées par ordre de valeurs de la même couleur de cartes, d'autres sont formées en alternant les couleurs.
|
||||
|
||||
<p>
|
||||
Le talon est formé par les cartes restantes. Certaines personnes l'appellent le stock ou la main.
|
||||
|
||||
<p>
|
||||
Le but commun à tous ces jeux est d'utiliser toutes les cartes dans les fondations ou toutes celles du talon selon les règles du jeu. Quand toutes les cartes sont utilisées, la partie est gagnée. Sinon, vous perdez.
|
||||
|
||||
<p>
|
||||
Les cartes sont prises au talon d'un clic gauche ou en appuyant sur <D>. Pour certain jeu, il est possible de retourner les cartes d'un clic gauche. Pour déplacer une carte, cliquez dessus et glissez-là jusqu'à l’emplacement de destination. Si un mouvement n'est pas autorisé, la carte ne bougera pas. Si une ou plusieurs cartes peuvent être déplacées vers les fondations ou les défausse d'as, un appui sur la touche <A> le fera automatiquement. Quelquefois, la touche <A> déplacera plus de cartes que vous ne voulez vers les fondations. Il vous est possible de renvoyer des cartes vers le tableau. Vous pouvez aussi utiliser la touche "annuler" <Z>.
|
||||
|
||||
<p>
|
||||
Pour mieux comprendre ces règles, vous pouvez toujours regarder le jeu de démonstration :-)
|
185
contrib/help-pages-translation-to-french/glossary.html
Normal file
185
contrib/help-pages-translation-to-french/glossary.html
Normal file
|
@ -0,0 +1,185 @@
|
|||
<h1>Glossaire</h1>
|
||||
|
||||
<p>Note de l'auteur: Ces définitions sont données à titre de de référence uniquement. Voir les règles des jeux pour plus de détails. Chaque jeu définit ses propres règles.</p>
|
||||
|
||||
<dl>
|
||||
<dt><b>CARTE DE DEPART</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>La première carte placée sur une fondation. Généralement, les autres fondations commencent par une carte de même valeur. Voir: FONDATION</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>COULEUR DE CARTES</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Quatre types différents dans un JEU STANDARD. Généralement Trèfles, Piques, Coeurs et Carreaux.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>DEFAUSSE</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Une pile de cartes, face visible, généralement située près du Talon. La carte du dessus est généralement jouable.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT INDEPENDAMMENT DE LA COULEUR DE CARTES</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Voir EMPILEMENT PAR ORDRE DE VALEUR.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR COULEUR</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On peur placer une carte uniquement sur un carte de même couleur. Exemple: Placer un Carreau sur un Coeur est valide, placer un Carreau sur un Trèfle ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR COULEURS ALTERNEES</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On place les cartes en alternant les couleurs. Exemple: Placer un Carreau sur un Pique est accepté, placer un Carreau sir un Coeur ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR COULEUR DE CARTES</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On peut placer une carte uniquement sur un carte de même couleur de cartes. Exemple: Placer un Pique sur un Pique est valide, placer un Pique sur un Trèfle ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR ORDRE DE VALEUR</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>EMPILEMENT Par ordre CROISSANT ou DECROISSANT indépendamment de la couleur ou de la couleur de cartes.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR SUITE DE MÊME COULEURS</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On ne peut placer une carte que sur une pile de la même couleur. Exemple: Placer un Carreau sur un Coeur est valide, placer un Coeur sur un autre ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR ORDRE CROISSANT OU DECROISSANT</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On peut placer une carte sur une autre d'une valeur immédiatement supérieure ou inférieure. Exemple: Placer un Valet sur une Dame ou un 10 est valide, placer un 10 sur une Dame ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR ORDRE CROISSANT</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On place toujours une carte, sur une carte de valeur inférieure. Généralement, on place une carte de valeur immédiatement supérieure à la précédente. Exemple: Placer une Dame sur un Valet est valide, placer une Dame sur un Roi ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR ORDRE CROISSANT PAR ECART DE *</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On place toujours une carte, sur une carte de valeur inférieure par écart de *. Exemple: Si * est 2, placer un 10 sur un 8 est valide, placer un 10 sur un 9 ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR ORDRE DECROISSANT</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On place toujours une carte, sur une carte de valeur supérieure. Généralement, on place une carte de valeur immédiatement supérieure à la précédente. Exemple: Placer un 10 sur un Valet est valide, placer un 10 sur un 9 ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILEMENT PAR ORDRE DECROISSANT PAR ECART DE *</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>On place toujours une carte, sur une carte de valeur supérieure par écart de *. Exemple: Si * est 2, placer un 10 sur une Dame est valide, placer un 10 sur un Valet ne l'est pas.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPILER</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>La possibilité de placer une carte (ou un groupe de cartes) sur une autre. Par rapport à la valeur, vous pouvez empiler les cartes par ordre CROISSANT, DECROISSANT ou CROISSANT/DECROISSANT par *. Par rapport à la couleur/couleur de cartes, vous pouvez empiler les cartes par COULEUR DE CARTES, COULEUR, par COULEURS ALTERNEES, par SUITES DE MEME COULEUR ou INDEPENDAMMENT DE LA COULEUR DE CARTES. Notez que tous les jeux d'empilement suivent deux de ces règles, dont un de chaque liste.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>EMPLACEMENT</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Voir PILE.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>FONDATION</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Si un jeu comporte une fondation, le jeu est généralement gagné une fois les toutes les cartes placées sur la(les) fondation(s).</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>JEU</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Le jeu de cartes utilisé. La plupart des jeux se jouent avec un JEU STANDARD, mais les jeux se jouant avec un JEU DOUBLE, un JEU A JOKER ou un JEU TRONQUÉ ne sont pas rare.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>JEU A JOKER</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Un jeu de cartes consistant en un JEU STANDARD et deux Jokers, comptant 54 cartes.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>JEU DOUBLE</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Un jeu de cartes consistant en deux JEUX STANDARDS, comptant 104 cartes.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>JEU STANDARD</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Un jeu de 52 cartes. Il comporte 4 couleurs de cartes comptant 13 cartes chacune. Chaque couleur de cartes compte un As, 2 à 10, Valet, Dame, et Roi. Les couleurs de cartes sont généralement Trèfles, Piques, Coeurs et Carreaux. Ces couleurs de cartes peuvent être regroupées en deux couleurs, généralement noir et rouge. Les Trèfles et les Piques sont noires, les Coeurs et les Carreaux sont rouges. PySol offre la possibilité d'utiliser des jeux différents. Dans ce cas, les nouvelles couleurs et/ou couleurs de cartes sont substituées par ces modèles.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>JEU TRONQUÉ</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Un jeu de 32 cartes. Il comporte 4 couleurs de cartes comptant 8 cartes chacune. Chaque couleur de cartes compte un As, 7 à 10, Valet, Dame, et Roi.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>PILE</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Une zone désignée dans laquelle des cartes peuvent être placées.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>RANG</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Voir VALEUR.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>RÉSERVE</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Les cartes de la réserve peuvent généralement être jouées n'importe où. On ne peut généralement pas empiler de cartes dessus.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>STOCK</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Voir TALON.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>SUITE CONTINUE</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Dans certains jeux, les empilements de cartes peuvent continuer après avoir posé la carte la plus forte ou la plus faible. Dans les empilements par ORDRE CROISSANT, vous pouvez placer un As sur un Roi. Dans les empilements par ORDRE DECROISSANT, vous pouvez placer un Roi sur un AS.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>TABLEAU</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>La zone de jeu dans laquelle se déroule la plus grande partie du jeu. Accepte généralement les emplacements de cartes.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>TALON</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>Ce qu'il reste de cartes après la distribution, qui se fait généralement face cachée.</p>
|
||||
</dd>
|
||||
|
||||
<dt><b>VALEUR</b></dt>
|
||||
|
||||
<dd>
|
||||
<p>La valeur de la carte. Les cartes numérotés ont généralement la valeur associée au chiffre qui y figure. Les As peuvent prendre la plus forte ou la plus faible valeur. S'ils ont la valeur la plus forte, ils valent 1. S'ils ont la valeur la pus faible, il valent 14. J, Q et K prennent généralement les valeurs 11, 12 et 13 respectivement. Certains jeux peuvent fixer les valeurs de ces cartes à 10. Dans ce cas un As ayant la valeur la plus forte prend la valeur 11.</p>
|
||||
</dd>
|
||||
</dl>
|
8
contrib/help-pages-translation-to-french/hanafuda.html
Normal file
8
contrib/help-pages-translation-to-french/hanafuda.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
<h1>Règles générales des jeux de cartes à fleurs.</h1>
|
||||
|
||||
<p>
|
||||
Certaines caractéristiques sont communes à tous les jeux se jouant avec des cartes de Hanafuda. Tous se jouent avec un ou plusieurs jeux à fleurs asiatiques. On trouve ce jeu dans de nombreuse régions du Pacifique, ainsi qu'à Hawaii. Il comprend 12 couleurs de cartes comptant 4 cartes chacune. Les couleurs de cartes sont associées aux 12 mois de l'année. Pour une bonne explication de ce que sont les couleurs de cartes, visitez le<a href="http://hanafubuki.org/">site Hanafuda et Kabufuda de Graham Leonard</a>.
|
||||
|
||||
<p>
|
||||
La plupart des jeux de cartes à fleurs solitaires se jouent comme les jeux de cartes de western, à quelques différences près. Voir les <a href="general_rules.html">Règles Générales</a> pour les instructions de base sur les jeux de solitaire. Le but du jeu est généralement de déplacer toutes les cartes du tableau vers les fondations. Le plus difficile lorsqu'on découvre les cartes de Hanafuda, est de retenir quelles cartes appartiennent à quelle couleur de cartes ainsi que leurs valeurs. La valeur des couleurs de cartes est quelquefois aussi important que la valeur des cartes dans leurs suites de couleurs. Essayez de garder cette image d'aide du hanafuda afficher afin de pouvoir vous y référer an jouant.
|
||||
<img alt="" src="images/hanahelp.gif">
|
2
contrib/help-pages-translation-to-french/hexadeck.html
Normal file
2
contrib/help-pages-translation-to-french/hexadeck.html
Normal file
|
@ -0,0 +1,2 @@
|
|||
<h1>Règles générales du jeu Hex A Deck</h1>
|
||||
Le jeu Hex A Deck est similaire à quelques jeux de cartes parus au début du XXème siècle, comptant 16 cartes dans chaque couleur de cartes. Ces jeux étaient prévus pour être joués du temps ou des jeux populaires tels que le Whist, étaient joués à 5 ou 6 joueurs. Les cartes supplémentaires étaient autant de cartes en plus dans les mains de chaque joueur, ce qui rendait le jeu plus intéressant. Les Magiciens du Hex A Deck correspondent aux Jokers des jeux classiques. Le rôle principal du Magicien dans ce jeu, est de bloquer la défausse au plus mauvais moment. Soit au meilleur moment. Ils y réussissent toujours très bien. Dans les jeux utilisant des piles de couleurs alternées, ils peuvent remplacer n'importe quelle couleur. Leurs valeurs vont de 1 à 4 et ne peuvent quelquefois être placée que par ordre de valeur. Les valeurs peuvent ne pas être indiquées sur les cartes. Si c'est le cas, il existe généralement un moyen de les identifier. Leur valeur peut-être déterminée par certains éléments de comparaison visuels. Le Magicien ayant la valeur la plus élevée est le plus complet ou le plus gros, ou encore le chapeau le plus grand. Ils se placent sur leur fondation respective s'il y en a une, et par ordre décroissant. Du premier au quatrième. Dans certains cas, les Magiciens ne peuvent être retirés du tableau que quand toutes les autres cartes ont rejoint les fondations. Dans certains jeux, ils ne peuvent pas être joués. Ils sont présents pour rendre le jeu plus intéressant. Ce qui rend le jeu plus difficile. En cela, ils sont très efficaces.
|
114
contrib/help-pages-translation-to-french/howtoplay.html
Normal file
114
contrib/help-pages-translation-to-french/howtoplay.html
Normal file
|
@ -0,0 +1,114 @@
|
|||
<h1>Comment jouer à PySol</h1>
|
||||
|
||||
<h2>Utilisation de la souris</h2>
|
||||
<p>
|
||||
Bouton Gauche:
|
||||
<ul type="disc">
|
||||
<li> Déplacer les cartes
|
||||
</li><li> Cliquez sur le talon pour distribuer de nouvelles cartes.
|
||||
</li></ul>
|
||||
<p>
|
||||
Bouton Droit (ou double-clic Gauche)
|
||||
<ul type="disc">
|
||||
<li> Déplacer les cartes vers les fondations
|
||||
</li><li> Jeu rapide (si activé)
|
||||
</li></ul>
|
||||
<p>
|
||||
Bouton du Milieu (ou Ctrl+clic Droit):
|
||||
<ul type="disc">
|
||||
<li> Voir les cartes partiellement cachées
|
||||
</li></ul>
|
||||
<p>
|
||||
Ctrl+Clic Gauche:
|
||||
<ul type="disc">
|
||||
<li> Affiche en surbrillance toutes les cartes correspondantes.
|
||||
</li></ul>
|
||||
<p>
|
||||
Maj+Clic Gauche:
|
||||
<ul type="disc">
|
||||
<li> Affiche en surbrillance toutes les cartes de même valeur.
|
||||
</li></ul>
|
||||
|
||||
|
||||
<h2>Jeu à deux mains</h2>
|
||||
<p>
|
||||
Placer trois doigts sur '<i>A</i>' (déplacer auto), '<i>S</i>' (annuler) et '<i>D</i>' (distribuer). Vous pouvez ainsi atteindre '<i>R</i>' (répéter).
|
||||
<p>
|
||||
Les gauchers préféreront '<i>L</i>' (déplacer auto), '<i>K</i>' (annuler) et '<i>J</i>' (distribuer).
|
||||
|
||||
<!--
|
||||
<h2>Point-and-Click play</h2>
|
||||
<p>
|
||||
If you prefer Point-and-Click over Drag-and-Drop you can enable
|
||||
<i>Quick play</i> and use the right mouse button. See below.
|
||||
-->
|
||||
|
||||
<h2>Jeu automatique</h2>
|
||||
<p>
|
||||
Notez que le jeu automatique peut gâcher le jeu. Évitez de l'activer. Ou n'utilisez que le <i>retournement automatique</i>. Certains jeux désactivent automatiquement cette fonctionnalité, sinon ils n'ont plus aucun intérêt.
|
||||
<p>
|
||||
Retourner automatiquement
|
||||
<ul type="disc">
|
||||
<li> Retourne automatiquement toutes les cartes.
|
||||
</li></ul>
|
||||
Déplacement automatiquement
|
||||
<ul type="disc">
|
||||
<li> Déplace automatiquement les cartes vers les fondations.
|
||||
</li></ul>
|
||||
Distribuer automatiquement
|
||||
<ul type="disc">
|
||||
<li> Distribue automatiquement les cartes à la défausse si elle est vide.
|
||||
</li></ul>
|
||||
Jeu rapide
|
||||
<ul type="disc">
|
||||
<li> Utilisez le bouton droit de la souris pour déplacer rapidement les piles de cartes. Ce système n'est pas très intuitif, il n'utilise pas le système d'indice.
|
||||
</li></ul>
|
||||
|
||||
|
||||
<h2>L'animation est trop lente...</h2>
|
||||
<p>
|
||||
Malheureusement, il manque un concept de sprite à Tcl/Tk toolkit, ce qui provoque (double-buffer invisible), beaucoup de répétition de dessin lors du déplacement des cartes.
|
||||
<p>
|
||||
Désactiver l'<i>ombre des cartes</i>, l'<i>ombrage des mouvements possibles</i>, la mosaïque d'arrière-plan de table et les sons améliorera l'affichage.
|
||||
|
||||
|
||||
<h2>Les arrière-plans de table sont de mauvaise qualité</h2>
|
||||
<p>
|
||||
Ils ne doivent être activés qu'en mode couleurs vraies - sinon la qualité sera mauvaise en raison du tramage.
|
||||
<p>
|
||||
Vous pouvez ajouter vos propres mosaïques d'arrière-plan. Pour ce faire, copiez les images dans le répertoire <i>data/tiles</i> ou dans <i>~/.PySolFC/tiles</i> de votre répertoire personnel.
|
||||
<!-- They must be in GIF or PPM format. -->
|
||||
|
||||
|
||||
<h2>Notes à propos du système de score</h2>
|
||||
<p>
|
||||
<ul type="disc">
|
||||
<li> La prise en compte des scores commence après le premier mouvement. Même si vous annulez tous les mouvements, les scores ne sera pas annulé.
|
||||
</li><li> Vous perdrez la partie si vous utilisez un indice ou si vous démarrer la démo.
|
||||
</li><li> Vous pouvez recommencer à tout moment pour avoir une chance supplémentaire de gagner.
|
||||
</li><li> Si vous ne voulez pas enregistrer le score d'un jeu perdu, vous pouvez temporairement modifiez les paramètres du joueur.
|
||||
</li><li> Les parties chargées ne comptent pas.
|
||||
</li><li> Si vous gagnez une partie sans utiliser <i>Annuler</i>, <i>Jeu rapide</i> ni aucune des autres fonctions d'assistance, vous recevrez une récompense spéciale.
|
||||
<!--
|
||||
<li> There are no score values in PySol - you win a game, or you lose it.
|
||||
And don't even think about asking me to implement this nonsense - get
|
||||
a nice pinball game if you're a highscore freak...
|
||||
-->
|
||||
</li><li> Enfin, gardez toujours à l'esprit que ceci est un jeu de <b>Patience</b>. Détendez-vos et amusez-vous.
|
||||
</li></ul>
|
||||
|
||||
|
||||
<h2>Raccourcis clavier non-documentés</h2>
|
||||
<ul type="disc">
|
||||
<li> <i>Space</i> - Distribuer
|
||||
</li><li> <i>S</i> - Annuler
|
||||
</li><li> <i>Retour arrière</i> - Annuler
|
||||
</li><li>
|
||||
<i>Ctrl-A</i> - Déplacement + Retournement automatique
|
||||
</li><li> <i>Ctrl-B</i> - Changer l'arrière-plan des cartes
|
||||
</li><li> <i>Ctrl-H</i> - Afficher le classement interne en donnant un indice
|
||||
</li><li> <i>Ctrl-I</i> - Changer de mosaïque de table
|
||||
</li><li> <i>Ctrl-N</i> - Débuter une nouvelle partie avec le numéro de jeu suivant
|
||||
</li><li> <i>Ctrl-P</i> - Modifier le nom du joueur
|
||||
</li><li> <i>Ctrl-U</i> - Jouer la musique suivante
|
||||
</li></ul>
|
32
contrib/help-pages-translation-to-french/index.html
Normal file
32
contrib/help-pages-translation-to-french/index.html
Normal file
|
@ -0,0 +1,32 @@
|
|||
<h1>PySol - une collection de jeux de solitaire</h1>
|
||||
|
||||
<p> <a href="intro.html">Introduction</a>
|
||||
<p> <a href="install.html">Installation</a>
|
||||
<p> <a href="howtoplay.html">Comment jouer</a>
|
||||
|
||||
<h2>Règles</h2>
|
||||
<ul>
|
||||
<li> <a href="glossary.html">Glossaire</a>
|
||||
</li><li> <a href="general_rules.html">Règles générales</a>
|
||||
</li><li> <a href="rules.html">Règles individuelles des jeux</a>
|
||||
</li><li> <a href="rules_alternate.html">Noms alternatifs</a>
|
||||
</li></ul><!-- <p> <a href="news.html">What's new ?</a> -->
|
||||
|
||||
|
||||
<p> <a href="license.html">Licence de PySol</a>
|
||||
<p>
|
||||
<hr>
|
||||
|
||||
<p> Visitez le <a href="http://pysolfc.sourceforge.net/">site officiel de PySolFC</a>.
|
||||
<!--
|
||||
<p>
|
||||
Copyright (C) 1998-2003 by <a href="mailto:markus@oberhumer.com">Markus
|
||||
F.X.J. Oberhumer</a>.<br>
|
||||
Copyright (C) 2003 by Mt. Hood Playing Card Co.<br>
|
||||
Copyright (C) 2005 by <a href="mailto:skomoroh@gmail.com">Skomoroh</a>.<br>
|
||||
All Rights Reserved.
|
||||
-->
|
||||
|
||||
<p>
|
||||
PySol est distribué sous la licence
|
||||
<a href="license.html">GNU General Public Licence</a>.
|
32
contrib/help-pages-translation-to-french/install.html
Normal file
32
contrib/help-pages-translation-to-french/install.html
Normal file
|
@ -0,0 +1,32 @@
|
|||
<h1>Installation</h1>
|
||||
<p>
|
||||
Le programme étant un script Pyrhon, il n'est pas nécessaire de le compiler. Il suffit de le lancer.
|
||||
<p>
|
||||
PySol nécessite Python 2.3 et Tcl/Tk 8.4 ou supérieur. Tous deux peuvent être téléchargés librement pour les plateformes Unix, Windows et Macintosh.
|
||||
<p>
|
||||
PySol est un logiciel libre et <i>Open Source</i> distribué sous la licence
|
||||
<a href="license.html">GNU General Public Licence</a>.
|
||||
|
||||
|
||||
<h2>Windows 95/98/ME/NT/2000</h2>
|
||||
|
||||
PySol est distribué sous la forme d'un fichier d’installation autonome, il n'a besoin d'aune installation supplémentaire.
|
||||
<p>
|
||||
Su vous souhaitez modifier le code source de PySol ou écrire vos propres programmes en Python, vous pouvez télécharger le système de développement à l'adresse <a href="http://www.python.org/download/download_windows.html">http://www.python.org/download/download_windows.html</a>.
|
||||
|
||||
|
||||
<h2>Unix</h2>
|
||||
|
||||
En principe, votre système est fourni avec Python et Tcl/Tk.<br> Sinon visitez <a href="http://www.python.org/download/">http://www.python.org/download/</a> pour récupérer le code source.
|
||||
<p>
|
||||
Il existe également des paquets installables pour toutes les distributions les plus courantes de Linux, FreeBSD et HPUX.
|
||||
|
||||
|
||||
<h2>Macintosh</h2>
|
||||
|
||||
Des fichiers d'installation autonomes sont disponibles pour Python et Tcl/Tk à l'adresse<br> <a href="http://www.python.org/download/download_mac.html">http://www.python.org/download/download_mac.html</a>
|
||||
<p>
|
||||
N'ayant pas accès à une machine Mac, tous les commentaires concernant l'installation et l'apparence sont les bienvenus. Le "Portage' de X11 à Windows n'a nécessité que quelques changements mineurs dans les paramètres de police, j'espère qu'il en est de même sous Mac.
|
||||
<p>
|
||||
[ On m'a rapporté que PySol fonctionne bien sous Mac - il suffit de placer 'pysol.py' dans l'interpréteur Python. Il vous faudra simplement allouer beaucoup de mémoire à l'interpréteur Python. ]
|
||||
|
39
contrib/help-pages-translation-to-french/intro.html
Normal file
39
contrib/help-pages-translation-to-french/intro.html
Normal file
|
@ -0,0 +1,39 @@
|
|||
<h1>Introduction</h1>
|
||||
<p>
|
||||
Vous vous demandez peut-être "Pourquoi encore un autre jeu de solitaire". La réponse est simple...
|
||||
|
||||
<h3>Avantages de PySol</h3>
|
||||
<ul>
|
||||
<li> il contient actuellement plus de 1000 jeux de solitaire différents
|
||||
</li><li> il est basé sur moteur de solitaire extensible
|
||||
</li><li> beaucoup de jeux classiques comme le Forty Thieves, le FreeCell, le Klondike et le Spider
|
||||
</li><li> des jeux spéciaux tels que le Ganjifa, le Hanafuda, le Poker ainsi que des jeux de type Tarot
|
||||
</li><li> une interface moderne
|
||||
</li><li> de multiples style de cartes et arrière-plans
|
||||
</li><li> des mosaïques d'arrière-plan de table
|
||||
</li><li> annuler et répéter illimités
|
||||
</li><li> des marques-pages persistant
|
||||
</li><li> chargement et sauvegarde des jeux
|
||||
</li><li> des statistiques pour le joueur
|
||||
</li><li> un système d'indices pour se débloquer
|
||||
</li><li> des jeux en mode démo
|
||||
</li><li> un assistant de création de jeux de solitaire
|
||||
</li><li> il supporte les plug-ins écrits par les utilisateurs
|
||||
</li><li> des échantillons de sons et des musiques de fond
|
||||
</li><li> un navigateur d'aide HTML intégré
|
||||
</li><li> beaucoup de documentation
|
||||
</li><li> il est compatible avec tous les systèmes Unix/X11, Windows 95/98/2000/XP et Mac OSX
|
||||
</li><li> il est écrit en 100% pur Python
|
||||
</li><li> il est distribué sous licence GNU General Public Licence
|
||||
</li><li> <i>il s'agit d'un Freeware de qualité commerciale</i>
|
||||
</li></ul><!--
|
||||
<h3>Legal terms</h3>
|
||||
<p>
|
||||
PySol is Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 by <a href="mailto:markus@oberhumer.com">Markus F.X.J. Oberhumer</a>.<br>
|
||||
All Rights Reserved.
|
||||
<p>
|
||||
PySol is distributed under the terms of the
|
||||
<a href="license.html">GNU General Public License</a>.
|
||||
-->
|
||||
|
||||
|
657
contrib/help-pages-translation-to-french/license.html
Normal file
657
contrib/help-pages-translation-to-french/license.html
Normal file
|
@ -0,0 +1,657 @@
|
|||
<p align="center">
|
||||
<b>GNU GENERAL PUBLIC LICENSE</b><br>
|
||||
Version 3, 29 June 2007
|
||||
|
||||
<p>
|
||||
Copyright (C) 2007 <a href="http://fsf.org/">Free Software Foundation, Inc.</a>
|
||||
<p>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
<p align="center">
|
||||
<b>TERMS AND CONDITIONS</b>
|
||||
|
||||
<p>
|
||||
0. Definitions.
|
||||
|
||||
<p>
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
<p>
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
<p>
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
<p>
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
<p>
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
<p>
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
<p>
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
<p>
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
<p>
|
||||
1. Source Code.
|
||||
|
||||
<p>
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
<p>
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
<p>
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
<p>
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
<p>
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
<p>
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
<p>
|
||||
2. Basic Permissions.
|
||||
|
||||
<p>
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
<p>
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
<p>
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
<p>
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
<p>
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
<p>
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
<p>
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
<p>
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
<p>
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
<p>
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
<p>
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
<p>
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
<p>
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
<p>
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
<p>
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
<p>
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
<p>
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
<p>
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
<p>
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
<p>
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
<p>
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
<p>
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
<p>
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
<p>
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
<p>
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
<p>
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
<p>
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
<p>
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
<p>
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
<p>
|
||||
7. Additional Terms.
|
||||
|
||||
<p>
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
<p>
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
<p>
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
<p>
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
<p>
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
<p>
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
<p>
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
<p>
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
<p>
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
<p>
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
<p>
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
<p>
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
<p>
|
||||
8. Termination.
|
||||
|
||||
<p>
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
<p>
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
<p>
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
<p>
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
<p>
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
<p>
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
<p>
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
<p>
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
<p>
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
<p>
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
<p>
|
||||
11. Patents.
|
||||
|
||||
<p>
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
<p>
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
<p>
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
<p>
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
<p>
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
<p>
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
<p>
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
<p>
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
<p>
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
<p>
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
<p>
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
<p>
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
<p>
|
||||
14. Revised Versions of this License.
|
||||
|
||||
<p>
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
<p>
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
<p>
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
<p>
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
<p>
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
<p>
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
<p>
|
||||
16. Limitation of Liability.
|
||||
|
||||
<p>
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
<p>
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
<p>
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
<p align="center">
|
||||
<b>END OF TERMS AND CONDITIONS</b>
|
221
contrib/help-pages-translation-to-french/news.html
Normal file
221
contrib/help-pages-translation-to-french/news.html
Normal file
|
@ -0,0 +1,221 @@
|
|||
<pre>
|
||||
==================================================================
|
||||
User visible changes for PySol - a solitaire game collection
|
||||
==================================================================
|
||||
|
||||
Changes in 4.82 (02 Sep 2003, 202 games)
|
||||
* support Python 2.3
|
||||
- a number of small bug fixes
|
||||
+ stay tuned for Pysol 5 with *lots* of improvements :-)
|
||||
|
||||
Changes in 4.81 (24 Jun 2002, 202 games)
|
||||
* adapted for new pysol-sound-server 3.00
|
||||
- fixed Spider-type games
|
||||
|
||||
Changes in 4.80 (28 Nov 2001, 202 games)
|
||||
* support Python 2.2
|
||||
|
||||
Changes in 4.73 (28 Sep 2001, 202 games)
|
||||
- fixed rules of Irmgard
|
||||
- a number of other bug fixes
|
||||
|
||||
Changes in 4.72 (31 May 2001, 202 games)
|
||||
- fixed a problem when using hints in Black Hole
|
||||
|
||||
Changes in 4.71 (20 Apr 2001, 202 games)
|
||||
* improved dynamic scrollbar handling
|
||||
* support both Python 1.5, Python 2.0 and Python 2.1 within one package
|
||||
|
||||
Changes in 4.70 (05 Mar 2001, 202 games)
|
||||
* 1 new game
|
||||
* added dynamic scrollbars
|
||||
* support both Python 1.5 and Python 2.0 within one package
|
||||
* fixed some minor problems
|
||||
|
||||
Changes in 4.60 (02 Aug 2000, 201 games)
|
||||
* 6 new games
|
||||
* added persistent bookmarks
|
||||
* implemented smart playing that keeps the redo history
|
||||
* new statistics dialog featuring real 3D bar charts
|
||||
- Windows: fixed a problem where the sound could cause crashes
|
||||
- corrected a number of game rules and descriptions
|
||||
|
||||
Changes in 4.50 (11 Jun 2000, 195 games)
|
||||
* added support for small toolbar icons
|
||||
* added "Alternate Names" to the game selection dialog
|
||||
* improved the sound dialog
|
||||
- moved the Mahjongg games to the new PyJongg package
|
||||
|
||||
Changes in 4.41 (30 May 2000, 195 games)
|
||||
* 6 new games
|
||||
- Windows: avoid loading incompatible DLLs from the system directory
|
||||
|
||||
Changes in 4.30 (23 May 2000, 189 games)
|
||||
* 6 new games
|
||||
- fixed an internal error in Grasshopper and Double Grasshopper
|
||||
- corrected rules of Penguin
|
||||
|
||||
Changes in 4.20 (27 Apr 2000, 183 games)
|
||||
* 14 new games, including HexADeck and Memory type variants
|
||||
* added a "Recent games" menubar entry
|
||||
* improved statistics dialog
|
||||
- really fixed the detection of Straights in Poker type games
|
||||
- fixed a problem when changing the card background
|
||||
|
||||
Changes in 4.10 (18 Apr 2000, 169 games)
|
||||
- fixed a memory leak
|
||||
|
||||
Changes in 4.00 (12 Apr 2000, 169 games)
|
||||
* PySol now plays Tarock type games
|
||||
* display a floating "Demo" logo while playing demo games
|
||||
* options are now saved automatically at program exit
|
||||
- Poker type games: cards for a Straight can now be in any sequence
|
||||
- fixed a scoring problem in Casino Klondike and Vegas Klondike
|
||||
|
||||
Changes in 3.40 (12 Feb 2000, 161 games)
|
||||
* 3 new games
|
||||
* updated the pysol-sound-server
|
||||
- fixed a problem with winning in Golf type games
|
||||
- some other minor fixes
|
||||
|
||||
Changes in 3.30 (26 Jan 2000, 158 games)
|
||||
* 7 new games
|
||||
* converted the pysol-sound-server into a Python extension module
|
||||
|
||||
Changes in 3.21 (21 Jan 2000, 151 games)
|
||||
* 2 new games
|
||||
* updated the pysol-sound-server
|
||||
- Windows: added the missing PyWinTypes15.dll to the setup file
|
||||
|
||||
Changes in 3.20 (18 Jan 2000, 149 games)
|
||||
* added 8 Hanafuda type games (Oonsoo, Pagoda, MatsuKiri, ...)
|
||||
* added 2 Poker type games (Poker Shuffle, Poker Square)
|
||||
* added 13 other new games (Der Katzenschwanz, Perpetual Motion,
|
||||
Die Schlange, Three Shuffles and a Draw, Vegas Klondike, ...)
|
||||
* background music is supported under Win32 as well
|
||||
- corrected redeal rules of La Belle Lucie and Trefoil
|
||||
- corrected rules of Aces Up
|
||||
|
||||
Changes in 3.10 (21 Dec 1999, 126 games)
|
||||
* 17 new games
|
||||
* new sound support (including background MP3 and MOD music under Unix)
|
||||
* added a playable preview dialog (yes, you can play games there :-)
|
||||
* nice cardset and table-tile select dialogs
|
||||
* added "Hold and quit" to continue a game on next start
|
||||
- quite a number of bug and feature fixes
|
||||
|
||||
Changes in 3.00 (04 Nov 1999, 111 games)
|
||||
* bought a new solitaire book and implemented 67 new games :-)
|
||||
* added a menubar entry for popular games
|
||||
* new assist function: highlight all cards with the same rank
|
||||
(shift-click the left mouse button)
|
||||
* added images for the Talon redeal state
|
||||
* FreeCell game numbers are now compatible to the FreeCell FAQ
|
||||
* added a "Next number" button to the game number dialog
|
||||
* improved statistics and log views
|
||||
* the bundled version now ships as pre-compiled Python bytecode
|
||||
because it loads faster and uses much less memory
|
||||
- corrected some layout problems
|
||||
|
||||
Changes in 2.99 (13 Oct 1999, 44 games)
|
||||
* 1 new game: Lara's Game
|
||||
* re-enabled the relaxed game variants
|
||||
* due to popular demand I've finally implemented "Quick play"
|
||||
* statistics and logs can be exported to a file
|
||||
* a huge number of other improvements
|
||||
- saved games are not compatible with previous versions
|
||||
- some changes in key and mouse bindings
|
||||
|
||||
Changes in 2.91 (23 Jun 1999, 43 games)
|
||||
- check for Python 1.5.2 at program startup
|
||||
- some other minor fixes
|
||||
|
||||
Changes in 2.90 (16 Jun 1999, 43 games)
|
||||
* added 19 new games (2 games disabled)
|
||||
* implemented a nice select-game tree dialog
|
||||
* starting a new game is noticeably faster now
|
||||
* documentation updated
|
||||
- PySol now requires Python 1.5.2
|
||||
|
||||
Changes in 2.14 (26 May 1999, 24 games)
|
||||
- fixed rules of Calculation which got broken in 2.02
|
||||
|
||||
Changes in 2.13 (13 May 1999, 24 games)
|
||||
- fixed a small bug in "Select game by number..."
|
||||
|
||||
Changes in 2.12 (20 Apr 1999, 24 games)
|
||||
- another small bug fix
|
||||
|
||||
Changes in 2.11 (07 Apr 1999, 24 games)
|
||||
- some finor fixes
|
||||
|
||||
Changes in 2.10 (11 Mar 1999, 24 games)
|
||||
* major display speed improvements
|
||||
* added support for background table tiles
|
||||
* rearranged source code to prepare for a future Gnome, KDE,
|
||||
wxWindows or JPython/Swing version
|
||||
- fixed rules of Spider and Divorce which got broken in 2.02
|
||||
|
||||
Changes in 2.02 (20 Jan 1999, 24 games)
|
||||
* 1 new game: Canfield
|
||||
* new assist function: autoplay
|
||||
* new assist function: automatic face up
|
||||
* new assist function: highlight all matching cards
|
||||
(control-click the left mouse button)
|
||||
* can change card background
|
||||
* support for timer-based animations
|
||||
* improved interaction with the window manager (X11)
|
||||
|
||||
Changes in 2.01 (21 Dec 1998, 23 games)
|
||||
* 4 new games: Eight Off, Dead King Golf, Relaxed Golf and Grandfather's Clock
|
||||
* created new package PySol-Cardsets - get it from the PySol home page
|
||||
* implemented a statusbar
|
||||
* new assist function: highlight all moveable piles
|
||||
* enabled tearoff menus under Unix
|
||||
* improved table layout with small and large cardsets
|
||||
|
||||
Changes in 2.00 (30 Nov 1998, 19 games)
|
||||
* 2 new games: Calculation and Numerica
|
||||
* implemented support for plugins - now you can easily add your own games
|
||||
* new option to automatically shade legal moves
|
||||
* added additional cardsets for low and high screen resolutions
|
||||
* major source code rearrangements
|
||||
|
||||
Changes in 1.12 (13 Oct 1998, 17 games)
|
||||
* display a progress bar during startup
|
||||
|
||||
Changes in 1.11 (09 Oct 1998, 17 games)
|
||||
* 3 new games: Big Harp, Eiffel Tower and Matriarchy
|
||||
* enhanced statistics, can change player name
|
||||
* added "Select game by number"
|
||||
* implemented tooltips
|
||||
- some fixes for Windows (vanishing menubar, problems when $HOME was
|
||||
not set, better toplevel geometry)
|
||||
- corrected rules of Ground for a Divorce
|
||||
|
||||
Changes in 1.10 (02 Oct 1998, 14 games)
|
||||
* 1 new game: Ground for a Divorce
|
||||
* added a toolbar
|
||||
* implemented shadows
|
||||
|
||||
Changes in 1.03 (26 Sep 1998, 13 games)
|
||||
* 4 new games: Spider, Relaxed Spider, Braid and Forty Thieves
|
||||
* middle mouse button (or Control-left) shows partially hidden cards
|
||||
* menus restructured
|
||||
* major source code rearrangements
|
||||
|
||||
Changes in 1.02 (16 Sep 1998, 9 games)
|
||||
* 1 new game: Picture Gallery
|
||||
* added strict-rules variants of FreeCell and Seahaven Towers
|
||||
* added a small manual page
|
||||
* improved animation speed
|
||||
|
||||
Changes in 1.01 (14 Sep 1998, 6 games)
|
||||
* 2 new games: FreeCell and Seahaven Towers
|
||||
* the Undo key is now bound both to 'z' as well as 's'
|
||||
|
||||
Changes in 1.00 (10 Sep 1998, 4 games)
|
||||
* includes 4 games: Gypsy, Irmgard, 8x8 and Klondike
|
||||
* first public release
|
||||
|
||||
</pre>
|
11
contrib/help-pages-translation-to-french/rules.html
Normal file
11
contrib/help-pages-translation-to-french/rules.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<h1>PySol - Règles des jeux</h1>
|
||||
<hr>
|
||||
|
||||
<h2>Concepts de base</h2>
|
||||
<ul>
|
||||
<li> <a href="glossary.html">Glossaire</a>
|
||||
</li><li> <a href="general_rules.html">Règles générales</a>
|
||||
</li></ul>
|
||||
<h2>Règles des jeux</h2>
|
||||
<ul>
|
||||
</ul>
|
13
contrib/help-pages-translation-to-french/rules/10x8.html
Normal file
13
contrib/help-pages-translation-to-french/rules/10x8.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
<h1>10 x 8</h1>
|
||||
Type Klondike. Deux jeux. Donnes illimitées.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
Similaire au <a href="8x8.html">8 x 8</a> avec 8 lignes et aux variantes du <a href="../hexadeck.html">Hex A Deck</a>.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Le jeu se joue comme le 8 x 8. Les combinaisons sont formées par ordre décroissant en alternant les couleurs. Les magiciens se jouent dans l'ordre de leur valeur dans le tableau, alternant rouge et noir. Chaque carte ou suite de cartes peut être déposée sur un emplacement vide. Les cartes du talon sont retournées une par une. Les cartes des fondations peuvent être replacées sur le tableau.
|
||||
<h3>Stratégie</h3>
|
||||
Essayez de libérer des emplacements.
|
21
contrib/help-pages-translation-to-french/rules/8x8.html
Normal file
21
contrib/help-pages-translation-to-french/rules/8x8.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
<h1>8 x 8</h1>
|
||||
<p>
|
||||
Type Klondike. 2 jeux. Donnes illimitées.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les huit piles de cartes dans le tableau sont toutes recouvertes d'une carte visible.
|
||||
<p>
|
||||
Les suites sont formées par ordre décroissant, en alternant les couleurs. N'importe quelle carte ou suite de cartes peut être placée sur un emplacement vide.
|
||||
<p>
|
||||
Cliquez sur le talon pour retourner une carte. Le nombre de donnes est illimité.
|
||||
<p>
|
||||
Les cartes des fondations peuvent être replacées sur le tableau.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
<p>
|
||||
Essayez de libérer des emplacements.
|
27
contrib/help-pages-translation-to-french/rules/abacus.html
Normal file
27
contrib/help-pages-translation-to-french/rules/abacus.html
Normal file
|
@ -0,0 +1,27 @@
|
|||
<h1>Abacus</h1>
|
||||
<p>
|
||||
Type Yukon. 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Une combinaison d'éléments de <a href="yukon.html">type Yukon</a> et de <a href="calculation.html">type Calculation</a>.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les quatre fondations se construisent par suite croissante de la manière suivante: La première pile en partant de l'As et en ajoutant 1. La seconde pile en partant de 2 et en ajoutant 2. La troisième pile en partant de trois et en ajoutant 3. La quatrième pile en partant de 4 et en ajoutant 4.
|
||||
<pRE>
|
||||
Trèfle: A 2 3 4 5 6 7 8 9 10 V D R
|
||||
Pique: 2 4 6 8 10 D A 3 5 7 9 V R
|
||||
Cœur: 3 6 9 D 2 5 8 V A 4 7 10 R
|
||||
Carreau: 4 8 D 3 7 V 2 6 10 A 5 9 R
|
||||
</pRE>
|
||||
<p>
|
||||
Les cartes du tableau doivent former une suite décroissante dans le sens inverse des fondations: Trèfle, en retirant 1, Pique, en retirant 2, Cœur, en retirant 3 et Carreau en retirant 4.
|
||||
<p>
|
||||
Les groupes de cartes peuvent être déplacés indépendamment. N'importe quelle carte ou suite de cartes peut être placée sur un emplacement vide.
|
||||
<p>
|
||||
Si aucun mouvement n'est possible, cliquez sur le talon. Une carte sera distribuée à chaque pile.
|
23
contrib/help-pages-translation-to-french/rules/acesup.html
Normal file
23
contrib/help-pages-translation-to-french/rules/acesup.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
<h1>Aces Up</h1>
|
||||
<p>
|
||||
Type 1 jeu de cartes. 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes, sauf les As, vers la fondation.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Déplacez les cartes de valeur plus faible d'une couleur donnée vers la fondation. L'As est la carte ayant la valeur la plus élevée.
|
||||
<p>
|
||||
Aucune carte ne peut être déplacée sur le tableau. Une carte peut être placée sur un emplacement vide.
|
||||
<p>
|
||||
Si aucun mouvement n'est possible, cliquez sur le talon. Une carte sera distribuée à chaque pile.
|
||||
|
||||
<h3>Notes</h3>
|
||||
<p>
|
||||
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.
|
||||
|
||||
<h3>Pour info</h3>
|
||||
<p>
|
||||
Ce jeu est aussi connu sous les appellations <i>Aces High</i>, <i>Drivel</i> ou <i>Idiot's Delight</i>.
|
16
contrib/help-pages-translation-to-french/rules/acesup5.html
Normal file
16
contrib/help-pages-translation-to-french/rules/acesup5.html
Normal file
|
@ -0,0 +1,16 @@
|
|||
<h1>Ace Up 5</h1>
|
||||
<p>
|
||||
Type 1 jeu de cartes. 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes, sauf les As, vers la fondation.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire à <a href="acesup.html">Aces Up</a>, avec cinq piles.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
|
@ -0,0 +1,19 @@
|
|||
<h1>Agnes Sorel</h1>
|
||||
<p>
|
||||
Type Gypsy. 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les cartes de mêmes couleurs forment une suite décroissante. Les groupes de cartes de couleurs identiques peuvent être déplacés entièrement.
|
||||
<p>
|
||||
Une carte sera distribuée à chaque pile. Il n'y a qu'une seule donne.
|
||||
<p>
|
||||
Les fondations sont construites en suite croissante, allant du Roi à l'As Les cartes déposées sur les fondations peuvent être replacées dans le tableau. Double-cliquez sur une carte du tableau pour la placer vers l'une des fondations.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
<p>
|
||||
Essayez, autant que possible, de former des suites de couleur de cartes. Essayez d'obtenir un maximum de points, ce jeu étant très difficile.
|
|
@ -0,0 +1,14 @@
|
|||
<h1>Akbar's Conquest</h1>
|
||||
Type Braid. Deux jeux. Trois donnes.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
<h3>Description rapide</h3>
|
||||
Similaire au <a href="braid.html">Braid</a> joué avec deux jeux de Mughal <a href="../ganjifa.html">Ganjifa</a>.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Le jeu se joue comme le Braid. Dans cette variante, vous avez deux cordes, dont chacune a sa corde de réserve. Les fondations sont au nombre de seize, placées aux deux extrémités. Les deux colonnes suivantes sont les huit cordes de réserve. Il y a encore deux colonnes contenant quatre réserves générales chacune. Les deux colonnes intérieures sont les deux cordes. Chaque corde reçoit seize cartes. Lorsqu'une corde de réserve se libère, la carte en haut de la corde correspondante y est déposée. Lorsque toutes les cartes d'une corde sont retirées, une carte de l'autre corde est utilisée.
|
||||
<p>
|
||||
Le jeu doit son nom à l'inventeur d'un splendide jeu de Ganija à douze couleurs. Ce jeu fût sculpté dans de l'ivoire et peint à la main par des artisans de la cour. Toutes les cartes de ce jeu ont aujourd'hui disparues.
|
||||
<h3>Stratégie</h3>
|
||||
Créez des suites où vous pouvez, après avoir tiré une carte correcte du talon. Ce type de jeu est très stratégique et demande beaucoup d'attention.
|
|
@ -0,0 +1,14 @@
|
|||
<h1>Akbar's Triumph</h1>
|
||||
Type Braid. 1 jeu. Trois donnes.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
<h3>Description rapide</h3>
|
||||
Similaire au <a href="braid.html">Braid</a> joué avec un jeu de Mughal <a href="../ganjifa.html">Ganjifa</a>.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Le jeu se joue comme le Braid. Dans cette variante, vous avez deux cordes, dont chacune a sa corde de réserve. Les fondations sont au nombre de huit, placées aux deux extrémités. Les deux colonnes suivantes sont les huit cordes de réserve. Il y a encore deux colonnes contenant quatre réserves générales chacune. Les deux colonnes intérieures sont les deux cordes. Chaque corde reçoit douze cartes. Lorsqu'une corde de réserve se libère, la carte en haut de la corde correspondante y est déposée. Lorsque toutes les cartes d'une corde sont retirées, une carte de l'autre corde est utilisée.
|
||||
<p>
|
||||
Le jeu doit son nom à l'inventeur d'un splendide jeu de Ganija à douze couleurs. Ce jeu fût sculpté dans de l'ivoire et peint à la main par des artisans de la cour. Toutes les cartes de ce jeu ont aujourd'hui disparues.
|
||||
<h3>Stratégie</h3>
|
||||
Créez des suites où vous pouvez, après avoir tiré une carte correcte du talon. Ce type de jeu est très stratégique et demande beaucoup d'attention.
|
16
contrib/help-pages-translation-to-french/rules/alaska.html
Normal file
16
contrib/help-pages-translation-to-french/rules/alaska.html
Normal file
|
@ -0,0 +1,16 @@
|
|||
<h1>Alaska</h1>
|
||||
<p>
|
||||
Type Yukon. 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire au <a href="yukon.html">Yukon</a>, à la différence que les suites peuvent être formées par ordre <b>croissant ou décroissant</b> par couleur de cartes.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
|
@ -0,0 +1,26 @@
|
|||
<h1>All in a Row</h1>
|
||||
<p>
|
||||
Type Fan 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
|
||||
Move all cards to the bottom in a single row.
|
||||
|
||||
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les cartes sont empilées dans l'ordre croissant ou décroissant de valeur sans tenir compte des couleurs ni de la couleur de cartes, en enchaînant les suites de manière circulaire, du Roi à l'As et de l'As au Roi.(
|
||||
<p>
|
||||
Aucune formation n'est possible dans le tableau. Seule la première carte de chaque pile peu être déplacée.
|
||||
<p>
|
||||
N'importe quelle carte peut être jouée en début de jeu.
|
||||
|
||||
<h3>Notes</h3>
|
||||
<p>
|
||||
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
<p>
|
||||
Planifiez votre jeu à l'avance. Un seul mauvais mouvement peu vous empêcher de gagner la partie.
|
|
@ -0,0 +1,16 @@
|
|||
<h1>American Toad</h1>
|
||||
<p>
|
||||
Type Canfield. 2 jeux. Deux donnes.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire au <a href="doublecanfield.html">Double Canfield</a>, à la différence que les cartes se rangent par couleur de cartes, les cartes sont distribuées une par une, la réserve est ouverte et il n'y a que deux donnes.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
|
@ -0,0 +1,13 @@
|
|||
<h1>Appachan's Waterfall</h1>
|
||||
Type Dashavatara Ganjifa. 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers la fondation.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
Formez des suites complètes par ordre décroissant de valeur dans le tableau, puis, déplacez-les ver la fondation par ordre croissant de valeur et par couleur de cartes. Référez-vous à la description générale du <a href="../ganjifa.html">Ganjifa</a> pour l'ordre de couleur de cartes utilisé.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Les cartes sont déplacées sur le tableau par ordre décroissant de valeur sans tenir compte de la couleur de cartes. Les cartes ne peuvent être déplacées vers la fondation que lorsqu'une suite de douze cartes est complétée et seulement par ordre croissant de couleur de cartes. L'ordre des couleurs est le suivant: Le poisson, la tortue, etc. Lorsqu'une suite de couleur peut être déplacée vers la fondation, appuyez sur (a)uto ou jouer avec la fonction Déplacer auto et les douze cartes seront déplacées dans l'ordre. Quatre cartes sont distribuées sur chacune des dix colonnes au début du jeu. Appuyez sur (d)istribuer ou cliquez sur le talon pour distribuer la série suivante de cartes. Les réserves situées de chaque côté de la fondation peuvent recevoir une carte chacune. Les cartes placées dans les réserves ne peuvent être jouées que sur les colonnes.
|
||||
<h3>Stratégie</h3>
|
||||
Essayez de rendre jouable chaque colonne avant de distribuer les cartes suivantes. Les cartes ne se rangent que par valeur, il est donc aisé d'essayer de les trier directement par couleur de cartes.
|
14
contrib/help-pages-translation-to-french/rules/ashrafi.html
Normal file
14
contrib/help-pages-translation-to-french/rules/ashrafi.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
<h1>Ashrafi</h1>
|
||||
Type Mughal Ganjifa 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
Ce jeu est similaire au <a href="freecell.html">Free Cell</a>. Les colonnes sont rangées par valeur uniquement, pas plus de douze cartes par colonne.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Sur le tableau, les cartes sont rangées par ordre décroissant de valeur, sans tenir compte de la couleur de cartes. Chaque colonne est limitée à douze cartes. Les quatre réserves situées sous les fondations peuvent recevoir une carte chacune. Les fondations se construisent par ordre croissant et par couleur de cartes, en commençant par l'As. Seuls les Mirs (rois), peuvent être déposés sur un emplacement vide.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
Essayez de libérer d'abord les As. Garder les réserves libres autant que possible. Construisez vos suites sur les Mirs, pour dégager le maximum de colonnes.
|
|
@ -0,0 +1,26 @@
|
|||
<h1>Ashta Dikapala</h1>
|
||||
<p>
|
||||
Un jeu de Moghul Ganjifa 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Ranger les huit gardiens dans l'ordre.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Ce jeu est similaire à <a href="picturegallery.html">Picture Gallery</a>. On dispose trois colonnes de jeu, une colonne contenant les cartes distribuées du talon et trois réserves acceptant une carte chacune.
|
||||
<p>
|
||||
Les cartes doivent être placées dans les trois lignes du haut comme suit:
|
||||
<ul>
|
||||
<li>La première ligne commence par un Trois et est construite par des suites incrémentées par trois.
|
||||
</li><li>La seconde, commence par un deux.
|
||||
</li><li>La troisième commence par un As.
|
||||
</li></ul>
|
||||
<p>
|
||||
Si vous libérez un espace en bas, il y sera automatiquement placé une carte du talon. Si le talon est vide, vous pouvez placer n'importe quelle carte sur un emplacement vide. Vous pouvez déplacer n'importe quelle carte du vers les cellules vides tant qu'il reste des cartes au talon. Quand le talon est vide, vous pouvez toujours encore déplacer les cartes se trouvant sur les cellules vides. Si plus aucun déplacement n'est possible, cliquez sur le talon pour distribuer une rangée de cartes.
|
||||
<p>
|
||||
Vous gagnez si toutes les suites sont rangées dans l'ordre.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
<p>
|
||||
Du fait du nombre de piles, le jeu requiert beaucoup de concentration, mais il n'est pas très difficile de réussir.
|
|
@ -0,0 +1,16 @@
|
|||
<h1>Ashwapati</h1>
|
||||
Type Mughal Ganjifa 1 jeu. Donnes illimitées.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
Ce jeu est similaire au <a href="klondike.html">Klondike</a>. Les suites sont formées en ordre décroissant et par couleur de cartes.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Sur le tableau, les cartes sont rangées par ordre décroissant de valeur, dans la même couleur de cartes. Les fondations se construisent par ordre croissant et par couleur de cartes, en commençant par l'As. N'importe quel carte ou suite de cartes peut être déposée sur un emplacement vide. Les cartes du talon sont retournées une par une. Il n'y a pas de limite au nombre de donnes. Les cartes des fondations peuvent être replacées sur le tableau.
|
||||
<p>
|
||||
Ce jeu fait partie d'une série de jeux dont les noms finissent par "pati", ce qui signifie "seigneur de". Ashwapati signifie "Lord of Horses", en français 'Seigneur des chevaux". Les noms sont les noms des couleurs de cartes d'un jeu de Ganjifa à douze couleurs.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
Déplacez les cartes vers les piles les plus basses.
|
|
@ -0,0 +1,19 @@
|
|||
<h1>Auld Lang Syne</h1>
|
||||
<p>
|
||||
Type Numerica 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les fondations se construisent par ordre croissant de valeur sans tenir compte de la couleur de cartes. Les As sont placés en début de partie.
|
||||
<p>
|
||||
Il n'y a pas de jeu sur le tableau. Les cartes sont placées directement sur les fondations et les emplacements vides ne peuvent pas être utilisés.
|
||||
<p>
|
||||
Si aucun mouvement n'est possible, cliquez sur le talon. Une carte sera distribuée à chaque pile.
|
||||
|
||||
<h3>Notes</h3>
|
||||
<p>
|
||||
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.
|
|
@ -0,0 +1,16 @@
|
|||
<h1>Baby Spiderette</h1>
|
||||
<p>
|
||||
Type Spider 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Regroupez toutes les cartes par ensemble de 13 cartes par ordre décroissant et par couleur de cartes du Roi jusqu'à l'As et placez ces ensembles sur les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire à <a href="spiderette.html">Spiderette</a>, mais un peu plus simple, car les groupes formés par <i>>valeur décroissante</i>> peuvent être déplacés.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
14
contrib/help-pages-translation-to-french/rules/badseven.html
Normal file
14
contrib/help-pages-translation-to-french/rules/badseven.html
Normal file
|
@ -0,0 +1,14 @@
|
|||
<h1>Bad Seven (Die böse Sieben)</h1>
|
||||
<p>
|
||||
Type 2 jeux de cartes. 2 paquets réduits. Deux donnes.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Ce jeu se joue avec deux jeux de cartes réduits.
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
|
@ -0,0 +1,13 @@
|
|||
<h1>Type Baker's Dozen</h1>
|
||||
<p>
|
||||
Type Baker's Dozen 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les suites sont formées par ordre décroissant, sans tenir compte de la couleur de cartes. Une seule carte peut être déplacée à la fois.
|
||||
<p>
|
||||
Les emplacements libres ne peuvent pas être utilisés. Les Rois sont placés au bas des colonnes de cartes dès le début de la partie.
|
|
@ -0,0 +1,23 @@
|
|||
<h1>Baker's Game</h1>
|
||||
<p>
|
||||
Type FreeCell 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire au <a href="freecell.html">FreeCell</a>, les suites étant formées par ordre décroissant, par couleur de cartes.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Toutes les cartes sont distribuées en début de partie. 4 cellules libres sont à votre disposition, qui peuvent recevoir chacune une carte.
|
||||
<p>
|
||||
Une carte ne peut être placée que sur une carte de la même couleur de cartes.
|
||||
<p>
|
||||
Les cartes ne peuvent être déplacées que par groupe contenant le même nombre de cartes que de cellules libres disponibles. C'est-à-dire que s'il ne reste plus que deux cellules libres, vous ne pourrez déplacer qu'un groupe de deux cartes.
|
||||
|
||||
<h3>Pour info</h3>
|
||||
<p>
|
||||
Le jeu <i>Baker's Game</i> doit son nom du mathématicien C.L. Baker et fût d'abord publié dans la colonne <i>Mathematical Games</i> de juin 1968 de Martin Gardner dans le journal <i>Scientific American</i>.
|
10
contrib/help-pages-translation-to-french/rules/balarama.html
Normal file
10
contrib/help-pages-translation-to-french/rules/balarama.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
<h1>Balarama</h1>
|
||||
Type Dashavatara Ganjifa 1 jeu. 1 donne.
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
<h3>Description rapide</h3>
|
||||
Les suites sont formées par ordre décroissant, en alternant les couleurs. Pas plus de douze par colonne. Chaque carte ou suite de cartes peut être déposée sur un emplacement vide.
|
||||
<h3>Règles</h3>
|
||||
Toutes les cartes sont distribuées aux seize colonnes en début de partie. Les sont regroupées par ordre décroissant en alternant les couleurs. Vois les règles générales du jeu de <a href="../ganjifa.html">Ganjifa</a>, pour plus de détails. Les fondations sont construites par ordre croissant et par couleur. Chaque carte ou suite de cartes peut être déposée sur un emplacement vide. Les quatre réserves peuvent recevoir une carte chacune.
|
||||
<h3>Stratégie</h3>
|
||||
Un emplacement libre peut s'avérer plus utile que les réserves. Essayez de libérer des emplacements.
|
16
contrib/help-pages-translation-to-french/rules/batsford.html
Normal file
16
contrib/help-pages-translation-to-french/rules/batsford.html
Normal file
|
@ -0,0 +1,16 @@
|
|||
<h1>Batsford</h1>
|
||||
<p>
|
||||
Type Klondike. 2 jeux. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire au <a href="doubleklondike.html">Double Klondike</a>, avec 10 colonnes, une seule donne et une réserve pouvant recevoir jusqu'à 3 Rois.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
|
@ -0,0 +1,17 @@
|
|||
<h1>Type Beleaguered Castle</h1>
|
||||
<p>
|
||||
Type Beleaguered Castle 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les As sont placés sure les fondations en début de partie.
|
||||
<p>
|
||||
Les suites sont formées par ordre décroissant, sans tenir compte de la couleur de cartes. Une seule carte peut-être déplacée à la fois et les emplacements libres ne peuvent recevoir qu'une seule carte.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
<p>
|
||||
Formez les fondations équitablement. Essayez de garder toujours, au moins un emplacement de libre.
|
|
@ -0,0 +1,29 @@
|
|||
<h1>Betsy Ross</h1>
|
||||
<p>
|
||||
Type 1 jeu de cartes. 1 jeu. 3 donnes.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire à <a href="calculation.html">Calculation</a>, utilise une défausse et 3 donnes.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les quatre fondations, situées en haut, ne sont pas jouables.
|
||||
<p>
|
||||
Les quatre fondations du bas sont formées sans tenir compte de la couleur de cartes et de la manière suivante: La première pile commence par 4, est incrémenté de 2. La troisième pile commence par 6, est incrémentée de 3. La quatrième pile commence par 8, est incrémentée de 4.
|
||||
<pRE>
|
||||
1: 2 3 4 5 6 7 8 9 10 V D R
|
||||
2: 4 6 8 10 D A 3 5 7 9 V R
|
||||
3: 6 9 D 2 5 8 V A 4 7 10 R
|
||||
4: 8 D 3 7 V 2 6 10 A 5 9 R
|
||||
</pRE>
|
||||
<p>
|
||||
Cliquez sur le talon pour retourner une carte. Il y a 3 donnes.
|
||||
|
||||
<h3>Pour info</h3>
|
||||
<p>
|
||||
Ce jeu est connu sous d'autres noms, tels que <i>Fairest</i>, <i>Four Kings</i>, <i>Musical Patience</i>, <i>Quadruple Alliance</i> ou <i>Plus Belle</i>.
|
16
contrib/help-pages-translation-to-french/rules/bigbraid.html
Normal file
16
contrib/help-pages-translation-to-french/rules/bigbraid.html
Normal file
|
@ -0,0 +1,16 @@
|
|||
<h1>Big Braid</h1>
|
||||
<p>
|
||||
Type Napoléon Trois jeux. 3 donnes.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire au jeu <a href="braid.html">Braid</a>, avec 3 jeux.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
|
@ -0,0 +1,16 @@
|
|||
<h1>Big Divorce</h1>
|
||||
<p>
|
||||
Type Spider Trois jeux. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire à <a href="groundsforadivorce.html">Grounds for a Divorce</a>, avec trois jeux et 13 piles de cartes.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
17
contrib/help-pages-translation-to-french/rules/bigeasy.html
Normal file
17
contrib/help-pages-translation-to-french/rules/bigeasy.html
Normal file
|
@ -0,0 +1,17 @@
|
|||
<h1>Big Easy</h1>
|
||||
Type Hanafuda 2 jeux. Donnes illimitées.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
Il s'agit d'une version double jeu de cartes de <a href="littleeasy.html">Little Easy</a>. Les suites sont formées en ordre décroissant et par couleur de cartes. Les fondations sont formées de cartes de rangs identiques, dans l'ordre des couleurs de cartes. Seule une carte de premier rang peut être placée sur un emplacement libre.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Les règles sont les mêmes que pour le jeu <a href="littleeasy.html">Little Easy</a>.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
Désactivez "Déplacer auto" et travaillez sur les colonnes du tableau jusqu'à ce que toutes les cartes soient ouvertes. Ces jeux semblent simples par leurs noms et par la façon d'y jouer, mais sont plus difficiles à gagner qu'ils en ont l'air.
|
||||
|
||||
<h3>Auteur</h3>
|
||||
Ce jeu et sa documentation originale sont écrits par <a href="mailto:grania@mailcity.com">T. Kirk</a>.
|
23
contrib/help-pages-translation-to-french/rules/bigharp.html
Normal file
23
contrib/help-pages-translation-to-french/rules/bigharp.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
<h1>Big Harp (Die große Harfe)</h1>
|
||||
<p>
|
||||
Type Klondike. 2 jeux. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire au <a href="doubleklondike.html">Double Klondike</a>, avec dix piles de cartes, n'importe quelle carte peut être déposée sur un emplacement vide et une seule donne.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
Les suites sont formées par ordre décroissant, en alternant les couleurs. N'importe quelle carte ou suite de cartes peut être placée sur un emplacement vide.
|
||||
<p>
|
||||
Les cartes du talon sont retournée sur la défausse, une par une. La première carte de la défausse peut être placée sur l'une des piles du tableau ou sur une des fondations. Il n'y a qu'une seule donne.
|
||||
<p>
|
||||
Les cartes des fondations peuvent être replacées sur le tableau.
|
||||
|
||||
<h3>Pour info</h3>
|
||||
<p>
|
||||
Les jeux <i>Small Harp</i> et <i>Big Harp</i> sont les versions allemandes des jeux <i>Klondike</i> et <i>Double Klondike</i>.
|
|
@ -0,0 +1,16 @@
|
|||
<h1>Big Spider</h1>
|
||||
<p>
|
||||
Type Spider Trois jeux. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Similaire au <a href="spider.html">Spider</a>, avec trois jeux de cartes et 13 piles de cartes au tableau.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
<i>[À venir]
|
||||
</i>
|
18
contrib/help-pages-translation-to-french/rules/bigsumo.html
Normal file
18
contrib/help-pages-translation-to-french/rules/bigsumo.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
<h1>Big Sumo</h1>
|
||||
Type Hanafuda 2 jeux. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
Déplacez toutes les cartes vers les fondations.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
Ce jeu est similaire au <a href="freecell.html">Free Cell</a>. Les suites du tableau sont formées de la première à la quatrième valeur par couleur de cartes et de la quatrième à la première dans les fondations. Seule une carte de premier rang peut être placée sur un emplacement libre.
|
||||
|
||||
<h3>Règles</h3>
|
||||
Ceci est une version à deux jeux de cartes du <a href="sumo.html">Sumo</a>. Les suites sont formées par ordre décroissant de valeur dans le tableau et par ordre croissant dans les fondations. Les cartes de troisième et quatrième rang (ordures), ne sont pas interchangeables. Seule une carte de premier rang ou une série de cartes ordonnées peuvent être placées sur un emplacement vide.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
Ne placez dans les réserves que des cartes qui peuvent en être retirées.
|
||||
|
||||
<h3>Auteur</h3>
|
||||
<p>
|
||||
Ce jeu et sa documentation originale sont écrits par <a href="mailto:grania@mailcity.com">T. Kirk</a>.
|
|
@ -0,0 +1,27 @@
|
|||
<h1>Bits n Bytes</h1>
|
||||
<p>
|
||||
Type Hex A Deck. 1 jeu. 2 donnes.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Remplissez tous les emplacements du tableau.
|
||||
|
||||
<h3>Description rapide</h3>
|
||||
<p>
|
||||
Placez sur les cases non-marquées une carte de valeur correspondante à celle placée sur la fondation et sur celle marquée d'une valeur en bit les cartes de valeurs correspondantes.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
En début de partie, la première colonne reçoit quatre cartes de valeurs différentes, une de chaque couleur de cartes, ce sont les cartes "objectif". Les deux colonnes suivantes sont les cases "octet". Elles sont recouvertes par des cartes de valeur égale à celles des cartes "objectif". Les quatre colonnes de droite sont les cases "bit". Elles sont recouvertes par de cartes de couleur identiques à elles des cartes "objectif", dont le bit significatif le plus faible correspond avec celui de la carte "objectif".
|
||||
<p>
|
||||
Les cartes du talon sont retournée sur la défausse, deux par deux. Vous avez droit à deux donnes.
|
||||
<p>
|
||||
L'unique fonction du magicien dans ce jeu, est de bloquer la défausse au mauvais moment.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
<p>
|
||||
Comme il n'y a que quatre cartes de chaque valeur, essayez d'occuper les cases "octet" en premier.
|
||||
|
||||
<h3>Auteur</h3>
|
||||
<p>
|
||||
Ce jeu et sa documentation originale sont écrits par <a href="mailto:grania@mailcity.com">T. Kirk</a> et font partie intégrante de la version officielle de PySol.
|
|
@ -0,0 +1,21 @@
|
|||
<h1>Black Hole</h1>
|
||||
<p>
|
||||
Type Fan 1 jeu. 1 donne.
|
||||
|
||||
<h3>But du jeu</h3>
|
||||
<p>
|
||||
Déplacez toutes les cartes vers la fondation.
|
||||
|
||||
<h3>Règles</h3>
|
||||
<p>
|
||||
La fondation the <i>Black Hole</i> ou "trou noir") peu se construire dans l'ordre croissant ou décroissant de valeur sans tenir compte des couleurs ni de la couleur de cartes, en enchaînant les suites de manière circulaire, du Roi à l'As et de l'As au Roi.(
|
||||
<p>
|
||||
Aucune formation n'est possible dans le tableau. Seule la carte du dessus peut être déplacée.
|
||||
|
||||
<h3>Notes</h3>
|
||||
<p>
|
||||
La fonction <i>Déplacer auto</i> est désactivée pour ce jeu.
|
||||
|
||||
<h3>Stratégie</h3>
|
||||
<p>
|
||||
Planifiez votre jeu à l'avance. Un seul mauvais mouvement peu vous empêcher de gagner la partie.
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue