Category Archives: Programing

Word Play Healthy Food

Một game nhỏ giúp bạn nhớ những từ ngữ tiếng Anh của những loại rau quả tốt cho sức khoẻ.

Với hơn 65 loại trái cây và rau quả, kiến thức về từ vựng tiếng Anh của bạn lại tăng thêm nữa.

Thêm vào khả năng phát âm các từ vựng của game sẽ giúp bạn gắn kết giữa viết, hình ảnh và âm thanh.

Game không chỉ nhấn vào chữ cái mà là cầm và đưa vào ô chính xác giúp bạn hình dung ra từ ngữ một cách dễ dàng hơn.

Link: Download

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/

Thuật toán ngẫu nhiên trong GameplayKit (Phần 1)

I. Thuật toán ngẫu nhiên trong GameplayKit:

Đối với những trò chơi mà xác suất và cơ hội đóng vai trò chính thì thuật toán ngẫu nhiên chính là cốt lõi của cả trò chơi. Khi bạn chơi một trò chơi trên những bàn cờ (board games) thì những điểm của xúc xắc quyết định số nước đi của người chơi hay việc xào bài trong một trò chơi bài bạc như xí dzách, tiến lên. Những điều bất ngờ trong game tạo ra những điểm hấp dẫn dành cho game và thay đổi toàn bộ cách chơi nếu bạn thay đổi xác xuất trong game. Tính ngẫu nhiên có vẻ đơn giản nhưng thực sự để có được sự ngẫu nhiên tốt trong 1 game nó không dễ dàng chút nào.

Việc tạo ra tính ngẫu nhiên trong 1 game kích thích người chơi cố gắng hơn trong việc tiến tới mục tiêu. Việc có được viên kim cương với tỉ lệ 10 % sẽ rất hảo hứng vì nó cho người chơi một mục tiêu cụ thể hơn cho việc hạ gục một con boss trong trò chơi so với việc không biết gì về khả năng có thể có được viên kim cương đó. Tuy nhiên việc đánh hơn 50 lần vẫn không thể có được sẽ làm cho người chơi không còn niềm tin vào tỉ lệ này.

Chính từ những điểm này mà ta cần phải tập trung vào những điểm quan trọng trong việc tạo ra các ngẫu nhiên trong trò chơi.

+ Tính ngẫu nhiên: Một con số hay tỉ lệ ngẫu nhiên nghĩa là bạn không thể đoán ra được (dĩ nhiên là không phải trong tình trạng tỉ lệ 100 %). Tuy nhiên, một thuật toán ngẫu nhiên tốt là gì? Dĩ nhiên là nó khó đoán trước nhưng đó không phải là tất cả những gì có thể có của 1 thuật toán ngẫu nhiên tốt. Thuật toán ngẫu nhiên tốt phải bao gồm cả việc cân bẳng trong giới hạn của nó. Khi bạn ngẫu nhiên 10.000 số trong giới hạn 1-100 thì việc ra các số này phải có tỉ lệ tương đồng với nhau và không có số nào là không xuất hiện. Chu kỳ lặp lại của nó cũng cần phải khó đoán, trong 100 số thì không có sự lặp lại của những khối số.

+ Hiệu suất: Việc tạo ra một đoạn mã thực thi phức tạp để tạo ra tính ngẫu nhiên tốt nhất dĩ nhiên là tốt, tuy nhiên, nó phải đi kèm với hiệu suất tốt. Bạn không thể cho chạy một thuật toán phức tạp chỉ để cho ra 1 số trên mặt xúc xắc trong khi có hàng ngàn thứ khác đang cần xử lý.

+ Định luận: Một trò chơi chất lượng đòi hỏi cần phải được kiểm tra đầy đủ (Test), tuy nhiên với các thuật toán ngẫu nhiên thì việc điểm định hết tất cả các trường hợp trong game gần như là không thể. Một thuật toán ngẫu nhiên tốt sẽ duy trì những tình huống bất ngờ trong game dành cho người chơi. Thêm vào đó, nó cần được quan tâm đúng mức để có thể mở rộng ra khi cần thiết.

+ Tính độc lập: Những con số hay nguồn ngẫu nhiên phải độc lập so với kết quả gần nhất.

+ Tính ngẫu nhiên tương đồng: Những gì được ngẫu nhiên cần phải tương đồng với tất cả các kết quả được đưa ra.

  • Cách sử dụng Randomization trong game:

Toàn bộ những lớp ngẫu nhiên, tính ngẫu nhiên hoá trong GameplayKit đều thông qua giao thức GKRandom. Nó sử dụng thông qua các mô thức tối thiểu trong các giao diện. Chính vì vậy việc đầu tiên bạn cần là chọn ra cách thức ngẫu nhiên phù hợp với game của bạn, tất cả những gì còn lại hãy để cho GameplayKit làm dùm:

+ Trong hầu hết các trường hợp, bạn sẽ cần một con số ngẫu nhiên đồng nhất trong 1 khoản giới hạn. Ví dụ như bạn cần 1 số nằm trong khoản giữa 1 tới 100. Như vậy thứ bạn cần là GKRandomDistribution.

+  Để tuỳ chính tính ngẫu nhiên nhưng vẫn mang tính đồng nhất giữa chúng, bạn có thể chọn những lớp phụ nằm trong GKRandomSource

+ Để có thể tuỳ chỉnh tính ngẫu nhiên (không còn đồng nhất) thì bạn cần phải dùng đến các lớp GKGaussianDistribution hay GKShuffledDistribution

+ Nếu bạn không cần sử dụng đến thuật toán ngẫu nhiên trong một khoảng hay một giới hạn nào đó thì bạn chỉ việc sử dụng trực tiếp GKRandomSource

