Skip to content
Snippets Groups Projects
Commit ea81e5c4 authored by doferreira2's avatar doferreira2
Browse files

v2 Nyancat

parent 0be330e8
No related branches found
No related tags found
No related merge requests found
SDL/ChefOeuvre/Image/planet3.png

1.35 MiB

No preview for this file type
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include <math.h>
#define LARGEUR 1200
#define HAUTEUR 600
......@@ -12,7 +12,6 @@
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
int Init_Window(char *titre)
{
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
......@@ -81,7 +80,6 @@ void Aff_textu_full(SDL_Texture * Texture)
SDL_DestroyRenderer(renderer);
}
SDL_RenderCopy(renderer, Texture, &source, &dest);
}
TTF_Font *Init_Font(char *text)
......@@ -103,12 +101,78 @@ TTF_Font* Init_Font(char * text)
SDL_DestroyRenderer(renderer);
}
TTF_SetFontStyle(font, TTF_STYLE_ITALIC | TTF_STYLE_BOLD);
return font;
}
void Aff_Score(TTF_Font *Txt, SDL_Color color, SDL_Rect *pos, char *score_t, int nscore_t)
{
char lettre[] = "i";
for (int k = 0; k < (nscore_t); ++k)
{
switch (k % 7)
{
case (0):
color.r = 240;
color.g = 50;
color.b = 255;
break;
case (1):
color.r = 50;
color.g = 90;
color.b = 255;
break;
case (2):
color.r = 50;
color.g = 180;
color.b = 255;
break;
case (3):
color.r = 50;
color.g = 255;
color.b = 50;
break;
case (4):
color.r = 255;
color.g = 255;
color.b = 50;
break;
case (5):
color.r = 255;
color.g = 200;
color.b = 50;
break;
case (6):
color.r = 255;
color.g = 50;
color.b = 50;
break;
}
lettre[0] = score_t[k];
SDL_Surface *text_surface = NULL;
SDL_Texture *text_texture = NULL;
text_surface = TTF_RenderText_Blended(Txt, lettre, color);
text_texture = SDL_CreateTextureFromSurface(renderer, text_surface);
SDL_FreeSurface(text_surface);
SDL_QueryTexture(text_texture, NULL, NULL, &pos->w, &pos->h);
SDL_RenderCopy(renderer, text_texture, NULL, pos);
SDL_DestroyTexture(text_texture);
pos->x += pos->w;
}
}
/*--------------------------------------------------------------------------*/
/* Code utile */
/* printf("x:%d y:%d w:%d h:%d\n",pos.x,pos.y,pos.w,pos.h); */
/* gcc Nyancat.c -o Nyancat -g -lSDL2 -lSDL2_image -lSDL2_ttf -Wall -Wextra */
/*--------------------------------------------------------------------------*/
int main()
{
......@@ -117,11 +181,10 @@ int main ()
SDL_Texture *Planet = NULL;
TTF_Font *Txt = NULL;
Init_Window("Nyancat");
Fond = Init_Texture("./Image/fond_Cat.jpg");
CAT = Init_Texture("./Image/CAT.png");
Planet = Init_Texture("./Image/planet2.png");
Planet = Init_Texture("./Image/planet3.png");
Txt = Init_Font("./fonts/slkscr.ttf");
......@@ -131,21 +194,26 @@ int main ()
char score_t[] = "Le score est de : 00";
int nscore_t = strlen(score_t);
char lettre[]="i";
int Score = 0;
char level_t[] = "Niveau suivant: 1";
int nlevel_t = strlen(level_t);
int Level = 1;
int cur_L = 0;
int suivant = 0;
int running = 1;
SDL_Event event;
SDL_Rect window_dim = {0};
SDL_Rect dest_cat = {0};
SDL_Rect source_cat = {0};
SDL_Rect etat_cat = {0};
SDL_Rect dest_plan={0};
SDL_Rect dest_plan[10] = {0};
SDL_Rect source_plan = {0};
SDL_Rect etat_plan = {0};
SDL_Rect pos = {0};
SDL_Color color = {0, 0, 0, 255};
......@@ -160,20 +228,29 @@ int main ()
dest_cat = window_dim;
int vit_plan = 10;
int vit_cat=10;
float vit_cat = 10;
int nb_images_cat = 5;
float zoom_cat = 4;
float zoom_plan= 0.12;
int offset_x = source_cat.w / nb_images_cat,
offset_y = source_cat.h;
int nb_images_plan = 10;
float zoom_cat = 2.5;
float zoom_plan = 0.1;
int catset_x = source_cat.w / nb_images_cat,
catset_y = source_cat.h;
int planset_x = source_plan.w / nb_images_plan,
planset_y = source_plan.h;
etat_cat.x = 0;
etat_cat.y = 0;
etat_cat.w = offset_x;
etat_cat.h = offset_y;
etat_cat.w = catset_x;
etat_cat.h = catset_y;
etat_plan.x = 0;
etat_plan.y = 0;
etat_plan.w = planset_x;
etat_plan.h = planset_y;
dest_cat.w = offset_x * zoom_cat;
dest_cat.h = offset_y * zoom_cat;
dest_cat.w = catset_x * zoom_cat;
dest_cat.h = catset_y * zoom_cat;
dest_cat.y = (window_dim.h - dest_cat.h) / 2;
dest_cat.x = 0;
......@@ -181,11 +258,11 @@ int main ()
source_plan.x = 0;
source_plan.y = 0;
dest_plan.w = source_plan.w*zoom_plan;
dest_plan.h = source_plan.w*zoom_plan;
dest_plan.x= window_dim.w-dest_plan.w/2;
dest_plan.y = 50+(rand()%((window_dim.h - dest_plan.h-50)));
/*dest_plan[0].w = planset_x * zoom_plan;
dest_plan[0].h = planset_y * zoom_plan;
dest_plan[0].x = window_dim.w - dest_plan[0].w / 2;
dest_plan[0].y = 50 + (rand() % ((window_dim.h - dest_plan[0].h - 50)));*/
while (running)
{
......@@ -201,37 +278,33 @@ int main ()
break;
case SDL_WINDOWEVENT:
//printf("window event\n");
switch (event.window.event)
{
case SDL_WINDOWEVENT_CLOSE:
printf("appui sur la croix\n");
break;
/*case SDL_WINDOWEVENT_SIZE_CHANGED:
larg = event.window.data1;
haut = event.window.data2;
affi_Gra(Grille,larg,haut);
break;*/
default:
break;
}
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_UP:
dest_cat.y -= 50;
dest_cat.y -= dest_cat.h/vit_cat-window_dim.h+50;
dest_cat.y %= window_dim.h-50;
dest_cat.y += 50;
dest_cat.y -= pos.h;
dest_cat.y -= dest_cat.h / vit_cat - window_dim.h + pos.h;
dest_cat.y %= window_dim.h - pos.h;
dest_cat.y += pos.h;
break;
case SDLK_DOWN:
dest_cat.y -= 50;
dest_cat.y -= pos.w;
dest_cat.y += dest_cat.h / vit_cat;
dest_cat.y %= window_dim.h-50;
dest_cat.y += 50;
dest_cat.y %= window_dim.h - pos.w;
dest_cat.y += pos.w;
break;
case SDLK_RETURN:
suivant = 1;
break;
default:
break;
......@@ -240,93 +313,74 @@ int main ()
}
}
if (coli == 0)
{
SDL_RenderClear(renderer);
Aff_textu_full(Fond);
pos.x=0;
for(int k=0;k<(nscore_t);++k)
if (Level == cur_L && suivant == 1)
{
switch(k%7){
case(0):
color.r=240;
color.g=50;
color.b=255;
break;
case(1):
color.r=50;
color.g=90;
color.b=255;
break;
case(2):
color.r=50;
color.g=180;
color.b=255;
break;
case(3):
color.r=50;
color.g=255;
color.b=50;
break;
case(4):
color.r=255;
color.g=255;
color.b=50;
break;
case(5):
color.r=255;
color.g=200;
color.b=50;
break;
case(6):
color.r=255;
color.g=50;
color.b=50;
break;
}
lettre[0]=score_t[k];
SDL_Surface* text_surface = NULL;
SDL_Texture* text_texture = NULL;
text_surface = TTF_RenderText_Blended(Txt, lettre, color);
pos.x = 0;
pos.y = 0;
Aff_Score(Txt, color, &pos, score_t, nscore_t);
etat_cat.x += catset_x;
etat_cat.x %= source_cat.w;
SDL_RenderCopy(renderer, CAT, &etat_cat, &dest_cat);
text_texture = SDL_CreateTextureFromSurface(renderer, text_surface);
SDL_FreeSurface(text_surface);
etat_plan.x += planset_x;
etat_plan.x %= source_plan.w;
SDL_QueryTexture(text_texture, NULL, NULL, &pos.w, &pos.h);
for (int i = 0; i < Level; i++)
{
SDL_RenderCopy(renderer, text_texture, NULL, &pos);
SDL_DestroyTexture(text_texture);
if (dest_plan[i].x <= -dest_plan[i].w)
{
dest_plan[i].w = planset_x * zoom_plan;
dest_plan[i].h = planset_y * zoom_plan;
dest_plan[i].x = window_dim.w + rand() % ((window_dim.w / 3) - dest_plan[i].w);
dest_plan[i].y = rand() % (window_dim.h - dest_plan[i].h);
dest_plan[i].y += pos.h;
/* if (i == 0)
{*/
vit_plan -= 0.2;
/*Score++;
score_t[nscore_t - 2] = Score / 10 + '0';
score_t[nscore_t - 1] = Score % 10 + '0';*/
//}
pos.x+=pos.w;
if (vit_plan <= 0.2)
{
vit_plan = 10;
Level++;
level_t[nlevel_t - 1] = Level % 10 + '0';
}
etat_cat.x += offset_x;
etat_cat.x %= source_cat.w;
if (dest_plan.x <= -dest_plan.w)
{
dest_plan.x= window_dim.w-dest_plan.w;
dest_plan.y = rand()%((window_dim.h - dest_plan.h));
//vit_plan -= 0.1;
Score++;
score_t[nscore_t - 2] = Score / 10 + '0';
score_t[nscore_t - 1] = Score % 10 + '0';
}
else
{
dest_plan.x -= dest_plan.w/vit_plan;
dest_plan[i].x -= dest_plan[i].w / vit_plan;
}
coli=SDL_HasIntersection(&dest_cat,&dest_plan);
coli = SDL_HasIntersection(&dest_cat, &dest_plan[i]);
SDL_RenderCopy(renderer, CAT, &etat_cat,&dest_cat);
SDL_RenderCopy(renderer, Planet, &source_plan,&dest_plan);
SDL_RenderCopy(renderer, Planet, &etat_plan, &dest_plan[i]);
}
}
else
{
suivant = 0;
pos.x = (window_dim.w - (nlevel_t * pos.w)) / 2;
pos.y = (window_dim.h - pos.h) / 2;
Aff_Score(Txt, color, &pos, level_t, nlevel_t);
cur_L = Level;
}
}
else
{
......@@ -335,63 +389,9 @@ int main ()
pos.x = (window_dim.w - (nscore_t * pos.w)) / 2;
pos.y = (window_dim.h - pos.h) / 2;
for(int k=0;k<(nscore_t);++k)
{
switch(k%7){
case(0):
color.r=240;
color.g=50;
color.b=255;
break;
case(1):
color.r=50;
color.g=90;
color.b=255;
break;
case(2):
color.r=50;
color.g=180;
color.b=255;
break;
case(3):
color.r=50;
color.g=255;
color.b=50;
break;
case(4):
color.r=255;
color.g=255;
color.b=50;
break;
case(5):
color.r=255;
color.g=200;
color.b=50;
break;
case(6):
color.r=255;
color.g=50;
color.b=50;
break;
Aff_Score(Txt, color, &pos, score_t, nscore_t);
}
lettre[0]=score_t[k];
SDL_Surface* text_surface = NULL;
SDL_Texture* text_texture = NULL;
text_surface = TTF_RenderText_Blended(Txt, lettre, color);
text_texture = SDL_CreateTextureFromSurface(renderer, text_surface);
SDL_FreeSurface(text_surface);
SDL_QueryTexture(text_texture, NULL, NULL, &pos.w, &pos.h);
SDL_RenderCopy(renderer, text_texture, NULL, &pos);
SDL_DestroyTexture(text_texture);
pos.x+=pos.w;
}
}
SDL_RenderPresent(renderer);
SDL_Delay(80);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment