Category Archives: Swift Code

GameplayKit _ Công cụ hỗ trợ cho Game IOS

# Tutorial dành cho tham khảo với GameplayKit:

+ Apple Website:

Hàng chuẩn của Apple dĩ nhiên là viết đầy đủ về Swift và ví dụ đầy đủ. Tuy nhiên, mã nguồn có vẻ khá cao cấp nên hơi khó học cho người mới nhưng đây là nguồn đầy đủ và chi tiết nhất của framework này đoá ^.^

https://developer.apple.com/library/content/documentation/General/Conceptual/GameplayKit_Guide/Minmax.html#//apple_ref/doc/uid/TP40015172-CH2-SW1

+ Trang web của Raywenderlich:

https://www.raywenderlich.com/119959/gameplaykit-tutorial-entity-component-system-agents-goals-behaviors

=> Một tutorial khá hay dành cho những hiểu biết cơ bản về entity, component, agent trong gameplaykit.

=> Bài hướng dẫn vào năm 2015 sử dụng Swift 2 nên có nhiều chỗ phải sửa. Tuy nhiên về cơ bản thì đây là một bài viết khá cung cấp cái nhìn toàn diện cho GameplayKit rất đáng tham khảo.

# Bài hướng dẫn trong sách của Raywenderlich về GameplayKit trong sách 2D Game cũng rất hay. Tuy nhiên khi bổ sung lại bị bỏ đi do thiếu thực tế thì phải.

+ Project 34 trong HackwithSwift:

Project 34 trong HackwithSwift giới thiệu khá đầy đủ về GameplayKit của Apple thông qua game caro của Mỹ:

https://www.hackingwithswift.com/read/34/overview

+ Website của Tutsplus:

Đây cũng là một website học tập rất tốt dành cho lập trình viên và cả một truyện dài kì về GameplayKit. Nào hãy hưởng thụ đê 😀

https://code.tutsplus.com/series/an-introduction-to-gameplaykit–cms-860

Part 1: https://code.tutsplus.com/tutorials/an-introduction-to-gameplaykit-part-1–cms-24483

Part 2: https://code.tutsplus.com/tutorials/an-introduction-to-gameplaykit-part-2–cms-24528

Part 3: https://code.tutsplus.com/tutorials/an-introduction-to-gameplaykit-part-3–cms-24611

+ Web Shinobicontrol:

Đây là một website bán công cụ, tuy nhiên lại có viết blog về code

https://www.shinobicontrols.com/blog/ios9-day-by-day-day12-gameplay-kit-behaviors

=> Website còn có ebook miễn phí về IOS 9

IOS 9 Blog: https://www.shinobicontrols.com/blog/ios9-day-by-day-index

=> Hiện tại đã có một phim bộ về IOS 10, các bạn có thể nhào vào để luyện, nước mắt ra cũng không kém phim Hàn (do vui hay do sắp bị điên thì không biết)

+ GameplayKit còn có thể sử dụng cho các ứng dụng:

https://www.invasivecode.com/weblog/gameplaykit-state-machine/

=> Cách sử dụng GameplayKit dành cho 1 ứng dụng LoadData

+ Một ví dụ khá tốt về GameplayKit:

Link: http://www.jonathanfischer.net/lets-build-gameplaykit-state-machines/

GameplayKit, bộ công cụ dùng để làm game iOS

GameplayKit là một bộ sưu tầm các công cụ và công nghệ cơ bản để tạo ra những game trên iOS, OS X và tvOS. Nó không chỉ là công cụ tiêu chuẩn hỗ trợ cho việc tạo ra các trò chơi nhanh hơn mà nó còn hỗ trợ cấu trúc, giúp bạn thiết kế các modum, kiến trúc mở rộng cho game với lượng công việc tối thiểu.

Tạo ra một game yêu cầu phải giải quyết những thuật toán khó nhằn, việc này đã được GameplayKit làm giúp. Bạn chỉ việc tập trung vào những tính năng hay ho làm nó trở thành một game thật đặc biệt.

Đây là công cụ tiêu chuẩn của Apple nên nó hoàn toàn có thể kết hợp với SpriteKit để làm game 2D, SceneKit để làm game 3D hay thậm chí có thể kết hợp với Metal hay OpenGL ES. VỚi những game nhỏ, bạn có thể kết hợp nó với UIKit hay AppleKit để tạo ra những game đơn giản.

# GameplayKit bao gồm 7 chức năng chính:

+ Thuật toán ngẫu nhiên: Những thuật toán ngẫu nhiên giờ càng mạnh mẽ hơn và mang tính cân bằng hơn nhờ vào những công thức ẩn và cân bằng giữa tốc độ và hiệu suất.

