Tr v
ở ề M c l c
ụ ụ cu n sách
ố
N u b n ch a làm bài t p trong các Ch
ng 5
ế
ạ
ư
ậ
ươ
và 10, b n hãy nên làm đi tr
c khi đ c ch
ng này. Xin
ạ
ướ
ọ
ươ
đ
c nh c l i, b n có th tìm tài li u v các l p GridWorld
ượ
ắ ạ
ạ
ể
ệ
ề
ớ
ở http://www.greenteapress.com/thinkapjava/javadoc/gridworld/.
Ph n 3 c a cu n H
ng d n sinh viên v GridWorld trình bày nh ng l p c u thành GridWorld và các
ầ
ủ
ố
ướ
ẫ
ề
ữ
ớ ấ
m i t
ng tác gi a chúng. Đây là m t ví d v thi t k h
ng đ i t
ng và làm m t c h i đ ta bàn
ố ươ
ữ
ộ
ụ ề
ế ế ươ
ố ượ
ộ ơ ổ ể
lu n nh ng v n đ thi t k h
ng đ i t
ng.
ậ
ữ
ấ
ề
ế ế ướ
ố ượ
Nh ng tr
c khi b n đ c cu n H
ng d n sinh viên, sau đây có thêm m t s đi u mà b n c n bi t.
ư
ướ
ạ
ọ
ố
ướ
ẫ
ộ ố ề
ạ ầ
ế
16.1 ArrayList
GridWorld s d ng
ử ụ java.util.ArrayList, m t đ i t ng g n gi ng v i m ng. Đó là m t
ộ ố ượ
ầ
ố
ớ
ả
ộ t p h p
ậ
ợ , t c là
ứ
đ i t
ng đ ch a nh ng đ i t
ng khác. Java cung c p nh ng t p h p khác v i nhi u tính năng khác
ố ượ
ể ứ
ữ
ố ượ
ấ
ữ
ậ
ợ
ớ
ề
nhau, nh ng đ dùng GridWorld ta ch c n đ n các
ư
ể
ỉ ầ
ế
ArrayList.
Đ th y m t ví d , hãy t i
ể ấ
ộ
ụ
ả
v
ề http://thinkapjava.com/code/BlueBug.java và http://thinkapjava.com/code/BlueBugRunner.java. B
lueBug là m t con b di chuy n ng u nhiên và đi tìm các t ng đá. N u nó th y m t t ng đá, con b s
ộ
ọ
ể
ẫ
ả
ế
ấ
ộ ả
ọ ẽ
làm t ng đá hóa màu xanh.
ả
Sau đây là cách ho t đ ng c a BlueBug. Khi
ạ ộ
ủ
act đ
c kích ho t,
ượ
ạ BlueBug l y v trí c a nó cùng m t tham
ấ ị
ủ
ộ
chi u đ n l
i:
ế
ế ướ
Location loc = getLocation();
Grid<Actor> grid = getGrid();
Ki u d li u n m trong c p ngo c góc (
ể
ữ ệ
ằ
ặ
ặ
<>
) là m t
ộ tham s ki u
ố ể đ quy đ nh n i dung c a
ể
ị
ộ
ủ grid. Nói
cách khác, grid không ch là m t
ỉ
ộ Grid, mà nó là Grid có ch a nh ng
ứ
ữ Actor.
B
c ti p theo là thu l y nh ng v trí lân c n v i ch hi n t i.
ướ
ế
ấ
ữ
ị
ậ
ớ
ỗ ệ ạ Grid cung c p m t ph ng th c ch đ
ấ
ộ
ươ
ứ
ỉ ể
làm vi c này:
ệ
ArrayList<Actor> neighbors = grid.getNeighbors(loc);
K t qu tr l i t
ế
ả ả ạ ừ getNeighbors là m t
ộ ArrayList g m các
ồ
Actor. Ph
ng th c
ươ
ứ size tr l i chi u dài
ả ạ
ề
c a
ủ ArrayList, và get thì ch n l y m t ph n t . B i v y ta có th in ra nh ng v trí lân c n nh sau.
ọ ấ
ộ
ầ ử ở ậ
ể
ữ
ị
ậ
ư
for
(
int
i = 0; i < neighbors.size(); i++) {
Actor actor = neighbors.get(i);
System.out.println(actor);
}
Vi c duy t m t
ệ
ệ
ộ ArrayList là thao tác thông d ng đ n n i có m t cú pháp đ c bi t dành cho nó:
ụ
ế
ỗ
ộ
ặ
ệ
vòng
l p for-each
ặ
. B i v y ta có th vi t:
ở ậ
ể ế
for
(Actor actor : neighbors) {
System.out.println(actor);
}