1 00:00:01,271 --> 00:00:03,741 Cho đến thời điểm hiện tại, ta đã nắm được cách tạo và truy cập mảng. 2 00:00:03,741 --> 00:00:12,859 Dù tương tự những biến khác, nhưng một trong những điều thú vị về mảng là ta có thể chủ động thay đổi khi chương trình đang hoạt động. 3 00:00:12,859 --> 00:00:15,805 Để tôi cho các bạn xem nhé. 4 00:00:15,805 --> 00:00:21,172 Ở đây ta có chương trình hiển thị Hopper đang giữ mấy quả bóng bay; siêu đáng yêu. 5 00:00:21,172 --> 00:00:29,397 Như vậy ta có vị trí x này với hai số thể hiện vị trí của bóng nay mà ta muốn. 6 00:00:29,397 --> 00:00:35,471 Dưới đây ta có vòng lặp này, và nó sẽ lướt qua tất cả các phần tử trong mảng. 7 00:00:35,471 --> 00:00:46,810 Với mỗi phần tử, vòng lặp sẽ vẽ một đường thẳng từ “x” xuống bàn tay của Hopper, sau đó vẽ một hình e-lip tại “x” với kích thước 30x40 pixel, đó chính là quả bóng bay của chúng ta. 8 00:00:46,810 --> 00:00:58,343 Được rồi. Sau khi quan sát cách hoạt động, ta biết rằng nếu phải thêm một quả bóng nữa, ta chỉ cần thêm một số vào mảng này, đúng không? Ví dụ 300. 9 00:00:58,343 --> 00:01:02,063 Đẹp rồi đấy. Vậy là ta đã có 3 quả bóng bay cho Hopper vui vẻ. 10 00:01:02,063 --> 00:01:10,932 Nhưng hãy giả sử ta muốn người sử dụng nào đó, một người không biết viết mã, thêm bóng bay vào chương trình. 11 00:01:10,932 --> 00:01:17,801 Ta đưa chương trình cho người đó và nói rằng, “Này, anh có thể click vào bất cứ vị trí nào muốn thêm bóng bay, và nó sẽ xuất hiện.” 12 00:01:17,801 --> 00:01:20,688 Thế sẽ khá hay ho đấy. Tôi nghĩ vậy. 13 00:01:20,688 --> 00:01:26,640 Vậy ta nên làm như thế nào? Ta muốn chương trình thay đổi theo thời gian, phải không? 14 00:01:26,640 --> 00:01:30,278 Mỗi khi người sử dụng click chuột, một quả bóng sẽ xuất hiện tại vị trí đó. 15 00:01:30,278 --> 00:01:37,637 Ta bắt đầu với việc di chuyển tất cả mọi thứ vào hàm draw để chương trình có thể dễ dàng thay đổi theo thời gian. 16 00:01:37,637 --> 00:01:43,185 Ta sẽ đưa cái này xuống đây và lùi dòng vào đây. Ổn rồi đấy. 17 00:01:43,185 --> 00:01:48,405 Bây giờ nếu ta muốn kiểm tra xem hiện tại người sử dụng có click chuột hay không thì sao? 18 00:01:48,405 --> 00:01:55,339 Ta có thể làm điều đó với hàm “if”. Như vậy if (mouseIsPressed), sau đó ta sẽ thực hiện một thao tác. 19 00:01:55,339 --> 00:02:01,176 Đó là thao tác gì? Khi người sử dụng click chuột, ta sẽ muốn thêm một số vào mảng này. 20 00:02:01,176 --> 00:02:04,232 Ta đưa nó quay về với hai phần tử nhé. OK. 21 00:02:04,232 --> 00:02:10,464 Như vậy ta muốn bằng cách nào đó thêm một số vào mảng. Tôi sẽ chỉ cho các bạn cách này. 22 00:02:10,464 --> 00:02:18,508 Ta có thể nhập xPositions[2] = mouseX. 23 00:02:18,508 --> 00:02:21,681 Được rồi ta cùng quan sát nhé. 24 00:02:21,681 --> 00:02:26,640 Tôi click chuột, và ta-da tôi đã có một quả bóng bay. Vậy bản chất là gì? 25 00:02:26,640 --> 00:02:38,236 xPositions[2] sẽ ra lệnh tìm mảng, và tìm phần tử số 2, và hãy nhớ rằng đó là phần tử thứ ba vì các mảng đều bắt đầu từ số 0. 26 00:02:38,236 --> 00:02:41,742 Và nếu các bạn quan sát thì sẽ thấy không có phần tử thứ ba, đúng không? Không có gì cả. 27 00:02:41,742 --> 00:02:45,897 Như vậy nó sẽ ra lệnh tìm phần tử, rồi đưa vào mouseX. 28 00:02:45,897 --> 00:02:51,358 Chính vì vị trí đó không có phần tử, nên nó sẽ từ không có gì trở thành mouseX. 29 00:02:51,358 --> 00:03:00,130 Hiện tại mảng của chúng ta đã có 3 phần tử, và vòng lặp for dưới đây sẽ quét lại, và cuối cùng ta có quả bóng bay thứ ba. 30 00:03:00,130 --> 00:03:04,027 Khá hay ho phải không. Để tôi click thêm vài lần nữa xem sao nhé. 31 00:03:04,027 --> 00:03:10,690 Như các bạn thấy, mỗi lần click chuột, chương trình sẽ vẽ quả bóng thứ ba tại vị trí click. 32 00:03:10,690 --> 00:03:18,938 Đó là bởi ta đang liên tục ghi đè lên phần tử số 2. 33 00:03:18,938 --> 00:03:22,898 Ta đang ghi đè với mouseX hiện tại. 34 00:03:22,898 --> 00:03:34,574 Vì vậy ta sẽ mãi mãi chỉ có 3 quả bóng bay vì ta đã có một quả số 0, một quả số 1, và đang liên tục thay đổi quả số 2. Đúng không? 35 00:03:34,574 --> 00:03:40,235 Thú vị đấy, nhưng cái ta muốn là người sử dụng có thể tạo hàng đống bóng bay mà. 36 00:03:40,235 --> 00:03:43,524 Sao cho mỗi lần người sử dụng click chuột sẽ có một quả bóng bay mới. 37 00:03:43,524 --> 00:03:50,852 Điều đó có nghĩa là ta phải liên tục gia tăng chỉ số phần tử mảng đang lưu trữ. 38 00:03:50,852 --> 00:03:56,106 Ta không muốn mỗi lần click chuột đều là số 2 nữa, mà phải là 2, sau đó là 3, rồi 4, rồi 5, rồi 6, v.v. 39 00:03:56,106 --> 00:04:01,019 Ta có thể làm điều đó bằng cách thêm một biến đếm. Ta nhập newInd = 2; 40 00:04:01,019 --> 00:04:05,523 Đó là khởi đầu, sau đó ta sẽ nhập newInd thay cho 2. 41 00:04:05,523 --> 00:04:10,270 Và cuối cùng ta nhập newInd ++ 42 00:04:10,270 --> 00:04:16,231 Như vậy với mỗi lần lặp ta cộng 1 vào newInd. Ta sẽ bắt đầu với 2, sau đó là 3, rồi kế đến là 4. 43 00:04:16,231 --> 00:04:18,473 Mỗi khi người sử dụng click chuột, biến sẽ tăng dần. Ta cùng thử nhé. 44 00:04:18,473 --> 00:04:22,009 Ta-da! Một đống bóng bay. Tiệc bóng bay nào.Woo! 45 00:04:22,009 --> 00:04:32,108 Hay ho thật đấy. Nhưng đó vẫn chưa phải cách tối ưu bởi ta còn muốn thêm rất rất nhiều phần tử vào mảng. 46 00:04:32,108 --> 00:04:35,023 Vì thế ta còn một cách thậm chí còn đơn giản hơn nữa. 47 00:04:35,023 --> 00:04:42,768 Để tôi xóa những gì chúng ta vừa làm đã. Được rồi, ta không cần cái đó, thực ra cũng chẳng cần nữa. Ta sẽ cho vào chú thích thôi. 48 00:04:42,768 --> 00:04:50,996 Được rồi, cái chúng ta cần làm là nhập xPositions.push và mouseX. 49 00:04:50,996 --> 00:04:56,573 Như vậy ta đang gọi phương thức này vào mảng xPositions. 50 00:04:56,573 --> 00:05:05,232 Cái ta gọi giống như một câu lệnh trong mảng. Ta ra lệnh cho mảng, “Này, hãy đẩy giá trị mới mouseX này tới cuối mảng đi.” 51 00:05:05,232 --> 00:05:12,467 Và với mỗi lần gọi, mỗi lần người sử dụng click chuột, chương trình sẽ tìm mouseX và đẩy nó xuống cuối mảng. 52 00:05:12,467 --> 00:05:16,768 Từ đó mảng sẽ ngày càng lớn dần. Ta cùng thử lại từ đầu nhé. 53 00:05:16,768 --> 00:05:22,684 Ta-da, thành công rồi! Đỡ phải viết mã hơn rất nhiều đúng không? 54 00:05:22,684 --> 00:05:27,630 Hầu hết thời gian ta sẽ muốn sử dụng push khi cần thêm phần tử cho mảng như ví dụ này. 55 00:05:27,630 --> 00:05:32,182 Đồng thời cũng sẽ khá gọn gàng vì ta chỉ có một mảng này phát triển trong chương trình thôi. 56 00:05:32,182 --> 00:05:36,017 Giống như khi ta sử dụng animation hay muốn người sử dụng thực hiện các thao tác, từ đó ta có thể làm nhiều thứ hơn nữa. 57 00:05:36,017 --> 00:05:41,295 Hiện tại các bạn đã tìm hiểu được 90% công dụng của mảng cũng như cách thức sử dụng mảng. 58 00:05:41,295 --> 00:05:47,021 Nhưng ta vẫn có thể áp dụng nhiều hơn nữa đối với mảng. Nếu có bất kỳ câu hỏi nào, đừng ngần ngại đưa ra trong phần thảo luận. 59 00:05:47,021 --> 00:00:00,000 Nhưng hãy đảm bảo mình nắm vững được kiến thức cơ bản đã.