Category Archives: C# programming

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.

Kiếm tiền với Chartboost

Làm game di động hiện tại không chỉ là một sở thích, nó trở thành một nghề chính của lập trình viên. Đã là nghề nghiệp thì bạn cần phải sống được với nó mà không cần thêm những nguồn thu nhập khác. Một game ra đời có thể kiếm được hàng ngàn lượt download nhưng để biến nó thành tiền dành cho chúng ta những lập trình viên game đòi hỏi phải có chiến lược cụ thể. Bạn có thể thêm vào những in app purchase để tìm kiếm những người yêu thích game của bạn và mua để giúp trải nghiệm game tốt hơn, nhưng đó không phải là ý kiến hay với những game có dưới 10.000 lượt down. Với những game nhỏ, thêm quảng cáo là điều dễ dàng nhất. Sau này, bạn có thể tạo thành một mạng với quảng cáo của riêng mình với những game này, tuy nhiên đây là lúc liên kết để có thêm thu nhập.

Chartboost là một trong những mạng quảng cáo tốt nhất hiên nay. So với iAd chỉ chơi với những thị trường phát triển, revmob đã mạnh và chơi xấu với những nước nhỏ, Chartboost vươn lên với khả năng thu lợi nhuận cực lớn nếu bạn gặp đúng người sử dụng. Bạn tôi với game nhỏ của mình chỉ với hơn 1.000 lượt download đã có thể đem về hơn 50 $ chỉ với 10 download game từ chartboost. Có những game quảng cáo trên chartboost sẵn sàng cho bạn 28 $ chỉ để người dùng tải về và sử dụng. Như vậy, tiềm năng sử dụng chartboost rất cao so với các mạng quảng cáo khác như admob vốn chỉ trả được 7-8 $ nếu bạn có 1000 download.

Nào chúng ta bắt đầu thêm Chartboost vào trong ứng dụng của chúng ta.

1. Đầu tiên dĩ nhiên là đăng kí một tài khoản từ Chartboost

2. Thêm ứng dụng của bạn vào Dashboard của Chartboost:

3. Thêm các framework sau đây vào trong ứng dụng:

  • QuartzCore

  • SystemConfiguration

  • CoreGraphics

  • AdSupport

  • StoreKit

  • CoreMedia (SDK v4.4+)

  • AVFoundation (SDK v4.4+)

  • CoreData (SDK v4.4+)

4. Mã nguồn thêm Charstboost:

a. Trong AppDelegate.m ta import library của Charstboost:

#import “Chartboost.h”

Và code như sau:

– (void)applicationDidBecomeActive:(UIApplication *)application {

[Chartboost startWithAppId:@”YOUR_CHARTBOOST_APP_ID” appSignature:@”YOUR_CHARTBOOST_APP_SIGNATURE” delegate:self];

[[Chartboost sharedChartboost] showInterstitial:CBLocationHomeScreen];

}

=> Trong đó bạn sẽ phải thay App Id và App Signature vào trong ứng dụng để có thể nhận được quảng cáo từ Charstboost.

b. Sau đó chỉ cần show Interistial như trên là ứng dụng đã được tích hợp Charstboost vào rồi.

=> Đây là phần cơ bản, có những lệnh nâng cao cho phép chúng ta có thể có được những phản hồi vào làm cho trải nghiệm của người dùng trở nên tốt hơn nữa. Giờ thì cứ làm với những thứ này trước đã.

c. Chạy thử Chartboost, các bạn có thể vào website và tuỳ chọn Test Mode để xem game có chạy quảng cáo không.

Mạng này cập nhật nhiều thông tin và kiểm tra khá là lâu. Thông thường thì mất khoảng 2 h để có quảng cáo test. Muốn có thống kê thì phải chờ tới ngày hôm sau mới có, tuy nhiên quảng cáo nhiều nên dễ dàng hơn cho người phát triển.

Website của Chartboost: https://www.chartboost.com

 

  • Note:

Hiện tại, mình đang làm code game cho network này. Ai cần làm game liên hệ: nguyenngoch@gmail.com nhé.

Những lợi thế của game di động tại Việt Nam

