[Hướng Dẫn] Nói qua về lập trình
Xin chào các bạn, ngọa hổ đây. Hôm nay mình sẽ chia sẻ với các bạn về lập trình trong phát triển game.
Bài viết này mình hướng tới những người ngoài ngành, tức là những bạn không thuộc khối ngành CNTT. Nói ngắn gọn là những người không biết lập trình. Thật ra mình bôn tẩu giang hồ cũng chưa lâu, kiến thức hạn hẹp. Những cái mình nói sau đây cũng sẽ rất chung chung. Mình vẫn đang luyện tập thêm, hy vọng sau này có thể viết 1 bài chuyên sâu hơn chút :D.
Bạn đang muốn trở thành lập trình viên, để tự mình tạo ra 1 trò chơi. Nhưng hiện giờ bạn chưa biết gì về lập trình, không biết đọc sách gì, không biết lấy tài liệu ở đâu…. Lên các diễn đàn thì họ nói với nhau bạn chả hiểu
). Thật ra mình cũng thế thôi. Công nghệ thông tin chia thành nhiều bộ môn, theo như mình biết là có công nghệ phần mềm(Software Engineering), khoa học máy tính(Computer Science), mạng máy tính(Network Engineering), kỹ thuật máy tính(Computer Engineering). Hiểu đơn giản thì sinh viên SE làm phần mềm, CS nghiên cứu về toán, NE làm bảo mật, CE lắp robot. Làm game thì bạn cần học 2 bộ kinh thư là SE và CS. Cũng dễ thôi :D học rồi sẽ biết.
Trước tiên, chưa bàn đến SE, CS. Để học được 2 môn ấy bạn cần có căn bản về lập trình đã. Mà nói đến căn bản, thì ngôn ngữ lập trình và toán là 2 cái đầu tiên.
Về ngôn ngữ, bạn cần biết ít nhất 1 ngôn ngữ lập trình. Tạm thời 1 đã, về sau bạn có thể biết cả chục cái, nhưng dùng để code nghiêm túc thì chắc chỉ 2-3 mà thôi. Các ngôn ngữ bạn có thể chọn là C++, C# (gamedev net thịnh hành 2 cái này), JAV….A, java script. Và tất nhiên nếu bạn muốn làm game bằng rpg maker thì cần phài biết rgss :D. Những cái ngôn ngữ đấy mình thấy nhiều người dùng, và nhiều người dùng có nghĩa là bạn sẽ được lợi thế nếu cũng dùng cái ấy. Một ngày bạn mắc khó khăn khi mà muốn xử lý gộp 2 đa giác vào nhau. Bạn lên diễn đàn hỏi, họ quăng cho bạn 1 cái thư viện viết bằng C++, nhưng bạn lại dùng ruby chẳng hạn. Lúc ấy bạn ngồi đọc code của 1 ngôn ngữ xa lạ, sau đó viết lại trên ruby. Đó sẽ là ác mộng. Vậy nên, bạn chọn ngôn ngữ gì tùy bạn, nhưng chắc là bạn không thích bị FA, ngồi lủi thủi 1 mình đâu nhỉ.
Về toán, trong trường hợp bạn quên cách giải phương trình, có thể giở sách lớp 6 ra để đọc
) cũng đừng quên các công thức toán vector. Đơn giản thế thôi lúc nào cần đến toán gì thì mình sẽ học dần toán ấy.

Sau khi đã chọn được ngôn ngữ lập trình, viết xong chương trình hello world. Tu tập đến khi bạn sử dụng thành thạo thư viện đồ họa của ngôn ngữ ấy. Thì bạn cần một số sách về công nghệ phần mềm. Môn này học để cho bạn các kỹ năng sau:

