初心者がPythonで作ったゲームver1 完成!
前回のを改良して、パロディーゲームを作りました!
内容としては、落ちてくる自分のアイコンにかつらをはめます!
ゲームルール
- 10秒の間にかつらをはめてください
- 3コはめるとタイムが+2秒されます
- なるべく多くのかつらをはめてください。
ダウンロード
こちらからダウンロードできます
drive.google.com
実行環境
Python 3.7で動きます
実行結果
プログラム解説
import tkinter as tk import tkinter.messagebox import random key="" def key_down(e): #キーが押された時に行う処理 global key key=e.keysym #keysymには押されたキーの情報が入る def key_up(e): #キーが離された時に行う処理 global key key="" #キーが離された時、キーの情報を空にする tmr=100 #ゲームのタイマー=100ミリ秒=10秒 x=400 #アイコンのx座標の初期位置 y=295 #アイコンのy座標の初期位置 maxkatura=5 #降ってくるかつらの最大数 kX=[200,400,100,300,500] for i in range (0,maxkatura-1): #かつらの最大数までループさせる kX[i]=random.randint(0,55)*10 #各かつらのx座標を乱数できめる kY=[0,0,0,0,0] #かつらのy座標の初期位置 kY_zoubun=[14,7,8,10,5] score=0 def mainA(): #キー操作でキャラクターを動かす。 global x,y if key=="Left": #左のキーがおされたらキャラのx座標を-10する x=x-10 if key=="Right": #右のキーがおされたらキャラのx座標を-10する x=x+10 canvas.coords("MYCHR",x,y) #指定された座標にキャラを配置 root.after(30,mainA) #30ミリ秒ごとにmainAを呼ぶ def KATURA(): global kX,kY,score,tmr #global変数を定義 flag_hit=False #かつらがハマったかどうかの初期判定をfalseにする for i in range(0,maxkatura): kY[i]=kY[i]+kY_zoubun[i] #各かつらのy座標を計算 tagkatura="katura"+str(i) #tagkaturaの名前を生成 canvas.coords(tagkatura,kX[i],kY[i]) #生成したtagkaturaのx,y座標を指定、表示 if kY[i]==280: #かつらのy座標が280ならば if x==kX[i]: #かつらのx座標とキャラのx座標が一致したならば score=score+1 #スコア+1する if score%2==0: #2点取るごとに(スコアを2で割った余りが0ならば) if score != 0: #スコアが0点以外ならば tmr=tmr+20 #+2秒する flag_hit=True #かつらがハマったかどうかの判定をtrueにする if kY[i]>400: #かつらのy座標が400より大きくなったら kY[i]=0 #かつらのy座標を0にする kX[i]=random.randint(0,55)*10 #次のかつらのx座標を乱数で計算する lblscore["text"]= "score: "+str(score) #スコア表示 if flag_hit==True: #かつらがはまったら speed=500 #0.5秒待たせる else: speed=20 #0.02秒待たせる root.after(speed,KATURA) #指定した時間ごとにKATURAを実行させる def RTA(): global tmr,score if tmr == 0: #timerが0になったら tkinter.messagebox.showinfo("終了","おわりです") #メッセージを表示 tmr=100 #timerを100にして score=0 #スコアを0にする tmr=tmr-1 #timerを減らす lbltimer["text"]= "timer: "+str(tmr/10) #timerを表示 if tmr < 30 : #3秒きったら lbltimer["foreground"]="#ff0000" #文字の色を赤にする else: lbltimer["foreground"]="#000000" #文字の色を黒にする root.after(100,RTA) #0.1秒ごとにtimer処理を実行する root=tkinter.Tk() root.title("かつら返せ") root.bind("<KeyPress>",key_down) #keyが押された時に行う処理を指定。 root.bind("<KeyRelease>",key_up) #keyが離された時に行う処理を指定。 canvas=tkinter.Canvas(width=600,height=400,bg="lightblue") canvas.pack() img=tkinter.PhotoImage(file="kk_100.png") #画像の読み込み katuraimg=tkinter.PhotoImage(file="katura.png") #画像の読み込み canvas.create_image(x,y,image=img,tag="MYCHR") for i in range(0,maxkatura): #かつらを表示させる tagkatura="katura"+str(i) #tagkaturaの名前を生成 canvas.create_image(kX[i],kY[i],image=katuraimg,tag=tagkatura) #生成したtagkaturaのx,y座標を指定、表示 lblscore = tk.Label(text="score: "+str(score),font=("",20)) #スコアを表示(fontサイズ20) lblscore.pack() lblscore.place(x=30, y=70) #表示位置を指定 lbltimer = tk.Label(text="timer: " +str(tmr),font=("",20)) #timerを表示(fontサイズ20) lbltimer.pack() lbltimer.place(x=30, y=100) #表示位置を指定 RTA() #timerを動かす処理を実行 mainA() #キャラを動かす処理を実行 KATURA() #かつらを動かす処理を実行 # 1,2,4,5,7,8,10,14,16,20,28,35,40,56,70,140 #落ちるスピード(280)の約数
感想
かつらゲームver1が完成しました。結構わからないとこがありましたが
なんとか完成させました。もっと改良していきたいです。