* Game đã là một phần của công nghệ thông tin từ ngày bắt đầu có những chiếc máy vi tính cá nhân (PC). Chính game là động lực để những công ty sản xuất ra những thiết bị mạnh hơn để đáp ứng việc game ngày càng hiện đại và mạnh mẹ hơn.

– Giờ đây, game không còn là thứ chỉ có những thiết bị chuyên biệt (Xbox, PlayStation) hay những máy vi tính nặng nề (PC). Game trên di động đang phát triển với tốc độ chóng mặt và thay đổi những định kiến đã gắn liền với nó. Game di động giờ đây cũng có cốt truyện và đồ hoạ không hề thua kém PC.

 

Đối với lập trình viên:

– Những game trên PC thì việc lập trình có phần dễ thở hơn do không cần phải xem xét quá nhiều về phần cứng do những game trên Mobile thường nhẹ về cấu hình (nhất là những game được viết riêng cho IOS có cấu hình phần cứng tiêu chuẩn). Với Android, mọi chuyện có vẻ khó khăn hơn. Tuy nhiên các công cụ giả lập cũng đã làm việc rất tốt giúp cho chúng ta có thể xem xét hầu hết các điện thoại Android điển hình.

 

– Dễ dàng sửa lỗi (bug) cho game hơn so với việc phát hành bản cập nhật mà không có một ai để ý đến như game trên PC. Với một hệ thống phân phối hiện đã hoàn chỉnh (Google Play và AppStore), game di động dễ dàng được sửa những lỗi nghiêm trọng cực kì nhanh chóng và thuận tiện mà không tốn thêm bất kì chi phí nào (cho cả lập trình viên lẫn người sử dụng). Ngoài ra, việc nhận được các báo cáo lỗi cũng dễ dàng hơn rất nhiều nhờ có server và các nhận xét ngay trên Google Play hay AppStore cũng giúp ích khá nhiều cho các lập trình viên trong việc phát hiện và sửa lỗi chương trình.

 

– Dễ dàng cập nhật những tính năng mới thông qua mạng của nhà sản xuất như Apple (AppStore). Những tính năng mới sẽ được cập nhật liên tục làm cho game luôn luôn có thứ mới để khám phá chứ không phải chờ tận 1-2 năm mới có một bản cập nhật lớn. Ngoài ra, những sự kiện lớn như Halloween, Chirsmast Eve luôn luôn có những cập nhật phù hợp từ những vật dụng trong game đến những event giảm giá hay theme được thay đổi theo đúng không khí của sự kiện. Chính những điều này làm game không bị lãng quên và luôn phát triển.

Đối với người sử dụng:

– Không cần quan tâm đến việc nâng cấp game do những công cụ sẵn có của nhà phát hành (Apple với AppStore) đã làm việc đó thay bạn. AppStore của IOS 7 giờ đây tự động cập nhật những phiên bản mới của game thay vì bạn phải cập nhật nó bằng tay như lúc trước.

Điểm yếu của game di động đang dần được khắc phục:

– Nói đến game di động, người ta thường nghĩ đến những game đơn giản với đồ hoạ đẹp nhưng thiếu chiều sâu và cốt truyện. Giờ đây với sự phát triển mạnh mẽ của phần cứng, điển hình là iPad Air vừa được giới thiệu vào ngày 22/10/2013 cho sức mạnh đồ hoạ vượt trội đã mở đường cho việc phát triển game di động với đồ hoạ và cốt truyện mạnh mẽ hơn

 

– Đồ hoạ là một trong những yếu tố hàng đầu để giúp người chơi lựa chọn. Một game không đẹp thì dù hay cũng sẽ rất ít người chơi. Game di động lúc trước còn thiếu yếu tố này do chưa có được sự hỗ trợ từ những hãng khác và sức mạnh đồ hoạ chưa cho phép game di động làm được điều đó.

– Những engine vật lý mạnh đang được phát triển trên PC giờ bắt đầu lấn sân qua lĩnh vực di động. Trong đó phải kể đến Unity 3D, đây là một engine đa nền được phát triển bởi Unity Technologies. Sự lấn sân của Unity 3D đã giúp cho game di động trở nên đẹp đẽ và mạnh mẽ hơn rất nhiều so với việc dùng những code bình thường để vẽ.