+ Bạn chỉ việc sử dụng GKRandomSource để ngẫu nhiên một mảng (array) như ngẫu nhiên xào bài.

+ Bạn chỉ việc đưa mảng vào  arrayByShuffelingObjectsInArray:

+ Lệnh sẽ trả về một nhân bản với thứ tự ngẫu nhiên.

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

Những cách cải thiện tỉ lệ tương tác cho quảng cáo video có thưởng

Quảng cáo video có thưởng đang trở thành một xu hướng mới. Không chỉ các nhà phát triển nhỏ lẻ sử dụng như là một phương thức để kiếm thêm tiền mà những nhà phát triển game lớn cũng đang sử dụng nó như một trong những phương thức kiếm tiền chính của game. Điển hình như Half Brick với game Pixel mới ra “Dan The Man” dùng quảng cáo video như phương thức chính bên cạnh phương thức In App Purchase truyền thống.

storychapter1

Phương thức quảng cáo mới cũng đi kèm với cách thức mới để có thề mang lại hiệu quả cao. Cụ thể hơn chúng ta hãy nhìn qua những ý tưởng sau:

1 – Sử dụng xem video có thưởng như một phần của hướng dẫn ban đầu:
Zero Day là ngày đầu tiên mà người chơi bắt đầu game. Họ không biết bất cứ thứ gì về thế giới mà bạn tạo ra. Do đó họ sẽ làm mọi thứ mà bạn nói để có thể hiểu được game của bạn. Thế thì việc của bạn thật sự rất đơn giản, hãy nói họ bấm vào phần xem video có thưởng và làm cho nó trở thành một phần không thể thiếu khi họ chơi game.

2 – Cung cấp một phương thức vòng lặp cho người chơi:
Một vòng lặp không nhất thiết phải là một ngày, nó có thể là 8 giờ hay ngắn hơn là 4 h. Thời gian đủ dài để người chơi quay lại và nhận thường.

3 – Xem video để đổi lấy một hộp quả bất ngờ khó có thể kiếm được trong game:
Những phần thưởng độc đáo lúc nào cũng đem lại những hiệu quả bất ngờ. Hãy cho đi nhiều và bạn sẽ nhận lại nhiều hơn

4 – Xem video để phục hồi:
Rất đáng để xem nếu như bạn có một quân đội và chết hết nửa số lượng quân trong một trận đánh quan trọng. Đợi 30 phút hay chỉ 30 giây quảng cáo sẽ làm cho bạn trở lại với chiến trường, bạn sẽ chọn cái nào?

5 – Save me / Hồi sinh:
Maze Run và rất nhiều game đã dùng ý tưởng này

6 – Money and Money:
Xem video để lấy thêm 10 đồng và tiến hành nâng cấp hay phải tham chiến 1 trận đấu 15 phút để lấy 10.000 đồng?
Cứ cho và bạn có mất gì đâu nào!

7 – Nhân đôi hay x XXX lần EXP hay Gold:
Việc lấy tiền theo cấp số nhân rất hấp dẫn nếu có nhiều hiệu ứng được đưa vào và có tác dụng cùng lúc

8 – Tăng tốc thời gian xây dựng hay khai thác:
Những thứ này rất hấp dẫn khi chỉ cần xem 1 video bạn có thể nâng sản lượng của ruộng lúa lên gấp đôi trong 2 giờ.

9 – Hiển thị các quảng cáo khác để tăng khả năng tương tác:
Hãy hiện các quảng cáo banner, full screen,

Theo thống kê, tỉ lệ người sử dụng chấp nhận in app purchase chỉ chiếm 2 %, từ 25 đến 40 % chấp nhận tương tác với quảng cáo video tuỳ theo cách thức quảng cáo của bạn. Hiển thị các quảng cáo khác có thể dẫn đến điều sau đó

10 – Loại bỏ những khó chịu của quảng cáo với 30 s quảng cáo video:
Xem Reward Video và không thấy bất cứ quảng cáo nào trong vòng 1 giờ là một phần thưởng khá hấp dẫn cho những người chơi đang tập trung vào game

11 – Quảng cáo là một phần trong gameplay:
Một bình máu có thể là không cần thiết khi đi qua 1 phân cảnh. Tuy nhiên, nếu nó cần thiết thì người chơi cũng sẵn sàng bỏ ra 30 giây xem quảng cáo để bảo đảm mình không bị gián đoạn sau đó. Đó là kiều quảng cáo tốt khi bạn cho người chơi lựa chọn và làm cho họ cảm thấy dễ chịu hơn vì

12 – Quảng cáo giữa game giúp người chơi thư giản giữa một màn chơi dài:
Một màn chơi nên được kết thúc trong khoảng 3-5 phút và nếu màn chơi dài 10 phút thì nên để mắt người chơi được nghỉ ngơi sau mỗi 3-4 phút. Hãy nhấn mạnh đều này sau quảng cáo, bạn có thể sẽ không bị ghét bỏ lắm. Nếu người chơi thích thì bạn có thể bán được 1 remove purchase đấy.

Kết luận:
Xem quảng cáo 1 cách vui vẻ chính là đích đến tiếp theo của ngành quảng cáo. Hãy bước theo xu hướng mới và bạn sẽ thành công hơn đấy.

Game tham khảo: Fighting Number

Hammer Head Premium

Cuộc chiến trong chính khu vườn nhà bạn.

Bạn đang có một khu vườn đẹp trong mơ, không sợ vệ sinh an toàn thực phẩm.

Tuy nhiên lại có cả mộ lũ thú cũng tới giành ăn, hãy đá đít chúng nó và chăm lo cho bản thân không trúng độc từ hoá chất nào.

Dzô dzô.

Hãy cùng chiến đấu chống lũ thú hung tàn

Đang ngày ngày tàn phá vườn rau!

Link: Download

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.