1 00:00:00,000 --> 00:00:02,246 Chúng ta sẽ trở lại với Winston. 2 00:00:02,417 --> 00:00:05,743 Giờ ta có cả biến 'x' và 'y' dành cho 3 00:00:05,801 --> 00:00:07,257 vị trí của Winston. 4 00:00:07,397 --> 00:00:09,240 Vì vậy, ta có thể di chuyển anh ta sang hai bên, 5 00:00:10,075 --> 00:00:11,741 lên và xuống, woo! 6 00:00:12,088 --> 00:00:13,328 Đẹp quá. 7 00:00:13,680 --> 00:00:15,866 Bây giờ, hãy thiết lập lại giá trị các biến 8 00:00:16,056 --> 00:00:19,227 thành 200 và 200 9 00:00:19,315 --> 00:00:21,995 và xem lại cách chương trình hoạt động. 10 00:00:22,553 --> 00:00:25,763 Vì vậy, từ chỗ này, ta đã có biến 'eyeSize'. 11 00:00:25,763 --> 00:00:27,813 Nó dùng để điều chỉnh kích thước mắt, 12 00:00:27,815 --> 00:00:29,766 bởi vì đôi mắt có chiều rộng 40 pixel 13 00:00:29,766 --> 00:00:32,426 và cao 40 pixel. 14 00:00:32,470 --> 00:00:35,437 Và rồi ta có các biến 'x' và 'y', 15 00:00:35,437 --> 00:00:39,127 và đó là vị trí của tâm điểm khuôn mặt. 16 00:00:39,843 --> 00:00:41,113 Và ta có thể thấy chúng được dùng 17 00:00:41,113 --> 00:00:42,729 trong lệnh ellipse 18 00:00:42,729 --> 00:00:44,579 để vẽ một vòng tròn lớn màu vàng. 19 00:00:45,921 --> 00:00:47,422 Và sau đó ở dưới đây, 20 00:00:47,422 --> 00:00:48,617 dành cho đôi mắt, 21 00:00:48,617 --> 00:00:50,427 'x' và 'y' lại được dùng. 22 00:00:50,731 --> 00:00:51,951 Và đây nữa, 23 00:00:52,009 --> 00:00:53,669 đôi mắt được đặt ở vị trí 24 00:00:54,048 --> 00:00:55,778 tương quan với tâm điểm của khuôn mặt. 25 00:00:55,787 --> 00:00:57,877 Vì vậy, có lẽ nó lệch 26 00:00:58,026 --> 00:00:58,996 50 pixel 27 00:00:59,293 --> 00:01:00,933 về phía bên trái của tâm điểm 28 00:01:01,528 --> 00:01:03,428 và cái này lệch 100 pixel 29 00:01:03,455 --> 00:01:05,005 về phía bên phải của tâm điểm. 30 00:01:05,149 --> 00:01:07,829 OK. Khá ổn. 31 00:01:07,865 --> 00:01:09,365 và đó là lý do tại sao ta có thể 32 00:01:09,395 --> 00:01:11,195 di chuyển Winston lên xuống. 33 00:01:11,236 --> 00:01:13,192 Bây giờ, tôi còn muốn điều chỉnh 34 00:01:13,212 --> 00:01:15,202 nhiều hơn cho khuôn mặt của Winston 35 00:01:15,202 --> 00:01:16,662 với các biến. 36 00:01:16,662 --> 00:01:17,912 Nhưng tôi vẫn muốn xem 37 00:01:17,912 --> 00:01:19,339 còn thứ gì khác, trong một chương trình, 38 00:01:19,339 --> 00:01:20,669 mà ta có thể dùng biến để lưu trữ nữa. 39 00:01:20,669 --> 00:01:21,449 Để làm được điều đó 40 00:01:21,449 --> 00:01:22,638 tôi sẽ xem 41 00:01:22,638 --> 00:01:23,608 từng dòng code 42 00:01:23,622 --> 00:01:25,122 và tìm kiếm thứ gọi là 43 00:01:25,157 --> 00:01:27,447 các giá trị hard-code (code cứng). 44 00:01:27,658 --> 00:01:29,308 Đó là những con số, 45 00:01:29,388 --> 00:01:30,648 chỉ riêng số mà thôi, 46 00:01:30,723 --> 00:01:33,413 không phải biến hay phụ thuộc vào biến. 47 00:01:34,277 --> 00:01:35,377 Hãy bắt đầu từ đây, 48 00:01:35,432 --> 00:01:37,002 trong lần gọi lệnh ellipse đầu tiên, 49 00:01:37,832 --> 00:01:39,222 ta có 300 và 300 50 00:01:39,262 --> 00:01:41,062 ứng với chiều rộng và chiều cao. 51 00:01:41,584 --> 00:01:43,794 Đó chỉ là những con số 52 00:01:43,794 --> 00:01:45,114 nên hãy tạo một biến 53 00:01:45,114 --> 00:01:46,214 để thay thế cho những giá trị đó 54 00:01:46,214 --> 00:01:47,754 với tên là faceSize. 55 00:01:48,791 --> 00:01:50,291 Và nó lưu giá trị là 300. 56 00:01:50,291 --> 00:01:53,201 Giờ ta sẽ viết faceSize, 57 00:01:53,709 --> 00:01:55,259 faceSize. 58 00:01:55,514 --> 00:01:56,794 OK. Ta tiếp tục. 59 00:01:56,868 --> 00:01:58,108 và bỏ qua phần màu sắc. 60 00:01:58,156 --> 00:02:00,076 Giờ câu lệnh ellipse cũng vậy. 61 00:02:00,104 --> 00:02:01,504 Chúng đều là biến hoặc 62 00:02:01,544 --> 00:02:02,704 phụ thuộc vào biến 63 00:02:02,726 --> 00:02:03,896 vì vậy tạm thời 64 00:02:03,896 --> 00:02:04,846 ta sẽ để chúng như vậy. 65 00:02:04,859 --> 00:02:06,729 Và sau đó là lệnh mouth 66 00:02:07,419 --> 00:02:09,339 cũng phụ thuộc vào 'x' và 'y' 67 00:02:09,339 --> 00:02:10,369 nhưng những gì ở đây 68 00:02:10,417 --> 00:02:11,947 lại chỉ là những con số độc lập 69 00:02:12,899 --> 00:02:14,669 150 và 150. 70 00:02:14,799 --> 00:02:16,139 Như vậy ta sẽ có 71 00:02:16,223 --> 00:02:18,953 mouthSize, một cái tên hay đấy, 72 00:02:19,026 --> 00:02:20,476 bằng 150. 73 00:02:22,464 --> 00:02:25,264 Ta sẽ thay thế chỗ này bằng mouthSize 74 00:02:25,301 --> 00:02:27,481 và mouthSize. 75 00:02:27,556 --> 00:02:28,816 Được rồi. 76 00:02:28,861 --> 00:02:30,751 Ta lưu kích thước của các hình vẽ 77 00:02:30,825 --> 00:02:32,725 trong các biến ở trên cùng 78 00:02:32,773 --> 00:02:34,543 để ta có thể thực sự dễ dàng 79 00:02:34,543 --> 00:02:36,093 thay đổi kích thước 80 00:02:36,103 --> 00:02:36,933 như thế này, như thế này... 81 00:02:36,933 --> 00:02:39,163 Wooo Winston đang đói 82 00:02:39,257 --> 00:02:41,157 và sau đó kiểu như, bạn biết đấy, 83 00:02:41,157 --> 00:02:42,747 Winston đói và 84 00:02:42,761 --> 00:02:44,291 rồi anh ta ăn rất nhiều bánh rán 85 00:02:44,291 --> 00:02:45,931 và sau đó trở nên siêu bự. 86 00:02:45,962 --> 00:02:47,532 Ổn rồi. 87 00:02:47,542 --> 00:02:48,982 nhưng có điều gì đó 88 00:02:49,037 --> 00:02:51,347 tôi không thích ở chương trình vào lúc này. 89 00:02:51,863 --> 00:02:59,303 Nếu tôi để kích thước khuôn mặt rất nhỏ 90 00:02:59,404 --> 00:03:01,064 thì nó bắt đầu trông buồn cười 91 00:03:01,076 --> 00:03:03,006 vì mắt và miệng 92 00:03:03,017 --> 00:03:04,667 đang nhô ra khỏi mặt 93 00:03:04,667 --> 00:03:06,717 và tại một số điểm nhất định, nó thậm chí 94 00:03:06,717 --> 00:03:07,887 trông chả liên quan gì 95 00:03:07,887 --> 00:03:08,667 tới khuôn mặt, 96 00:03:08,667 --> 00:03:10,707 hay nó không còn là một khuôn mặt nữa, phải không? 97 00:03:11,629 --> 00:03:13,959 Vì vậy, ta thực muốn nó xảy ra 98 00:03:13,959 --> 00:03:16,309 là khi thay đổi khuôn mặt 99 00:03:16,309 --> 00:03:18,299 ta muốn mắt và miệng - 100 00:03:18,354 --> 00:03:21,584 kích thước của chúng thay đổi theo. 101 00:03:21,584 --> 00:03:23,994 Vì vậy, nếu tôi đặt FaceSize là một nửa kích thước. 102 00:03:24,144 --> 00:03:27,454 Ta muốn miệng cũng bằng một nửa kích thước. 103 00:03:27,454 --> 00:03:29,044 Như vậy, nghĩa là, 104 00:03:29,519 --> 00:03:32,589 ta muốn tính toán mouthSize và eyeSize 105 00:03:32,589 --> 00:03:35,929 bằng vài phần của faceSize. 106 00:03:36,690 --> 00:03:39,790 Được rồi, hãy thiết lập lại các biến này 107 00:03:39,790 --> 00:03:42,060 và tôi sẽ cho bạn thấy tôi có ý gì. 108 00:03:42,061 --> 00:03:44,221 Hãy bắt đầu với mouthSize. 109 00:03:44,221 --> 00:03:45,141 Hiện giờ 110 00:03:45,172 --> 00:03:49,512 faceSize có kích thước là 300 và mouthSize là 150. 111 00:03:50,187 --> 00:03:51,727 Vì vậy, nếu ta nghĩ về 112 00:03:51,727 --> 00:03:53,007 sự tương quan của chúng, 113 00:03:53,007 --> 00:03:55,907 ta sẽ nói rằng faceSize lớn gấp đôi 114 00:03:55,907 --> 00:03:57,577 mouthSize 115 00:03:57,577 --> 00:04:00,137 hoặc mouthSize lớn bằng một nửa 116 00:04:00,137 --> 00:04:01,357 của faceSize. 117 00:04:01,432 --> 00:04:03,872 Và ta có thể viết code như sau 118 00:04:04,063 --> 00:04:08,063 1/2 faceSize. 119 00:04:08,133 --> 00:04:09,703 OK. Dòng code này nói 120 00:04:09,703 --> 00:04:11,873 rằng ta lấy giá trị của faceSize 121 00:04:11,873 --> 00:04:13,113 nhân nó với 1/2 122 00:04:13,113 --> 00:04:15,393 và lưu vào biến mouthSize 123 00:04:15,674 --> 00:04:17,494 để nếu ta thay đổi cái này ở đây 124 00:04:18,029 --> 00:04:20,259 nó sẽ biết một nửa giá trị đó là gì 125 00:04:20,273 --> 00:04:22,353 và đó chính là mouthSize. 126 00:04:22,353 --> 00:04:24,073 Hoàn hảo! Đó là những gì ta muốn 127 00:04:24,848 --> 00:04:26,948 Như vậy, bây giờ đến lượt eyeSize, 128 00:04:27,268 --> 00:04:28,908 faceSize có giá trị là 300 129 00:04:29,168 --> 00:04:31,039 và eyeSize là 40. 130 00:04:31,039 --> 00:04:33,219 Như vậy ta cần nó nhận giá trị 131 00:04:33,219 --> 00:04:36,639 40/300 của faceSize. 132 00:04:36,639 --> 00:04:39,459 tức là, xem nào 133 00:04:39,459 --> 00:04:41,138 4/30, ta có thể 134 00:04:41,138 --> 00:04:43,768 tối giản thàn 2/15. 135 00:04:44,295 --> 00:04:45,605 Như vậy ta có 136 00:04:45,609 --> 00:04:49,609 2/15 lần faceSize. 137 00:04:50,111 --> 00:04:50,911 Nhân đây, 138 00:04:50,949 --> 00:04:52,459 nếu bạn chưa quen với phân số 139 00:04:52,459 --> 00:04:54,279 và phần tính toán số học trên làm khó bạn, 140 00:04:54,352 --> 00:04:56,422 hãy tìm hiểu thêm về phân số 141 00:04:56,422 --> 00:04:57,562 trên Khan Academy 142 00:04:57,562 --> 00:04:59,562 và quay lại đây khi bạn 143 00:04:59,562 --> 00:05:00,442 cảm thấy sẵn sàng. 144 00:05:00,442 --> 00:05:01,912 Ở đây này, bạn chỉ cần truy cập vào đó. 145 00:05:02,752 --> 00:05:03,532 OK. 146 00:05:03,532 --> 00:05:06,442 Như vậy, hãy thử thay đổi kích thước khuôn mặt một lần nữa. 147 00:05:06,925 --> 00:05:08,155 Haha! Kiểm tra nó 148 00:05:08,155 --> 00:05:10,015 miệng và mắt thay đổi kích thước 149 00:05:10,015 --> 00:05:11,655 cân xứng với khuôn mặt. 150 00:05:11,975 --> 00:05:13,495 Nhưng ta nhận thấy 151 00:05:13,495 --> 00:05:14,875 có gì đó không đúng ở đây. 152 00:05:14,875 --> 00:05:16,565 Mắt và miệng 153 00:05:16,572 --> 00:05:19,162 vẫn còn nhô ra khỏi khuôn mặt 154 00:05:19,162 --> 00:05:20,502 dù cho chúng có 155 00:05:20,502 --> 00:05:22,612 kích thước hợp lý hơn nhiều. 156 00:05:23,206 --> 00:05:24,906 Đó là bởi vì ta vẫn còn 157 00:05:24,906 --> 00:05:26,626 một số phần hard-code 158 00:05:26,626 --> 00:05:28,396 trong các lệnh ellipse của mình. 159 00:05:28,396 --> 00:05:30,376 Những con sô đó thực sự cần phải 160 00:05:30,376 --> 00:05:32,656 được thay thế bằng tỷ lệ với các biến. 161 00:05:33,148 --> 00:05:34,578 Ở đây, tôi sẽ chỉ cho bạn. 162 00:05:34,669 --> 00:05:37,799 Như vậy, đối với hình elip vẽ mắt ta có 163 00:05:37,799 --> 00:05:40,819 x - 50 để ra vị trí 'x' 164 00:05:40,838 --> 00:05:43,278 Điều này có nghĩa là nó luôn luôn bằng 'x - 50'. 165 00:05:43,443 --> 00:05:45,133 Ngay cả khi ta đặt faceSize 166 00:05:45,133 --> 00:05:46,843 nhỏ hơn 50 pixel. 167 00:05:46,843 --> 00:05:48,063 Và nó chắc chắn không có ý nghĩa 168 00:05:48,063 --> 00:05:49,783 bởi vì điều đó có nghĩa là 169 00:05:49,783 --> 00:05:50,461 mắt trái sẽ 170 00:05:52,441 --> 00:05:55,218 Vì vậy nó phải là x trừ đi 1 phần 171 00:05:55,218 --> 00:05:57,258 kích thước khuôn mặt 172 00:05:57,278 --> 00:05:59,218 và ta có thể tìm ra phân số 173 00:05:59,218 --> 00:06:00,148 theo cùng một cách. 174 00:06:00,148 --> 00:06:03,898 50 so với 300 ban đầu. 175 00:06:03,898 --> 00:06:07,898 50/300, 5/30, 1/6. 176 00:06:08,582 --> 00:06:11,952 Như vậy, 1/6 của faceSize. 177 00:06:12,440 --> 00:06:14,110 Và ta thấy con số 50 khác ở đây 178 00:06:14,400 --> 00:06:16,060 vì vậy ta có thể làm điều tương tự 179 00:06:16,060 --> 00:06:17,360 cùng một biểu thức. 180 00:06:17,360 --> 00:06:19,140 Ở đây ta có 100/300 181 00:06:19,460 --> 00:06:20,690 tức là 182 00:06:20,710 --> 00:06:23,220 1/3 faceSize, 183 00:06:23,220 --> 00:06:24,720 cái này là 60. 184 00:06:24,720 --> 00:06:26,080 Như vậy cuối cùng sẽ 185 00:06:26,080 --> 00:06:28,897 là 1/5 lần faceSize 186 00:06:29,267 --> 00:06:32,087 Và đây là 50 187 00:06:32,087 --> 00:06:34,457 vậy là 1/6 nữa. 188 00:06:34,457 --> 00:06:35,727 Và sau đó 40. 189 00:06:35,727 --> 00:06:38,257 Đó là những gì ta đã tìm ra ở đây, 190 00:06:38,257 --> 00:06:39,507 2/15. 191 00:06:39,507 --> 00:06:44,937 Như vậy, 2/15 lần faceSize. 192 00:06:45,347 --> 00:06:48,117 Được rồi, hãy thử lại xem. 193 00:06:48,117 --> 00:06:49,477 Ồ, nhìn kìa! 194 00:06:49,477 --> 00:06:51,257 Hãy nhìn xem. Đẹp quá! 195 00:06:51,268 --> 00:06:52,048 Tuyệt rồi! 196 00:06:52,617 --> 00:06:54,587 OK, hãy cùng xem lại nhé. 197 00:06:54,587 --> 00:06:56,117 Ta đã tạo ra biến này 198 00:06:56,130 --> 00:06:57,950 để lưu kích thước của khuôn mặt 199 00:06:57,950 --> 00:06:59,630 và nó lưu giữ một giá trị 200 00:06:59,630 --> 00:07:01,510 rồi ta có các biến mouthSize 201 00:07:01,510 --> 00:07:03,350 và eyeSize 202 00:07:03,350 --> 00:07:05,710 và ta tính toán chúng dựa trên tỷ lệ 203 00:07:05,710 --> 00:07:06,790 với faceSize 204 00:07:06,790 --> 00:07:07,770 để chắc chắn rằng 205 00:07:07,770 --> 00:07:09,500 giá trị của chúng luôn thay đổi 206 00:07:09,500 --> 00:07:12,360 theo giá trị khởi điểm (faceSize) 207 00:07:12,514 --> 00:07:15,104 vì tất cả các giá trị còn lại được tính toán 208 00:07:15,104 --> 00:07:16,894 cũng dựa trên faceSize 209 00:07:16,894 --> 00:07:18,454 để đảm bảo rằng vị trí 210 00:07:18,454 --> 00:07:19,884 các bộ phận trên khuôn mặt thay đổi 211 00:07:19,884 --> 00:07:22,064 khi faceSize thay đổi 212 00:07:22,064 --> 00:07:23,014 Whoo! Ổn rồi. 213 00:07:23,014 --> 00:07:24,614 Như vậy, giờ ta đã thực sự hiểu 214 00:07:24,614 --> 00:07:25,725 cách làm cho các biến 215 00:07:25,725 --> 00:07:27,865 phụ thuộc vào giá trị của biến khác. 216 00:07:27,865 --> 00:07:30,375 Ta còn có thể làm nhiều hơn nữa với những chương trình mình. 217 00:07:30,375 --> 00:07:32,365 Hãy ăn mừng bằng cách làm Winston 218 00:07:32,365 --> 00:00:00,000 trở nên khổng lồ! Yeah, đi nào Winston!