C++ SFML Kütüphanesi ile Yilan Oyunu

RaSGooL

Yeni üye
31 Mar 2019
24
2
Ankara
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


DyLP26.png


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:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.