[Game Maker Adventure] Chương 009: Bool và Operator bí kíp!
Tóm tắt chương trước
Bạn tìm thấy Kurobo và trở thành chủ nhân của nó.
Số nhiệm vụ của bạn đang dần nhiều lên. Thế giới trong sách cũng khó hơn trước nhiều…
Kiến thức chương này
- Bool có 2 giá trị true và false. Thường được sử dụng để kiểm tra điều kiện.
- Comparison Operator return bool.
- Logical Negation Operator (!) phủ định lại bool phía sau nó.
- Có thể kiểm tra nhiều điều kiện cùng lúc thông qua AND Operator (&&) và OR Operator (||).
- Không nên kiểm tra quá nhiều điều kiện cùng lúc, tính dễ đọc phải được ưu tiên hàng đầu.
Cốt truyện
“Bíp bíp. Đột nhiên Kurobo không cảm thấy tín hiệu sống từ chủ nhân”
“Khởi động tìm kiếm nâng cao: Thất bại.”
Bạn giải thích về cuốn cổ thư với Kurobo.
Dường như thế giới trong sách không chỉ đơn giản đưa bạn vào một chiều không gian khác. Kurobo không thể tìm thấy bạn chứng tỏ thế giới trong sách đã cô lập bạn hoàn toàn.
Thế giới có thật nhiều bí ẩn.
Dù sao, hãy tiếp tục nâng cao năng lực của bản thân nào!
Kiểu dữ liệu: Bool
Bool là một kiểu dữ liệu chỉ có 2 giá trị: true và false. True là đúng và False là sai. Bool thường được sử dụng để kiểm tra điều kiện trong if statement. Chẳng hạn:
if (true) Console.WriteLine("TRUE!");
Đoạn code này được dịch ra là: nếu điều kiện trong ngoặc là đúng thì in ra màn hình “TRUE!”. Bởi vì true
luôn luôn là đúng, nên đoạn code sẽ in ra “TRUE!”.
Ngược lại, nếu thay true
thành false
if (false) Console.WriteLine("TRUE!");
Đoạn code trên được dịch ra là: nếu điều kiện trong ngoặc là đúng thì in ra màn hình “TRUE!”. Bởi vì false
luôn luôn là sai, nên sẽ không có gì được in ra màn hình cả.
Đây là hình thái cơ bản nhất của if statement.
Các toán tử so sánh (Comparison Operator) như ==, !=, <=, >=, <, >… cũng return bool. Hai đoạn code dưới đây về cơ bản là giống nhau.
//Style 1
bool isUnderZero = (-10 < 0);
if (isUnderZero) Console.WriteLine("Under Zero");
//Style 2
if (-10 < 0) Console.WriteLine("Under Zero");
Trong game, bool cũng thường được sử dụng để kiểm tra các điều kiện hay trạng thái của nhân vật. Chẳng hạn, nếu nhân vật chạm đất thì mới có thể nhảy:
bool isGround = true;
if (isGround)
{
Console.WriteLine("Jump!");
isGround = false;
}
Hoặc kiểm tra nhân vật còn sống không để hiển thị màn hình menu.
bool isAlive = true;
if (isAlive)
{
Console.WriteLine("Fight till die!");
}
else
{
Console.WriteLine("Your life is over.");
Console.WriteLine("Press any key to continue.");
}
Ngoài ra, bạn có thể đọc thêm về bool và binary tại bài viết này.
Operator bí kíp
Logical Negation Operator (!)
Logical Negation Operator (toán tử phủ định) là toán tử dạng Unary (trong trường hợp bạn đã quên hãy xem lại Chương 5), sử dụng để phủ định lại logic sau nó. Nếu logic trước nó là true thì return false, nếu là false thì return true.
Ta có một số thí dụ như sau:
if (!false) Console.WriteLine("TRUE");
!false
return true nên đoạn code in “TRUE” ra màn hình.
bool isDead = false;
if (isDead) Console.WriteLine("DEAD");
else if (!isDead) Console.WriteLine("Alive");
!isDead
return true do isDead ban đầu là false. Đoạn code in “Alive” ra màn hình.
bool isDead = false;
if (!!!isDead) Console.WriteLine("DEAD");
!!!isDead
return true do isDead ban đầu là false và bị phủ định 3 lần.
AND Operator (&&)
AND Operator hay là toán tử VÀ, là một toán tử nối các điều kiện với nhau để return lại true hoặc false. <điều kiện a> && <điều kiện b>
return true nếu cả <điều kiện a>
VÀ <điều kiện b>
cùng return true. Nếu một trong hai điều kiện return false thì kết quả cuối cùng sẽ return false.
Ta có một số thí dụ sau:
if (true && true) Console.WriteLine("TRUE");
true && true
return true do cả 2 điều kiện đều đã true.
bool conditionA = true;
bool conditionB = true;
if (conditionA && conditionB) Console.WriteLine("TRUE");
conditionA && conditionB
return true do khởi tạo của chúng là true.
bool conditionA = true;
bool conditionB = true;
bool conditionC = false;
if (conditionA && conditionB && conditionC) Console.WriteLine("TRUE");
conditionA && conditionB && conditionC
return false do conditionC false.
Toán tử AND rất quan trọng, chúng thường được dùng để kiểm tra nhiều điều kiện cùng lúc. Chẳng hạn để kiểm tra xem người chơi có thể đánh được màn nào đó hay không, ta có thể thực hiện kiểm tra level VÀ đồ của họ xem chúng có thoả mãn yêu cầu tối thiểu hay không.
OR Operator (||)
OR Operator hay là toán tử HOẶC. Tương tự với AND (&&), OR (||) cũng là một toán tử nối các điều kiện với nhau để return true hoặc false. <điều kiện a> || <điều kiện b>
return true khi có ít nhất một điều kiện return true.
Dấu || được viết bằng cách giữ SHIFT + \ (nằm trên phím Enter/Return).
Ta có một số thí dụ sau:
if (true || false) Console.WriteLine("TRUE");
true || false
return true do 1 điều kiện đã true.
bool conditionA = true;
bool conditionB = false;
if (conditionA || conditionB) Console.WriteLine("TRUE");
conditionA || conditionB
return true do 1 điều kiện true.
bool conditionA = true;
bool conditionB = false;
bool conditionC = false;
if (conditionA || conditionB || conditionC) Console.WriteLine("TRUE");
conditionA || conditionB || conditionC
return true.
Ngoài ra, ta có thể kết hợp OR (||), AND (&&) và Negation (!) với nhau để kiểm tra điều kiện.
bool isDead = true;
bool isHPUnder30 = true;
bool isMPUnder50 = true;
if (!isDead && (isHPUnder30 || !isMPUnder50))
{
Console.WriteLine("Active Ultimate!");
}
Đoạn code được dịch ra là: Nếu nhân vật không chết và có dưới 30HP hoặc trên 50MP thì sẽ kích hoạt Ultimate.
Chú ý: khi kết hợp các điều kiện với nhau, code sẽ trở nên rất khó đọc nên hãy hạn chế kết hợp quá 3 điều kiện hoặc phải có Comment và dấu ngoặc đơn rõ ràng.
Dưới đây là một thí dụ về code khó hiểu cần tránh:
bool isDead = true;
bool isHPUnder30 = true;
bool isMPUnder50 = true;
if (!isDead && isHPUnder30 || !isMPUnder50)
{
Console.WriteLine("Active Ultimate!");
}
Chỉ bỏ đi dấu ngoặc đơn thôi là không ai còn hiểu được gì nữa, hãy thật chú ý nhé.
Quest: Mở khoá năng lực
*bíp bíp*
Để mở khoá năng lực mới của Kurobo, hãy hoàn thành nhiệm vụ bên dưới.
Quest ✦✧✧✧✧
Hãy hoàn thành các câu hỏi dưới đây trước khi sang chương kế nhé.
Chương Trước | Tổng quan | Chương Kế (Boss Battle)