Làm cho nó hoàn thành so với thiết kế phần mềm rắn?


17

Với thời gian vừa đủ để hoàn thành các trò chơi do chúng tôi tạo ra, làm thế nào bạn có thể đạt được sự cân bằng tốt giữa kiến ​​trúc phần mềm vững chắc và đạt được tiến bộ tốt để hoàn thành tất cả?

Thử thách cá nhân của tôi: Làm thế nào về việc có hiệu quả ngày hôm nay và suy nghĩ lâu dài cùng một lúc? Ngoài ra, trong khi bạn đang làm điều đó, bạn có thể cũng muốn học những điều mới trên đường thay vì dùng đến những mô hình lặp đi lặp lại giống như bạn đã sử dụng trong 5 năm qua?

Câu trả lời:


20

Bạn càng có ít kinh nghiệm, bạn càng lãng phí thời gian với thiết kế phía trước. Làm cho các thiết kế tốt là một cái gì đó mà bạn sẽ học bằng cách thực hiện nó và sau đó xem / đánh giá nó diễn ra như thế nào. Một số quyết định đã vươn xa nhưng hàm ý tối nghĩa. Sau một số trò chơi, bạn có thể sẽ có thể làm cho thiết kế ban đầu khá chắc chắn và nó sẽ được đền đáp để đầu tư thêm thời gian cho giai đoạn này.

Phương châm của tôi: hoàn thành công việc ngay từ đầu, nhưng sử dụng ý thức chung của bạn để phát hiện thành phần nào quan trọng hơn các thành phần khác và thiết kế những thứ đó khá tốt, trong giới hạn thời gian của bạn. Ví dụ: nếu AI rất quan trọng đối với trò chơi của bạn, hãy đảm bảo rằng bạn có thể dễ dàng mở rộng / thay đổi nó sau này. Hoặc, nếu bạn định viết một thành phần mà bạn sẽ sử dụng trong mọi trò chơi, hãy thiết kế nó để có thể sử dụng lại. Theo dõi thời gian của bạn và đừng tự hào về thiết kế. Đặt thời hạn thiết kế và sau đó, bắt đầu hack mọi thứ để có thời hạn phát hành. Nhưng hãy chắc chắn rằng bạn lưu ý những điểm cần tái cấu trúc / thiết kế lại sau đó và tính toán trong một thời gian trước khi bạn bắt đầu trò chơi tiếp theo để cải thiện những điều đó, để họ không phải cắn bạn trở lại!

Một lời khuyên tốt: nếu bạn phải lựa chọn giữa hai lựa chọn, đừng nán lại quá lâu về chi tiết. Thông thường, không có "tốt" hay "xấu". Trong một số tình huống, A sẽ tốt hơn, trong một số trường hợp, B sẽ và nói chung, sự khác biệt giữa cả hai có thể không phải lúc nào cũng đáng giá.

Có rất nhiều kinh nghiệm để đạt được trong việc thiết kế phần mềm hoặc trò chơi, vì vậy hãy đảm bảo bạn dành một chút thời gian cho nghiên cứu (ví dụ: đọc một cuốn sách về thiết kế, đọc về kinh nghiệm của người khác, nói chuyện với các lập trình viên về thiết kế của bạn, v.v ... ).


7
+1, lời khuyên tốt. Đừng để bản thân bị bắt bởi Paralysis phân tích khét tiếng vì điều này chẳng đưa bạn đến đâu cả. Trong khi đó, tái cấu trúc là một công cụ mạnh mẽ để làm rõ những sai sót trong quá khứ, vì vậy đừng sợ phạm sai lầm.
Michael Klement

1
À Phân tích tê liệt . Kẻ thù lớn nhất của tôi! Tôi nên xây dựng một trò chơi trong đó Phân tích Paralysis được dùng làm End-Boss. Tôi tốt nhất bắt đầu bằng cách thiết kế kiến ​​trúc trò chơi trước tiên ... Noooo! Đùa qua một bên: Câu trả lời tuyệt vời và nhận xét tốt!
bummzack

12

Mọi người rất tệ trong việc dự đoán tương lai. Điều này đặc biệt đúng với các trò chơi, nơi các yêu cầu có thể thay đổi hàng ngày.

Có một nguyên tắc gọi là YAGNI , còn gọi là "Bạn không cần nó", về cơ bản nói rằng bạn không nên thực hiện một cái gì đó cho đến khi bạn biết bạn sẽ cần nó.

Tôi đã thấy rất nhiều hệ thống bị sa lầy với sự cứng nhắc về kiến ​​trúc mà thực tế không sử dụng bất kỳ hệ thống nào vì các tính năng mà mọi người nghĩ rằng chúng sẽ không bao giờ được sử dụng.

Triết lý cá nhân của tôi là làm điều đơn giản nhất có thể làm việc . Điều đó đang được nói, có một sự khác biệt giữa Làm cho xong và Hacking cùng nhau. Viết mã với mục đích không nên ngụ ý làm những việc tạo ra "mùi mã" như làm cho mọi thứ trở nên công khai, có các lớp blob làm mọi thứ hoặc bất kỳ thứ gì trong số hàng tá những thứ khác biểu thị mã "xấu".


8

Điều này đánh giá là đúng trong suy nghĩ của tôi ngày hôm nay:

  • Chủ nghĩa thực dụng đối với tư tưởng
  • (1) Làm cho nó hoạt động (2) sau đó làm cho đúng - trò chơi kết thúc nếu bạn quên bước 2
  • Phát hành nó!
  • Quá nhiều thiết kế phía trước sẽ lãng phí thời gian
  • TDDClean Code dẫn đến các thiết kế phần mềm đơn giản hơn, ổn định hơn

