aşağıdaki programda zeminin kütleçekim değeriyle, mavi küpün ağırlığı, zıplama hızı, yatay hareket hızı, a, d tuşlarının uyguladığı kuvvetle küpün kazanacağı hız dahil tüm fizik değişkenlerini dilediğiniz gibi değiştirebilir ve eğik atış simülasyonunun tadını çıkarabilirsiniz. fizik ödevleri için de kullanılabilir:
#include <SFML/Graphics.hpp> // SFML grafik kütüphanesini dahil et #include <cmath> // Matematik fonksiyonları için gerekli kütüphane #include <sstream> // String akışları için gerekli kütüphane
// Sabitler
const float GRAVITY = 681.0f; // Yerçekimi ivmesi (N)
const float JUMP_SPEED = 400.0f; // Atlama hızı (m/s)
const float MOVE_SPEED = 300.0f; // Yatay hareket hızı (m/s)
const float BOOST_MULTIPLIER = 1.5f; // Hız artışı çarpanı
const float DOUBLE_JUMP_MULTIPLIER = 1.5f; // ikili atlama hız çarpanı
const float FLOOR_Y = 540.0f; // Zemin seviyesi (Y-koordinatı)
const float WINDOW_WIDTH = 1920.0f; // Pencere genişliği
const float WINDOW_HEIGHT = 1080.0f; // Pencere yüksekliği
const float AIR_DRAG_COEFFICIENT = 0.1f; // Hava sürüklenme katsayısı (yatay hız üzerinde etkili)
// Mavi kare ağırlığı
const float BLUE_SQUARE_WEIGHT = 50.0f; // Ağırlık (kg)
// Hızlandırma için sabitler
const float ADDITIONAL_SPEED_WHEN_SPACE_PRESSED = 150.0f; // Boşluk tuşuna basıldığında kazanılacak hız
const float ADDITIONAL_SPEED_A = 100.0f; // A tuşuna basıldığında kazanılacak hız
const float ADDITIONAL_SPEED_D = 100.0f; // D tuşuna basıldığında kazanılacak hız
// Yazı tipi yükle
sf::Font font;
if (!font.loadFromFile("/home/kratertepesi/Masaüstü/Programlar/arial.ttf")) {
return -1; // Yazı tipi yüklenemezse programı kapat
}
// Mavi kare oluştur
sf::RectangleShape blueSquare(sf::Vector2f(50.0f, 50.0f));
blueSquare.setFillColor(sf::Color::Blue); // Mavi kare rengini mavi yap
blueSquare.setPosition(960, FLOOR_Y); // Mavi karenin başlangıç konumunu ayarla
// Gökyüzü oluştur
sf::RectangleShape sky(sf::Vector2f(WINDOW_WIDTH, FLOOR_Y - blueSquare.getSize().y)); // Gökyüzü boyutu, karenin bir kenarı kadar aşağı kaydırıldı
sky.setFillColor(sf::Color(135, 206, 235)); // Gökyüzü rengini ayarla
// Durum değişkenleri
bool jumping = false; // Atlama durumu
bool onGround = true; // Zemin üzerindeyken
bool doubleJumpReady = false; // ikili atlama hazır durumu
float xVelocity = 0.0f; // Yatay hız
float yVelocity = 0.0f; // Dikey hız
sf::Clock clock; // Zamanlayıcı oluştur
sf::Text angleText, forceText; // Açı ve kuvvet metni için değişkenler
angleText.setFont(font); // Yazı tipini ayarla
angleText.setCharacterSize(24); // Yazı boyutunu ayarla
angleText.setFillColor(sf::Color::White); // Yazı rengini beyaz yap
forceText.setFont(font); // Yazı tipini ayarla
forceText.setCharacterSize(24); // Yazı boyutunu ayarla
forceText.setFillColor(sf::Color::White); // Yazı rengini beyaz yap
while (window.isOpen()) // Pencere açık olduğu sürece
{
sf::Event event;
while (window.pollEvent(event)) // Olayları kontrol et
{
if (event.type == sf::Event::Closed) // Pencere kapatıldıysa
window.close(); // Pencereyi kapat
}
float currentMoveSpeed = MOVE_SPEED; // Geçerli hareket hızını ayarla
float currentJumpSpeed = JUMP_SPEED; // Geçerli atlama hızını ayarla
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space)) // Boşluk tuşuna basılmışsa
{
currentMoveSpeed += ADDITIONAL_SPEED_WHEN_SPACE_PRESSED; // Hız artışını uygula
currentJumpSpeed *= BOOST_MULTIPLIER; // Atlama hızını artır
}
// Yatay hareket kontrolü
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) // A tuşuna basılmışsa
{
xVelocity = -currentMoveSpeed - ADDITIONAL_SPEED_A; // Sola hareket et
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) // D tuşuna basılmışsa
{
xVelocity = currentMoveSpeed + ADDITIONAL_SPEED_D; // Sağa hareket et
}
else
{
xVelocity = 0.0f; // Hiçbir tuşa basılmıyorsa yatay hızı sıfırla
}
// Hava sürüklenmesini uygula
xVelocity -= AIR_DRAG_COEFFICIENT * xVelocity; // Basit sürüklenme formülü
// Atlama kontrolü
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && onGround) // W tuşuna ve yerdeyse
{
jumping = true; // Atlama gerçekleşiyor
onGround = false; // Artık yerden yüksekte
yVelocity = -currentJumpSpeed; // Dikey hız ayarla
doubleJumpReady = true; // ikili atlama hazır
}
else if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && doubleJumpReady) // W tuşuna basılmışsa ve ikili atlama hazırsa
{
yVelocity = -currentJumpSpeed * DOUBLE_JUMP_MULTIPLIER; // ikili atlama için hızı artır
doubleJumpReady = false; // ikili atlama kullanılmadı
}
if (!onGround) // Eğer yerden yüksekteyse
{
yVelocity += GRAVITY * dt; // Dikey hıza yerçekimini ekle
}
// Yerde olup olmadığını kontrol et
if (blueSquare.getPosition().y >= FLOOR_Y)
{
blueSquare.setPosition(blueSquare.getPosition().x, FLOOR_Y); // Mavi karenin zemin konumunu ayarla
yVelocity = 0.0f; // Dikey hızı sıfırla
onGround = true; // Yerde olduğunu belirt
doubleJumpReady = false; // ikili atlama hazır değil
}
// Pencereyi temizle ve gökyüzünü, zemin ve mavi kareyi çiz
window.clear();
window.draw(sky); // Gökyüzünü çiz
window.draw(ground); // Zeminini çiz
window.draw(blueSquare); // Mavi kareyi çiz
window.draw(titleText); // Başlık metnini çiz
window.draw(angleText); // Açı metnini çiz
window.draw(forceText); // Kuvvet metnini çiz
window.display(); // Pencereyi güncelle
}
bugün 95 aldığımı öğrendiğim derstir. Ben bile inanamadım o notu alabildiğime. Canım ponçik anneannem sınav haftalarında her sabah benim için fetih suresini okumasa vay hâlime.
Einstein in nerdeyse son noktaya taşıdığı bilim dalı. Lisedeyken çok sevmezdim Hoca iyi değildi e veteriner lisesinde kültür derslerine çok önem verilmez zaten.
Genel anlamda enerji ve madde arasındaki ilişkiyi inceleyen bir bilim dalıdır. Uzun yıllar bu tanım kullanılmış olsa da popüler ve modern dünya düzeninde ''fizik'' tanımını degistirmek gerekir diye düşünüyorum. Modern fiziğin gelişmesiyle ve bazı metafizik olarak adlandırılan olguların bilim hayatına girmesiyle beraber ''fizik '' in de tanımı değişmeli. ... '' Fizik ; enerji , madde ve duyular arasındaki ilişkiyi inceler. '' diyebilsek keşke ....
lisedeyken neredeyse hiç anlamadığım ders. hele matematik, kimya gibi derslerle geçen yorucu bir günün ardından fizik dersi son derse denk geliyorsa, eve muazzam bir baş ağrısıyla dönmeniz muhtemeldir.