Chúng ta sẽ trở lại với Winston.
Giờ ta có cả biến 'x' và 'y' dành cho
vị trí của Winston.
Vì vậy, ta có thể di chuyển anh ta sang hai bên,
lên và xuống, woo!
Đẹp quá.
Bây giờ, hãy thiết lập lại giá trị các biến
thành 200 và 200
và xem lại cách chương trình hoạt động.
Vì vậy, từ chỗ này, ta đã có biến 'eyeSize'.
Nó dùng để điều chỉnh kích thước mắt,
bởi vì đôi mắt có chiều rộng 40 pixel
và cao 40 pixel.
Và rồi ta có các biến 'x' và 'y',
và đó là vị trí của tâm điểm khuôn mặt.
Và ta có thể thấy chúng được dùng
trong lệnh ellipse
để vẽ một vòng tròn lớn màu vàng.
Và sau đó ở dưới đây,
dành cho đôi mắt,
'x' và 'y' lại được dùng.
Và đây nữa,
đôi mắt được đặt ở vị trí
tương quan với tâm điểm của khuôn mặt.
Vì vậy, có lẽ nó lệch
50 pixel
về phía bên trái của tâm điểm
và cái này lệch 100 pixel
về phía bên phải của tâm điểm.
OK. Khá ổn.
và đó là lý do tại sao ta có thể
di chuyển Winston lên xuống.
Bây giờ, tôi còn muốn điều chỉnh
nhiều hơn cho khuôn mặt của Winston
với các biến.
Nhưng tôi vẫn muốn xem
còn thứ gì khác, trong một chương trình,
mà ta có thể dùng biến để lưu trữ nữa.
Để làm được điều đó
tôi sẽ xem
từng dòng code
và tìm kiếm thứ gọi là
các giá trị hard-code (code cứng).
Đó là những con số,
chỉ riêng số mà thôi,
không phải biến hay phụ thuộc vào biến.
Hãy bắt đầu từ đây,
trong lần gọi lệnh ellipse đầu tiên,
ta có 300 và 300
ứng với chiều rộng và chiều cao.
Đó chỉ là những con số
nên hãy tạo một biến
để thay thế cho những giá trị đó
với tên là faceSize.
Và nó lưu giá trị là 300.
Giờ ta sẽ viết faceSize,
faceSize.
OK. Ta tiếp tục.
và bỏ qua phần màu sắc.
Giờ câu lệnh ellipse cũng vậy.
Chúng đều là biến hoặc
phụ thuộc vào biến
vì vậy tạm thời
ta sẽ để chúng như vậy.
Và sau đó là lệnh mouth
cũng phụ thuộc vào 'x' và 'y'
nhưng những gì ở đây
lại chỉ là những con số độc lập
150 và 150.
Như vậy ta sẽ có
mouthSize, một cái tên hay đấy,
bằng 150.
Ta sẽ thay thế chỗ này bằng mouthSize
và mouthSize.
Được rồi.
Ta lưu kích thước của các hình vẽ
trong các biến ở trên cùng
để ta có thể thực sự dễ dàng
thay đổi kích thước
như thế này, như thế này...
Wooo Winston đang đói
và sau đó kiểu như, bạn biết đấy,
Winston đói và
rồi anh ta ăn rất nhiều bánh rán
và sau đó trở nên siêu bự.
Ổn rồi.
nhưng có điều gì đó
tôi không thích ở chương trình vào lúc này.
Nếu tôi để kích thước khuôn mặt rất nhỏ
thì nó bắt đầu trông buồn cười
vì mắt và miệng
đang nhô ra khỏi mặt
và tại một số điểm nhất định, nó thậm chí
trông chả liên quan gì
tới khuôn mặt,
hay nó không còn là một khuôn mặt nữa, phải không?
Vì vậy, ta thực muốn nó xảy ra
là khi thay đổi khuôn mặt
ta muốn mắt và miệng -
kích thước của chúng thay đổi theo.
Vì vậy, nếu tôi đặt FaceSize là một nửa kích thước.
Ta muốn miệng cũng bằng một nửa kích thước.
Như vậy, nghĩa là,
ta muốn tính toán mouthSize và eyeSize
bằng vài phần của faceSize.
Được rồi, hãy thiết lập lại các biến này
và tôi sẽ cho bạn thấy tôi có ý gì.
Hãy bắt đầu với mouthSize.
Hiện giờ
faceSize có kích thước là 300 và mouthSize là 150.
Vì vậy, nếu ta nghĩ về
sự tương quan của chúng,
ta sẽ nói rằng faceSize lớn gấp đôi
mouthSize
hoặc mouthSize lớn bằng một nửa
của faceSize.
Và ta có thể viết code như sau
1/2 faceSize.
OK. Dòng code này nói
rằng ta lấy giá trị của faceSize
nhân nó với 1/2
và lưu vào biến mouthSize
để nếu ta thay đổi cái này ở đây
nó sẽ biết một nửa giá trị đó là gì
và đó chính là mouthSize.
Hoàn hảo! Đó là những gì ta muốn
Như vậy, bây giờ đến lượt eyeSize,
faceSize có giá trị là 300
và eyeSize là 40.
Như vậy ta cần nó nhận giá trị
40/300 của faceSize.
tức là, xem nào
4/30, ta có thể
tối giản thàn 2/15.
Như vậy ta có
2/15 lần faceSize.
Nhân đây,
nếu bạn chưa quen với phân số
và phần tính toán số học trên làm khó bạn,
hãy tìm hiểu thêm về phân số
trên Khan Academy
và quay lại đây khi bạn
cảm thấy sẵn sàng.
Ở đây này, bạn chỉ cần truy cập vào đó.
OK.
Như vậy, hãy thử thay đổi kích thước khuôn mặt một lần nữa.
Haha! Kiểm tra nó
miệng và mắt thay đổi kích thước
cân xứng với khuôn mặt.
Nhưng ta nhận thấy
có gì đó không đúng ở đây.
Mắt và miệng
vẫn còn nhô ra khỏi khuôn mặt
dù cho chúng có
kích thước hợp lý hơn nhiều.
Đó là bởi vì ta vẫn còn
một số phần hard-code
trong các lệnh ellipse của mình.
Những con sô đó thực sự cần phải
được thay thế bằng tỷ lệ với các biến.
Ở đây, tôi sẽ chỉ cho bạn.
Như vậy, đối với hình elip vẽ mắt ta có
x - 50 để ra vị trí 'x'
Điều này có nghĩa là nó luôn luôn bằng 'x - 50'.
Ngay cả khi ta đặt faceSize
nhỏ hơn 50 pixel.
Và nó chắc chắn không có ý nghĩa
bởi vì điều đó có nghĩa là
mắt trái sẽ
Vì vậy nó phải là x trừ đi 1 phần
kích thước khuôn mặt
và ta có thể tìm ra phân số
theo cùng một cách.
50 so với 300 ban đầu.
50/300, 5/30, 1/6.
Như vậy, 1/6 của faceSize.
Và ta thấy con số 50 khác ở đây
vì vậy ta có thể làm điều tương tự
cùng một biểu thức.
Ở đây ta có 100/300
tức là
1/3 faceSize,
cái này là 60.
Như vậy cuối cùng sẽ
là 1/5 lần faceSize
Và đây là 50
vậy là 1/6 nữa.
Và sau đó 40.
Đó là những gì ta đã tìm ra ở đây,
2/15.
Như vậy, 2/15 lần faceSize.
Được rồi, hãy thử lại xem.
Ồ, nhìn kìa!
Hãy nhìn xem. Đẹp quá!
Tuyệt rồi!
OK, hãy cùng xem lại nhé.
Ta đã tạo ra biến này
để lưu kích thước của khuôn mặt
và nó lưu giữ một giá trị
rồi ta có các biến mouthSize
và eyeSize
và ta tính toán chúng dựa trên tỷ lệ
với faceSize
để chắc chắn rằng
giá trị của chúng luôn thay đổi
theo giá trị khởi điểm (faceSize)
vì tất cả các giá trị còn lại được tính toán
cũng dựa trên faceSize
để đảm bảo rằng vị trí
các bộ phận trên khuôn mặt thay đổi
khi faceSize thay đổi
Whoo! Ổn rồi.
Như vậy, giờ ta đã thực sự hiểu
cách làm cho các biến
phụ thuộc vào giá trị của biến khác.
Ta còn có thể làm nhiều hơn nữa với những chương trình mình.
Hãy ăn mừng bằng cách làm Winston
trở nên khổng lồ! Yeah, đi nào Winston!