Posts: 23
Threads: 2
Joined: May 2022
To keep the ball rolling, here is my Python interpretation of one of the three programs that got this ball rolling so many years ago. Can anyone get it down to a single line?
import turtle,random
turtle.hideturtle()
turtle.colormode(255)
turtle.tracer(0,0)
turtle.setup(0.75,0.80, starty = 25)
maxx = turtle.screensize()[0] #doesn't match the actually window width for some reason
maxy = turtle.screensize()[1]
while True:
turtle.color((random.randint(0,255),random.randint(0,255),random.randint(0,255)))
turtle.width(random.randint(1,10))
x = random.randint(maxx,maxx)
y = random.randint(maxy,maxy)
turtle.goto(x,y)
turtle.update()
Posts: 23
Threads: 2
Joined: May 2022
I'm still looking forward to others contributing to the thread. Until that moment, here is another interpretation of an original entry into that contest. A sub hunt game in 24 lines. I think the next version will need graphics.
import random
print("There is a sub in your patrol area, a 10x10x10 grid numbered 09\nFlush it out by launching depth chargers. Bullseye the sub and you")
print("will be the hero of the day. Allow the sub to escape and you will\nswabbing the decks for the rest of your career.")
sub = {"x": random.randint(0,9), "y": random.randint(0,9), "depth": random.randint(0,9)}
charges, sunk = 20, False
print("You have",charges,"charges. Good luck!")
print(sub)
while charges > 0 and not sunk:
chg = {"x": int(input(" x: ")), "y": int(input(" y: ")), "depth": int(input(" depth: "))}
dist = ((sub["x"]chg["x"])**2 + (sub["y"]chg["y"])**2 + (sub["depth"]chg["depth"])**2)**0.5
if chg == sub:
print("\nA massive explosion breaks the surface. Debis of the destroyed sub floats above the bubbles.")
sunk = True
elif dist <= 4:
print("\nThe sub was rocked by the charge before slipping away\nBubbles in the water show the sub was at",sub,"\nwas rocked by the charge before slipping away\n")
sub = {"x": sub["x"] + random.randint(1,1), "y": sub["y"] + random.randint(1,1), "depth": sub["depth"] + random.randint(1,1)}
else:
print("The sub silently waits. You have",charges,"charges remaining.\n")
charges = charges  1
if sunk == True:
print("You sunk the sub. Lunch with the president and the metal of hour awaits")
else:
print("The sub escaped. Your commander hands you a mop and tells you to get started")
Posts: 23
Threads: 2
Joined: May 2022
May172022, 01:50 PM
(This post was last modified: May172022, 01:50 PM by codingCat.)
This is another classic. From the pages of Creative Computing, and the book I taught myself programming with, Games in BASIC, I present: Sine Wave:
#From the pages of Creative Computing, converted from BASIC to Python
from math import *
msg, s = "g", 1.5
while True:
s = 1.5 if s >= 7.5 else s + 1/6
msg = "Creative" if msg[1] == "g" else "Computing"
print(" "*int(51 + (50*sin(s))),msg)
Posts: 23
Threads: 2
Joined: May 2022
Mini space invaders
This one went a little long. The main issues is that, leaning into dictionaries, the readability went in the opposite direction as expected and I lost the will to kibitz. With a redesign for the shapes, and a little bit of thought I'm sure I could get it one down below 50 lines. Can anyone envision a way of dropping it below 25?
import tkinter, time
def onTimer():
global score, lives
shapes["bad"]["x"] = shapes["bad"]["x"] + shapes["bad"]["spdx"]
if shapes["bad"]["x"] >= winWidbadiam or shapes["bad"]["x"] <= 0:
shapes["bad"]["y"] = shapes["bad"]["y"] + 25
shapes["bad"]["spdx"] = shapes["bad"]["spdx"]
if shapes["bad"]["y"] > winHei  badiam:
lives = lives  1
window.title("Score = " + str(score) + "  Lives = " + str(lives))
shapes["bad"]["y"] = 0
if lives == 0: return
if lastkey == "Left": shapes["base"]["spdx"] = 1
if lastkey == "Right": shapes["base"]["spdx"] = 1
if shapes["base"]["x"] > winWidbadiam or shapes["base"]["x"] < 0:
if shapes["base"]["x"] > winWidbadiam: shapes["base"]["x"] = winWidbadiam
if shapes["base"]["x"] < 0: shapes["base"]["x"] = 0
shapes["base"]["spdx"] = 0
shapes["base"]["x"] = shapes["base"]["x"] + shapes["base"]["spdx"]
shapes["shot"]["y"] = shapes["shot"]["y"] + shapes["shot"]["spdy"]
if shapes["shot"]["x"] > shapes["bad"]["x"] and shapes["shot"]["x"] < shapes["bad"]["x"] + badiam and shapes["shot"]["y"] < shapes["bad"]["y"] + badiam:
score = score + 100
shapes["shot"]["y"], shapes["shot"]["spdy"] = winHei,0
shapes["bad"]["x"],shapes["bad"]["y"],shapes["bad"]["spdx"] = badiam,0,abs(shapes["bad"]["spdx"]) + 1
window.title("Score = " + str(score) + "  Lives = " + str(lives))
if shapes["shot"]["y"]+shotlen < shapes["bad"]["y"]:
shapes["shot"]["y"], shapes["shot"]["spdy"] = winHei,0
canvas.coords(shapes["bad"]["obj"],shapes["bad"]["x"],shapes["bad"]["y"], shapes["bad"]["x"]+badiam,shapes["bad"]["y"]+badiam)
canvas.coords(shapes["base"]["obj"],shapes["base"]["x"],shapes["base"]["y"], shapes["base"]["x"]+badiam,shapes["base"]["y"]+badiam)
canvas.coords(shapes["shot"]["obj"],shapes["shot"]["x"],shapes["shot"]["y"], shapes["shot"]["x"],shapes["shot"]["y"]+shotlen)
timerhandle = window.after(10,onTimer)
def onKeyDown(event):
global lastkey
lastkey = event.keysym
if lastkey == "space":
lastkey, shapes["shot"]["x"], shapes["shot"]["y"], shapes["shot"]["spdy"] = "", shapes["base"]["x"]+badiam/2, winHeibadiamshotlen, 3
winWid, winHei = 640,480
badiam = 25
shotlen = 10
lastkey = ""
score, lives = 0, 3
window = tkinter.Tk()
canvas = tkinter.Canvas(window, width=winWid, height=winHei, bg="black")
canvas.pack()
canvas.focus_set()
shapes = {}
shapes["bad"] = ({"obj": canvas.create_oval(0,badiam, badiam,badiam+badiam, outline="white", fill="white"), "x":2,"y":badiam, "spdx":2, "spdy":0})
shapes["base"] = ({"obj": canvas.create_rectangle(winWid / 2,winHei  25, badiam,winHei  25+badiam, outline="white", fill="white"), "x":winWid / 2,"y":winHei  25, "spdx":0, "spdy":0})
shapes["shot"] = ({"obj": canvas.create_line(0,winHei, 0,winHei+shotlen, fill="white"), "x":0,"y":winHei, "spdx":0, "spdy":0})
canvas.bind("<KeyPress>", onKeyDown)
timerhandle = window.after(2,onTimer)
window.mainloop()
menator01 likes this post
Posts: 23
Threads: 2
Joined: May 2022
This one is just a little artwork using the turtle, although the idea of double spiral goes back to one of my first Turtle programs. Looking at the results... tkinter and turtle would benefit from some antialiasing.
import random,turtle,time
while True:
dist = 2 ** random.randint(0,7)
limit = (360 / 0.15625) / dist
size = 64 / dist
turtle.width(dist / 2)
turtle.penup()
turtle.setheading(90)
turtle.goto(0,0)
turtle.pendown()
turtle.speed("fastest")
turtle.color(["#"+''.join([random.choice('ABCDEF0123456789') for i in range(6)])])
for i in range(0,int(limit)):
turtle.right(360/(360/10))
turtle.forward(i/size)
turtle.penup()
turtle.goto(0,0  (35 / (32 / dist)))
turtle.setheading(270)
turtle.color(["#"+''.join([random.choice('ABCDEF0123456789') for i in range(6)])])
turtle.pendown()
for i in range(0,int(limit)):
turtle.right(360/(360/10))
turtle.forward(i/size)
time.sleep(10)
turtle.clear()
