generated from ECE-Lyon/Base-Projet-Avec-Marp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTirAuxBallons.c
148 lines (123 loc) · 4.32 KB
/
TirAuxBallons.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
//
// Created by Laure on 21/05/2023.
//
#include "TirAuxBallons.h"
t_acteur creerActeur ()
{
t_acteur acteur;
//allocation
// acteur = (t_acteur ) malloc(1*sizeof(t_acteur));
// definition taille
acteur.tx=123;
acteur.ty=163;
// initialisation position
acteur.x =rand() % (SCREEN_W - acteur.tx)-acteur.tx/3;
acteur.y = rand() % (SCREEN_H - acteur.ty);
// Initialiser vecteurs déplacement aléatoire
acteur.dx=rand() % (5-1)+1;
acteur.dy=rand() % (30-10)+1;
acteur.vivant=0;
return (acteur);
}
/*void remplirTabActeurs(t_acteur * tab[NBALLONS])
{
int i;
for (i=0;i<NBALLONS;i++)
tab[i]=creerActeur();
}*/
// Actualiser un acteur (bouger ...)
t_acteur actualiserActeur(t_acteur acteur) // avec controle des bords
{
// contrôle des bords : ici on décide de rebondir sur les bords
if ( ( acteur.x <= 0 && acteur.dx <= 0 ) ||( acteur.x + acteur.tx > SCREEN_W && acteur.dx > 0) ){
acteur.dx = -acteur.dx;}
if ( ( acteur.y < 0 && acteur.dy < 0 ) ||( acteur.y + acteur.ty > SCREEN_H && acteur.dy > 0) ){
acteur.dy = -acteur.dy;}
// calculer nouvelle position
// nouvelle position = position actuelle + deplacement
acteur.x = acteur.x + acteur.dx;
acteur.y = acteur.y + acteur.dy;
// printf("dx: %d dy: %d", acteur.dx, acteur.dy);
return(acteur);
}
/*
// Gérer l'évolution de l'ensemble des acteurs
void actualiserTabActeurs(t_acteur * tab[NBALLONS]) {
int i, j, cote;
// Contrôle des collisions : si on entre en collision avec un autre
// et que la collision tend à nous rapprocher alors on rebondit
/*for (i=0;i<NBALLONS;i++)
for (j=i+1;j<NBALLONS;j++)
if ( (cote=collisionActeurs(tab[i], tab[j]) ) )
{
if ((cote==1 && tab[i]->dx<0) || (cote==2 && tab[i]->dx>0))
tab[i]->dx=-tab[i]->dx;
if ((cote==3 && tab[i]->dy<0) || (cote==4 && tab[i]->dy>0))
tab[i]->dy=-tab[i]->dy;
if ((cote==1 && tab[j]->dx>0) || (cote==2 && tab[j]->dx<0))
tab[j]->dx=-tab[j]->dx;
if ((cote==3 && tab[j]->dy>0) || (cote==4 && tab[j]->dy<0))
tab[j]->dy=-tab[j]->dy;
}
// Gérer les déplacements habituels...
for (i = 0; i < NBALLONS; i++) {
actualiserActeur(tab[i]);
}
}*/
// Dessiner un acteur sur une bitmap bmp
void dessinerActeur(BITMAP *page,BITMAP *sprite, t_acteur acteur)
{
// fonction qui dessine les sprites (*fond, *sprite, coord x, y)
draw_sprite(page, sprite, acteur.x, acteur.y);
//printf("x: %d y: %d\n", acteur.x, acteur.y);
}
/*
// Dessiner sur une bitmap l'ensemble des acteurs
void dessinerTabActeurs(BITMAP *page,BITMAP *sprite,t_acteur * tab[NBALLONS])
{
int i;
for (i=0;i<NBALLONS;i++)
dessinerActeur(page,sprite,tab[i]);
}
*/
// Gérer le clic de la souris sur un ballon
void tirSouris(t_acteur acteur, BITMAP *sprite) {
int score=0;
if (mouse_b == 1) {
if ((mouse_x >= acteur.x && mouse_x <= acteur.x + acteur.tx) &&
(mouse_y >= acteur.y && mouse_y <= acteur.y + acteur.ty)) {
int stop;
stop = clock();
printf("Touche temps = %d\n", stop);
clear_to_color(sprite, makecol(255, 0, 255));
acteur.vivant = 1;
score=1;
printf("Score = %d\n", score);
textprintf_ex(screen, font, 100, 10, makecol(255,0,200), -1, "SCORE=%d", score);
}
}
}
void tirballons()
{
t_acteur mesActeurs;
mesActeurs=creerActeur();
BITMAP *page; // double buffer
BITMAP *decor; // image de fond
BITMAP *sprite; // image de l'acteur
page= create_bitmap(SCREEN_W,SCREEN_H);
clear_bitmap(page);
decor=load_bitmap("images/fondkirby2.bmp",NULL);
sprite=load_bitmap("images/Ballon55.bmp",NULL);
install_mouse();
show_mouse(screen);
while (!key[KEY_ESC]){
// effacer buffer en apliquant decor
stretch_blit(decor, page, 0, 0,decor->w,decor->h,0,0,(page->w),(page->h));
mesActeurs= actualiserActeur(mesActeurs);
dessinerActeur(page,sprite, mesActeurs);
tirSouris(mesActeurs, sprite);
blit(page, screen, 0,0,0,0, SCREEN_W, SCREEN_H);//A mettre tout à la fin du while
show_mouse(screen);
show_mouse(page);
}
}