C++ ile Oyun Geliştirme Bölüm 3: Mini Space Shooter Yapımı (Adım Adım)

Mini Space Shooter Yapımı (Adım Adım) Bu bölümde C++ ile oyun geliştirme sürecini pratik bir projeyle öğreneceğiz. SFML kullanarak basit ama genişletilebilir bir 2D uzay oyunu yapacağız. Amaç:Oyuncu gemiyi kontrol eder, düşmanlardan kaçar, ateş eder ve skor toplar.İçindekilerListeyi göstermek için tıklayınMini Space Shooter Yapımı (Adım Adım)KaydetmeYükleme 1) Oyun Fikri: Mini Space Shooter Basit bir mekanik:

Google News Google News Flipboard Flipboard Sesli oku Yazıyı beğen Favorilere Ekle 0 Yorumlar
Daha fazla

Mini Space Shooter Yapımı (Adım Adım)

Bu bölümde C++ ile oyun geliştirme sürecini pratik bir projeyle öğreneceğiz. SFML kullanarak basit ama genişletilebilir bir 2D uzay oyunu yapacağız.

Amaç:
Oyuncu gemiyi kontrol eder, düşmanlardan kaçar, ateş eder ve skor toplar.


1) Oyun Fikri: Mini Space Shooter

Basit bir mekanik:

  • Oyuncu aşağıda sabit başlar.

  • Düşmanlar yukarıdan aşağı iner.

  • Oyuncu ateş eder.

  • Çarpışma olursa skor artar.

  • Amaç mümkün olduğunca uzun süre hayatta kalmak.

Küçük fikirler prototipleme için en doğru başlangıçtır.


2) Kullanacağımız Kütüphane

Projede SFML kullanacağız.

Resmi site:
https://www.sfml-dev.org

SFML şunları sağlar:

  • Grafik

  • Input

  • Ses

  • Pencere yönetimi

C++ ile oyun geliştirme için 2D tarafında oldukça uygundur.


3) Proje Yapısı

SpaceShooter/
├─ main.cpp
├─ Game.h
├─ Game.cpp
├─ Player.h
├─ Player.cpp
├─ Enemy.h
├─ Enemy.cpp
├─ Bullet.h
├─ Bullet.cpp
├─ assets/
└─ saves/

Her sistem ayrı dosyada olmalı.
main.cpp sadece başlatma yapmalı.


4) Oyun Döngüsü (Game Loop)

Ana döngü her oyunun temelidir.

<pre><code class=“language-cpp”>
while (window.isOpen()) {
processEvents();
update();
render();
}
</code></pre>

Bu yapı:

  • Input alır

  • Oyun durumunu günceller

  • Ekrana çizer


5) Player Sınıfı

<pre><code class=“language-cpp”>
#pragma once
#include &lt;SFML/Graphics.hpp&gt;class Player {
public:
sf::Sprite sprite;
sf::Texture texture;
float speed = 300.f;

Player() {
texture.loadFromFile(“assets/player.png”);
sprite.setTexture(texture);
sprite.setPosition(400, 500);
}

void update(float dt) {
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
sprite.move(-speed * dt, 0);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
sprite.move(speed * dt, 0);
}
};
</code></pre>


6) Bullet Sistemi

<pre><code class=“language-cpp”>
#pragma once
#include &lt;SFML/Graphics.hpp&gt;class Bullet {
public:
sf::CircleShape shape;
float speed = 500.f;

Bullet(float x, float y) {
shape.setRadius(5.f);
shape.setFillColor(sf::Color::Cyan);
shape.setPosition(x, y);
}

void update(float dt) {
shape.move(0, -speed * dt);
}
};
</code></pre>


7) Enemy Sistemi

<pre><code class=“language-cpp”>
#pragma once
#include &lt;SFML/Graphics.hpp&gt;class Enemy {
public:
sf::RectangleShape shape;
float speed = 200.f;

Enemy(float x, float y) {
shape.setSize({40.f, 40.f});
shape.setFillColor(sf::Color::Red);
shape.setPosition(x, y);
}

void update(float dt) {
shape.move(0, speed * dt);
}
};
</code></pre>


8) Çarpışma Kontrolü

<pre><code class=“language-cpp”>
if (bullet.shape.getGlobalBounds().intersects(
enemy.shape.getGlobalBounds())) {score += 10;
}
</code></pre>

Bu yapı basit ama etkilidir.


9) Skor Sistemi

<pre><code class=“language-cpp”>
sf::Font font;
sf::Text scoreText;font.loadFromFile(“assets/font.ttf”);

scoreText.setFont(font);
scoreText.setCharacterSize(24);
scoreText.setFillColor(sf::Color::White);
</code></pre>

update içinde:

<pre><code class=“language-cpp”>
scoreText.setString(“Score: ” + std::to_string(score));
</code></pre>

10) Save / Load Sistemi

Kaydetme

<pre><code class=“language-cpp”>
#include &lt;fstream&gt;void saveHighScore(int highScore) {
std::ofstream save(“saves/highscore.txt”);

if (save.is_open()) {
save &lt;&lt; highScore;
save.close();
}
}
</code></pre>

Yükleme

<pre><code class=“language-cpp”>
#include &lt;fstream&gt;int loadHighScore() {
int highScore = 0;
std::ifstream load(“saves/highscore.txt”);

if (load.is_open()) {
load &gt;&gt; highScore;
load.close();
}

return highScore;
}
</code></pre>


11) FPS Limit

<pre><code class=“language-cpp”>
window.setFramerateLimit(60);
</code></pre>

Stabil 60 FPS yeterlidir.

Yazar Hakkında

Benzer Yazılar

Bir Cevap Yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.

0/30 karakter