-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsnake.cpp
More file actions
105 lines (95 loc) · 5.44 KB
/
snake.cpp
File metadata and controls
105 lines (95 loc) · 5.44 KB
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
#include "snake.hpp"
#include <iostream>
void DrawSnake (struct Snake* snake,SDL_Texture* bg,const SDL_Rect snake_head_clip,const SDL_Rect snake_body_clip,const SDL_Rect snake_tail_clip, SDL_Texture* snake_texture, SDL_Renderer* sdlRenderer, int* tailX, int* tailY,int prevX,int prevY,int prev2X,int prev2Y) {
// UP
if(snake->direction.current == 1 && snake->direction.current != 4) {
snake->position.y = --snake->position.y;
}
// LEFT
else if (snake->direction.current == 2 && snake->direction.current != 3) {
snake->position.x = --snake->position.x;
}
// RIGHT
else if (snake->direction.current == 3 && snake->direction.current != 2) {
snake->position.x = ++snake->position.x;
}
// DOWN
else if (snake->direction.current == 4 && snake->direction.current != 1) {
snake->position.y = ++snake->position.y;
}
else {}
/////////////////////
// Snake rendering
for(int k = 0; k <= snake->length; k++) {
// Moving parts of the snake
prev2X = tailX[k];
prev2Y= tailY[k];
tailX[k] = prevX;
tailY[k] = prevY;
prevX = prev2X;
prevY = prev2Y;
SDL_Rect grass_rect_src = { 0, 0, 30, 30};
// Variable for memorizing "k" where the snake changed direction
int memK;
int memDir;
SDL_Rect snake_tail_clip2;
// First we check if there are a rotation (the player changed the direction of the snake)
// If yes : we remove the snake body textures after the rotation and we draw the angle texture
// If no : we draw the snake body textures before and after the rotation.
if((tailX[k] == snake->rotation.x) && (tailY[k] == snake->rotation.y)) {
memK = k;
memDir = snake->direction.old;
if ((snake->direction.old == 2 && snake->direction.current == 1) || (snake->direction.old == 4 && snake->direction.current == 3)) {
// Removing body parts
SDL_Rect grass_rect_dest2 = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_RenderCopy(sdlRenderer, bg, &grass_rect_src, &grass_rect_dest2);
// Rendering top to right angle
SDL_Rect snake_angle_dest = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_Rect snake_angle_src = { 0, 0, 30, 30};
SDL_RenderCopy(sdlRenderer, snake_texture, &snake_angle_src, &snake_angle_dest);
}
else if ((snake->direction.old == 3 && snake->direction.current == 1) || (snake->direction.old == 4 && snake->direction.current == 2)) {
// Removing body parts
SDL_Rect grass_rect_dest2 = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_RenderCopy(sdlRenderer, bg, &grass_rect_src, &grass_rect_dest2);
// Rendering top to left angle
SDL_Rect snake_angle_dest = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_Rect snake_angle_src = { 30, 0, 30, 30};
SDL_RenderCopy(sdlRenderer, snake_texture, &snake_angle_src, &snake_angle_dest);
}
else if ((snake->direction.old == 1 && snake->direction.current == 3) || (snake->direction.old == 2 && snake->direction.current == 4)) {
// Removing body parts
SDL_Rect grass_rect_dest2 = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_RenderCopy(sdlRenderer, bg, &grass_rect_src, &grass_rect_dest2);
// Rendering bottom to right angle
SDL_Rect snake_angle_dest = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_Rect snake_angle_src = { 0, 30, 30, 30};
SDL_RenderCopy(sdlRenderer, snake_texture, &snake_angle_src, &snake_angle_dest);
}
else if ((snake->direction.old == 1 && snake->direction.current == 2) || (snake->direction.old == 3 && snake->direction.current == 4)) {
// Removing body parts
SDL_Rect grass_rect_dest2 = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_RenderCopy(sdlRenderer, bg, &grass_rect_src, &grass_rect_dest2);
// Rendering bottom to left angle
SDL_Rect snake_angle_dest = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_Rect snake_angle_src = { 30, 30, 30, 30};
SDL_RenderCopy(sdlRenderer, snake_texture, &snake_angle_src, &snake_angle_dest);
}
else {}
}
else {
if (k < memK) {
// Render body
SDL_Rect snake_body_rect_dest = { tailX[k]*30, tailY[k]*30, 30, 30};
SDL_RenderCopy(sdlRenderer, snake_texture, &snake_body_clip, &snake_body_rect_dest);
}
else {}
}
// Removing body parts for snake move
SDL_Rect grass_rect_dest2 = { tailX[((snake->length))]*30, tailY[((snake->length))]*30, 30, 30};
SDL_RenderCopy(sdlRenderer, bg, &grass_rect_src, &grass_rect_dest2);
}
// Snake head render
SDL_Rect snake_rect_dest = { snake->position.x*30, snake->position.y*30, 30, 30};
SDL_RenderCopy(sdlRenderer, snake_texture, &snake_head_clip, &snake_rect_dest);
}