2020-07-09 23:11:24 +02:00
"""
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 *
2020-07-16 02:06:57 +02:00
clock = pygame . time . Clock ( )
2020-07-09 23:11:24 +02:00
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 " ]
newgrille ( )
2020-07-16 02:06:57 +02:00
def load ( ids ) :
global grille
for lev , ide in niv . items ( ) :
if lev == ids :
grille = [ ]
print ( ide )
for j in range ( 14 ) :
grille . append ( [ ] )
for i in range ( 25 ) :
grille [ - 1 ] . append ( str ( ide [ i + 25 * j ] ) )
place ( )
break
niv = { }
niveau = 1
texte = open ( " src/setlevel.c " , " r+ " )
for line in texte :
if " memcpy " in line :
niv [ niveau ] = line [ 14 : - 8 ]
niveau + = 1
if " del_level " in line :
break
2020-07-09 23:11:24 +02:00
2020-07-16 02:06:57 +02:00
p = open ( " editor/setlevel.c " , " w+ " )
2020-07-09 23:11:24 +02:00
p . write ( " #include \" setlevel.h \" \n #include <gint/std/string.h> \n void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, char check_coin) { \n switch(id_level) { " )
#Defini la suite des blocs pendant les changements (cliquer sur un 1 va donner un 2, cliquer sur un 11 un 0...)
2020-07-16 02:06:57 +02:00
suite = [ " 0 " , " 1 " , " d " , " s " , " e " , " k " , " 3 " , " K " , " a " , " c " , " m " , " t " , " l " , " b " ]
2020-07-09 23:11:24 +02:00
def place ( ) :
level = font . render ( str ( id_level ) , 1 , ( 0 , 0 , 0 ) )
levelgr = font . render ( str ( gravityid ) , 1 , ( 0 , 0 , 0 ) )
2020-07-16 02:06:57 +02:00
for a in range ( 14 ) :
for b in range ( 25 ) :
pygame . draw . rect ( fenetre , ( 255 , 255 , 255 ) , ( ( 52 * b , 52 * a ) , ( 52 , 52 ) ) )
2020-07-09 23:11:24 +02:00
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 " :
fenetre . blit ( pygame . transform . scale ( player , ( 39 , 39 ) ) , ( 52 * b , 52 * a + 13 ) )
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 ) )
2020-07-16 02:06:57 +02:00
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 ) )
2020-07-09 23:11:24 +02:00
fenetre . blit ( level , ( 10 , 10 ) )
fenetre . blit ( levelgr , ( 10 , 60 ) )
pygame . display . flip ( )
pygame . init ( )
2020-07-16 02:06:57 +02:00
pygame . mixer . quit ( )
2020-07-09 23:11:24 +02:00
pygame . display . set_caption ( ' AST3 generator (Tituya) ' )
fenetre = pygame . display . set_mode ( ( 25 * 52 , 14 * 52 ) )
font = pygame . font . SysFont ( ' arial ' , 25 , True )
id_level = 1
gravity = " "
2020-07-16 02:06:57 +02:00
identifiant = " "
2020-07-09 23:11:24 +02:00
gravityid = 0
solid_0 = pygame . image . load ( " editor/img/solid_0.png " ) . convert ( )
player = pygame . image . load ( " editor/img/player.png " ) . convert ( )
keyblock = pygame . image . load ( " editor/img/keyblock.png " ) . convert ( )
key2block = pygame . image . load ( " editor/img/key2block.png " ) . convert ( )
chrono1 = pygame . image . load ( " editor/img/chrono1.png " ) . convert ( )
chrono2 = pygame . image . load ( " editor/img/chrono2.png " ) . convert ( )
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 ( )
coin = pygame . image . load ( " editor/img/coin.png " ) . convert_alpha ( )
2020-07-16 02:06:57 +02:00
change = pygame . image . load ( " editor/img/change.png " ) . convert_alpha ( )
blackout = pygame . image . load ( " editor/img/blackout.png " ) . convert_alpha ( )
2020-07-09 23:11:24 +02:00
2020-07-16 02:06:57 +02:00
for cle in niv :
if id_level == cle :
load ( id_level )
break
else :
newgrille ( )
2020-07-09 23:11:24 +02:00
place ( )
securite = False
while securite == False :
2020-07-16 02:06:57 +02:00
clock . tick ( 60 )
2020-07-09 23:11:24 +02:00
for event in pygame . event . get ( ) :
if event . type == QUIT :
securite = True
elif event . type == pygame . KEYDOWN :
if event . key == pygame . K_TAB :
2020-07-16 02:06:57 +02:00
identifiant + = f " case { id_level } : \n memcpy(level, \" " + str ( grille ) . replace ( " ] " , " " ) . replace ( " ( " , " " ) . replace ( " ) " , " " ) . replace ( " ' " , " " ) . replace ( " [ " , " " ) . replace ( " " , " " ) . replace ( " , " , " " ) + " \" ,350); \n break; \n "
2020-07-09 23:11:24 +02:00
gravity + = f " case { id_level } : \n *default_gravity = { gravityid } ; \n break; \n "
id_level + = 1
2020-07-16 02:06:57 +02:00
for cle in niv :
if id_level == cle :
load ( id_level )
break
else :
newgrille ( )
2020-07-09 23:11:24 +02:00
place ( )
if event . key == pygame . K_LSHIFT :
if gravityid :
gravityid = 0
else :
gravityid = 1
place ( )
elif event . type == pygame . MOUSEBUTTONDOWN :
if event . button == 1 :
x = int ( event . pos [ 0 ] / 52 )
y = int ( event . pos [ 1 ] / 52 )
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 :
2020-07-16 02:06:57 +02:00
p . write ( identifiant + " }if(check_coin) for (int i = 0; level[i]!= ' \\ 0 ' ; i++) if(level[i]== ' t ' ) level[i]= ' 0 ' ; \n set_gravity(id_level, gravity); \n unsigned int x = 0; \
2020-07-09 23:11:24 +02:00
\nunsigned int y = 0 ; \nunsigned int i = 0 ; \nwhile ( i != strlen ( level ) ) { \nswitch ( level [ i ] ) { \ncase ' s ' : \n * startx = x ; \n * starty = y ; \nbreak ; } \nx + = 16 ; \nif ( x == 16 * 25 ) { x = 0 ; \ny + = 16 ; } i + + ; } } \n \
2020-07-16 02:06:57 +02:00
void set_gravity ( int id_level , char * default_gravity ) { \nswitch ( id_level ) { \n " +gravity+ " } } \nvoid del_level ( char level [ ] ) \n { memcpy ( level , \" 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \" ,350);} " )
securite = True
texte . close ( )
2020-07-09 23:11:24 +02:00
if event . button == 3 :
x = int ( event . pos [ 0 ] / 52 )
y = int ( event . pos [ 1 ] / 52 )
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 ( )