OpenGL ile oyun yapmak – Joystick destekli ilk oyunumuz

Tue, Jun 6, 2017 2-minute read

Bu yazımızda freeglut kullanarak her nesneyi oluşturup , joystick ile kontrol edilebilen basit bir oyun yapacağız.

Bu oyunu bu sene aldığım seçmeli Bilgisayar Grafikleri dersinin projesi olarak geliştirdim. Freeglut ve C++ kullanarak Visual C++ 2010 editörüyle ve Sublime Text editörüyle geliştirdim.

Öncelikle ekran boyutu kullanılacak fonksiyonların tanımlarını yapalım.

glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("FREEGLUT OYUN");
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutForceJoystickFunc();
    glutJoystickFunc(joystick,25);
    glutForceJoystickFunc();
    glutMainLoop();

Burada öne çıkan 2 fonksiyonumuz var. Bunlar ;

-glutForceJoystickFunc()

-glutJoystickFunc(joystick,25)

daha önceki yazımızda glutJoystickFunc tanımını yapmıştık. Buradan o yazıya gidebilirsiniz.

glutForceJoystickFunc ise windowsta karşılaştığım joystick analog tuşlarının basılı tutulduğunda devamlı veri alış verişi yapmaması sorununa çözüm oldu. Bu fonksiyon sayesinde joystickten veri bekleniyor her an. Oyun ilk açıldığı an eğer aktif joystick yoksa oyun başlamıyor donuk bir şekilde bekliyor.

Oyunumuzun algoritması kısaca Başlangıç kutucuğu sona ulaşana kadar rakiplere çarpmamaya çalışmak. Eğer ulaşırsa yeni şekiller farklı hızlar karşısına çıkıp oyunun devamlılığı sağlanıyor.

Burada sıfırlamak için oluşturduğum fonksiyonu görebilirsiniz.( Değişken isimlerinin bu kadar anlamsız olduğu için üzgünüm )

void sifirla()
{
    asd = (rand()%4)+1;
    wasd = (rand()%4)+1;
    hizDS1=(float)((rand()%6)+1)/10;
    donus=rand()%1+1;
    r=(float)(rand()%10)/10;
    g=(float)(rand()%10)/10;
    b=(float)(rand()%10)/10;
    hizDS2=(float)((rand()%6)+1)/10;
    joyy=-40;
    joyx=0;
    glutPostRedisplay();
}

Oyunu tüm kodlarını github hesabıma ekledim.

Buradan ulaşabilirsiniz. https://github.com/ffahri/glutsimplegame

Videoya eklemediğim birkaç detay ise şu şekilde;

Joysticklerde sağ tarafta bulunan 1 ve 4 tuşları ile scale yapılıp kendi kutumuzu ölçeklendirebiliriz.

Yine aynı yerde 3 tuşuna bastığımız zaman ise renk değiştirebiliyoruz.

Oyunun oynanış videosu

FreeGlut ile geliştirdiğimiz basit bir oyun

Peki bu dersi seçerek neler öğrendim?

Öncelikle grafik teorisini öğrendim. Bu teori OpenGL , DirectX ve Vulkan gibi teknolojiler için geçerli bir durum. Daha sonra bu teorileri OpenGL kullanarak pratiğe döktük. Mandelbrot , Bezier gibi fonksiyonların nerelerde kullanıldığını ve bunları değiştirip yeni şekiller ,görüntüler elde etmeyi de öğrendim.