+ Entities and Component: dùng để tạo ra các thành phần tái sử dụng trong tương lai

+ Trạng thái (State Machies) dùng để quản lý các trạng thái trong trò chơi của bạn

+ Thuật toán Minmax (The Minmax Strategist) Dùng để lập trình trí tuệ nhân tạo trong các trò chơi theo lượt (turn-base) như caro, cờ tướng, cờ vua,…

+ Thuật toán tìm đường (Pathfinding) Không chỉ có thể tìm đường trên tilemap mà còn có thể tìm trên những hình bình thường

+ Agent, mục tiêu, và trạng thái (Agent, Goals, and Behaviors) Cho phép những nhân vật trong game của bạn tự di chuân dự vào những mục tiêu và những yếu tố xung quanh

+ Hệ thống luật (Rule System) Cho phép tách riêng giữa thiết kế và những đoạn mã thực thi đẩy nhanh tiến độ thực hiện game

Swift Code – Biến và hằng số

Trong lập trình, việc đầu tiên một lập trình viên cần phải làm là bắt tay vào khai báo và định nghĩa các biến, sau đó chúng ta mới lưu trữ và sử dụng nó cho chương trình. Đối với Swift, biến cũng là một thành phần không thể thiếu.

Chúng ta sẽ bắt đầu với việc khai báo một biến trong Swift. Hãy xem một ví dụ:

var lapKanTitle: String = “LapKan Corp.”

Ở trên, ta vừa khai báo một biến tên lapKanTitle kiểu String và có giá trị khởi tạo là “LapKan Corp.”. Đây cũng là cách khai báo biến phổ biến nhất trong Swift!

Tiếp theo là một ví dụ khác:

let lapKanTitle: String = “LapKan Corp.”

Hai câu lệnh khá giống nhau, chỉ khác nhau ở từ khóa var và let. Vậy, sự khác biệt ở đây là gì? Trong câu lệnh thứ nhất, từ khóa var khai báo một biến và biến này có thể thay đổi giá trị, còn ở câu lệnh thứ hai, với từ khóa let ta có thể hiểu biến ở đây như là một biến Constants (hằng số) và giá trị của biến sẽ không thay đổi trong suốt chương trình!

Hãy xem một vài ví dụ khác:

let lapKanTitle: String = “LapKan Corp.”

var lkVersion: Double = 1.0

let lkLevel: Int = 1000

let lkIsAwesome: Bool = true

Ở trên, chúng ta có 3 hằng số và một biến thường!

Cùng với sự ra đời của Swift, Apple cũng cho thêm 1 định nghĩa mới là “Type Inference” (Nói mới là Apple mới ra cho họ thôi, chứ cái này bên C # có lâu rồi, ngôn ngữ khác thì hem biết). Đại khái nó như thế này:

let lapKanTitle = “Swift” // inferred as String

var lkVersion = 1.0 // inferred as Double

let lkLevel = 1000 // inferred as Int

let lkIsAwesome = true // inferred as Bool

Cách khai báo mới này so với cách khai báo trước có gì khác nhau? Dễ dàng nhận thấy các biến đã được lược bỏ các kiểu dữ liệu như String, Double, Int, Bool. Đây chính là Type Inference mà ta đã nhắc tới ở trên. Điều này có ý nghĩa gì? Chúng ta có khả năng khai báo các biến tự do hơn trước nhiều. Nhiều lúc khi sử dụng, Swift sẽ có lựa chọn đúng hơn cho kiểu dữ liệu giúp chúng ta tiết kiệm được bộ nhớ cho việc sử dụng kiểu biến hay nếu chúng ta có thay đổi một kiểu biến ở đâu đó thì chương trình vẫn tối ưu hoá và chạy đúng. Nó khôn chỉ tiết kiệm được thời gian, công sức mà còn rút ngắn được code viết ra.

Thế thì tại sao Swift vẫn hỗ trợ việc khai báo có chứa kiểu dữ liệu như trên, đó là vì có những lúc chúng ta buộc phải sử dụng đúng kiểu dữ liệu để chương trình chạy được. Swift không phải vạn năng để lúc nào cũng hiểu được chính xác lập trình viên nghĩ gì (thật ra có lẽ chính lập trình viên cũng éo hiểu lúc đó nghĩ gì) nên vẫn có những lúc mà chúng ta cần định nghĩa chính xác thứ mà bạn muốn.

Lời khuyên cho lập trình viên là: Hãy sử dụng tối đa lợi thế không cần khai báo biến để giúp cho bạn tiết kiệm thời gian, công sức và dễ dàng bảo trì code trong tương lai.