Về lập trình hướng đối tượng và hướng chức năng, hiểu đơn giản nó là 2 hướng tiếp cận để giải quyết vấn đề. Một cái là bạn mô hình hóa những gì bạn nhận ra được ở trong game, lên thành các đối tượng. Một cái là bạn chia game ra thành các chức năng nhỏ, chia đến khi không chia được nữa thì bắt đầu viết code. Ví dụ trò boom, nếu suy nghĩ theo hướng đối tượng, mình sẽ làm 1 số đối tượng là
Về phân tích trò chơi và cơ sở dữ liệu. Cái này mình cũng chưa làm bao giờ. Vì mình toàn clone game, chưa phải phân tích cái gì nhiều. Mình không dám nói liều
)
Về thiết kế module. Các bạn phải hiểu là, một trò chơi làm ra, người ta không phải chỉ làm trò chơi. Mà còn có cả tool vẽ map, tool thiết kế nhân vật, website(game online), và game. Mỗi cái ấy là 1 module. Game lớn họ có thể còn chia ra nữa. Mỗi module độc lập với nhau. Chẳng hạn trò chơi có thể vẫn chơi được, trong khi website bị sập. Game bị mất file xử lý về âm thanh, khi bạn vào game sẽ không nghe thấy nhạc. Vậy đó là 1 module, còn nếu game bị crash ngay, thì đó không phải là module riêng.
Về kiểm thử(test), không phải là đưa ra trò chơi, xong mình ngồi vào chơi hộ. Đó chỉ là giai đoạn cuối của kiểm thử. Khi học môn kiểm thử, bạn sẽ biết cách để kiểm tra hết tất cả các trường hợp có thể xảy ra lỗi. Một phần mềm cỡ vừa, cô giáo mình bảo cần phải cỡ chục nghìn test case để đảm bảo tìm ra hết lỗi
)
SE là gồm những cái đó, phần test, phần mô hình, phân tích thì chắc do đội khác làm. Các bạn làm coder thì phải giỏi những cái kia :D

Về CS, phần này nói thì rất ngắn, học về toán rời rạc, cấu trúc dữ liệu, thuật toán, mật mã, trí tuệ nhân tạo, học máy. Nhưng những cái này mang tính hàn lâm cao. Về cơ bản SE các bạn mất khoảng 2 năm hoặc 1 năm là bá đạo khu chợ gạo, còn cái này thì học cả đời
). Toán rời rạc học về đồ thị, phép đếm, ma trận bool…. Cấu trúc dữ liệu học về cây, danh sách, ngăn xếp, hàng đợi…. Thôi nói nữa sợ các bạn buồn ngủ vì là tớ chả biết nói gì về mấy cái này nữa, chỉ có tìm sách mà đọc thôi. Trước tiên cần học về cấu trúc dữ liệu + giải thuật, cái này áp dụng trực tiếp vào trong lập trình game. Tiếp theo học trí tuệ nhân tạo nếu muốn làm AI. Học máy + mật mã thì có lẽ chưa cần lắm vì cái đấy khó :D lúc nào các bạn học lên rồi sẽ tự quyết định có nên học không. Mình đọc mấy quyển sách mật mã mà càng đọc càng thấy mình ngu đi
) Đây là cái để phân chia đẳng cấp trong giới làm lập trình. Mình cũng suy từ bản thân mà ra. Nhìn mấy em lớp 11 đi thi mà mình tủi thân. Tối đến mình hay khóc thầm trách sao số phận hẩm hiu. Nếu bạn muốn làm siêu nhân, thì mua sẵn 1 tủ sách về, tối đến không ngủ chỉ đọc sách thôi. Chúc các bạn đọc sách vui.
Thôi, thư cũng đã dài, mình xin dừng phím ở đây. Kèm theo một số quyển sách mà mình sưu tập được trên mạng. Sách không phải của mình, đa số toàn vi phạm bản quyền nên không chia sẻ tràn lan được. Những ai cần thì pm ngoaho91@gmail.com
Bài viết này mình hướng tới những người ngoài ngành, tức là những bạn không thuộc khối ngành CNTT. Nói ngắn gọn là những người không biết lập trình. Thật ra mình bôn tẩu giang hồ cũng chưa lâu, kiến thức hạn hẹp. Những cái mình nói sau đây cũng sẽ rất chung chung. Mình vẫn đang luyện tập thêm, hy vọng sau này có thể viết 1 bài chuyên sâu hơn chút :D.
Bạn đang muốn trở thành lập trình viên, để tự mình tạo ra 1 trò chơi. Nhưng hiện giờ bạn chưa biết gì về lập trình, không biết đọc sách gì, không biết lấy tài liệu ở đâu…. Lên các diễn đàn thì họ nói với nhau bạn chả hiểu

