![]() |
| |||||||
| Kayıt ol | Forum Kuralları | Bloglar | Yardım | Kullanıcı Listesi | Sosyal Gruplar | Ajanda | Arama | Bugünkü Mesajlar | Konuları Okundu İşaretle |
![]() |
| | LinkBack | Seçenekler | Stil |
| |||
| c de blackjack baslangıc olsun hertürlü sorya yanıt verilir #include<stdio.h> //fonksiyonlar tanimlandi #include<conio.h> #include<stdlib.h> #include<string.h> #include<time.h> const int Kose2_Sol_U=201,Orta2=205,Kose2_Sag_U=187,Dikey2=1 86,Sol_Orta=204,Sag_Orta=185,Kose2_Sol_A=200,Kose2 _Sag_A=188;//Ekrana cizim yaparken kullanilan cift cizgili karakterlerin kodlarin degerlerini iceren sabitler tanimlandi const int Kose1_Sol_U=218,Orta1=196,Kose1_Sag_U=191,Dikey1=1 79,Kose1_Sol_A=192,Kose1_Sag_A=217;//Ekrana cizim yaparken kullanilan tek cizgili karakterlerin kodlarin degerlerini iceren sabitler tanimlandi const int Boy1=41;//Ekranda Kullanilan Alanin boyu const int Kuzey=1,Guney=2;//Kuzey Bilgisayari Guney Oyuncuyu simgeliyor const char Kart_T[4][6]={"KARO ","KALP ","SINEK","MACA "};//Kartin tipinin saklandigi sabit int B_K_[15][2],O_K_[15][2],Deste[4][13],B_K=0,B_K_21=0,B_P=0,O_K=0,O_K_21=0,O_P=0;//Programda bircok fonksiyon tarafindan kullanilacak olan degiskenler genel olarak tanimlandi boylece tasimak zorunda kalmayacaz cerceveleri_ciz() { int i; gotoxy(1,1);//ekranin basina gidildi textcolor(10); cprintf("%c",Kose2_Sol_U);//ekrana Kose2_Sol_U karakterin yaziliyor. for(i=1;i<79;i++) cprintf("%c",Orta2);// ekrana yan yana 78 tane Orta2 karakteri yaziliyor cprintf("%c",Kose2_Sag_U);//ekrana Kose2_Sag_U karakteri yaziliyor cprintf("%c B L A C K J A C K %c%c",Dikey2,Dikey2,Sol_Orta);//ekranin sol ve sag taraflarina Dikey2 karakteri ortayada BLACK JACK yazisi yaziliyor bunlarin yaninada yani bir alt satira Sol_Orta karakteri yaziliyor. for(i=1;i<79;i++) cprintf("%c",Orta2);//ekrana yan yana 78 tane Orta2 karakteri yaziliyor cprintf("%c",Sag_Orta);//ekrana Sag_Orta karakteri yaziliyor for(i=2;i<Boy1;i++) cprintf("%c %c",Dikey2,Dikey2);//ekranin sol ve sag taraflarina serit cekiliyor. cprintf("%c",Kose2_Sol_A);//ekrana Kose2_Sol_A karakteri yaziliyor for(i=1;i<79;i++) cprintf("%c",Orta2);//ekrana 78 tana Orta2 karakteri yaziliyor cprintf("%c",Kose2_Sag_A);//ekrana Kose2_Sag_A karakteri yaziliyor } kagit_ciz(int X,int Y,int Tipi,int Degeri,int Emir)//bu fonksiyon X ve Y bir karti degeriyle birlikte yaziyor { int i,a; textcolor(14);//yazim rengi degisiyor Tipi=Tipi-1;//tipi bir azaltiliyor cunku 1. eleman dizide 0 ile ifade ediliyor gotoxy(X,Y);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c",K ose1_Sol_U,Orta1,Orta1,Orta1,Orta1,Orta1,Orta1,Ort a1,Orta1,Orta1,Orta1,Orta1,Kose1_Sag_U);//kartin ust tarafi ciziliyor for(i=1;i<10;i++) { gotoxy(X,Y+i);cprintf("%c %c",Dikey1,Dikey1);//kartin kenarlari ciziliyor } gotoxy(X,Y+10);cprintf("%c%c%c%c%c%c%c%c%c%c%c%c%c ",Kose1_Sol_A,Orta1,Orta1,Orta1,Orta1,Orta1,Orta1, Orta1,Orta1,Orta1,Orta1,Orta1,Kose1_Sag_A);//kartin alt tarafi ciziliyor if(!Emir) return 0;//Emir degiskeni 0 ise fonksiyon sonlandiriliyor eger Emir 0 ise bu sadece kartin cercevesinin cizilmesi istendigini belirtiyor textcolor(3);//yazim rengi degisiyor gotoxy(X+4,Y+1);cprintf("%s",Kart_T[Tipi]);//kartin tipi kartin ust tarafina yaziliyor for(i=1;i<6;i++) { gotoxy(X+1,Y+i+2); cprintf("%c %c",Kart_T[Tipi][i-1],Kart_T[Tipi][i-1]);//kartin tipi kenarlarina dusey olarak yaziliyor bunun icin karakter karakter yaziliyor } gotoxy(X+4,Y+9);cprintf("%s",Kart_T[Tipi]);//kartin tipi kartin tabanina yaziliyor gotoxy(X+5,Y+5);// cursor kartin ortasina tasiniyor if(Degeri>10)//kartin degeri 10 dan buyukse yani J, K, Q ise bunlart Degeri ne yuklenip ekrana yazilir. { switch(Degeri)//degeri ne ise onun karakter kodu yuklenir. { case 11:Degeri='J';break; case 12:Degeri='Q';break; case 13:Degeri='K';break; } cprintf("%c",Degeri); gotoxy(X+11,Y+1);cprintf("%c",Degeri); gotoxy(X+11,Y+9);cprintf("%c",Degeri); gotoxy(X+1,Y+1);cprintf("%c",Degeri); gotoxy(X+1,Y+9);cprintf("%c",Degeri); } else { a=11; if(Degeri==10) a=10; //eger kartin degeri 10 ise bu 2 karakter oldugu icin sol koselere yazilan 1 er karakter saga kaydiriliyor. if(Degeri==1) cprintf("AS");//eger kartin degeri 1 se kartin ortasina AS yazilir. else cprintf("%d",Degeri);//diger durumlarda degeri yazilir. gotoxy(X+a,Y+1);cprintf("%d",Degeri);//kartin 4 kosesine degeri yazilir. gotoxy(X+a,Y+9);cprintf("%d",Degeri); gotoxy(X+1,Y+1);cprintf("%d",Degeri); gotoxy(X+1,Y+9);cprintf("%d",Degeri); } } sifirla()//bu fonksiyon oyuncunun ve bilgisayarin elindeki kartlarin degerlerini 0 lar. { int i; for(i=0;i<15;i++) { B_K_[0][i]=0; O_K_[0][i]=0; } } kagit_dagit(int Ara[15][2])//bu fonksiyon Ara ile gonderilen diziye 1 tane kagit dagitir. { int k,j,i; for(i=clock()%8;i>0;i--){random(4);random(13);}//random fonksiyonu yapisi geregi genelde ayni sirada degerler gonderir her nekadar rahsal olsada bunlar baslarda birbirinin aynisidir bu yuzden en basta 0 ile 7 arasinda sayi arttirir boylece en basta kullanilan deger degisir buradaki clock() fonksiyonu programin calistirilmasindan o ana kadar gecen sureyi saykil olarak gonderir yani iki farkli calistirmada ayni sayiyi tutturmak imkansiz gibi birseydir. for(i=0;i<15;i++)//bu for dongusuyle Ara dizisindeki kart sayisi ogreniliyor degeri 0 oldugunda orasi bos anlami ve donguyu sonlandiriyor boylece i Ara dizisindeki kayitli eleman sayisi oluyor if(!Ara[i][0]) break; while(1)// bu sonsuz dongu Ara dizisine bir kart eklendimi kiriliyor { k=random(4)+1; //1-4 arasi sayi atiliyor j=random(13)+1;//1-13 arasi sayi atiliyor if(Deste[k-1][j-1]!=0)//eger destede o k tipindeki j degerindeki kart kullanilmamissa degeri 0 dan farkli olur boylece kartlarin hangisinin kullanilip hangisinin kullanilmadigini anlayabiliriz kart kullanilmamissa if in icine girer { Ara[i][0]=k;//Ara dizisine kartin tipi atiliyor Ara[i][1]=j;//Ara dizisine kartin degeri atiliyor Deste[k-1][j-1]=0;// bu kartin kullanildigini belirtmek icin Deste dizisinin bu elemani 0 laniyor break;//while dongusu sonlandiriliyor } } } deste_yap()//bu fonksiyon desteyi olusturmaya yariyor. { int i,j; for(i=0;i<4;i++) for(j=0;j<13;j++) Deste[i][j]=j+1;//destenin elemanlari her grupta sira ile 1-13 arasi sayilar } topla(int Ara[15][2])//gonderilen Ara dizisindeki elemanlari toplaniyor { int As_M,i,toplami; As_M=0;//As_M Ara dizisindeki as sayisini tutuyor toplami=0;//toplami sifirlaniyor for(i=0;i<15;i++)//dongu ile dizide 1 li varmi diye bakiliyor if(Ara[i][1]==1)// 1 li varsa As_M 1 arttiriliyor dizideki kartlari tipleri 1. sutuna dagerleri 2. sutununa degerleri yaziliyor As_M++; for(i=0;i<15;i++) { if(Ara[i][1]>=10) toplami=toplami+10;//10 ve daha buyuk kodlu sayilarin degeri 10 kabul ediliyor else toplami=toplami+Ara[i][1];//digerlerinin kendi degerleri kullaniliyor } if(((toplami+10)<=21)&&(As_M>0)) toplami=toplami+10;//burada kagitlarin toplami hesaplanirken mumkunse As lar 11 olarak aliniyor +10 dememizin sebebi 1 li olan degerini zaten yukarida almistik 1 defa sormamizin sebebi 1 taneden fazla as olsa bile bunlar 11 olarak kullanilamaz return toplami;//toplam degeri geri donduruluyor } eli_ciz(int Kim,int Ara[15][2],int Istek)//bu fonksiyon Ara ile gonderilen dizinin degerlerinin kim olduguna gore asagi yada yukari ciziyor Istek ise degeri 1 ise degiri ile birlikte 0 ise degerlerinden 1 tanesin sadece cevresi ciziliyor ki zaten 0 olmasi bilgisayin elindeki 2 karttan 1 i ekrana basilmasi demektir ki baska sekilde 0 gondermez { int X,Y,i,m; if(Kim==Kuzey) Y=5;//eger kim = kuzey ise bu ust tarafa cizilmesi icin Y=5 yapiliyor else Y=20;// aksi halda Y=20 yapilyor for(i=0;i<15;i++)//dizideki eleman sayisi bulunuyor ve i ye ataniyor if(!Ara[i][0]) break; X=34-(i/2)*4;// kart mikterina gore hepsini merkezi 34 te toplamak icin X noktasin 34 dortten kart miktarina gore geri cekiyor textcolor(8);//yazim rengi degisiyor if(!Istek)//Istek eger 0 sa bu if in icine giriyor bu durumda ekrana toplam yazilmak istenmedigi icin '?' yaziliyor { gotoxy(38,Y+11);cprintf("?"); } else//eger Istek 1 se bu ekrana kagitlarin basilmasi isteniyor demektir bu durumda toplam degeri de gosterilimesi else nin ici bu isi yapiyor { gotoxy(38,Y+11);cprintf("%d",topla(Ara)); } for(m=0;m<i;m++) { kagit_ciz(X+m*4,Y,Ara[m][0],Ara[m][1],Istek);//kagit ciziliyor istek icinin gosterilip gosterilmemesini bildiriyor sadece bilgisayara verilen ilk iki kagit icin gecerli olacaktir fakat bu durumdada kagitlarin birisi gosterileceginden Istek 2. kez gonderileceginde 1 yapiliyor cunku ikinci kagidin ekranda gorulmesi isteniyor Istek=1; } } cizelge_ciz()//bu fonksiyon ekrana puani herbirisinin kazandigi oyun miktarini hangi tusun ne ise yaradigini gosteriyor { int i; textcolor(2);//yazim rengi degisiyor gotoxy(2,32);//cursor tasiniyor for(i=0;i<78;i++) cprintf("%c",Orta1);//78 tane Orta1 karakteri yanyana yaziliyor gotoxy(2,38); for(i=0;i<78;i++) cprintf("%c",Orta1);//78 tane Orta1 karakteri yanyana yaziliyor textcolor(8);//yazim rengi degisiyor gotoxy(2,34);cprintf("Bilgisayar %d -%d i 21 yaparak- tane oyun kazandi puani %d dir.",B_K,B_K_21,B_P); gotoxy(2,36);cprintf("Oyuncu %d -%d i 21 yaparak- tane oyun kazandi puani %d dir.",O_K,O_K_21,O_P); gotoxy(2,40);cprintf("Tuslar: Bosluk kart ister -HIT- , Enter Eli Acar -STAND- , ESC Cikar."); } sonuc(int kimkazandi,int Kacla)//puanlari kimin kazandina gore yonetip ekrana yazilyor { textcolor(8);//yazim rengi degisiyor gotoxy(2,40);//cursor tasiniyor switch(kimkazandi) { case -1://Oyuncu kazandi demek cprintf("Sonuc : Tebrikler Siz Kazandiniz... "); if(Kacla==21)//eger 21 le kazanilmizsa O_K_21 1 arttiriliyor O_K_21++; O_K++; O_P=O_P+Kacla;//puani actigi sayi kadar arttiriliyor break; case 0://berabere demek cprintf("Sonuc : Berabere Ikinizide Kazandi Farzediyorum.Ama Puan Yok.. "); O_K++; B_K++; break; case 1: cprintf("Sonuc : Uzgunuz -Yalan- Kaybettiniz... "); if(Kacla==21)//eger 21 le kazanilmizsa B_K_21 1 arttiriliyor B_K_21++; B_K++; B_P=B_P+Kacla;//puani actigi sayi kadar arttiriliyor break; } getch();//ekranda gorulmesi icin kullanicinin tusa basmasi bekleniyor } oyuna_basla()//fonksiyon oyunu yonetiyor { char istek; if(topla(O_K_)==21)//eger oyuncunun kartlari toplami 21 se oyunu bitirmek icin giriyor { if(topla(B_K_)==21) sonuc(0,21);//eger bilgisayarin kartlarinin toplami da 21 se oyunu esit diye bitiriyor else sonuc(-1,21);//aksi halde oyuncu kazandi diyor return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } if(topla(B_K_)==21)//bilgisayarin kartlarin toplami 21 se bilgisayar kazandi diyor oyunu bitiriyor { sonuc(1,21); return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } do{ istek=getch();//kullanicinin ne yapmak istedigini anlamak icin kullanicinin bastigi tusun kodunu istege atiyor if(istek==' ')//istek=' ' basmissa kullanici kagit istiyor anliyor { kagit_dagit(O_K_);//kullaniciya kagit veriyor eli_ciz(Guney,O_K_,1);//kullanicinin elindeki kagitlar ciziliyor if(topla(O_K_)==21)//toplami 21 olmussa oyunu sonlandirmak icin giriyor { sonuc(-1,21);//oyuncu kazandi diyor return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } else if(topla(O_K_)>21)//kullanicinin elindeki kartlarin toplami 21 asmissa oyunu sonlandirmak icin giriyor { sonuc(1,topla(B_K_));//bilgisayar kazandi diyor return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } } }while((istek!=13)&&(istek!=27));//kullanici 13-Enter- yada 27-ESC- kodlu tuslara basincaya kadar do-while dongusunden cikmiyor if(istek==13)//do-while dongusunden cikma sebebi inceleniyor eger entere basmissa eli acmak icin if in icine giriyor { while(1)//bu break komutu ile karsilasincaya kadar dongude kal demek { if(topla(B_K_)<=17)//bilgisayarin elindeki kagitlarin toplami 17 den kucuk oldugu surece kart istiyor kagit_dagit(B_K_);//bilgisayara kart veriliyor else if(topla(B_K_)>21)//bilgisayarin elindeki kartlarin toplami 21 i asmissa oyunu sonlandirmak icin giriyor { eli_ciz(Kuzey,B_K_,1); //bilgisayarin elindeki kagitlari ekrana ciziyor textcolor(8);gotoxy(38,16);cprintf("%d",topla(B_K_ ));//yazi rengi degistiriliyor ve ekranan bilgisayarin elindeki kagitlarin toplami yaziliyor sonuc(-1,topla(O_K_));//oyuncunun kazandigini soyluyor return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } else//buraya kadar gelmisse bu oyuncununda bilgisayarinda elindeki kartlarin toplami 21 den asagida demek { eli_ciz(Kuzey,B_K_,1);//bilgisayarin elindeki kartlar ekrana yaziliyor textcolor(8);gotoxy(38,16);cprintf("%d",topla(B_K_ ));//ekrana bilgisayarin elindeki kartlarin toplami yaziliyor if(topla(B_K_)>topla(O_K_))//eger bilgisayarin elindeki kartlarin toplami oyuncununkinden fazla ise bilgisayar kazandi demek icin giriyor { sonuc(1,topla(B_K_));//bilgisayar kazandi diyor return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } else if(topla(B_K_)<topla(O_K_))//eger bilgisayarin elindeki kartlarin toplami oyuncununkinden az ise oyuncu kazandi demek icin giriyor { sonuc(-1,topla(O_K_));//oyuncu kazandi diyor return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } else { sonuc(0,21);//buraya kadar geldigine goreikiside esit demek return 1;//oyuna devam sayisini gonderiyor ve fonksiyondan cikiyor } } } } else//eger kullanici enter basmamissa bu esc ye basmis demektir ki buda oyunu bitirir return 0;//oyuna bitirme sayisini gonderiyor ve fonksiyondan cikiyor } main() { _setcursortype(_NOCURSOR);//cursor gorunmez hale getiriliyor do{ clrscr();//ekran siliniyor sifirla();//bilgisayarin ve kullanicinin elindeki kagitlari sifirliyor cerceveleri_ciz();//cerceveleri ciziyor deste_yap();//deste her elde yenide olusturuluyor-sifirlaniyor kagit_dagit(B_K_);//bilgisayara 1 tane kagit veriliyor kagit_dagit(B_K_);//bilgisayara 1 tane kagit veriliyor kagit_dagit(O_K_);//oyuncuya 1 tane kagit veriliyor kagit_dagit(O_K_);//oyuncuya 1 tane kagit veriliyor eli_ciz(Kuzey,B_K_,0);//bilgisayarin elindeki kagitlar ciziliyor fakat 1 ini gizlemek icin 0 gonderiliyor eli_ciz(Guney,O_K_,1);//oyuncunun elindeki kagitlar ciziliyor hepsinin cizilmesi icin 1 gonderiliyor cizelge_ciz();//sayfanin alt kismi ciziliyor }while(oyuna_basla());//oyuna basla fonksiyonu sifir gonderene kadar donguden cikmiyor } msdosta sectigin kagıtlar dahi görünmektedir alın calıstırın elektronik engineering all right reserved by barış sensizim tarafından (23.11.06 Saat 12:13) değiştirildi. Sebep: Smililer gösterilmİş düzeltildi |
![]() |
|
| Konuyu Toplam 1 Kullanıcı okuyor. (0 Kayıtlı kullanıcı ve 1 Misafir) | |
| Seçenekler | |
| Stil | |
| |
| | ||||
| Konu | Konuyu Başlatan | Forum | Cevaplar | Son Mesaj |
| Atatürk'ün sözleriyle yanıt! | Karizma_Aykut | FB - Fenerbahçe | 0 | 01.11.06 16:00 |
| Acemi Çapkına Ancak Böyle Yanıt Verilir...Buyrun...;) | apocalypse_ | Geyik Muhabbet Ve Komedi | 12 | 18.09.06 17:34 |
| Gerets'den esprili yanıt! | akyol | GS - Galatasaray | 1 | 15.09.06 10:26 |
| Ogame Baslangıc Bilgileri | TroubleD | Multiplayer Oyunları | 0 | 26.08.06 12:15 |