Hướng dẫn sử dụng Macromedia Flash mx


Bài 26: Thao tác trên dãy



tải về 0.86 Mb.
trang14/27
Chuyển đổi dữ liệu02.09.2017
Kích0.86 Mb.
#32845
1   ...   10   11   12   13   14   15   16   17   ...   27

Bài 26: Thao tác trên dãy



Trong trò chơi "bắt sao biển" đã thực hiện, bạn chỉ có hai nhân vật (sao biển và cá nóc) và bạn gọi tên chúng (starfish) khi cần "liên hệ công tác". Thử hình dung trò chơi nào đó có nhiều thể hiện của nhiều nhân vật khác nhau, không ngừng sinh ra và mất đi, bạn thấy ngay rằng cách thức quản lý "thủ công" các thể hiện của trò chơi "bắt sao biển" sẽ không phù hợp. Trong trường hợp như vậy, số lượng thể hiện biến động trong lúc chơi, bạn không thể biết trước vào lúc lập trình.

Để chuẩn bị cho việc lập trình các trò chơi phức tạp hơn, bạn cần biết đến khái niệm dãy (array). Nhờ đưa các thể hiện vào một dãy, bạn không cần đặt tên riêng cho từng thể hiện. Lúc đó, các thể hiện "xếp hàng" trong bộ nhớ máy tính, mỗi thể hiện được xác định bởi tên của dãy kèm theo một chỉ số (index), cho biết vị trí của nó trong dãy. Xin nói ngay, xếp hàng trong bộ nhớ không có nghĩa là xếp hàng trên sân khấu. Bạn đừng nhầm nha. Bạn hãy mở tập tin FLA mới, gõ phím F9 để mở bảng Actions - Frame ứng với khung 1 và gõ câu lệnh tạo ra một dãy như sau: arr = new Array(); Với câu lệnh như vậy, ta tạo ra một dãy có tên là arr. Người ta cũng nói rằng arr là một biến trỏ đến một dãy. Nói cho... phức tạp, câu lệnh vừa nêu tạo ra một đối tượng (object) mới thuộc lớp (class) Array và arr là biến trỏ đến đối tượng mới đó. Bạn ghi tiếp hai câu lệnh như sau để đặt trị số 0 vào vị trí thứ nhất của dãy và hiển thị phần tử thứ nhất đó ở bảng Output:

arr = new Array();

arr[0] = 0;

trace(arr[0]);

Bạn để ý, khi gọi tên một phần tử của dãy, ta ghi tên dãy, kèm theo chỉ số của phần tử đặt trong cặp dấu ngoặc vuông. Chỉ số của phần tử đầu tiên của dãy là 0, chứ không phải 1. Thử chạy chương trình, bạn thấy phần tử thứ nhất của dãy arr (trị số 0) xuất hiện trong bảng Output. Bạn viết thêm một câu lệnh nữa để đặt trị số 10 vào vị trí thứ hai của dãy (ứng với chỉ số 1):

arr = new Array();

arr[0] = 0;



arr[1] = 10;

trace(arr);

Ngoài ra, bạn sửa câu lệnh trace(arr[0]); thành trace(arr); để in ra bảng Output toàn bộ dãy arr, thay vì chỉ in phần tử đầu tiên. Với câu lệnh trace(arr), Flash tự biết rằng phải ghi tuần tự từng phần tử trong dãy và phân cách bằng dấu phẩy. Trong trường hợp đang xét, dãy chỉ có hai phần tử, bạn thấy kết quả ở bảng Output như sau: 0,10. Giả sử bạn cần đặt trị số 20 vào vị trí thứ ba, trị số 30 vào vị trí thứ tư,... Bạn dùng vòng lặp như sau cho nhanh:

arr = new Array();

arr[0] = 0;

arr[1] = 10;



for(i = 2; i < 10; i++)

  arr[i] = i*10;

trace(arr);

trace("arr.length:" + arr.length);

Câu lệnh cuối trong đoạn mã nêu trên nhằm in ra bảng Output chiều dài của dãy, tức số vị trí có trong dãy. Chiều dài của dãy được cho bởi biến length trong đối tượng arr, viết là arr.length. Biến length được tạo ra trong đối tượng arr và được cập nhật một cách tự động. Biến length là thuộc tính (property) của dãy, chứ không phải phần tử của dãy. Mỗi lần bạn thêm phần tử vào dãy, dãy dài ra thêm và trị số của biến thuộc tính length của dãy tự động tăng lên.



