Tại sao MVC & TDD không được sử dụng nhiều hơn trong kiến ​​trúc trò chơi? [đóng cửa]


155

Tôi sẽ mở đầu điều này bằng cách nói rằng tôi đã không tìm kiếm một nguồn trò chơi khổng lồ, cũng không được xây dựng nhiều theo cách của trò chơi.

Nhưng xuất phát từ việc cố gắng sử dụng các thực hành mã hóa của 'doanh nghiệp' trong các ứng dụng web, nhìn vào mã nguồn trò chơi làm tôi đau đầu nghiêm trọng: "Cái logic này làm gì với logic kinh doanh? Điều này cần tái cấu trúc ... vậy, điều này, tái cấu trúc, tái cấu trúc "

Điều này làm tôi lo lắng khi tôi sắp bắt đầu một dự án trò chơi, và tôi không chắc liệu việc cố gắng mvc / tdd quá trình phát triển sẽ cản trở chúng tôi hay giúp chúng tôi, vì tôi không thấy nhiều ví dụ trò chơi sử dụng điều này hoặc thúc đẩy nhiều cho thực hành kiến ​​trúc tốt hơn nó trong cộng đồng.

Sau đây là trích đoạn từ một bài viết tuyệt vời về các trò chơi tạo mẫu , mặc dù với tôi nó có vẻ chính xác là thái độ mà nhiều nhà phát triển trò chơi dường như sử dụng khi viết mã trò chơi sản xuất:

Sai lầm 4: Xây dựng hệ thống chứ không phải trò chơi

... Nếu bạn thấy mình đang làm việc với thứ gì đó không trực tiếp tiến về phía trước, hãy dừng lại ngay tại đó. Là lập trình viên, chúng tôi có xu hướng cố gắng khái quát hóa mã của mình và làm cho nó thanh lịch và có thể xử lý mọi tình huống. Chúng tôi thấy rằng một cơn ngứa cực kỳ khó không gãi, nhưng chúng tôi cần phải học cách. Phải mất nhiều năm tôi mới nhận ra rằng đó không phải là về mã, mà là về trò chơi mà bạn phát hành cuối cùng.

Đừng viết một hệ thống thành phần trò chơi tao nhã, bỏ qua trình chỉnh sửa hoàn toàn và cứng cáp trạng thái trong mã, tránh điều khiển dữ liệu, tự phân tích cú pháp, điên rồ XML và chỉ mã hóa thứ đáng nguyền rủa.

... Chỉ cần lấy đồ trên màn hình càng nhanh càng tốt.

Và đừng bao giờ, hãy sử dụng đối số, nếu chúng ta dành thêm thời gian và làm điều này đúng cách, chúng ta có thể sử dụng lại nó trong trò chơi. KHÔNG BAO GIỜ.

Có phải vì các trò chơi (hầu hết) được định hướng trực quan nên có ý nghĩa rằng mã sẽ được xem trọng trong chế độ xem, do đó, bất kỳ lợi ích nào từ việc chuyển công cụ ra các mô hình / bộ điều khiển, là khá tối thiểu, vậy tại sao phải bận tâm?

Tôi đã nghe lập luận rằng MVC giới thiệu một chi phí hiệu năng, nhưng dường như đây là một sự tối ưu hóa sớm và rằng có nhiều vấn đề hiệu suất quan trọng hơn cần giải quyết trước khi bạn lo lắng về chi phí MVC (ví dụ: kết xuất đường ống, thuật toán AI, cơ sở hạ tầng truyền tải, vv).

Điều tương tự liên quan đến TDD. Tôi không thường thấy các trò chơi sử dụng các trường hợp thử nghiệm, nhưng có lẽ điều này là do các vấn đề thiết kế ở trên (quan điểm hỗn hợp / kinh doanh) và thực tế là rất khó để kiểm tra các thành phần trực quan hoặc các thành phần dựa trên kết quả xác suất (ví dụ: hoạt động trong các mô phỏng vật lý ).

