Şimdi Ara

C ile yazılmış yılan oyunu

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
20
Cevap
0
Favori
34.731
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  •  
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<time.h>

    struct yilan{
    int x,y;
    };
    int len=4;
    int score=0;
    int col=20,row=10;
    char map[20][40];
    int tamammi_devammi(struct yilan snake[]){
    int i,k1=0,k2=0;
    if(snake[0].x==0||snake[0].x==19||snake[0].y==0||snake[0].y==39){
    k1=1;
    }
    for(i=1;i<len;i++){
    if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y){
    k2=1;
    break;
    }
    }
    if(k1==1||k2==1) return 1;
    else return 0;
    }

    void yemleme(){
    srand(time(NULL));
    row=rand()%18+1;
    col=rand()%38+1;
    }
    void yem(char dizi[20][40],struct yilan snake[]){
    if(snake[len-1].x==row&&snake[len-1].y==col){
    snake[len].x=row;
    snake[len].y=col;
    len++;
    score=score+10;
    yemleme();
    printf("\a");

    }
    }
    void duvar(char dizi[20][40]){
    int i,j;
    for(i=0;i<20;i++){
    if(i==0||i==19){
    for(j=0;j<40;j++){
    dizi[i][j]='=';
    }
    }
    else{
    dizi[i][0]='|';
    for(j=1;j<39;j++){
    dizi[i][j]=' ';
    }
    dizi[i][39]='|';
    }

    }
    map[row][col]='x';
    }
    void ciz(char dizi[20][40]){
    system("CLS");
    printf("Score: %d\n",score);
    int i,j;
    for(i=0;i<20;i++){
    for(j=0;j<40;j++){
    printf("%c",dizi[i][j]);
    }
    printf("\n");
    }

    }
    void baslangic(struct yilan yil[]){
    yil[0].x=1;
    yil[0].y=4;
    yil[1].x=1;
    yil[1].y=3;
    yil[2].x=1;
    yil[2].y=2;
    yil[3].x=1;
    yil[3].y=1;
    }
    void yilan (char dizi[20][40],struct yilan yil[]){
    yem(map,yil);
    int i;
    for(i=0;i<len;i++){
    dizi[yil[i].x][yil[i].y]='*';
    }
    }
    void sag(struct yilan snake[],int uzunluk){
    int i;
    for(i=uzunluk-1;i>0;i--){
    snake[i].x=snake[i-1].x;
    snake[i].y=snake[i-1].y;
    }
    snake[0].y++;
    }
    void sol(struct yilan snake[],int uzunluk){
    int i;
    for(i=uzunluk-1;i>0;i--){
    snake[i].x=snake[i-1].x;
    snake[i].y=snake[i-1].y;
    }
    snake[0].y--;
    }
    void yukari(struct yilan snake[],int uzunluk){
    int i;
    for(i=uzunluk-1;i>0;i--){
    snake[i].x=snake[i-1].x;
    snake[i].y=snake[i-1].y;
    }
    snake[0].x--;
    }
    void asagi(struct yilan snake[],int uzunluk){
    int i;
    for(i=uzunluk-1;i>0;i--){
    snake[i].x=snake[i-1].x;
    snake[i].y=snake[i-1].y;
    }
    snake[0].x++;

    }




    int main(){

    char right='d';
    char left='a';
    char up='w';
    char down='s';
    char yon;
    long i;
    int kontrol=0;
    struct yilan snake[100];

    duvar(map);
    baslangic(snake);
    yilan(map,snake);
    ciz(map);

    while(1){
    yon=getch();
    i=0;

    if(yon==right){
    while(i<100000){
    if(i%2000==0){
    if(tamammi_devammi(snake)){
    ciz(map);
    kontrol=1;
    break;

    }

    sag(snake,len);
    duvar(map);
    yilan(map,snake);
    ciz(map);
    }
    i++;
    if(kbhit()) break;
    }

    }
    else if(yon==left){
    while(i<100000){
    if(i%2000==0){
    if(tamammi_devammi(snake)){
    ciz(map);
    kontrol=1;
    break;
    }
    sol(snake,len);
    duvar(map);
    yilan(map,snake);
    ciz(map);
    }
    i++;
    if(kbhit()) break;
    }
    }
    else if(yon==up){
    while(i<100000){
    if(i%2000==0){
    if(tamammi_devammi(snake)){
    ciz(map);
    kontrol=1;
    break;
    }
    yukari(snake,len);
    duvar(map);
    yilan(map,snake);
    ciz(map);
    }
    i++;
    if(kbhit()) break;
    }
    }
    else if(yon==down){
    while(i<100000){
    if(i%2000==0){
    if(tamammi_devammi(snake)){
    kontrol=1;
    ciz(map);
    kontrol=1;
    break;
    }
    asagi(snake,len);
    duvar(map);
    yilan(map,snake);
    ciz(map);
    }
    i++;
    if(kbhit()) break;
    }
    }
    if(kontrol==1) break;


    }



    getch();
    }

    c ile yazdıığım yılan oyunu.ancak calisirken islemci kullanimi %40-50 civarında bu kodu nasıl daha verimli bir hale getirebilirim?



    < Bu mesaj bu kişi tarafından değiştirildi gpost -- 8 Temmuz 2010; 16:18:37 >







  • bu oyunu nasıl oynucaz not defterine bunu yazdıktan sonra uzantısını ne olarak kaydetmek lazım
    c den anlamıyorumda
  • DevC++ 'da derlemen lazım
  • Bence sebebi ekranı sürekli silip tekrar yazmandan kaynaklanıyor. Öyle yapmak yerine sadece değişiklik olan koordinatları değiştir aynı olan koordinatları tekrar çizdirme. Bu yüzden CLS yerine daha işlevli sadece koordinat silebilen bir fonksiyon aramalısın. Sağlam garafik kütüphanelerinde böyle fonksiyonlar mutlaka mevcuttur . Eğer böyle bir fonksiyon kullanırsan programın daha iyi olacaktır. OpenGL falan araştırmanı tavsiye ederim , grafikle ilgili sağlam kütüphaneleri mevcut.
  • Çok özür dilerim farklı bi başlık altında yazıyorum ama..Arkadaşlar C++'den bi ödevim var yardım edebilecek olan biri varsa lütfen çok acil...:(..
  • eheheh oynadım güzelmiş.

    s tuşu ile başlayın oyuna
  • Oyunu oynamadim ama;

    main functionda


    while(i<100000) var, ve saniyorsam her hareketten sonra, program karar veriyor, programi 100000 lik bir loopa sokmak her seferinde CPUyu cok zorlar. Daha degisik bir karar verme motoru gelistirmen gerekebilir, ama dedigim gibi incelemedim programi, %40-50 CPU kullanimi bu loop yuzunden oldugunu dusnuyorum.
  • Bence de ekranı silip yazması yoruyor işlemciyi çünkü printf fonksiyonu ağır bir fonksiyonhttp://letscoding.com/2011/02/12/snake-v2-0/ bu adreste bir örnek var bak istersen
  • Hos olmus eline saglik
    bencede ekranin surekli yenilenmesinden dolayi islemci kullanimi artiyor.
    cunku sonsuz donuyor program duvara carpana kadar donecek.
    bunu aciklamak icin bir ornek vercek olursak printf le herhangi bir sey yazin ve bunu sonsuz donguye sokun ve programi calistirin
    benim 4 cekirdekli phenomII 965 im %30 yuk altina girdi
    bu aslinda C nin cok zayif bir dil olmasindan kaynaklaniyor
    C# veya diger visual dilleri ogrenip onlarla yazarsaniz daha etkin olur
  • quote:

    Orijinalden alıntı: R_M_A

    Hos olmus eline saglik
    bencede ekranin surekli yenilenmesinden dolayi islemci kullanimi artiyor.
    cunku sonsuz donuyor program duvara carpana kadar donecek.
    bunu aciklamak icin bir ornek vercek olursak printf le herhangi bir sey yazin ve bunu sonsuz donguye sokun ve programi calistirin
    benim 4 cekirdekli phenomII 965 im %30 yuk altina girdi
    bu aslinda C nin cok zayif bir dil olmasindan kaynaklaniyor
    C# veya diger visual dilleri ogrenip onlarla yazarsaniz daha etkin olur



    Allah çarpar adamı




  • quote:

    Orijinalden alıntı: R_M_A


    bu aslinda C nin cok zayif bir dil olmasindan kaynaklaniyor
    C# veya diger visual dilleri ogrenip onlarla yazarsaniz daha etkin olur


    Hadi canim kapat sen o kapiyi, soguk girmesin içeriye.
  • artistik yapacagina adama yardimci olacak bisi yaz lale
  • system("CLS"); yerine sadece yılanın kordinatlarını yenilemeniz yeterli. Bunun için yılanın koordinatlarına gitmeniz lazım. GetCurPos gibi yada benzer bir fonksiyon vardı arayın olmazsa bendekini size vereyim.
    getch() yerine, KEY_DOWN, KEY_UP olaylarını yakalayıp bu aşamadan sonra basılan tuşa göre işlem yaparsanız daha hızlı çalışan ve tahminimce hafızadan da daha az yiyen bir program elde edersiniz. Bunu da araştırın, takıldığınız yerlerde yardımcı olmaya çalışırım.
  • quote:

    Orijinalden alıntı: R_M_A

    artistik yapacagina adama yardimci olacak bisi yaz lale

    Yanlış yol göstermektense hiç yol göstermesin. (Bknz:Senin gibi.)
  • quote:

    Orijinalden alıntı: Ac Schnitzer.


    quote:

    Orijinalden alıntı: R_M_A

    artistik yapacagina adama yardimci olacak bisi yaz lale

    Yanlış yol göstermektense hiç yol göstermesin. (Bknz:Senin gibi.)

    C# tavsiye etmenin neresi yanlis yol ?
    Bos konusacagina hic konusma

    ayrica benim yazdigimin neresi yanlis yada dalga gecilcek bisi var ona anlam veremedim C zayif bir dildir baslangic icin iyi bir dildir ve bazi seyleri yapmak ve etkinlik saglamak zordur.
    C# ile yazilmis bir yilan oyununu incelemistim daha onceki postlari yazarken o yuzden aklima o geldide yazdim.
    Konu zaten sacma sapan bir yere gitti C# onermeme sacma dio adam saka gibi.
    dahada adam yerine koyup cevap yazmam.isteyen c ile yazar isteyen baska bir dille.




  • Büyük hatayı ikinciye yapıyorsun dikkat et, üçüncüye çarpılırsın! Ortaya bir iddia atıyorsan desteğin olmalı.
  • while ile işlemciyi köklediğin için oluyor o. intelin sitesindeki açıklamaya göre davranıyorum, while(1) döngüsünün sonuna (yani } işaretinden önceki satıra) bir adet Sleep(1); ekle, sorun hallolur. sleep hata veriyorsa #include <windows.h> yeterli, tabi visual studioyla çalışıyorsan.
  • R_M_A kardeşim C bütün C ailesinin temelidir. C++,C#,Objective-C... C ile donanıma mükemmel erişim sağlarsın. Hafıza yönetimini çok rahat yaparsın yani bilgisayar yönetimin çok başarılı olur.. C# C'den türetilmiş olup bazı amaçlar için programcının işini kolaylaştırmak için üretilmiş bir dildir. Temeli tamamen C'dir...

    Senin burda şöyle bir hatan var... C ye zayıf dersen C# daha zayıf olur.. C güçlüdür hemde çok güçlüdür... Ama biraz zordur. C# gibi VS studio ortamında kolaylıkla yazılacak birşey değildir. Derleyiciler kendileri senin için birşeyler eklemezler sen yaparsın herşeyini.. Ama herşeyin sonucu Assembly'e gider onun bi öncesinde de C'ye uğrar...( Bahsettiğimiz aile için) Arkadaşlarda bu konu da seni uyarıyorlar...

    Saygılarımla...
  • .net güzel bir şey ama visual basic, c# gibi diller microsoft destekli olduğu için kendini özgür hisseder misin kodlarken bilemiyorum ? c ile yazdığın şeyleri bütün işletim sistemlerine uyarlayabilirsin ancak diğerleri için .net framework gerekecek. bir ps3, ps2 ve birçok konsol oyunu bile c++/c ile yazılır, ps3 opengl, diğerleri directx kullanır. ama şöyle bir şey var, benim amacım ciddi falan değil şeklinde düşünüyorsan C ile uğraşma derim çünkü C her şeyi sana bırakır. hele pointer ve stringlerle uğraşırken dili bırakmak bile istersin.

    assembly öğrenmesi de öle aşırı zor bir şey değil, git C'de program yaz -ufak bir program- compile et ve .exeyi bir disassembler programıyla aç, ne yaptığına falan baka baka öğren. ben öyle yaptım. ha tabi bir elektronik aygıtın inceliklerine kadar bilmen lazım, bit byte mikroişlemci adresler yığınlar vs..
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.