Closed sotetsuk closed 2 years ago
betterproto
を使うようになったので、 from_json
や to_json
とかが使える
https://github.com/danielgtaylor/python-betterproto
@OkanoShinri
to_unicode = {
0: "\U0001F007",
1: "\U0001F008",
2: "\U0001F009",
3: "\U0001F00A",
4: "\U0001F00B",
5: "\U0001F00C",
6: "\U0001F00D",
7: "\U0001F00E",
8: "\U0001F00F",
9: "\U0001F019",
10: "\U0001F01A",
11: "\U0001F01B",
12: "\U0001F01C",
13: "\U0001F01D",
14: "\U0001F01E",
15: "\U0001F01F",
16: "\U0001F020",
17: "\U0001F021",
18: "\U0001F010",
19: "\U0001F011",
20: "\U0001F012",
21: "\U0001F013",
22: "\U0001F014",
23: "\U0001F015",
24: "\U0001F016",
25: "\U0001F017",
26: "\U0001F018",
27: "\U0001F000",
28: "\U0001F001",
29: "\U0001F002",
30: "\U0001F003",
31: "\U0001F006",
32: "\U0001F005",
33: "\U0001F004",
}
for k, v in to_unicode.items():
print(v)
print("🀄")
print("🀄︎")
異文字セレクタを使うことでだいたいの場合うまいこといった
to_unicode = {
0: "\U0001F007",
1: "\U0001F008",
2: "\U0001F009",
3: "\U0001F00A",
4: "\U0001F00B",
5: "\U0001F00C",
6: "\U0001F00D",
7: "\U0001F00E",
8: "\U0001F00F",
9: "\U0001F019",
10: "\U0001F01A",
11: "\U0001F01B",
12: "\U0001F01C",
13: "\U0001F01D",
14: "\U0001F01E",
15: "\U0001F01F",
16: "\U0001F020",
17: "\U0001F021",
18: "\U0001F010",
19: "\U0001F011",
20: "\U0001F012",
21: "\U0001F013",
22: "\U0001F014",
23: "\U0001F015",
24: "\U0001F016",
25: "\U0001F017",
26: "\U0001F018",
27: "\U0001F000",
28: "\U0001F001",
29: "\U0001F002",
30: "\U0001F003",
31: "\U0001F006",
32: "\U0001F005",
33: "\U0001F004\uFE0E",
}
for k, v in to_unicode.items():
print(v)
from rich.table import Table
from rich.console import Console
from rich import print
to_unicode = {
0: "\U0001F007",
1: "\U0001F008",
2: "\U0001F009",
3: "\U0001F00A",
4: "\U0001F00B",
5: "\U0001F00C",
6: "\U0001F00D",
7: "\U0001F00E",
8: "\U0001F00F",
9: "\U0001F019",
10: "\U0001F01A",
11: "\U0001F01B",
12: "\U0001F01C",
13: "\U0001F01D",
14: "\U0001F01E",
15: "\U0001F01F",
16: "\U0001F020",
17: "\U0001F021",
18: "\U0001F010",
19: "\U0001F011",
20: "\U0001F012",
21: "\U0001F013",
22: "\U0001F014",
23: "\U0001F015",
24: "\U0001F016",
25: "\U0001F017",
26: "\U0001F018",
27: "\U0001F000",
28: "\U0001F001",
29: "\U0001F002",
30: "\U0001F003",
31: "\U0001F006",
32: "\U0001F005",
33: "\U0001F004\uFE0E",
}
all_tiles = [v for k, v in to_unicode.items()]
console = Console()
table = Table(show_header=True, header_style="bold magenta")
table.add_column("East", justify="center")
table.add_column("South", justify="center")
table.add_column("West", justify="center")
table.add_column("North", justify="center")
table.add_row(
" ".join(all_tiles[:6]),
" ".join(all_tiles[6:12]),
" ".join(all_tiles[12:18]),
" ".join(all_tiles[18:24]),
)
table.add_row(
" ".join(all_tiles[:6]),
" ".join(all_tiles[6:12]),
" ".join(all_tiles[12:18]),
" ".join(all_tiles[18:24]),
)
table.add_row(
" ".join(all_tiles[:6]),
" ".join(all_tiles[6:12]),
" ".join(all_tiles[12:18]),
" ".join(all_tiles[18:24]),
)
table.add_row(
" ".join(all_tiles[:6]),
" ".join(all_tiles[6:12]),
" ".join(all_tiles[12:18]),
" ".join(all_tiles[18:24]),
)
console.print(table)
From #667
全体の設計方針として次の2つのパートを用意する
[1]
mjxproto.Observation
(orState
)から表示しやすく加工されたオブジェクト(例えばBoard
とする)にパースをするパート
- e.g.,
board = Board.from_proto()
[2] 上記の
Board
オブジェクトを(キレイに)表示するパート
- e.g.,
board.show()
orboard.print()
このPRでは [2] だけに集中してください。データ例としてjsonのデータも提供しましたが、
Board
オブジェトのデータはダミーで適当に用意してもらう形が好ましいです。 [1] は後でテストを用意しつつ書きますちょっと方向性が混乱してきている気がするので、方向性を決めます。
[2] も、次のパターンを考えます
- richを使う[w/ rich]/使わない[w/o rich]
- unicodeを使う[w/ unicode]/使わない[u/o unicode]
よって次の4パターンが存在
[A: w/rich, w/ unicode]
: 一番重要。これに時間を使う予定。[B: w rich, w/o unicode]
: 重要でない。[C: w/o rich, w/ unicode]
: 重要でない。[D: w/o rich, w/o unicode]
: 二番目に重要。ただし時間を使う必要はない。テスト用途で雑な可視化を確認すれば良い。ちょっとタスクの切り分けが大きくなりすぎてしまったので、 まず、このPRでDだけ実装して、僕のレビューを経てマージするようにしましょう。
まとめると、このPRで実装するパートは
- [ ] 可視化用にパースされたデータを保持するBoardクラス(名前は何でもよい)
- [ ] Boardクラスを可視化するメソッド(上記のDパターンのみ実装)
w/o rich, w/ unicode
で牌同士の間にスペースを入れて見た目を改善 (en/ja
と unicode
あるなしの4パターンの出力を貼って終了)w/ rich
のデザイン案を2つ用意するw/ rich
の手牌、捨て牌部分だけ実装してみるhttps://github.com/mjx-project/mjx/pull/667 と同じ例を用いて手牌、捨て牌部分を実装しています。
このコード辺りからPRを作っていくべきでしょうか?
方針
データの形式
いったん Observation を想定
データの例
EventHistory
が途中で終わっているデータのロードの仕方
mjx-py
のフォルダの下で作業mjx-py/mjxproto
の下で定義されている例:
main.py
仕様
リンク