Şimdi Ara

c yılan oyunu çok küçük bir yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
7
Cevap
0
Favori
342
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Öncelikle merhabalar. üniversite öğrencilerinin ödev olarak verebileceği yılan oyunu kodu paylaşıyorum. ancak yılan bazen duvardan geçerken ölüyor bazen geçip karşıdan çıkıyor. Ya duvara çarpınca ölsün yada hep geçsin istiyorum biri yardım edebilirse çok dua edicem. teşekkür ediyorum.

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

    #define N 20 //çerçeve satır sayısı
    #define M 40 //çerçeve sutun sayısı

    int i,j,Alan[N][M],x,y,Gecici ,Kafa ,Kuyruk,Oyun ,Yem ,a,b,var,yon ,Puan, Rekor,Hiz;

    FILE *f; //Dosya için

    void yilan(){
    f=fopen("Rekor.txt","r"); //böylece yüksek skoru hafızada tutuyoruz
    fscanf(f,"%d",& Rekor); //yüksek skoru okuyoruz
    fclose(f); //dosyayı kapatti

    for(i=0;i<N;i++){ //yılanın merkezlenmesi
    for(j=0;j<M;j++){
    Alan [j]=0;
    }
    }

    x=N/2;y=M/2; Gecici = y; Kafa = 5; Kuyruk =1; Oyun = 0, Yem = 0, yon ='d', Puan =0, Hiz = 99; //yılanın merkezlenmesi ve diğer ayarları

    for(i=0;i< Kafa;i++){ //yılanın ilerlemesi
    Gecici ++;
    Alan [x][ Gecici - Kafa] = i+1;
    }
    }

    void print(){ //oyun cercevesi
    for(i=0;i<=M+1;i++){
    if(i==0){
    printf("%c",201); //sol üst kose cercevesi
    }else if(i==M+1){
    printf("%c",187); // sag üst kose cercevesi
    }else{
    printf("%c",205); // çerçeve düz çizgi
    }
    }
    printf(" Skorunuz: %d Rekor: %d", Puan, Rekor); //oyun ekrani skor tablosu
    printf("\n");

    for(i=0;i<N;i++){ // cerceve ortası
    printf("%c",186); // cerveve sol asagi cizgi

    for(j=0;j<M;j++){
    if(Alan [j]==0) printf(" "); //yılanın gövdesi
    if(Alan [j]>0 && Alan [j]!= Kafa) printf("%c",176);
    if(Alan [j]== Kafa) printf("%c",178);
    if(Alan [j]==-1) printf("%c",15); //yem için verilen sembol
    if(j==M-1) printf("%c\n",186);
    }
    }

    for(i=0;i<=M+1;i++){ // çerçeve alt kat
    if(i==0){
    printf("%c",200); // sol alt köşe cercevesi
    }else if(i==M+1){
    printf("%c",188); // sag alt köşe cercevesi
    }else{
    printf("%c",205); // çerçeve düz çizgi
    }
    }
    }
    void EkranTazeleme(){ //bu komut ile çerçeveyi ve yılanı
    HANDLE hOut; //her ekran yenilendiğinde aynı yere
    COORD Position; //sabit bir şekilde tekrar getirmiş olduk
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    Position.X = 0; //yerini sabitleme
    Position.Y = 0;
    SetConsoleCursorPosition(hOut,Position);
    }


    void Random(){ //yem için oluşturuldu
    srand(time(0)); //yem her oyunda aynı yerde ve sırayla çıktığı sorunu çözüyor
    a = 1+ rand() % 18; //yemin satırda rasgele posizsonu
    b = 1 + rand() % 38; //yemin sütünda rasgele posizsonu

    if(Yem == 0 && Alan [a]==0){ //tek yem olması için koşul
    Alan [a]= -1; //böylece aynı anda birkaç yem çıkmayacak
    Yem = 1;
    if(Hiz >10 && Puan!=0) Hiz = Hiz - 5; //yılanın hızı
    }
    }

    int getch_noblock(){ //bir tuşa basmadan oyunun başlamasını sağlar
    if(_kbhit())
    return _getch();
    else
    return -1;
    }

    void Hareket(){ //yılanın hareket kodları
    var = getch_noblock();
    var = tolower(var); //büyük küçük harf ayrımı yapmaz

    if(((var=='d'||var=='a')||(var=='w'||var=='s'))
    &&(abs(yon -var)>5)) yon = var;

    if(yon =='d'){ //yilanın d tuşuna basınca sağa hareket etmesi için
    y++;
    if(Alan [x][y]!=0 && Alan [x][y]!=-1) OyunBitti (); //yilan kendini yediğinde oyunu bitirir
    if(y==M-1) y = 0;
    if(Alan [x][y]==-1){
    Yem = 0;
    Puan +=5;
    Kuyruk -= 2;
    }

    Kafa ++; //yilani ilerletme
    Alan [x][y] = Kafa;
    }

    if(yon =='a'){ //yilanın a tuşuna basınca sola hareket etmesi için
    y--;
    if(Alan [x][y]!=0 && Alan [x][y]!=-1) OyunBitti (); //yilan kendini yediğinde oyunu bitirir
    if(y==0) y = M-1;
    if(Alan [x][y]==-1){
    Yem = 0;
    Puan +=5;
    Kuyruk -= 2;
    }
    Kafa ++;
    Alan [x][y] = Kafa;
    }

    if(yon =='w'){ //yilanın w tuşuna basınca ileri hareket etmesi için
    x--;
    if(Alan [x][y]!=0 && Alan [x][y]!=-1) OyunBitti (); //yilan kendini yediğinde oyunu bitirir
    if(x==-1) x = N-1;
    if(Alan [x][y]==-1){
    Yem = 0;
    Puan +=5;
    Kuyruk -= 2;
    }
    Kafa ++;
    Alan [x][y] = Kafa;
    }

    if(yon =='s'){ //yilanın s tuşuna basınca aşağı hareket etmesi için
    x++;
    if(Alan [x][y]!=0 && Alan [x][y]!=-1) OyunBitti(); //yilan kendini yediğinde oyunu bitirir
    if(x==N) x = 0;
    if(Alan [x][y]==-1){
    Yem = 0;
    Puan +=5;
    Kuyruk -= 2;
    }
    Kafa ++;
    Alan [x][y] = Kafa;
    }
    }

    void KuyrukSil(){ //ilerledikçe başı için 1 eklerken kuyruktan 1 çıkarır
    for(i=0;i<N;i++){
    for(j=0;j<M;j++){
    if(Alan [j]== Kuyruk){
    Alan [j] = 0;
    }
    }
    }
    Kuyruk ++;
    }

    void OyunBitti (){ //oyun bitimi
    printf("\a"); //uyarı alarmı
    Sleep(1500);
    system("Cls");

    if(Puan > Rekor){ //yeni yüksek skoru hafızaya yazdırma
    printf(" Yeni Rekor %d!!!!!!\n\n", Puan);
    system("pause");
    f=fopen("Rekor.txt","w");
    fprintf(f,"%d", Puan);
    fclose(f);
    }

    system("Cls");
    printf("\n\n Oyun Bitti !!!!!!\n");
    printf(" Puan : %d \n\n", Puan);
    printf(" Lutfen tekrar oynamak icin ENTER, kapatmak icin ESC ye basin ... \n");


    while(1){ // ESC ile oyunu bitirmek
    var = getch_noblock(); // Enter ile devam ettirmek için
    if(var == 13){
    Oyun = 0;
    yilan();
    break;
    }else if(var == 27){
    Oyun = 1;
    break;
    }
    }
    system("Cls");
    }
    void main(){
    yilan();

    while(Oyun == 0){
    print(); // çerçeveyi ekran her yenilendiğinde sabit gösterir
    EkranTazeleme ();
    Random();
    Hareket ();
    KuyrukSil ();
    Sleep(Hiz);
    }
    }







  • Win32 console fonksiyonlari ile stdio'yu karışık kullanma. Hem printf hem SetConsoleCursor... falan beraber olmaz, ikisinin ortak state'leri buffer'ları vs yok.
    konsolda bu tür işler yapmak istiyorsan curses library kullan, hem yazdığın programın linux'ta derlenme şansı da yüksek olur.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • int Alan[N][M] olarak tanımlı fakat altta Alan[j]=0 var; hata verir.
  • seyfi84 S kullanıcısına yanıt
    Kodu youtube üzerinde ders veren biryerde yazmıştım. Cok hakim olmadığımdan dediginiz degisiklikleri yapamadim. Donem projesi olarak vereceğim ama birsekilde bu sorunu halletmen lazım dedi hoca. Hem yardım almak hemde bu kodu hazir birsekilde donem projelerinde ogrenciler verebilsin diye paylaştım. :)

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Sizce nasıl olması lazim. Yardim edebilirseniz cok mutlu olurum. Ama anladigim kadariyla Alan[j] yilanin ilerlemesinde kullaniliyor. Yilan ölünce yani OyunBitti fonksyonunun calistigi yerde hata var diye düşünüyorum. Şu yılan ya duvardan gecsin yada duvara çarpınca ölsün istiyorumda sag sol duvarlarda birsey olmuyor. Ust alt duvarlarda bazen ölüyor bazen ölmüyor

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: neverlandvalisi

    Kodu youtube üzerinde ders veren biryerde yazmıştım. Cok hakim olmadığımdan dediginiz degisiklikleri yapamadim. Donem projesi olarak vereceğim ama birsekilde bu sorunu halletmen lazım dedi hoca. Hem yardım almak hemde bu kodu hazir birsekilde donem projelerinde ogrenciler verebilsin diye paylaştım. :)
    quote:

    hemde bu kodu hazir birsekilde donem projelerinde ogrenciler verebilsin diye

    Bu mudur sence eğitimin, ödevin amacı? Internetteki hazır cevabı bulup teslim etmek mi? kendin uğraşıp çözmek için beynini zorlamak boş mu?
    yani şaşırmıyorum aslında, eğitim sistemi şark kurnazlığından başka şey göstermediği için sizin de normaliniz bu oldu. Fakat şunu belirteyim: bu hazır cevabı arayıp bulup çözüm diye getirme işini pek yakında yapay zeka ve robotlar yapar hale getirecek, siz de hiçbir işe yaramaz olacaksınız. O nedenle beyninin kurnazlık değil de entellektüel yanını kullanmaya geliştirmeye çalışmanda fayda var.. ya da.. bana ne be

    < Bu ileti mini sürüm kullanılarak atıldı >




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.