Merhaba Dostlar
C++ da SFML kütüphanesini kullanarak yılan oyunu yaptım. Benim gibi SFML'e yeni başlayanlar için güzel bir örnek olduğunu düşünüyorum. Tamamen kendi kodlamam. Bir kaç bug bulunmaktadır.
NOT: Program debug modda x64 olarak derlenmiştir.
Kaynak Dosya ve exe file: https://dosya.co/9vulincd46kq/YilanOyunu.rar.html
Virüs total: https://www.virustotal.com/gui/file...d686e938b490cfbbc7994904dd7a4abeda8/community
C++ da SFML kütüphanesini kullanarak yılan oyunu yaptım. Benim gibi SFML'e yeni başlayanlar için güzel bir örnek olduğunu düşünüyorum. Tamamen kendi kodlamam. Bir kaç bug bulunmaktadır.
NOT: Program debug modda x64 olarak derlenmiştir.
Kaynak Dosya ve exe file: https://dosya.co/9vulincd46kq/YilanOyunu.rar.html
Virüs total: https://www.virustotal.com/gui/file...d686e938b490cfbbc7994904dd7a4abeda8/community
Kod:
#include <SFML/Graphics.hpp>
#include <time.h>
#define GAMEWIDTH 800
#define GAMEHEIGTH 600
#define GAMETITLE "Yilan oyunu"
#define SIZE 100
#define SnakeSize 40
using namespace sf;
int main() {
int i, j, x = 0, y = 0, size = 0;
int getX=GAMEWIDTH/2, getY=GAMEHEIGTH/2, appleX, appleY, snakeX, snakeY;
float timer = 0, delay = 0.1;
bool keyR = false, keyU = false, keyD = false, keyL = false;
srand(time(NULL));
RenderWindow window(VideoMode(GAMEWIDTH, GAMEHEIGTH), GAMETITLE, Style::Close);
RectangleShape snake[SIZE], apple(Vector2f(SnakeSize - 5, SnakeSize - 5));
for (i = 0; i < 100; i++) {
snake[i].setSize(Vector2f(SnakeSize - 5, SnakeSize - 5));
snake[i].setPosition(Vector2f(-40, 0));
snake[i].setOutlineThickness(3);
snake[i].setOutlineColor(Color::Black);
}
snake[0].setPosition(GAMEWIDTH / 2, GAMEHEIGTH / 2 - 20);
snake[0].setFillColor(Color::Black);
apple.setFillColor(Color::Red);
x = (rand() % 19) * SnakeSize;
y = (rand() % 14) * SnakeSize;
apple.setPosition(x, y);
appleX = apple.getPosition().x;
appleY = apple.getPosition().y;
Font font;
font.loadFromFile("bebas.ttf");
Text score("SKOR: ", font, 30);
score.setPosition(20, 20);
std::string skor;
skor = score.getString();
Clock clock;
while (window.isOpen()) {
float time = clock.getElapsedTime().asSeconds();
timer += time;
clock.restart();
Event event;
while (window.pollEvent(event)) {
if (event.type == Event::Closed)
window.close();
if (event.type == Event::KeyPressed) {
if (event.key.code == Keyboard::Right && !keyL) {
keyL = keyU = keyD = false;
keyR = true;
}
if (event.key.code == Keyboard::Left && !keyR) {
keyD = keyR = keyU = false;
keyL = true;
}
if (event.key.code == Keyboard::Up && !keyD) {
keyD = keyL = keyR = false;
keyU = true;
}
if (event.key.code == Keyboard::Down && !keyU) {
keyU = keyL = keyR = false;
keyD = true;
}
}
}
if (timer > delay) {
for (i = size; i > 0; i--) {
snakeX = snake[i - 1].getPosition().x;
snakeY = snake[i - 1].getPosition().y;
snake[i].setPosition(snakeX, snakeY);
}
getX = snake[0].getPosition().x;
getY = snake[0].getPosition().y;
if (keyR) {
snake[0].setPosition(getX + SnakeSize, getY);
}
if (keyL) {
snake[0].setPosition(getX - SnakeSize, getY);
}
if (keyU) {
snake[0].setPosition(getX, getY - SnakeSize);
}
if (keyD) {
snake[0].setPosition(getX, getY + SnakeSize);
}
timer = 0;
}
for (i = 1; i < size; i++) {
if (snake[0].getPosition().x == snake[i].getPosition().x && snake[0].getPosition().y == snake[i].getPosition().y) {
snake[0].setPosition(GAMEWIDTH / 2, GAMEHEIGTH / 2 - 20);
keyU = keyL = keyD = keyR = false;
size = 0;
for (j = 1; j < 100; j++) {
snake[j].setPosition(Vector2f(-40, 0));
}
}
}
if (snake[0].getPosition().x < 0 || snake[0].getPosition().x > 760 || snake[0].getPosition().y < 0 || snake[0].getPosition().y > 560) {
snake[0].setPosition(GAMEWIDTH / 2, GAMEHEIGTH / 2 - 20);
keyU = keyL = keyD = keyR = false;
size = 0;
for (i = 1; i < 100; i++) {
snake[i].setPosition(Vector2f(-40, 0));
}
}
if (getX == appleX && getY == appleY) {
x = (rand() % 19) * SnakeSize;
y = (rand() % 14) * SnakeSize;
for (i = 0; i < size; i++) {
if (snake[i].getPosition().x == x && snake[i].getPosition().y == y) {
x = (rand() % 19) * SnakeSize;
y = (rand() % 14) * SnakeSize;
i = 0;
}
}
apple.setPosition(x, y);
appleX = apple.getPosition().x;
appleY = apple.getPosition().y;
size++;
}
window.clear(Color::Cyan);
for (i = 0; i <= size; i++) {
window.draw(snake[i]);
}
window.draw(apple);
score.setString(skor + std::to_string(size + 1));
window.draw(score);
window.display();
}
return 0;
}
Son düzenleme: