LLEYTON AND LUKE MADE THIS
Yep. They sure did. In our 2022-23 Python class featuring 'Tracy the Turtle' at CodeHS, students were taught how to get Tracy to do Morse Code. However, the message was 'hard-wired' and had to be reconfigured for other messages.
Partners Lleyton and Luke wondered how we could get Tracy to adapt to any message. Brilliant question!
Their loving 'Tech Tools Guru' referred them to a p5JS project already featured here at TNT: Morse Code and they were challenged to convert the source code to Python!
Well, they did it, and here's how it was done. Watch the movie to see Tracy in action and then check out the source code! Their genius was to utilize a 'dictionary' to look up the necessary graphics sequence for each letter, converted to uppercase.
Well done, gentlemen!
Morse Code Translator Source Code
#----- Functions ----------
def hide_tracy():
penup()
setposition(250, 250)
#end hide_tracy
def intro():
stage_str = "Final"
print("=== Morse Tracy - Stage: " + stage_str + " ===")
#end intro
def initialize():
penup()
setposition(-200, 180)
#end initialize
#info fed to a function can be called: parameters or arguments
def draw_dash(d_len, colr, sz):
pensize(sz)
color(colr)
pendown()
forward(d_len)
draw_gap(.4*d_len)
#reset dash to basics
penup()
color("black")
pensize(1)
#end draw_dash
def draw_dit(r, colr):
penup()
color(colr)
#move from baseline to bottom of circle
forward(r)
right(90)
forward(r)
left(90) #now, facing east
#draws the circle with a fill
begin_fill()
circle(r)
end_fill()
draw_gap(.4*r)
penup()
color("black")
pensize(1)
left(90)
forward(r)
right(90)
forward(r)
#end draw_dit
def draw_bar(b_len, colr, sz):
#a bar is a vertical segment
#to separate the various letters
#there are MANY ways to pull this off: draw a picture on scratch paper
pensize(sz)
color(colr)
#from baseline move up half
penup()
left(90)
forward(b_len/2.0)
#draw bar
pendown()
backward(b_len)
#move back to baseline
penup()
forward(b_len/2.0)
right(90)
#end draw_bar
def draw_gap(g_len):
penup()
forward(g_len)
#end draw_gap
#--- alphabet into morse code ---
def a():
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def b():
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def c():
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def d():
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def e():
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def f():
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def g():
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def h():
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def i():
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def j():
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def k():
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def l():
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def m():
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def n():
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def o():
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def p():
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def q():
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def r():
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def s():
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def t():
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def u():
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def v():
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def w():
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def x():
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def y():
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_bar(1.2*d_len, "black", 2)
def z():
draw_dash(d_len, "purple", 4)
draw_dash(d_len, "purple", 4)
draw_dit(d_len/2.0, "green")
draw_dit(d_len/2.0, "green")
draw_bar(1.2*d_len, "black", 2)
def _():
penup()
setx(-200)
right(90)
forward(25)
left(90)
pendown()
#end alphabet into morse code
#create a dictionary
my_dict = {
'A':'.-', 'B':'-...',
'C':'-.-.', 'D':'-..', 'E':'.',
'F':'..-.', 'G':'--.', 'H':'....',
'I':'..', 'J':'.---', 'K':'-.-',
'L':'.-..', 'M':'--', 'N':'-.',
'O':'---', 'P':'.--.', 'Q':'--.-',
'R':'.-.', 'S':'...', 'T':'-',
'U':'..-', 'V':'...-', 'W':'.--',
'X':'-..-', 'Y':'-.--', 'Z':'--..',
'1':'.----', '2':'..---', '3':'...--',
'4':'....-', '5':'.....', '6':'-....',
'7':'--...', '8':'---..', '9':'----.',
'0':'-----', ', ':'--..--', '.':'.-.-.-',
'?':'..--..', '/':'-..-.', '-':'-....-',
'(':'-.--.', ')':'-.--.-'}
#Luke F did this
#slight adjustments by TTG for readability purposes
def gotletter(word):
for w in range(len(word)):
letter = word[w].upper()
print(letter),
if(letter == "A"):
a()
elif(letter == "B"):
b()
elif(letter == "C"):
c()
elif(letter == "D"):
d()
elif(letter == "E"):
e()
elif(letter == "F"):
f()
elif(letter == "G"):
g()
elif(letter == "H"):
h()
elif(letter == "I"):
i()
elif(letter == "J"):
j()
elif(letter == "K"):
k()
elif(letter == "L"):
l()
elif(letter == "M"):
m()
elif(letter == "N"):
n()
elif(letter == "O"):
o()
elif(letter == "P"):
p()
elif(letter == "Q"):
q()
elif(letter == "R"):
r()
elif(letter == "S"):
s()
elif(letter == "T"):
t()
elif(letter == "U"):
u()
elif(letter == "V"):
v()
elif(letter == "W"):
w()
elif(letter == "X"):
x()
elif(letter == "Y"):
y()
elif(letter == "Z"):
z()
elif(letter == " "):
_()
print("")
#gotletter
#----- Setup --------
rate = 0
speed(rate)
d_len = 10
#----- Main Event ---------
intro()
initialize()
gotletter("LLEYTON AND LUKE MADE THIS")
hide_tracy()
Lleyton & Luke's MC Masterpiece
Be sure to look at the source code, especially how this 'dynamic duo' used a dictionary to lookup instructions for Tracy to make each letter. Notice how the letters are being shown in the output window underneath the graphic.