Av Avcı Problemi

PeerNet
19-11-2010, 15:28   |  #1  
PeerNet avatarı
OP Yıllanmış Üye
Teşekkür Sayısı: 0
123 mesaj
Kayıt Tarihi:Kayıt: Haz 2009

İyi Günler Arkadaşlar.. Bir sorunum var aşağıdaki olayı C Dilinde Yazmam Gerekiyor.. Şimdiden Teşekkür Ederim..
 
5 e 5 bir ızgara düşünün. Avı ve avcıyı rastgele bir yere koyuyorsunuz. Avcı her yöne gidebilir iken av sadece sağa sola yukarı ve aşağı gidebilir. Yani avcı çapraz da gidebilir. Her durumda sadece bir adım atabilirler. Avcı  avı her yerde görebilir. Av alanı sınırlıdır. Av avcı uzaklığı= √(x1-x2) ² +(y1-y2) ² . Av avcıyı 1.5 m den az olan yerlerde görebilir ve en uzağa kaçacak. Kimse alan dışına çıkamayacak. Av avcıyı en kısa sürede nasıl yakalar? Not: ( En sonunda Av Yakalandı Diye Mesaj Çıkacak)

muh34
19-11-2010, 17:26   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yukarıdaki problem de ilk olarak 5-5 bir kare matris olusumu gerekmektedir.'time' kutuphanesini programa dahil ederek,rand() fonksiyonu ile av ve avcıyı kare matrisinin boyutları arasında iki noktaya yerlestirmek yapılacak ilk hamledir.Bunun icin,
x1=rand()%5 ve x2=rand()%5 ifadesi yazılabilir(aynı durum avın koordinatları icinde gecerli olacaktır).

Avcının koordinatlarına x1 ve y1 denilirse,avın koordinatları x2 ve y2 olabilir.O halde
if( sqrt(pow(x2-x1,2)+pow(y2-y1,2)) < 1.5 ) seklindeki bir karar yapısı ile avın bulundugu noktadan,yani x2 ve y2 noktasından belirtilen aralıkta kacması istenebilir.
ornek olarak işletim yukarıdaki if() bloguna girdiginde,
x2-=1 | x2+=1 | y2+=1 | y2-=1 ifadelerinden bir tanesi,sınır durumuna gore işletilebilir.

Oyunun sonlanma(terminate) noktası ise,avcı ve avın aynı koordinat noktası uzerinde olması ile gercekleşir.

Yapmak istediginiz programı kodlarsanız,gereken noktalarda yardımcı olmaya calısırım.
Başarılar

zhrsnr
19-11-2010, 21:35   |  #3  
Taze Üye
Teşekkür Sayısı: 0
1 mesaj
Kayıt Tarihi:Kayıt: Kas 2010

aynı sorun bende de var kardeş bi türlü içinde cıkamıorummm acıl yardım ederseniz sevinirim bu hafta sonu yaapmam lazım mutlaka

Son Düzenleme: zhrsnr ~ 19 Kasım 2010 21:38
Sukes
20-11-2010, 12:13   |  #4  
Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Kas 2010

arkadaşlar bu soruyu benim de acil yapmam gerekiyor ve kod a dökemiyorum.bu oyunu kod şeklinde yazabilir misiniz?

Sukes
23-11-2010, 16:37   |  #5  
Taze Üye
Teşekkür Sayısı: 0
2 mesaj
Kayıt Tarihi:Kayıt: Kas 2010

arkadaşlar bu soruyu çözebilecek biirisi yok mu???acil lazım ne olur yardım edin lütfen!!!!!

muh34
28-11-2010, 15:30   |  #6  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

int matrix[5][5];
int avX,avY,avciX,avciY;

