level 17 + nbswitch block

This commit is contained in:
Tituya 2021-04-30 01:48:00 +02:00
parent 87a373def8
commit 7df8fd2be3
34 changed files with 565 additions and 673 deletions

View File

@ -41,7 +41,8 @@ add_custom_command(OUTPUT
editor/levels/13.lvl
editor/levels/14.lvl
editor/levels/15.lvl
editor/levels/16.lvl)
editor/levels/16.lvl
editor/levels/17.lvl)
set(SOURCES
src/collide.c
@ -74,7 +75,9 @@ set(ASSETS_cg
assets-cg/img/player.png
assets-cg/img/solid.png
assets-cg/img/speedrun.png
assets-cg/img/switch.png)
assets-cg/img/switch.png
assets-cg/img/nbswitch.png
assets-cg/img/nbswitchlayout.png)
set(FLAGS -Wall -Wextra -Os)

View File

@ -65,3 +65,10 @@ speedrun.png:
switch.png:
type:bopti-image
name: img_switch
nbswitch.png:
type:bopti-image
name: img_nbswitch
nbswitchlayout.png:
type:bopti-image
profile:p4
name: img_nbswitchlayout

BIN
assets-cg/img/nbswitch.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

BIN
assets-cg/img/nbswitchlayout.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -2,16 +2,13 @@ ids = 0
save = open("src/setlevel.c","w+")
save.write("#include \"setlevel.h\"\n#include <gint/std/string.h>\nvoid set_level(int id_level, char level[], int *startx, \
int *starty, char *gravity, int *appear, int *disappear){\nswitch(id_level){")
int *starty, char *gravity, int *appear, int *disappear, int *nbswitch){\nswitch(id_level){")
while 1:
try:
lv = open(f"editor/levels/{ids}.lvl","r")
ide = lv.readlines()
if len(ide)==1: save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-1])}\",350);\nbreak;\n")
elif ide[1]!='\n':
save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-2])}\",350);\n*appear={ide[1][:-1]};\n*disappear={ide[2]};\nbreak;\n")
else:
save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-2])}\",350);\n*appear={ide[2][:-1]};\n*disappear={ide[3]};\nbreak;\n")
if ide[1]!='\n':
save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-2])}\",350);\n*appear={ide[1][:-1]};\n*disappear={ide[2]};\n*nbswitch={ide[3]};\nbreak;\n")
ids+=1
except FileNotFoundError:
lv.close()

View File

@ -24,21 +24,17 @@ def newgrille():
["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
global grille, gravityid, app, disa, nbswitch
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])
gravityid=(int)(ide[0][350:])
app = int(ide[1][:-1])
disa = int(ide[2])
nbswitch = int(ide[3])
ide = str(ide[0][:-2])
grille=[]
for j in range(14):
grille.append([])
@ -46,15 +42,16 @@ def load(ids):
grille[-1].append(str(ide[i+25*j]))
except FileNotFoundError:
newgrille()
gravityid="6"
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))
if gravityid==6: levelgr = font.render("",1,(120,0,0))
if 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))
nbswitchfont = font.render("Nb="+str(nbswitch),1,(255,230,0))
for a in range(14):
for b in range(25):
pygame.draw.rect(fenetre,(255,255,255),((52*b, 52*a), (52, 52)))
@ -64,9 +61,9 @@ def place():
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:
if grille[a][b]=="s" and gravityid==6:
fenetre.blit(pygame.transform.scale(player.subsurface((0,0),(12,12)),(39,39)),(52*b,52*a+13))
elif grille[a][b]=="s" and int(gravityid)==7:
elif grille[a][b]=="s" and gravityid==7:
fenetre.blit(pygame.transform.scale(player.subsurface((0,0),(12,12)),(39,39)),(52*b,52*a))
if grille[a][b]=="e":
fenetre.blit(pygame.transform.scale(end,(52,52)),(52*b,52*a))
@ -104,20 +101,19 @@ def place():
fenetre.blit(pygame.transform.scale(appear,(52,52)),(52*b,52*a))
elif grille[a][b]=="h" and tab:
fenetre.blit(pygame.transform.scale(appearblock,(52,52)),(52*b,52*a))
if grille[a][b]=="z":
fenetre.blit(pygame.transform.scale(nbswitchblock,(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))
fenetre.blit(nbswitchfont, (370, 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.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}\n{app}\n{disa}\n{nbswitch}")
f.close()
pygame.init()
@ -127,13 +123,14 @@ 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"]
suite=["0","1","d","s","e","k","3","K","a","c","m","t","l","b","B","i","S","h","z"]
lvm = open(f"include/define.h","r")
id_level = 0
gravityid = 6
disa = 10
app = 13
nbswitch = -1
lock=""
tab = 0
@ -157,6 +154,7 @@ 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()
appearblock = pygame.image.load("editor/img/appearblock.png").convert_alpha()
nbswitchblock = pygame.image.load("editor/img/nbswitch.png").convert_alpha()
load(id_level)
place()
@ -192,6 +190,14 @@ while securite==False:
disa-=1
write()
place()
if carac == "t":
nbswitch+=1
write()
place()
if carac == "g":
if nbswitch >= 0: nbswitch-=1
write()
place()
if carac == "a":
lock=""
place()
@ -200,10 +206,10 @@ while securite==False:
write()
place()
if event.key == pygame.K_LSHIFT:
if gravityid=="7":
gravityid="6"
if gravityid==7:
gravityid=6
else:
gravityid="7"
gravityid=7
write()
place()
if event.key == pygame.K_TAB:

BIN
editor/img/nbswitch.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

View File

@ -1,4 +1,4 @@
11111111111111111111000111000000000000000000000001100000000000000000000000110e00000b0000l000S000000111111aaaaaaa11111111111111ddd1ddddddd1mmm1000000011ddd111111111mmm1000000011ddd111111111ccc101BB00011ddd1ddddddd1ccc10i00000111111aaaaaaa111110i000001100000000000030010i0000011000000000000300h0i1BBB111s000K00000k0300h0i0000011111111ddd1111111111000116
13
13
10
-1

View File

@ -1 +1,4 @@
10011111111dddd1111111111000111100000000000000000000011110011111111ddd100001111111001dd000ddddd111111111111001dd0t0ddddddddd11000001001dd000ddddddddd11000001001aaaaaaaaaaaaaa110s00010010000000000000e11d1100100100000000000aaa11111001001000000000ddddd1111100100100000000011111100010000010000000003000000001000001000K0000030k00010011111111111111111111116
10011111111dddd1111111111000111100000000000000000000011110011111111ddd100001111111001dd000ddddd111111111111001dd0t0ddddddddd11000001001dd000ddddddddd11000001001aaaaaaaaaaaaaa110s00010010000000000000e11d1100100100000000000aaa11111001001000000000ddddd1111100100100000000011111100010000010000000003000000001000001000K0000030k00010011111111111111111111116
13
10
-1

View File

@ -1 +1,4 @@
11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116
11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116
13
10
-1

View File

@ -1 +1,4 @@
1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16
1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16
13
10
-1

View File

@ -1 +1,4 @@
1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116
1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116
13
10
-1

View File

@ -1 +1,4 @@
11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6
11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6
13
10
-1

View File

@ -1 +1,4 @@
1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017
1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017
13
10
-1

View File

@ -1,4 +1,4 @@
i011100dd1111dddm111ddmd1i01d1000000010S0011100S01i01d100000001000000000001i01d1cc111001hh1c11111001i01ddddddi00i000bddd00001i01dd1133i00i000lddd000K1100000000i00i00001d110011300000000i00100331d100003300000010i001s03t1d1000031111100hki0011111ddd1BB1110S01hh11100m0000aaa0000110001001d100m000000000001100e1001d100m0aaa000aaa0110d11001111111ddddddddd116
4
7
13
10
-1

View File

@ -1,4 +1,4 @@
11111dddd100d110111111331000000000000d1d0000dd10s0111d00000000K1d10000d11111ddddd11ddhh1dddd000dddd11100Sh00dd00000dd00000001i0000000dd000000d0000S001i01100d0dd00d000dd0000001i0d00Sd0dd00dd10ddhh00l01i0ddddd0dd00ddi0d00000001iBBBdd0011aaddi0d0S00d0011000dd000300ddi0d0000d00110mmdd000d00ddi0dd00dd0011emtdddddd00ddi0ddddddkk1111111111100111Bdddd110016
14
7
13
10
-1

4
editor/levels/17.lvl Normal file
View File

@ -0,0 +1,4 @@
101111110111111111100111110dS00d00000001111100111110aaa0d00000K010000001111100h00d0S0000010ddaaa1111100000ddd1111110ddddd1111111a00000S1e3s00100S0111100z0000000111dda100k0100000z000000000ddddd00001000111ddaaaaa000000000101001100Saddddd0000000001010011000000aa11111111111110011000a000003000000010000011000a0a0003010000t100000110111111011111111110011117
13
10
18

View File

@ -1,3 +1,4 @@
1dddddd100111111111111111000000000011111000000000000000000l01100c00000000001aaaaaaa111100c00000000011dddddddddd1001aaaaaaaaa11cccccccccc1001ddddddddd1000000000001331000000aa000000000000s10e1k0000000001ccccccccc111111111113311100000000011001000000000110000000001100b0000000001100000000011t0b00000000011000K0000011111aaaaaaaaa1111111110011111ddddddddd16
12
1
13
10
-1

View File

@ -1 +1,4 @@
11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117
11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117
13
10
-1

View File

@ -1,3 +1,4 @@
11111111111011111dddd1111100001dd0000dd100000000011s0001dd0d11dd10000000001111001dd0d111dd00111100011dd001dt0d10000001dd100011dd001d11d10000001dd100011dd00dd11110011111dd100011dd00000000001dddddd100011dd1111dbd1111ddd111100011ddddddd0dd1d1ddd100000011ddddddd0000d1ddd1e0000011ddddddd1110d1ddd111cccc11dddddddddd0d1ddd111dddd111111111111011111111111116
12
13
13
10
-1

View File

@ -1,4 +1,4 @@
000000000000000000000000000000000000000000000000t000000000000000000000000000011dd111111111111111110000100000100000010000001000011cc001s0000d00000001000010000e111dd0100000dd100001001111000d0000000dd100001000001000111d000ddd1000010000000000000000ddd1000011111111111d111B11111000000000000000000000000000000000000000000000000000000000000000000000000000006
12
6
13
10
-1

View File

@ -1,3 +1,4 @@
10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111d1dddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd11110001011111011111111111117
5
9
13
10
-1

View File

@ -1 +1,4 @@
111001111111100i0d0011111100000111ddd000i0d0000001100000000000000itd00000e1111111ddd111111111111111100000000000000000h00d0000111111111dd111110100d000110001100000000010100d0001000011000000000i0d00d0000000000000000000i0d00d00001111dd111000000ild00111111000011111ddd00i0d0011111d000011111ddd00i0d0011111d0s0011111ddd00i0d0011111111001111111100i0d00111116
111001111111100i0d0011111100000111ddd000i0d0000001100000000000000itd00000e1111111ddd111111111111111100000000000000000h00d0000111111111dd111110100d000110001100000000010100d0001000011000000000i0d00d0000000000000000000i0d00d00001111dd111100000ild00111111000011111ddd00i0d0011111d000011111ddd00i0d0011111d0s0011111ddd00i0d0011111111001111111100i0d00111116
13
10
-1

View File

@ -1 +1,4 @@
dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6
dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6
13
10
-1

View File

@ -1 +1,4 @@
00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006
00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006
13
10
-1

View File

@ -3,3 +3,4 @@ void draw_player(int x, int y, char type);
void draw_timer(unsigned int frame);
void draw_blackout(int x, int y);
void draw_end(int framelevel, int id_level, char record);
void draw_nbswitch(int nbswitch);

View File

@ -1,9 +1,4 @@
void savefile(void);
int loadtime(int idlevel);
void restore(void);
<<<<<<< HEAD
void savetime(float framelevel, int id_level);
void reset_times();
=======
void savetimes(float framelevel, int id_level);
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda

View File

@ -1,4 +1,3 @@
void set_level(int id_level, char level[], int *startx, int *starty,
char *gravity, int *appear, int *disappear);
void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, int *appear, int *disappear, int *nbswitch);
void set_gravity(int id_level, char *default_gravity);
void del_level(char level[]);

75
src/collide.c Normal file → Executable file
View File

@ -1,51 +1,44 @@
#include "collide.h"
#include "define.h"
#define DEAD_COLLISION \
3 // make the collision with the deadly block less effective
#define DEAD_COLLISION 3 //make the collision with the deadly block less effective
char collide(int x, int y, char level[],
char block) // detect if player is in a block
char collide(int x, int y, char level[], char block) //detect if player is in a block
{
if ((level[(int)(x / 16) + (int)((y + PLAYER_HEIGHT) / 16) * 25] ==
block ||
level[(int)((x + PLAYER_HEIGHT) / 16) +
(int)((y + PLAYER_HEIGHT) / 16) * 25] == block ||
level[(int)(x / 16) + (int)((y / 16) * 25)] == block ||
level[(int)((x + PLAYER_HEIGHT) / 16) + (int)((y / 16) * 25)] ==
block))
return 1;
if((level[(int)(x/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block ||
level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block ||
level[(int)(x/16) + (int)((y/16) * 25)] == block ||
level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y/16) * 25)] == block)) return 1;
return 0;
}
char collide_solid(int x, int y, char level[])
{
return collide(x, y, level, '1') || collide(x, y, level, '3') ||
collide(x, y, level, '4') || collide(x, y, level, 'c') ||
collide(x, y, level, 'C') || collide(x, y, level, 'B') ||
collide(x, y, level, 'i') || collide(x, y, level, 'H');
return collide(x, y, level, '1')
|| collide(x, y, level, '3')
|| collide(x, y, level, '4')
|| collide(x, y, level, 'c')
|| collide(x, y, level, 'C')
|| collide(x, y, level, 'B')
|| collide(x, y, level, 'i')
|| collide(x, y, level, 'H');
}
char collide_dead(int x, int y, char level[])
{
return collide_point(x + DEAD_COLLISION, y + DEAD_COLLISION, level,
'd') ||
collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION,
y + DEAD_COLLISION, level, 'd') ||
collide_point(x + DEAD_COLLISION,
y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') ||
collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION,
y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') ||
collide_point(x + 1, y + 1, level, 'C') ||
collide_point(x + PLAYER_HEIGHT - 1, y + 1, level, 'C') ||
collide_point(x + 1, y + PLAYER_HEIGHT - 1, level, 'C') ||
collide_point(x + PLAYER_HEIGHT - 1, y + PLAYER_HEIGHT - 1,
level, 'C');
return collide_point(x + DEAD_COLLISION, y + DEAD_COLLISION, level, 'd') ||
collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, y + DEAD_COLLISION, level, 'd') ||
collide_point(x + DEAD_COLLISION, y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') ||
collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') ||
collide_point(x + 1, y + 1, level, 'C') ||
collide_point(x + PLAYER_HEIGHT - 1, y + 1, level, 'C') ||
collide_point(x + 1, y + PLAYER_HEIGHT - 1, level, 'C') ||
collide_point(x + PLAYER_HEIGHT - 1, y + PLAYER_HEIGHT - 1, level, 'C');
}
char collide_point(int x, int y, char level[], char block)
{
return (level[(int)(x / 16) + (int)(y / 16) * 25] == block);
return (level[(int)(x/16) + (int)(y/16) * 25] == block);
}
char collide_end(int x, int y, char level[])
@ -55,18 +48,20 @@ char collide_end(int x, int y, char level[])
void collide_replace(int x, int y, char level[], char collide, char replace)
{
if (collide_point(x, y, level, collide)) {
level[((x) / 16) + ((y) / 16) * 25] = replace;
if(collide_point(x, y, level, collide))
{
level[((x)/16)+((y)/16)*25] = replace;
}
if (collide_point(x + PLAYER_HEIGHT, y, level, collide)) {
level[((x + PLAYER_HEIGHT) / 16) + ((y) / 16) * 25] = replace;
if(collide_point(x + PLAYER_HEIGHT, y, level, collide))
{
level[((x + PLAYER_HEIGHT)/16)+((y)/16)*25] = replace;
}
if (collide_point(x, y + PLAYER_HEIGHT, level, collide)) {
level[((x) / 16) + ((y + PLAYER_HEIGHT) / 16) * 25] = replace;
if(collide_point(x, y + PLAYER_HEIGHT, level, collide))
{
level[((x)/16)+((y + PLAYER_HEIGHT)/16)*25] = replace;
}
if (collide_point(x + PLAYER_HEIGHT, y + PLAYER_HEIGHT, level,
collide)) {
level[((x + PLAYER_HEIGHT) / 16) +
((y + PLAYER_HEIGHT) / 16) * 25] = replace;
if(collide_point(x + PLAYER_HEIGHT, y + PLAYER_HEIGHT, level, collide))
{
level[((x + PLAYER_HEIGHT)/16)+((y + PLAYER_HEIGHT)/16)*25] = replace;
}
}

218
src/drawlevel.c Normal file → Executable file
View File

@ -1,33 +1,35 @@
#include "drawlevel.h"
#include <gint/std/string.h>
#include <gint/display.h>
#include "define.h"
#include "times.h"
#include <gint/display.h>
#include <gint/std/string.h>
#define VISIBLE_RECT 35
extern bopti_image_t img_solid; // solid block
extern bopti_image_t img_coin; // facultative coin
extern bopti_image_t img_dead; // dead block
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_blackout; // blackout
extern bopti_image_t img_chrono1; // chronoblock
extern bopti_image_t img_chrono2; // chronoblock 2
extern bopti_image_t img_key2; // key 2
extern bopti_image_t img_damaged; // damaged block
extern bopti_image_t img_chock; // chock block
extern bopti_image_t img_switch; // switch block
extern bopti_image_t img_ice; // switch block
extern bopti_image_t img_appear; // appear block
extern bopti_image_t img_solid; //solid block
extern bopti_image_t img_coin; //facultative coin
extern bopti_image_t img_dead; //dead block
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_blackout; //blackout
extern bopti_image_t img_chrono1; //chronoblock
extern bopti_image_t img_chrono2; //chronoblock 2
extern bopti_image_t img_key2; //key 2
extern bopti_image_t img_damaged; //damaged block
extern bopti_image_t img_chock; //chock block
extern bopti_image_t img_switch; //switch block
extern bopti_image_t img_ice; //switch block
extern bopti_image_t img_appear; //appear block
extern bopti_image_t img_nbswitch; //appear block
extern bopti_image_t img_endscreen;
extern bopti_image_t img_nbswitchlayout;
extern bopti_image_t img_new;
void draw_player(int x, int y, char type)
{
dsubimage(x, y, &img_player, 12 * (type - 1), 0, 12, 12, DIMAGE_NONE);
dsubimage(x,y,&img_player, 12*(type-1),0,12,12, DIMAGE_NONE);
}
void draw_level(char level[])
@ -36,76 +38,79 @@ void draw_level(char level[])
unsigned int x = 0;
unsigned int y = 0;
unsigned int i = 0;
while (i != strlen(level)) {
switch (level[i]) {
case '1': // solid block
dimage(x, y, &img_solid);
break;
case 't': // coin (treasure)
dimage(x, y, &img_coin);
break;
case 'd': // dead block
dimage(x, y, &img_dead);
break;
case 'e': // end of level
dimage(x, y, &img_end);
break;
case '3': // block link to the key1
dsubimage(x, y, &img_key1, 0, 0, 16, 16, DIMAGE_NONE);
break;
case 'k': // key1
dsubimage(x, y, &img_key1, 16, 0, 16, 16, DIMAGE_NONE);
break;
case 'a': // block link to the key2 when it's not on
dsubimage(x, y, &img_key2, 0, 0, 16, 16, DIMAGE_NONE);
break;
case '4': // block link to the key2
dsubimage(x, y, &img_key2, 16, 0, 16, 16, DIMAGE_NONE);
break;
case 'K': // key2
dsubimage(x, y, &img_key2, 32, 0, 16, 16, DIMAGE_NONE);
break;
case 'c': // chrono blocks
dimage(x, y, &img_chrono1);
break;
case 'C': // chrono blocks
dsubimage(x, y, &img_chrono2, 16, 0, 16, 16,
DIMAGE_NONE);
break;
case 'b': // blackout blocks
dimage(x, y, &img_blackout);
break;
case 'B': // damaged block
dimage(x, y, &img_damaged);
break;
case 'l': // chock blocks
dimage(x, y, &img_chock);
break;
case 'i': // chock blocks
dimage(x, y, &img_ice);
break;
case 'S': // chock blocks
dimage(x, y, &img_switch);
break;
case 'h': // void appear blocks
dsubimage(x, y, &img_appear, 0, 0, 16, 16, DIMAGE_NONE);
break;
case 'H': // appear blocks
dsubimage(x, y, &img_appear, 16, 0, 16, 16,
DIMAGE_NONE);
break;
case 'y': // appear blocks
dsubimage(x, y, &img_appear, 0, 0, 16, 16, DIMAGE_NONE);
break;
case 'm': // chronoappear blocks
dsubimage(x, y, &img_chrono2, 0, 0, 16, 16,
DIMAGE_NONE);
break;
while (i!=strlen(level))
{
switch(level[i])
{
case '1': //solid block
dimage(x,y,&img_solid);
break;
case 't': //coin (treasure)
dimage(x,y,&img_coin);
break;
case 'd': //dead block
dimage(x,y,&img_dead);
break;
case 'e': //end of level
dimage(x,y,&img_end);
break;
case '3': //block link to the key1
dsubimage(x,y,&img_key1,0,0,16,16,DIMAGE_NONE);
break;
case 'k': //key1
dsubimage(x,y,&img_key1,16,0,16,16,DIMAGE_NONE);
break;
case 'a': //block link to the key2 when it's not on
dsubimage(x,y,&img_key2,0,0,16,16,DIMAGE_NONE);
break;
case '4': //block link to the key2
dsubimage(x,y,&img_key2,16,0,16,16,DIMAGE_NONE);
break;
case 'K': //key2
dsubimage(x,y,&img_key2,32,0,16,16,DIMAGE_NONE);
break;
case 'c': //chrono blocks
dimage(x,y,&img_chrono1);
break;
case 'C': //chrono blocks
dsubimage(x,y,&img_chrono2,16,0,16,16,DIMAGE_NONE);
break;
case 'b': //blackout blocks
dimage(x,y,&img_blackout);
break;
case 'B': //damaged block
dimage(x,y,&img_damaged);
break;
case 'l': //chock blocks
dimage(x,y,&img_chock);
break;
case 'i': //chock blocks
dimage(x,y,&img_ice);
break;
case 'S': //chock blocks
dimage(x,y,&img_switch);
break;
case 'h': //void appear blocks
dsubimage(x,y,&img_appear,0,0,16,16,DIMAGE_NONE);
break;
case 'H': //appear blocks
dsubimage(x,y,&img_appear,16,0,16,16,DIMAGE_NONE);
break;
case 'y': //appear blocks
dsubimage(x,y,&img_appear,0,0,16,16,DIMAGE_NONE);
break;
case 'm': //chronoappear blocks
dsubimage(x,y,&img_chrono2,0,0,16,16,DIMAGE_NONE);
break;
case 'z': //nbswitch blocks
dimage(x,y,&img_nbswitch);
break;
}
x += 16;
if (x == 16 * 25) {
x = 0;
y += 16;
x+=16;
if(x==16*25)
{
x=0;
y+=16;
}
i++;
}
@ -113,44 +118,39 @@ 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
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)
{
float framefloat = frame;
dprint_opt(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%.2j",
(int)(framefloat / FPS * 100));
dprint_opt(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%.2j", (int)(framefloat/FPS*100));
}
void draw_end(int framelevel, int id_level, char record)
{
float framefloat = framelevel;
<<<<<<< HEAD
dimage(144,60,&img_endscreen);
if(record!=2)
{
dprint(166, 87, C_RED, "%.2j",(int)(framefloat/FPS*100));
=======
dimage(144, 60, &img_endscreen);
if (record != 2) {
dprint_opt(220, 115, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP,
"%d", framelevel);
dprint(166, 87, C_RED, "%.2j", (int)(framefloat / FPS * 100));
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
check_medal(framelevel, id_level, 178, 140);
if (record == 1)
dimage(60, 100, &img_new);
} else {
if(record==1) dimage(60,100,&img_new);
}
else
{
dprint(166, 87, C_RED, "GG !");
dprint(178, 140, C_RED, "%.2j", (int)(framefloat / FPS * 100));
dprint(178, 140, C_RED, "%.2j",(int)(framefloat/FPS*100));
}
dupdate();
}
void draw_nbswitch(int nbswitch) {
dimage(300,150,&img_nbswitchlayout);
dprint(335, 175, C_RED, "%d",nbswitch);
}

619
src/main.c Normal file → Executable file
View File

@ -1,17 +1,17 @@
#include <gint/clock.h>
#include <gint/display.h>
#include <gint/gint.h>
#include <gint/keyboard.h>
#include <gint/std/string.h>
#include <gint/clock.h>
#include <gint/timer.h>
#include <gint/gint.h>
#include <gint/std/string.h>
#include "collide.h"
#include "define.h"
#include "drawlevel.h"
#include "menu.h"
#include "save.h"
#include "setlevel.h"
#include "drawlevel.h"
#include "collide.h"
#include "menu.h"
#include "times.h"
#include "save.h"
#include "define.h"
#define VACCELERATION 0.2
#define HACCELERATION 0.4
@ -25,63 +25,57 @@ char run = 0;
int callback(volatile int *frame_elapsed)
{
*frame_elapsed = 1;
return TIMER_CONTINUE;
*frame_elapsed = 1;
return TIMER_CONTINUE;
}
void game(int *id_level, char mode, char *type)
{
volatile int frame_elapsed = 1;
int timer =
timer_setup(TIMER_ANY, 1000000 / FPS, callback, &frame_elapsed);
int timer = timer_setup(TIMER_ANY, 1000000/FPS, callback, &frame_elapsed);
timer_start(timer);
char game_loop = 1;
unsigned int frame = 0;
int framelevel = 0;
int player_x = 20, player_y = 20;
char level[351];
char gravity = 0; // 0 down 1 up
char gravity = 0; //0 down 1 up
char check = 1;
char blackout = 0;
int start_x;
int start_y;
int death_count = 0;
int coin = 0;
char check_coin = 0;
char double_check = 1;
<<<<<<< HEAD
char chock = 0;
=======
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
int appear = 10;
int disappear = 13;
int nbswitch = 0;
char check_nbswitch = 0;
float vspd = 1.0;
float hspd = 0.0;
if (*id_level == 10 && *type != 3)
*type = 2;
else if (*type != 3)
*type = 1;
if(*id_level==10 && *type!=3) *type = 2;
else if(*type!=3) *type = 1;
extern bopti_image_t img_speedrun;
set_level(*id_level, level, &start_x, &start_y, &gravity, &appear,
&disappear);
set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear, &nbswitch);
player_x = start_x;
player_y = start_y;
draw_level(level);
while (game_loop) {
while (!frame_elapsed)
sleep();
while(game_loop)
{
while(!frame_elapsed) sleep();
frame_elapsed = 0;
frame++;
framelevel++;
if (!(frame % 2)) {
if(!(frame%2))
{
draw_level(level);
<<<<<<< HEAD
if(blackout)
draw_blackout(player_x, player_y);
@ -101,395 +95,327 @@ void game(int *id_level, char mode, char *type)
else draw_timer(framelevel);
if(!mode) dprint_opt(330, 0, C_RGB(255,190,0), C_BLACK, DTEXT_LEFT, DTEXT_TOP, "Coin : %d", coin);
=======
if (blackout)
draw_blackout(player_x, player_y);
draw_player(player_x, player_y, *type);
if (!mode)
draw_timer(frame);
else
draw_timer(framelevel);
if (*id_level == 0 && !mode) {
dprint(85, 180, C_RGB(245, 245, 0), "SHIFT");
dprint(120, 3, C_RGB(220, 220, 220),
"Keys has effects on blocks");
dprint(15, 67, C_RGB(220, 220, 220),
"Red blocks = death");
dprint(30, 211, C_RGB(220, 220, 220),
"^ special blocks");
dprint(290, 131, C_RGB(110, 110, 110),
"Well done !");
}
if (!mode)
dprint_opt(330, 0, C_RGB(255, 190, 0), C_BLACK,
DTEXT_LEFT, DTEXT_TOP, "Coin : %d",
coin);
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
if(check_nbswitch) draw_nbswitch(nbswitch);
dupdate();
}
pollevent();
if (keydown(KEY_OPTN)) {
level[((player_x + 6) / 16) +
((player_y + 6) / 16) * 25] = 'd';
if(keydown(KEY_OPTN))
{
level[((player_x+6)/16)+((player_y+6)/16)*25] = 'd';
death_count--;
}
// Right collision
if (keydown(KEY_RIGHT)) {
//Right collision
if(keydown(KEY_RIGHT))
{
hspd *= 1 - FRICTION;
hspd += (keydown(KEY_RIGHT) - keydown(KEY_LEFT)) *
HACCELERATION;
if (!collide_solid(player_x + round(hspd) + 1, player_y,
level))
player_x += round(hspd);
else if (!collide_solid(player_x + 1, player_y, level))
player_x += 1;
if (player_x >= 388)
player_x = -4;
hspd += (keydown(KEY_RIGHT)-keydown(KEY_LEFT)) * HACCELERATION;
if(!collide_solid(player_x+round(hspd)+1, player_y, level)) player_x += round(hspd);
else if(!collide_solid(player_x+1, player_y, level)) player_x+=1;
if(player_x>=388) player_x=-4;
}
// Left collision
else if (keydown(KEY_LEFT)) {
//Left collision
else if(keydown(KEY_LEFT))
{
hspd *= 1 - FRICTION;
hspd += (keydown(KEY_RIGHT) - keydown(KEY_LEFT)) *
HACCELERATION;
if (!collide_solid(player_x + round(hspd) - 1, player_y,
level))
player_x += round(hspd);
else if (!collide_solid(player_x - 1, player_y, level))
player_x -= 1;
if (player_x < -9)
player_x = 384;
} else
hspd = 0;
// Action key
if (keydown(KEY_SHIFT) && !check &&
((collide_solid(player_x, player_y - 1, level) &&
gravity) ||
(collide_solid(player_x, player_y + 1, level) &&
!gravity))) {
hspd += (keydown(KEY_RIGHT)-keydown(KEY_LEFT)) * HACCELERATION;
if(!collide_solid(player_x+round(hspd)-1, player_y, level)) player_x += round(hspd);
else if(!collide_solid(player_x-1, player_y, level)) player_x-=1;
if(player_x<-9) player_x=384;
}
else hspd=0;
//Action key
if(keydown(KEY_SHIFT) && !check && (nbswitch > 0 || nbswitch == -1) &&
((collide_solid(player_x, player_y-1, level) && gravity) || (collide_solid(player_x, player_y+1, level) && !gravity)))
{
vspd = 1;
if (!gravity)
gravity = 1;
else
gravity = 0;
check = 1;
} else if (!keydown(KEY_SHIFT) && check)
check = 0;
// Gravity
if (!gravity) {
if (!collide_solid(player_x, player_y + (int)vspd + 1,
level)) {
if (vspd < MAX_VSPD)
vspd += VACCELERATION;
if (collide(player_x + 1, player_y, level, 'i'))
vspd += 0.15;
if (collide(player_x - 1, player_y, level, 'i'))
vspd += 0.15;
player_y += (int)vspd;
} else if (!collide_solid(
player_x, player_y + (int)vspd, level)) {
vspd -= VACCELERATION;
player_y += (int)vspd;
} else if (!collide_solid(player_x, player_y + 1,
level)) {
vspd = 1;
player_y += 1;
} else
vspd = 1;
} else {
if (!collide_solid(player_x, player_y - (int)vspd - 1,
level)) {
if (vspd < MAX_VSPD)
vspd += VACCELERATION;
if (collide(player_x + 1, player_y, level, 'i'))
vspd += 0.15;
if (collide(player_x - 1, player_y, level, 'i'))
vspd += 0.15;
player_y -= (int)vspd;
} else if (!collide_solid(
player_x, player_y - (int)vspd, level)) {
vspd -= VACCELERATION;
player_y -= (int)vspd;
} else if (!collide_solid(player_x, player_y - 1,
level)) {
vspd = 1;
player_y -= 1;
} else
vspd = 1;
if(!gravity) gravity=1;
else gravity=0;
if(check_nbswitch && nbswitch != 0) {
nbswitch-=1;
}
check=1;
}
// Collide with red block
if (collide_dead(player_x, player_y, level)) {
else if(!keydown(KEY_SHIFT) && check) check=0;
//Gravity
if(!gravity)
{
if(!collide_solid(player_x, player_y+(int)vspd+1, level))
{
if (vspd<MAX_VSPD) vspd+=VACCELERATION;
if(collide(player_x+1, player_y, level, 'i')) vspd+=0.15;
if(collide(player_x-1, player_y, level, 'i')) vspd+=0.15;
player_y+=(int)vspd;
}
else if(!collide_solid(player_x, player_y+(int)vspd, level))
{
vspd-=VACCELERATION;
player_y+=(int)vspd;
}
else if(!collide_solid(player_x, player_y+1, level))
{
vspd = 1;
player_y+=1;
}
else vspd = 1;
}
else
{
if(!collide_solid(player_x, player_y-(int)vspd-1, level))
{
if (vspd<MAX_VSPD) vspd+=VACCELERATION;
if(collide(player_x+1, player_y, level, 'i')) vspd+=0.15;
if(collide(player_x-1, player_y, level, 'i')) vspd+=0.15;
player_y-=(int)vspd;
}
else if(!collide_solid(player_x, player_y-(int)vspd, level))
{
vspd-=VACCELERATION;
player_y-=(int)vspd;
}
else if(!collide_solid(player_x, player_y-1, level))
{
vspd = 1;
player_y-=1;
}
else vspd = 1;
}
//Collide with red block
if(collide_dead(player_x, player_y, level))
{
vspd = 1;
player_x = start_x;
player_y = start_y;
if (check_coin)
coin--;
if(check_coin) coin--;
check_coin = 0;
set_level(*id_level, level, &start_x, &start_y,
&gravity, &appear, &disappear);
set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear, &nbswitch);
blackout = 0;
check_nbswitch = 0;
death_count++;
double_check = 1;
framelevel = 0;
if (*id_level == 1 && !mode)
frame = 0;
if(*id_level == 1 && !mode)
frame = 0;
}
// Collide with the end
if (collide_end(player_x, player_y, level)) {
if (!mode && *id_level != 0)
*id_level += 1;
else
break;
//Collide with the end
if(collide_end(player_x, player_y, level))
{
if(!mode && *id_level !=0) *id_level+=1;
else break;
check_coin = 0;
set_level(*id_level, level, &start_x, &start_y,
&gravity, &appear, &disappear);
set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear, &nbswitch);
player_x = start_x;
player_y = start_y;
blackout = 0;
double_check = 1;
framelevel = 0;
if (*id_level == 10 && *type == 1)
*type = 2;
else if (*type != 3)
*type = 1;
if (*id_level == LEVEL_MAX + 1) {
framelevel=0;
if(*id_level==10 && *type==1) *type = 2;
else if(*type!=3) *type = 1;
if(*id_level==LEVEL_MAX+1)
{
timer_stop(timer);
end(frame);
}
}
if (collide(player_x, player_y, level,
'k')) // Collide with key1 = disappearance of blocks
if(collide(player_x, player_y, level, 'k')) //Collide with key1 = disappearance of blocks
{
for (int i = 0; level[i] != '\0'; i++) {
if (level[i] == '3')
level[i] = '0';
if (level[i] == 'k')
level[i] = '0';
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='3') level[i]='0';
if(level[i]=='k') level[i]='0';
}
}
if (collide(player_x, player_y, level,
'K')) // Collide with key2 = appearance of blocks
if(collide(player_x, player_y, level, 'K')) //Collide with key2 = appearance of blocks
{
for (int i = 0; level[i] != '\0'; i++) {
if (level[i] == 'a')
level[i] = '4';
if (level[i] == 'K')
level[i] = '0';
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='a') level[i]='4';
if(level[i]=='K') level[i]='0';
}
}
if (collide(player_x, player_y, level, 't') &&
!check_coin) // Collide with coin
if(collide(player_x, player_y, level, 't') && !check_coin) //Collide with coin
{
for (int i = 0; level[i] != '\0'; i++) {
if (level[i] == 't') {
level[i] = '0';
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='t')
{
level[i]='0';
break;
}
}
check_coin = 1;
check_coin=1;
coin++;
}
if (collide(player_x, player_y, level,
'b')) // Collide with blackout block
if(collide(player_x, player_y, level, 'b')) //Collide with blackout block
{
for (int i = 0; level[i] != '\0'; i++) {
if (level[i] == 'b') {
level[i] = '0';
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='b')
{
level[i]='0';
break;
}
}
blackout = 1;
blackout=1;
}
if (level[((player_x + 6) / 16) + ((player_y + 6) / 16) * 25] ==
'l') // Collide with change block
if(collide(player_x, player_y, level, 'z')) //Collide with nbswitch block
{
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='z')
{
level[i]='0';
}
}
check_nbswitch=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};
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];
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);
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;
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;
x+=16;
if(x==16*25)
{
x=0;
y+=16;
}
i++;
}
<<<<<<< HEAD
if(!gravity) gravity=1;
else gravity=0;
chock++;
=======
if (!gravity)
gravity = 1;
else
gravity = 0;
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
}
if (collide(player_x, player_y + (int)vspd + 2, level, 'B') &&
vspd >= 5) // Damaged block
if(collide(player_x, player_y+(int)vspd+2, level, 'B') && vspd>=5) //Damaged block
{
if (level[((player_x) / 16) +
((player_y + 25) / 16) * 25] == 'B')
level[((player_x) / 16) +
((player_y + 25) / 16) * 25] = '0';
if (level[((player_x + 12) / 16) +
((player_y + 25) / 16) * 25] == 'B' &&
collide_point(player_x + 12, player_y + 22, level,
'B'))
level[((player_x + 12) / 16) +
((player_y + 25) / 16) * 25] = '0';
vspd = 1.0;
if(level[((player_x)/16)+((player_y+25)/16)*25]=='B') level[((player_x)/16)+((player_y+25)/16)*25]='0';
if(level[((player_x+12)/16)+((player_y+25)/16)*25]=='B' && collide_point(player_x+12, player_y+22, level, 'B')) level[((player_x+12)/16)+((player_y+25)/16)*25]='0';
vspd=1.0;
}
if (collide(player_x, player_y - (int)vspd - 2, level, 'B') &&
vspd >= 5) // Damaged block
if(collide(player_x, player_y-(int)vspd-2, level, 'B') && vspd>=5) //Damaged block
{
if (level[((player_x) / 16) +
((player_y - (int)vspd - 2) / 16) * 25] ==
'B')
level[((player_x) / 16) +
((player_y - (int)vspd - 2) / 16) * 25] =
'0';
if (level[((player_x + 12) / 16) +
((player_y - (int)vspd - 2) / 16) * 25] ==
'B' &&
collide_point(player_x + 12, player_y - 12, level,
'B'))
level[((player_x + 12) / 16) +
((player_y - (int)vspd - 2) / 16) * 25] =
'0';
vspd = 1.0;
if(level[((player_x)/16)+((player_y-(int)vspd-2)/16)*25]=='B') level[((player_x)/16)+((player_y-(int)vspd-2)/16)*25]='0';
if(level[((player_x+12)/16)+((player_y-(int)vspd-2)/16)*25]=='B' && collide_point(player_x+12, player_y-12, level, 'B')) level[((player_x+12)/16)+((player_y-(int)vspd-2)/16)*25]='0';
vspd=1.0;
}
collide_replace(player_x, player_y, level, 'h',
'y'); // Appear block
if (!collide(player_x, player_y, level, 'y') &&
double_check) // Appear block
collide_replace(player_x, player_y, level, 'h', 'y'); //Appear block
if(!collide(player_x, player_y, level, 'y') && double_check) //Appear block
{
for (int i = 0; level[i] != '\0'; i++) {
if (level[i] == 'y') {
for (int i = 0; level[i]!='\0' ; i++)
{
if(level[i]=='y')
{
double_check = 1;
break;
} else if (level[i] == 'h') {
double_check = 1;
break;
} else
double_check =
0; // This loop is executed only
// when an h or y is on the level
}
for (int i = 0; level[i] != '\0'; ++i) {
if (level[i] == 'y') {
level[i] = 'H';
}
else if(level[i]=='h')
{
double_check = 1;
break;
}
else double_check = 0; //This loop is executed only when an h or y is on the level
}
}
if (level[((player_x + 6) / 16) + ((player_y + 6) / 16) * 25] ==
'S') // Switch block
for (int i = 0; level[i]!='\0'; ++i)
{
level[((player_x + 6) / 16) +
((player_y + 6) / 16) * 25] = '0';
vspd = 1.0;
if (!gravity)
gravity = 1;
else
gravity = 0;
if(level[i]=='y')
{
level[i]='H';
}
}
if ((framelevel / FPS) > disappear)
for (int i = 0; level[i] != '\0'; i++)
if (level[i] == 'c')
level[i] = '0'; // after x seconds
// blocks disappear
if ((framelevel / FPS) > appear)
for (int i = 0; level[i] != '\0'; i++)
if (level[i] == 'm')
level[i] = 'C'; // after x seconds
// blocks appear
if (player_y >= 212)
player_y = -4;
if (player_y < -6)
player_y = 212;
// Menu
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) {
}
if(level[((player_x+6)/16)+((player_y+6)/16)*25] == 'S') //Switch block
{
level[((player_x+6)/16)+((player_y+6)/16)*25] = '0';
vspd=1.0;
if(!gravity) gravity=1;
else gravity=0;
}
if((framelevel/FPS)>disappear) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='c') level[i]='0'; //after x seconds blocks disappear
if((framelevel/FPS)>appear) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='m') level[i]='C'; //after x seconds blocks appear
if(player_y>=212) player_y=-4;
if(player_y<-6) player_y=212;
//Menu
if(keydown_any(KEY_EXIT, KEY_MENU, 0))
{
char menu_loop = 1;
char selected = 0;
int Y_POS = 18;
char buffer = 1;
while (menu_loop) {
while(menu_loop)
{
clearevents();
dclear(C_WHITE);
draw_level(level);
draw_player(player_x, player_y, *type);
dimage(0, 0, &img_speedrun);
draw_player(player_x,player_y, *type);
dimage(0,0,&img_speedrun);
selected += keydown(KEY_DOWN) - keydown(KEY_UP);
if (selected == 2)
selected = 0;
else if (selected == -1)
selected = 1;
if (selected == 2) selected = 0;
else if (selected == -1) selected = 1;
dtext(32, Y_POS, C_BLACK, "CONTINUE");
if (!mode)
dtext(32, Y_POS + 12, C_BLACK, "MENU");
else
dtext(32, Y_POS + 12, C_BLACK,
"SPEEDRUN MENU");
dtext(16, Y_POS + (selected * 12), C_BLACK,
">");
dprint(180, 45, C_RGB(83, 255, 0), "LEVEL : %d",
*id_level);
dprint(320, 3, C_RGB(255, 178, 0), "COIN : %d",
coin);
dprint(311, 17, C_RGB(150, 16, 16),
"DEATH : %d", death_count);
if(!mode) dtext(32, Y_POS + 12, C_BLACK, "MENU");
else dtext(32, Y_POS + 12, C_BLACK, "SPEEDRUN MENU");
dtext(16, Y_POS + (selected * 12), C_BLACK, ">");
dprint(180, 45, C_RGB(83,255,0), "LEVEL : %d", *id_level);
dprint(320, 3, C_RGB(255,178,0), "COIN : %d", coin);
dprint(311, 17, C_RGB(150,16,16), "DEATH : %d", death_count);
dupdate();
if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) {
switch (selected) {
case 0:
menu_loop = 0;
break;
case 1:
if (keydown_any(KEY_SHIFT, KEY_EXE, 0))
{
switch (selected)
{
case 0:
menu_loop = 0;
break;
case 1:
menu_loop = 0;
game_loop = 0;
break;
}
}
if(keydown_any(KEY_EXIT, KEY_MENU, 0))
{
if(!buffer)
{
menu_loop = 0;
game_loop = 0;
break;
}
}
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) {
if (!buffer) {
menu_loop = 0;
game_loop = 0;
break;
}
} else
buffer = 0;
while (keydown_any(KEY_UP, KEY_DOWN, 0))
clearevents();
else buffer = 0;
while (keydown_any(KEY_UP, KEY_DOWN, 0)) clearevents();
}
}
}
timer_stop(timer);
<<<<<<< HEAD
//when a level is quit
if(mode)
{
@ -500,27 +426,21 @@ void game(int *id_level, char mode, char *type)
*id_level = 1;
}
if(game_loop) //end of a level with level selection
=======
// when a level is quit
if (mode) {
if (*id_level == 0)
*id_level = 1;
if (game_loop) // end of a level with level selection
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
{
float framefloat = framelevel;
draw_end(framelevel, *id_level, 0);
savetime(framefloat, *id_level);
sleep_ms(2500);
}
if (!speed_menu(id_level)) {
if(!speed_menu(id_level))
{
mode = 1;
death_count = 0;
game(id_level, mode, type);
} else
main();
} else
main();
}
else main();
}
else main();
}
void end(unsigned int frame)
@ -531,25 +451,21 @@ void end(unsigned int frame)
}
int main(void)
<<<<<<< HEAD
{
if(!run) {
gint_switch(restore);
run = 1;
}
=======
{
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
char mode = 0;
char type = 1;
char valeur = start_menu(&type);
if (!valeur) // normal game (level selection)
if(!valeur) //normal game (level selection)
{
int id_level = 1;
if (!speed_menu(&id_level)) {
if(!speed_menu(&id_level))
{
mode = 1;
game(&id_level, mode, &type);
<<<<<<< HEAD
}
else main();
}
@ -561,15 +477,6 @@ int main(void)
}
else if(valeur==2) // tutorial
{
=======
} else
main();
} else if (valeur == 1) {
int id_level = 1;
mode = 0;
game(&id_level, mode, &type);
} else if (valeur == 2) {
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
int id_level = 0;
mode = 1;
game(&id_level, mode, &type);

108
src/menu.c Normal file → Executable file
View File

@ -1,16 +1,16 @@
#include "define.h"
#include "drawlevel.h"
#include "save.h"
#include <gint/display.h>
#include <gint/keyboard.h>
#include "setlevel.h"
#include "times.h"
#include <gint/display.h>
#include "define.h"
#include "save.h"
#include <gint/gint.h>
#include <gint/keyboard.h>
int round(float num) // round(2.5) = 3 round(-3.2) = -3
{
return num < 0 ? num - 0.5 : num + 0.5;
}
int round(float num) //round(2.5) = 3 round(-3.2) = -3
{
return num < 0 ? num - 0.5 : num + 0.5;
}
char start_menu(char *type)
{
@ -20,21 +20,14 @@ char start_menu(char *type)
char buffer = 1;
char buffer2 = 1;
int Y_POS = 85;
<<<<<<< HEAD
while(menu_loop)
{
=======
gint_switch(restore);
while (menu_loop) {
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
clearevents();
dclear(C_WHITE);
dimage(0, 0, &img_menu);
dimage(0,0,&img_menu);
selection += keydown(KEY_DOWN) - keydown(KEY_UP);
if (selection == 4)
selection = 0;
else if (selection == -1)
selection = 3;
if (selection == 4) selection = 0;
else if (selection == -1) selection = 3;
dtext(32, Y_POS, C_BLACK, "PLAY");
dtext(32, Y_POS + 12, C_BLACK, "ALL MODE");
dtext(32, Y_POS + 24, C_BLACK, "TEST LEVEL");
@ -42,7 +35,6 @@ char start_menu(char *type)
dtext(16, Y_POS + (selection * 12), C_BLACK, ">");
dupdate();
if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) {
<<<<<<< HEAD
if(!buffer2) return selection;
}
else buffer2 = 0;
@ -52,21 +44,6 @@ char start_menu(char *type)
else buffer = 0;
if(keydown_all(KEY_5,KEY_6)) *type = 3;
while (keydown_any(KEY_UP, KEY_DOWN, 0)) clearevents();
=======
if (!buffer2)
return selection;
} else
buffer2 = 0;
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) {
if (!buffer)
return -1;
} else
buffer = 0;
if (keydown_all(KEY_5, KEY_6))
*type = 3;
while (keydown_any(KEY_UP, KEY_DOWN, 0))
clearevents();
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
}
return selection;
}
@ -74,67 +51,54 @@ char start_menu(char *type)
char speed_menu(int *id_level)
{
char level[351];
char gravity = 0; // 0 down 1 up
char gravity = 0; //0 down 1 up
int start_x;
int start_y;
char buffer = 1;
int appear = 10;
int disappear = 13;
int sto = loadtime(*id_level - 1);
int nbswitch = 0;
int sto = loadtime(*id_level-1);
char menu_loop = 1;
char check = 1;
extern bopti_image_t img_speedrun;
while (menu_loop) {
while(menu_loop)
{
clearevents();
dclear(C_WHITE);
*id_level += keydown(KEY_RIGHT) - keydown(KEY_LEFT);
if (*id_level == LEVEL_MAX + 1)
*id_level = 1;
else if (*id_level == 0)
*id_level = LEVEL_MAX;
if (keydown(KEY_RIGHT) || keydown(KEY_LEFT))
sto = loadtime(*id_level - 1);
set_level(*id_level, level, &start_x, &start_y, &gravity,
&appear, &disappear);
if (*id_level == LEVEL_MAX+1) *id_level = 1;
else if (*id_level == 0) *id_level = LEVEL_MAX;
if(keydown(KEY_RIGHT) || keydown(KEY_LEFT)) sto = loadtime(*id_level-1);
set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear, &nbswitch);
draw_level(level);
dimage(0, 0, &img_speedrun);
if (sto != 0)
check_medal(round(sto * 0.01 * FPS), *id_level, 335, 8);
dimage(0,0,&img_speedrun);
if(sto != 0) check_medal(round(sto*0.01*FPS), *id_level, 335, 8);
dtext(340, 214, C_BLACK, "TIMES");
dtext(190, 45, C_BLACK, "Time : ");
<<<<<<< HEAD
dprint(80,20,C_BLACK,"Level : %d",*id_level);
if(sto != 0) dprint(194,60,C_RED, "%.2j", sto);
else dprint(202,60,C_RED, "/");
=======
dprint(80, 20, C_BLACK, "Level : %d", *id_level);
if (sto != 0)
dprint(194, 60, C_RED, "%.2j", sto);
else
dprint(202, 60, C_RED, "/");
if (*id_level == 14)
dprint_opt(180, 8, C_RGB(0, 255, 255), C_BLACK,
DTEXT_LEFT, DTEXT_TOP, "VVVVVV");
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
dupdate();
if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) {
if (!check) {
if (keydown_any(KEY_SHIFT, KEY_EXE, 0))
{
if(!check)
{
del_level(level);
return 0;
}
} else
check = 0;
if (keydown(KEY_F6)) {
}
else check = 0;
if (keydown(KEY_F6))
{
draw_time(*id_level);
}
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) {
if (!buffer)
return 1;
} else
buffer = 0;
while (keydown_any(KEY_RIGHT, KEY_LEFT, 0))
clearevents();
if(keydown_any(KEY_EXIT, KEY_MENU, 0)) {
if(!buffer) return 1;
}
else buffer = 0;
while (keydown_any(KEY_RIGHT, KEY_LEFT, 0)) clearevents();
}
return 0;
}

36
src/save.c Normal file → Executable file
View File

@ -1,7 +1,7 @@
#include "define.h"
#include "drawlevel.h"
#include <gint/bfile.h>
#include <gint/gint.h>
#include "define.h"
#include "drawlevel.h"
#include <gint/keyboard.h>
int retcode;
@ -15,39 +15,20 @@ static const uint16_t *filepath = u"\\\\fls0\\AST3.sav";
void savefile(void)
{
int descriptor;
descriptor = BFile_Open(filepath, BFile_WriteOnly);
BFile_Write(descriptor, times, sizeof(times));
BFile_Close(descriptor);
}
<<<<<<< HEAD
/* savetime() is call when the player has reached the end of a level.
* If his time is better than the save time, it will save it in the array
*/
void savetime(float framelevel, int id_level)
=======
/* loadfile() is only called by the function loadtime() because
* loadtime() set the value of "id_leveltab". It store in the global retcode
* the time of the player. This function is called once per level in the
* level selection menu to avoid loading time. */
void loadfile(void)
{
int descriptor;
descriptor = BFile_Open(filepath, BFile_ReadOnly);
BFile_Read(descriptor, &retcode, sizeof(times[0]),
sizeof(times[0]) * id_leveltab);
BFile_Close(descriptor);
}
/* savetimes() is call when the player has reached the end of a level.
* If his time is better than the save time, it will call the function
* savefile() else, nothing append to avoid loading time. */
void savetimes(float framelevel, int id_level)
>>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda
{
if (times[id_level - 1] > (int)(framelevel / FPS * 100) ||
times[id_level - 1] == 0 || keydown(KEY_7)) {
if(times[id_level - 1] > (int)(framelevel / FPS * 100) ||
times[id_level - 1] == 0 || keydown(KEY_7))
{
times[id_level - 1] = (int)(framelevel / FPS * 100);
draw_end((int)framelevel, id_level, 1);
}
@ -63,10 +44,9 @@ void restore(void)
uint16_t foundpath[30];
int size = sizeof(times);
int descriptor;
char checkfile =
BFile_FindFirst(filepath, &handle, foundpath, &fileInfo);
char checkfile = BFile_FindFirst(filepath, &handle, foundpath, &fileInfo);
BFile_FindClose(handle);
if (checkfile == -1)
if(checkfile == -1)
BFile_Create(filepath, BFile_File, &size);
else {
descriptor = BFile_Open(filepath, BFile_ReadOnly);

View File

@ -14,3 +14,4 @@
8.35
7.45
10.53
17.95