Thử chạy chương trình, bạn có kết quả ở bảng Output như hình 1. Chiều dài của dãy là 10, được chiếm bởi mười trị số (hình 2). Mười vị trí của dãy ứng với các chỉ số từ 0 đến 9.



Khi đặt các trị số vào dãy, bạn không nhất thiết phải theo thứ tự. Bạn thử ghi thêm hai câu lệnh như sau:

arr = new Array();

arr[0] = 0;

arr[1] = 10;

for(i = 2; i < 10; i++)

  arr[i] = i*10;

arr[14] = 200;

arr[12] = 100;

trace(arr);

trace("arr.length:" + arr.length);

Hai câu lệnh vừa thêm "ngang nhiên" ghi trị số 200 vào vị trí ứng với chỉ số 14, "bất chợt" ghi trị số 100 vào vị trí ứng với chỉ số 12. Thử chạy chương trình, bạn thấy kết quả như sau:

0,10,20,30,40,50,60,70,80,90,undefined,undefined,100,undefined,200

arr.length:15

Bạn thấy rõ dãy arr hiện có 15 vị trí, tăng lên so với trước để đáp ứng nhu cầu được diễn đạt bởi hai câu lệnh mới. Khi trình bày nội dung của dãy, Flash tự động ghi undefined (chưa được xác định) ở các vị trí còn bỏ trống. Trong trường hợp đang xét, các vị trí bỏ trống ứng với các chỉ số 10, 11, 13. Nhờ hai câu lệnh "ngẫu hứng", bạn thấy rõ chiều dài của dãy là số vị trí có trong dãy, chứ không phải số phần tử nằm trong dãy.

Bài 27: Hành vi của dãy



Bạn đã làm quen với dãy và biết cách đặt các trị số vào dãy, tạo thành các phần tử của dãy. Khi đặt một trị số vào dãy, bạn chỉ ra vị trí của nó trong dãy. Dãy tự động dài ra theo nhu cầu của bạn. Thao tác trên dãy có lẽ khiến bạn hình dung rằng dãy chẳng qua chỉ là các "ô chứa" xếp thành hàng trong bộ nhớ máy tính. Điều đó đúng nhưng... chưa đủ. Dãy là một đối tượng có khả năng quản lý các "ô chứa". Dãy có những hành vi (hàm) nhất định. Bạn có thể yêu cầu dãy thực hiện khá nhiều việc "ly kỳ".

Bạn hãy mở lại tập tin FLA có đoạn mã thử nghiệm dãy ở khung 1. Bạn xóa đoạn mã hiện có, viết đoạn mã khác như sau:

arr = new Array();

for(i = 0; i < 5; i++) {

  trace("Đưa vào: " + i);

  arr.push(i);

  trace(arr);

}

Đoạn mã trên tạo một dãy mang tên arr, rồi dùng một vòng lặp for để lần lượt "đẩy" các trị số từ 0 đến 4 vào dãy. Ta đẩy một trị số vào dãy bằng cách trao trị số đó cho hàm push của dãy. Nói khác đi, ta yêu cầu dãy "nhét" trị số mới vào trong "lòng". Trong trường hợp này, ta không quan tâm đến chỉ số của phần tử mới trong dãy, chỉ cần nhớ luật lệ xếp hàng đơn giản: phần tử vào trước thì đứng trước, phần tử vào sau cùng thì đứng sau cùng. Trong mỗi lần lặp, câu lệnh trace(arr); in ra bảng Output toàn bộ nội dung của dãy. Nhờ vậy, khi chạy thử chương trình, bạn có thể theo dõi diễn biến bên trong dãy, thấy được dãy từ từ dài ra như thế nào:



Đưa vào: 0

0

Đưa vào: 1



0,1

Đưa vào: 2

0,1,2

Đưa vào: 3



0,1,2,3

Đưa vào: 4

0,1,2,3,4

Dãy có một hàm khác gọi là pop, có thể xem là hàm ngược của push. Khi bạn gọi hàm pop của dãy, phần tử đứng sau cùng "bật" ra khỏi dãy cho bạn "hứng". Nghĩa là hàm pop trả về phần tử sau cùng của dãy, đồng thời loại nó ra khỏi dãy, làm cho chiều dài của dãy giảm đi một đơn vị. Bạn viết thêm đoạn mã như sau:

while(arr.length > 0) {

  trace("Lấy ra: " + arr.pop());

  trace(arr);

}

trong đó, ta dùng vòng lặp while để gọi hàm pop của dãy arr nhiều lần, chừng nào chiều dài của dãy vẫn còn lớn hơn 0. Trong mỗi lần lặp, ta cho in ra nội dung của dãy để thấy được dãy từ từ ngắn lại ra sao (hình 1).



Trong vòng lặp while vừa viết, ở câu lệnh trace("Lấy ra: " + arr.pop()); bạn hãy sửa arr.pop() thành arr.shift() và ấn Ctrl+Enter để chạy lại chương trình. Bạn sẽ thấy hàm shift khác với hàm pop ở chỗ: làm cho phần tử đầu tiên, chứ không phải phần tử sau cùng, bật ra khỏi dãy. Khi phần tử đầu tiên bị loại khỏi dãy, phần tử thứ hai tự động dịch lên, trở thành phần tử đầu tiên, phần tử thứ ba nối đuôi, trở thành phần tử thứ hai,... Kết quả là mọi phần tử trong dãy đều xê dịch. Tên gọi shift (xê dịch) xuất phát từ đó. Tiếp tục "chơi đùa" với dãy, bạn viết thêm vòng lặp for như sau:

for(i = 0; i < 5; i++) {

  trace("Đưa vào: " + i);

  arr.unshift(i);

  trace(arr);

}

Nghĩa là sau khi lấy mọi phần tử ra khỏi dãy, ta lại đưa các trị số từ 0 đến 4 vào dãy, nhưng lần này ta gọi hàm unshift của dãy, chứ không gọi hàm push. Quan sát kết quả ở bảng Output, bạn hiểu ngay: hàm unshift luôn luôn đưa phần tử mới vào vị trí đầu tiên của dãy, chứ không phải vị trí sau cùng. Phần tử mới chen vào vị trí đầu tiên, đẩy các phần tử có sẵn ra sau. Bạn thu được dãy trị số ngược: 4,3,2,1,0.



Hàm unshift và hàm shift tạo ra nhiều xê dịch trong dãy nên tốn thời gian hơn hàm push và hàm pop. Tuy vậy, vẫn có những trường hợp mà việc thêm phần tử mới vào dãy ở ngay vị trí đầu tiên là nhu cầu thực sự.

Dãy còn có khả năng tự sắp thứ tự nữa. Bạn hãy viết thêm ba câu lệnh như sau:

trace("Sắp thứ tự:");

arr.sort();

trace(arr);

Để sắp thứ tự trong dãy, bạn chỉ cần gọi hàm sort của dãy. Trước khi gọi hàm sort, nội dung của dãy là 4,3,2,1,0. Sau khi gọi hàm sort, nội dung của dãy có thứ tự "nhỏ trước, lớn sau": 0,1,2,3,4. Đối với dãy chứa các chuỗi, hàm sort của dãy giúp bạn có được thứ tự vần (alphabet order) trong dãy. Bạn thử hình dung: ta cho người dùng chương trình nhập tên các bài hát. Chỉ cần lưu những tên bài hát trong dãy và gọi hàm sort của dãy, bạn có ngay danh sách bài hát được sắp thứ tự theo vần. Bạn nên xóa hết đoạn mã hiện có và tự viết đoạn mã thử nghiệm khả năng sắp thứ tự các chuỗi theo vần của hàm sort của dãy.




Каталог: files -> 2012
files -> PHỤ LỤC 2 TỔng hợp danh mục tài liệu tham khảO
files -> BÁo cáo quy hoạch vùng sản xuất vải an toàn tỉnh bắc giang đẾn năM 2020 (Thuộc dự án nâng cao chất lượng, an toàn sản phẩm nông nghiệp và phát triển chương trình khí sinh học ) Cơ quan chủ trì
files -> BỘ TÀi nguyên và MÔi trưỜng
files -> 1. Mục tiêu đào tạo: Mục tiêu chung
2012 -> Số Hồ sơ: 50 / /cs-bhyt cộng hòa xã HỘi chủ nghĩa việt nam
2012 -> HÌnh ảnh thao tác dữ liệu máy toàN ĐẠc nts 310 CỦa hãng south
2012 -> Khóa học 2010 -2012 (TT10C/1) (Ban hành theo quyết định số /QĐ-bgh ngày …tháng…năm của Hiệu trưởng trường Đại học Hoa Sen)
2012 -> Thông báo về việc xét thông qua đề tài luận văn và người hướng dẫn cho hvch k56

tải về 0.86 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   10   11   12   13   14   15   16   17   ...   27




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương