Created
October 27, 2017 11:27
-
-
Save k11m1/22bd0364d8336cf82a63d3f0bebcac46 to your computer and use it in GitHub Desktop.
#2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <SDL2/SDL.h> | |
#include <iostream> | |
#include <vector> | |
#include <stdlib.h> | |
#include <time.h> | |
void DrawRec(SDL_Renderer* renderer, SDL_Rect r) | |
{ | |
SDL_SetRenderDrawColor( renderer, 0, 0, 255, 255 ); | |
SDL_RenderFillRect( renderer, &r ); | |
// Render the rect to the screen | |
SDL_RenderPresent(renderer); | |
} | |
void DrawFood(SDL_Renderer* renderer, SDL_Rect r) | |
{ | |
SDL_SetRenderDrawColor( renderer, 26, 255, 26, 255 ); | |
SDL_RenderFillRect( renderer, &r ); | |
// Render the rect to the screen | |
SDL_RenderPresent(renderer); | |
} | |
void DrawBody(SDL_Renderer* renderer, SDL_Rect r) | |
{ | |
SDL_SetRenderDrawColor( renderer, 255, 255, 255, 255 ); | |
SDL_RenderFillRect( renderer, &r ); | |
// Render the rect to the screen | |
SDL_RenderPresent(renderer); | |
} | |
void DrawRec(SDL_Renderer* renderer,int x, int y, int w, int h) | |
{ | |
SDL_SetRenderDrawColor( renderer, 0, 0, 255, 255 ); | |
SDL_Rect tmp; | |
tmp.x = x; | |
tmp.y = y; | |
tmp.w = w; | |
tmp.h = h; | |
SDL_RenderFillRect(renderer, &tmp); | |
// Render the rect to the screen | |
SDL_RenderPresent(renderer); | |
} | |
void Clear(SDL_Renderer* renderer) | |
{ | |
SDL_SetRenderDrawColor( renderer, 128, 128, 255, 255 ); | |
SDL_RenderClear( renderer ); | |
} | |
int main (int argc, char** argv) | |
{ | |
int direction=0; | |
std::vector<SDL_Rect> snake_body; | |
SDL_Rect snake_head; | |
SDL_Rect food; | |
food.x = (rand() % 10)*50; | |
food.y = (rand() % 10)*50; | |
food.w = 50; | |
food.h = 50; | |
SDL_Window* window = NULL; | |
window = SDL_CreateWindow | |
( | |
"Klimíkův Snake", SDL_WINDOWPOS_UNDEFINED, | |
SDL_WINDOWPOS_UNDEFINED, | |
500, | |
500, | |
SDL_WINDOW_SHOWN | |
); | |
// Setup renderer | |
SDL_Renderer* renderer = NULL; | |
renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED); | |
// Set render color to red ( background will be rendered in this color ) | |
// Clear winow | |
// Creat a rect at pos ( 50, 50 ) that's 50 pixels wide and 50 pixels high. | |
snake_head.x = 50; | |
snake_head.y = 50; | |
snake_head.w = 50; | |
snake_head.h = 50; | |
// Set render color to blue ( rect will be rendered in this color ) | |
//Game Loop | |
bool isRunning = true; | |
int frame = 0; | |
int start = SDL_GetTicks(); | |
SDL_Rect snake_body_last; | |
SDL_Rect snake_last; | |
while(isRunning) | |
{ | |
if(SDL_GetTicks() - start >= 500) | |
{ | |
Clear(renderer); | |
snake_last = snake_head; | |
std::cout << "TICK " << SDL_GetTicks() - start << " \n"; | |
//0 - RIGHT//1 - DOWN// 2-LEFT // 3- UP//ssssd | |
if(direction ==0) | |
snake_head.x += 50; | |
if(direction ==1) | |
snake_head.y += 50; | |
if(direction ==2) | |
snake_head.x -= 50; | |
if(direction ==3) | |
snake_head.y -= 50; | |
if(snake_body.size() >0) | |
{ | |
snake_body_last = snake_body[snake_body.size()-1]; | |
} | |
for (int i = 0; i < snake_body.size(); ++i) { | |
if(i == 0) | |
{ | |
snake_body[i] = snake_last; | |
} else{ | |
snake_body[i] = snake_body[i-1]; | |
} | |
DrawBody(renderer,snake_body[i]); | |
} | |
std::cout << snake_head.x << " " << snake_head.y << " : " << food.x << " " << food.y << std::endl; | |
if(snake_head.x == food.x && snake_head.y == food.y) | |
{ | |
food.x = (rand() % 10)*50; | |
food.y = (rand() % 10)*50; | |
if(snake_body.size() == 0) | |
{ | |
snake_body.push_back(snake_last); | |
} | |
else{ | |
snake_body.push_back(snake_body_last); | |
} | |
} | |
DrawRec(renderer, snake_head); | |
DrawFood(renderer,food); | |
start=SDL_GetTicks(); | |
} | |
SDL_Event ev; | |
while(SDL_PollEvent(&ev) != 0) | |
{ | |
if (ev.type == SDL_QUIT) | |
isRunning=false; | |
else | |
if(ev.type == SDL_KEYDOWN) | |
{ | |
switch (ev.key.keysym.sym) | |
{ | |
case SDLK_d: | |
direction = 0; | |
break; | |
case SDLK_s: | |
direction = 1; | |
break; | |
case SDLK_a: | |
direction = 2; | |
break; | |
case SDLK_w: | |
direction = 3; | |
break; | |
default: | |
break; | |
} | |
} | |
} | |
SDL_UpdateWindowSurface(window); | |
} | |
SDL_DestroyWindow(window); | |
SDL_Quit(); | |
return EXIT_SUCCESS; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment