──────────────
BÀI TẬP LỚN
ĐỀ TÀI : GAME C VUA
!"# $%&'(%)*+%&,-.&/01%2
3 %&# $%4&56& 7%
&89%&:6 ;<=<=>;=
)?-@%A?-.&'B%) ;<=<;<<=
C,%3D/4 ;<=<=EFG
H$/ !4 ;<=<==G=
I"1%&J%) ;<=<=FK>
"I%/ )&LJ ;<=<=KE;
&M0=;
IN O4&!%)P%10;<=E
MỤC LỤC
!"#
$%!&'()*!'(!+",)-.
/0*0!+",)-1
23!4 5)-672-5)8!+",)-9,2,:;<=>,1
?8'@;A!;A#1
!?8'@45B
CDE09!!9F'G,(55C
/ H7*07
I
J45K?A!LM
!9F'G,(55C),D)-!'(N
O7'P)P
04+Q!
04+Q!.
04+Q!1
.'(9!RE<!+",)-S
T04
UO
/VW/OJTOXY
I. LỜI MỞ ĐẦU
)I-%J-#( %Q%6R%)%)&74&R%)4 %SJ%)%)I-6I%)T&!44C U%0/%&0V#( W5
T&!44C U%X&"J&Y66R%)%)&7ZC"%)4&[ X\&N %&]T%)I%&6R%)%)&74&R%)4 %
SM%)#J 4C^_?J%4CY%)X&R%)4&U4& `?Sa #( W5T&!44C U%X %&4`6bJSc4%'(6ZI
0N4T&,%_?J%4CY%)dI# 76!T*e%)4Cf4?7%&g%4/"#I"%Q%45SN%)&MJ#I4'*?-
6J"%&'& 7%%J-%&'C"h"44&R%)0 %&O%)I%&6R%)%)& 7T45SN%)&MJ#IS[ Wa%)Z
$%6/%&SM'%)*e%)T&!44C U%)J0idI0N44C"%)%&'%)%)I%&!T*e%)T&jh `%
6!64&I%&45?4C"%)4Cf4?7%&g%4/"Z]-4Cf4?7%&g%4/"dI)9k
&?]4%)84Cf4?7%&g%4/"lC4 m 6Jd%4iddi)i%6inS'o6p"%&iJC4&d-S'JCJ4C"%)
&N 4&2"qAJC4&"?4&#I"0rJ&s%10=KGFZt6MCc4%& Q?Su%&%)&LJX&!6%&J?#Q
4Cf4?7%&g%4/"Z( 4Cf4?7%&g%4/"O0!-4f%&6M4&U) vT6"%%)'[ ) 2 _?-`4
%&8%)hI 4"!%0N46!6&4&R%)0 %&%&c4Z)I-%J-O4Cf4?7%&g%4/"St#ISJ%)&w
4Co%& Q?4C"%)6!6:%)*e%)&I%)%)I-dI06&"0!-0M6h `4W?-%)&L&J-) 2 _?-`4
#c%SQ4&J-6&"6"%%)'[ Oh `4) J"4 `Thx%)%)R%%)8#I4 `%)%M yyJWV490
& U?0N4WaT&'B%)T&!T) 2 _?-`4#c%SQ6Bh2%Ze4&UdI6I Sz44C^6&B 6[#?J
W{*e%)0N4Wa4&?]44"!%S'o6) ( 4& 7?4C"%)0R%&Y6Z
&v%)i0| %620B%4&,-.&/01%2 O4&R%)_?JhI ) 2%)6bJ4&,-6&v%)
i06M4&U&"I%4& 7%4a4&B%6&'B%)4C9%&6bJ09%&
&M0W %&# $%
&89%&:6
)?-@%A?-.&'B%)
C,%3D/4
H$/ !4
I"1%&J%)
"I%/ )&LJ
II. NỘI DUNG
1. Giới thiệu bài toán
[#?J4$%4 `%)J%&dIl&iWWnZ[#?JdI0N44C^6&B 6M6& `%d'o6#IdI0N44C^
6&B 4Cf4?7T&jh `%%&c4& 7%%J-*"SM6M4&U%M SMdI0N44C^6&B Cc4T&:64/T
%)'[ 6&B X&R%)4&US"!%S'o6&`4%'(6S %MdI0N46"%WaCc4d(%Z
a. Luật chơi :
N4hI%6[)}0F>R4C$%SMWV)}0=F_?g%Si%#I=F_?g%4C~%)S'o6Wq&8?
hq ;%)'[ 6&B
!6_?g%6[6M%'(6S X&!6%&J?
- •i•iS &J-1%_?g%4&i"S'[%)%)J%)&J-6N4*Y6O%M6M4&US 4€S,?hI%
6[S`%&`4hI%6[X&R%)) ( &/%h'(6S #( S Q?X 7%X&R%)hu62%
- t S`%S•%&Sa 6bJ6&8%&]4;E4C$%hI%6[
- 'o%)'o%)4C~%)6&•S S'o66!6R0I?4C~%)#I4'o%)Si%4&9%)'o6d/ Z
4'o%)S 4&i"S'[%)6&‚"#IX&R%)) M &/%%'(6S #( S Q?X 7%X&R%)hu62%Z
- ]?dI_?g%6[d %&&"/4%&c44C$%hI%6[%M6M4&UdIW5X`4&oT6bJ=_?g%
|i#I;_?g%4'o%)6M4&US %)J%)*Y6&J-S'[%)6&‚"
- ?JMdI_?g%_?J%4CY%)%&c4%`?0c4%M6" %&'h/%St4&?JZ%M6M4&US
4&i"%)J%)*Y6O6&‚"%&'%))f&/%0N4%'(6S 0J4&R
- a4S 4&ƒ%)4€%)h'(60N4ZC $%)%'(6S S,?4 $%6M4&US ;%'(6#I1%
6&‚"Z
b. Yêu cầu đặt ra khi cài đặt chương trình
- R42S'o6d?]46&B 4&R%)*e%)4C"%)6[#?J
- 'J4Cf4&R%)0 %&#I"6&'B%)4C9%&q0:66J"%&c46M4&U
- a '?&MJ6&'B%)4C9%&OS!T:%)S'o6# 76) ( &/%#Q0z44&[ ) J%4C"%)X&
6&B l&R%)SU%)'[ 6&B T&2 So _?!dg?nZ
- J"* 7%6&'B%)4C9%&q0:6S!T:%)S'o6-$?6,?hI 4"!%l&R%)_?!6&v
4CY%)O4C€X& 6MSb4&[ ) J%nZ
.
2. Thiết kế chương trình
a. Mô thức lập trình , mô hình phát triển chương trình và ngôn ngữ sử dụng
- Mô thức lập trình áp dụng :
.dI0R4&:6d]T4C9%&S'o66&v%)i0|g-*5%)6&'B%)4C9%&Z.&J-6^%
h `4S`%dI0R4&:6d]T4C9%&&'(%)Sa 4'o%)Z&!6#( d]T4C9%&6c?4Cv64C"%)
Z.0qCN%)4&$00N4WaX&! % 70%&'Sa 4'o%)Od(TOSM%))M OX`
4&€JOSJ&9%&ZZZI4&U& 7%0N4Wa'?S U0%j h]4%&'4f%&4C€?4'o%)O4f%&
SM%))M O4f%&SJ&9%&O4f%&X`4&€JZ
- Mô hình phát triển chương trình :
r%)#( 0R4&:6.ZdI0R&9%&d]T4C9%&S'o66&v%)i0*r%)4C"%)
4& `4X`6&'B%)4C9%&ZS'o6|i0%&'T&'B%)T&!T4& `4X`4&I%&6R%)
4C"%)T&'B%)T&!T4& `4X`&'(%)Sa 4'o%)
# `44~46bJ"*id„ i…„"%4C"d dIT&'B%)T&!T4& `4X`6& J%&†:%)
*e%)4&I%&ET&,%"*id‡"%4C"d‡ i…4C"%)SMO"*idT&,%0R&9%&hJ"
)}0Sa 4'o%)&J-4]T&oT6!6Sa 4'o%)h U?* @%*8d 7?6&"6&'B%)4C9%&Z
"%4C"dS'o6)Y %&'T&,%|{dˆOS Q?X& U%4"I%hNd") 6O&"/4SN%)) J"* 7%
4'B%)4!6#( 4&J"4!66bJ%)'[ *r%)OS}%)4&[ 6]T%&]4*8d 7?4&i"S,?#I"
%&]%S'o6#IS Q?X& U%4&f6&&oT4&i"-$?6,?6bJ%)'[ *r%)Z i…S'o66"
dIT&,%) J"* 7%%)'[ *r%))}0S'J*8d 7?CJ0I%&9%&O6?%)6cT) J"* 7%
6&"%)'[ *r%)4&J"4!6#( 6&'B%)4C9%&Z
- Ngôn ngữ javadI%)R%S'o66&v%)i0W{*e%)4C"%)6&'B%)4C9%&ZpJ#JdI
0N4%)R%%)8d]T4C9%&&'(%)Sa 4'o%)Z( pJ#J6M'?S U0Cc40/%&SMdI
4f%&SJ%Q%S Q?SM6M%)&LJ0N46&'B%)4C9%&# `4hx%)%)R%%)8pJ#J6M4&U
6&/-4C$%hc4X\&74&a%)%I"X& StS'o66I 0!-2"‰J#JZpJ#JS'o6|i0
%)R%%)86&"4'B%)dJ #( 0N4Wa4f%&%1%)%j h]46bJ%M%&'&R%)*u6&O
SJ%Q%O&'(%)Sa 4'o%)OSJ%& 70SJd?}%)yZ
b. Biểu đồ usecase :
1
Šz642?Wi6JWi
- &Y%i…J0i6&"T&‚T%)'[ 6&B S'JhI%6[#Q4C/%)4&! S,?6bJhI%
6[#Ih~4S,?0I%6&B 0( Z
- &B J0i?Wi6JWi%I-dI0N4d"/46!6&I%&SN%)6bJ%)'[ 6&B S Q?X& U%
_?g%6[4&?N6#Q&YZ
- &Y%Hi#id6&"T&‚T%)'[ 6&B 6&Y%di#idX& 6&B )J0iZ
- &"!4J0i6&"T&‚T%)'[ 6&B 4&"!46&'B%)4C9%&
c. Biểu đồ lớp
&'B%)4C9%&)}06!6TJ6XJ)i%&'WJ?
B
.J6XJ)iJ %6&:J&I06&f%&4&56& 7%6&'B%)4C9%&Z
- &:J6!6d(T4&56& 7%6!64&?]44"!%#I|{dˆ&I0Su%&4Cu6e4&U
o ‹#Jd?J4 "%6dJWW6&:J0N4Wa&I0S!%&) !4&i"6!66& `%d'o6X`4_?2
4C2#QdI) !4CuhI%6[:%)#( 4€%)6& `%d'o6X&!6%&J?WV6M) !4Cu
X&!6%&J?Z
o "0dT&Ji4J6dJWW6&:J6!6&I00 %3iJC6&#I0J|3iJC6&4&56& $%
4&?]44"!%#I%i|464 "%WVd5J6&Y%4C/%)4&! 4 `T4&i"6&"hI%6[Z
Z
.J6XJ)i# i…
&:J4"I%hNT&,%|{dˆ) J"* 7%O|{dˆW5X 7%6bJ%)'[ *r%)4'B%)4!64(
6&'B%)4C9%&
S
.J6XJ)iTC"6iWW
&:J4"I%hNT&,%|{dˆ6bJ6!6Sa 4'o%)4C"%)0"*id
- .C"6iWW|{dˆ6&"Sa 4'o%)h"JC*
- C"6iWW|{dˆ6&"Sa 4'o%)T i6i
- TC"6iWW|{dˆ6&"Sa 4'o%)""C*
N
.J6XJ)i0"*id6&:J4"I%hN6c?4Cv6*8d 7?6&"4C^6&B
c?4Cv6hI%6[S'o64& `4X`)}0
- H(T0"*idZh"JC*&:J6!64&?N64f%&OT&'B%)4&:6h U?* @%6bJhI%6[
I%6[l"JC*nC$%hI%6[4JSu%&%)&LJ02%);6& Q?6!63d"4Z
- d(T0"*idZ3d"46&"h `4#u4Cf6bJ6!6_?g%6[4C$%hI%6[*5J#I"4YJSN6bJ
_?g%6[SM4C$%hI%6[Z
- H(T0"*idZ""C*6&"4Jh `44YJSN6bJ0N4_?g%6[4&i"SM4YJSN6bJ0N4
_?g%6[WV6M*/%)l|O-n#( <Œ•|Œ•Ž#I<Œ•-Œ•ŽZ
- )"I CJ O 4C$% hI% 6[ 4J Su%& %)&LJ 4&$0 N4 h2%) 6!6 4 4&?N6 d(T
0"*idZJhdih2%)%I-6M#J 4C^6&:J6!6#u4Cf0I_?g%C~%)6M4&U1%4(
S'o6S Q?SM4'B%)S'B%)#( 4/ 0N4#u4CfO%`? 4•mJdWi4'B%)S'B%)#(
_?g%C~%)X&R%)4&U1%4( S'o6O%)'o6d/ _?g%4C~%)6M4&U1%4( S'o6Z
- H(T0"*idZ. i6i6&"h `44&?N64f%&6bJ4€%)_?g%6[Z&i"SM0N4_?g%6[
WV6M6!64&?N64f%&#u4Cf6bJ%M4C$%hI%6[O0I?_?g%6[*r%)SUT&g%h 74
6[6bJ;h$%OX U?_?g%6[T&g%h 744€%)_?g%6[#IStS'o6Su%&%&'WJ?
publicstaticfinalint
•<•
publicstaticfinalint
•‹‹
•=•
publicstaticfinalint
3.
•;•
publicstaticfinalint
•E•
publicstaticfinalint
•>•
publicstaticfinalint
.‘
•G•
- d(T0"*idZ"%W46&"h `4) !4Cu6bJ_?g%6[SM4C$%hI%6[)}06!64C'[%)
%&') !4Cu_?g%6[OX U?_?g%6[O) !4Cu0c46bJ4€%)_?g%yZZWVS'o6W{
*e%)SU4f%&4j%)) !4CuhI%6[4C"%)&I0Su%&4Cu6&"hI%6[Z
[
3. Giải quyết bài toán và các vấn đề gặp phải
a. Thuật toán tìm kiếm
i. MiniMax
“Minimaxl6^%)Y dIminmaxndI0N4T&'B%)T&!T4C"%)dˆ4&?-`4_?-`4Su%&6M0e6
Sf6&dI4a 4& U?&MJl0 % 0 ’in4j%4&c4#a%S'o6*54f%&6M4&UdI“4a SJ“l0J| 0 ’inZM4&U
& U?%)'o6d/ dIO%M%&x04a SJ&MJdo f6&#a%S'o6*54f%&dI4a 4& U?lmaximinnZMh~4
%)?}%4€4C^6&B 6M4j%)hx%)X&R%)ZM6”%)S'o60qCN%)6&"%& Q?4C^6&B T&:64/T&B%
#I) vTS'JCJ6!6_?-`4Su%&6&?%)X& 6MW5& 7%* 7%6bJW5X&R%)6&~66&~%Z”
(Theo wikipedia)
&?]44"!%S'o6!T*e%)4C"%)6!64C^6&B Sa X&!%)OX& 0I6!64&?]44"!%490
X `0%&'X&R%)4&U) 2 _?-`4S'o6Z&?]44"!%%I-6&"T&‚T0!-4f%&l&"z6XU
626"%%)'[ n6&Y%S'o6%'(6S 4a4%&c46M4&U4C"%)%&8%)49%&&?a%)4} %&c46M
4&U*"Sa T&'B%))g-CJO6&"T&‚T%&9%4C'(6S'o6%'(6S 4a4lSz6h 744C"%)4C'[%)
&oT62;6r%)6&Y%%&8%)%'(6S 4a '?nZ
76Su%&) !SN4a4&J-4} 6bJ0N44&`6[WV*5J4C$%&I0Su%&d'o%)4C/%)
4&! 0N4hI%6[l#c%SQ%I-WV%x0qT&,%WJ?nZ&'#]-6&c4d'o%)6bJ4&?]44"!%
4C"%)# 76490CJ%'(6S X`4 `TWVT&e4&?N64C564 `T#I"&I0Su%&d'o%)Z
N4# *e6&"# 76490X `0 % 0J|
Đặc điểm của tìm kiếm MiniMax :
- f%&&"I%6&•%&6Ml%`?6g-h U?* @%4C^6&B &8?&/%n
- f%&4a '?6MOS Q?%I-|2-CJX& ;Sa 4&bS!%&#( %&J?SQ?S 6!6%'(64a
'?%&c4Z
- NT&:64/T#Q4&[ ) J%lh
0
n
o h&7WaT&g%%&!%&
o 0SNWg?6g-490X `0
- NT&:64/T#QhN%&(lh0n
ii. Alpha-Beta cắt tỉa
c%SQ|2-CJ4C"%)490X `06bJ % J|dIWV*?-74_?J4c4626!6%v4#Id!
4C"%)0N46g-O%&'#]-4C"%)%&8%)hI 4"!%490X `04C"%)X&R%)) J%656d(%X& SN
T&g%%&!%&6J"#IqSNWg?d(%O# 76490X `0hx%) % J|dIX&R%)X&24& *"_?!
4a%4&[ ) J%490X `0Z
C$%4&564`O%& Q?%v4X&R%)6,%*?-74_?J0I#+%X&R%)2%&&'q%)S`%X`4
_?2490X `0Z.&'B%)T&!T490X `0dT&J„i4J6~44•J62 4& 7%S'o6S Q?SMZ
•4'q%)6bJ490X `0dT&J„i4J6~44•J
- &566&c4Sg-6&•dI0N462 4 `%6bJ % J|
- / 0w 0N4%v4WV6M;) !4CudT&J#Ji4J
o dT&Jd'?d/ l6]T%&]4d/ n) !4Cud(%%&c46bJ%v46!66"%6bJ%M4C"%)
4C'[%)&oT490X `00J|
o i4Jd'?d/ l6]T%&]4d/ n) !4Cuh‚%&c46bJ6!6%v46"%6bJ%M4C"%)
4C'[%)&oT490X `00 %
- / 0w h'(6490X `0WV4C?-Q%tham trịdT&J#Ii4J4( 6!6%v4490X `0
6"%
- ( 0w %&!%&490X `0X&R%)4&U62 4& 7%Sa #( ) !4CuSt6M4&9X&R%)6,%
|‚44( %&!%&490X `0SM%8J
- 76d"/ h†0N4%&!%&490X `04} WVX&R%)2%&&'q%)4( X`4_?26?a 6r%)
6bJ# 76490X `0
e4&U
- & 490X `0|?a%)%v46"%T&fJh$%T&2 O%v46"%h$%
T&2 4 `T|?a%)4 `TT&fJ*'( O%v4SM6M) !4Cu0
- `?0Œ•dT&J4&9%)J-d]T4:64J6M4&Ud"/ h†%&!%&
h$%6/%&hq *r6MS 4 `T4&9%v46&:J%&!%&0WV6&~6
6&~%X&R%)S'o66&Y%
&?]44"!%
- Hàm nextActionC2#Qtrạng tháiWV4&56& 7%qh'(6X`4 `Tl6"0S 0J|
n
o %T?44C/%)4&! hI%6[
o ?4T?44C/%)4&! X`4 `T6,%S`%
.
1
- I0maxSearch 4C2#Qgiá trịd(%%&c4lX&R%)T&2 4C"%)4c4626!64C'[%)
&oTn6bJ6!6%v46"%
o %T?44C/%)4&! hI%6[OdT&JOi4J
o ?4T?4|2-CJ;4C'[%)&oT
!4Cud(%%&g46bJ6!6%v46"%4C"%)4C'[%)&oT0J|Œhi4J
B
N4) !4Cu–•i4J
Z
- I0minSearch4C2#Qgiá trị%&†%&c4lX&R%)T&2 4C"%)4c4626!64C'[%)
&oTn6bJ6!6%v46"%
o %T?44C/%)4&! hI%6[OdT&JOi4J
o ?4T?4|2-CJ;4C'[%)&oT
!4Cud(%%&g46bJ6!6%v46"%4C"%)4C'[%)&oT0J|Œhi4J
N4) !4CuΥdT&J
S
iii. Các vấn đề gặp phải trong quá trình cài đặt
Có sử dụng hay không phép so sánh = trong Max >= Beta và Min <= Alpha
Hc-#f*e%v40I?6J0dI%v4hu6~4
& W{*e%)*c?•4C"%)490X `04C"%)4C'[%)&oT4C$%O*@4&c-%v4)a6dI%v4
4&56& 7%&I0nextAction WV6M4( EW5d5J6&Y%4C"%)# 76490X `0%'(6S X`4 `TO
4C"%)X& SM4&56W56&•4}%4/ *?-%&c40N4%'(6S *+%S`%X`4_?24a4&B%
c%SQ%I-6”%)6M4&U) 2 4&f6&hx%)# 764&?]44"!%6bJ0 %3iJC6&#J
0J|3iJC6&6&•6M4&US20h2"dIS,?CJ#Q0z4) !4Cu6bJ# 76490X `0dIX&R%)Sj
6&:X&R%)S20h2"S'o6Cx%)%'(6S SM6Mdw &J-X&R%)
I Sz44C$%4&564`6&"4&c-# 76S'J#I"*c?•dI06&"0!-4f%&S dw Cc4
%& Q?O#IX&!6&"I%4"I%W"#( # 76X&R%)SU*c?•Z
Vấn đề khi xảy ra trường hợp không ăn luôn quân vua của địch khi có thể ăn.
C"%)0N4#I 4C'[%)&oT|2-CJ|!6W?c46M4&UX`44&v6#!%6[%)J-*"# 76
490X `0JdT&Jhi4JZ
N
!6%v40I?|J%&dI6!6%v4WVX`44&v6#!%6[O0I?%)&7dIhu6~4O*@4&c-6"0WV
X&R%)S 4&i"%'(66M4&U4&~%)S'o6%)J-
&'#]-q&I0%i|464 "%4J6,%X U04CJ|i0q4C/%)4&! X`4 `T6M4&UX`4
4&v6#!%6[%)J-X&R%)O%`?6M4&9WVX&R%)6,%*?-740IS'J%)J-CJ4C/%)4&!
6& `%4&~%)
if(bkCPiece != null )
if(bkCPiece.type == Const.KING){
finalList.clear();
finalList.add(from);
finalList.add(to);
// restore lai ban co
CBProcess.move(cBoard, to, from);
if(bkCPiece != null ){
cBoard.slot[to.x][to.y].cPiece = bkCPiece;
cBoard.cArray[Const.WHITE].add(bkCPiece);
}
cBoard.slot(from).cPiece.firstMoved = bkFirstMoved;
cBoard.slot(from).cPiece.type = bkType;
break;
}
[
Vấn đề khi quân vua đi lỗi để bị ăn
'B%)45%&'T&,%4C$%OWV4}%4/ |!6W?c4dI06&"# 76_?g%#?J—Sg0S,?˜#I"6&w
6&`4O#9#]-O4/ SNWg?=WVX U04CJ|i0_?g%#?J6Mhu1%hq %'(6* 6&?-U%#€JC}
X&R%)O%`?6M4&9WV4C2#Q0N4) !4CuSz6h 74) vT%i|464 "%%&]%CJ#Id"/ %'(6S
%I-O# 76%I-WVdI0q&I00 %3iJC6&l4C"%)4C'[%)&oT6"04900J|n
// neu nuoc di dan den quan vua bi an thi tra ve gia tri nho nhat cua int
if(depth == 1 && bkCPiece != null)
if(bkCPiece.type == Const.KING ){
// restore lai ban co
CBProcess.move(cBoard, to, from);
if(bkCPiece != null ){
cBoard.slot[to.x][to.y].cPiece = bkCPiece;
cBoard.cArray[Const.WHITE].add(bkCPiece);
}
cBoard.slot(from).cPiece.firstMoved = bkFirstMoved;
cBoard.slot(from).cPiece.type = bkType;
return Integer.MIN_VALUE;
}
Vấn đề trong kỹ thuật lập trình : sinh ra các trạng thái hoàn toàn mới hay
chuyển đổi trạng thái đối tượng bàn cờ hiện tại
- ,?#I"dI0N4Sa 4'o%)h"JC*
- $?6,?W %&CJ6!64C/%)4&! X`4 `T
- c%SQ)zTT&2 6M;T&'B%)T&!T
o .&'B%)T&!T=3 %&CJ6!6Sa 4'o%)&"I%4"I%0( SN6d]Td]T#( Sa
4'o%)h"JC*hJ%S,?
o .&'B%)T&!T;&•*r%)Sa 4'o%)hJ%S,?#I4&J-Sj 4C/%)4&! %N
hN4C"%)%M
Phân tích phương pháp 1 :
- 764/"0( 0N4Sa 4'o%)WV2%&&'q%)hq %& Q?#c%SQOSz6h 74dI# 76
4C/%)4&! & 7%4/
- g-4C^6&B qSNWg?6I%)6J"WV6I%)4a%%& Q?4&[ ) J%#ISU4/"Sa
4'o%)0( lS`%&I%)4C 7?hI%6[0( l%v40( nO0w hI%6[6&:J&I%)4C10
Sa 4'o%)n
- )R%%)8pJ#J6cTT&!4hN%&(6&]0&B%6!6%)R%%)8%&'OŠŠ
for(int i = 0; i < 10000000; i++){
int g[] = new int[200];
for(int j = 0; j < 200; j++)
g[j] = 0;
}
a%>OEPlWn6&•SU4&56& 7%# 766cTT&!4#IX&q 4/"4C$%
Phân tích phương pháp 2 :
- .&'B%)T&!T;X&~6T&e6S'o6%&'o6S U04C$%4?-%& $%X& # `46&'B%)4C9%&
WVT&:64/T&B%
- 3 %&CJ6!6%'(6S l6&:X&R%)W %&CJ4C564 `ThI%6[0( n
ArrayList<Coord> list = CBProcess.generate(cBoard, Const.WHITE);
- .&2 hJ6X?T4C/%)4&! hI%6[4C'(6X& h `%Sj 4C/%)4&!
// backup quan o vi tri se den trong truong hop bi an
bkCPiece = cBoard.slot(to).cPiece;
// backup trang thai lan dau di chuye
bkFirstMoved = cBoard.slot(from).cPiece.firstMoved;
// backup kieu cua quan co di chuyen trong truong hop tot phong hau
bkType = cBoard.slot(from).cPiece.type;
- .&2 CiW4"Ci4C/%)4&! hI%6[X& St4&56& 7%|"%)0Y 4f%&4"!%
CBProcess.move(cBoard, to, from);
if(bkCPiece != null ){
cBoard.slot[to.x][to.y].cPiece = bkCPiece;
cBoard.cArray[Const.BLACK].add(bkCPiece);
}
cBoard.slot(from).cPiece.firstMoved = bkFirstMoved;
cBoard.slot(from).cPiece.type = bkType;
b. Hàm định trị
&c4d'o%)6bJ6&'B%)4C9%&6&B 6[T&e4&?N6Cc4%& Q?#I"&I0Su%&4CuZ`?&I0
S!%&) !6&"4JW5S!%&) !X&R%)6&f%&|!6#Q6!64C/%)4&! O%M6M4&U&'(%)*+%4J
S 4( 4C/%)4&! S'o6|i0dI4a4O%&'%)4&564`dIhc4do
& `4X`0N4&I0S!%&) !4a4dIX&MOS^ &† _?J%4g0S`%%& Q?%&g%4a6bJhI%6[
i. Chiến lược 1
Định lượng giá trị cho quân cờ :
- w 0N4_?g%6q4C$%hI%6[WV6M0N4) !4CuX&!6%&J?OT&e4&?N60:6SN
_?J%4CY%)6bJ_?g%SM4C$%hI%6[O6e4&U%&'WJ?
o public static final int KING_VALUE = 1000000;
o public static final int QUEEN_VALUE = 1000;
o public static final int BISHOP_VALUE = 350;
o public static final int KNIGHT_VALUE = 300;
o public static final int ROOK_VALUE = 500;
o public static final int PAWN_VALUE = 100;
- ;h$%WV6M) !4Cu_?g%6[Sa %)'o6%&J?
o $%4C~%)WV0J%)) !4Cu_?g%6[*'B%)
o $%Si%WV0J%)) J4Cu_?g%6[g0
76Su%&4Cu6bJhI%6[WVdI4j%)6bJ4c4626!6_?g%6[6^%4}%4/ 4C$%hI%6[
public static int cal_v(CBoard cBoard, int color) {
int value = 0;
// Tinh tong diem cua cac quan tren ban co
CArray cArray;
CPiece temp;
cArray = cBoard.cArray[Const.WHITE];
for(int i = 0; i < cArray.n; i++){
temp = cArray.array[i];
value += temp.value;
}
// tinh tong diem quan den
cArray = cBoard.cArray[Const.BLACK];
for(int i = 0; i < cArray.n; i++){k
temp = cArray.array[i];
value += temp.value;
}
return value;
}
Mục đích của chiến lược :
- vT0!-6M|?&'(%)1%_?g%Su6&&"z6Sj _?g%6M) !4Cud(%&B%%&x04/"
'?4&`&B%l4j%)) !4Cu%)& $%)#QT&fJ6Mdo 6&"0!-n
- vT0!-T&"%)4&bO6&/-_?g%X& hu%)?-& U0l4j%)) !4Cu%)& $%)#QT& J
X&R%)6Mdo 6&"0!-n
ii. Chiến lược 2
Định lượng mức độ quản lý bàn cờ
- C"%)4C'[%)&oT6&B #( 0N4%)'[ _?2%dˆhI%6[4a4O0!-6&•*r%)&I0Su%&
4Cu%&'4C$%WV6MCc4f4&"z6X&R%)6M%'(6S 4a '?ZC/%)4&! hI%6[Sa #(
0!-SJ%)CB #I"6[hfZ Q?%I-WV*+%S`%# 760!-WVS %&8%)%'(6#R
%)&LJ&"z60c4_?g%*"S %'(64}
- $?6,?Sz4CJS'J#I") !4Cu6&"6!6%'(6S 6M4&U6bJ_?g%6[%&x0
—X&?-`%X&f6&˜_?g%6[S #I"#u4Cf6MX&2%1%)_?2%dˆ6I%)%& Q?R6I%)4a4
// he so gia tri cua mot nuoc co the di chuyen
// mobiliy coefficient
public static final int KING_MCO = 0;
public static final int QUEEN_MCO = 1;
public static final int BISHOP_MCO = 1;
public static final int KNIGHT_MCO = 2;
public static final int ROOK_MCO = 1;
public static final int PAWN_MCO = 1;
- f%&4"!%6&"&7Wa_?2%dˆhI%6[
ways * mCo;
o ‘J-WWa%'(66M4&U* 6&?-U%4(
o 0"&76M) !4Cu4C$%0N4%'(6S
- f%&4"!%) !4CuhI%6[WV4&56& 7%%&'WJ?
public static int cal_vm(CBoard cBoard, int color) {
int value = 0;
// Tinh tong diem cua cac quan tren ban co
CArray cArray;
CPiece temp;
cArray = cBoard.cArray[Const.WHITE];
for(int i = 0; i < cArray.n; i++){
temp = cArray.array[i];
.