Skip to content

Instantly share code, notes, and snippets.

@AnCarsenat
Last active March 15, 2026 09:35
Show Gist options
  • Select an option

  • Save AnCarsenat/b30e4d3f8a6a4699d5dcda4bed4f5dd9 to your computer and use it in GitHub Desktop.

Select an option

Save AnCarsenat/b30e4d3f8a6a4699d5dcda4bed4f5dd9 to your computer and use it in GitHub Desktop.
main.py
from math import *
from ion import *
from kandinsky import *
from time import *
sw=320
sh=222
fps=100
class screen():
def __init__(self,pos,zoom,BG):
self.pos = pos
self.zoom = zoom
self.BG = BG
def clear(self):
class player():
def __init__(self,pos,color,keys):
self.pos = pos
self.color = color
self.keys = keys
self.vel = [0,0]
self.moveSpeed = 50
def move(self):
friction = 0.15
self.pos[0] += self.vel[0]*dt
self.pos[1] += self.vel[1]*dt
self.vel[0] = self.vel[0] - self.vel[0] * friction
self.vel[1] = self.vel[1] - self.vel[1] * friction
def draw(self):
width = 15
fill_rect(int(self.pos[0]-width/2),int(self.pos[1]-width/2),width,width,self.color)
def handle_keys(self):
if keydown(self.keys[0]):
self.vel[1]-=self.moveSpeed
if keydown(self.keys[1]):
self.vel[1]+=self.moveSpeed
if keydown(self.keys[2]):
self.vel[0]-=self.moveSpeed
if keydown(self.keys[3]):
self.vel[0]+=self.moveSpeed
Running=True
playerA = player([sw//2,sh//2],(255,0,0),(KEY_UP,KEY_DOWN,KEY_LEFT,KEY_RIGHT))
dt=0
while Running:
t0=monotonic()
playerA.handle_keys()
playerA.move()
playerA.draw()
sleep(1/fps)
dt=monotonic()-t0
from math import *
from kandinsky import *
from ion import *
from time import *
BG=(200,200,200)
SW=320
SH=222
FPS=60
def help():
bg=(200,200,255)
outline=(170,170,255)
fg=(100,100,100)
fill_rect(8,8,SW-16,SH-16,outline)
fill_rect(10,10,SW-20,SH-20,bg)
draw_string("made by - Ancarsenat",180,10,fg,bg,2)
draw_string("Editor",10,10,fg,bg,5)
draw_string("+-* : speed controls",10,20,fg,bg,2)
draw_string("1-9 : draw tools",10,30,fg,bg,2)
draw_string("() : undo/redo controls",10,40,fg,bg,2)
draw_string("0 : eraser",10,50,fg,bg,2)
draw_string("0.e : zoom controls",10,60,fg,bg,2)
draw_string("Export",10,80,fg,bg,5)
draw_string("File : Exe+1",10,90,fg,bg,2)
draw_string("Logs : Exe+2",10,100,fg,bg,2)
draw_string("Advanced",10,120,fg,bg,5)
draw_string("Console : tool",10,130,fg,bg,2)
draw_string("Params : Exe+3",10,140,fg,bg,2)
draw_string("Set origin : Exe+4",10,150,fg,bg,2)
class screen:
def clear():
fill_rect(0,0,SW,SH,BG)
class toolBar:
def draw():
fill_rect(0,SH-15,SW,15,(250,200,200))
fill_rect(0,SH-17,SW,2,(200,100,100))
draw_string(
"rect (7) poly (8) line (9) text (4)",
5,
SH-15,
(100,100,100),
(250,200,200),
3)
class upperBar:
def draw():
fill_rect(0,0,SW,15,(150,250,250))
fill_rect(0,15,SW,2,(100,200,200))
draw_string(
"help (ans) console(tool)",
10,0,
(100,100,100),
(150,250,250),
5
)
class pointer:
def __init__(self,pos,col,speed):
self.pos=pos
self.prevpos=pos
self.col=col
self.speed=speed
def draw(self):
for lh in range(-10,11):
if lh<3 and -3<lh: continue
pcol = get_pixel(self.pos[0]+lh,self.pos[1])
pcol = (255-pcol[0],255-pcol[1],255-pcol[2])
set_pixel(self.pos[0]+lh,self.pos[1],pcol)
for lw in range(-10,11):
if lw<3 and -3<lw: continue
pcol = get_pixel(self.pos[0],self.pos[1]+lw)
pcol = (255-pcol[0],255-pcol[1],255-pcol[2])
set_pixel(self.pos[0],self.pos[1]+lw,pcol)
def move_by_grid(self,dt):
x,y = self.pos
if keydown(KEY_UP):
y += self.speed*dt
if keydown(KEY_DOWN):
y -= self.speed*dt
if keydown(KEY_LEFT):
x += self.speed*dt
if keydown(KEY_RIGHT):
x -= self.speed*dt
self.pos = (int(x),int(y))
SET=0
ADD=1
SUB=2
def speed(self,mode,value):
if mode==0:
self.speed=value
if mode==1:
self.speed+=value
if mode==2:
self.speed-=value
class tools:
current = None
currentName = None
startPos = ()
currentPos = ()
color = (255,0,0)
def rect():
fill_rect(
tools.startPos[0],
tools.startPos[1],
tools.currentPos[0]-tools.startPos[0],
tools.currentPos[1]-tools.startPos[1],
tools.color
)
tools.shape = f"{str(tools.currentName)}({tools.startPos[0]},{tools.startPos[1]},{tools.currentPos[0]-tools.startPos[0]},{tools.currentPos[1]-tools.startPos[1]},{tools.color})"
def line():
draw_line(
tools.startPos[0],
tools.startPos[1],
tools.currentPos[0],
tools.currentPos[1],
tools.color
)
tools.shape = f"{str(tools.currentName)}({tools.startPos[0]},{tools.startPos[1]},{tools.currentPos[0]},{tools.currentPos[1]},{tools.color})"
def process():
tools.currentPos = pointer.pos
if keydown(KEY_SEVEN):
tools.current=tools.rect
tools.currentName="fill_rect"
tools.startPos = pointer.pos
print("rect selected!")
if keydown(KEY_NINE):
tools.current=tools.line
tools.currentName="draw_line"
tools.startPos = pointer.pos
print("rect selected!")
if tools.current:
tools.current()
if keydown(KEY_OK) and tools.current:
shapeBuffer.add_shape(tools.shape)
tools.current = None
tools.currentName = None
if keydown(KEY_PLUS):
pointer.speed(pointer.ADD,1)
if keydown(KEY_MINUS):
pointer.speed(pointer.SUB,1)
if keydown(KEY_MULTIPLICATION):
pointer.speed(pointer.SET,10)
if keydown(KEY_ANS):
help()
class shapeBuffer:
shapes=[]
def add_shape(shape):
shapeBuffer.shapes += [shape]
def draw():
for shape in shapeBuffer.shapes:
exec(shape)
pointer = pointer(
(SW//2,SH//2),
(255,0,0),
100
)
def is_no_keypres():
return len(get_keys())==0
history = []
dt=0
Running = True
while Running:
t0 = monotonic()
sleep(1/FPS)
if is_no_keypres(): continue
screen.clear()
upperBar.draw()
toolBar.draw()
tools.process()
shapeBuffer.draw()
pointer.draw()
pointer.move_by_grid(dt)
dt=t0-monotonic()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment