コンテンツにスキップ

Pythonアプリ(4):もぐらたたきを作ろう!

もぐらたたきを作ろう!

モグラ(テントくん)の画像を表示して、クリックすると消えて点が入るゲームを作ります。

素材

この画像を使ってください。他の画像でも構いません。

tentoapp-04-01.png

tentoapp-04-02.png

1. テントくんを表示する

from tentoapp import *
app = App()
app.size(600,600)
app.title = "もぐらたたき"
img = Image("warai100.png")
mog = Label(app)
mog.image = img
mog.place(200,200)
app.start()

ここでのポイントは2つあります。

(1) テントくんの画像をラベルに表示 画像は、ラベルを利用して表示します。

img = Image("warai100.png") で画像のデータを読み込み、それを mog.image = img としてラベルに割り当てます。

(2) 好きな位置にラベルを配置

今までボタンやラベルを配置するには pack() を使っていました。 pack() では自動的に上から配置されるので、正確な位置を指定することができませんでした。今回は、 place() を使って座標を指定します。

座標指定部
mog.place(200,200)

ここでは、x座標が200(左から200)、y座標が200(上から200)の位置にラベルを表示しています。ラベルの左上の角の座標が(200,200)になります。

また、それにともなってウインドウのサイズも固定しています。

Windowサイズ指定
app.size(600,600)

ここでは、ウインドウの横幅を600pxに、縦幅も600pxに固定しています。

2. テントくんをランダムに動かす

from tentoapp import *
from random import *
def move():
mog.place(randint(0,600), randint(0,600))
app.after(3000,move)
app = App()
app.size(600,600)
app.title = "もぐらたたき"
img = Image("warai100.png")
mog = Label(app)
mog.image = img
app.after(3000,move)
app.start()

モグラを定期的に動かすには、前回のストップウォッチと同じように app.after() を使います。また、ランダムな位置に出現させるために random モジュールを使います。

randomモジュールの呼び出し
from random import *

この行があることで randam(ランダム)モジュール の関数などを使用することができます。今回は、 randint() 関数を使います。 randint(0,5) のように書くと0〜5の間の整数のどれか(0,1,2,3,4,5のどれか)が返されます。 画面の大きさが600x600なので、 randint(0,600) として縦横ともに0から600のどこかに移動するようにしています。

3. たたかれたら消えるようにする

次に、テントくんをクリックしたら消えるようにします。

from tentoapp import *
from random import *
def move():
mog.place(randint(0,450), randint(0,450))
app.after(3000,move)
def click():
mog.hide()
app = App()
app.size(600,600)
app.title = "もぐらたたき"
img = Image("warai100.png")
mog = Label(app)
mog.image = img
mog.onclick = click
app.after(3000,move)
app.start()
追加部分1
def click():
mog.hide()

まず、クリックしたときに実行される関数clickを作成します。 mog.hide() でラベルmogが隠れます。

追加部分2
mog.onclick = click

ここでは、ラベルmogをクリックしたときに関数clickが呼ばれるように設定しています。

4. 点数が入るようにする

テントくんをクリックしたとき点数が入るようにします。

from tentoapp import *
from random import *
count = 0
def move():
mog.place(randint(0,450), randint(0,450))
app.after(3000,move)
def click():
global count
mog.hide()
count += 1
lb.text = "得点:" + str(count)
app = App()
app.size(600,600)
app.title = "もぐらたたき"
lb = Label(app)
lb.text = "得点:0"
lb.fontsize = 30
lb.place(0,0)
img = Image("warai100.png")
mog = Label(app)
mog.image = img
mog.onclick = click
app.after(3000,move)
app.start()

やってみよう!

1. スタートボタンで開始しよう☆

スタートボタンを作って、スタートボタンをクリックしないと始まらないようにしてください。

2. テントくんが泣くようにしよう☆

テントくんの泣き顔画像を使って、クリックされたら泣くようにしよう。

3. テントくん以外のキャラクターを出そう☆☆

テントくん以外のキャラクターも出してください。点数を変えるといいですね。

4. 出現するスピードを変えよう☆☆

点数が増えるとテントくんの出現スピードが速くなるようにしよう。

5. テントくんが同時にたくさん出るようにしよう☆☆☆(難問)

いまはテントくんが同時に一匹しか出ませんが、同時に何匹も出るようにしよう