Payidar.NET - Bilgi ve Paylaşım Forumu
Geri Git   Payidar.NET - Bilgi ve Paylaşım Forumu > Bilgisayar, Elektronik ve Network > Programlama Dilleri > C/C++


Cevapla
 
LinkBack Seçenekler Stil
  #1 (permalink)  
Eski 23.11.06, 10:26
Yeni Üye
 
Giriş tarihi: 04.09.06
Yaş: 23
Mesajlar: 7
Karizma Puanı: 0
DarkMagesty is on a distinguished road
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
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Alıntı ile Cevapla
  #2 (permalink)  
Eski 26.11.06, 01:08
Yeni Üye
 
Giriş tarihi: 25.11.06
Yaş: 24
Mesajlar: 2
Karizma Puanı: 0
Black.Flame is on a distinguished road
Ce: c de blackjack baslangıc olsun hertürlü sorya yanıt verilir

eline sağlık birader, bayaa uzunmuş ben bu kadar şey yazamam ya bıkarım sen nasıl bıkmadın bunu yazarken
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Alıntı ile Cevapla
Cevapla

  Payidar.NET - Bilgi ve Paylaşım Forumu > Bilgisayar, Elektronik ve Network > Programlama Dilleri > C/C++


Konuyu Toplam 1 Kullanıcı okuyor. (0 Kayıtlı kullanıcı ve 1 Misafir)
 
Seçenekler
Stil

Yetkileriniz
Yeni konular gönderemezsiniz
Mesajlara cevap yazamazsınız
Mesajınıza eklentiler ekleyemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB Kodu açık
[IMG] Kodu açık
HTML-Kodu kapalı
Trackbacks are açık
Pingbacks are açık
Refbacks are açık


Benzer Konular
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


Tüm Zamanlar GMT +2 Olarak Ayarlı. Şuanki Zaman: 23:21.


Powered by vBulletin® Version 3.8.2
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0