Lập Trình Game Với Người Mới Bắt Đầu?

Thảo luận trong 'Tổng Hợp' bắt đầu bởi Pussy, Thg 11 8, 2017.

  1. Pussy

    Pussy New Member Chuyển tiền Tìm chủ đề

    Bài viết:
    Tìm chủ đề
    950
    Vậy là bạn đang có ý định tạo một trò chơi, huh? Hãy chuẩn bị đi, đó là một hành trình dài và gian khổ.

    Cuộc phiêu lưu của một game developer bắt đầu với một ý tưởng về một trò chơi mà họ muốn làm. "Một trò chơi với một số quái vật bên trong của một ngôi nhà tối tâm, đáng sợ và người chơi chỉ có thể tránh né chúng và tìm lối ra” - Nó chỉ đơn giản như thế. Với những người mới bắt đầu họ nghĩ nó rất đơn giản. Nhưng đó là một sai lầm, bởi trong game bạn còn phải tạo ra thêm vô số thứ khác như tạo và xắp đặt bàn, ghế, cánh cửa, tủ quần áo, tivi…cùng một số âm thanh cho mỗi con quái vật…rồi làm thế nào để cho chúng di chuyển, làm thế nào để đốt một ngọn đuốc…

    Bạn có thể nói, "Vâng, nhưng tôi chỉ muốn làm cho một trò chơi như Mario. Nó cũng đâu quá khó". Mặc dù được tạo ra hơn 25 năm trước đây, trò chơi platformer 2D này cũng khá khó khăn để thực hiện. Nếu bạn hỏi bất kỳ game developer nào đã thực hiện hoặc đang cố gắng để làm một game như thế, và bạn sẽ nghe một "câu chuyện" dài đến nửa đêm khi họ coding để cố gắng làm cho các đối tượng di chuyển và thực hiện va chạm một cách chính xác…. Mặc dù nó có vẻ đơn giản từ góc nhìn của một game thủ, nhưng từ quan điểm của một game developer, có vô số các quy trình cần phải được tính toán cẩn thận và thực hiện rất công phu khi làm cho một trò chơi.

    Nếu chỉ có một điều bạn cần biết trước khi bắt đầu học cách để làm cho trò chơi, nó này: Tạo trò chơi phải mất rất nhiều thời gian và nỗ lực!

    [​IMG]

    1. Có một ý tưởng hay

    Khi bạn nghĩ rằng bạn hoàn toàn sẵn sàng để tạo ra một trò chơi, hoặc để bắt đầu cuộc hành trình của bạn trong việc phát triển trò chơi, vấn đề đầu tiên bạn sẽ gặp phải được tìm ra một ý tưởng hay. Tất cả những “trạng thái” trong trò chơi của bạn đều phụ thuộc vào ý tưởng ban đầu này.

    Bạn có thể rơi vào 2 loại:

    a) Bạn là một người mới bắt đầu với rất ít hoặc không có kinh nghiệm lập trình

    Trong trường hợp này, bắt đầu rất đơn giản. Nếu bạn duyệt qua các diễn đàn, các bạn sẽ thường thấy các nhà phát triển trò chơi kỳ cựu nói với những người mới bắt đầu là hãy làm một game Pong, thay vì thực hiện những ý tưởng mà bạn đang theo đuổi. Đề nghị này không phải là một sự xúc phạm, đó là một chiến lược đã được chứng minh. Khi bạn bắt đầu, hãy cố gắng học cách “sao chép” một trò chơi cũ như Pac Man, Missile Command, hoặc có lẽ là một trò chơi đơn giản như đánh cờ. Bạn cũng sẽ ngạc nhiên khi có rất nhiều thứ bạn sẽ được học từ những game như thế, và những gì bạn học sẽ được sẽ áp dụng cho các trò chơi chất phức tạp hơn sau này của bạn.

    b) Bạn là một lập trình viên có kinh nghiệm hoặc đã ít nhất là đã từng đọc một cuốn sách viết về C

    Khi bạn đã biết chương trình là gì thì sẽ có một chút dễ dàng hơn cho bạn để bắt đầu các trò chơi cao cấp hơn. Ngay cả khi bạn là một lập trình viên giàu kinh nghiệm, bạn sẽ không “bị đau” nếu bắt đầu từ những thứ đơn giản để biết được lập trình trò chơi khác với lập trình ứng dụng hoặc phát triển web như thế nào. Ngoài ra bạn có thể sẽ học thêm một ngôn ngữ mới hay biết được một số điều mới mẽ.

    Bắt đầu từ đâu?

    Sau khi bạn có một ý tưởng cho trò chơi của bạn, bước tiếp theo là quyết định cách bạn sẽ tạo ra trò chơi của bạn. Có hai phương án sau:

    - Tự mình lập trình tất cả mọi thứ
    - Tận dụng game engine hay một game buider

    Game engine

    Một sai lầm phổ biến với các game developer mới là họ thực sự nghĩ rằng "game engine" cơ bản là một phần mềm kỳ diệu mà bạn chỉ cần đưa vào chúng những graphics của bạn, thay đổi một vài dòng code giống như skining một trang web forum, thì… tôi đã có một trò chơi cho mình! Điều này hoàn toàn không đúng. Thuật ngữ "game engine" được sử dụng rất rộng rãi và bị hiểu sai, nó thực sự không có ý nghĩa cụ thể. Một game developer có thể đưa ra một "game engine" chỉ trong một vài tuần, trong khi một đội game developer chuyên nghiệp lại phải mất một năm để tạo ra nó.

    Tuy nhiên, về cốt lõi chúng đều thực hiện những nhiệm vụ tương tự nhau. Một game engine là một tập hợp các code làm việc chặc chẽ với nhau để xử lý các yếu tố cơ bản mà hầu như tất cả các trò chơi đều cần đến. Những yếu tố đó có thể là: graphics rendering (2d hay 3d), Physics (phát hiện và đáp ứng va chạm), player input (xử lý bàn phím và các sự kiện cảm ứng), và những thứ có khả năng khác như kết nối mạng, animation, các menu, high scores…. Game engine sẽ giúp cho bạn xử lý khá nhiều công việc, chắc chắn chúng có thể giúp bạn tiết kiệm rất nhiều thời gian và công sức khi tạo ra trò chơi của bạn, nhưng đừng suy nghĩ rằng bạn sẽ không mất nhiều thời gian và công sức khi sử dụng các game engine.

    Game Builders

    Game Builders là một dạng khác của game engine. Nói cách khác, thông thường với game builder bạn chỉ cần đưa vào một số graphics viết một vài dòng lệnh đơn giản, bấm vào một số checkboxes và thay đổi một số cài đặt để add thêm một số hành vi, sau đó chỉ cần nhấn vào nút “Build” thì trò chơi của bạn được thực hiện . Game Builders có thể là một cách tốt cho những đứa trẻ làm một trò chơi và thúc đẩy sự sáng tạo của chúng, nhưng quá trình tạo ra rất nhanh chóng và dễ dàng, làm cho chúng không linh hoạt và có nhiều hạn chế.

    Lập trình từ đầu đến cuối

    Nhiều nhà phát triển trò chơi muốn "bắt đầu từ đầu" và xây dựng một trò chơi từ mặt đất lên, tự mình làm (hầu như) mọi thứ. Đây là một cách tuyệt vời để tìm hiểu về phát triển game và lập trình nói chung. Để đi từ hướng này, điều đầu tiên bạn cần làm là chọn cho mình một ngôn ngữ lập trình.

    2. Ngôn ngữ lập trình

    Có rất nhiều ngôn ngữ mà nhiều người mới bắt đầu sẽ “bị lạc”trong đó và không bao giờ học được điều gì. Dưới đây là những ngôn ngữ thích hợp nhất bạn nên học khi phát triển cho Mac-iOS.

    C

    Đây là một trong những ngôn ngữ được ưa thích nhất bởi các lập trình viên. Trong nó có vẽ rất phức tạp, nhưng nó thực sự rất logic. Trong những năm 1990 và đầu những năm 2000, hầu hết các trò chơi được viết bằng C. Marathon, Duke Nukem 3D, Quake 3, và hàng tá những game khác. Mặc dù ngày này C ít được quan tâm nhưng vẫn là một lựa chọn hoàn toàn tốt.

    Một trong những phần khó khăn nhất để hiểu về các ngôn ngữ lập trình C là quản lý bộ nhớ và con trỏ. Đối với người mới bắt đầu, điều này có thể rất khó hiểu nên khi nhảy thẳng vào C cho trò chơi đầu tiên của bạn, sẽ rất lâu để bạn tạo ra trò chơi của mình. Mặc dù vậy cũng có những điều tuyệt vời khi học nó, là một khi bạn biết nó, bạn có thể tìm hiểu hầu như bất kỳ ngôn ngữ mới nào một cách nhanh chóng.

    C++

    Ngày nay, thay vì viết các trò chơi trong C hầu hết các game “chuyên nghiệp” được viết trên nền tảng C++ (game engine). Sự khác biệt cơ bản giữa C và C++ là C++ là một ngôn ngữ "hướng đối tượng". Lập trình hướng đối tượng (OOP) là một chủ đề rất rộng vượt ra ngoài phạm vi của bài viết này, nhưng đơn giản là không giống một ngôn ngữ thủ tục như C, C++ là nơi tất cả các hành động có thể thực hiện và xử lý được tổ chức thành một danh sách lớn gọi là các "hàm", lập trình hướng đối tượng cung cấp một cách để cấu trúc tất cả những hành động và quá trình thành một hệ thống các"classes" với các dữ liệu và các hàm liên quan chặt chẽ với nhau.

    Trong khi OOP là thứ tốt nhất để các lập trình viên tiếp cận, nhưng có một điều bạn phải cẩn thận với C++. Có rất nhiều thứ đang xảy ra ở đằng sau scene và đôi khi ứng dụng của bạn có thể hành xử khác nhau, và việc gỡ lỗi làm cho bạn như đang sống trong địa ngục. C++ cũng là một ngôn ngữ rất phức tạp. Một khi bạn biết được multiple inheritance, templates, operator overloading… bạn sẽ nhanh chóng hiểu ra lý do tại sao một số người không thích C++ và muốn sử dụng C. Nhưng nếu bạn không cần phải sử dụng tất cả các tính năng này thì bạn có thể chìm trong sự “ngọt ngào” của C ++.

    Objective-C / Objective-C ++

    Objective-C là những gì được sử dụng khi bạn phát triển ứng dụng Cocoa cho Mac OS X và iOS. Objective-C cũng có khả năng hướng đối tượng. Nó là một ngôn ngữ rất “sạch sẽ” và thường được sử dụng bởi người mới bắt đầu kể từ khi Cocoa và Objective-C cung cấp những cách đơn giản để làm những điều phức tạp, hoặc những thứ đó sẽ là phức tạp nếu làm bằng ngôn ngữ khác. Bạn có thể nói rằng ngôn ngữ này cũng giống như một phiên bản của OOP C, mà không có sự nguy hiểm của C++.

    Objective-C++ là một superset của Objective-C có thể tương tác hoàn hảo với C++ code. Điều này có nghĩa là khi bạn sử dụng Objective-C++, bạn có thể sử dụng C, C++, và cú pháp Objective-C trong cùng một chương trình. Điều này có lợi thế rất lớn, cho phép bạn kết hợp một cross-platform C++ hiện có với một Objective-C để tương tác với Cocoa trong Mac OS X hay iOS. Đó là một tính năng rất mạnh mẽ.

    Java

    Java một ngôn ngữ phổ biến vì cho phép các nhà phát triển viết một chương trình dựa trên Java (gọi là applet) và nhúng nó vào một trang web. Kể từ đó Java đã trưởng thành và lan rộng để trở thành một ngôn ngữ phổ biến để viết các ứng dụng trên cở sở sever, đối với các trò chơi hiện nay, có cũng không phổ biến lắm. Đặc điểm lớn nhất của Java là khả năng nền tảng chéo, để bạn có thể viết một chương trình một lần, và nó sẽ làm việc trên nhiều nền tảng. Đây là một ngôn ngữ thú vị để tạo ra những trò chơi đa nền tảng mà không cần phải đối phó với porting. Nhưng nếu bạn muốn tạo ra một trò chơi 3D phức tạp, thì đừng sử dụng Java. Một lý do đơn giản là vì không có nhiều người thực hiện, có nghĩa là bạn sẽ có ít sự trợ giúp cũng như những code cho bạn tham khảo. (Java có thể được sử dụng cho các trò chơi 3D đơn giản. Runescape là một ví dụ về điều này.)

    Python với pygame hoặc Pyglet

    Một ngôn ngữ cũng khá tốt đối với newbie hiện nay là Python và các thư viện trò chơi Pygame và Pyglet. Python là một ngôn ngữ khá đơn giản và nó đủ mạnh mẽ để viết các trò chơi thực có chất lượng. Khi bạn bắt đầu với một ngôn ngữ như Python, nó sẽ là một bước đệm tốt cho bạn khi chuyển sang C / C ++ / v.v.. sau này. Hãy tìm kiếm trên Google về Python và Pygame hoặc hướng dẫn Pyglet, nó sẽ khá hữu ích trên con đường phát triển của bạn.

    3. Engines Game / Frameworks / Creators

    Đối với các thông tin mới nhất về những công cụ này, bạn có thể xem thêm tại đây.


    Các công cụ

    Để xây dựng và test trò chơi của bạn, bạn sẽ cần một số loại công cụ. Nếu bạn đang sử dụng một ngôn ngữ biên dịch như C, C++, C#, Java, vv.., bạn sẽ cần một trình biên dịch để biên dịch code của bạn và tạo ra các ứng dụng. Bạn cũng sẽ cần một phần mêm soạn thảo văn bản "của lập trình viên" với "màu cú pháp" và các tính năng khác khi viết code của bạn. Có hàng tá các trình biên dịch và soạn thảo văn bản, nhưng thường chỉ có hai loại được sử dụng để phát triển trên nền tảng của Apple.

    Xcode

    Được tạo bởi Apple, Xcode là IDE (Integrated Development Environment) để phát triển các ứng dụng cho Mac OS X và iOS. Xcode biên dịch nhiều ngôn ngữ, bao gồm cả các đại gia lớn như C, C ++, Objective-C, và Objective-C ++, và thậm chí là các ngôn ngữ khác như AppleScript và Ruby. Nếu bạn đang dự định viết game trên một máy Mac, bạn sẽ cần phải làm quen với Xcode.

    Make

    Make là một lệnh UNIX sử dụng để biên dịch các ứng dụng trên command line. Xcode là về cơ bản chỉ là một phiên bản đồ họa của Mark và một trình soạn thảo văn bản đơn giản. Một số nhà phát triển thích Xcode IDE, trong khi những người khác lại thích Mark. Nếu bạn là một người mới, tôi nghĩ bạn nên chọn Xcode.

    Libraries

    Với ý tưởng, ngôn ngữ, và các công cụ, bước cuối cùng là chọn một số thư viện thích hợp để giúp bạn tạo ra trò chơi của mình. Một trong những lĩnh vực mà các thư viện có thể giúp bạn là sound, graphics, và physics. Nhu cầu phải bổ sung thêm các yếu tố khác cho trò chơi rất cao và nếu bạn không có thời gian cũng như khả năng để tạo ra chúng, bạn có thể “tận dụng” các công việc của những người khác.

    4. Bạn sẽ đi đến đâu?

    Một khi bạn đã chọn và học một ngôn ngữ lập trình để sử dụng trong các công cụ mà bạn lựa chọn, bạn có thể bắt đầu xây dựng trò chơi của bạn. Tôi cung cấp khá nhiều thông tin ở đây, nhưng có rất nhiều thứ khác mà tôi đã không nói đến. Lập trình game là một chủ đề lớn, chứng minh là có đến hàng trăm đầu sách viết về chủ đề này!

    Để tìm hiểu thêm về làm thế nào để bạn có thể tự viết một trò chơi cho mình, có bốn con đường bạn có thể theo. Đó là:

    - Tự thực nghiệm
    - Nhìn vào những trò chơi mã nguồn mở như một ví dụ
    - Đọc hướng dẫn trên web và các diễn đàn
    - Đọc các cuốn sách lập trình game

    Đó là những con đường tốt nhất. Bạn cũng có thể kết hợp tất cả chúng. Sách là một cách tuyệt vời để bạn có những bước đi chắc chắn trong lập trình một trò chơi. Hãy đến những hiệu sách gần nhất và chọn cho mình những quyển mà bạn thích nhất. Một cách tuyệt khác là nhìn vào code của trò chơi hiện có. Khi bạn lần đầu tiên mở ra, bạn sẽ bị choáng. Nhưng trong vòng một giờ bạn sẽ có thễ hiểu được chúng.

    Và một điều hiển nhiên, đó chính là khi bạn bị “mắc kẹt” trong một vấn đề nào đó, lúc này, tìm kiếm các hướng dẫn trên internet, các bài trên diễn đàn, và các ví dụ về chủ đề này sẽ là một nguồn lực lớn giúp bạn giải quyết vấn đề. Các diễn đàn đều rất năng động và thân thiện, vì vậy đừng ngại đặt câu hỏi khi bạn đang đứng trước một bức tường.

    Sau khi có được trò chơi của mình, hãy thử làm một cái gì đó mới hơn, cao cấp hơn. Một khi bạn đã vượt qua những trở ngại trong trò chơi đầu tiên của mình, bạn đã có thể học nhanh hơn và nhanh hơn nữa. Chẳng bao lâu bạn sẽ chỉ bị giới hạn bởi chính trí tưởng tượng của bạn mà thôi.

    J.Black
    Theo idevgames.com
     
    Last edited by a moderator: Thg 11 18, 2017
  2. Đang tải...
  3. Wall-E

    Wall-E Moderator Chuyển tiền Tìm chủ đề

    Bài viết:
    Tìm chủ đề
    2,451
    Làm thế nào để tôi có thể bắt đầu lập trình game?

    Bài viết được dịch từ trang web Gamasutra

    [​IMG]

    Tôi nhớ khoảng 5 năm về trước, tôi có gửi một bức email cho một vị giáo sư ở trường đại học danh tiếng M.I.T sau khi nhìn thấy bà ấy trong một chương trình truyền hình đặc biệt nói về chủ đề Trí Tuệ Nhân Tạo (AI). Tôi đã dành hết tâm huyết vào bức email đó để nói về các lý thuyết của tôi về phát triển Trí Tuệ Nhân Tạo, như làm thế nào các máy tính có thể được lập trình để nhận ra các môi trường xung quanh, làm thế nào để những cảm xúc có thể được học thông qua trải nghiệm, v.v... Tôi đã dành ra 4 giờ đồng hồ để viết bức email đó bởi vì tôi cảm thấy có một sự kết nối với công việc của vị giáo sư này. Việc viết bức email đó rất thú vị bởi vì nó đề cập đến một vấn đề mà tôi rất quan tâm và muốn được tiếp cận và nói chuyện với ai đó về nó. Lúc đó tôi tràn trề hy vọng trong khi viết thư vì cứ nghĩ có thể sẽ được trả lời và sẽ có một ai đó để cùng nói chuyện về chủ đề này, và có thể giúp tôi tiến vào con đường tạo ra một chiếc máy Trí Tuệ Nhân Tạo tiên tiến. Buồn thay, tôi chẳng bao giờ nhận được phản hồi từ vị giáo sư nọ... và tôi thậm chí không biết liệu bà ấy đã đọc bức thư đó hay chưa.

    Gần đây, nhờ bộ phim tài liệu Indie Game: The Movie đề cập đến trò chơi do tôi làm ra là Super Meat Boy, tôi thường nhận được một vài câu hỏi thông qua email/twitter mỗi ngày từ những người muốn được tư vấn. Hầu hết các email này đến từ những người hâm mộ trẻ tuổi và mong muốn nhận được lời khuyên về các vấn đề như "Tôi nên sử dụng ngôn ngữ lập trình nào?" hay "Làm thế nào để tôi có thể đưa được trò game của tôi lên Xbox". Tôi đã đọc tất cả các email nhưng không phải lúc nào tôi cũng trả lời, bởi vì việc đó sẽ chiếm mất một khoảng thời gian của tôi, chưa kể là có rất ít sự khác biệt về nội dung giữa các bức email đó.

    Tôi thường cảm thấy khá tồi khi tôi không trả lời, bởi vì những người đó chỉ đang tìm cách tiếp cận và muốn một ai đó có thể làm sáng tỏ cho họ một số vấn đề trong phát triển game. Họ đang làm cái việc giống như tôi đã làm với vị giáo sư của trường đại học M.I.T nhiều năm về trước. Họ quan tâm đến những gì tôi làm và muốn biết làm thế nào để làm điều đó, họ muốn trở thành một phần của phát triển game theo một cách nào đó. Vâng, tôi rất muốn giúp nhưng không có đủ thời gian, kiến thức hoặc mong muốn trở thành một giáo viên... vì vậy ngày hôm nay tôi sẽ làm sáng tỏ ở đây. Bài viết này như một phần trả lời cho những câu hỏi thường gặp (FAQ) cho bất kỳ ai muốn một vài lời khuyên theo một cách nào đó từ tôi về cách làm game.

    [​IMG]

    Tôi phải bắt đầu thực hiện trò game mơ ước của mình từ đâu?

    "Tôi nên bắt đầu từ đâu?" là kiểu câu hỏi phổ biến nhất mà tôi nhận được. Tôi cảm thấy bước đầu tiên luôn là rào cản lớn nhất của rất nhiều người bởi vì họ không nhận ra rằng tất cả mọi thứ, thậm chí là trò game khùng khùng AAA ngoài kia, cũng đều bắt đầu từ chỗ không có gì và cứ được xây dựng dần cho tới khi nó trở thành như ngày nay. Khi trò game mơ ước của bạn đang ấp ủ trong đầu và bạn thực hiện bước đi đầu tiên để tạo ra nó, việc này có thể rất khó khăn khi chuyển từ trạng thái tưởng tượng thành hiện thực. Đối với những người chưa bao giờ làm một trò game, những thứ đơn giản như tạo ra một nhân vật có thể di chuyển là một điều gì đó không thể và có thể nhanh chóng làm nản chí họ. Bạn đừng thực hiện theo cách đó, chìa khóa ở đây là hãy bắt đầu nhỏ thôi.

    Trò game Super Meat Boy bắt đầu chỉ là một hình vuông và hình của một gã mập Meat Boy trên nó. Trò Mew-Genics khời đầu chỉ là một hình vuông màu đen di chuyển tới lui trên màn hình. Trò Goo! bắt đầu chỉ là các hình tròn với các khuôn mặt cười trên chúng. Trò “Game 2” bắt đầu là một hình ảnh vector của nhân vật trong "Game 2". Mọi thứ đều bắt đầu ở cấp độ cơ bản nhất và phát triển từ đó mà lên.

    Một điều rất quan trọng khi làm game đó là chỉ bước một bước tại một thời điểm. Nếu bạn lao vào làm trò game mơ ước của mình với tất cả chức năng cùng một lúc, rất có thể bạn sẽ cảm thấy nản lòng và bị choáng ngợp. Nếu bạn xây dựng cũng trò game mơ ước đó chỉ một bước nhỏ ở mỗi thời điểm, bạn sẽ có cơ hội nhận ra tầm nhìn của mình sẽ phát triển theo cấp số nhân.

    Chia trò game của bạn thành những phần nhỏ buộc bạn phải phân tích và ước lượng các ý tưởng của mình ở một mức sâu hơn. Điều này là cần thiết bởi vì bạn luôn luôn muốn cởi mở để thay đổi, bạn chẳng bao giờ muốn đặt mình vào một con đường mà bạn cảm thấy không thể nào đi chệch khỏi. Việc chệch khỏi kế hoạch ban đầu có thể mang lại nhiều phần thú vị nhất của một trò game. Nó là một cách để phát triển bởi vì bạn đang suy nghĩ trong một hệ thống game và đang áp dụng những ý tưởng mới tới những ý tưởng đã được hình thành.

    Vì vậy, hãy cố gắng phân rã các ý tưởng của bạn thành những phần nhỏ có thể thực hiện được một cách dễ dàng trong tập kỹ năng hiện tại của bạn. Nó sẽ dễ dàng hơn để quan sát tiến độ theo cách đó, bạn sẽ không cảm thấy nản lòng một cách dễ dàng, và bạn có thể quay lại công việc của mình sau đó và dễ dàng tiếp tục công việc đang làm dở dang. Nên nhớ rằng không có giới hạn về mặt thời gian khi bạn phải cho ra lò trò game của mình (nếu bạn đang bắt đầu giống như vậy, thì có nghĩa là bạn đang ở trong một khoảng thời gian khó khăn). Học được bài học qua mỗi bước đi và xây dựng các dự án của bạn giống như là bạn đang chơi trò xếp hình Lego vậy... ghép một mẩu ở một thời điểm.

    Để cung cấp một ví dụ chi tiết hơn, cho phép tôi kể về cách tôi đã xây dựng trò game Super Meat Boy như thế nào. Lúc đầu tôi chỉ có một hình chữ nhật với hình ảnh một gã mập Meat Boy trên đó, tôi tập trung vào việc làm sao để có thể điều khiển nó di chuyển tiến và lùi. Sau khi tôi đã chơi với nó một chút thì tôi làm thêm tính năng là khi tôi nhấn một nút trên bàn phím thì gã Meat Boy sẽ nhảy lên, sau đó tôi làm cho gã dừng lại khi hắn đã tiếp đất, tiếp đó tôi làm tính năng dừng hắn lại khi chạm vào tường, sau đó tôi làm cho hắn dính vào tường, và khi mà hắn ta mắc kẹt vào bức tường thì tôi nhấn vào một button để hắn nhảy qua bức tường đó, sau đó nếu anh ta chạm phải một hình vuông màu xanh thì sẽ chết và cứ tiếp tục như vậy cho tới dòng cuối cùng trong kịch bản game và trò game Super Meat Boy đã hoàn thành theo cách đó.

    Không có tác vụ nào quá nhỏ, không có số lượng tiến độ nào là quá ít. Điều quan trọng là bạn không cảm thấy nản lòng và bạn tiếp tục phát triển trò game của mình.

    [​IMG]

    Tham khảo các khóa học lập trình online, onlab, và thực tập lập trình tại TechMaster
    Tôi nên sử dụng ngôn ngữ lập trình nào?
    Đây là một câu hỏi phổ biến thứ hai mà tôi thường nhận được và phải thành thật mà nói là tôi không thích câu hỏi này bởi vì nó là một câu hỏi mà tôi không thể trả lời. Tôi luôn cố gắng trả lời câu hỏi đó là "bất cứ ngôn ngữ nào mà bạn cảm thấy phù hợp nhất".Tôi không nghĩ rằng đây là câu trả lời hiệu quả cho các câu hỏi của mọi người bởi vì tôi cảm thấy mọi người đang tìm kiếm một câu trả lời nhất định hoặc họ chỉ vừa mới bắt đầu và không cảm thấy thoải mái với bất kỳ ngôn ngữ lập trình nào cả. Tôi sẽ cố gắng giải thích về câu trả lời của mình để có thể giúp đỡ người khác hiểu cách làm thế nào lựa chọn một ngôn ngữ tốt nhất cho họ hoặc giúp họ hiểu rằng việc sử dụng cái mà họ cảm thấy thoải mái là cách tốt nhất để bắt đầu.

    Nếu bạn đang tìm kiếm lời khuyên về việc nên bắt đầu bằng ngôn ngữ lập trình nào, thì bạn không cần bận tâm về những vấn đề kiểu như "Liệu Flash có chạy trên iOS?" hoặc "Xbox có chạy Java không?" hoặc "Liệu XNA có chạy trên Mac?". Lúc này bạn nên quan tâm đến việc làm thế nào để thực hiện một trò game, chứ không phải là cách để phát hành nó hoặc bán nó. Những câu hỏi này chỉ quan trọng khi bạn đang lo lắng về việc phát hành một trò game, nhưng việc phát hành một trò game là cách dễ hơn nhiều so với việc thực hiện nó. Bạn có thể lo lắng về việc phát hành trò game của bạn vào lúc khác.

    Tìm một ngôn ngữ và bạn nhấp chuột vào rồi bắt đầu viết code. Điều quan trọng lúc ban đầu là nó phải mang lại nhiều sự hài lòng nhất có thể. Bạn muốn có một cái gì đó hiện lên màn hình nhanh chóng và xây dựng từ đó. Bạn muốn có khả năng chỉnh sửa cái mà bạn đã tạo ra và thêm vào nó một cách dễ dàng. Sự hài lòng tức thời là chìa khóa để luôn duy trì động lực khi mới bắt đầu, bạn có thể không muốn học một ngôn ngữ mới trong khi đang tạo ra trò game của mình. Nếu bạn cố gắng học một ngôn ngữ lập trình mới trong khi đang tạo ra trò game của bạn, thì rất có thể bạn sẽ dành ra nhiều tuần để đọc và không có thứ gì để trình diễn ra, ngoại trừ kiến thức mà bạn vẫn chưa có khả năng áp dụng vào trò game của mình. Điều đó có thể tạo ra sự chán nản.

    Gắn chặt với cái bạn biết, hoặc đi theo hướng thoải mái và dễ dàng nhất có thể nhằm thu được các kỹ năng cần thiết để bắt đầu làm việc trên trò game của bạn. Vì vậy nếu bạn biết một chút Flash thì sử dụng Flash, nếu bạn sử dụng C++ thì hãy viết game bằng C++, nếu bạn chỉ biết sử dụng Java thì hãy dùng Java. Không có cái gì gọi là "ngôn ngữ phát triển game chính thống" cả. LUÔN LUÔN nhớ lấy điều đó. Trò game Minecraft được viết bằng Java, Super Meat Boy được viết bằng C++, Farmville được viết bằng Flash, một số trò game nổi tiếng khác mà mọi người đang chơi được viết bằng HTML5, một số trò khác được làm trên Index cards. Quan điểm ở đây là: công cụ nào không quan trọng. Hãy tìm một cách bạn cảm thấy thoải mái để làm game, và bắt tay vào làm bằng ngôn ngữ và công cụ đó.

    Đừng cho rằng tôi đang làm nản lòng bạn trong việc học thêm những ngôn ngữ lập trình mới và làm việc ra bên ngoài vùng thoải mái của bạn (comfort zone). Một khi trái bóng đã lăn, bạn sẽ muốn vươn ra ngoài vùng thoải mái của bạn và học thêm những điều mới nếu bạn muốn phát triển trở thành một nhà phát triển game chuyên nghiệp. Nhưng hãy tạm gác lại vấn đề đó, trong lúc này bạn nên thiết lập các công cụ cần thiết và bắt tay vào code ngay.

    Nếu bạn không biết bất kỳ ngôn ngữ nào và đang tìm kiếm một nơi để bắt đầu, thì tôi đề xuất bạn sử dụng Flash, Game Maker, Unity hoặc một công cụ tương tự. Tất cả những chương trình này giúp bạn dễ dàng tạo ra một cái gì đó hiển thị lên màn hình một cách nhanh chóng mà không cần phải học quá nhiều. Bạn sẽ không muốn bắt đầu bằng ngôn ngữ như C++ nếu bạn chưa có kinh nghiệm với bất cứ ngôn ngữ lập trình nào khác và đang lo lắng để tạo ra trò game của mình.

    [​IMG]

    Những cuốn sách và tutorial nào mà tôi nên đọc?

    Có 2 cuốn sách mà tôi đề xuất bạn nên đọc, nhưng chúng chỉ dành cho phát triển game bằng C++ và chúng cũng không phải là sách dành cho người mới bắt đầu. Đó là 2 cuốn Effective C++ và More Effective C++. Đây là những cuốn sách khá nâng cao về C++, vì vậy nếu bạn không biết C++ thì đừng thốt lên rằng "Ồ, tôi phải học những thứ này mới làm được game ư?". Bạn đừng như vậy.

    Ngoài 2 cuốn sách đó, tôi chưa từng đọc bất kỳ cuốn sách nào khác về phát triển game. Tôi thường học bằng cách đọc các tài liệu SDK. Đó không phải là cách điển hình lắm, nhưng là cách mà tôi đã học.

    Tôi cũng đề xuất bạn nên tìm các khóa học và các tutorial trực tuyến. Trên internet đầy rẫy những chương trình ví dụ, nhưng tutorial kiểu như NeHe, v.v... Tôi không đề xuất một tutorial nào cả, lý do chính là bởi vì tôi chưa từng xem qua bất kỳ tutorial nào, nhưng tôi biết các nguồn tài nguyên trực tuyến rất phong phú và đa dạng. Tôi chắc rằng với một chút trợ giúp từ Google thì bạn có thể tìm thấy chính xác cái bạn cần.

    Tôi KHÔNG khuyến khích bạn copy và past các đoạn code từ các tutorial để làm trò game của mình. Bạn sẽ không học được điều gì cả nếu làm theo cách đó, bạn chỉ là tay chuyên đi copy mà thôi. Điều đó thường đi đôi với các chương trình mã nguồn mở. Chúng trông rất tốt khi xem xét, học tập và tham khảo, nhưng chúng không đồng nghĩa với việc bạn đang tự làm trò game của riêng mình. Bạn sẽ không thể trở thành một lập trình viên giỏi bằng cách đi copy và past mã nguồn vào trong trò game của bạn, trừ khi bạn hoàn toàn hiểu nó. Đừng tự dối lừa bản thân mình theo cách này, hãy dành thêm thời gian để hiểu một cái gì đó trước khi sử dụng nó.

    [​IMG]

    Bạn đã sử dụng phần mềm nào để tạo ra trò game đó?

    Tôi cảm thấy khi câu hỏi này được hỏi, thì nó được xuất phát từ những người cho rằng có một công cụ thần kỳ nào đó để làm các trò game cho bạn. Thực tế cũng có những công cụ có thể làm được rất nhiều việc cho bạn. Nếu bạn không cảm thấy thích thú trong việc học một ngôn ngữ lập trình cho mục đích xây dựng một game engine, thì hãy tìm kiếm những công cụ như Unity hoặc UDK. Chúng sẽ giải phóng gánh nặng cho bạn và cho phép bạn chỉ việc tạo ra game. Nhưng cũng có cái giá phải trả khi bạn sử dụng những công cụ này. Bạn sẽ bị giới hạn bởi hệ thống cung cấp cho bạn những công cụ đó. Những công cụ này đầy đủ các đặc trưng được xây dựng sẵn, ổn định, và đáng kinh ngạc, nhưng đôi khi chúng sẽ không thể làm điều mà bạn muốn.

    Về mặt cá nhân tôi không thích những giới hạn và tôi thực sự thích thú khi có thể tự do làm điều mình thích trong phát triển game, vì vậy tôi tránh sử dụng những công cụ này và xây dựng các trò game của tôi từ code mà tôi đã viết trong nhiều năm qua. Điều đó không nói rằng một trò game như Super Meat Boy không thể tồn tại trong một công cụ giống như Unity. Nó có thể hoàn thành đến một mức độ nào đó. Do bởi những giới hạn nên nó sẽ không tạo ra được trò game chính xác như vậy, nó sẽ không có giao diện và kiểu điều khiển giống hệt. Những trò game tuyệt vời có thể được tạo ra bởi các công cụ như UDK, Unity... và những trò game tuyệt vời cũng được tạo ra mà không cần có chúng.

    Tôi sử dụng Visual Studio cho việc phát triển, nhưng tôi có thể dễ dàng sử dụng Eclipse, Code Warrior, XCode, hoặc Notepad và một trình biên dịch. Cũng giống như việc chọn một ngôn ngữ lập trình, không quan trọng việc bạn sử dụng cái nào. Visual Studio là cái mà tôi đã sử dụng. Tôi không sử dụng bất kỳ chức năng cao siêu gì được tích hợp trong nó cả, tôi sử dụng nó như một cách để tổ chức các file mã nguồn của mình, biên dịch và debug. Có hàng tấn các trình soạn thảo ở ngoài kia có thể làm được việc này.

    Đối với phần đồ họa và các hiệu ứng động, cộng sự của tôi là Ed sử dụng Flash. Tôi đã viết một công cụ để xuất những hiệu ứng động trong Flash bởi vì nó dễ hơn là viết ra các công cụ cho Edmund, và... hơn nữa... Edmund rất thoải mái khi sử dụng Flash. Việc viết công cụ đó đồng nghĩa với việc phải học JSFL và làm việc trong Flash, nhưng nó cũng mang lại hiệu quả tốt nhất cho Ed, tôi và cho cả Super Meat Boy. Bạn không cần công cụ xuất hiệu ứng động của tôi để làm trò game của mình. Một ngày đẹp trời nào đó tôi sẽ cung cấp những công cụ này miễn phí đến các lập trình viên, nhưng điều này không xảy ra trong thời gian gần, vì vậy bạn đừng chờ đợi.

    [​IMG]

    Làm thế nào mà bạn luôn có động lực để hoàn thành công việc bạn đã bắt đầu?

    Không có bí mật nào trong việc duy trì động lực và đây không thực sự là một lời khuyên tôi dành cho bạn để bạn có động lực trong dự án của mình. Tôi đã không sử dụng bí quyết đặc biệt nào, hoặc tư duy, hoặc danh sách tổ chức công việc, hoặc bất kỳ điều gì giống vậy. Để tôi có thể luôn có động lực, tôi có niềm tin và thích thú trong dự án mà mình đang làm. Nếu tôi không thích việc mà tôi đang làm, thì có lẽ là tôi sẽ không thể hoàn thành nó.

    Ví dụ, một trò game mà tôi đã bắt đầu làm nhiều năm về trước có tên là Goo!. Tôi đã làm việc trên nó trong vòng 2 năm, và nó chẳng đi đến đâu cả. Nó không phải là ý tưởng của tôi, nó không phải là một trò game mà cá nhân tôi muốn làm, và bởi vì điều đó nên tôi có thể chẳng bao giờ tạo ra nó theo cách mà tôi muốn. Tôi đã dừng việc phát triển nó để bắt đầu trò game Super Meat Boy.

    Quãng thời gian xây dựng trò Goo! đó không hề lãng phí bởi vì tôi đã học được rất nhiều về phát triển game, nhưng trò game đó đã chẳng bao giờ hoàn thành bởi vì nó không phải là cái gì đó tạo ra sự hào hứng trong tôi. Khía cạnh duy nhất trong trò game đó khiến tôi phấn khích là phần multi-threaded physics engine và tôi đã dành phần lớn thời gian của mình trên đó. Nó rất quan trọng đối với tôi khi làm việc trên trò game đó, bởi vì nó khiến tôi nhận ra rằng việc yêu quý trò game mà mình đang tạo ra khiến cho công việc trở nên dễ dàng hơn nhiều. Đó là động lực quan trọng nhất.

    Khi bạn tin và yêu cái mà bạn đang làm việc trên đó, thì rất khó có gì có thể dừng bạn lại. Bạn có nỗi ám ảnh về nó, bạn muốn bổ sung thêm tính năng cho nó, bạn muốn làm nó trở nên tốt hơn, và bạn thực sự muốn nhìn thấy nó hoàn thành. Việc tin vào cái mà bạn đang làm việc có khuynh hướng giúp bạn hoàn thành trò game. Bạn càng muốn dành nhiều thời gian để đánh bóng nó, bổ sung thêm các đặc trưng bạn nghĩ rằng sẽ làm trò game trở nên tốt hơn, nói chung là đi xa hơn là chỉ đơn thuần làm trò game của bạn.

    [​IMG]

    Làm thế nào để tôi có thể đưa trò game của tôi lên Steam/Xbox/PS3/WiiU/Anything hay bất cứ nơi nào khác?

    Đây là một câu hỏi mà không ai đặt ra khi họ vừa mới bắt đầu hoặc thậm chí nếu họ có một trò game đang xây dựng. Câu khẩu hiệu của bạn nên là "Tôi sẽ làm một trò game hay" chứ không phải "Tôi cần đưa nó lên XBLA". Con đường để đưa các trò game của bạn tới bất kỳ nền tảng nào là một kiến thức công khai. Không có một email bí mật nào, không có một form ma thuật nào mà bạn cần điền vào, bạn không cần phải có mối quen biết bất kỳ ai ở đó, không có chị em họ của ai đó làm việc ở những tổ chức này và hẹn gặp bạn một cách bí mật, không có thứ gì giống như vậy tồn tại ở đây cả.

    Nó rất đơn giản để được chấp nhận cho bất kỳ những nền tảng nào: tất cả bạn cần là một trò game tốt. Tất cả chỉ có vậy. Đó là một thực tế khắc nghiệt mà một số người từ chối tin vào. Tôi đã nhìn thấy một số người giơ đầu chịu báng mọi thứ cho trò game của họ khi nó được chấp nhận bởi Steam/XBLA... hoặc các nền tảng khác. Một trò game hay sẽ thu được sự chú ý và quan tâm nghiêm túc từ những người nắm giữ các platform dựa trên giá trị riêng của nó với một chút giúp đỡ từ bạn. Hãy nói về trò game của bạn, hãy hào hứng về nó, nếu trò game của bạn tốt và những người khác thích nó cũng như sự hăng hái của bạn thì nó sẽ được lan tỏa sang những người khác.

    Nếu trò game của bạn không tốt, bạn sẽ có một khoảng thời gian khó khăn để có thể đưa nó lên các nền tảng phân phối. Hãy tập trung vào việc làm cho trò game của bạn trở nên tốt nhất có thể, đừng tập trung vào những nền tảng nào mà bạn có thể đưa nó lên. Một trò game tốt thì tự quảng bá bản thân nó tốt hơn là việc phơi nó ra trên một nền tảng nào đó.

    [​IMG]

    Điều gì sẽ xảy ra nếu tôi hoàn thành trò game của mình mà không một ai muốn chơi nó cả?

    Nếu bạn đã làm việc vất vả, và bạn nghĩ rằng trò game của mình là thứ tuyệt vời nhất và bạn vẫn không thể đưa nó lên bất kỳ một nền tảng phân phối nào, thì hãy đừng xem đó là một thất bại và không phải là một tín hiệu bạn nên dừng việc làm ra các trò video game. Rất ít người thành công với trò game đầu tay của họ. Trò game SMB là trò game đầu tiên mà tôi từng hoàn thành, nhưng có một số trò tôi làm trước trò SMB đã chẳng đi đến đâu cả.

    Có thời điểm tôi chỉ còn vài bước nữa là nhận được một thỏa thuận với hãng Sony giống hệt như các trò fl0w và Everyday Shooter cho trò game Goo! mà tôi đã đề cập ở trên. Có một sự thay đổi trong quản lý ở phút cuối (chỉ 2 ngày trước khi hợp đồng cuối cùng được ký) là nguyên nhân trò game đó bị hủy bỏ và tôi chẳng bao giờ nghe thông tin từ hãng Sony nữa. Trò game đó không được tốt và thậm chí nếu có được thỏa thuận với hãng Sony thì nó có lẽ cũng chẳng được hoàn thành và sẽ trở thành một thất bại to lớn. Đó là một nỗi đau, đầy chua xót, nhưng nó đã không thể dừng tôi lại.

    Đừng để điều đó kéo lùi bạn hoặc giết chết giấc mơ của bạn. Người ta có thể nghĩ "đứa con" của bạn rất xấu xí... nhưng điều đó cũng tốt thôi. Hãy tiếp tục làm game. Hãy lấy những thất bại đó làm nguồn cảm hứng và một ngày nào đó bạn sẽ có đủ sức mạnh để vượt qua nó, rất có thể bạn sẽ nhận ra giấc mơ của mình.

    [​IMG]

    Kết luận

    Hãy làm trò game của bạn với bất cứ cái gì mà bạn có thể, bắt đầu nhỏ thôi và đừng lo lắng về những thứ lặt vặt sau này. Các ngôn ngữ lập trình và phần mềm thì chẳng liên quan lắm đến việc tạo một trò game, vì vậy hãy lựa chọn cái mà bạn cảm thấy thoải mái hoặc bạn muốn học nhưng đừng ôm đồm quá nhiều khi bạn mới bắt đầu. Hãy chắc chắn rằng bạn tạo ra một tiến độ đủ để luôn có động lực và xua tan đi sự nản lòng. Hãy yêu quý trò game của bạn, nói chuyện về nó, có một nỗi ám ảnh về nó và bạn sẽ không cảm thấy vất vả khi làm việc trên nó.

    Về tác giả bài viết:

    [​IMG]

    Tommy Refenes là một lập trình viên và một video game designer người Mỹ, được biết đến với vài trò là tác giả của trò game nổi tiếng Super Meat Boy, một nền tảng mà anh đã cùng tạo ra với cộng sự Edmund McMillen. Refenes bắt đầu lập trình từ lúc 11 tuổi, và đã làm việc như một chuyên gia vào lúc 18 tuổi. Anh từng bỏ dở việc học đại học tại trường North Carolina State University, và sau đó có một phát biểu nổi tiếng rằng "nếu bạn muốn trở thành một lập trình viên, thì đừng có đi học đại học". Hiện tại anh đang là CEO của công ty Team Meat. Bạn có thể liên hệ với anh qua Twitter
     
Trả lời qua Facebook

Chia sẻ trang này