Có lẽ tôi chỉ nhìn nhầm mã nguồn, nhưng tại sao chúng ta không thấy nhiều hơn các hoạt động 'doanh nghiệp' này được sử dụng trong thiết kế trò chơi? Là các trò chơi thực sự rất khác nhau trong yêu cầu của họ, hoặc là một vấn đề về con người / văn hóa (tức là các nhà phát triển trò chơi đến từ một nền tảng khác nhau và do đó có thói quen mã hóa khác nhau)?

Câu trả lời:


137

Như trích dẫn đã nói, nhiều lập trình viên đã phạm sai lầm (cố gắng) xây dựng một hệ thống chứ không phải một trò chơi. Thông thường, hệ thống đó sẽ mất kiểm soát cho đến khi nó phức tạp đến mức về mặt lý thuyết nó có thể xử lý mọi thứ, nhưng trên thực tế, tất cả những gì bạn có là một bó mã lớn. Hoặc thường xuyên hơn, trước khi bạn bước vào giai đoạn làm việc, bạn bị vướng vào mã không chạy đến nỗi bạn mất tập trung (nếu bạn có bất kỳ điều gì để bắt đầu) và động lực (vì không có gì thực sự hoạt động).

Nguyên mẫu và lặp có xu hướng làm việc tốt hơn nhiều. Cuối cùng, một thiết kế tuyệt vời có thể ra khỏi nó, nhưng thường thì một cái gì đó đơn giản và tinh tế hơn lại xuất hiện từ nó. KISSYAGNI đến với tâm trí.

Cá nhân tôi tin rằng cần phải có một sự cân bằng. Nếu có một cơ chế cốt lõi của trò chơi của bạn, hãy làm việc với nó. Bạn vẫn cần lặp đi lặp lại, nhưng bạn cần phải tinh chỉnh nó. Gợi ý: tổ chức mã của bạn không phải là một cơ chế cốt lõi của trò chơi của bạn.

Trường hợp điển hình: Peggle , bởi PopCap Games. Một cơ chế cốt lõi của trò chơi là vật lý bóng. Họ đã hoàn thiện nó! Tôi chắc rằng họ đã dành khá nhiều thời gian để đảm bảo rằng nó hoàn toàn hoàn hảo, bởi vì đó là thứ tạo nên trò chơi. Nhưng đồng thời, tôi hoàn toàn có thể hình dung ra một nguyên mẫu đầu tiên của trò chơi của họ, có thể chỉ cần vẽ các họa tiết lên màn hình và thực hiện một số loại phát hiện va chạm nguyên thủy hơn, để xem ý tưởng trò chơi có thú vị không. Sau đó, một khi họ phát hiện ra rằng bắn một quả bóng và xem nó nảy có thể thực sự thú vị, họ đã tinh chỉnh độ nảy của quả bóng. (tất nhiên đây chỉ là suy đoán)

Nó cũng phụ thuộc vào các yêu cầu kỹ thuật của bạn, mà bạn nên tìm hiểu sớm (không phải thiết kế trò chơi của bạn, chỉ là các yêu cầu kỹ thuật). Nền tảng mà trò chơi của bạn chạy không nên thay đổi hoặc nếu nó được phép thay đổi, bạn cần biết chính xác mức độ mà bạn dự định cho phép nó thay đổi, không hơn không kém. Thiết kế trên đó. Nếu bạn đang phát triển một trò chơi cho OpenGL và bạn không quan tâm đến DirectX, thì thực sự, đừng quan tâm đến nó. Điều đó có nghĩa là nếu thuận tiện hơn cho bạn để mỗi thực thể tự vẽ và không lo lắng về các nhà máy và các mẫu thiết kế khác như vậy, thì hãy làm điều đó. Không sao, vì nó đáp ứng yêu cầu. Bạn không cần phải thay đổi nó sau này, bất chấp những gì bạn nói với chính mình. Và thực sự, trường hợp xấu nhất? Tái cấu trúc sau., có được một trò chơi hoạt động trên một nền tảng ngay cả khi điều đó có nghĩa là nó không thể đồng thời và tự động chạy trên máy nướng bánh mì của bạn.