void yerlestir() {

     matrix[0][0]=0;
     srand(time(NULL));
     int x=rand()%5;
     int y=rand()%5;
     matrix[x][y]=2; // av yerlestir
     avX=x;avY=y;
     while(matrix[x][y]==2) {
         x=rand()%5;y=rand()%5;
         if(matrix[x][y]!=2) {
         matrix[x][y]=1; // avci yerlestir
         avciX=x;avciY=y;
         }
         }
     }

void goruntu() {

     int i,j;
     for(i=0;i<5;i++) {
     for(j=0;j<5;j++)
     printf("%d ",matrix[j]);
     printf("\n");
     }
     }

void oyna() {

     int hamleSayisi=0;
     while(1) {
     int hamle=0;
     printf("Avciyi Hareket Ettir? -> sag 6-sol 4-asagi 2-yukari 8-sagUstCapraz 9-solUstCapraz 7-sagAltCapraz 3-solAltCapraz 1\n");
     hamle=getche();
     hamleSayisi++;
     matrix[avciX][avciY]=0;
     switch(hamle) {
                    case 49: avciX++;avciY--;
                    break;
                    case 50: avciX++;
                    break;
                    case 51: avciX++;avciY++;
                    break;
                    case 52: avciY--;
                    break;
                    case 54: avciY++;
                    break;
                    case 55: avciX--;avciY--;
                    break;
                    case 56: avciX--;
                    break;
                    case 57: avciX--;avciY++;
                    break;
                    }
     matrix[avciX][avciY]=1;
     if(avciX==avX && avciY==avY) {
     printf("\n\n%d hamlede Av yakalandi\n",hamleSayisi);
     system("pause");
     break;
     }
     double durum[4];
     if(sqrt(pow(avciX-avX,2)+pow(avciY-avY,2)) < 1.5) 
     {
     if(avX+1 < 5)
     durum[0]=sqrt(pow(avciX-(avX+1),2)+pow(avciY-avY,2));
     else
     durum[0]=-100;
     if(avX-1 > -1)
     durum[1]=sqrt(pow(avciX-(avX-1),2)+pow(avciY-avY,2));
     else
     durum[1]=-100;
     if(avY+1 < 5)
     durum[2]=sqrt(pow(avciX-avX,2)+pow(avciY-(avY+1),2));
     else
     durum[2]=-100;
     if(avY-1 > -1)
     durum[3]=sqrt(pow(avciX-avX,2)+pow(avciY-(avY-1),2));
     else
     durum[3]=-100;
     double temp=durum[0];
     int index=0,i=0;
     for(i=1;i<4;i++) { 
     if(temp < durum) {
     temp=durum;
     index=i;
     }  
     }
     matrix[avX][avY]=0;
     int kacamassaX=avX,kacamassaY=avY;
     switch(index) {
                   case 0: avX++;
                   break;
                   case 1: avX--;
                   break;
                   case 2: avY++;
                   break;
                   case 3: avY--;
                   break;
                   }
                   if(avX > -1 && avY > -1 && avX < 5 && avY < 5) 
                   matrix[avX][avY]=2;
                   else
                   matrix[kacamassaX][kacamassaY]=2;
                   }
     system("cls");
     goruntu();
     }
     }

main() {

       yerlestir();
       goruntu();
       oyna();
       return 0;
       }
Yogun Talep uzerine yukarıdaki oyunun C dilindeki karsılıgını yayınlıyorum.

Başarılar

muh34
28-11-2010, 15:40   |  #7  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yukarıda gondermiş oldugum program,oyunun kaba taslagını yansıtmaktadır.Oyun uzerindeki gerekli iyileştirmeler ve kontroller kullanıcılara bırakılmıştır.
Başarılar

incefikir
20-05-2015, 05:18   |  #8  
Taze Üye
Teşekkür Sayısı: 0
1 mesaj
Kayıt Tarihi:Kayıt: May 2015

Hunter & Prey Programı C# ile kodlanmış hali. Sorun ile uğraşan arkadaşlara faydalı olması için burada paylaşıyorum. :)