+ Sự lấn sân của Unity 3D dẫn tới hàng loạt game di động mạnh mẽ được phát hành trên Android như Dragons and Titans, Three Kingdom Online. Một trong số những game đã vận dụng rất tốt khả năng của engine vật lý này là 3T. Đây không chỉ là một game đẹp đẽ và sắc nét ăn đứt những game cũng loại trên thị trường.

 

– Bên cạnh đó, việc phát triển những engine game từ chính nhà sản xuất như Apple cũng góp phần không nhỏ cho việc gia tăng số lượng lẫn chất lượng của game trên di động. Kèm theo việc giới thiệu iOS 7 dành cho di động, Apple cũng đồng thời giới thiệu đến những lập trình viên bộ công cụ mới “Sprite Kit” dành cho việc phát triển những game trên cả Mac OS lẫn di động.

+ Bộ công cụ này không mạnh như Unity 3D nhưng lại hoàn toàn miễn phí và sử dụng vô cùng dễ dàng. Đây chính là nước cờ thông minh của Apple nhằm phát triển thêm đầu game và tăng sự phụ thuộc của các lập trình viên với họ.

 

– Những engine miễn phí hoàn toàn hay miễn phí có điều kiện cũng được đưa ra liên tiếp nhằm tạo điều kiện cho các nhà phát triển game có công cụ để làm việc như Cocos2D, Cocos2D-X (nhiều hệ điều hành)

 

* Webgame giờ đây không thể so sánh với game trên di động được nữa. Những game di động cần đường truyền thấp hơn nhiều do đã chứa phần lớn nội dung game trong máy. Đồ hoạ của Webgames cũng không thể so sánh được với những game mobile vì game mobile đang được sự hậu thuẫn rất lớn của các engine game như vừa nói ở trên.

* Kết: Với sự phát triển chóng mặt của game di động chỉ trong vòng 3 – 5 năm nữa khi phần cứng của các dòng điện thoại thông mình đủ mạnh thì game di động sẽ thay thế hoàn toàn game PC.

Làm thế nào để gia nhập vào lập trình game di động?

Mỗi người khi bước vào lập trình game đều có mong muốn tạo ra một game lớn với rất nhiều chức năng và hình ảnh đẹp. Tuy nhiên, nếu bạn làm quá lâu mà không thể xuất bản ra bất cứ một game nào thì cảm giác chán nản sẽ đến rất nhanh và bạn cũng chả biết mình đang hướng tới cái gì. Đây là quá trình phát triển game của LapKan cho các bạn tham khảo.

I. Giai đoạn bắt đầu:

Bạn chưa có bất cứ kinh nghiệm nào để viết game. Hãy bắt đầu bằng một game nhỏ mà bạn dự tính có thể viết trong vòng 15 phút (hay thậm chí bạn nghĩ rằng có thể hoàn thành trong vòng 5 phút), bạn sẽ thấy bạn hoàn thành nó trong vòng 1 tháng với những ý tưởng thêm.

* Game trong giai đoạn này chỉ cần:

– Menu vào game (tiêu đề game, biểu tượng game, nút bắt đầu)

– Phần chơi game (Phần chơi chính, điểm số và thời gian)

– Phần kết thúc (Thống kê điểm, nút restart, nút quay lại Menu)

– Phần phụ (Âm thanh, nhạc nề)

=> Xong những thứ này là Apple đã coi đó là một game nhỏ và sẵn sàng cho bạn bán trên AppStore. Hãy làm đúng những thứ này và đưa lên AppStore bạn sẽ có nhiều kinh nghiệm hơn đấy.

II. Giai đoạn bổ sung:

– Thêm vào các phần phụ để làm game hoàn chỉnh

– Một game thực sự có rất nhiều thứ ngoại trừ gameplay của nó ra:

+ Mạng xã hội (Facebook, Tweeter, …) luôn là nơi giúp cho game của bạn có thê vươn ra xa hơi tới những người bạn của người chơi.

+ Game Center (Leaderboard và Archivement) là nơi mà người chơi ghi lại những kỉ lục của bản thân và mục tiêu hướng tới của người chơi