Thiết kế hướng thử nghiệm, tuy nhiên, là một chủ đề nhiều ý kiến ​​hơn. Tôi tin tưởng rằng các nhà phát triển trò chơi nên làm nhiều hơn thế. Tôi cũng nghĩ rằng các nhà phát triển trò chơi có một số lịch trình chặt chẽ, chặt chẽ nhất và họ nghĩ rằng họ không đủ khả năng dành thời gian cho TDD khi họ chỉ muốn chơi game. Ngoài ra, một lần nữa với động lực, TDD chậm hơn rất nhiều và bạn sẽ thấy ít hơn một trò chơi hoạt động (ít nhất là vào đầu). Điều này có thể có tác động tiêu cực nghiêm trọng đến động lực lập trình viên.

Tôi nghĩ đó cũng chỉ là sự thiếu hụt kiến ​​thức và thực hành chung. Tôi không nghĩ TDD là phổ biến trong các lĩnh vực khác, nhưng giống như phát triển nhanh, tôi nghĩ rằng nó lan rộng. Bạn có thể nói rằng nó đi trước thời đại (hoặc có thể không, vì trường hợp có thể là nhiều năm nữa). Quan trọng hơn TDD là "RDD" - Yêu cầu phát triển theo hướng. Tôi chỉ làm điều đó lên.Mục tiêu của bạn là gì? Để làm một trò chơi. Mọi thứ khác đến thứ hai. Nếu bạn có thể chứng minh rằng TDD tăng năng suất và giúp các nhóm đạt đến thời hạn, thì bạn có nghĩ rằng mọi người sẽ sử dụng nó không? Và có lẽ đó là trường hợp. Nhưng ngay bây giờ, ngành công nghiệp của chúng tôi cạnh tranh hơn bao giờ hết, có thời hạn khó hơn và sớm hơn, và công cụ chỉ cần làm việc. Công nhân xây dựng không xây dựng giàn giáo trước; họ đặt một nền tảng, sau đó họ nâng một số bức tường và sàn nhà, và chỉ sau đó họ xây dựng các giàn giáo chọn lọc để thực hiện các nhiệm vụ cụ thể mà giàn giáo làm cho thuận tiện hơn. Tôi nghĩ điều tương tự áp dụng cho phát triển phần mềm.

Xin lỗi cho một bài dài như vậy. Tôi hy vọng bạn đã đạt được một số sự khôn ngoan từ nó. Tôi chỉ là một sinh viên, nói về những quan sát của tôi, với kinh nghiệm trong ngành rất hạn chế nhưng rất nhiều đọc từ các chuyên gia trong ngành. Vì vậy, hãy nói những lời của tôi với một hạt muối.

Và này, làm những gì bạn nghĩ sẽ làm việc. Bạn luôn có thể thay đổi nó hoặc loại bỏ nó và bắt đầu lại. Đó là điều tuyệt vời về bất kỳ hình thức kỹ thuật nào; Nếu lúc đầu bạn không thành công, hãy thử một cái gì đó khác biệt. (hoặc đại loại như thế :-P) Bạn không đổ bê tông; phần mềm dễ uốn.


Nhân tiện, tôi đã hỏi loại câu hỏi tương tự và nghiên cứu các loại nguyên tắc thiết kế này một thời gian. Dưới đây là một số câu hỏi, cả ở đây và trong Stack Overflow, mà bạn có thể thấy có liên quan:


32

Đây là câu trả lời ban đầu của tôi cho một câu hỏi tương tự trên SO từ lâu, ít nhất là liên quan đến phần MVC của câu hỏi của bạn:

Nó hiếm khi được sử dụng trong các trò chơi. Phải mất một lúc tôi mới hiểu tại sao, nhưng đây là suy nghĩ của tôi:

MVC tồn tại để phân biệt giữa hai biểu diễn. Mô hình là đại diện trừu tượng của dữ liệu của bạn. Đó là cách máy xem trạng thái ứng dụng của bạn. Chế độ xem (và Bộ điều khiển) thể hiện sự thể hiện rõ ràng cụ thể hơn của hệ thống đó theo cách có ý nghĩa đối với con người.

Trong hầu hết các ứng dụng kinh doanh, hai thế giới này khá khác nhau. Ví dụ: mô hình của bảng tính chỉ đơn giản là một lưới các giá trị 2D. Không cần phải suy nghĩ về độ rộng của các ô theo pixel, vị trí của các thanh cuộn, v.v. Đồng thời, chế độ xem bảng tính không biết cách tính hoặc lưu trữ giá trị ô.

