2 nouveaux blocs
|
@ -6,6 +6,7 @@ Pour le CPC#26
|
|||
import pygame
|
||||
from pygame.locals import *
|
||||
|
||||
clock = pygame.time.Clock()
|
||||
def newgrille():
|
||||
global grille
|
||||
grille=\
|
||||
|
@ -26,24 +27,42 @@ def newgrille():
|
|||
|
||||
newgrille()
|
||||
|
||||
"""
|
||||
s="10001011111011111111111111000101dd10001111dddd11110000101dd100010000000000011111m1dd1aaa1000ccccddd110s00010013331000000000011dddd110010001000dd00000100000000010e01000dd00000011111100011111dddddddd1111k000000010000111001111111111111101000000000111111000010000100000000000000010K010000100011100000011110t0100001000111000ddd1111000101111101111111111111"
|
||||
grille=[]
|
||||
for j in range(14):
|
||||
grille.append([])
|
||||
for i in range(25):
|
||||
grille[-1].append(s[i+25*j])"""
|
||||
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
|
||||
|
||||
p = open("src/set.c","w+")
|
||||
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
|
||||
|
||||
p = open("editor/setlevel.c","w+")
|
||||
p.write("#include \"setlevel.h\"\n#include <gint/std/string.h>\nvoid set_level(int id_level, char level[], int *startx, int *starty, char *gravity, char check_coin){\nswitch(id_level){")
|
||||
|
||||
|
||||
#Defini la suite des blocs pendant les changements (cliquer sur un 1 va donner un 2, cliquer sur un 11 un 0...)
|
||||
suite=["0","1","d","s","e","k","3","K","a","c","m","t"]
|
||||
suite=["0","1","d","s","e","k","3","K","a","c","m","t","l","b"]
|
||||
|
||||
def place():
|
||||
level = font.render(str(id_level),1,(0,0,0))
|
||||
levelgr = font.render(str(gravityid),1,(0,0,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":
|
||||
|
@ -70,17 +89,23 @@ def place():
|
|||
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))
|
||||
fenetre.blit(level, (10, 10))
|
||||
fenetre.blit(levelgr, (10, 60))
|
||||
pygame.display.flip()
|
||||
|
||||
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)
|
||||
|
||||
id_level = 1
|
||||
gravity = ""
|
||||
identifiant = ""
|
||||
gravityid = 0
|
||||
|
||||
solid_0 = pygame.image.load("editor/img/solid_0.png").convert()
|
||||
|
@ -94,23 +119,33 @@ 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()
|
||||
change = pygame.image.load("editor/img/change.png").convert_alpha()
|
||||
blackout = pygame.image.load("editor/img/blackout.png").convert_alpha()
|
||||
|
||||
for a in range(14):
|
||||
for b in range(25):
|
||||
pygame.draw.rect(fenetre,(255,255,255),((52*b, 52*a), (52, 52)))
|
||||
for cle in niv:
|
||||
if id_level==cle:
|
||||
load(id_level)
|
||||
break
|
||||
else:
|
||||
newgrille()
|
||||
place()
|
||||
securite=False
|
||||
while securite==False:
|
||||
#boucle permettant l'affichage
|
||||
clock.tick(60)
|
||||
for event in pygame.event.get():
|
||||
if event.type==QUIT:
|
||||
securite=True
|
||||
elif event.type == pygame.KEYDOWN:
|
||||
if event.key == pygame.K_TAB:
|
||||
p.write(f"case {id_level}:\nmemcpy(level,\""+str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+"\",350);\nbreak;\n")
|
||||
identifiant+=f"case {id_level}:\nmemcpy(level,\""+str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+"\",350);\nbreak;\n"
|
||||
gravity+=f"case {id_level}:\n*default_gravity = {gravityid};\nbreak;\n"
|
||||
id_level+=1
|
||||
newgrille()
|
||||
for cle in niv:
|
||||
if id_level==cle:
|
||||
load(id_level)
|
||||
break
|
||||
else:
|
||||
newgrille()
|
||||
place()
|
||||
if event.key == pygame.K_LSHIFT:
|
||||
if gravityid:
|
||||
|
@ -133,9 +168,11 @@ while securite==False:
|
|||
pygame.draw.rect(fenetre,(255,255,255),((52*x, 52*y), (52, 52)))
|
||||
place()
|
||||
if event.button == 2:
|
||||
p.write("}if(check_coin) for (int i = 0; level[i]!='\\0' ; i++) if(level[i]=='t') level[i]='0';\nset_gravity(id_level, gravity);\nunsigned int x = 0;\
|
||||
p.write(identifiant+"}if(check_coin) for (int i = 0; level[i]!='\\0' ; i++) if(level[i]=='t') level[i]='0';\nset_gravity(id_level, gravity);\nunsigned int x = 0;\
|
||||
\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\
|
||||
void set_gravity(int id_level, char *default_gravity){\nswitch(id_level){\n"+gravity+"}}")
|
||||
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()
|
||||
if event.button == 3:
|
||||
x=int(event.pos[0]/52)
|
||||
y=int(event.pos[1]/52)
|
||||
|
|
After Width: | Height: | Size: 447 B |
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 286 B |
After Width: | Height: | Size: 429 B |
After Width: | Height: | Size: 265 B |
Before Width: | Height: | Size: 265 B After Width: | Height: | Size: 287 B |
|
@ -0,0 +1,40 @@
|
|||
#include "setlevel.h"
|
||||
#include <gint/std/string.h>
|
||||
void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, char check_coin){
|
||||
switch(id_level){case 1:
|
||||
memcpy(level,"1111111111111111111111111100000000000100001dt10001100000000000100001td10001100000000000100001dt10001100000000000000001111000110000ddd00000000000000001100000000000000000000d001100000000000000000000d0011110000000000000000111111101000000000000000000100110000000000000000000000011000000000001110000000001100s0000l0000b0000l000e011111111111111111111111111",350);
|
||||
break;
|
||||
case 2:
|
||||
memcpy(level,"111001111111100d0d0011111100000111ddd000d0d0000001100000000000000dtd00000e1111111ddd111111111111111100000000000000000l00d0000111111111dd111110100d000110001100000000010100d0001000011000000000d0d00d000000000l000000000d0d00d00001111dd111000000d0d00111111000011111ddd00d0d00111111000011111ddd00d0d001111110s0011111ddd00d0d0011111111001111111100d0d0011111",350);
|
||||
break;
|
||||
case 3:
|
||||
memcpy(level,"11111111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d00111111100111111111111",350);
|
||||
break;
|
||||
}if(check_coin) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='t') level[i]='0';
|
||||
set_gravity(id_level, gravity);
|
||||
unsigned int x = 0;
|
||||
unsigned int y = 0;
|
||||
unsigned int i = 0;
|
||||
while (i!=strlen(level)){
|
||||
switch(level[i]){
|
||||
case 's':
|
||||
*startx = x;
|
||||
*starty = y;
|
||||
break;}
|
||||
x+=16;
|
||||
if(x==16*25){x=0;
|
||||
y+=16;}i++;}}
|
||||
void set_gravity(int id_level, char *default_gravity){
|
||||
switch(id_level){
|
||||
case 1:
|
||||
*default_gravity = 0;
|
||||
break;
|
||||
case 2:
|
||||
*default_gravity = 0;
|
||||
break;
|
||||
case 3:
|
||||
*default_gravity = 0;
|
||||
break;
|
||||
}}
|
||||
void del_level(char level[])
|
||||
{memcpy(level,"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",350);}
|
|
@ -1,3 +1,4 @@
|
|||
void draw_level(char level[]);
|
||||
void draw_player(int x, int y);
|
||||
void draw_timer(unsigned int frame);
|
||||
void draw_blackout(int x, int y);
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, char check_coin);
|
||||
void set_gravity(int id_level, char *default_gravity);
|
||||
void del_level(char level[]);
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#include <gint/display.h>
|
||||
#include "define.h"
|
||||
|
||||
#define VISIBLE_RECT 35
|
||||
|
||||
extern bopti_image_t img_solid_0; //solid block
|
||||
extern bopti_image_t img_coin; //facultative coin
|
||||
extern bopti_image_t img_dead; //dead block
|
||||
|
@ -10,6 +12,7 @@ extern bopti_image_t img_player; //player
|
|||
extern bopti_image_t img_end; //end of level
|
||||
extern bopti_image_t img_key1; //key 1
|
||||
extern bopti_image_t img_keyblock; //block link to the key1
|
||||
extern bopti_image_t img_blackout; //key 1
|
||||
|
||||
void draw_player(int x, int y)
|
||||
{
|
||||
|
@ -55,6 +58,9 @@ void draw_level(char level[])
|
|||
case 'C': //chrono blocks
|
||||
dimage(x,y,&img_keyblock);
|
||||
break;
|
||||
case 'b': //blackout blocks
|
||||
dimage(x,y,&img_blackout);
|
||||
break;
|
||||
}
|
||||
x+=16;
|
||||
if(x==16*25)
|
||||
|
@ -66,6 +72,16 @@ void draw_level(char level[])
|
|||
}
|
||||
}
|
||||
|
||||
void draw_blackout(int x, int y)
|
||||
{
|
||||
x+=5;
|
||||
y+=5;
|
||||
drect(0, 0, 395, y-VISIBLE_RECT, C_BLACK); //top rect
|
||||
drect(0, y-VISIBLE_RECT, x-VISIBLE_RECT, y+VISIBLE_RECT, C_BLACK); //left rect
|
||||
drect(x+VISIBLE_RECT, y-VISIBLE_RECT, 395, y+VISIBLE_RECT, C_BLACK); //right rect
|
||||
drect(0, y+VISIBLE_RECT, 395, 223, C_BLACK); //bottom rect
|
||||
}
|
||||
|
||||
void draw_timer(unsigned int frame)
|
||||
{
|
||||
dprint_opt(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%u.%02u",(frame)/FPS, (frame)%FPS);
|
||||
|
|
55
src/main.c
|
@ -2,6 +2,7 @@
|
|||
#include <gint/keyboard.h>
|
||||
#include <gint/clock.h>
|
||||
#include <gint/timer.h>
|
||||
#include <gint/std/string.h>
|
||||
|
||||
#include "setlevel.h"
|
||||
#include "drawlevel.h"
|
||||
|
@ -30,6 +31,7 @@ int main(void)
|
|||
char level[351];
|
||||
char gravity = 0; //0 down 1 up
|
||||
char check = 0;
|
||||
char blackout = 0;
|
||||
int id_level = 1;
|
||||
int start_x;
|
||||
int start_y;
|
||||
|
@ -52,6 +54,7 @@ int main(void)
|
|||
frame++;
|
||||
framelevel++;
|
||||
draw_level(level);
|
||||
if(blackout) draw_blackout(player_x, player_y);
|
||||
draw_player(player_x,player_y);
|
||||
draw_timer(frame);
|
||||
dprint(150,100,C_GREEN,"%d",player_x);
|
||||
|
@ -127,6 +130,7 @@ int main(void)
|
|||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
set_level(id_level, level, &start_x, &start_y, &gravity, check_coin);
|
||||
blackout = 0;
|
||||
framelevel = 0;
|
||||
}
|
||||
if(collide_end(player_x, player_y, level, gravity))
|
||||
|
@ -136,6 +140,7 @@ int main(void)
|
|||
set_level(id_level, level, &start_x, &start_y, &gravity, check_coin);
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
blackout = 0;
|
||||
framelevel=0;
|
||||
}
|
||||
if(collide(player_x, player_y, level, gravity, 'k')) //Collide with key1 = disappearance of blocks
|
||||
|
@ -167,6 +172,56 @@ int main(void)
|
|||
check_coin=1;
|
||||
coin++;
|
||||
}
|
||||
if(collide(player_x, player_y, level, gravity, 'b')) //Collide with blackout block
|
||||
{
|
||||
for (int i = 0; level[i]!='\0' ; i++)
|
||||
{
|
||||
if(level[i]=='b')
|
||||
{
|
||||
level[i]='0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
blackout=1;
|
||||
}
|
||||
if(level[((player_x+6)/16)+((player_y+6)/16)*25] == 'l') //Collide with change block
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
char level2[351] = { 0 };
|
||||
int j = 0;
|
||||
level[((player_x+6)/16)+((player_y+6)/16)*25] = 'P';
|
||||
for (int i = 349; i!=-1 ; i--)
|
||||
{
|
||||
level2[j]=level[i];
|
||||
j++;
|
||||
}
|
||||
del_level(level);
|
||||
strncpy(level,level2,351);
|
||||
del_level(level2);
|
||||
int i = 0;
|
||||
while (i!=350)
|
||||
{
|
||||
switch(level[i])
|
||||
{
|
||||
case 'P':
|
||||
player_x = x;
|
||||
player_y = y;
|
||||
level[i]='0';
|
||||
break;
|
||||
}
|
||||
x+=16;
|
||||
if(x==16*25)
|
||||
{
|
||||
x=0;
|
||||
y+=16;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if(!gravity) gravity=1;
|
||||
else gravity=0;
|
||||
}
|
||||
|
||||
if((framelevel/FPS)>13) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='c') level[i]='0'; //after 13 seconds blocks disappear
|
||||
if((framelevel/FPS)>10) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='m') level[i]='C'; //after 10 seconds blocks appear
|
||||
|
||||
|
|
|
@ -1,59 +1,40 @@
|
|||
#include "setlevel.h"
|
||||
#include <gint/std/string.h>
|
||||
|
||||
void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, char check_coin)
|
||||
{
|
||||
switch(id_level)
|
||||
{
|
||||
case 1:
|
||||
memcpy(level,"10001011111011111111111111000101dd10001111dddd11110000101dd100010000000000011111m1dd1aaa1000ccccddd110s00010013331000000000011dddd110010001000dd00000100000000010e01000dd00000011111100011111dddddddd1111k000000010000111001111111111111101000000000111111000010000100000000000000010K010000100011100000011110t0100001000111000ddd1111000101111101111111111111",350);
|
||||
break;
|
||||
case 2:
|
||||
memcpy(level,"111001111111100d0d0011111100000111ddd000d0d0000001100000000000000dtd00000e1111111ddd111111111111111100000000000000000000d0000111111111dd111110100d000110001100000000010100d0001000011000000000d0d00d0000000000000000000d0d00d00001111dd111000000d0d00111111000011111ddd00d0d00111111000011111ddd00d0d001111110s0011111ddd00d0d0011111111001111111100d0d0011111",350);
|
||||
break;
|
||||
case 3:
|
||||
memcpy(level,"11111111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d00111111100111111111111",350);
|
||||
break;
|
||||
}
|
||||
|
||||
if(check_coin) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='t') level[i]='0';
|
||||
|
||||
set_gravity(id_level, gravity);
|
||||
|
||||
unsigned int x = 0;
|
||||
unsigned int y = 0;
|
||||
unsigned int i = 0;
|
||||
while (i!=strlen(level))
|
||||
{
|
||||
switch(level[i])
|
||||
{
|
||||
case 's':
|
||||
*startx = x;
|
||||
*starty = y;
|
||||
break;
|
||||
}
|
||||
x+=16;
|
||||
if(x==16*25)
|
||||
{
|
||||
x=0;
|
||||
y+=16;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void set_gravity(int id_level, char *default_gravity)
|
||||
{
|
||||
switch(id_level)
|
||||
{
|
||||
case 1:
|
||||
*default_gravity = 1; //0 down - 1 up
|
||||
break;
|
||||
case 2:
|
||||
*default_gravity = 0; //0 down - 1 up
|
||||
break;
|
||||
case 3:
|
||||
*default_gravity = 1; //0 down - 1 up
|
||||
break;
|
||||
}
|
||||
}
|
||||
void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, char check_coin){
|
||||
switch(id_level){case 1:
|
||||
memcpy(level,"1111111111111111111111111100000000000100001dt10001100000000000100001td10001100000000000100001dt10001100000000000000001111000110000ddd00000000000000001100000000000000000000d001100000000000000000000d0011110000000000000000111111101000000000000000000100110000000000000000000000011000000000001110000000001100s0000l0000b0000l000e011111111111111111111111111",350);
|
||||
break;
|
||||
case 2:
|
||||
memcpy(level,"111001111111100d0d0011111100000111ddd000d0d0000001100000000000000dtd00000e1111111ddd111111111111111100000000000000000l00d0000111111111dd111110100d000110001100000000010100d0001000011000000000d0d00d000000000l000000000d0d00d00001111dd111000000d0d00111111000011111ddd00d0d00111111000011111ddd00d0d001111110s0011111ddd00d0d0011111111001111111100d0d0011111",350);
|
||||
break;
|
||||
case 3:
|
||||
memcpy(level,"11111111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d00111111100111111111111",350);
|
||||
break;
|
||||
}if(check_coin) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='t') level[i]='0';
|
||||
set_gravity(id_level, gravity);
|
||||
unsigned int x = 0;
|
||||
unsigned int y = 0;
|
||||
unsigned int i = 0;
|
||||
while (i!=strlen(level)){
|
||||
switch(level[i]){
|
||||
case 's':
|
||||
*startx = x;
|
||||
*starty = y;
|
||||
break;}
|
||||
x+=16;
|
||||
if(x==16*25){x=0;
|
||||
y+=16;}i++;}}
|
||||
void set_gravity(int id_level, char *default_gravity){
|
||||
switch(id_level){
|
||||
case 1:
|
||||
*default_gravity = 0;
|
||||
break;
|
||||
case 2:
|
||||
*default_gravity = 0;
|
||||
break;
|
||||
case 3:
|
||||
*default_gravity = 0;
|
||||
break;
|
||||
}}
|
||||
void del_level(char level[])
|
||||
{memcpy(level,"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",350);}
|
||||
|
|