+ In App Purchase là thứ để bạn kiếm ra tiền, làm game mà không chú ý đến vấn đề tài chính thì nó không thể lâu dài và có được sự quan tâm của bạn khi bạn mải đi kiếm tiền ở nghề khác

+ Ad Banner nếu game bạn miễn phí và không bán vật phẩm thì thứ duy nhất bạn kiếm được chính là quảng cáo, có rất nhiều công ty quảng cáo uy tính như Google với Admob và Revmob + rất nhiều công ty khác. Việc thêm banner quảng cáo cũng không có gì khó khăn và kiếm được thêm tiền. Hãy add quảng cáo và thêm phần remove bằng cash như thế sẽ giúp bạn có thểm doanh thu từ game của bạn mà không tốn thêm bao nhiêu thời gian.

III. Giai đoạn phát triển:

– Bạn đã có đầy đủ mọi công cụ trong tay từ hình ảnh để âm thanh do đã làm các game trước đó. Đây là lúc bạn khởi động một dự án game thật sự. Với những chương trình trước đó giờ là lúc bạn tận dụng. Quảng cáo chéo luôn là một lựa chọn tốt khi bạn không tốn thêm chi phí (game của chính bạn mà) lại có thể tận dụng được những thứ đã có trước đó.

– Với những thuật toán và logic bạn đã làm lúc trước, game mới ra chỉ cần hoàn thành thêm 20 % còn lại có thể lấy tài nguyên và chức năng của những game cũ của bạn.

– Hãy cẩn thận 20 % của một game lớn cũng rất là chua đấy.

IV. Tạo đế chế của riêng bạn:
– Game bạn dù hay thể nào thu hút được bao nhiêu người nhưng bạn vẫn đang chịu sự quản lý của Apple. Những gì quý giá nhất của game vẫn đang nằm trong tay của Apple, đó là người dùng và ngay cả chính game đó.

– Bạn cần biến nó thành của mình, hãy xây dựng server và cho người dùng đăng nhập bằng chính nickname của họ (hay email) như vậy bạn đang có thông tin người dùng, thứ có giá trị nhất trong thời đại công nghệ thông tin.

– Cái thừ hai chính là game, game của bạn nằm trong tay Apple như hàng triệu game khác, điều đó nghĩa là sự sống chết của bạn đang nằm trong tay của Apple, một ngày đẹp trời nào đó Apple không thích bạn thì game của bạn có thể mất tích hoàn toàn trên AppStore. Hãy đưa nó tới những platform khác và port nó qua Android để có thế đứng vững vàng hơn.

– Hãy tạo ra một game Việt và làm cho những lập trình viên game như chúng tôi tự hào vì có những nhân tài kiệt xuất nào.

Lập trình trí tuệ nhân tạo dành cho các nhân vật (AI)

Một game sinh ra không phải bao giờ cũng chỉ có những hành động đơn giản được lập trình trước mà còn có thể tuỳ theo tình huống mà các đối tượng có những cách phản ứng hợp lý hơn gây khó khăn và tạo hứng thú cho người chơi. Bạn đâu muốn chơi một trò chơi mà những nhân vật của máy chỉ biết lao đầu vào bạn để chết đúng không?

Sau đây là phương pháp để tạo trí tuệ nhân tạo với Sprite-Kit. 

Đầu tiên bạn phải hiểu rằng, từng nhân vật bạn tạo ra là một đối tượng được điều khiển hoàn toàn riêng biệt trong Sprite-Kit. Bạn có thể add một phần điều khiển vào trong từng đối tượng này để nó có thể tránh né những viên đạn hay đuổi theo người chơi nhằm làm game thực và khó khăn hơn.

Tuy nhiên tạo ra 100 loại quái vật bạn phải ép để viết 100 loại trí tuệ nhân tạo khác nhau là việc làm hết sức nhảm nhí. Chúng ta cần tách riêng giữa nhân vật trong game và trí tuệ nhân tạo của nó, làm như vật bạn không chỉ có thể đưa bất kì trí tuệ nhân tạo (AI) cho các loại quái vật mà còn có thể thay đổi nó một cách dễ dàng. Ngoài ra việc bảo trì và sửa chữa những lỗi trong đó cũng nhẹ nhàng hơn rất nhiều so với việ ép tất cả vào trong cùng một lớp (class) nhân vật.

