サタスペ情報リスト編集ツール作成1
部活動の用事でしばらく更新できない日が続いている。
とはいえ何もしていないわけではなく、あいまあいまにちょっとPythonで遊んでた。今挑戦しているのはサタスペというTRPGの情報リスト編集ツール。Pythonだと文字列の比較とかが式一つで書けるからすっごいラク。その代わり速度が犠牲になったりするらしいのだけれど、この程度の処理なら速度もくそもないのでまあいいや。
#! /usr/bin/python # -*- coding: utf- -*- # 情報リストのクラス class Tags: # タグを定義するクラス class Tag: def __init__(self, id, rank, parent, type): self.id = id # タグのid self.rank = rank # タグの深度 self.parent = parent # タグの親タグ self.type = type # タグの種類 self.children = [] # 子タグのリスト def __init__(self): self.latest_id = 0 # id重複を避けるためのカウンタ # タグのリスト self.list = [Tags.Tag(self.latest_id, 0, None, None)] # idを検索して、そのidを持つTagインスタンスを返す。どのクラスも持たないときはNoneを返す def search(self, id): for i in self.list: if i.id == id: return i return None # Tagクラスを追加する。親idとタグの種類が引数 def add(self, parent_id, type): parent = self.search(parent_id) # 親idから親Tagインスタンスを取得 if parent == None: # idと一致するTagインスタンスがないとき return -1 # 異常終了の意 self.latest_id += 1 # id重複を避けるためのカウンタを更新 rank = parent.rank + 1 # 親タグを元に、タグの深度を決める tag = Tags.Tag(self.latest_id, rank, parent, type) self.list.append(tag) # リストにタグ追加 parent.children.append(tag) # 親タグの小タグリストにタグ追加 return 0 # 正常終了の意 # Tagインスタンスを削除する。消したいタグのidが引数 def rm(self, id): if id == 0: # ルートタグを削除しようとしたとき print u"ルートタグは削除できません" return -1 # 異常終了の意 tag = self.search(id) # 削除するTagインスタンスを取得 parent = tag.parent # あとそいつの親取得 self.list.remove(tag) # リストから削除 parent.children.remove(tag) # 親の小リストから削除 return 0 # 正常終了の意 def ls(self): print "ID\tTYPE" for i in self.list: print "%02d\t%s" % (i.id, i.type)
……とっても無駄が多い気がするが、まあ、ご愛嬌。とりあえずデータの構造はこれでいいと思うので、次はこれを木のように枝分かれさせて表示するための捜索メソッドを作る。
DXライブラリでウィンドウを表示
DXライブラリを使って、ゲームを表示するためのウィンドウを表示した。設定はDXライブラリのヘルプページをそのままやったらできた。親切。
Windows 7 はVMwareの仮想マシンなのだけれど、その環境上でDXライブラリのウィンドウをフルスクリーンモードで表示すると、OS自体はフルスクリーンの挙動を示すにも関わらず、マシンの解像度が変化しないという状態におちいった。仮想マシンでないWindowsでは正しくフルスクリーンにできたので、VMwareの設定変えたら直るかも。
このマシン上で確認できないと不便だからウィンドウモードで作っていく。最後に実機でフルスクリーン設定を作る。VMwareでもフルスクリーン機能するようにしたいなあ。
グローバル変数「int phase」の値でメニューやら、移動画面やら切り替えつるもり。switch文を使って。ほかにいい方法思いつかない。
コードは今ちょっとかじってるC++で書いていく。
メモ サタスペのリスト生成ソフト作りたい
ついさっき「今日はここまで」と投稿しておいてあれだけど、追加(書き終える頃には日が変わってた)。そもそもゲーム作ろうと考えた動機が大学で習ったプログラミングを腐らせたくなかったからだから、プログラム言語が使えれば正直なんでもいい。
そこで、今しがたもう一つプログラミングでやりたいこと思い出したのでそのメモ。俺が趣味としているTRPGタイトルの一つ、アジアンパンクTRPG「サタスペ」のゲーム仕様に「調査メモ」というものがある。
これがまーとてもややこしい仕様[*1]で、手書きでシートを埋めていくのだけれどほとんどのケースで記入がシート枠からあふれる。そこでこのシートを自動でフィル、整形するようなスクリプトを組みたいと思ったわけだ。
やることが増えていく一方で、飽きて放り出すパターンになる気がするよ……。がんばれ俺!
*1:調査してわかった情報を箇条書きで上画像の枠内に書いてゆく。わかった情報から枝葉を伸ばし、次の情報へつなげてゆく。数学の授業で樹形図を書いた経験のある人なら、想定よりも枝葉で伸びる情報数が多くなってどんどん下へと枝が延長されてゆき、最終的に枠からはみ出す姿が想像できると思う。