How can I make snake length increase after eating the fruit? also how can I make the fruit change position? Please help me.Thanks!
#include "stdafx.h"
#include <SFML\Graphics.hpp>
#include "Win32Project1.h"
#include <iostream>
#include <time.h>
bool intersects(const sf::RectangleShape & snake, const sf::RectangleShape & fruit)
{
sf::FloatRect s = snake.getGlobalBounds();
sf::FloatRect f = fruit.getGlobalBounds();
return s.intersects(f);
}
int main(){
srand(time(NULL));
int width = 400;
int height = 400;
sf::VideoMode videomode(width, height);
sf::RenderWindow window(videomode, "Snake");
sf::RectangleShape snake;
sf::RectangleShape borderleft;
sf::RectangleShape borderright;
sf::RectangleShape bordertop;
sf::RectangleShape borderbot;
sf::RectangleShape fruit;
sf::RectangleShape addsnake;
borderleft.setFillColor(sf::Color::Black);
borderleft.setSize(sf::Vector2f(20, 400));
borderleft.setPosition(0, 0);
borderright.setFillColor(sf::Color::Black);
borderright.setSize(sf::Vector2f(20, 400));
borderright.setPosition(380, 0);
bordertop.setFillColor(sf::Color::Black);
bordertop.setSize(sf::Vector2f(20, 400));
bordertop.setPosition(400,0);
bordertop.rotate(90);
borderbot.setFillColor(sf::Color::Black);
borderbot.setSize(sf::Vector2f(20, 400));
borderbot.setPosition(400, 380);
borderbot.rotate(90);
snake.setFillColor(sf::Color::Red);
snake.setOutlineColor(sf::Color::Blue);
snake.setPosition(width - 200, height - 200);
snake.setSize(sf::Vector2f(20, 20));
addsnake.setFillColor(sf::Color::Red);
addsnake.setOutlineColor(sf::Color::Blue);
addsnake.setPosition(snake.getPosition() - 20); //problem
fruit.setFillColor(sf::Color::Yellow);
int fruitx = rand() % 400;
int fruity = rand() % 400;
fruit.setPosition(fruitx, fruity); //Use later in while loop.
fruit.setSize(sf::Vector2f(20, 20));
while (window.isOpen()){
window.clear(sf::Color::Cyan);
window.draw(snake);
window.draw(borderleft);
window.draw(borderright);
window.draw(bordertop);
window.draw(borderbot);
window.draw(fruit);
window.display();
sf::Event event;
while (window.pollEvent(event)){
if ((event.type == sf::Event::Closed) || ((event.type == sf::Event::KeyPressed) && (sf::Keyboard::Up)))
window.close();
}
if (intersects(snake, fruit)){
//do something
}
}
Please help , I am new to SFML and I know only basic C++
(I don't know how to format to code,sorry)
I'm still making the game bitano, still didn't add the motion stuff, anyway thanks for the tips!
I realize that. But the way i see it, you don't have to worry yet about the snake growing or the fruit changing position before you get the input handling and snake movement right.
But maybe that's just me. Again, good luck! ;D
Here's a small improvement on your event loop (you could ofc use enums for the direction instead of short values to make it more readable):
// INPUT
sf::Event event;
while (window.pollEvent(event)) {
switch(event.type) {
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
switch (event.key.code) {
case sf::Keyboard::Escape: window.close(); break;
case sf::Keyboard::Up: snakeDir = 0; break;
case sf::Keyboard::Down: snakeDir = 1; break;
case sf::Keyboard::Left: snakeDir = 2; break;
case sf::Keyboard::Right: snakeDir = 3; break;
default: break;
}
break;
default: break;
}
}