/
bot.c
108 lines (102 loc) · 2.02 KB
/
bot.c
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
/*
----------------------------------------------------------------------
File : bot.c
Deskripsi : Algoritma Bot
Dibuat oleh : -Ali Qornan Jaisyurrahman 151511007
-Muhammad Hamzhya Salsatinnov Hairy 151511017
-Riyan Gandarma 151511028
Tanggal dibuat : 09 Mei 2016
----------------------------------------------------------------------
*/
#include "lib.h"
void botmove(){
addressCard C = whichcardtake();
if(C != NULL){
doTake(Card(C));
doMeld(Card(C));
}else{
doDraw();
}
botmeld();
infoCard off = whichcardoff();
doOff(off);
}
addressCard whichcardtake(){
int i = 1;
int biggest = 0;
addressCard T = First(card_on_off);
addressCard B = NULL;
while(T != NULL && i<=7){
ClearListCard(&temp_card);
addressCard C = First(Hand(player_who_play));
while(C != NULL){
AddCard(&temp_card,Card(C));
C = Next(C);
}
if(trees(temp_card,Card(T))>2){
addressCard O = First(card_on_off);
while(O != NULL){
AddCard(&temp_card,Card(O));
if((SameCard(Card(O),Card(T))==1)){
break;
}
O = Next(O);
}
}
if(B == NULL){
B = T;
biggest = trees(temp_card,Card(T));
}else{
if(biggest<trees(temp_card,Card(T))){
B = T;
biggest = trees(temp_card,Card(T));
}
}
T = Next(T);
i++;
}
if(biggest<3){
B = NULL;
}
return B;
}
void botmeld(){
sortcard(&Hand(player_who_play),1);
addressCard T = First(Hand(player_who_play));
addressCard X = NULL;
while(T != NULL){
int t = trees(Hand(player_who_play),Card(T));
int i = 1;
if(t>2){
while(i <= t){
X = T;
T = Next(T);
doMeld(Card(X));
i++;
}
}else{
T = Next(T);
}
}
}
infoCard whichcardoff(){
addressCard O = First(Hand(player_who_play));
addressCard R = O;
int tree = trees(Hand(player_who_play),Card(O));
int poin = point(Card(O));
while(O != NULL){
int t = trees(Hand(player_who_play),Card(O));
int p = point(Card(O));
if(t<tree){
R = O;
tree = t;
poin = p;
}else
if(t==tree && p>poin){
R = O;
poin = p;
}
O = Next(O);
}
return Card(R);
}