Trong một trò chơi, hai thế giới đó gần nhau hơn nhiều. Thế giới trò chơi (mô hình) thường là một tập hợp các thực thể được định vị trong một số không gian ảo. Chế độ xem trò chơi cũng là một tập hợp các thực thể được định vị trong một số không gian ảo. Khối lượng giới hạn, hoạt hình, vị trí, v.v., tất cả những thứ bạn sẽ xem là một phần của "chế độ xem" cũng được sử dụng trực tiếp bởi "mô hình": hoạt hình có thể ảnh hưởng đến vật lý và AI, v.v.

Kết quả cuối cùng là ranh giới giữa mô hình và chế độ xem trong trò chơi sẽ tùy ý và không hữu ích: cuối cùng bạn sẽ nhân đôi rất nhiều trạng thái giữa chúng.

Thay vào đó, các trò chơi có xu hướng tách rời mọi thứ dọc theo ranh giới miền: AI, vật lý, âm thanh, kết xuất, v.v. sẽ được giữ riêng biệt nhất có thể.


20

Bởi vì MVC không phù hợp với kiến ​​trúc của một trò chơi. Dataflow cho một trò chơi hoàn toàn khác với ứng dụng enterprice, vì nó không phải là sự kiện theo định hướng và thường có ngân sách (rất) mili giây chặt chẽ để thực hiện các hoạt động này. Có rất nhiều điều cần phải xảy ra trong 16,6 mili giây để có một đường truyền dữ liệu 'cố định' và cứng nhắc xử lý dữ liệu bạn cần trên màn hình trong thời gian đó chính xác hơn.

Ngoài ra, sự tách biệt là có; hầu hết thời gian nó không có dây giống như mẫu MVC. Có một công cụ kết xuất (Chế độ xem), xử lý đầu vào của người dùng (Bộ điều khiển) và phần còn lại như logic chơi trò chơi, ai và vật lý (Mô hình). Nghĩ về nó; nếu bạn đang tìm nạp đầu vào của người dùng, chạy ai và hiển thị hình ảnh 60 lần mỗi giây, thì tại sao bạn lại cần một Người quan sát giữa mô hình và chế độ xem để cho bạn biết điều gì đã thay đổi? Đừng giải thích điều này khi tôi nói rằng bạn không cần mẫu Người quan sát trong các trò chơi, bạn làm, nhưng trong trường hợp này bạn thực sự không. Dù sao thì bạn cũng đang làm mọi việc, mọi khung hình.

Mặc dù TDD hầu như không bao giờ được sử dụng trong các studio phát triển, chúng tôi sử dụng các thực hành Agile để phát triển phần mềm và SCRUM dường như là lựa chọn phổ biến ít nhất ở đây tại châu Âu. Lý do rất đơn giản, những thay đổi đến từ khắp mọi nơi. Các nghệ sĩ có thể muốn có nhiều ngân sách kết cấu hơn, thế giới rộng lớn hơn, nhiều cây hơn trong khi các nhà thiết kế muốn có một câu chuyện phong phú hơn (nhiều nội dung hơn trên đĩa), một thế giới phát trực tuyến và các nhà xuất bản muốn bạn hoàn thành đúng hạn, và về ngân sách và bộ phận tiếp thị cũng vậy. Và ngoài ra, "trạng thái của nghệ thuật" liên tục thay đổi.

Điều đó không có nghĩa là chúng tôi cũng không thực hiện kiểm tra, hầu hết các hãng phim đều có các phòng hỏi đáp lớn, chạy vô số bài kiểm tra hồi quy và kiểm tra đơn vị một cách thường xuyên. Tuy nhiên, hầu như không có bất kỳ điểm nào khi kiểm tra đơn vị trả trước vì một phần lớn các lỗi có liên quan đến nghệ thuật / đồ họa (lỗ hổng trong lưới va chạm, kết cấu sai bất cứ điều gì, độ sâu của trình tạo bóng trường) mà các bài kiểm tra đơn vị không thể che được. Và bên cạnh mã làm việc, yếu tố quan trọng nhất của bất kỳ trò chơi nào là nó rất thú vị và không có đơn vị nào thử nghiệm điều đó.

