Witam. Piszę grę w SFML'u typu snake i gdy robię losowe generowanie kropki (do zjedzenia przez węża) to przyjmuje ona pozycję z przecinkiem, pomimo, że wartość jest zapisywana w incie.
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <stdlib.h>
#include <stdio.h>
#include <ctime>
#include <conio.h>
#include <iostream>
int posx, posy;
int punktx = 150;
int punkty = 100;
int score;
int main()
{
sf::RenderWindow gra(sf::VideoMode(800, 480, 64), "PRO-SNAKE 1337"/*, sf::Style::Fullscreen*/); //tworzy okno
sf::Texture character;
character.loadFromFile("character2.png");
sf::Texture point;
point.loadFromFile("point.png");
sf::Sprite postac;
postac.setTexture(character);
sf::Sprite punkt;
punkt.setTexture(point);
while (gra.isOpen()) {
sf::Event odczytywanie; //tworzy eventy
while (gra.pollEvent(odczytywanie)) {
if (odczytywanie.type == sf::Event::Closed) { //jesli chcemy zamknac okno
gra.close();
}
if (odczytywanie.type == sf::Event::KeyPressed && odczytywanie.key.code == sf::Keyboard::Escape) {
gra.close(); //jesli kliknelismy ESC
}
if (odczytywanie.type == sf::Event::KeyPressed && odczytywanie.key.code == sf::Keyboard::W) {
if (posy > 0) {
posy -= 10;
}
}
if (odczytywanie.type == sf::Event::KeyPressed && odczytywanie.key.code == sf::Keyboard::S) {
if (posy < 470) {
posy += 10;
}
}
if (odczytywanie.type == sf::Event::KeyPressed && odczytywanie.key.code == sf::Keyboard::A) {
if (posx > 0) {
posx -= 10;
}
}
if (odczytywanie.type == sf::Event::KeyPressed && odczytywanie.key.code == sf::Keyboard::D) {
if (posx < 790) {
posx += 10;
}
}
}
//koniec petli
gra.clear(sf::Color(255, 255, 255));
gra.draw(postac);
gra.draw(punkt);
postac.setPosition(posx, posy);
punkt.setPosition(punktx, punkty);
std::cout << "Twoja pozycja: " << posx << "x, " << posy << "y." << std::endl;
std::cout << "Twoj wynik: " << score << std::endl;
gra.display();
if (posx==punktx&&posy==punkty) {
score++;
srand(time(0));
int randpunktx = rand() % 790 + 1;
punktx = randpunktx;
punkt.setPosition(punktx, punkty);
}
}
return 0;
}
Działa, to tak, że oś X punktu do zjedzenia przyjmuje taką wartość, że moja postać n ie jest w stanie w nią wejść, tak jakby zamiast X = 100 miała X = 100.5.