1. Skip to Menu
  2. Skip to Content
  3. Skip to Footer>

Örnek şans oyunu

PDF Yazdır e-Posta

Written by Admin

Posted on 05 Eylül 2010

Son Güncelleme 05 Eylül 2010

ÖRNEK: ŞANS OYUNU

Şans oyunlarından en popüler olanı, gazinolarda ve tüm dünyada sokaklarda oynanan barbut adı verilen bir zar oyunudur. Oyunun kuralları açıktır:

Oyuncu iki zarı aynı anda atar. İki zarında altı yüzü vardır. Bu yüzlerde 1,2,3,4,5 ve 6 adet nokta bulunur. Zarlar durduktan sonra her iki zarında üste gelen yüzleri toplanır. Eğer toplam ilk atışta 7 ya da 11 ise oyuncu kazanır. Eğer toplam ilk atışta 2,3 ya da 12 gelirse (buna barbut denir) oyuncu kaybeder. Eğer ilk atışta toplam 4,5,6,8,9,10 ise bu toplam oyuncunun sayısı haline gelir.Kazanmak için oyuncu sayısını bulana kadar zarları atmaya devam eder.Zarları atmaya devam ederken kendi sayısı yerine 7 atarsa kaybeder.

Şekil 5.10 barbut oyununun gerçeklenmesini ve Şekil 5.11 programın çalıştırılmasından ortaya çıkan sonuçları göstermektedir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/* Şekil. 5.10: fig05_10.c
Barbut */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int zarAtma( void );
 
int main( )
 {
 int oyunDurumu, toplam, oyuncuPuani;
 
 srand( time( NULL ) );
 toplam = zarAtma( ); /* zarın ilk atılışı */
 
   switch( toplam ) {
      case 7: case 11: /* ilk atışta kazanma */
        oyunDurumu = 1;
        break;
      case 2: case 3: case 12: /* ilk atışta kaybetme */
        oyunDurumu = 2;
        break;
      default: /* hatırlatma noktası */
        oyunDurumu = 0;
        oyuncuPuani= toplam;
        printf( "Oyuncunun kazanacağı zar: %d\n", oyuncuPuani );
        break;
    }//switch
 
    while (oyunDurumu == 0 ) { /* zar atmaya devam et */
       toplam= zarAtma( );
 
/* kazanılacak zarı atma */ 
    if ( toplam == oyuncuPuani) 
      oyunDurumu = 1;
    else
      if ( toplam == 7 ) /* 7 atma ile kaybetme */
          oyunDurumu = 2;
    }
 
    if (oyunDurumu == 1 )
        printf( "Oyuncu Kazanır \n" );
    else
        printf( "Oyuncu kaybeder\n" );
 
return 0;
}
 
int zarAtma( void )
 {
 int zar1, zar2, toplamZar;
 
 zar1 = 1 + ( rand( ) % 6 );
 zar2 = 1 + ( rand( ) % 6 );
 toplamZar = zar1 + zar2;
 printf( "Oyuncu %d + %d = %d attı \n", zar1, zar2, toplamZar );
 return toplamZar;
 }

Şekil 5.10 Barbut oyununun gerçeklendiği program

Oyuncu 6 + 5 = 11 attı
Oyuncu Kazanır

Oyuncu 6 + 6 = 12 attı
Oyuncu Kaybeder

Oyuncu 4 + 6 = 10 attı
Oyuncunun kazanacağı zar: 10
Oyuncu 2 + 4 = 6 attı
Oyuncu 6 + 5 = 11 attı
Oyuncu 3 + 3 = 6 attı
Oyuncu 6 + 4 = 10 attı
Oyuncu Kazanır

Oyuncu 1 + 3 = 4 attı
Oyuncunun kazanacağı zar: 4
Oyuncu 1 + 4 = 5 attı
Oyuncu 5 + 4 = 9 attı
Oyuncu 4 + 6 = 10 attı
Oyuncu 6 + 3 = 9 attı
Oyuncu 1 + 2 = 3 attı
Oyuncu 5 + 2 = 7 attı
Oyuncu Kaybeder

Şekil 5.11 Barbut oyunu programının çalıştırılmasına örnekler.

Oyuncunun ilk atışta ve daha sonra gelen atışlarda iki zarı birden atması gerektiğine dikkat ediniz. zarAtma adında bir fonksiyon, zarların atışından gelen toplamı hesaplayıp, yazdırmak için tanımlanmıştır. zarAtma fonksiyonu bir kez tanımlanmış ancak programda iki yerde çağrılmıştır. İlginç olan zarAtma fonksiyonunun argüman almamasıdır. Bu sebepten, fonksiyonun parametre listesinde void kullanılmıştır. zarAtma fonksiyonu iki zarın üstüne gelen sayıların toplamını döndürmektedir ve bu sebepten, fonksiyon başlığında geri dönüş tipi int olarak bildirilmiştir.

Program oldukça kapsamlıdır. Oyuncu ilk atışında kazanabilir ya da kaybedebilir ya da daha sonraki atışlarında kazanabilir ya da kaybedebilir. oyunDurumu değişkeni, bütün bunların kaydını tutmak için kullanılmıştır

Oyun ilk ya da daha sonraki atışlarda kazanıldığında, oyunDurumu değişkeni 1 yapılmıştır. Oyun ilk ya da daha sonraki atışlarda kaybedildiğinde, oyunDurumu değişkeni 2 yapılmıştır. Aksi takdirde, oyunDurumu değişkeni 0 olarak gösterilmiştir ve program devam edecektir.

İlk atıştan sonra eğer oyun biterse, oyundurumu 0'a eşit olmadığı için while yapısı atlanır. Program if/else yapısını çalıştırır ve oyundurumu 1 ise "Oyuncu kazanır" , oyunDurumu 2 ise "Oyuncu kaybeder " yazdırır.

İlk atıştan sonra oyun bitmezse toplam , oyuncuPuani içinde saklanır. oyunDurumu 0 olduğu için program while yapısıyla devam eder. while yapısı her çalıştığında zarAtma fonksiyonu çağrılarak yeni bir toplam oluşturulur. Eğer toplam, oyuncuPuani ile eşleşirse oyunDurumu oyuncunun kazandığını belirtmek için 1 olur, while testi yanlış olacağından while yapısı atlanır, if/else yapısı "Oyuncu kazanır" yazdırır ve programın çalışması sona erer. Eğer toplam 7'ye eşitse oyunDurumu oyuncunun kaybettiğini belirtmek için 2 olur, while testi yanlış olacağından while yapısı atlanır, if/else yapısı "Oyuncu kaybetder" yazdırır ve programın çalışması sona erer.

Programın ilginç kontrol yapısına dikkat ediniz. main ve zarAtma adında iki fonksiyon, switch, while, if/else ve yuvalı if yapılarını kullandık. Alıştırmalarda barbut oyununun ilginç özelliklerini inceleyeceğiz.