Arama butonu
Bu konudaki kullanıcılar: 1 misafir
18
Cevap
34853
Tıklama
0
Öne Çıkarma
C ile yazılmış yılan oyunu
G
15 yıl
Er
Konu Sahibi

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

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





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

-
15 yıl
Binbaşı

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


Bu mesaja 1 cevap geldi.
T
15 yıl
Binbaşı

T
15 yıl
Teğmen

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.


Bu mesaja 1 cevap geldi.
P
15 yıl
Er

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



S
15 yıl
Teğmen

eheheh oynadım güzelmiş.

s tuşu ile başlayın oyuna


Bu mesaja 1 cevap geldi.
M
15 yıl
Yarbay

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.



K
14 yıl
Çavuş

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


Bu mesaja 1 cevap geldi.
V
14 yıl
Er

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


Bu mesaja 2 cevap geldi.
E
14 yıl
Yüzbaşı

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ı



E
14 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
V
14 yıl
Er

artistik yapacagina adama yardimci olacak bisi yaz lale


Bu mesaja 2 cevap geldi.
Q
14 yıl
Yüzbaşı

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.



A
14 yıl
Yarbay

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


Bu mesaja 1 cevap geldi.
V
14 yıl
Er

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.


Bu mesaja 1 cevap geldi.
G
14 yıl
Yarbay

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


Bu mesaja 1 cevap geldi.
B
14 yıl
Yüzbaşı

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.


Bu mesaja 1 cevap geldi.
V
14 yıl
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
B
14 yıl
Yüzbaşı

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



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.