I. Lịch sử video game 2D
1958, William (Willy) Alfred Higinbotham là một nhà vật lý người Mỹ. Ông là người tạo ra video game đầu tiên trên thế giới có tên “Tennis for two” (Tennis cho 2 người) trong phòng thí nghiệm. Lúc này, các máy tính lớn được sử dụng trong các tổ chức để xử lý dữ liệu kinh doanh, khoa học, quân sự v.v,
Thập niên 1970, các máy tính cá nhân trở nên phổ biến do phát sinh yêu cầu cho phép nhiều người sử dụng đối với các máy tính lớn, Các trò chơi chữ được phát triển cho phép người chơi tham gia lựa chọn ảnh hưởng đến hướng đi của câu chuyện game. Một trong số các trò chơi đó là Hunt The Wumpus
Cùng thời điểm, hệ máy chơi game cầm tay chuyên dùng để chơi game bắt đầu phát hành ví dụ như Magnavox Odyssey và Atari 2600.
Trò chơi tiêu biểu trên các hệ máy chơi game cầm tay này có thể kể đến là Pitfall. Người chơi phải đu dây vượt qua các chướng ngại vật để đến được đích.
Cuối thập niên 70 đầu 80, Arcade game – trò chơi sử dụng tiền xu trên máy thùng tại khu trò chơi trong các siêu thị sản sinh ra nhiều tựa game kinh điển như Pac-Man, Asteroids, Dragon’s Lair.
1985, Nintendo cho ra đời Nintendo Entertainment System (NES) huyền thoại với những trò chơi kinh điển như Super Mario Bros, The Legend Of Zelda, Metroid,
Cùng cạnh tranh với NES là Sega Master System
Thập niên 1995, thời kỳ đỉnh cao và thống trị thị trường của game 2D. Các nhà phát triển bắt đầu chuyển hướng sang game cốt truyện ví dụ như Final Fantasy và chuyển hướng lên trên hệ máy GameBoy
Thế hệ thứ 4 của gaming bắt đầu với Super Nintendo Entertainment System (SNES) và Sega Genesis
Ở thời kỳ này, game 2D trở thành vua!
1994, Sony bắt đầu bán những phiển bản PlayStation đầu tiền tại Nhật Bản. Điều này làm cho game 3D trở phổ biến hơn và liên tục cạnh tranh thị trường với game 2D.
II. Ngôn ngữ lập trình game
Thuở ban đầu, video game được lập trình bằng cách sử dụng mã nhị phân hoặc hợp ngữ do giới hạn về phần cứng như khả năng xử lý tính toán, lưu trữ trên các thiết bị chơi game cầm tay (home console) hoặc game thùng (arcade). Bởi vì phụ thuộc hoàn toàn vào phần cứng, nên các nhà phát triển bắt buộc phải có hiểu biết về mã nhị phân và hợp ngữ cũng như cách vận hành của các thành phần bên trong thiết bị để có thể tạo ra 1 game. Các trò chơi lúc này nhìn chung khá đơn giản, đồ hoạ không đẹp mắt, nội dung ngắn, thời gian phát triển dài. Sau này khi máy tính cá nhân được sử dụng rộng rãi hơn, các nhà phát triển có thể sử dụng ngôn ngữ bậc cao hơn như C, C++, Java, C# bởi vì sự phát triển mạnh mẽ của phần cứng máy tính. Lập trình viên đã có thể tạo ra game dễ dàng hơn mà không phụ thuộc quá nhiều vào phần cứng của thiết bị chơi game. Các thư viện hỗ trợ phát triển game, các framework (tập hợp các thư viện thường xuyên sử dụng) giúp việc phát triển game trở nên dễ dàng và nhanh chóng hơn. Các game engine được giới thiệu với nhiều tính năng phức tạp hơn như camera, hệ thống hạt, 3D, AR/VR v.v cho phép nhà phát triển tạo nên những dự án game 3D AAA hoành tráng như phim. Bên cạnh đó các ngôn ngữ kịch bản thường được sử dụng để làm thêm phần logic cho game, điều khiển hoạt ảnh (animation) hoặc tạo ra các bản chỉnh sửa (mod) cho trò chơi. Một số ngôn ngữ kịch bản được sử dụng nhiều ví dụ như AngelScript, Python, Ruby, Rust, v.v và không thể không kể đến đó chính là Lua
III. Ngôn ngữ kịch bản Lua
Lua là một ngôn ngữ lập trình thông dịch với đặc điểm nhỏ gọn, đa nền tảng. Lua được phát triển từ C và hệ thống các API theo hướng đơn giản hóa. Lua được nhóm chuyên viên khoa học máy tính gồm Roberto Ierusalimschy, Waldermar Celes, L.H. Figueiredo, tại đại học PUC-RIO, Brasil phát triển vào năm 1993. Phát sinh từ nhu cầu có một ngôn ngữ thích hợp để viết những tập tin cấu hình cho các phần mềm chuyên dụng trong ngành dầu khí, các tác giả đã xem xét ngôn ngữ hiện dùng lúc bấy giờ là SOL (Simple Object Language – ngôn ngữ đối tượng đơn giản), để tạo ra một ngôn ngữ có tính năng diễn đạt tốt hơn. Ngôn ngữ này được đặt tên là Lua, có nghĩa là Mặt Trăng theo tiếng Bồ Đào Nha (SOL có nghĩa là Mặt trời). Lua sử dụng trình quản lí gói LuaRocks cho phép bạn cài đặt các gói thư viện một cách dễ dàng bằng dòng lệnh, tương tự như NodeJS cho Javascript hay Pip của Python. Ngoài ra, LuaJIT – một trình biên dịch Just-In-Time của Lua cho phép Lua chạy với tốc độ rất nhanh, có thể so sánh ngang với ngôn ngữ C++.
Lua có một số ưu điểm nổi bật sau:
- Dễ đọc, dễ học.
- Nhỏ gọn: Toàn bộ phần mềm thông dịch Lua cùng mã nguồn, tài liệu hướng dẫn và các ví dụ chỉ gói gọn trong dung lượng 860 KB (phiên bản 5.1.4, không nén).
- Nhanh: Tốc độ của Lua thuộc vào loại nhanh nhất trong số các ngôn ngữ thông dịch.
- Kết hợp tốt với các ngôn ngữ khác, chẳng hạn C.
- Đa nền tảng: Chạy trên Windows, Unix, Linux, Mac OS X cùng nhiều hệ điều hành khác.
- Thư viện chương trình có một số tính năng tốt: xử lý chuỗi, coroutine.
- Là một trong những ngôn ngữ đang phát triển mạnh
Một số ứng dụng của Lua:
- Phát triển trò chơi điện tử: ngôn ngữ kịch bản trong các trò chơi như Dark Souls, Fable II, Warframe, World of Warcraft, CRYENGINE.
- Lập trình mạng: CISCO Systems, Nmap, Modsecurity
- Phần mềm công nghiệp: Adobe Lightroom và MySQL Workbench
- Thư viện để nhà phát triển tích hợp vào phần mềm của họ để cho phép tính năng viết mã kịch bản (scripting)
IV. LOVE2D Framework
LOVE2D là một framework đa nền tảng, mã nguồn mở, miễn phí được phát hành theo giấy phép zlib để phát triển trò chơi điện tử 2D. Framework được viết bằng C++ và sử dụng Lua làm ngôn ngữ kịch bản và vẫn được duy trì bởi các nhà phát triển ban đầu của nó. API do framework cung cấp cho phép truy cập vào các chức năng video và âm thanh của máy thông qua các thư viện SDL và OpenGL hoặc kể từ phiên bản 0.10 với OpenGL ES 2 và 3. Phông chữ có thể được hiển thị bằng công cụ FreeType. Một phiên bản của framework có tên PiLöve dành cho Raspberry Pi. Framework này thường được sử dụng trong các cuộc thi phát triển trò chơi điện tử, chẳng hạn như cuộc thi phát triển trò chơi Ludum Dare. Vào tháng 7 năm 2018, đây là phần mềm phát triển trò chơi phổ biến thứ 10 được sử dụng bởi các nhà phát triển trò chơi độc lập trên trang web Itch.io, chiếm 1,97% thị phần.
Các tính năng chính của LOVE2D framework:
- hỗ trợ OpenGL hiệu ứng điểm ảnh GLSL
- hỗ trợ màn hình cảm ứng touch screen
- hỗ trợ UTF-8
- hỗ trợ định dạng ảnh PNG, JPEG, GIF, TGA, BMP
- khả năng sử dựng thư viện vật lý 2D Box2D (có thể được vô hiêu hoá để làm nhẹ thư viện)
- thư viện luasocket cho giao tiếp mạng TCP/UDP
- thư viện lua-enet, một thư viện mạng khác triển khai enet – giao thức UDP tin cậy
- cung cấp quản lý hộp cát (sandbox) tập tin để tránh cho phép truy cập toàn bộ ổ đĩa
Một số thư viện và tính năng bổ sung:
- thư viện Simple Tiled Implementation (Triển Khai Ô Đơn Giản) cho phép người dùng tải các màn chơi bằng các ô (tiles), chỉnh sửa bằng phần mềm Tiled và hiển thị chúng trong game. Nó hoạt động được với tính năng quản lý va chạm của Box2D.
- thư viện anim8 cho phép người dùng tải hoạt ảnh, chẳng hạn như ký tự, từ lưới hình ảnh vào tệp bitmap (PNG hoặc JPEG).
- ngoài ra còn có một nền tảng miễn phí (GPLv3) có tên LIKO-12, lấy cảm hứng từ máy game cầm tay giả tưởng PICO-8 và sử dụng Löve, cho phép phát triển ứng dụng ở độ phân giải hạn chế, sao lưu/khôi phục ở định dạng PNG đã sửa đổi, giống như các trò chơi điện tử trên các băng của máy trờ chơi điện tử cầm tay hoặc một số máy vi tính đầu tiên, xuất chúng sang HTML5 hoặc sang các hệ thống được Löve hỗ trợ.
- lutro là một game framework của Lua dành cho libretro, một bản chuyển tiếp (port) của API Löve. ChaiLove đi theo con đường tương tự bằng cách cung cấp triển khai trong ChaiScript, một ngôn ngữ kịch bản nhúng và đa nền tảng cho C++ (C++14).
- love.js là một bản chuyển tiếp (port) của Love để chạy các trò chơi trên nền tảng HTML5, WebGL và Emscripten.
Danh sách game được viết bằng LOVE2D
V. Lời kết
Lua và LOVE2D cho phép nhà phát triển tạo ra những trờ chơi 2D ở mức độ từ đơn giản đến phức tạp. Nếu sử dụng độc lập, Lua và LOVE2D là 2 công cụ tốt để bắt đầu học lập trình game vì chúng đều là mã nguồn mở miễn phí, nguồn tài liệu hướng dẫn phong phú, dễ học và hỗ trợ đa nền tảng. Hoặc bạn có thể kết hợp Lua như là một ngôn ngữ kịch bản với các ngôn ngữ phổ biến hơn như C, C++, C#, Java, v.v để viết kịch bản cho các màn chơi, thuộc tính nhân vật và vật phẩm trong game hoặc để chỉnh sửa (mod) game. Tóm lại, phát triển trò chơi 2D có một lịch sử lâu dài và một thị trường lớn với nhiều công cụ phát triển đa dạng và miễn phí. Tất cả bạn cần để bắt đầu chỉ là tư duy logic, khiếu mỹ thuật và thời gian. Vậy còn chần chờ gì nữa mà không bắt tay vào xây dựng ngay một game nhỏ cho riềng mình với Lua và LOV2D nào!
Nguồn: viblo.asia