Bài 5: Sử dụng danh sách để tạo bản đồ

Từ ChipFC Wiki
Phiên bản vào lúc 05:37, ngày 10 tháng 11 năm 2018 của Sncarem (Thảo luận | đóng góp) (Nguyên lý tổ chức bản đồ bằng danh sách)
(khác) ← Phiên bản cũ | xem phiên bản hiện hành (khác) | Phiên bản mới → (khác)
Bước tới: chuyển hướng, tìm kiếm


Mục tiêu

  • Học sinh hiểu được đối tượng danh sách
  • Học sinh ứng dụng danh sách để quản lý bản đồ trò chơi

Nội dung chi tiết

Nguyên lý tổ chức bản đồ bằng danh sách

Trong bài trước, chúng ta đã xây dựng bản đồ vật cản cho trò chơi với kích thước 10 hàng và 10 cột. Tổng cộng chúng ta đã vẽ ra 100 vật cản xếp cạnh nhau trong bản đồ. Ở bài này, chúng ta sẽ dùng danh sách để lưu hình dạng của bản đồ. Có những vị trí, chúng ta không cần tạo ra vật cản, có những vị trí chúng ta mới tạo ra những vật cản.

Bai5-0.png

Hình vẽ trên là một ví dụ về việc tổ chức bản đồ bằng danh sách. Chỉ những vị trí nào có giá trị là 1 thì chúng ta mới vẽ ra vật cản, còn những giá trị bằng 0 thì chúng ta sẽ không vẽ ra vật cản. Cụ thể, 3 giá trị đầu là 1, tương ứng với 3 vật cản đầu tiên ở hàng dưới cùng. Tiếp theo, chúng ta có 1 giá trị 0 (vị trí số 4 trong danh sách) nên chúng ta sẽ có 1 ô trống không có vật cản. Giá trị thứ 5 là 1, tương ứng với 1 vật cản nữa. Tương tự, với 3 vị trí tiếp theo là 6, 7 và 8, các giá trị tương ứng là 1, 0 và 1, tương ứng với 3 ô đầu tiên của hàng thứ 2.

Tạo danh sách

Đầu tiên chúng ta sẽ tạo ra danh sách để lưu các vị trí cần vẽ ra vật cản. Vì bản đồ của chúng ta có kích thước 10x10 nên danh sách sẽ có 100 phần tử, tương ứng với từng vị trí trên bản đồ. Để tạo danh sách, chúng ta vào mục Dữ liệu và chọn Tạo danh sách (xem Hình 1)

Hình 1: Chọn vào nhóm Dữ liệu và chọn Tạo danh sách

Một cửa sổ hiện ra, chúng ta nhập vào tên, ví dụ là BanDo, rồi nhấn OK.

Hình 2: Nhập tên cho danh sách rồi nhấn OK

Một danh sách rỗng (chưa có phần tử nào) được tạo ra (xem Hình 3). Chúng ta nhấn vào dấu + ở góc của danh sách để thêm phần tử vào.

Hình 3: Danh sách được tạo ra, ban đầu nó không có phần tử nào cả

Bài tập trên lớp: Giáo viên cho học sinh tạo ra 100 phần tử, mỗi phần tử có giá trị là 0 hoặc 1.

Hình 4: Danh sách với các phần tử được thêm vào

Thay đổi việc tạo ra vật cản

Ở Bài 4 trước chúng ta tạo ra vật cản bằng đoạn chương trình như sau:

Hình 5: Chương trình tạo vật cản ở Bài 4

Chúng ta có thể thấy, câu lệnh để tạo ra một vật cản là . Bây giờ, trước khi tạo ra bản sao này, chúng ta sẽ kiểm tra phần tử tương ứng trong danh sách có là 1 hay không. Nếu thực sự là 1, chúng ta mới tạo ra bản sao. Để làm được việc này, chúng ta cần tạo thêm 1 biến số để duyệt qua các phần tử trong danh sách. Chúng ta vào lại mục Dữ liệu và chọn Tạo biến số Cửa sổ sau đây hiệu ra, chúng ta nhận tên cho biến số là index, và nhấn OK

Hình 6: Tạo một biến số index để duyệt các phần tử trong danh sách

Để kiểm tra giá trị của phần tử index trong danh sách, chúng ta sẽ ghép 2 câu lệnh như Hình 7.

Hình 7: Kiểm tra phần tử thứ index trong danh sách

Câu lệnh kiểm tra điều kiện trước khi tạo bản sao sẽ được hiện thực như sau:

Hình 8: Câu lệnh kiểm tra phần tử trong danh sách trước khi tạo bản sao

Tuy nhiên, chúng ta cần lưu ý là đầu chương trình, index sẽ được gán bằng 1 và cứ mỗi lần lặp, chúng ta lại tăng giá trị của index lên 1 đơn vị để kiểm tra ô tiếp theo. Chương trình hoàn chỉnh sẽ như sau:

Hình 9: Chương trình tạo vật cản tùy thuộc vào giá trị trong danh sách

Bài tập trên lớp 1: Giáo viên đặt câu hỏi cho học sinh: Tại sao phải tăng giá trị index ở vòng lặp bên trong mà không tăng giá trị index ở vòng lặp bên ngoài?

Đáp án: Nếu tăng giá trị ở vòng lặp bên ngoài, thì giá trị thứ nhất của danh sách tương ứng với cả hàng đầu tiên. Giá trị thứ 2 của danh sách tương ứng với cả hàng thứ 2. Điều đó có nghĩa là nếu giá trị thứ nhất bằng 1, chúng ta có 10 ô vật cản cho dòng thứ nhất. Giá trị thứ 2 bằng 0, thì toàn bộ hàng thứ 2 sẽ không có vật cản nào. Điều này không đúng như thiết kế của chúng ta: Giá trị thứ nhất là 1, thì ô đầu tiên của hàng 1 là vật cản. Giá trị thứ 2 là 0, thì ô tiếp theo của hàng 1 là không có vật cản. Do đó, câu lệnh thay đổi index một lượng 1 phải được đặt ở bên trong vòng lặp thứ 2.

Bài tập trên lớp 2: Giáo viên đặt câu hỏi cho học sinh: Phần tử đầu tiên của hàng thứ 2 trên bản đồ sẽ tương ứng với phần tử thứ mấy trong danh sách.

Đáp án: Phần tử thứ 11 trong danh sách. Hàng thứ nhất trên bản đồ là các phần tử từ 1 đến 10. Như vậy, phần tử đầu tiên của hàng thứ 2 là 11, phần tử tiếp theo là 12 và phần tử cuối cùng của hàng thứ 2 là 20. Tương tự, phần tử đầu tiên của hàng thứ 3 là phần tử thứ 21.

Bài tập trên lớp 3: Học sinh thay đổi các giá trị trong danh sách, để kiểm tra lại việc vẽ bản đồ có chính xác với giá trị tương ứng trong danh sách hay không.

Bài tập về nhà

Học sinh hiện thực thêm chức năng không vẽ ra vật cản nếu nó chạm vào xe tăng, cho dù giá trị của phần tử tương ứng trong danh sách là 1.

Đáp án: Câu lệnh gợi ý như sau

Hình 10: Câu lệnh kiểm tra điều kiện xem có chạm vào xe tăng hay không

Đáp án hoàn chỉnh: Chúng ta sẽ thay câu lệnh tạo bản sao từ bản thân tôi thành câu lệnh gợi ý như trên:

Hình 11: Chương trình hoàn chỉnh tạo vật cản