見出し画像

【Python】Pythonista3で和同開珎クイズを作るど


和同開珎クイズってご存知です?

↑このサムネイル↑みたいな感じで、


空欄を囲む4つの漢字に繋がる漢字1文字を答えよ!

っていうフォーマットのゲームなんですけど。(説明下手)


この見た目が古銭の↓和同開珎↓に見えるから…という理由でこんな名前に。

…うん、確かに似てる。


それでこれ、構造自体は割と単純なのでPythonで再現できるんじゃないかなと。


以前、日本語の言語処理に使おうと思って作った品詞別単語dictのJSONがあった。

こいつを使って…


with open("_word.json",encoding="utf_8")as file:
	_dict=simplejson.load(file)

word=[[vi for vi in v if vi[-1]!="*" and len(vi[0])==2] for k,v in _dict.items() if "名詞" in k]

_list=[]
for i in word:
	_list=_list+i
	
while True:
	ans=random.choice(random.choice(_list)[0])
	_list=[i for i in _list if ans in i[0]]
		
	_zero,_one=[[ii for ii in _list if ii[0].index(ans)==i] for i in (0,1)]
		
		
	if len(_zero)>=2 and len(_one)>=2:
		break
	
_zero=[i[0][1] for i in random.sample(_zero,2)]

_one= [i[0][0] for i in random.sample(_one,2)]


ざっと作ったのがこちら。

別に名詞に限らなくてもいいじゃんとかいろいろ改善できる点はあるのですが、

最近全然Python記事書けてないので完成を急いじゃった。ごめんて。


ただ和同開珎クイズってあの特徴的ビジュアルあってのモノでしょう?

ってことで、一年以上ぶりにイジりますuiライブラリ


僕が今メインで使ってるiOS向けアプリ『Pythonista3』


PythonをiOSデバイス上で(オフラインでも)使える優れモノなのですが、

こいつには標準ライブラリとしてuiというモジュールが入ってまして。

コレを使うとTkinterとか覚えなくても直感的にコードをアプリ仕立てにすることができるんですよ。

さっきのコードをuiに落とし込むと↓こう↓なり…

 #coding :utf-8
import ui
import simplejson,random

with open("_word.json",encoding="utf_8")as file:
	_dict=simplejson.load(file)

word=[[vi for vi in v if vi[-1]!="*" and len(vi[0])==2] for k,v in _dict.items() if "名詞" in k]

_list=[]
for i in word:
	_list=_list+i
	
while True:
	ans=random.choice(random.choice(_list)[0])
	_list=[i for i in _list if ans in i[0]]
		
	_zero,_one=[[ii for ii in _list if ii[0].index(ans)==i] for i in (0,1)]
		
		
	if len(_zero)>=2 and len(_one)>=2:
		break
	
_zero=[i[0][1] for i in random.sample(_zero,2)]

_one= [i[0][0] for i in random.sample(_one,2)]


def wado(sender):
	global _list,_zero,_one
	
	sender.superview['_one1'].text=_one[0]
	sender.superview['_one2'].text=_one[1]
	sender.superview['_zero1'].text=_zero[0]
	sender.superview['_zero2'].text=_zero[1]

def _ans(sender):
	global ans
	inp=sender.superview['textfield1'].text
	if inp==ans:
		sender.superview['正誤'].text="正解!!"
	else:
		sender.superview['正誤'].text="残念!!"


v = ui.load_view()
v.present('sheet')


出来栄えは↓こんな感じ↓

図1:和同開珎GIF


GIFにしたらちっちゃくて見にくくなっちゃった。


図2:編導園試


おお、それっぽいそれっぽい。


図3:やった〜


正誤判定もバッチリ。

いつかこういうのを公開してみんなに遊んでもらえるようにしたいな~

ブラウザ関係全然分からんから勉強しないと。


というわけで今回はこの辺で。

もっと言語処理系のコード書くぞ~


生成された問題の数々 (挑戦してみてね)


※特に矢印などありませんが、配置としては全て

中◯

土◯

◯所

◯場

というような感じになってます。(下の例)

中土所場


部機合社


ノポスマ (漢字以外が出るの想定外だった)


青上苔辺


中広布和


さいなら〜

この記事が気に入ったらサポートをしてみませんか?