/
kart.d
132 lines (112 loc) · 2.78 KB
/
kart.d
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Kart davranışları ve puanları burada tanımlanacak.
module kart;
import std.string;
import std.random;
struct OyunKartı
{
dchar değer;
dchar biçim;
string toString()
{
return format("%s %s",değer,biçim);
}
}
enum kartPuanı
{
yok =0,
tek =1,
çift =2,
üç =3,
}
enum piştiPuanı
{
pişti =10,
valeliPişti =20 }
enum kartDavranışı
{
normal,alır }
enum oynanmış
{
evet,hayır }
struct DesteDeğer
{
kartPuanı puan;
piştiPuanı pişti;
oynanmış oynanmış_mı;
kartDavranışı davranış;
}
OyunKartı[] yeniDeste()
out (sonuç)
{
assert(sonuç.length == 52);
}
body
{
dchar[] biçimler="♠♡♢♣"d.dup;
dchar[] değerler="234567890JQKA"d.dup;
OyunKartı[] kart;
foreach(değer;değerler){
foreach(biçim;biçimler){
kart~=OyunKartı(değer,biçim);
}
}
randomShuffle(kart);
return kart;
}
unittest
{
auto boşKart = OyunKartı();
auto deste = yeniDeste();
foreach (i, kart; deste[0 .. $ - 1]) {
// Bütün kartlar kurulmuş olmalı
assert(kart != boşKart);
foreach (ikinciKart; deste[i + 1 .. $]) {
// Hiçbir kart tekrarlanmamalı
assert(kart != ikinciKart);
}
}
}
/*
* A : 1 puan x 4 = 4 puan
* J : 1 puan x 4 = 4 puan //Alır //pişti 20 puan
* sinek 2'li: 2 puan x 1 = 2 puan
* Karo 10'lu: 3 puan x 1 = 3 puan
*
* */
DesteDeğer[OyunKartı] DesteDeğerTanımla(OyunKartı[] kartlar)
out (sonuç)
{
assert(sonuç.length == kartlar.length);
}
body
{
DesteDeğer[OyunKartı] değerler;
foreach(kart;kartlar){
if(kart.değer=='A'){
değerler[kart]=DesteDeğer(kartPuanı.tek,piştiPuanı.pişti,
oynanmış.hayır,kartDavranışı.normal);
continue;
}if(kart.değer=='J'){
değerler[kart]=DesteDeğer(kartPuanı.tek,piştiPuanı.valeliPişti,
oynanmış.hayır,kartDavranışı.alır);
continue;
}if((kart.değer=='2')&&(kart.biçim=='♣')){
değerler[kart]=DesteDeğer(kartPuanı.çift,piştiPuanı.pişti,
oynanmış.hayır,kartDavranışı.normal);
continue;
}if((kart.değer=='0')&&(kart.biçim=='♢')){
değerler[kart]=DesteDeğer(kartPuanı.üç,piştiPuanı.pişti,
oynanmış.hayır,kartDavranışı.normal);
continue;
}
değerler[kart]=DesteDeğer(kartPuanı.yok,piştiPuanı.pişti,
oynanmış.hayır,kartDavranışı.normal);
}
return değerler;
}
unittest
{
auto değerler = DesteDeğerTanımla(yeniDeste());
assert(OyunKartı('A', '♡') in değerler);
assert(OyunKartı('2', '♣') in değerler);
}