Şimdi Ara

Oyun Kodlama

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
4 Misafir - 4 Masaüstü
5 sn
14
Cevap
0
Favori
984
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Arkadaşlar ben 3ds max biliyorum ve tsarımlarım var acaba hangi programlama dili ile oyun yapılıyor erden başlanıyor bilen varmı lüfen yardımcı olurmuusnuz...



  • oyun dersen c derim hızlı olması açısından

    delphi ilede yapabilirsin ama c ye göre yavaş olur.
    bu ileri kolaylaştırmak için delphide bir sürü component var.
    delphix gibi yada opengl scene

    delphix ile directx tabanlı diğeri ilede opengl tabanlı oyunlar yazabilrisin

    birde 3dwebmaker gibi yada morfit motorunu kullanan delphi ve c++ uyumlu motorlar var

    yada bir oyun motoru oluşturmaktansa
    quake3 motorunu nette hem c++ hem delphi versiyonu açık olarak var.


    ayrıca 3dsmax maya gibi 3d uygulamaların 3d projerlini açmak için loader unitler var. ama daha çok yol kat etmen gerek.



    < Bu mesaj bu kişi tarafından değiştirildi drony -- 16 Haziran 2005, 16:12:46 >
  • Oyun yazmak bilinen bir çok programlama dalından zordur...
  • Oyun yazmak zor değildir; Hatta 3D MAX bilen biri için çok daha kolay olmalı.. Çünkü oyun programlama özellikle lineer cebir/matris mantığına dayanır. Örneğin bir küp'ü programlarken X,Y,Z uzayında 8 noktayı belirtersiniz ve kullandığınız kütüphane(OpenGL/DirectX) onu çizer. Mesala Transformasyon/Filtreleme falan uygulamak için bu 8 noktanın oluşturduğu matrisi çeşitli fonksiyonlara tabi tutarsınız..

    Oyunlar C dili ile yazılır. Diğer dilleri (tabi makine dili hariç) kullanmak performans düşüklüğü yaratır. Grafik kütüphanesi olarak openGL'i tavsiye ederim, aşağıda verdiğim linkte en basit'ten zor'a doğru tutorial ve ayrıca source kodlar bulabilirsiniz ama bu iş için biraz sabır da gerekecek kolay gelsin..

    http://nehe.gamedev.net/




  • ZOR dan kastım Windows ortamından Direct X mesela programlamak için yoğun API bilgisi ve Kütüphane yi tanımak gerektiği idi. Bunu öğrenmek bile zaten kayda değer bir zaman alacaktır. Birde işin matematiksel yönüne değinmişsiniz Oyun yazımına zor dememin bir diğer yönüde Yoğun hesaplama gereksinimi ekrandaki rotasyonlar nesneler arası katmanlar vs...

    Sıfırdan bir dil öğrenmekten farkı yok. Elbette yeni başlamış bir insan için. 3D max bilmek sadece grafik objeleri ve mekan tasarımları için uygun ve avantaj olabilir bence.

    Bu yazdıklarımla amacım kişiyi oyun programladan soğutmak deil yoğun çalışma ve azim gerektiren (Programlama :)) bir konu olduğunun altını çizmektir.
  • Arkadaşlar iyice kafam karıştı :
    Şimdi ben bir kutu çizdim diyelim örnek onun klavyeden yukarı ok tuşuna bastığım zaman ileri gitmesini istiyorum örnek olarak nasıl yaparım ne kullanır nerden başlarım :)
  • quote:

    Orjinalden alıntı: Night_Lord

    Arkadaşlar iyice kafam karıştı :
    Şimdi ben bir kutu çizdim diyelim örnek onun klavyeden yukarı ok tuşuna bastığım zaman ileri gitmesini istiyorum örnek olarak nasıl yaparım ne kullanır nerden başlarım :)


    @theDarkTemplar arkadaşımızın verdiği sitede daha detaylı bilgi bulabilirsin ama ben yinede TÜRKÇE açıklanması bakımından bir örnek atayım sana bu çok basit bir konsol ekranında çalışan bir oyun! Ayrıca bu işle gerçekten uğraşacaksan Win32 Api+opengl ile ilgili bulabildiğin dökümanları topla...Bu kod içerisinde klavye yönlendirmeleri mevcut... Ama senin istediğin şey OPenGL programlama bilgisi istediği için yanıt veremiyorum...

    ALINTIDIR ----------------------------------------------------------------------------------------------------------------

    quote:

    /*
    Text ortaminda calisan ornek bir oyunun kaynak kodudur
    oyundaki durumlarin benzerleri gunumuzdeki diger oyunlarda da
    kullanilmakta.

    Mesela Age of Empires oyunundaki SPEARMAN karakterinin
    hareketlerini düsünelim. Bu karakterin belli
    hareketleri olacaktir. Yurume, ates etme, olme
    gibi. Bu tur hareket olaylarini bizim kodda mermi icin
    kullandigimiz teknige benzer bir teknikle
    hareket ettirip, yapay zekası kontrol edilebilir

    typedef enum {MOVE, DIE, THINK, TURN vs...}STATE_SPEARMAN;

    kod icinde ise bu durumlari switchler yardimi ile
    cozup istenilen hareketler uygulanabilir

    switch( g_Spearman[0].GetState() )
    {
    case MOVE:
    g_Spearman[0].Move( );
    case DIE:
    g_Spearman[0].Die();
    ....
    }

    Tabi bu durumlar oyun akisi icerisinde de gecerli
    sadece karakterler bazinda degil. Oyun durdu mu,
    baslangic ekraninda mi, yoksa oyun herhangi bir
    bolumu mu hesapliyor, bu tip durumlarda bu ornekte
    yaptigimiz sekilde kontrol edilebilir

    Yazdigim kod biraz aceleye geldi, fazla eklemeler yapamadim.
    Ama asil amacim bu durumlarin ve genel oyun akisinin nasil
    olmasi gerektigini gosteren bir ornek kod yazmakti. Bu tip
    olaylari ileride yazacagimiz kodlarda kullanacagiz. Yalniz platform
    text ortami degil de windows ta grafik ortaminda olacak.
    Sadece cagiracagimiz fonksiyonlar farklı olacak.

    Kod iyice test edilmedi bu yuzden bug lar bulmaniz olasidir :))))...
    */
    #include <conio.h>
    #include <stdio.h>
    #include <stdlib.h>

    // oyun akis durumlari
    #define OYUN_CALISIYOR 0x00 // 0000 0000 binary
    #define OYUN_DURDU 0x01 // 0000 0001 binary
    #define OYUN_BITTI 0x02 // 0000 0010 binary
    #define OYUN_YARDIM 0x04 // 0000 0100 binary
    #define OYUN_YENILDI 0x08 // 0000 1000 binary

    // kullanacagimiz alanlarin sinirlari
    #define DUNYA_GENISLIGI 79
    #define DUNYA_YUKSEKLIGI 23

    // mermi durumu
    #define MERMI_ATESEDILMEDI 0x00
    #define MERMI_ATESEDILDI 0x01

    /*----------------------------------------------------------
    Tanimlar ve global degiskenler
    ----------------------------------------------------------*/
    // geminin yonu
    typedef enum tagYON{SOL=0, SAG, YUKARI, ASAGI}YON;

    // oyunla ilgili bilgilerin tutuldugu yapi
    typedef struct tagOYUN
    {
    int oyundurumu;
    int skor;
    int hak;
    }OYUN, *POYUN;

    // gemi ile ilgili bilgilerin tutuldugu yapi
    typedef struct tagGEMI
    {
    int x;
    int y;
    }GEMI, *PGEMI;

    // mermi ile ilgili bilgilerin tutuldugu yapi
    typedef struct tagMERMI
    {
    int x;
    int y;
    int mermidurumu;
    }MERMI, *PMERMI;

    // Bu yapi uzerinde biraz durmak istiyorum. Kullandigimiz
    // text ortamini 79x23 lük bir array olarak dusundum. Ve
    // arrayin herbir elemaninin hucredurumu degiskeni ekrana
    // basilacak olan karakterin integer degerini tutuyor. Yani
    // ekranin x = 10, y = 2 koordinatlarina 'A' karakteri basmak
    // istersek dunya[2][10].hucredurumu = 'A' dememiz yeterli
    // olacaktır. Bu bilgiler Dunya_Ciz(...) fonksiyonu tarafindan
    // ekrana output edilmektedir.
    typedef struct tagDUNYA
    {
    int hucredurumu; // ekrana cizilecek olan karakter degerini
    // tutar
    }DUNYA, *PDUNYA;

    /*----------------------------------------------------------
    Yeni bir oyun hazirla
    ----------------------------------------------------------*/
    void Yeni_Oyun( DUNYA dunya[][DUNYA_GENISLIGI], POYUN oyun )
    {
    for( int y=0; y<DUNYA_YUKSEKLIGI; y++ )
    for( int x=0; x<DUNYA_GENISLIGI; x++ )
    dunya[y][x].hucredurumu = ' ';

    oyun->oyundurumu = OYUN_CALISIYOR;
    oyun->skor = 0;
    oyun->hak = 3;
    }

    /*----------------------------------------------------------
    Geminin seklini anaplatforma ciz
    ----------------------------------------------------------*/
    void Gemi_Ciz( PGEMI gemi, DUNYA dunya[][DUNYA_GENISLIGI] )
    {
    int x = gemi->x-1 , y = gemi->y-1;

    dunya[y][x].hucredurumu = 219;
    dunya[y][x+1].hucredurumu = 223;
    dunya[y][x+2].hucredurumu = 223;
    dunya[y][x+3].hucredurumu = 223;
    dunya[y][x+4].hucredurumu = 219;
    }

    /*----------------------------------------------------------
    Gemiyi belirtilen yone gore hareket ettir. Eger geminin
    hareket ettigi noktada dusman :) varsa fonksiyon true
    dondurur
    ----------------------------------------------------------*/
    bool Gemi_Oynat( PGEMI gemi, DUNYA dunya[][DUNYA_GENISLIGI], YON yon )
    {
    int x = gemi->x-1 , y = gemi->y-1;

    dunya[y][x].hucredurumu = ' ';
    dunya[y][x+1].hucredurumu = ' ';
    dunya[y][x+2].hucredurumu = ' ';
    dunya[y][x+3].hucredurumu = ' ';
    dunya[y][x+4].hucredurumu = ' ';

    // gonderilen yone gore geminin yeni x ve y koordinatini belirle
    switch( yon )
    {
    case YUKARI:
    gemi->y--;
    if( gemi->y < 2 )
    gemi->y = 2;
    break;
    case ASAGI:
    gemi->y++;
    if( gemi->y > DUNYA_YUKSEKLIGI-1 )
    gemi->y = DUNYA_YUKSEKLIGI-1;
    break;
    case SOL:
    gemi->x--;
    if( gemi->x < 2 )
    gemi->x = 2;
    break;
    case SAG:
    gemi->x++;
    if( gemi->x + 5 > DUNYA_GENISLIGI )
    gemi->x = DUNYA_GENISLIGI -5;
    break;
    }

    x=gemi->x-1; y=gemi->y-1;

    if( dunya[y][x].hucredurumu != ' ' || dunya[y][x+1].hucredurumu != ' ' ||
    dunya[y][x+2].hucredurumu != ' ' || dunya[y][x+3].hucredurumu != ' ' ||
    dunya[y][x+4].hucredurumu != ' ' )
    return true;

    // gemiyi ciz
    dunya[y][x].hucredurumu = 219;
    dunya[y][x+1].hucredurumu = 223;
    dunya[y][x+2].hucredurumu = 223;
    dunya[y][x+3].hucredurumu = 223;
    dunya[y][x+4].hucredurumu = 219;

    return false;
    }

    /*----------------------------------------------------------
    Merminin hareketlerini hesapla
    ----------------------------------------------------------*/
    void Mermi_Ciz( PMERMI mermi, DUNYA dunya[][DUNYA_GENISLIGI], POYUN oyun )
    {
    int x = mermi->x, y=mermi->y;
    dunya[y][x].hucredurumu = ' ';

    if( mermi->mermidurumu == MERMI_ATESEDILDI )
    {
    dunya[y+1][x].hucredurumu = ' ';
    mermi->y--;
    dunya[y][x].hucredurumu = 223;

    // mermi menzil disinda mermimiyi bitir
    if( y < 3 )
    {
    mermi->mermidurumu = MERMI_ATESEDILMEDI;
    dunya[y][x].hucredurumu =' ';
    }

    // mermi dusmana carpti dusmani oldur, skoru artir
    if( dunya[y-1][x].hucredurumu != ' ' )
    {
    dunya[y][x].hucredurumu = ' ';
    oyun->skor += 100;
    mermi->mermidurumu = MERMI_ATESEDILMEDI;
    }
    }
    }

    /*----------------------------------------------------------
    79x24 boyutundaki dunya degiskeni ekranin hangi
    koordinatina hangi karakteri cizmek istiyorsak onun
    degerini tutar.
    ----------------------------------------------------------*/
    void Dunya_Ciz( DUNYA dunya[][DUNYA_GENISLIGI] )
    {
    gotoxy(0,0);
    for( int y=0; y<DUNYA_YUKSEKLIGI; y++ )
    {
    for( int x=0; x<DUNYA_GENISLIGI; x++ )
    {
    gotoxy(x,y);
    printf("%c", dunya[y][x].hucredurumu);
    }
    printf("\n");
    }
    }

    /*----------------------------------------------------------
    Oyun durdu yazisini kullaniciya goster
    ----------------------------------------------------------*/
    void Oyun_Durdu_Yazisi_Ciz()
    {
    char yazi[21] = "***OYUN DURDU [P]***";

    // yaziyi ekrana ortala
    int y = DUNYA_YUKSEKLIGI/2;
    int x = (DUNYA_GENISLIGI-21)/2;
    gotoxy(x,y);
    printf(yazi);
    }

    void Yenildi_Yazisi_Ciz()
    {
    char yazi[34] = "***Oyun Bitti Kaybettiniz :(((***";

    // yaziyi ekrana ortala
    int y = DUNYA_YUKSEKLIGI/2;
    int x = (DUNYA_GENISLIGI-33)/2;
    gotoxy(x,y);
    printf(yazi);
    }

    /*----------------------------------------------------------
    Rastgele bir koordinat secip oraya dusman bir kare koy
    eger dusman geminin uzerinde cikarsa true dondur
    ----------------------------------------------------------*/
    bool Dusman_Uret( DUNYA dunya[][DUNYA_GENISLIGI], PGEMI gemi )
    {
    int x, y;

    randomize();

    x = (rand() % DUNYA_GENISLIGI - 2);
    y = (rand() % DUNYA_YUKSEKLIGI - 5) + 3;

    if( x > gemi->x && x < gemi->x + 4 && y == gemi->y )
    return true;

    dunya[y][x].hucredurumu = 219;
    return false;
    }

    /*----------------------------------------------------------
    Kullaniciya yardimi goster
    ----------------------------------------------------------*/
    void Yardim_Ciz()
    {
    gotoxy(1,1);
    printf("Yon tuslari gemiyi hareket ettirir\n");
    printf("CTRL+alt ok ates eder\n");
    printf("ALT+Q Cikis\n");
    printf("P Oyunu Durdurur\n\n");
    printf("Amac: \tekranda beliren noktalara carpmadan\n");
    printf("\tpuani artirmaya calismaktir....\n");
    printf("\tOrnek bir text ortaminda calisan\n \tdos oyunu olarak ");
    printf("programlanmistir, kod\n\tuzerinde degisiklikler yapip\n");
    printf("\tfarkli seyler uretebilirsiniz :)))))");
    }
    /*----------------------------------------------------------
    Oyun bilgilerini skoru ciz...
    ----------------------------------------------------------*/
    void Bilgi_Ciz( POYUN oyun)
    {
    gotoxy(0,24);
    printf("Skor : %d, Hak : %d", oyun->skor, oyun->hak );
    }

    /*----------------------------------------------------------
    Ana fonksiyon
    ----------------------------------------------------------*/
    int main(void)
    {
    _setcursortype( _NOCURSOR );
    DUNYA anaplatform[DUNYA_YUKSEKLIGI][DUNYA_GENISLIGI];
    GEMI gemi;
    OYUN oyun;
    MERMI mermi;
    unsigned char tus;

    // geminin baslangic koordinatlari
    gemi.x = (DUNYA_GENISLIGI-5)/2;
    gemi.y = DUNYA_YUKSEKLIGI-1;

    // yeni oyun baslat
    Yeni_Oyun( anaplatform, &oyun );

    // ana dongu
    // goruldugu gibi oyumuzun icinde hareketliligi saglayabilmek
    // icin sonsuz bir loop kullandik ve eger oyunun akisi icerisinde
    // herhangi bir anda oyundurumu OYUN_BITTI sekline cevrilirse
    // bir if satiri yardimi ile bu looptan cikabiliriz.
    while( 1 )
    {
    // oyun bitti durumundaysa programdan cik
    if( oyun.oyundurumu == OYUN_BITTI )
    break;

    // input al
    if( kbhit() )
    {
    tus = getch();
    if( !tus )
    tus = getch();
    else
    {
    // p tusuna basildiysa oyunu durdur veya coz
    if( tus == 'P' || tus == 'p' )
    {
    // oyun zaten durmuş, oyunu çalıştır
    if( oyun.oyundurumu == OYUN_DURDU )
    oyun.oyundurumu = OYUN_CALISIYOR;
    else
    oyun.oyundurumu = OYUN_DURDU;
    }

    // eger yardim alinmissa oyunu calisma durumuna dondur
    if( tus == 27 ) // escape basildi
    if( oyun.oyundurumu == OYUN_YARDIM )
    oyun.oyundurumu = OYUN_CALISIYOR;

    tus = 0;
    }
    }

    /*
    INPUT u degerlendir
    */
    switch( tus )
    {
    case 16: // alt-q
    oyun.oyundurumu = OYUN_BITTI;
    break;

    case 59: // f1
    oyun.oyundurumu = OYUN_YARDIM;
    break;

    // ok tuslarina basilmissa gemiyi hareket ettir
    case 77: // sag
    if( Gemi_Oynat( &gemi, anaplatform, SAG ) )
    {
    // gemi hareket etti ve düsmana carpti, oyuncunun hakkını eksilt
    oyun.hak--;
    if( oyun.hak == 0 )
    oyun.oyundurumu = OYUN_YENILDI;
    }
    break;

    case 75: // sol
    if( Gemi_Oynat( &gemi, anaplatform, SOL ) )
    {
    // gemi hareket etti ve düsmana carpti, oyuncunun hakkını eksilt
    oyun.hak--;
    if( oyun.hak == 0 )
    oyun.oyundurumu = OYUN_YENILDI;
    }
    break;

    case 72: // yukari
    if( Gemi_Oynat( &gemi, anaplatform, YUKARI ) )
    {
    // gemi hareket etti ve düsmana carpti, oyuncunun hakkını eksilt
    oyun.hak--;
    if( oyun.hak == 0 )
    oyun.oyundurumu = OYUN_YENILDI;
    }
    break;

    case 80: // asagi
    if( Gemi_Oynat( &gemi, anaplatform, ASAGI ) )
    {
    // gemi hareket etti ve düsmana carpti, oyuncunun hakkını eksilt
    oyun.hak--;
    if( oyun.hak == 0 )
    oyun.oyundurumu = OYUN_YENILDI;
    }
    break;

    case 141: // ctrl+yukari ok
    // her seferinde sadece 1 mermi at. Mermi zaten
    // hareket halindeyse birşey yapma
    if( mermi.mermidurumu == MERMI_ATESEDILMEDI )
    {
    mermi.x = gemi.x+1;
    mermi.y = gemi.y-1;
    mermi.mermidurumu = MERMI_ATESEDILDI;
    }
    break;
    }

    tus = 0;

    /*
    Ana durumlar
    oyun calisirken bu durumlarin sadece birine girecektir.
    */
    switch( oyun.oyundurumu )
    {
    // oyun calisiyor, yapay zeka karakter hareketleri
    // animasyon vb. olaylar bu kısımda calistirilir
    case OYUN_CALISIYOR:
    {
    Bilgi_Ciz( &oyun );
    Mermi_Ciz( &mermi, anaplatform, &oyun );
    Gemi_Ciz( &gemi, anaplatform);
    if( Dusman_Uret( anaplatform, &gemi ) )
    {
    // gemi hareket etti ve düsmana carpti, oyuncunun hakkını eksilt
    oyun.hak--;
    if( oyun.hak == 0 )
    oyun.oyundurumu = OYUN_YENILDI;
    }
    Dunya_Ciz( anaplatform );
    break;
    }

    case OYUN_DURDU:
    Oyun_Durdu_Yazisi_Ciz();
    break;

    case OYUN_YARDIM:
    Yardim_Ciz();
    break;

    case OYUN_YENILDI:
    Yenildi_Yazisi_Ciz();
    break;
    }
    } // ana döngü sonu

    return 0;
    }


    Kolay Gelsin...



    < Bu mesaj bu kişi tarafından değiştirildi irfanmatak -- 17 Haziran 2005, 0:52:09 >




  • Yapay Zeka’dan İlgili Konular
    RPG Maker Oyunu Türkçe Yapmak?
    4 yıl önce açıldı
    Daha Fazla Göster
  • Arkadaşlar bunu türkçe açıklaması yokmudur ? Nerden başlamalıyım daha hiçbirşey bilmiyorum grafikerlik hariç :(
  • quote:

    Orjinalden alıntı: Night_Lord

    Arkadaşlar bunu türkçe açıklaması yokmudur ? Nerden başlamalıyım daha hiçbirşey bilmiyorum grafikerlik hariç :(



    Verdiğim Kodu incelemeden yazmışsın !
  • quote:

    Orjinalden alıntı: Night_Lord

    Arkadaşlar iyice kafam karıştı :
    Şimdi ben bir kutu çizdim diyelim örnek onun klavyeden yukarı ok tuşuna bastığım zaman ileri gitmesini istiyorum örnek olarak nasıl yaparım ne kullanır nerden başlarım :)

    www.oldeye.com

    sanırım türkçe destek bulabilceğin tek oyun progamlama forumu. ağırlık delphix isimli directx tabanlı delphi componenti üzerine gerekli tüm bilgileri buradan bulabilirsin
  • Saol dostum drony..

  • 3ds max ile bir oyunda değişiklik yapabiliyormuyus?

    mesela futbol oyunundaki oyuncuların ismini değiştirmek gibi.
  • quote:

    Orjinalden alıntı: METMETALLICA


    3ds max ile bir oyunda değişiklik yapabiliyormuyus?

    mesela futbol oyunundaki oyuncuların ismini değiştirmek gibi.



    Oyunların sadece görsel arayüzü çizim programları ile hazırlanıyor.(3dmax vs..) çizim programı ile çizdiğin objeyi kod kullanarak hareketlendiriyorsun yada diğer işlemler ile deişkenlerde bilgi saklıyorsun vs. SKOR mesela :)

    Kodlama bilmeden oyun yazılamaz. Ama bu işi basitleştiren tool programlar var Game Maker VS. Kurcalayabilirsin.
  • yada
    blender
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.