-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdino.c
104 lines (91 loc) · 2.16 KB
/
dino.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
#include "img/dino_still.h"
#include "img/dino_left.h"
#include "img/dino_right.h"
#include "graphics.h"
#include "dino.h"
#include "myLib.h"
#include "colors.h"
#include <stdbool.h>
#define GROUND 100
#define STEP 5
/**
* Update the dino's state
*/
void dino__update_state(Dino *dino) {
switch (dino->state) {
case STATE_STILL:
// If dino is on the ground, start running
if (dino->p.y == GROUND) {
dino->state = STATE_RIGHT;
}
break;
case STATE_RIGHT:
dino->state = STATE_LEFT;
break;
case STATE_LEFT:
dino->state = STATE_RIGHT;
break;
default:
break;
}
}
/**
* Dino jumped
*/
void dino__jump(Dino *dino) {
dino->nv = (Vector) {
.x = 0,
.y = -1,
};
}
/**
* Update a dino's location
*/
void dino__update(Dino *dino) {
// Get new location
dino->np.x = dino->p.x + dino->nv.x;
dino->np.y = dino->p.y + dino->nv.y;
dino->v = dino->nv;
// Stop once we hit the ground
if (dino->np.y > GROUND - DINO_HEIGHT) {
dino->np.y = GROUND - DINO_HEIGHT;
dino->nv.y = 0;
dino->state = STATE_RIGHT;
}
// Hardcode hitting the top
if (dino->np.y < 0) {
dino->np.y = 0;
dino->nv.y = 1;
}
}
/**
* Clear the old dino's drawing
*/
void dino__clear_old(Dino *dino) {
drawRectangle(dino->p.y, dino->p.x, DINO_HEIGHT, DINO_WIDTH, BACKGROUND_COLOR);
}
/**
* Draw the dino at its TODO: (current?) location
*/
void dino__draw(Dino *dino) {
switch (dino->state) {
case STATE_STILL:
drawImage(dino->np.y, dino->np.x, DINO_HEIGHT, DINO_WIDTH, dino_still);
break;
case STATE_RIGHT:
drawImage(dino->np.y, dino->np.x, DINO_HEIGHT, DINO_WIDTH, dino_right);
break;
case STATE_LEFT:
drawImage(dino->np.y, dino->np.x, DINO_HEIGHT, DINO_WIDTH, dino_left);
break;
}
// TODO: this may go elsewhere
dino__next(dino);
}
/**
* Update dino's values to next values
*/
void dino__next(Dino *dino) {
dino->p = dino->np;
dino->v = dino->nv;
}