AST3_C/editor/AST3generator.py

243 lines
11 KiB
Python

"""
Programme de création de niveau pour A Switch to the top fait par Tituya
Pour le CPC#26
"""
import pygame
from pygame.locals import *
clock = pygame.time.Clock()
def newgrille():
global grille
grille=\
["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"],\
["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"]
def load(ids):
global grille, gravityid, app, disa
try:
lv = open(f"editor/levels/{ids}.lvl","r")
ide = lv.readlines()
gravityid=str(ide[0][350:])
if len(ide)==1:
ide = str(ide[0][:-1])
else:
if ide[1]!="\n":
app = int(ide[1][:-1])
disa = int(ide[2])
else:
app = int(ide[2][:-1])
disa = int(ide[3])
ide = str(ide[0][:-2])
grille=[]
for j in range(14):
grille.append([])
for i in range(25):
grille[-1].append(str(ide[i+25*j]))
except FileNotFoundError:
newgrille()
gravityid="6"
place()
def place():
level = font.render(str(id_level),1,(0,0,0))
if int(gravityid)==6: levelgr = font.render("",1,(120,0,0))
if int(gravityid)==7: levelgr = font.render("",1,(0,120,120))
timeapp = font.render("A="+str(app),1,(255,230,0))
timedisa = font.render("D="+str(disa)+" LOCK : "+str(lock),1,(255,180,0))
for a in range(14):
for b in range(25):
pygame.draw.rect(fenetre,(255,255,255),((52*b, 52*a), (52, 52)))
for a in range(14):
for b in range(25):
if grille[a][b]=="0":
pygame.draw.rect(fenetre,(255,255,255),((52*b, 52*a), (52, 52)))
if grille[a][b]=="1":
fenetre.blit(pygame.transform.scale(solid_0,(52,52)),(52*b,52*a))
if grille[a][b]=="s" and int(gravityid)==6:
fenetre.blit(pygame.transform.scale(player,(39,39)),(52*b,52*a+13))
elif grille[a][b]=="s" and int(gravityid)==7:
fenetre.blit(pygame.transform.scale(player,(39,39)),(52*b,52*a))
if grille[a][b]=="e":
fenetre.blit(pygame.transform.scale(end,(52,52)),(52*b,52*a))
if grille[a][b]=="d":
fenetre.blit(pygame.transform.scale(dead,(52,52)),(52*b,52*a))
if grille[a][b]=="k":
fenetre.blit(pygame.transform.scale(key1,(52,52)),(52*b,52*a))
if grille[a][b]=="c":
fenetre.blit(pygame.transform.scale(chrono1,(52,52)),(52*b,52*a))
if grille[a][b]=="3":
fenetre.blit(pygame.transform.scale(keyblock,(52,52)),(52*b,52*a))
if grille[a][b]=="m":
fenetre.blit(pygame.transform.scale(chrono2,(52,52)),(52*b,52*a))
if grille[a][b]=="K":
fenetre.blit(pygame.transform.scale(key2,(52,52)),(52*b,52*a))
if grille[a][b]=="a":
fenetre.blit(pygame.transform.scale(key2block,(52,52)),(52*b,52*a))
if grille[a][b]=="t":
fenetre.blit(pygame.transform.scale(coin,(52,52)),(52*b,52*a))
if grille[a][b]=="l":
fenetre.blit(pygame.transform.scale(change,(52,52)),(52*b,52*a))
if grille[a][b]=="b":
fenetre.blit(pygame.transform.scale(blackout,(52,52)),(52*b,52*a))
if grille[a][b]=="B":
fenetre.blit(pygame.transform.scale(damaged,(52,52)),(52*b,52*a))
if grille[a][b]=="i":
fenetre.blit(pygame.transform.scale(ice,(52,52)),(52*b,52*a))
if grille[a][b]=="S":
fenetre.blit(pygame.transform.scale(switch,(52,52)),(52*b,52*a))
if grille[a][b]=="h":
fenetre.blit(pygame.transform.scale(appear,(52,52)),(52*b,52*a))
fenetre.blit(level, (10, 10))
fenetre.blit(levelgr, (10, 60))
fenetre.blit(timeapp, (55, 10))
fenetre.blit(timedisa, (140, 10))
if id_level==0 : fenetre.blit(font.render("NIVEAU DE TEST",1,(0,180,255)), (600,10))
pygame.display.flip()
def write():
f = open(f"editor/levels/{id_level}.lvl","w+")
if not "c" in str(grille):
if not "m" in str(grille):
f.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}")
else: f.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}\n{app}\n{disa}")
else: f.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}\n{app}\n{disa}")
f.close()
pygame.init()
pygame.mixer.quit()
pygame.display.set_caption('AST3 generator (Tituya)')
fenetre = pygame.display.set_mode((25*52, 14*52))
font = pygame.font.SysFont('arial',25,True)
#Defini la suite des blocs pendant les changements (cliquer sur un 1 va donner un 2...)
suite=["0","1","d","s","e","k","3","K","a","c","m","t","l","b","B","i","S","h"]
lvm = open(f"include/define.h","r")
id_level = 0
id_level_max = int(''.join(list(filter(str.isdigit, lvm.readline()))))
gravityid = 6
disa = 10
app = 13
lock=""
solid_0 = pygame.image.load("editor/img/solid_0.png").convert_alpha()
player = pygame.image.load("editor/img/player.png").convert_alpha()
keyblock = pygame.image.load("editor/img/keyblock.png").convert_alpha()
key2block = pygame.image.load("editor/img/key2block.png").convert_alpha()
chrono1 = pygame.image.load("editor/img/chrono1.png").convert_alpha()
chrono2 = pygame.image.load("editor/img/chrono2.png").convert_alpha()
key1 = pygame.image.load("editor/img/key1.png").convert_alpha()
key2 = pygame.image.load("editor/img/key2.png").convert_alpha()
end = pygame.image.load("editor/img/end.png").convert_alpha()
dead = pygame.image.load("editor/img/dead.png").convert_alpha()
coin = pygame.image.load("editor/img/coin.png").convert_alpha()
change = pygame.image.load("editor/img/change.png").convert_alpha()
blackout = pygame.image.load("editor/img/blackout.png").convert_alpha()
damaged = pygame.image.load("editor/img/damaged.png").convert_alpha()
switch = pygame.image.load("editor/img/switch.png").convert_alpha()
ice = pygame.image.load("editor/img/ice.png").convert_alpha()
appear = pygame.image.load("editor/img/appear.png").convert_alpha()
load(id_level)
place()
securite=False
while securite==False:
clock.tick(60)
for event in pygame.event.get():
if event.type==QUIT:
securite=True
elif event.type == pygame.KEYDOWN:
carac= event.dict['unicode']
if carac == "d":
if id_level_max>id_level: id_level+=1
load(id_level)
place()
if carac == "q":
if id_level!=0: id_level-=1
load(id_level)
place()
if carac == "z":
app+=1
write()
place()
if carac == "s":
app-=1
write()
place()
if carac == "r":
disa+=1
write()
place()
if carac == "f":
disa-=1
write()
place()
if carac == "a":
lock=""
place()
if carac == "n":
newgrille()
write()
place()
if event.key == pygame.K_LSHIFT:
if gravityid=="7":
gravityid="6"
else:
gravityid="7"
write()
place()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
x=int(event.pos[0]/52)
y=int(event.pos[1]/52)
if lock!="":
grille[y][x]=lock
else:
for i in range(len(suite)):
if grille[y][x] == suite[i]:
if i!=len(suite)-1:
grille[y][x]=suite[i+1]
break
else:
grille[y][x]=suite[0]
break
pygame.draw.rect(fenetre,(255,255,255),((52*x, 52*y), (52, 52)))
place()
if event.button == 2:
x=int(event.pos[0]/52)
y=int(event.pos[1]/52)
for i in range(len(suite)):
if grille[y][x] == suite[i]:
lock=suite[i]
place()
if event.button == 3:
x=int(event.pos[0]/52)
y=int(event.pos[1]/52)
if lock!="":
grille[y][x]="0"
else:
for i in range(len(suite)):
if grille[y][x] == suite[i]:
if i!=len(suite)+1:
grille[y][x]=suite[i-1]
break
else:
grille[y][x]=suite[len(suite)]
break
pygame.draw.rect(fenetre,(255,255,255),((52*x, 52*y), (55, 55)))
place()
write()