Last active
March 15, 2026 09:35
-
-
Save AnCarsenat/b30e4d3f8a6a4699d5dcda4bed4f5dd9 to your computer and use it in GitHub Desktop.
main.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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