現代の教養「プログラミング」
読み・書き・そろばん・プログラミング。
プログラミングは特別な技能じゃないし・・・。
近頃人気のプログラミング言語「Python」で学ぶプログラミングの入門講座。
◆楽勝のプログラミング #1
スマホで今すぐプログラミング
◆楽勝のプログラミング #2
PCプログラミング環境を作る
◆楽勝のプログラミング #3
関数とモジュールを学ぶ
◆楽勝のプログラミング #4
コマンドラインで「ヒット&ブロー」
◆楽勝のプログラミング #5
ゲーム作りで学ぶ「tkinter」①
◆楽勝のプログラミング #6
ゲーム作りで学ぶ「tkinter」②
◆楽勝のプログラミング #7
ゲーム作りで学ぶ「tkinter」③
完成したコードを。
パイソンファイル(拡張子は「.py」)として保存し、コマンドプロンプトから「python ファイル名」で実行してください。
「exe化」していないので、pythonがインストールされていないマシンでは起動できません。
##################### ### ヒット&ブロー ### ##################### ### モジュールの呼び出し ### import tkinter as Tk import randomfrom tkinter import messagebox ### 異なる4つの数字を決める ### KOTAE = random.sample(range(10),4) ### ボタンがクリックされたとき ### def BUTTON_Click(event): global NUM NUM = event.widget["text"] if NUM in range(10): NUMBER_Print() elif NUM == "CLEAR": NUMBER_Clear() elif NUM == "ENTER": NUMBER_Judge() ### キーが押されたとき ### def KEY_Press(event): global NUM NUM = event.keysym if NUM in ["0","1","2","3","4","5","6","7","8","9"]: NUMBER_Print() elif NUM == "BackSpace": NUMBER_Clear() elif NUM == "Return": NUMBER_Judge() ### 選択した数字を表示する ### KAITOU = [] KURAI = 0 def NUMBER_Print(): global NUM KAITOU.append(int(NUM)) global KURAI if KURAI == 0: NUM0.set(NUM) elif KURAI == 1: NUM1.set(NUM) elif KURAI == 2: NUM2.set(NUM) elif KURAI == 3: NUM3.set(NUM) KURAI = KURAI + 1 ### 数字をクリアする ### def NUMBER_Clear(): global KURAI KURAI = 0 NUM0.set("*");NUM1.set("*");NUM2.set("*");NUM3.set("*") KAITOU.clear() ### ヒット&ブローを判定する ### TURN = 0 def NUMBER_Judge(): HIT = 0 BLOW = 0 global KURAI if KURAI >= 4: for i in range(4): if KAITOU[i] == KOTAE[i]: HIT = HIT + 1 elif KAITOU[i] in KOTAE: BLOW = BLOW + 1 global TURN TURN = TURN + 1 KURAI = 0 NUM0.set("*");NUM1.set("*");NUM2.set("*");NUM3.set("*") # 結果を表示する KEKKA.insert("1.0"," "+str(KAITOU[0:4])+" : Hit="+str(HIT)+" Blow="+str(BLOW)+" ("+str(TURN)+"回目)"+"\n") KAITOU.clear() # ゲームクリア if HIT == 4: messagebox.showinfo("Congratulations!",str(TURN)+"回目で正解です。") exit() ### 画面作成 ### MADO = Tk.Tk() MADO.title("Hit & Blow") MADO.geometry("580x400") #フレーム1 ANSW = Tk.Frame(MADO,relief="ridge",bd=3,bg="lightblue",width=200,height=50) ANSW.place(x=10,y=10) #フレーム2 WAKU = Tk.Frame(MADO,relief="ridge",bd=3,bg="lightblue",width=200,height=320) WAKU.place(x=10,y=65) #フレーム3 HABW = Tk.Frame(MADO,relief="groove",bd=3,width=350,height=375,bg="lavender") HABW.place(x=220,y=10) #ラベル NUM0 = Tk.StringVar();NUM0.set("*") LABE = Tk.Label(ANSW,textvariable=NUM0,font=("","20"),bg="lightblue") LABE.place(x=30,y=10) NUM1 = Tk.StringVar();NUM1.set("*") LABE = Tk.Label(ANSW,textvariable=NUM1,font=("","20"),bg="lightblue") LABE.place(x=65,y=10) NUM2 = Tk.StringVar();NUM2.set("*") LABE = Tk.Label(ANSW,textvariable=NUM2,font=("","20"),bg="lightblue") LABE.place(x=100,y=10) NUM3 = Tk.StringVar();NUM3.set("*") LABE = Tk.Label(ANSW,textvariable=NUM3,font=("","20"),bg="lightblue") LABE.place(x=135,y=10) #ボタン BTN = Tk.Button(WAKU,bg="blue",text="ENTER",font=("","12"),width=17,height=2) BTN.place(x=10,y=250) BTN = Tk.Button(WAKU,bg="red",text="CLEAR",font=("","12"),width=10,height=2) BTN.place(x=70,y=190) #数字ボタン Px=[10,10,70,130,10,70,130,10,70,130] Py=[190,130,130,130,70,70,70,10,10,10] for i in range(10): BTN = Tk.Button(WAKU,bg="ivory",text=i,font=("","12"),width=4,height=2) BTN.place(x=Px[i],y=Py[i]) #結果を表示するテキスト KEKKA = Tk.Text(HABW,bg="lavender",fg="green",font=("","15")) KEKKA.pack() #ボタンをバインドする MADO.bind("<ButtonPress>",BUTTON_Click) #キーボードをバインドする MADO.bind("<KeyPress>",KEY_Press) #ウィンドウのループ MADO.mainloop()