Cũng nên nhớ rằng trong thế giới console, điều này thậm chí còn khác biệt, bởi vì bạn đang lập trình nhiều hơn cho phần cứng sau đó cho bất cứ điều gì khác. Điều này nói chung (PS2 / PS3) có nghĩa là luồng dữ liệu quan trọng hơn nhiều so với luồng mã trong gần như mọi trường hợp; do xem xét hiệu suất. Điều này vô hiệu hóa việc sử dụng TDD như một công cụ kiến ​​trúc trong hầu hết các trường hợp. Mã OOP tốt thường có dataflow xấu, làm cho nó khó để vector hóa và song song hóa.


13

Tại sao MVC & TDD không được sử dụng nhiều hơn trong kiến ​​trúc trò chơi?

Cảnh báo: ý kiến ​​trước.

MVC không được sử dụng (nhiều) vì:

  1. MVC là một cách tiếp cận tương đối mới và các trò chơi thường được xây dựng trên mã cũ. Hầu hết mọi người tạo ra các ứng dụng MVC đều xây dựng chúng từ không có gì mỗi lần. (Tôi biết bản thân MVC đã thực sự tồn tại hàng thập kỷ; điểm mới là sự quan tâm rộng rãi của nó, chủ yếu đến từ các ứng dụng web như RoR). Trong phần mềm kinh doanh mà tôi đã làm việc dựa trên mã kế thừa, cũng không có sử dụng cho MVC. Đó là một điều văn hóa, nhưng nó không phải là trò chơi cụ thể.
  2. MVC về cơ bản là một mẫu GUI cho các chương trình hướng sự kiện. Các trò chơi không bị chi phối bởi GUI hay theo hướng sự kiện, do đó khả năng ứng dụng không tuyệt vời như ứng dụng web hoặc các ứng dụng dựa trên hình thức khác. MVC thường là mẫu Observer với một số vai trò nổi tiếng và các trò chơi thường không phải chờ đợi để quan sát thứ gì đó thú vị - họ phải cập nhật mọi thứ ở mọi khung hình (hoặc một số biến thể trên đó) cho dù có ai nhấp vào bất cứ thứ gì .

Điều đó không có nghĩa là các trò chơi không thể học được nhiều từ MVC. Tôi luôn cố gắng và tách mô hình khỏi chế độ xem trong các trò chơi tôi thực hiện. Ý tưởng truyền thống về khung nhìn và bộ điều khiển là 2 phần của cùng một đối tượng (widget) không thực sự hoạt động, vì vậy bạn phải trừu tượng hơn một chút về nó. Tôi đồng ý với bạn rằng hiệu suất không chắc là một vấn đề thực sự ở đây. Nếu bất cứ điều gì hiệu suất có thể được hưởng lợi từ việc tách biệt các công cụ trực quan và các công cụ logic vì điều đó phù hợp hơn với tính liên kết bộ đệm, song song, v.v.

TDD không được sử dụng (nhiều) vì:

  1. Nó thực sự rất khó sử dụng trong các trò chơi. Một lần nữa, thật tốt cho phần mềm hướng sự kiện nơi đầu vào và đầu ra xuất hiện và bạn có thể so sánh những gì bạn đã thấy so với những gì bạn mong đợi và đánh dấu nó là chính xác. Đối với các mô phỏng với số lượng lớn trạng thái chia sẻ, điều đó khó xử hơn đáng kể.
  2. Không có bằng chứng không thể chối cãi rằng nó giúp được gì cả. Chỉ cần rất nhiều tuyên bố, và một số số liệu thường dựa trên tự báo cáo và kháng cáo lên chính quyền. Có lẽ nó giúp các lập trình viên nghèo trở nên tầm thường nhưng kìm hãm các lập trình viên giỏi. Có lẽ thời gian viết bài kiểm tra có thể tốt hơn dành cho việc học các nguyên tắc RẮN hoặc thiết kế giao diện chính xác ngay từ đầu. Có lẽ nó mang lại cảm giác an toàn sai lầm khi có các bài kiểm tra vượt qua mà không có bằng chứng xác thực nào cho thấy bạn có đủ các bài kiểm tra để đảm bảo đối tượng của bạn làm đúng.

