Chương 3. Biến và mảng
Biến và mảng rất cần thiết cho lập trình máy tính và
thiết kế game. Nếu không có chúng trò chơi sẽ không hoạt động.
Trong chương này chúng ta sẽ đề cập đến những vấn đề
sau:
- Biến là gì?
- Tại sao biến lại quan trọng?
- Các loại biến khác nhau trong C2?
- Học về mảng
Bài 1. Giới thiệu về các biến
Lập trình
máy tính dựa trên các nguyên tắc toán học. sau tất cả, cái máy tính đầu tiên được
lập trình để giải các phương trình, và sau đó các ứng dụng được phát triển. bạn
có thể đã nghe nói về các biến trong các lớp học toán. Trong máy tính, các biến
này rất cần thiết để tạo ứng dụng và chúng rất quan trọng trong các trò chơi.
Ngay cả một trò chơi độc lập nhỏ bé cũng có thể chứa hàng trăm biến.
Biến là nơi
bạn có thể lưu trữ một lượng nhỏ dữ liệu. những dữ liệu này có thể là một cái
tên, một con số, một ngày, một đối tượng trò chơi hoặc có thể là một thông tin
đúng hoặc sai. Các biến cần thiết cho trò chơi vì chúng lưu trữ các mục sau:
- Điểm
- Tên người chơi
- Đối tượng trò chơi
- Vị trí chuột
- Đầu vào bàn phím
Để lưu trữ
dữ liệu, bạn phải sử dụng đúng loại biến. chúng ta có thể suy nghĩ về các biến
như các hộp và những cái bạn đưa vào hộp này phụ thuộc vào loại hộp mà nó có.
Trong hầu hết
ngôn ngữ lập trình gốc, bạn phải khai báo một biến và kiểu của nó.
1. Biến số
Hãy đi qua
một vài loại chính của biến. đầu tiên là biến số. biến này chỉ lưu trữ số, ko
có chữ cái. Điều này có nghĩa là, nếu bạn cố đặt một cái tên trong nó “John
Bura”, nó sẽ không hoạt động.
2. Các biến số nguyên
Có rất nhiều
loại khác nhau của các biến số. các biến số nguyên, được gọi là bién Int, có thể là số nguyên dương và âm –
bạn không thể có số thập phân. Vì vậy, bạn có thể đặt -1 là một biến số nguyên chứ
không được đặt là 1,2.
3. Biến số thực
Các biến số
thực có thể là âm hoặc dương, và chúng cũng có thể là số thập phân. Một biến thực
có thể là 1,0; -40,4; 100,1 chẳng hạn.
Cũng có nhiều
loại biến số khác. Chúng được sử dụng trong các tình huống cụ thể hơn. Đối với
hầu hết các phần. biến số nguyên và số thực là những gì bạn cần biết – hãy chắc
chắn đừng lẫn lộn chúng. Nếu bạn chạy một ứng dụng với một loại không phù hợp,
rất có thể nó sẽ không hoạt động.
4. Biến chuỗi
Còn một loại
biến khác thực sự rất quan trọng. Loại biến này được gọi là biến chuỗi. biến
chuỗi bao gồm các chữ cái hoặc các từ. điều này có nghĩa là nếu bạn muốn ghi lại
tên các nhân vật, thì bạn phải sử dụng biến chuỗi. trong hầu hết các ngôn ngữ lập
trình, biến chuỗi phải ở trong dấu ngoặc kép, ví dụ “John Bura”. Các trích dẫn
báo cho máy tính biết rằng các kí tự bên trong thực sự là các chuỗi mà máy tính
có thể sử dụng.
Khi bạn đặt
một số 1 vào trong chuỗi, nó là số thực 1 hay chỉ là số giả? Đó chỉ là một số
giả vì đây không phải là số - chúng là chuỗi. mặc dù chuỗi hiển thị số 1, nhưng nó
không thực sự là số 1. Các chuỗi để hiển thị kí tự, và các số có nghĩa là để làm
toán. Chuỗi không có nghĩa là làm toán, chúng chỉ giữ các kí tự. nếu bạn cố gắng
làm toán với một chuỗi, nó sẽ không hoạt động (ngoại trừ trong JavaScript).
Chuỗi không nên được sử dụng cho tính toán – chúng chứa và hiển thị các nhân vật. nếu chúng ta
có chuỗi “1”, nó sẽ được ghi lại dưới dạng một kí tự thay vì một số nguyên có
thể được sử dụng cho tính toán.
5. Biến logic
Kiểu biến
cuối cùng mà ta cần nhắc đến đó chính là biến logic. Biến logic là biến đúng
hay sai, và chúng rất quan trọng khi làm game. Chúng được sử dụng khi có sự lựa
chọn. sau đây là ví dụ:
- isAlive
- isShooting
- isInAppPurchaseCompleted
- isConnectedToInternet
Hầu hết các
biến đều bắt đầu bằng các từ này. Điều này thường được sử dụng để biểu thị rằng
biến mà chúng ta đang sử dụng là một logic. Khi bạn tạo một trò chơi, bạn sẽ có xu
hướng tạo rất nhiều biến logic bởi vì có rất nhiều trạng thái mà đối tượng trò
chơi có thể có. Thông thường, các trạng thái này chỉ có 2 lựa chọn, và điều tốt
nhất đó chính là sử dụng một biến logic.
Đôi khi bạn
phải sử dụng một biến số nguyên thay vì logic. Thông thường thì 0 là sai còn 1
là đúng. Chúng ta sẽ sử dụng chúng trong C2 sau này.
6. Các biến khác
Khi nói về
sản xuất trò chơi, có rất nhiều các biến cụ thể khác nhau từ môi trường này đến
môi trường khác. Đôi khi, có các biến GameObject,
và cũng có thể là toàn bộ các biến cụ thể hơn.
Bài 2. Khai báo biến
Nếu bạn muốn
lưu trữ bất kì dữ liệu nào trong biến, trước tiên bạn phải khai báo chúng.
Trong backend của C2, có rất nhiều biến đã được khai báo cho bạn. điều này có
nghĩa là C2 đưa ra công việc khai báo biến. các biến được chăm sóc cho bạn bao
gồm:
- bàn phím
- vị trí chuột
- góc chuột
- loại trình duyệt web
Viết các biến trong đoạn mã
Khi chúng
ta sử dụng C2, có rất nhiều các công đoạn khó khăn đã được thực hiện cho chúng
ta. Vì vậy, ta sẽ khai báo biến trong code như thế nào? Thông thường, các biến
được khai báo ở đầu tài liệu mã hóa:
Int score;
Real
timescale = 1.2;
Bool
isDead;
Bool
isShooting = false;
String name
= "John Bura";
Hãy nhìn
vào chúng. Loại biến được liệt kê đầu tiên. Trong trường hợp này, chúng ta có
các biến Int, Real, Bool (Boolean), và String. Tiếp theo chúng ta có tên của biến.
nếu bạn cẩn thận, bạn có thể thấy các biến nhất định có 1 dấu = và một số thì
không có. Khi chúng ta có một biến với dấu bằng, chúng ta khởi tạo nó. Điều này
có nghĩa là chúng ta thiết lập thông tin trong nó ngay. Thỉnh thoảng bạn cần
làm điều này vào những lúc khác. Ví dụ, một điểm số không cần được khởi tạo bởi
vì chúng ta sẽ thay đổi điểm số khi trò chơi phát triển.
Như bạn đã
biết, bạn có thể khởi tạo một biến Boolean thành đúng hoặc sai – đây là 2 trạng
thái duy nhất một biến Boolean có thể được nhập. bạn cũng nhận thấy rằng có đầu
ngoặc kép ở biến chuỗi.
Đây là một
ví dụ bị lỗi:
Int score = -1.2;
Bool isDead = "false";
String name = John Bura;
Có một vài
thứ sai trong ví dụ này. Đầu tiên, biến Int
không được có thập phân. Thứ hai, biến Bool
có dấu ngoặc kép. Cuối cùng, biến String
không có ngoặc kép. Trong hầu hết các môi trường, điều này sẽ khiến chương trình không làm việc. tuy nhiên, trong HTML5 hoặc JavaScript, biến được thay đổi để phù hợp
với tình huống.
WAITING FOR LUV
Bạn có muốn cải thiện khả năng thiết kế đồ họa của mình? Chắc hẳn các bạn cũng biết, nếu các dòng code là linh hồn của một trò chơi, thì đồ họa chính là bộ mặt của trò chơi đó. Đồ họa đẹp, dễ nhìn sẽ khiến trò chơi của bạn tăng tỉ lệ hấp dẫn người xem đến 90%. Hiện tại có hai công cụ hỗ trợ thiết kế đồ họa game tiện nhất mà mình biết, đó là Photoshop và Illustrator. Mình sẽ cố gắng tìm kiếm và chia sẻ các đồ họa game miễn phí cho các bạn tại blog này; tuy nhiên,
một trò chơi mà 100% do chính mình tạo ra vẫn hơn là đi cóp nhặt hình ảnh từ nơi khác đúng không nào. Tiện đây, mình có chia sẻ một khóa học thiết kế đồ họa Game 2D cho Mobile. Các bạn có thể tham khảo dưới đây để được giảm 40% học phí nhé.
Bài 3. Biến trong JavaScript
C2 xuất
game sang HTML5, điều này có nghĩa là rất nhiều chức năng trong C2 được viết bằng
JavaScritpt (JS). Trong JS, loại của biến không được xác định cho đến khi bạn khởi
tạo nó. Mặc dù điều này làm JS trở nên dễ dàng hơn, nhưng nó cũng có ưu nhược
điểm. nhược điểm lớn nhất là đôi khi bạn quên rằng các biến thuộc loại nào, dẫn
đến kết quả không mong muốn khi chạy ứng dụng.
Kiểm tra mã JS
JS là một
ngôn ngữ web rất phổ biến. nó dễ dàng code hơn hầu hết các ngôn ngữ lập trình
khác.
Chúng ta hãy xem xét một số ví dụ về mã JS.
var score;
var
timescale = 1.2;
var name =
"John Bura";
var
playerName;
Bạn sẽ nhận
ra rằng tất cả các biến đơn giản được gọi là var thay vì Int, Bool, String
và Real. Điều này có nghĩa là, đến
khi bạn khởi tạo biến, var có thể là
bất cứ cái gì bạn muốn.
Vì vậy
trong trường hợp này, score ko phải
là một số, nó đơn giản chỉ là 1 biến. tuy nhiên timecase lại là một biến số bởi vì ta khởi tạo nó với dấu =. Tương
tự, var name là một chuỗi trong khi
đó var playerName chỉ đơn giản là một
biến. bản chất của chúng không được thiết lập cho tới khi chúng được khởi tạo. JS
trở nên phổ biến vì bạn có thể có ít mã khó nhằn hơn và nó vẫn hoạt động.
Bây giờ,
trong JS, có một vài thứ không xảy ra trong hầu hết các môi trường – bạn có thể
trộn và kết hợp các biến. tôi khuyên bạn không nên làm điều này. Là một lập trình
viên đã bắt đầu với các giá trị nguyên và chuỗi, tôi đánh giá cao việc bạn giữ
nguyên các biến đã tổ chức. nếu bạn trộn lẫn và kết hợp các biến và đơn giản là
ko quan tâm, bạn sẽ gặp khó khăn khi xuất bản game – và xuất bản game là việc rất
quan trọng đấy.
Bởi vì C2
được xuất từ JS nên rất quan trọng về việc hiểu một chút căn bản cách hoạt động
của nó. Điều quan trọng hơn là biết về các biến hiện tại, bởi vì ngay cả trong
JS bạn cũng phải sử dụng các loại biến khác nhau.
Bài 4. Biến trong Construct 2
Giống như hầu
hết các thứ trong C2, biến rất đơn giản. mặc dù là việc thêm các biến vô cùng
khó nhằn với các ngôn ngữ lập trình khác nhưng với C2 nó chỉ là trò trẻ con.
1. Thêm biến
Thêm biến
vào trong trò chơi thực sự rất quan trọng. nếu không có biến, bạn không thể lưu trữ
bất kì dữ liệu nào. Điều này sẽ làm cho trò chơi hầu như không có tính năng gì, và
nó sẽ hạn chế game của bạn thành một game nhỏ.
Để thêm biến,
đi tới event sheet và kích chuột phải vào nó. Nó sẽ cho bạn một menu. Kích vào
biểu tượng Add event sẽ cho phép bạn
thêm biến:
Có 2 loại
biến trong C2: global (toàn cầu) và local (địa phương). Biến có thể được nhìn ở các nơi khác nhau. Biến toàn cầu
sẽ được nhìn thấy trong toàn bộ trò
chơi. Còn biến địa phương chỉ có thể nhìn
bơi một đối tượng game hoặc một tính năng.
2. Tạo biến toàn cầu
Kích chuột phải vào event sheet và chọn Add global variable:
Như bạn thấy
ở ảnh chụp màn hình trước, có 4 phần. bạn có thể đặt tên cho biến một cách dễ
nhớ. Đặt một cái tên dễ nhớ sẽ khiến quá trình xây dựng trơ nên trơn tru hơn.
Có thể đặt như là score, numberOfShoot
hay là powerUpLevel. Bạn ko được để dấu
cách ở tên biến – máy tính sẽ ko cho phép.
Như bạn
cũng thấy ở đây, bạn có 2 Type – Number và Text. Phần intial value
là nơi bạn có thể khởi tạo các biến. C2 sẽ tự động khởi tạo phần này cho bạn;
tuy nhiên, nếu bạn muốn có 1 con số hay cái tên, bạn có thể đặt nó vào đây. Hãy
nhớ rằng, nếu bạn làm một biến văn bản, bạn sẽ không thể tính toán với nó, bạn
chỉ có thể tính toán với các biến số.
Phần Description là phần mô tả, nó sẽ giúp bạn
dễ nhận ra biến này là cái gì, phòng khi trò chơi của bạn có hơn 100 biến
:’))).
3. Tạo biến điểm số
Hãy tạo ra
một biến Score để theo dõi điểm số.
một lần nữa, biến lưu trữ các dữ liệu. chúng ta cần phải thiết lập một biến Score để lưu trữ dữ liệu điểm số. bất cứ
khi nào bạn cần lưu trữ một lượng thông tin nhỏ, bạn cần tạo một biến.
Tiếp tục và
ấn OK.
Ở ảnh trước,
bạn có thể thấy biến Score trông như
thế nào trong C2. Bạn có thể thấy nó ở đầu event sheet – nó sẽ ở đầu event
sheet, giống như các biến trong ngôn ngữ lập trình khác.
4. Thêm một biến vào một sprite
Hãy thêm một
biến địa phương. Thêm một sprite vào trò chơi và chọn nó. Bạn sẽ thấy cài này,
trong cửa sổ Properties ở bên tay phải
có một thứ được gọi là Instance variable
(biến thực thể). Đây chính là biến địa phương, nó có nghĩa là đối tượng này chỉ
là một đối tượng trò chơi mà sử dụng các biến này. Thông thường, các biến thực
thể thường là các biến như sinh mạng, máu, giáp và các chỉ số khác. Mội đối tượng
game lại có các biến khác nhau.
Tiếp tục và
kích vào Instance variable.
Kích vào dấu
cộng để thêm biến. cửa sổ New Instance
variable sẽ xuất hiện:
Tại đây bạn
sẽ thấy một hộp thoại giống như hộp thoại của biến toàn cầu. sự khác biệt duy
nhất là bây giờ bạn có thể thêm loại Boolean.
Hầu hết các phần, các tùy chọn đều giống nhau.
5. Tạo một biến sinh mạng
Hãy đi tiếp
và tạo một biến health và gán cho nó Intial value là 100 trong cửa sổ trước. bạn có thể đặt tên biến là bất cứ thứ
gì bạn muốn. bạn có thể đặt là banana
nếu bạn thích. Đặt tên cho biến sẽ giúp ta dễ hiểu giá trị mà biến đang giữ. Bằng
cách thiết lập biến health, chúng ta
hiện tại đang có một hòm chứa các con số sinh mạng. bằng cách này, ta có thêm sự
kiện để cộng hoặc trừ giá trị sinh mạng. chúng ta có thể thiết lập game logic để
di chuyển tới màn hình game over nếu
sinh mạng dưới 0. Game logic đơn giản
chỉ là logic cần để tạo game. Nó cũng có thể được gọi là programming. Chú ý health
không được viết hoa. Điều này là do biến địa phương thường không được viết hoa. Điều
này không có quy ước cụ thể nhưng các lập trình viên thường coi biến toàn cầu viết
hoa còn biến địa phương thì ko. Lí do là để khi bạn nhìn vào màn hình, bạn có
thể nhận ra ngay đâu là biến toàn cầu, đâu là biến địa phương. Các lập trình
viên khác có thể có cách phân biệt khác. Chính vì vậy nếu có làm việc với họ,
hãy chắc chắn rằng bạn biết họ nghĩ gì.
Nếu bạn có
được một màn hình như bên trên, kích OK.
Bây giờ bạn
đã có một biến thực thể rồi đấy.
6. Giới thiệu về mảng
Mảng thật sự
ảnh hưởng đến thiết kế game. Về cơ bản, mảng là một lưới dữ liệu. chúng ta có
thể lấp đầy mạng lưới này với bất kì thông tin nào mà chúng ta muốn. trong quá
khứ, mảng được sử dụng rất nhiều vì công nghệ bị hạn chế, thậm chí ngày nay vẫn
được sử dụng và rất hữu ích. Đây là một hình đại diện của mảng:
Một mảng là
một bảng dữ liệu. bạn có thể đã thấy điều này trong một chương trình bảng tính.
Chúng ta có thể lưu trữ nhiều mục dữ liệu trong các mảng. điều này khác với các
biến vì chúng ta thêm số lượng lớn dữ liệu.
Chúng ta có
thể sử dụng mảng trong các trường hợp sau:
- để lưu đa điểm của dữ liệu
- để lưu trữ thông tin đối tượng trò chơi
- để sử dụng một tile map
- để tạo trạng thái save lưu lại lượng lớn thông tin
- Tạo dữ liệu giúp ta tiết kiệm thời gian trong suốt sự phát triển
7. Thêm mảng vào Construct 2
Làm thế nào
để ta có thể thêm mảng vào C2? Điều đầu tiên bạn cần làm là thêm đối tượng Array. Một khi chúng ta làm điều đó,
chúng ta có thể truy cập tất cả tính năng của mảng. chúng ta cũng có thể thiết
lập rất nhiều các mảng khác nhau mà ta muốn. nháy đúp chuột vào nền của layout,
nhấp vào Array:
Bài 5. Kiểm tra thuộc tính của mảng
Một khi bạn
làm điều này, bạn có thể thấy các loại đối tượng được gọi là một mảng. điều này
giống như việc thêm một sprite. Bạn có thể có nhiều sprite trong một trò chơi
cũng như có thể có nhiều mảng trong một trò chơi. Nếu bạn muốn thêm nhiều hơn một
mảng, đơn giản, nháy đúp chuột vào nền layout và thêm một cái nữa. nếu bạn muốn
thay đổi tên của mảng, bạn chỉ cần chọn nó, ấn nút F2 và sau đó đổi tên là được.
kích vào mảng ở phía bên phải rồi nhìn sang bên trái để thấy các thuộc tính của
mảng:
Bạn có thể
thấy thuộc tính của mảng trong ảnh chụp màn hình trước đó. Nó có chiều rộng,
chiều dài, chiều sâu. Điều này có nghĩa là các mảng có thể là một chiều, 2 chiều
hay 3 chiều. hiện tại chúng ta có mảng một chiều, tức là nó chỉ có chiều rộng.
trong trường hợp này, mảng sẽ là một hàng đơn và trông như sau:
Nó có chiều
rộng là 10 ô, chiều cao và chiều sâu là 1 ô. Đối với hầu hết các phần, bạn nên
bắt đầu với mảng dễ dàng. Hầu như các nhà phát triển mới đầu đều bị lẫn lộn vì
sự phức tạp.
Một điều nữa
về mảng đó là nó bắt đầu từ số 0.
Điều này có
vẻ kì lạ, nhưng trong tính toán, bắt đầu một chuỗi số thường là 0 thay vì là 1.
Trong trường hợp này, vẫn còn 10 ô hoặc hộp mà ta có thể đặt dữ liệu vào.
Hãy đi tới
event sheet và thêm sự kiện mảng. chúng ta có thể thêm nhiều sự kiện mảng:
1. Thiết lập dữ liệu và thêm các biến
Cần lưu ý rằng
bạn cũng có thể thêm một biến thực thể vào mảng đó. Phần lớn điều này thường ko
được thực hiện, nhưng trong một vài trường hợp nhất định, chẳng hạn như khi gán
các mảng khác nhau vào các đối tượng khác nhau, điều này có thể hữu ích.
Một trong
những nhiệm vụ quan trọng nhất bạn cần làm với các mảng là thiết lập và tìm kiếm
dữ liệu. hãy tiếp tục và đặt ô đầu tiên là số 9. Kích vào Add action và thiết lập X
thành 0 và Value thành 9.
Khi làm
xong điều này, kích vào Done:
Điều này có
nghĩa là ô đầu tiên được thiết lập giá trị là 9. Hãy nhớ rằng 0 là ô đầu tiên
và ô 1 là ô thứ 2:
Các ô khác
là 0 vì chúng chưa được thiết lập.
2. Kiểm tra mảng dữ liệu
Bây giờ
chúng ta đã biết chách thiết lập một mảng, vầy ta kiểm tra mảng cho dữ liệu như
thế nào? Trong trường hợp này, chúng ta sẽ kiểm tra xem ô đầu tiên có bằng 9
hay ko. Nháy đúp chuột vào layout và ấn vào Array. Khi bạn làm xong, bạn có thể kích vào Compare at X. cái này sẽ so sánh giá trị X của mảng:
Một khi bạn
ở trong cửa sổ Add event, bạn có thể
kiểm tra bất kì giá trị nào mà bạn muốn. trong trường hợp này, chúng tôi muốn
kiểm tra ô đầu tiên và sau đó kiểm tra giá trị, cái mà bằng 9. Chúng ta chỉ thiết
lập cái này ở cuối sự kiện, chính vì vậy hãy giữ nó một cách chắc chắn.
Một khi bạn
đã thêm hành động này, bạn có thể thêm bất kì hành động nào mà bạn muốn trong
trò chơi.
Bây giờ bạn
đã biết một chút về mảng. khi bạn mới bắt đầu, tôi khuyên bnaj hãy sử dụng biến
vì chúng dễ làm việc hơn. Một khi chương trình của bạn trở nên phức tạp, hãy bắt
đầu sử dụng mảng. và bạn nên bắt đầu với mảng một chiều, và một khi bạn rất thoải
mái khi sử dụng chúng, hãy chuyển sang mảng 2 chiều. bạn sẽ sử dụng cả mảng 3
chiều trong một vài trường hợp.
Đây là một
ví dụ về mảng mà bạn sử dụng trong trò chơi. Bạn có thể dùng chúng để miêu tả
thuộc tính của bất kì đối tượng game nào.
Bạn có thể
sử dụng mảng này để miêu tả các đặc tính khác nhau cho nhân vật. trong trường hợp
này, mảng được thực hiện cho mỗi nhân vật. rất nhiều game RPG làm như thế. Đây
là một ví dụ:
Tổng kết
Trong
chương này, chúng ta đã học cách thêm biến toàn cầu và biến địa phương. Thêm biến
là một tính năng quan trọng trong game. Thông thường bạn sẽ có hàng trăm biến ở
các game đơn giản. nếu bạn làm một game, hãy làm quen với việc tạo và thiết lập
nhiều biến. điều tốt nhất là C2 đã làm cho các biến được xử lí dễ dàng.
Trong
chương tiếp theo, chúng ta sẽ học về cơ chế game. Cơ chế game chính là xương sống
quan trọng cho sự tương tác của người dùng.
Bản dịch do construct2vn.ga thực hiện
Ai sao chép hay chia sẻ hãy ghi nguồn và đưa link www.construct2vn.ga vào đầu bài chia sẻ nhé