* [gentoo-commits] repo/proj/guru:master commit in: games-board/rmahjong/files/, games-board/rmahjong/
@ 2020-10-25 13:52 Andrew Ammerlaan
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Ammerlaan @ 2020-10-25 13:52 UTC (permalink / raw
To: gentoo-commits
commit: ef556bcba0d3fb3451d080cdf0ce559c00ad6c72
Author: Sergey Torokhov <torokhov-s-a <AT> yandex <DOT> ru>
AuthorDate: Sun Oct 25 12:28:08 2020 +0000
Commit: Andrew Ammerlaan <andrewammerlaan <AT> riseup <DOT> net>
CommitDate: Sun Oct 25 12:35:57 2020 +0000
URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=ef556bcb
games-board/rmahjong: new package
This is attempt python3 "final" porting the game
by means of additional patches to initial py3 port.
The game is playable for me at "single player + 3 bots".
Network game process is not tested.
Menu icon for desktop entry is fetched from Kmahjongg project.
Signed-off-by: Sergey Torokhov <torokhov-s-a <AT> yandex.ru>
games-board/rmahjong/Manifest | 2 +
.../files/rmahjong-0.4_fix_python3_compat.patch | 87 +++++++
.../rmahjong/files/rmahjong-0.4_fix_tests.patch | 282 +++++++++++++++++++++
games-board/rmahjong/metadata.xml | 18 ++
games-board/rmahjong/rmahjong-0.4_p20201013.ebuild | 83 ++++++
5 files changed, 472 insertions(+)
diff --git a/games-board/rmahjong/Manifest b/games-board/rmahjong/Manifest
new file mode 100644
index 00000000..624f607c
--- /dev/null
+++ b/games-board/rmahjong/Manifest
@@ -0,0 +1,2 @@
+DIST kmahjongg_rmahjong.png 3816 BLAKE2B 8029e6c3f4eddff9d3593ad7d5615860cd3b9d9bc4b067145e2d191b8fec00f934f3752adec32db11eb7f3e31eba7d4586a2c2f005de4ded8555ec73a4f2f81f SHA512 49cb371b1260aa23bb7b341247047cf7abc59487fd75cc365c2c6f77588af7a83dfed73d7fc1845edcedb8a9b6810ac39dbecff065c3799e3fcc7195df84e67c
+DIST rmahjong-0.4_p20201013.tar.gz 1399540 BLAKE2B 9dd1c40fea7c2d93e33a7bea0e1b66912eb547c64b45bbeadd95e4234380786551005cec8bf5edc1a7e8b135e5a66b2af80b4f22d257e14aa7068ff9959cee64 SHA512 9eface62972abe37753c380af713e168d39e23f6031af08d735467669b2dd0cbe5dec40eb9e750fff675a054791a58cfad710266229c966d94c190990f63c466
diff --git a/games-board/rmahjong/files/rmahjong-0.4_fix_python3_compat.patch b/games-board/rmahjong/files/rmahjong-0.4_fix_python3_compat.patch
new file mode 100644
index 00000000..d6ad5893
--- /dev/null
+++ b/games-board/rmahjong/files/rmahjong-0.4_fix_python3_compat.patch
@@ -0,0 +1,87 @@
+diff --git a/client/client.py b/client/client.py
+--- a/client/client.py
++++ b/client/client.py
+@@ -138,10 +138,10 @@ class Mahjong:
+
+ def init_player_boxes(self, names, player_winds, score):
+ self.player_boxes = [
+- PlayerBox((50, 700), names[0], player_winds[0], int(score[0]), direction_up, (0,-80)),
+- PlayerBox((954, 50), names[1], player_winds[1], int(score[1]), direction_left, (-210, 0)),
+- PlayerBox((700, 0), names[2], player_winds[2], int(score[2]), direction_up, (0,80)),
+- PlayerBox((0, 50), names[3], player_winds[3], int(score[3]), direction_right, (80,0)) ]
++ PlayerBox((50, 700), names[0], player_winds[0], int(float(score[0])), direction_up, (0,-80)),
++ PlayerBox((954, 50), names[1], player_winds[1], int(float(score[1])), direction_left, (-210, 0)),
++ PlayerBox((700, 0), names[2], player_winds[2], int(float(score[2])), direction_up, (0,80)),
++ PlayerBox((0, 50), names[3], player_winds[3], int(float(score[3])), direction_right, (80,0)) ]
+ for widget in self.player_boxes:
+ self.gui.add_widget(widget)
+
+diff --git a/client/states.py b/client/states.py
+--- a/client/states.py
++++ b/client/states.py
+@@ -555,8 +555,8 @@ class ScoreState(RoundPreparingState):
+ results = []
+ for wind in winds:
+ name = (self.mahjong.get_player_name(wind))
+- score = (int(self.message[wind + "_score"]))
+- payment = (int(self.message[wind + "_payment"]))
++ score = (int(float(self.message[wind + "_score"])))
++ payment = (int(float(self.message[wind + "_payment"])))
+ results.append((name, score, payment))
+ results.sort(key = lambda r: r[1], reverse = True)
+ return results
+diff --git a/client/tilepainter.py b/client/tilepainter.py
+--- a/client/tilepainter.py
++++ b/client/tilepainter.py
+@@ -89,7 +89,7 @@ class TilePainter:
+ img = self.tile_images[name]
+ w = img.get_width()
+ h = img.get_height()
+- screen.blit(pygame.transform.smoothscale(img, (w/4, h/4)), position)
++ screen.blit(pygame.transform.smoothscale(img, (w//4, h//4)), position)
+
+ def draw_tile_list(self, screen, position, tile_names, space = 0):
+ for i, tile_name in enumerate(tile_names):
+diff --git a/server/botengine.py b/server/botengine.py
+index 03623f9..b128135 100644
+--- a/server/botengine.py
++++ b/server/botengine.py
+@@ -71,7 +71,7 @@ class BotEngine():
+
+ def get_tiles(self, blocking = False):
+ if self._is_next_line() or blocking:
+- return map(Tile, (self._read_line().strip().split()))
++ return [*map(Tile, (self._read_line().strip().split()))]
+ else:
+ return None
+
+diff --git a/server/eval.py b/server/eval.py
+index 042ee54..dc7e463 100644
+--- a/server/eval.py
++++ b/server/eval.py
+@@ -19,6 +19,7 @@ from tile import Pon, Chi
+ from tile import red_dragon, white_dragon, green_dragon, dragons
+ from tile import bamboos, chars, pins, all_tiles, honors
+ from copy import copy
++import functools
+
+ def is_hand_open(sets):
+ for set in sets:
+@@ -274,7 +275,7 @@ def eval_sets(pair, sets, round_wind, player_wind, last_tile, wintype):
+ # Other hands
+ for name, fn in score_functions:
+ score = fn(pair, sets)
+- if score > 0:
++ if score:
+ result.append((name, score))
+
+ # Pinfu
+@@ -304,7 +305,7 @@ def eval_sets(pair, sets, round_wind, player_wind, last_tile, wintype):
+
+
+ def sum_over_sets(sets, fn):
+- return reduce(lambda a, s: fn(s) + a, sets, 0)
++ return functools.reduce(lambda a, s: fn(s) + a, sets, 0)
+
+ def for_all_tiles_in_sets(sets, fn):
+ return for_all_sets(sets, lambda s: s.all_tiles(fn))
diff --git a/games-board/rmahjong/files/rmahjong-0.4_fix_tests.patch b/games-board/rmahjong/files/rmahjong-0.4_fix_tests.patch
new file mode 100644
index 00000000..7926e714
--- /dev/null
+++ b/games-board/rmahjong/files/rmahjong-0.4_fix_tests.patch
@@ -0,0 +1,282 @@
+diff --git a/server/test.py b/server/test.py
+--- a/server/test.py
++++ b/server/test.py
+@@ -25,7 +25,7 @@ from botengine import BotEngine
+
+
+ def tiles(strs):
+- return map(Tile, strs)
++ return [*map(Tile, strs)]
+
+
+ def chi(tile_name):
+@@ -156,52 +156,52 @@ class EvalHandTestCase(TestCase):
+ hand, sets, r = h
+ score = count_of_tiles_yaku(tiles(hand), sets, [], Tile("XX"), Tile("XX"), "Ron")
+ yaku = find_tiles_yaku(tiles(hand), sets, [], Tile("XX"), Tile("XX"), "Ron")
+- self.assert_(score == r, "Hand %i returned score %i %s hand=%s" % (hand_id, score, yaku, hand))
++ self.assertTrue(score == r, "Hand %i returned score %i %s hand=%s" % (hand_id, score, yaku, hand))
+
+ hand = [ "WE", "C2", "C3", "C4", "WN", "WN", "WN", "DR", "B9", "DR", "B8", "B7", "WE", "WE" ]
+ sets = []
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WN"), "Ron"), 2)
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WN"), "Tsumo"), 3)
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WE"), "Ron"), 2)
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 1)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WN"), "Ron"), 2)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WN"), "Tsumo"), 3)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WE"), "Ron"), 2)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 1)
+ hand = [ "WE", "DW", "DW", "DW", "C4", "C2", "C3", "DR", "B9", "DR", "B8", "B7", "WE", "WE" ]
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 2)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 2)
+ hand,sets = ([ "C4", "C5", "C6", "C7", "B7", "B8", "B9", "P2", "P3", "P4", "C4"], [kan("WS")])
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 1)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 1)
+ hand,sets = ([ "C4", "C5", "C6", "C7", "B7", "B8", "B9", "P2", "P3", "P4", "C4"], [ckan("WS")])
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 1)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WS"), "Ron"), 1)
+
+ hand = [ "WN", "B9", "B6", "WN", "B4", "B8", "B5", "B7"]
+ sets = [chi("B1"), chi("P5")]
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WW"), "Ron"), 1)
+- self.assertEquals(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WW"), "Tsumo"), 1)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WW"), "Ron"), 1)
++ self.assertEqual(count_of_tiles_yaku(tiles(hand), sets, [], Tile("WE"), Tile("WW"), "Tsumo"), 1)
+
+ def test_basic_payment(self):
+- self.assert_(compute_payment(2, 40, "Ron", Tile("WN")) == ("", 2600))
+- self.assert_(compute_payment(2, 40, "Ron", Tile("WE")) == ("", 3900))
+- self.assertEquals(compute_payment(2, 40, "Tsumo", Tile("WN")), ("", (700,1300)))
+- self.assertEquals(compute_payment(2, 40, "Tsumo", Tile("WE")), ("", (1300, 0)))
++ self.assertTrue(compute_payment(2, 40, "Ron", Tile("WN")) == ("", 2600))
++ self.assertTrue(compute_payment(2, 40, "Ron", Tile("WE")) == ("", 3900))
++ self.assertEqual(compute_payment(2, 40, "Tsumo", Tile("WN")), ("", (700,1300)))
++ self.assertEqual(compute_payment(2, 40, "Tsumo", Tile("WE")), ("", (1300, 0)))
+
+- self.assert_(compute_payment(1, 40, "Ron", Tile("WN")) == ("", 1300))
+- self.assert_(compute_payment(1, 40, "Ron", Tile("WE")) == ("", 2000))
+- self.assertEquals(compute_payment(1, 40, "Tsumo", Tile("WN")), ("", (400, 700)))
+- self.assertEquals(compute_payment(1, 40, "Tsumo", Tile("WE")), ("", (700, 0)))
++ self.assertTrue(compute_payment(1, 40, "Ron", Tile("WN")) == ("", 1300))
++ self.assertTrue(compute_payment(1, 40, "Ron", Tile("WE")) == ("", 2000))
++ self.assertEqual(compute_payment(1, 40, "Tsumo", Tile("WN")), ("", (400, 700)))
++ self.assertEqual(compute_payment(1, 40, "Tsumo", Tile("WE")), ("", (700, 0)))
+
+- self.assertEquals(compute_payment(4, 20, "Tsumo", Tile("WN")), ("", (1300, 2600)))
+- self.assertEquals(compute_payment(4, 20, "Tsumo", Tile("WE")), ("", (2600, 0)))
++ self.assertEqual(compute_payment(4, 20, "Tsumo", Tile("WN")), ("", (1300, 2600)))
++ self.assertEqual(compute_payment(4, 20, "Tsumo", Tile("WE")), ("", (2600, 0)))
+
+- self.assertEquals(compute_payment(3, 20, "Tsumo", Tile("WN")), ("", (700, 1300)))
+- self.assertEquals(compute_payment(3, 20, "Tsumo", Tile("WE")), ("", (1300, 0)))
++ self.assertEqual(compute_payment(3, 20, "Tsumo", Tile("WN")), ("", (700, 1300)))
++ self.assertEqual(compute_payment(3, 20, "Tsumo", Tile("WE")), ("", (1300, 0)))
+
+- self.assertEquals(compute_payment(5, 40, "Ron", Tile("WN")), ("Mangan", 8000))
+- self.assertEquals(compute_payment(5, 40, "Ron", Tile("WE")), ("Mangan", 12000))
+- self.assertEquals(compute_payment(5, 40, "Tsumo", Tile("WN")), ("Mangan", (2000, 4000)))
+- self.assertEquals(compute_payment(5, 40, "Tsumo", Tile("WE")), ("Mangan", (4000, 0)))
++ self.assertEqual(compute_payment(5, 40, "Ron", Tile("WN")), ("Mangan", 8000))
++ self.assertEqual(compute_payment(5, 40, "Ron", Tile("WE")), ("Mangan", 12000))
++ self.assertEqual(compute_payment(5, 40, "Tsumo", Tile("WN")), ("Mangan", (2000, 4000)))
++ self.assertEqual(compute_payment(5, 40, "Tsumo", Tile("WE")), ("Mangan", (4000, 0)))
+
+- self.assertEquals(compute_payment(13, 40, "Ron", Tile("WN")), ("Yakuman", 32000))
+- self.assertEquals(compute_payment(13, 40, "Ron", Tile("WE")), ("Yakuman", 48000))
+- self.assertEquals(compute_payment(13, 40, "Tsumo", Tile("WN")), ("Yakuman", (8000, 16000)))
+- self.assertEquals(compute_payment(13, 40, "Tsumo", Tile("WE")), ("Yakuman", (16000, 0)))
++ self.assertEqual(compute_payment(13, 40, "Ron", Tile("WN")), ("Yakuman", 32000))
++ self.assertEqual(compute_payment(13, 40, "Ron", Tile("WE")), ("Yakuman", 48000))
++ self.assertEqual(compute_payment(13, 40, "Tsumo", Tile("WN")), ("Yakuman", (8000, 16000)))
++ self.assertEqual(compute_payment(13, 40, "Tsumo", Tile("WE")), ("Yakuman", (16000, 0)))
+
+ def test_tenpai(self):
+ hands = (([ "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "P1", "P1", "P1", "WN"], [], True, ["WN"]),
+@@ -215,10 +215,10 @@ class EvalHandTestCase(TestCase):
+ ([ "P1", "P2", "P3", "DR", "DR", "DR", "B7", "B9", "WN", "WN"], [ pon("P1") ], True, ["B8"]))
+
+ for h, sets, tenpai, w in hands:
+- self.assertEquals(hand_in_tenpai(tiles(h), sets), tenpai)
++ self.assertEqual(hand_in_tenpai(tiles(h), sets), tenpai)
+ waiting = [ t.name for t in find_waiting_tiles(tiles(h), sets) ]
+ waiting.sort()
+- self.assertEquals(waiting, w)
++ self.assertEqual(waiting, w)
+
+ def test_riichi(self):
+ hands = (([ "P5", "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "P1", "P1", "P1", "WN"], [], True),
+@@ -229,7 +229,7 @@ class EvalHandTestCase(TestCase):
+ ([ "P4", "P4", "P4", "C6", "C4", "C5", "B7", "B6", "B8", "B8", "DR" ], [ ckan("WE") ], True),
+ ([ "P4", "P4", "C6", "P3", "C5", "B7", "B6", "P1", "DR", "B8", "DR" ], [ ckan("WE") ], False))
+ for h, sets, riichi in hands:
+- self.assertEquals(riichi_test(tiles(h), sets), riichi, [h,sets])
++ self.assertEqual(riichi_test(tiles(h), sets), riichi, [h,sets])
+
+ def test_singlewait(self):
+ # Last tile in the list comes last
+@@ -242,21 +242,21 @@ class EvalHandTestCase(TestCase):
+ ([ "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "P1", "P1", "P3", "P1", "P2"], [], True),
+ ([ "B1", "B2", "B3", "C8", "C8", "C8", "DW", "DW", "DW", "P4", "P4", "P1", "P2", "P3"], [], True))
+ for h, sets, singlewait in hands:
+- self.assertEquals(check_single_waiting(tiles(h), sets), singlewait)
++ self.assertEqual(check_single_waiting(tiles(h), sets), singlewait)
+
+
+ def test_score(self):
+ hand = [ "WN", "B9", "B6", "WN", "B4", "B8", "B5", "B7"]
+ sets = [chi("B1"), chi("P5")]
+ payment, scores, minipoints = compute_score(tiles(hand), sets, "Ron", ([], [ Tile("B7") ]), [], Tile("WE"), Tile("WW"))
+- self.assertEquals(payment, ('', 2000))
+- self.assertEquals(minipoints, 30)
++ self.assertEqual(payment, ('', 2000))
++ self.assertEqual(minipoints, 30)
+
+ hand = [ "C2", "C2", "C4", "C4", "C7", "C7", "B6", "B8", "B8", "C1", "C1", "WS", "WS", "B6"]
+ sets = []
+ payment, scores, minipoints = compute_score(tiles(hand), sets, "Ron", ([ Tile("C7") ], [ Tile("B5") ]), [], Tile("WS"), Tile("WW"))
+- self.assertEquals(payment, ('', 6400))
+- self.assertEquals(minipoints, 25)
++ self.assertEqual(payment, ('', 6400))
++ self.assertEqual(minipoints, 25)
+
+
+ class BotEngineTestCase(TestCase):
+@@ -272,9 +272,9 @@ class BotEngineTestCase(TestCase):
+ e.set_wall(4 * all_tiles)
+ e.question_discard()
+ action = e.get_string()
+- self.assert_(action == "Discard")
++ self.assertTrue(action == "Discard")
+ tile = e.get_tile()
+- self.assert_(tile in h)
++ self.assertTrue(tile in h)
+ finally:
+ e.shutdown()
+
+@@ -289,9 +289,9 @@ class BotEngineTestCase(TestCase):
+ e.set_wall(4 * all_tiles)
+ e.question_discard()
+ action = e.get_string()
+- self.assert_(action == "Discard")
++ self.assertTrue(action == "Discard")
+ tile = e.get_tile()
+- self.assert_(tile in h)
++ self.assertTrue(tile in h)
+ finally:
+ e.shutdown()
+
+@@ -308,7 +308,7 @@ class BotEngineTestCase(TestCase):
+ e.set_sets(sets)
+ e.question_yaku()
+ score = e.get_int()
+- self.assert_(score == r, "Hand %i returned score %i" % (hand_id, score))
++ self.assertTrue(score == r, "Hand %i returned score %i" % (hand_id, score))
+
+ finally:
+ e.shutdown()
+@@ -324,23 +324,23 @@ class BotEngineTestCase(TestCase):
+ e.set_round_wind(Tile("WE"))
+ e.set_player_wind(Tile("WN"))
+ e.question_yaku()
+- self.assertEquals(e.get_int(), 2)
++ self.assertEqual(e.get_int(), 2)
+
+ e.set_round_wind(Tile("WE"))
+ e.set_player_wind(Tile("WE"))
+ e.question_yaku()
+- self.assertEquals(e.get_int(), 2)
++ self.assertEqual(e.get_int(), 2)
+
+ e.set_round_wind(Tile("WE"))
+ e.set_player_wind(Tile("WS"))
+ e.question_yaku()
+- self.assertEquals(e.get_int(), 1)
++ self.assertEqual(e.get_int(), 1)
+
+ e.set_sets([ pon("DW") ])
+ e.set_round_wind(Tile("WE"))
+ e.set_player_wind(Tile("WS"))
+ e.question_yaku()
+- self.assertEquals(e.get_int(), 2)
++ self.assertEqual(e.get_int(), 2)
+
+ finally:
+ e.shutdown()
+@@ -357,7 +357,7 @@ class BotEngineTestCase(TestCase):
+ e.set_wall(wall)
+ e.question_discard_tiles()
+ tile_list = e.get_tiles()
+- self.assertEquals(tile_list, [Tile("B1"), Tile("B1"), Tile("B1")])
++ self.assertEqual(tile_list, [Tile("B1"), Tile("B1"), Tile("B1")])
+ finally:
+ e.shutdown()
+
+@@ -373,7 +373,7 @@ class BotEngineTestCase(TestCase):
+ e.set_wall(wall)
+ e.question_discard_tiles()
+ tile_list = e.get_tiles()
+- self.assertEquals(tile_list, [Tile("DR")])
++ self.assertEqual(tile_list, [Tile("DR")])
+ finally:
+ e.shutdown()
+
+@@ -394,12 +394,12 @@ class BotEngineTestCase(TestCase):
+ e.set_wall(wall)
+ e.question_discard_tiles()
+ tile_list = e.get_tiles()
+- self.assertEquals(tile_list, [Tile("P4")])
++ self.assertEqual(tile_list, [Tile("P4")])
+ h = tiles([ "C8", "C8", "C2", "C2", "C3", "C3", "B2", "B2", "B4", "B4", "P1", "P4", "B5", "B5" ])
+ e.set_hand(h)
+ e.question_discard_tiles()
+ tile_list = e.get_tiles()
+- self.assertEquals(tile_list, [Tile("P1")])
++ self.assertEqual(tile_list, [Tile("P1")])
+
+ wall = 3 * all_tiles
+ wall.remove(Tile("WW"))
+@@ -411,7 +411,7 @@ class BotEngineTestCase(TestCase):
+ e.set_hand(h)
+ e.question_discard_tiles()
+ tile_list = e.get_tiles()
+- self.assertEquals(tile_list, [Tile("C9")])
++ self.assertEqual(tile_list, [Tile("C9")])
+
+ finally:
+ e.shutdown()
+@@ -429,18 +429,18 @@ class BotEngineTestCase(TestCase):
+ e.question_discard()
+
+ action = e.get_string()
+- self.assert_(action == "Kan")
++ self.assertTrue(action == "Kan")
+ tile = e.get_tile()
+- self.assertEquals(tile, Tile("P9"))
++ self.assertEqual(tile, Tile("P9"))
+
+ h = tiles([ "C1", "C2", "C3", "P9", "B1", "B1", "B1", "P1", "P3", "DR", "DR" ])
+ e.set_hand(h)
+ e.set_sets([pon("P9")])
+ e.question_discard()
+ action = e.get_string()
+- self.assert_(action == "Kan")
++ self.assertTrue(action == "Kan")
+ tile = e.get_tile()
+- self.assertEquals(tile, Tile("P9"))
++ self.assertEqual(tile, Tile("P9"))
+
+
+ h = tiles([ "C1", "C2", "C3", "P9", "P9", "P9", "P9", "P7", "P8", "P1", "P3", "DR", "DR", "C5" ])
+@@ -448,9 +448,9 @@ class BotEngineTestCase(TestCase):
+ e.set_sets([])
+ e.question_discard()
+ action = e.get_string()
+- self.assert_(action == "Discard")
++ self.assertTrue(action == "Discard")
+ tile = e.get_tile()
+- self.assertEquals(tile, Tile("C5"))
++ self.assertEqual(tile, Tile("C5"))
+
+ finally:
+ e.shutdown()
diff --git a/games-board/rmahjong/metadata.xml b/games-board/rmahjong/metadata.xml
new file mode 100644
index 00000000..97c7f078
--- /dev/null
+++ b/games-board/rmahjong/metadata.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>torokhov-s-a@yandex.ru</email>
+ <name>Sergey Torokhov</name>
+ </maintainer>
+ <longdescription>
+ Riichi Mahjong is the Japanese variant to the Chinese game for four players.
+ RMahjong is the computer implementation of this game.
+
+ RMahjong allows you to play the game over a network,
+ missing players can be replaced by computer players.
+ </longdescription>
+ <upstream>
+ <remote-id type="github">spirali/rmahjong</remote-id>
+ </upstream>
+</pkgmetadata>
diff --git a/games-board/rmahjong/rmahjong-0.4_p20201013.ebuild b/games-board/rmahjong/rmahjong-0.4_p20201013.ebuild
new file mode 100644
index 00000000..28f4c28e
--- /dev/null
+++ b/games-board/rmahjong/rmahjong-0.4_p20201013.ebuild
@@ -0,0 +1,83 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{6,7,8,9} )
+
+inherit desktop python-single-r1 xdg
+
+# Tarball from initial py3 port branch:
+# https://github.com/spirali/rmahjong/tree/py3
+# At least "Furiten", "Red fives" rules aren't implemented.
+PKG_sha="119704b581e3358ecb2764bd8e208ea5b24e7695"
+
+DESCRIPTION="Riichi Mahjong, the Japanese variant of the Chinese game Mahjong for 4 players"
+HOMEPAGE="https://github.com/spirali/rmahjong"
+
+# PNG icon is taken from Kmahjongg project (GPL-2), renamed to avoid pkgs conflicts
+SRC_URI="
+ https://github.com/spirali/${PN}/archive/${PKG_sha}.tar.gz -> ${P}.tar.gz
+ https://github.com/KDE/kmahjongg/raw/master/icons/48-apps-kmahjongg.png -> kmahjongg_${PN}.png"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+
+IUSE="test"
+RESTRICT="!test? ( test )"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+S="${WORKDIR}/${PN}-${PKG_sha}"
+
+RDEPEND="
+ ${PYTHON_DEPS}
+ dev-python/pygame[X,opengl]
+ $(python_gen_cond_dep '
+ dev-python/pygame[${PYTHON_MULTI_USEDEP}]
+ dev-python/pyopengl[${PYTHON_MULTI_USEDEP}]
+ ')
+"
+DEPEND="test? ( dev-python/unittest2 )"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-0.4_fix_python3_compat.patch"
+ "${FILESDIR}/${PN}-0.4_fix_tests.patch"
+)
+
+src_prepare(){
+ default
+
+ # Disable logging as application log into directory where user access is denied
+ sed -i "/logging.basicConfig/d" "${S}/client/client.py" || die
+ sed -i "/logging.basicConfig/d" "${S}/server/server.py" || die
+ sed -i "/logging.info/d" "${S}/server/server.py" || die
+
+ echo $'#!/bin/sh\ncd '"$(python_get_sitedir)/${PN}"' && ./start.sh' > "${S}/rmahjong"
+}
+
+src_compile() {
+ # Build bots
+ cd "${S}/bot/" && emake
+}
+
+src_test() {
+ cd "${S}/server/" && python3 test.py
+}
+
+src_install() {
+ insinto "$(python_get_sitedir)/${PN}"
+ doins -r {client/,server/,start.sh}
+ fperms 755 $(python_get_sitedir)/${PN}/start.sh
+ fperms 755 $(python_get_sitedir)/${PN}/server/run_server.sh
+
+ insinto "$(python_get_sitedir)/${PN}/bot"
+ doins "bot/bot"
+ fperms 755 $(python_get_sitedir)/${PN}/bot/bot
+
+ python_optimize "${D}/$(python_get_sitedir)/${PN}/"{client,server}/*.py
+
+ dobin "rmahjong"
+ doicon -s 48 "${DISTDIR}/kmahjongg_${PN}.png"
+ make_desktop_entry "${PN}" "RMahjong" "kmahjongg_${PN}.png" "Game;BoardGame;" || die "Failed making desktop entry!"
+}
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [gentoo-commits] repo/proj/guru:master commit in: games-board/rmahjong/files/, games-board/rmahjong/
@ 2020-10-27 18:27 Andrew Ammerlaan
0 siblings, 0 replies; 2+ messages in thread
From: Andrew Ammerlaan @ 2020-10-27 18:27 UTC (permalink / raw
To: gentoo-commits
commit: 3a392ae4913e38bd7631181fff65f8711ae7396e
Author: Sergey Torokhov <torokhov-s-a <AT> yandex <DOT> ru>
AuthorDate: Tue Oct 27 04:25:27 2020 +0000
Commit: Andrew Ammerlaan <andrewammerlaan <AT> riseup <DOT> net>
CommitDate: Tue Oct 27 04:25:27 2020 +0000
URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=3a392ae4
games-board/rmahjong: Fix tests ResourceWarnings, remove unittest2 DEPEND
The inittest2 dependence is unneccessary as python3 internal unittest is used.
Update patches to fix passing float into int("") in other way.
Update test.py patch to fix numerous 'ResourceWarning's.
Signed-off-by: Sergey Torokhov <torokhov-s-a <AT> yandex.ru>
.../files/rmahjong-0.4_fix_python3_compat.patch | 50 ++++++++--------------
.../rmahjong/files/rmahjong-0.4_fix_tests.patch | 14 ++++++
games-board/rmahjong/rmahjong-0.4_p20201013.ebuild | 5 +--
3 files changed, 34 insertions(+), 35 deletions(-)
diff --git a/games-board/rmahjong/files/rmahjong-0.4_fix_python3_compat.patch b/games-board/rmahjong/files/rmahjong-0.4_fix_python3_compat.patch
index d6ad5893..62ec68e7 100644
--- a/games-board/rmahjong/files/rmahjong-0.4_fix_python3_compat.patch
+++ b/games-board/rmahjong/files/rmahjong-0.4_fix_python3_compat.patch
@@ -1,35 +1,3 @@
-diff --git a/client/client.py b/client/client.py
---- a/client/client.py
-+++ b/client/client.py
-@@ -138,10 +138,10 @@ class Mahjong:
-
- def init_player_boxes(self, names, player_winds, score):
- self.player_boxes = [
-- PlayerBox((50, 700), names[0], player_winds[0], int(score[0]), direction_up, (0,-80)),
-- PlayerBox((954, 50), names[1], player_winds[1], int(score[1]), direction_left, (-210, 0)),
-- PlayerBox((700, 0), names[2], player_winds[2], int(score[2]), direction_up, (0,80)),
-- PlayerBox((0, 50), names[3], player_winds[3], int(score[3]), direction_right, (80,0)) ]
-+ PlayerBox((50, 700), names[0], player_winds[0], int(float(score[0])), direction_up, (0,-80)),
-+ PlayerBox((954, 50), names[1], player_winds[1], int(float(score[1])), direction_left, (-210, 0)),
-+ PlayerBox((700, 0), names[2], player_winds[2], int(float(score[2])), direction_up, (0,80)),
-+ PlayerBox((0, 50), names[3], player_winds[3], int(float(score[3])), direction_right, (80,0)) ]
- for widget in self.player_boxes:
- self.gui.add_widget(widget)
-
-diff --git a/client/states.py b/client/states.py
---- a/client/states.py
-+++ b/client/states.py
-@@ -555,8 +555,8 @@ class ScoreState(RoundPreparingState):
- results = []
- for wind in winds:
- name = (self.mahjong.get_player_name(wind))
-- score = (int(self.message[wind + "_score"]))
-- payment = (int(self.message[wind + "_payment"]))
-+ score = (int(float(self.message[wind + "_score"])))
-+ payment = (int(float(self.message[wind + "_payment"])))
- results.append((name, score, payment))
- results.sort(key = lambda r: r[1], reverse = True)
- return results
diff --git a/client/tilepainter.py b/client/tilepainter.py
--- a/client/tilepainter.py
+++ b/client/tilepainter.py
@@ -67,6 +35,24 @@ index 042ee54..dc7e463 100644
def is_hand_open(sets):
for set in sets:
+@@ -97,14 +97,14 @@
+
+ if wintype == "Ron":
+ if player_wind.name == "WE":
+- return (name, round_to_base(score / 2 * 3, 100))
++ return (name, round_to_base(score // 2 * 3, 100))
+ else:
+ return (name, score)
+ else:
+ if player_wind.name == "WE":
+- return (name, (round_to_base(score / 2, 100), 0))
++ return (name, (round_to_base(score // 2, 100), 0))
+ else:
+- return (name, (round_to_base(score / 4, 100), round_to_base(score / 2, 100)))
++ return (name, (round_to_base(score // 4, 100), round_to_base(score // 2, 100)))
+
+ def quick_pons_and_kans(hand):
+ d = {}
@@ -274,7 +275,7 @@ def eval_sets(pair, sets, round_wind, player_wind, last_tile, wintype):
# Other hands
for name, fn in score_functions:
diff --git a/games-board/rmahjong/files/rmahjong-0.4_fix_tests.patch b/games-board/rmahjong/files/rmahjong-0.4_fix_tests.patch
index 7926e714..93b671db 100644
--- a/games-board/rmahjong/files/rmahjong-0.4_fix_tests.patch
+++ b/games-board/rmahjong/files/rmahjong-0.4_fix_tests.patch
@@ -1,3 +1,17 @@
+diff a/server/botengine.py b/server/botengine.py
+--- a/server/botengine.py
++++ b/server/botengine.py
+@@ -53,7 +53,10 @@
+
+ def shutdown(self):
+ self.thread.thread_quit = True
++ self.process.stdin.close()
++ self.process.stdout.close()
+ self.process.terminate()
++ self.process.wait()
+ #self._write("QUIT\n")
+ #self.join()
+
diff --git a/server/test.py b/server/test.py
--- a/server/test.py
+++ b/server/test.py
diff --git a/games-board/rmahjong/rmahjong-0.4_p20201013.ebuild b/games-board/rmahjong/rmahjong-0.4_p20201013.ebuild
index 28f4c28e..fff2446a 100644
--- a/games-board/rmahjong/rmahjong-0.4_p20201013.ebuild
+++ b/games-board/rmahjong/rmahjong-0.4_p20201013.ebuild
@@ -38,7 +38,6 @@ RDEPEND="
dev-python/pyopengl[${PYTHON_MULTI_USEDEP}]
')
"
-DEPEND="test? ( dev-python/unittest2 )"
PATCHES=(
"${FILESDIR}/${PN}-0.4_fix_python3_compat.patch"
@@ -62,7 +61,7 @@ src_compile() {
}
src_test() {
- cd "${S}/server/" && python3 test.py
+ cd "${S}/server/" && python3 test.py -v
}
src_install() {
@@ -79,5 +78,5 @@ src_install() {
dobin "rmahjong"
doicon -s 48 "${DISTDIR}/kmahjongg_${PN}.png"
- make_desktop_entry "${PN}" "RMahjong" "kmahjongg_${PN}.png" "Game;BoardGame;" || die "Failed making desktop entry!"
+ make_desktop_entry "${PN}" "RMahjong" "kmahjongg_${PN}" "Game;BoardGame;" || die "Failed making desktop entry!"
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2020-10-27 18:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-10-27 18:27 [gentoo-commits] repo/proj/guru:master commit in: games-board/rmahjong/files/, games-board/rmahjong/ Andrew Ammerlaan
-- strict thread matches above, loose matches on Subject: below --
2020-10-25 13:52 Andrew Ammerlaan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox