101 lines
2.3 KiB
Python
101 lines
2.3 KiB
Python
|
#!/usr/bin/python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
""" Ein hilfloser Versuch, Tasteneingaben abzufragen. Man kann auch in Python C schreiben. Ein Thread wär evtl besser. """
|
||
|
|
||
|
import os, sys, termios, tty, time, random
|
||
|
from math import sin, cos
|
||
|
|
||
|
esc = chr(27)
|
||
|
bracket = chr(91)
|
||
|
c_up = chr(65)
|
||
|
c_down = chr(66)
|
||
|
c_right = chr(67)
|
||
|
c_left = chr(68)
|
||
|
clear = "'\x1b[2J\x1b[H"
|
||
|
car = "🚜"
|
||
|
replstring = " "
|
||
|
fd = sys.stdin.fileno()
|
||
|
remember_attributes = termios.tcgetattr(fd)
|
||
|
|
||
|
|
||
|
termsize_xy = os.get_terminal_size()
|
||
|
xmax = termsize_xy[0] - 1
|
||
|
ymax = termsize_xy[1]
|
||
|
x, xold, y, yold = xmax / 2, xmax / 2, ymax - 1, ymax - 1
|
||
|
ymin = 1
|
||
|
xmin = 1
|
||
|
street = "# #"
|
||
|
streetlen = len(street)
|
||
|
pi = 3.1416
|
||
|
deg2rad = pi / 180
|
||
|
curvelen = 40
|
||
|
toggle = 1
|
||
|
curvemax = random.randint(len(street) + 1, xmax - len(street))
|
||
|
taste = ""
|
||
|
z = 90
|
||
|
|
||
|
x = int((sin(curvelen * deg2rad) * cos(xmax - curvelen * deg2rad) + 1) * (xmax / 2))
|
||
|
|
||
|
|
||
|
def curpos(x, y):
|
||
|
print("\033[%d;%dH" % (y, x), end="", flush=True)
|
||
|
|
||
|
|
||
|
def cursoroff():
|
||
|
sys.stdout.write("\033[?25l")
|
||
|
|
||
|
|
||
|
def cursoron():
|
||
|
sys.stdout.write("\033[?25h")
|
||
|
|
||
|
|
||
|
def getkey():
|
||
|
getkey_buffer = 1
|
||
|
tty.setraw(sys.stdin.fileno())
|
||
|
taste = sys.stdin.read(getkey_buffer)
|
||
|
termios.tcsetattr(fd, termios.TCSADRAIN, remember_attributes)
|
||
|
return taste
|
||
|
|
||
|
|
||
|
print(clear)
|
||
|
cursoroff()
|
||
|
|
||
|
while taste != "x" and taste != "q":
|
||
|
taste = getkey()
|
||
|
|
||
|
if taste == esc:
|
||
|
taste = getkey()
|
||
|
########## Print car
|
||
|
if taste == bracket:
|
||
|
taste = getkey()
|
||
|
yold = y
|
||
|
xold = x
|
||
|
if taste == c_right:
|
||
|
if x < xmax and y < ymax:
|
||
|
x += 1
|
||
|
elif taste == c_left:
|
||
|
if x >= xmin:
|
||
|
x -= 1
|
||
|
curpos(x, y)
|
||
|
print(car, end="")
|
||
|
curpos(xold, yold - 1)
|
||
|
print(replstring, end="")
|
||
|
|
||
|
####### print street
|
||
|
curvelen = int(curvelen + toggle) % 360
|
||
|
|
||
|
if curvelen <= 40 or curvelen == curvemax:
|
||
|
curvemax = random.randint(len(street) * 3, 180)
|
||
|
z += toggle
|
||
|
toggle *= -1
|
||
|
curvelen = int(curvelen + toggle) % 360
|
||
|
streetpos = int((sin(curvelen * deg2rad) * cos(xmax - curvelen * deg2rad) + 1) * (xmax / 2))
|
||
|
curvelen += toggle % 360
|
||
|
curpos(streetpos, ymax)
|
||
|
print(street)
|
||
|
|
||
|
|
||
|
cursoron()
|
||
|
sys.exit("Schulz nun.")
|