- x
    Bunlarla Giriş Yapın: Facebook Google+ Twitter DH Giriş:
    ?
  • Hatırla
  • Yeni Kayıt
C ile yazılmış yılan oyunu
18 Cevap8613 Görüntüleme
Bu konudaki kullanıcılar: hiç
  Seçkin Yorumlar Linkli Mesajlar Yazdır
Sayfa: [1]
Giriş
Mesaj


 
5 Mesaj
8 Temmuz 2010; 16:15:46 

#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 >


_____________________________



1236 Mesaj
8 Temmuz 2010; 23:18:18 

bu oyunu nasıl oynucaz not defterine bunu yazdıktan sonra uzantısını ne olarak kaydetmek lazım
c den anlamıyorumda


_____________________________

Donanım Haber
## Bilgisayar Mühendisleri Odası ##

01101000 01101100 01101100 00100000 01101011 01101110 01101011


 
1520 Mesaj
8 Temmuz 2010; 23:24:33 

DevC++ 'da derlemen lazım


_____________________________

Kurumsal Web Siteleri İçin Tercüme Hizmeti
HTML, CSS, JavaScript, jQuery, XML, XPATH, XQuery, PHP
Perl, Ruby, Python and F# Learner
Fedora Linux Addict
Apache Configurator


 
212 Mesaj
9 Temmuz 2010; 0:16:53 

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.


_____________________________

Nokta kadar menfaat için virgül kadar eğilme.


 
1 Mesaj
9 Temmuz 2010; 13:07:02 

Ç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...:(..


_____________________________



 
97 Mesaj
9 Temmuz 2010; 13:55:42 

eheheh oynadım güzelmiş.

s tuşu ile başlayın oyuna


_____________________________


Ay Em Muro !
### Muro Fan Glab ###


3757 Mesaj
12 Temmuz 2010; 12:57:59 

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.


_____________________________





 
42 Mesaj
15 Şubat 2011; 16:23:57 

Bence de ekranı silip yazması yoruyor işlemciyi çünkü printf fonksiyonu ağır bir fonksiyon http://letscoding.com/2011/02/12/snake-v2-0/ bu adreste bir örnek var bak istersen


 
10 Mesaj
17 Şubat 2011; 13:19:06 

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


_____________________________



 
552 Mesaj
18 Şubat 2011; 23:50:44 


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ı


_____________________________



546 Mesaj
20 Şubat 2011; 0:45:59 


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.


_____________________________

RHCE, RHCSA, SCSA, SCNA, CCNA, SCP


 
10 Mesaj
21 Şubat 2011; 16:13:52 

artistik yapacagina adama yardimci olacak bisi yaz lale


_____________________________



 
442 Mesaj
21 Şubat 2011; 18:07:13 

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.


_____________________________

Yanmışsam, külümden doğacak bir hisar vardır.


 
4734 Mesaj
8 Mart 2011; 8:34:56 


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.)


_____________________________

97. Opel Corsa GSİ


 
10 Mesaj
19 Mart 2011; 16:04:00 


quote:

Orijinalden alıntı: Ac Schnitzer.



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.


_____________________________



2613 Mesaj
19 Mart 2011; 18:18:01 

Büyük hatayı ikinciye yapıyorsun dikkat et, üçüncüye çarpılırsın! Ortaya bir iddia atıyorsan desteğin olmalı.


_____________________________



 
432 Mesaj
19 Mart 2011; 21:20:32 

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.


_____________________________

Intel Core2Duo e8400@3.00 | Asus P5Q Deluxe | Asus 8800GT | Corsair Dominator 2x2 1066mhz DDR2 | Seagate Barracuda 500GB Sata3.0 (sata2.0 moboda) | HDT-SD964 soğutucu (kötüymüş :P) | Seasonic M12II 620W PSU


307 Mesaj
20 Mart 2011; 5:21:19 

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...


_____________________________

Biz bu yollardan geçerken basamak basamak bile çıkamadık. Bilmediklerimizi "Google"da aratarak değil, saatlerce kafa patlatarak öğrendik.


 
432 Mesaj
20 Mart 2011; 6:37:57 

.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..


_____________________________

Intel Core2Duo e8400@3.00 | Asus P5Q Deluxe | Asus 8800GT | Corsair Dominator 2x2 1066mhz DDR2 | Seagate Barracuda 500GB Sata3.0 (sata2.0 moboda) | HDT-SD964 soğutucu (kötüymüş :P) | Seasonic M12II 620W PSU
Sayfa:   [1]
Sayfa: [1]
Foruma Git
Bölümde Ara
Başa Dön


 
Reklamlar


DH VİDEO

 



Forum Software powered by ASP Playground Advanced Edition 2.3
Copyright © 2000 - 2006 ASPPlayground.NET

Bu sayfanın mobil sürümü / tablet sürümü / mini sürümü.



0.375