* Về các bước, bạn cần hiểu nó như sau:

Chúng ta sẽ chia ra làm những lớp sau để quản lý chương trình dễ dàng:

+ LKCharacterNode: là lớp cơ sở nhất của nhân vật, đây là nguồn của mọi nhân vật từ các nhân vật anh hùng (do bạn điều khiển), các loại quái vật (do máy điều khiển) đều bắt đầu từ đây.

+ LKHeroCharacter: là lớp nhân vật do người chơi điều khiển (có thể không chỉ có một vì chúng ta có thể phát triển những game multiplayer có nhiều người chơi) => Từ đây bạn có thể phát triển thành những lớp nhân vật hoàn toàn khác biệt như Chiến binh (Warrior), Pháp sư (Wizard) hay Cung thủ (Ranger) tuỳ vào game của bạn. Đây chính là đối tượng mà các quái vật tìm và tiêu diệt.

+ LKEnemyCharacter: Đây chính là đối tượng cần đến trí tuệ nhân tạo được lập trình bởi các lập trình viên. Đối với những trí tuệ nhân tạo (AI), ta chỉ cần tạo ra sau đó để chúng lên bản đồ lập tức AI sẽ điều khiển những đối tượng này và chúng sẽ tự biết làm những gì để tiêu diệt các anh hùng của chúng ta. Hay đơn giản hơn, trí tuệ nhân tạo sẽ điều khiển các quái vật này đi theo những đường mà người chơi không đoán trước được để làm cho màn chơi trở nên lý thú hơn.

* Ta sẽ đi sâu vào code hơn nữa để hiểu hơn về cách tạo trí tuệ nhân tạo này:

+ LKCharacterNode: sẽ bao gồm những thuộc tính mà bạn cần để chương trình chạy tốt ví dụ như isDead, isStun, lkHealth và những thuộc tính mà bạn cần. Trí tuệ nhân tạo cũng có thể lấy các thuộc tính này ra để xem xét những hành động của đối tượng ví dụ như khi thấy số lượng máu quá thấp nó sẽ tự động chạy trốn hay hành động như thế nào là tuỳ theo ý bạn. Phần này, mỗi người có những thuộc tính cần thiết hay khộng và mỗi game mỗi khác nên tôi sẽ không đi sâu vào nó.

+

+ LKEnemyCharacter: Đây là phần chính của hướng dẫn. Việc đính kèm một trí tuệ nhân tạo sẽ nằm ở đây.

Trong file hedader bạn sẽ cần có những dòng code sau:

#import “LKCharacterNode.h”

@class LKArtificialIntelligence;

@interface LKEnemyCharacter : LKCharacterNode

@property (nonatomic) LKArtificialIntelligence * lkIntelligent;

@end

Bạn kết nối giữa lớp LKArtificialIntelligence với lớp LKEnemyCharacter làm cho 2 lớp này cùng có thể sử dụng và gọi lẫn nhau. Lớp AI giờ là một phần của lớp LKEnemyCharacter và được sử dụng và làm bất cứ thứ gì trong lớp này. Vậy là ta có thể điều khiến chính lớp LKEnenmyCharacter bằng lớp AI này.

Trong file .m ta có những dòng code sau:

#import “LKEnemyCharacter.h”

#import “LKArtificialIntelligence.h”

 

@implementation LKEnemyCharacter

#pragma mark – Loop Update

– (void)updateWithTimeSinceLastUpdate:(CFTimeInterval)interval {

[super updateWithTimeSinceLastUpdate:interval];

[self.lkIntelligent updateWithTimeSinceLastUpdate:interval];

}

}

@end

Đây là phần điều khiển của AI được gắn vào trong đối tượng Enemy. Bạn sẽ gọi lệnh Update này để chương trinh điều khiển. Dòng code super để làm những việc điều khiển bạn đã viết trên LKCharacterNode. Còn dòng intelligent mới thực sự là dòng lệnh bạn cần để AI điều khiển đối tượng.

