私は受け取ったアドバイスに従って、この質問をやり直すことにしました。コードにバグがあり、どこを修正すればよいかわかりません。バグ 1 プログラムを実行すると、ペンが立っていてもタートルが描画を開始します。BUG 2 's、7、tab' などの未定義キーが space_bar 関数をトリガーする
塗り絵
このタスクでは、図形の周りをなぞってから塗りつぶすことで、与えられた絵に色を付けることができる子供向けの塗り絵ゲームを作成します。コントロールは次のとおりです。
矢印キー - 「ブラシ」(タートル カーソル) を左、右、上、または下に一定量だけ移動します。
'z' - 最後のステップを元に戻します。
'r', 'g', 'b' - ブラシの色をそれぞれ赤、緑、青に変更します。(必要に応じてさらに多くの色を定義できますが、少なくともこれら 3 つが必要です。)
SPACE BAR - ペイント モードを切り替えます。初期モードである「移動」モードでは、「筆」(カメ)は描画せずに画面上を動き回ります。「ペイント」モードでは、ブラシが動くと色付きの線が残ります。最も重要なことは、モードが「ペイント」から「移動」に変更されると、ブラシによってトレースされた領域が色で塗りつぶされることです。
from turtle import *
from functools import partial
bgpic("Colour_A_Turkey.gif") # change this to change the picture
#control the accuracy/speed of the drawing
step_size =8
pensize(4)
penup()
# whenever spacebar is pressed the current state and next state switch values
current_state = penup
next_state = pendown
def space_bar():
global current_state, next_state
next_state()
current_state, next_state = next_state, current_state
#if the current stat is penup fill in with current colour
if current_state == penup:
end_fill()
else:
begin_fill()
onkey(space_bar, " ")
# undo do a mistake function
def mistake():
undo()
onkey(mistake, "z")
#using partial function to store the following functions
#so they can be called as arguments from a dictionary
#movement
strait = partial(fd, step_size)
reverse = partial(bk, step_size)
turn_rt = partial(rt, step_size)
turn_lf = partial(lt, step_size)
#colour
brow = partial(color, "brown")
gree = partial(color, "green")
yell = partial(color, "yellow")
oran = partial(color, "orange")
purp = partial(color, "purple")
red = partial(color, "red")
blue = partial(color, "blue")
#create a dictionary to store all the keys and there abilities
key_action = {"b" : blue, "r" : red, "p" : purp, "o" : oran,\
"y" : yell, "g" : gree, "w" : brow, "Right" : turn_rt , "Up" : strait,\
"Down" : reverse, "Left" : turn_lf, "z" : undo()}
#when a key in then above dictionary
#is pressed it's function is activated
for pressed_key, activated_key in key_action.items():
onkey(activated_key, pressed_key)
#make turtle look for key strokes with predefined function
listen()
#finish
done()