Bạn có thể giải thích về việc phát triển dựa trên thử nghiệm trong cài đặt trò chơi không? Ngoài một số logic cơ bản, tôi chưa bao giờ thấy các chương trình tương tác cao rất phù hợp với loại điều này. Ngoài ra, bạn đang liên kết đến trang định hướng;)
drxzcl

2
@Ranieri Nếu bạn vẽ một đường thẳng giữa các phần có giao diện với phần cứng đồ họa và đầu vào của người dùng, việc kiểm tra rất đơn giản.
Jonathan Fischoff

@Ranier Cảm ơn, đã sửa liên kết. Tôi đồng ý rằng việc đưa ra các thử nghiệm đầu tiên cho các mô phỏng tương tác hoặc các trò chơi máy khách-máy chủ có thể khó khăn. Ngoài các bài kiểm tra đơn vị của bạn, bạn có thể muốn có một số bài kiểm tra chức năng cấp cao hơn và có thể phát lại các phiên chạy trong các khoảng thời gian nhất định. Trong mọi trường hợp, suy nghĩ về các bài kiểm tra đầu tiên có khả năng sẽ được đền đáp trong nhiều tình huống. Tìm một số lượt xem thú vị trong gamedev.stackexchange.com/questions/1905/ từ
jmp97

5

Tôi là bạn của phần mềm tạo mẫu nhanh. Đặc biệt là trong quá trình phát triển game. Nó tốt cho việc học nhanh, thử nghiệm và sử dụng mọi thứ. Đối với gần với lập trình phần cứng hoặc các thuật toán phức tạp là phương pháp tốt nhất đối với tôi.

Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
 Testing();
 LotOfFixing();
 PlayingWith(); 
 bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();

Phiên bản Rapid Prototype của tôi phải có lớp vỏ nguyên mẫu phù hợp:

  • Giao diện đầu vào thân thiện tối đa để cấu hình các chỉ thị và thiết lập các biến hoặc dữ liệu.
  • Ngoại lệ ổn định và xử lý lỗi.
  • Trực tuyến như chức năng gỡ lỗi nhưng ở cấp độ những gì bạn cần.
  • Giao diện đầu ra thân thiện tối đa để hiển thị hoặc nắm bắt kết quả trên tất cả các cách rõ ràng và cần thiết.

Ưu điểm:

  • Bạn có thể cải thiện lớp vỏ RapidPrototype trong toàn bộ quá trình phát triển.
  • Bạn có thể xem và thiết lập mã của bạn theo nhiều cách.
  • Bạn chỉ có thể tập trung vào lý thuyết và vấn đề những gì bạn cần giải quyết.
  • Bạn có thể nhanh chóng phát triển bất kỳ phần mới nào của dự án và thử nó với phần còn lại của những điều cuối cùng.
  • Bạn có thể cung cấp những thứ mới để sử dụng trong việc điền nội dung nhanh hơn và hoàn thiện nó sau. (Đặc biệt là trong trường hợp hộp cát)
  • Bạn có thể dễ dàng mô tả và hiển thị dự đoán hoặc giải pháp cho bất kỳ ai khác. Trực tuyến.
  • Nguyên mẫu rõ ràng và minh bạch là nguồn thông tin tốt nhất cho mã cuối cùng (bất kỳ ai khác có thể làm điều đó).

Nếu bạn làm tốt, bạn có thể có phiên bản gỡ lỗi / tìm hiểu thực sự của sản phẩm của bạn ở cuối.
Chúng tôi đang sử dụng nó trong dự án của chúng tôi và chúng tôi hài lòng với nó.


1
Đây là lời khuyên khá tốt, mặc dù tôi muốn giới thiệu một thời gian hoặc một số loại tài nguyên khác bị ràng buộc trên vòng lặp, sau đó bạn chỉ cần thoát (0) và thử một nguyên mẫu khác.

@Joe Wreschnig - Các kế hoạch thời gian có thể được bao gồm trong AnalysingResults (), nhưng tôi nghĩ rằng Bạn có thể sử dụng RapidPrototype trong một thời gian và hoàn thành nó sau hoặc đưa nó vào kế hoạch. Tốt hơn là bị mắc kẹt trên đó mãi mãi :). Trong RapidPrototype Bạn cũng có thể mô phỏng chức năng. Nó hữu ích theo nhiều cách.
samboush

1

Có một cái nhìn về phát triển phần mềm nhanh nhẹn . Mặc dù nó không phải là viên đạn bạc, nhưng nó nhằm mục đích làm cả hai (hoàn thành nó có thiết kế phần mềm vững chắc).


2
Tôi không nghĩ có bất kỳ phương pháp phát triển nào không yêu cầu "hoàn thành nó và có một nhà thiết kế phần mềm vững chắc".

@Joe Tôi nghĩ rằng nhiều phương pháp "hạng nặng" có xu hướng thích CYA hơn phần mềm. Thật vậy, phần lớn trải nghiệm không nhanh nhẹn của tôi có xu hướng là "nó không cần phải đúng, nó cần phải ngay bây giờ", trong khi "nhanh nhẹn" nhằm mục đích nói "nó cần phải ngay bây giờ, nhưng làm mọi thứ mà bạn cần có thể làm mọi thứ ngay khi bạn đi cùng. "
dash-tom-bang

Tôi sẽ lập luận rằng sự phát triển nhanh có rất ít ảnh hưởng đến việc mã có vững chắc hay không. Bản chất của nhanh nhẹn là dành tất cả thời gian phát triển của bạn cho chỉ những thứ quan trọng. Mã vẫn có thể là một mớ hỗn độn khi giao hàng, bởi vì chất lượng mã (hoặc thiếu nợ kỹ thuật) hiếm khi là thước đo thành công trong giao hàng.
Magnus Wolffelt
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.