Một lần nữa, như một lời cảnh báo, tôi nghĩ các bài kiểm tra đơn vị là tuyệt vời, nhưng tôi không nghĩ "kiểm tra trước" là có lợi hay hợp lý. Tôi cũng không nghĩ việc thử nghiệm mô phỏng chính là thực tế khi có quá nhiều trạng thái chia sẻ thay đổi nhiều lần trong một giây. Nói chung, tôi giới hạn các bài kiểm tra ở cấp độ thấp và mã thư viện.

Tuy nhiên, như bạn có thể đoán, tôi phần lớn thiên vị chống lại "các hoạt động mã hóa của doanh nghiệp" vì các doanh nghiệp nổi tiếng với thời gian và ngân sách quá cao. "Các nhà phát triển trò chơi cũng vậy!" Tôi nghe bạn nói - tốt, vâng. Tôi không nghĩ rằng bất kỳ ai thực sự biết cách tốt nhất để phát triển phần mềm ngay bây giờ và tôi không tin rằng việc áp dụng các thực tiễn được yêu thích trong phần mềm chính là một bước tiến từ các thực tiễn tự do hơn trong phần mềm giải trí. Trong thực tế, tôi nghi ngờ rằng nó chủ yếu mang lại lợi ích cho những người dựa vào các lập trình viên Java hàng hóa trong đó các cách tiếp cận này không phải là một nấc thang để leo lên tầm cao hơn mà là một mạng lưới an toàn để ngăn chặn chúng xuống quá thấp.


9

Như Kylotan lưu ý, "Trong các trò chơi, bạn không thể coi khía cạnh trình bày là một khái niệm có thể tháo rời và thay thế như HTML và CSS dành cho các ứng dụng web". Đã xây dựng một vài trò chơi bằng cách sử dụng một mô hình MVC đơn giản (không phải là một khung lớn) Tôi thấy vấn đề chính là mô hình của bạn cần biết về quan điểm của bạn. Rất có khả năng bạn sẽ cần sử dụng dữ liệu bitmap sprite, dữ liệu hitbox hoặc dữ liệu hình học 3D từ tài sản nghệ thuật của mình để giúp phát hiện va chạm (hoặc một tác vụ tương tự khác). Điều này có nghĩa là mỗi mô hình cần một tham chiếu đến chế độ xem của nó, phá vỡ mô hình MVC cổ điển - ví dụ: bạn không còn có thể tạo chế độ xem mới cho mô hình hiện có, v.v.

Mô hình thành phần bạn thấy trong ví dụ Unity3D là cách tốt nhất để tổ chức mã trò chơi.


4

MVC, ở một số cấp độ, đã được sử dụng trong phát triển trò chơi. Nó bị hệ điều hành ép buộc, có giao diện khác nhau cho đầu vào và đồ họa. Hầu hết các trò chơi cũng có thêm một vài phiên bản MVC, ví dụ như tách biệt vật lý và kết xuất và xử lý các luồng đầu vào. Điều này hoạt động tốt. Ý tưởng hiện đại của MVC dường như là nó nên được lặp đi lặp lại, một cách ngẫu nhiên, cho đến khi không ai có thể hiểu được mã nữa. Trò chơi không làm điều đó, rất may.

TDD không được sử dụng vì hiếm khi biết một trò chơi "phải làm" trước khi bạn lặp lại trên một nguyên mẫu nhiều lần. Thực tiễn từ TDD, như thử nghiệm liên tục hoặc thử nghiệm tích hợp, thường được sử dụng trong phát triển trò chơi.


3