Thế là chương trình sẽ có phần điều khiển dành cho AI. Giờ thứ bạn cần là một AI để đối tượng hoạt động theo ý muốn của bạn.

* Phần AI: 

– AI là một đối tượng được đính kèm trong LKCharacterNode. Trong đối tượng,

* Đây là phần code tong AI header:

@class LKCharacterNode;

@interface LKArtificialIntelligence : NSObject

@property (nonatomic, weak) LKCharacterNode *character;

@property (nonatomic, weak) LKCharacterNode *target;

– (id)initWithCharacter:(LKCharacterNode *)character target:(LKCharacterNode *)target;

– (void)clearTarget:(LKCharacterNode *)target;

– (void)updateWithTimeSinceLastUpdate:(CFTimeInterval)interval;

@end

+ Như đã giải thích ở trên @class sẽ làm cho lớp này nằm trong một lớp khác và trở thành một phần của lớp kia. AI cần có đối tượng để có thể đưa ra hành động hợp lý, nó cũng cần phải biết đối tượng nó được đính kèm là đối tương nào nên 2 đối LKCharacterNode chính là 2 đối tượng đó. Ngoài ra thì AI không tự khởi tạo mà nó được khởi tạo bới lập trình viên nếu muốn nên nó cũng kèm them một lệnh init. Lệnh update để điều khiển đối tượng đi theo quỹ đạo cần thiết.

 

(Phê rồi từ từ update tiếp, để xem có ai hứng thú không chứ viết bài không ai coi buồn lắm 😀 )

Lập trình hướng đối tượng với Sprite Kit

Rất nhiều người khi mới bước vào lập trình IOS hay các ngôn ngữ khác đang nghĩ mình theo lập trình hướng đối tượng.

Tuy nhiên để hiểu được hướng đối tượng dùng để làm gì thì bạn chỉ có thể làm được nó sau ít nhất là 1-2 năm kinh nghiệm làm việc và nghiên cứu. Lập trình hướng đối tượng không phải là chia chương trình ra các đối tượng để dễ dàng quản lý không thôi mà nó có thể làm được những việc mà lập trình tuyến tính không thể làm được thì lúc đó mới có nghĩa là bạn đã hiều và thâm nhập vào lập trình hướng đối tượng.

* Những cấp độ của lập trình hướng đối tượng:

+ Viết được các lớp (Class) để sử dụng trong chương trình

+ Sử dụng được các Pattern để tái sử dụng và phát huy được khả năng của lập trình hướng đối tượng

+ Sử dụng được lập trình dynamic trong chương trình

+ Tạo ra các thư viện (Static Library) để tái sử dụng những lệnh và lớp đã viết trước đó

+ Tạo thành các bot có khả năng tự xử lý những tập lệnh đơn giản làm cho việc lập trình trở nên tự động hơn nhiều lần.

Chỉ khi nào phát huy được những thứ này thì bạn mới có thể gọi là lập trình hướng đối tượng. Những bài sau LapKan Corp sẽ đi sâu vào phát triển từng chủ đề để bạn có thể hiểu được những khái niệm trên.

Cách đánh dấu của Object C

* #pragma là gì?

Pragma là từ khóa của Objective C để đánh dấu những đoạn mã dài để dễ dàng quản lý về sau.

Đối với những lớp (Class) dài thì việc quản lý từ phần của chương trình khá là khó khăn do không biết nó nằm ở đâu trong hơn 2.000 đến 3.000 dòng code. Đối với Objective C thì chúng ta có công cụ #pragma Tên section để có thể đánh dấu những phần khác nhau của cùng một đoạn code.

#pragma lkMarking

Chúng ta có thể dùm Jump Bar nằm phía dưới cửa sổ làm việc để nhảy thằng tới những phần đã đánh dấu. Ngoài ra còn có chức năng để tạm rút gọn những đoạn code nằm trong 1 pragma

Project-> Thư mục > FileClass -> pragma mark | methods

Đây là tính năng quen thuộc của hầu hết các IDE.

* Đối với C# chúng ta sẽ có region để đánh dấu những đoạn mã như thế. Cú pháp

#region lkSection

#endregion

– Và IDE Visual Studio hỗ trợ trực tiếp.