Trước tiên, chưa bàn đến SE, CS. Để học được 2 môn ấy bạn cần có căn bản về lập trình đã. Mà nói đến căn bản, thì ngôn ngữ lập trình và toán là 2 cái đầu tiên.
Về ngôn ngữ, bạn cần biết ít nhất 1 ngôn ngữ lập trình. Tạm thời 1 đã, về sau bạn có thể biết cả chục cái, nhưng dùng để code nghiêm túc thì chắc chỉ 2-3 mà thôi. Các ngôn ngữ bạn có thể chọn là C++, C# (gamedev net thịnh hành 2 cái này), JAV….A, java script. Và tất nhiên nếu bạn muốn làm game bằng rpg maker thì cần phài biết rgss :D. Những cái ngôn ngữ đấy mình thấy nhiều người dùng, và nhiều người dùng có nghĩa là bạn sẽ được lợi thế nếu cũng dùng cái ấy. Một ngày bạn mắc khó khăn khi mà muốn xử lý gộp 2 đa giác vào nhau. Bạn lên diễn đàn hỏi, họ quăng cho bạn 1 cái thư viện viết bằng C++, nhưng bạn lại dùng ruby chẳng hạn. Lúc ấy bạn ngồi đọc code của 1 ngôn ngữ xa lạ, sau đó viết lại trên ruby. Đó sẽ là ác mộng. Vậy nên, bạn chọn ngôn ngữ gì tùy bạn, nhưng chắc là bạn không thích bị FA, ngồi lủi thủi 1 mình đâu nhỉ.
Về toán, trong trường hợp bạn quên cách giải phương trình, có thể giở sách lớp 6 ra để đọc


Sau khi đã chọn được ngôn ngữ lập trình, viết xong chương trình hello world. Tu tập đến khi bạn sử dụng thành thạo thư viện đồ họa của ngôn ngữ ấy. Thì bạn cần một số sách về công nghệ phần mềm. Môn này học để cho bạn các kỹ năng sau:
- Làm việc nhóm
- Phân tích trò chơi
- Lập trình hướng đối tượng, hướng chức năng.
- Các mô hình phát triển(3 layers, MVC… mình biết mỗi 2 cái này
))
- Thiết kế cơ sở dữ liệu
- Thiết kế module chương trình
- Kiểm thử

Về lập trình hướng đối tượng và hướng chức năng, hiểu đơn giản nó là 2 hướng tiếp cận để giải quyết vấn đề. Một cái là bạn mô hình hóa những gì bạn nhận ra được ở trong game, lên thành các đối tượng. Một cái là bạn chia game ra thành các chức năng nhỏ, chia đến khi không chia được nữa thì bắt đầu viết code. Ví dụ trò boom, nếu suy nghĩ theo hướng đối tượng, mình sẽ làm 1 số đối tượng là
- Player
- Mob
- Brick
- Input
- PlayerLogic
- MobLogic
Về phân tích trò chơi và cơ sở dữ liệu. Cái này mình cũng chưa làm bao giờ. Vì mình toàn clone game, chưa phải phân tích cái gì nhiều. Mình không dám nói liều

Về thiết kế module. Các bạn phải hiểu là, một trò chơi làm ra, người ta không phải chỉ làm trò chơi. Mà còn có cả tool vẽ map, tool thiết kế nhân vật, website(game online), và game. Mỗi cái ấy là 1 module. Game lớn họ có thể còn chia ra nữa. Mỗi module độc lập với nhau. Chẳng hạn trò chơi có thể vẫn chơi được, trong khi website bị sập. Game bị mất file xử lý về âm thanh, khi bạn vào game sẽ không nghe thấy nhạc. Vậy đó là 1 module, còn nếu game bị crash ngay, thì đó không phải là module riêng.
Về kiểm thử(test), không phải là đưa ra trò chơi, xong mình ngồi vào chơi hộ. Đó chỉ là giai đoạn cuối của kiểm thử. Khi học môn kiểm thử, bạn sẽ biết cách để kiểm tra hết tất cả các trường hợp có thể xảy ra lỗi. Một phần mềm cỡ vừa, cô giáo mình bảo cần phải cỡ chục nghìn test case để đảm bảo tìm ra hết lỗi