Hệ thống trò chơi đang dần chuyển sang thực hành tốt hơn. Các khung như XNA cung cấp một cái nhìn sâu sắc về việc làm cho mã tổng quát hơn / sạch hơn mà không cần thêm quá nhiều chi phí trong thiết kế hoặc thời gian thực hiện. Nhưng nói chung tôi sẽ nói rằng các hệ thống trò chơi đều tối ưu hóa sự phức tạp so với tốc độ thực thi, tất cả trong khi vẫn giữ một lịch trình phát triển chặt chẽ và duy trì động lực. Áp dụng các khái niệm kỹ thuật phần mềm và thiết kế hệ thống không phải là ưu tiên số 1 trong một môi trường như vậy.

Trong các dự án trò chơi cá nhân của mình, tôi cố gắng nhận xét mã hoặc ít nhất là làm cho nó dễ đọc hơn và tôi kết hợp các hệ thống sẽ cho phép linh hoạt hơn một chút về sau (ví dụ như tính tổng quát) càng nhiều càng tốt, nhưng vào cuối ngày, nếu bạn đã không di chuyển trò chơi của mình về phía trước nó chỉ không cảm thấy rất tốt.

Thông thường, vào thời điểm bạn kết thúc trò chơi, bạn đã có ít nhất 1000 ý tưởng về cách cải thiện cơ chế cơ bản, các hệ thống cốt lõi, v.v ... theo cách mà rất ít mã "có thể sử dụng lại" đó sẽ thực sự có thể sử dụng Ban ngày tôi làm một công việc SE thông thường và trong khi các hệ thống chúng tôi làm việc có thể rất lớn, thì thật lòng tôi nghĩ chúng nhạt so với sự phức tạp trong các trò chơi.


2

Tôi không có ý kiến ​​đặc biệt nào về MVC ngoài thực tế là chế độ xem thường tách biệt với logic bởi thực tế đơn giản là vòng lặp kết xuất đang đóng gói rất nhiều thứ để một số phần cứng xử lý và đó không phải là nơi bạn muốn "trò chơi logic "xảy ra đồng thời. "Bộ điều khiển" cũng được phân tách bằng phần cứng, nhưng thật không may, nhiều người nếu không phải hầu hết các nhà phát triển trò chơi làm công việc "thú vị" trong trình xử lý bộ điều khiển. (IMO trình xử lý bộ điều khiển nên đọc các nút và gậy và xây dựng "bản trình bày" cho trò chơi để xem, nhưng hộp xà phòng của tôi không mạnh đến thế.)

Mặt khác, TDD là điều mà tôi có ý kiến ​​rất mạnh mẽ. Nó chỉ thay đổi sự phát triển theo cách mang lại phần mềm dễ xây dựng hơn. Nó khó hơn để làm, không nghi ngờ gì về nó. Tất nhiên, vì nó khó hơn để làm, nó đã không được thực hiện. Một số người than vãn về TDD (hay nói chung là thử nghiệm đơn vị) không có giá trị vì "trò chơi là thử nghiệm", nhưng thực tế là trong TDD, thử nghiệm gần như không liên quan. Quan điểm của TDD là thiết kế và kiến ​​trúc phần mềm ra khỏi quy trình.

Ôm TDD thực sự thay đổi cách tiếp cận lập trình của một người. Tôi đã có một số cảm giác về những gì đúng và những gì sai trước khi tôi bắt đầu con đường TDD, nhưng một khi tôi nhảy vào bằng cả hai chân, tôi thực sự hiểu nhiều hơn về những điều tôi đang làm là giúp đỡ hoặc cản trở sự phát triển trong tương lai . Thật vậy, đây là loại điểm đằng sau bài viết về coderoom, TDD mà không có t .

Quay lại lý do tại sao nó không được sử dụng nhiều hơn trong các trò chơi, ngoài việc khó khăn, nó khiến mọi người nhận ra rằng cách họ luôn làm nó trong quá khứ không làm cho công việc của họ trở nên khó khăn hơn, và đối với các lập trình viên, đặc biệt đó là một viên thuốc cay đắng thậm chí nhìn vào, nuốt ít hơn nhiều.

Tôi tin rằng những người từ chối chấp nhận TDD chỉ đơn giản là không muốn trở thành lập trình viên giỏi hơn. Họ đã nghĩ rằng họ "xuất sắc" về lập trình hoặc thiết kế hoặc kiến ​​trúc, trong khi thực tế mã của họ nói điều gì đó hoàn toàn khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.