Skip to content

Instantly share code, notes, and snippets.

@k11m1
Created October 27, 2017 11:27
Show Gist options
  • Save k11m1/22bd0364d8336cf82a63d3f0bebcac46 to your computer and use it in GitHub Desktop.
Save k11m1/22bd0364d8336cf82a63d3f0bebcac46 to your computer and use it in GitHub Desktop.
#2
#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