Bài 5: Sử dụng danh sách để tạo bản đồ
Mục lục
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.
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)
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.
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.
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.
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:
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
Để 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.
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:
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:
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
Đá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: