DAY18で学習したTurtleオブジェクトをさらに応用して、
今回はタートルレースゲームを作成します。
今回の流れとしては
- ウィンドウサイズを設定する
- 複数のタートルをスタートラインに立たせる
- どのタートルが勝つか予想をinputに入力する
- レーススタート!
- ウィンドウ右端にいったタートルが勝ち
- もう一回するか聞く
- 上のすべてをdefで囲んでリピートできるようにする
こんな感じです。
では始めます。
まずはモジュールをインポート。
タートルがfoward()で進む数をランダムで指定したいので、randomも。
from turtle import Turtle, Screen
import random
ウィンドウサイズの調整
次にウィンドウサイズの調整。
screen.setup(x, y)でできる。
また、タートルの区別をするために1体ずつ違う色にしたいので、
色のリストを追加してそこから1つずつ色をとってくる動作にする。
screen = Screen()
screen.setup(500, 500)
color_list = ["orange", "red", "purple", "blue", "black", "green", "pink"]
次にゲーム部分をファンクションで作っていく。
ウィンドウサイズが500ピクセルの正方形で、タートルのサイズも考えて
最初のタートルの位置は-230, -90くらいにしておく。
そこから30ずつ上に7体くらい作ってみよう。
それをコーディングしていくとこんな感じになった。
def game_start():
x = -230
y = -90
all_turtles = []
for i in range(7):
tim = Turtle()
tim.ht()
tim.color(color_list[i])
tim.shape("turtle")
tim.penup()
tim.goto(x, y)
tim.st()
y += 30
all_turtles.append(tim)
forでタートルを定義し、初期設定を終えた後に左端に行くようなコードです。
それをall_turtlesというリストに追加してそれぞれが判別できるように入れています。
ここで、「どの色のタートルが勝つ?色をタイプして!」という入力ウィンドウを出す。
これはscreen.textinput(title="", prompt="")でできる。
user_bet = screen.textinput(title="Make Your Bet", prompt="Which turtle will win the race? Enter a color : ")
print(user_bet)
一応自分が入力した文字がわかるようにprintで記録しておく。
そして、これが入力されたらレースが始まるようにする。
if user_bet:
is_race_start = Tru
while is_race_start:
それぞれのタートルを動かすには、1体ずつforward(ランダムな数)で進ませるという方法でいく。for in ですね。
for turtle in all_turtles:
turtle.forward(random.randint(5,20))
最小で5、最大20進むランダムな数値で進むようにしています。
この辺の数値は任意で変えたらまた逆転ゴールとかあって楽しいかも笑
最終的に右端にいったらwhileはFalseにして止めるのと同時に
勝った亀の色を取得する。
右端も考慮して220にする。
横軸の数値を取得するには、xcor()でわかる。
if turtle.xcor() >= 220:
is_race_start = False
win_color = turtle.pencolor()
賭けに勝った場合と負けた場合で表示を変えたいので、
ifで入れ子にする。
if user_bet == win_color:
restart = screen.textinput(title="You Win!", prompt="Do you wanna again? y / n")
if restart == "y":
screen.clear()
game_start()
else:
return False
else:
restart = screen.textinput(title=f"You Lose! {win_color} Win!", prompt="Do you wanna again? y / n")
if restart == "y":
screen.clear()
game_start()
else:
return False
もう一回やるかの確認でy以外をタイプした場合はゲーム終了として、
return Falseを追加しました。
また、ただ単にgame_start()で繰り返すとゴールしたタートルたちが右端に残ってしまうので、
screen.clear()でいったんウィンドウをクリアしてからゲームをスタートしてます。
最終コードはこちら。
from turtle import Turtle, Screen
import random
screen = Screen()
screen.setup(500, 500)
color_list = ["orange", "red", "purple", "blue", "black", "green", "pink"]
def game_start():
x = -230
y = -90
all_turtles = []
for i in range(7):
tim = Turtle()
tim.ht()
tim.color(color_list[i])
tim.shape("turtle")
tim.penup()
tim.goto(x, y)
tim.st()
y += 30
all_turtles.append(tim)
user_bet = screen.textinput(title="Make Your Bet", prompt="Which turtle will win the race? Enter a color : ")
print(user_bet)
if user_bet:
is_race_start = True
while is_race_start:
for turtle in all_turtles:
turtle.forward(random.randint(5,30))
if turtle.xcor() >= 220:
is_race_start = False
win_color = turtle.pencolor()
if user_bet == win_color:
restart = screen.textinput(title="You Win!", prompt="Do you wanna again? y / n")
if restart == "y":
screen.clear()
game_start()
else:
return False
else:
restart = screen.textinput(title=f"You Lose! {win_color} Win!", prompt="Do you wanna again? y / n")
if restart == "y":
screen.clear()
game_start()
else:
return False
game_start()
screen.exitonclick()
Turtleでも色々楽しめますね!