THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 121

Ch

ng 13: M ng ch a các đ i

ươ

ố t ng

ượ

Tr v

ở ề M c l c

ụ ụ cu n sách

13.1 Con đ

ng phía tr

c

ườ

ướ

ba ch

ng k ti p ta s phát tri n các ch

ng trình ch i bài tây và v i nh ng c bài. Tr

c khi đi vào

ươ

ế ế

ươ

ơ

ướ

chi ti t, sau đây là khái quát nh ng b

c đi:

ế

ướ

1.

Trong ch

ng này ta s đ nh nghĩa m t l p

ươ

ẽ ị

ộ ớ Card r i vi t các ph ng th c đ ho t đ ng v i đ i

ế

ươ

ứ ể

ạ ộ

ớ ố

t

ng

ượ Card và m ng ch a

ứ Card.

2.

Trong Ch

ng

ươ 14 ta s t o l p m t l p

ẽ ạ ậ

ộ ớ Deck r i vi t các ph ng th c ho t đ ng v i các đ i t ng

ế

ươ

ạ ộ

ố ượ Deck.

3.

Trong Ch

ng

ươ 15 tôi s trình bày v l p trình h ng đ i t ng (OOP) và ta s chuy n đ i các

ề ậ

ướ

ố ượ

l p

ớ Card và Deck sang m t phong cách gi ng nh h ng đ i t ng h n.

ư ướ

ố ượ

ơ

Tôi nghĩ r ng ti n b

c theo ki u này khi n cho con đ

ng đi d dàng h n; song nh

c đi m là ta s

ế

ướ

ế

ườ

ơ

ượ

th y nhi u phiên b n c a cùng đo n mã l nh, vì v y có th gây nh m l n. N u đ

c, b n có th t i v

ả ủ

ế

ượ

ể ả ề

mã l nh cho t ng ch

ng trong khi làm. Mã l nh trong ch

ng này

ươ

ươ

đây: http://thinkapjava.com/code/Card1.java.

13.2 Các đ i t

ng

ố ượ Card

N u b n ch a quen v i bài tây, thì gi là lúc thích h p đ ki m m t b , k o nh ng gì trong ch

ng này

ế

ư

ể ể

ộ ộ ẻ

ươ

s không có nhi u ý nghĩa. Ho c b n hãy đ c l y

ặ ạ

ọ ấ http://en.wikipedia.org/wiki/Playing_card.

Có 52 lá bài trong m t b , m i lá bài thu c v m t trong b n ch t và m t trong 13 b c. Các ch t g m

ộ ộ

ộ ề ộ

ấ ồ

Pích, C , Rô, và Nhép (theo th t gi m d n trong trò

ơ

ứ ự ả

bridge). Các b c g m có A, 2, 3, 4, 5, 6, 7, 8, 9, 10,

ậ ồ

J, Q, và K. Tùy theo trò ch i mà b n quân A có th cao h n K ho c th p h n 2.

ơ

ơ

ơ

N u b n mu n đ nh nghĩa m t đ i t

ng m i đ bi u di n cho lá bài, rõ ràng các thu c tính ph i

ế

ộ ố ượ

ớ ể ể

là:

rank

(b c) và

suit

(ch t). Còn vi c ch n ki u d li u cho các thu c tính l i không hi n nhiên. M t

ữ ệ

kh năng là dùng các chu i g m nh ng t nh

ỗ ồ

ư

"Spade"

(Pích) cho ch t và

"Queen"

cho b c. M t v n

ộ ấ

đ đ t ra v i cách làm này là s không d so sánh xem lá bài nào có b c ho c ch t cao h n.

ề ặ

ơ

M t cách khác là dùng s nguyên đ

đánh số cho các b c và ch t. đây, “đánh s ” không có nghĩa là ý

ấ Ở

mã hóa ho c d ch thông đi p ra d ng m t mã nh nhi u ng

i th

ng nghĩ. Mà đ i v i nhà khoa h c

ặ ị

ư

ườ

ườ

ố ớ

máy tính, “đánh s ”

ố nghĩa là “l p m t phép ánh x t con s đ n d li u c n bi u th .” Ch ng h n:

ạ ừ

ố ế

ữ ệ ầ

Spades (Pích)

↦ 3

Hearts (Cơ)

↦ 2

Diamonds (Rô)

↦ 1

Clubs (Nhép)

↦ 0

Mã s này giúp so sánh các lá bài d h n; vì ch t cao h n đ

c ánh x đ n s l n h n, và ta có th so

ễ ơ

ơ

ượ

ạ ế ố ớ

ơ

sánh ch t b ng cách so các mã s c a chúng.

ấ ằ

ố ủ

Ánh x đ i v i b c thì khá d th y; m i b c s thì ánh x

ạ ố ớ ậ

ễ ấ

ỗ ậ ố

đ n chính s nguyên t

ng ng, còn v i các b c ch :

ế

ươ

J

↦ 11

Q

↦ 12

K

↦ 13

đây tôi dùng kí hi u toán h c đ bi u di n ánh x là do ánh x không ph i là m t ph n c a ch

ng

ọ ể ể

ầ ủ

ươ

trình. Đó là m t ph n c a khâu thi t k ch

ng trình, nh ng không xu t hi n m t cách c th trên mã

ầ ủ

ế ế ươ

ư

ụ ể

l nh.

L i đ nh nghĩa l p cho ki u

ờ ị

Card

s nh sau:

ư