SE là gồm những cái đó, phần test, phần mô hình, phân tích thì chắc do đội khác làm. Các bạn làm coder thì phải giỏi những cái kia :D

Về CS, phần này nói thì rất ngắn, học về toán rời rạc, cấu trúc dữ liệu, thuật toán, mật mã, trí tuệ nhân tạo, học máy. Nhưng những cái này mang tính hàn lâm cao. Về cơ bản SE các bạn mất khoảng 2 năm hoặc 1 năm là bá đạo khu chợ gạo, còn cái này thì học cả đời


Thôi, thư cũng đã dài, mình xin dừng phím ở đây. Kèm theo một số quyển sách mà mình sưu tập được trên mạng. Sách không phải của mình, đa số toàn vi phạm bản quyền nên không chia sẻ tràn lan được. Những ai cần thì pm ngoaho91@gmail.com
- Data Structures and Algorithms for Game Developers- Allen Sherrod
- Computer Graphics- Tufts University
- 2D Game Engines- Brown University
- Foundations of Algorithms- RIT
- Strategy Game Programming With Directx 9.0- Todd Barron
Comments
Nếu anh không tác IT ra khỏi Computer Science thì ít nhất theo logic IT là con của CS chứ không phải ngược lại ạ. :stick:
Thích gì là học đó.
Cho nên hậu quả bây giờ là có những lỗ hổng mà ko biết rõ chính xác là vá bằng cách nào
Khổ thân tôi
THAM GIA GROUP CỦA TTC TRÊN FACEBOOK
1 cái game mà ngày xưa hay vờ cờ lờ ra ý ^^
p/s: mà em là trai hay gái vậy :D
Thọ không thấy là từ khi close cái chatbox là 4rum vượt trội lên hẳn, lượng post tăng vọt còn gì ^^
@Focker_C Học như vậy đc cái ưu điểm là không quá dập khuân máy móc, bị bị gò bó bởi những giới hạn đã có, khả năng tư duy của mình đc cải thiện nhiều hơn
Chỉ là khi bắt tay vào design thì lại khó xây dựng cơ sở để mà làm thôi. Với lại còn bị rỗng kiến thức nữa à...
Nhưng cái "thích gì học đó" mà focker nói vẫn là 1 việc không thể thiếu của các designer, vì mình đánh giá khả năng tìm tòi cao hơn bất cứ 1 thứ gì hết
P/S: Dẫu vậy nhưng mà vẫn phải học :]]
^^
Học ko theo 1 quá trình , thì cách nhớ lại bài học và cách tư duy nó cũng ko có theo 1 lối ^^
@[Where?] Hình như em hiểu điều gì đó thì phải
THAM GIA GROUP CỦA TTC TRÊN FACEBOOK
Nói qua một chút, hướng tin sẽ giúp các bạn có những kỹ thuật, phương pháp, kỹ năng, ... để tạo, mô hình hóa, kiểm soát, bảo trì, ... được 1 chương trình từ những yêu cầu thực tế, nhưng không phải tất cả các yêu cầu, bởi vì để thỏa mãn những yêu cầu đủ đơn giản bạn không cần phải học quá nhiều Toán, nhưng để làm được một bài toán thực sự đủ lớn thì bạn cần phải học Toán, học Toán sẽ giúp bạn mô hình hóa bài toán thực tế, giải bài toán thực tế (chứng minh có giải được không, có nghiệm không, giải ra nghiệm đó, có bao nhiêu nghiệm, tối ưu hóa nghiệm, ...) bên cạnh đó Toán cũng cung cấp các giải thuật kèm theo để giải những phương pháp được đưa ra.
Phân loại dưới đây là do tự mình phân, có thể nói việc phân loại chỉ là tương đối và chưa liệt kê đầy đủ các môn. Và nếu muốn ra làm được việc, các môn học này cũng chưa giúp các bạn có làm được tốt đâu, bởi vì còn nhiều kỹ thuật, kiến thức cần phải học lắm. Do vậy mới nói trong trường học chỉ dạy các bạn kiến thức cơ bản thôi mà :D
Hướng tin: Tin học đại cương, Kỹ thuật lập trình, Cấu trúc dữ liệu và giải thuật, Lập trình hướng đối tượng (có thể tìm hiểu thêm ngôn ngữ hình thức UML để có cái nhìn về việc mô hình hóa 1 bài toán hoặc có tài liệu nói cả về tiến trình phát triển phần mềm nữa - Software Development Process, và có thể tham khảo thêm một số kỹ thuật tạo UI - User Interface), Cơ sở dữ liệu, Hệ điều hành, Lý thuyết automat và ngôn ngữ hình thức, Phân tích và thiết kế hệ thống, Hệ thống và mạng máy tính.
Hướng toán: Đại số, Giải tích I + II + III (Toán cao cấp I II III), Đại số đại cương, Cơ sở Giải tích hàm, Toán rời rạc, Xác suất thống kê, Các phương pháp tối ưu, Giải tích số, Phương trình đạo hàm riêng, Giải tích phức và ứng dụng, Lập trình 3D.
Ngoài ra, mình xin kể ra 1 vài công cụ, thư viện hỗ trợ mà mình biết, các bạn có thể search trên mạng để tìm hiểu cách sử dụng cũng như download:
OpenGL : Thư viện hỗ trợ render đồ họa 2D lẫn 3D.
SDL (Mình chưa dùng): Simple DirectMedia Layer (thường được viết tắt là SDL) là một thư viện lập trình có khả năng trừu tượng hóa các phần cứng đồ họa, âm thanh hay thiết bị vào và ra. Thư viện này giúp các lập trình viên viết các chương trình giải trí hay các ứng dụng đa phương tiện (multimedia) trên nhiều hệ điều hành khác nhau như: GNU/Linux, Windows, Mac OS Classic, Mac OS X, BeOS và một vài hệ điều hành không chính thức khác. Qua thư viện này, lập trình viên có thể điều khiển phần hiển thị, sự kiện, âm thanh, ổ dĩa CD-ROM, thread và đồng hồ đo giờ.
SFML(Mình đang dùng): Cũng tương tự như SDL, nó chỉ hỗ trợ render hình ảnh 2D, nhưng nó hỗ trợ OpenGL nên có thể dùng OpenGL để render hình ảnh 3D.
Allego(Chưa dùng): cũng giống như SDL và SFML.
Các công cụ thì mình cũng chưa nghĩ ra được cái gì hay cả, nhìn chung về việc thiết kế hình ảnh, âm thanh thì các bạn biết nhiều tools rồi.
Mình xin nói qua một số IDE (thôi các bạn chịu khó đọc trong link nhé): http://www.vn-zoom.com/f174/cac-ide-danh-cho-ngon-ngu-c-c-1234052.html
mình thì đang dùng Code::Block
Ngôn ngữ: Mình thì Tin đại cương học C để lập trình cấu trúc, bây giờ đang học C++ để lập trình hướng đối tượng (nếu các bạn muốn viết phần mềm cho hệ điều hành Windows thì có thể học C# thay cho C++). Nhìn chung học 1 cái ngôn ngữ nào đó để bạn thực hành thôi, chứ ko quan trọng lắm việc bạn học ngôn ngữ nào, quan trọng là bạn biết cách viết giải thuật (bằng mã giả, lưu đồ, các loại biểu đồ. ...), biết cách tạo mô hình + giải thuật + phương pháp + kỹ thuật lập trình + cấu trúc dữ liệu rồi thì biết ngôn ngữ nào bạn cũng có thể chuyển nó về code của ngôn ngữ đó được
Còn tài liệu ebook thì nhiều lắm: các bạn cứ search top ebook (chủ đề mình cần) là họ giới thiệu cả thôi
THAM GIA GROUP CỦA TTC TRÊN FACEBOOK