언제 데이터를 하드 코딩하고 외부 데이터를로드해야합니까?


36

나는 무작위로 생성 된 별 시스템의 네트워크를 생성하고 무작위로 선택한 행성, 스테이션, 선박 및 무기로 채우는 내 자신의 2D 공간 기반 게임을 만들기위한 수천 줄의 코드입니다.

게임에서 사용해야 할 수백 가지의 다른 스테이션 / 선박 등이있을 수 있습니다. 그래서 제가 궁금했던 것이 있습니다. '소프트 코딩 된'데이터 로더를 만드는 데 시간을 할애해야합니다.이 로더는이 모든 정보를 (예 :) XML 파일에 저장하므로 나중에 수정하기가 더 쉬울 것입니다. 모든 작업을 게임의 주요 엔진에 하드 코딩합니다.

나는 프로젝트의 유일한 사람이고, 내가 말했듯이, 그것은 내가 대학에서 멀리 떨어져있는 시간에하고있는 취미 일뿐입니다. 그러나 커뮤니티는 추가 파일에 데이터를 저장하는 전체 추가 시스템을 만드는 데 투자 할 것을 권장합니까?

이러한 방식으로 데이터를 소프트 코딩하는 것의 장점은 단순히 생성자를 통해 모든 데이터를 하드 코딩하는 것입니까? 외부 파일을 수정하면 장기적인 이점이 있습니까? 게임에 'mods'가없는 경우 외부 파일이 필요합니까? 몇 주 또는 몇 달 안에 포기할 수있는 취미적인 일이라면 시간을 낭비해야합니까?


10
당신이 찾고있는 용어는 "데이터 중심"이며, 예를 들어 장기적으로 훨씬 더 작은 프로젝트에서 수행하는 것보다 XML (또는 JSON과 같은 형식) 파일로 새로운 스테이션을 생성하고 배송하는 것이 훨씬 빠릅니다. . 또한 나중에 코드를 터치하거나 다시 컴파일 할 필요없이 제거 및 편집 할 수있어 두 번째 시간을 절약 할 수 있습니다.
Patrick Hughes

@PatrickHughes 내 답변을 입력하는 동안 이미 의견을 달았습니다!
MartinTeeVarga

1
"소프트 코딩"을 실제 용어로 합법화하려는 경우, "하드 코딩 된 입력을 소프트 코딩 된 데이터 매트릭스에 사용"으로 회사 코딩을 제안합니다.
Sean Middleditch 2018 년

1
@ Singular1ty이 사이트는 다른 SE보다 토론을 더 용서합니다. 귀하의 질문이 "좋은 토론"상태에 해당한다고 생각합니다.
Seth Battin

2
@ Singular1ty 아, 여기 있습니다. 첫 번째 댓글을 올렸을 때 찾을 수 없습니다. blog.stackoverflow.com/2010/09/good-subjective-bad-subjective
Seth Battin

답변:


62

예. 메인 엔진 외부에 컨텐츠를로드하는 시스템을 구현해야합니다.

간결한 답변의 헤더.

아니요. 너무 많은 시간을 소비하지 않습니다.

나는 그것이 당신의 제한된 시간의 유효한 할당인지에 대한 질문은 무질서하다고 생각합니다. 전체 프로젝트 시간의 작은 부분이 될 것입니다.

완료하는 데 걸리는 게임 프로젝트에 수백 (수천) 시간이 걸립니다. 아마도 Pong 클론은 아니지만 복잡한 우주 게임을 위해서는 반드시 그렇게하십시오. 구성 파일 판독기와 비교하십시오. XML을 주요 생성자에 파이프하고 게임 프로세스를 다시 시작하는 시스템을 구현하는 데 10 ~ 20 시간 이 소요될 있습니다. 50 또는 100이 걸리더라도 총 프로젝트 시간의 작은 부분이 될 것입니다.

시간이 절약됩니다

시간 비용이 아닙니다. 시간 투자입니다. 그리고 그것은 갚을 것입니다.

워크 플로가 중요하고 구성 로더가 있으면 워크 플로가 향상됩니다. 구성을 즉석에서 편집 할 수있는 시스템을 만들면 수많은 재 구축을 저장할 수 있습니다. 게임이 실행되는 동안 게임을보고 XML을 조정하고 몇 초 안에 다시 확인할 수 있습니다. 또는 코드를 살펴보고 코드 라인 (수천 개)을 찾거나 값을 매우 신중하게 편집 (결국 메인 엔진에 있음), 재 구축, 실행, 게임을 다시 테스트 상태로 되돌릴 수 있습니다. 변경하기 전의 모습을 기억하고 변경 사항이 의도 한 영향을 미치는지 확인하십시오. 엔진에 고장이 없다고 가정하면 열차는 확실히 중단됩니다.

보다 기본적인 comp-sci 관점에서 소프트웨어 작성에서 가장 많은 시간이 소요되는 부분은 몇 가지 추가 키 입력이나 공백이 없다는 것을 기억하십시오. 버그 사냥입니다. 더 자세한 코드를 작성하여보다 명확하게하기 위해 약간의 시간을 더 투자하면 나중에 더 많은 시간을 절약 할 수 있습니다. 귀하의 경우, 컨텐츠 임포터를 작성하면보다 읽기 쉬운 코드가 작성됩니다. 몇 마일이나 몇 마일의 하드 코딩 된 값 대신 소스에 간단한 파일로드 기능이 있습니다. 마찬가지로 게임 엔진 코드를 넘지 않고 구성 파일을 읽을 수 있습니다. 두 부분 모두 유지 관리가 쉽고 디버깅하기가 더 쉽습니다.

일원 팀이 가장 큰 혜택

해당 컨텐츠 중 일부를 생성하기 위해 아티스트를 고용 한 경우 해당 아티스트가 작업 할 수있는 도구를 만들어야합니다. 그들은 픽셀을 편집하고 그 효과를 빠르게 볼 필요가 있습니다. 모든 변경 사항을 확인하기 위해 코드를 다시 작성하도록 강요하지는 않습니다. 그들의 시간은 비싸며 낭비하고 싶지 않습니다.

이제 아티스트가 매우 숙련되지 않고 느리고 (프로그래머 아티스트), 메인 프로그래머이자 음악가이기 때문에 걱정할 다른 많은 것들이 있다고 상상해보십시오. 그 시간을 낭비하고 싶지 않으면 프로젝트가 끝나지 않을 것입니다. 그리고 그 끔찍한 예술가는 코드에서 자산 문자열의 이름을 바꾸는 데 모든 시간을 소비하기 때문에 더 나은 예술가가되기 위해 교육을 싫어할 것입니다.

그렇게하지 마십시오. 도구를 만들면 더 많은 시간을 할애 할 수 있습니다.


3
와우, 또 다른 환상적인 답변! 고마워 나는 값을 빠르게 변경하는 기능과 버그 찾기에 동의합니다. 하나 또는 두 개의 작은 것들을 잊어 버리는 것은 빠르게 악몽으로 변하고 있으며, 동맹, 이름 및 선체 / 무기 값 사이의 사소한 변경만으로 동일한 코드 줄을 끝없이 반복하는 데 필요한 모든 것을하고 싶습니다.
Singular1ty

세스, 새로운 특권 수준에 오신 것을 환영합니다. 마감 투표를 다시 사용하십시오!
MichaelHouse

고마워요 그것들을 사용하는 동안 잠시 기다릴 것입니다. 삭제 된 투표권이있는 계정에서 약간의 변동이 발생했습니다.
Seth Battin

10

이것은 좋은 질문이며 내가 줄 수있는 가장 좋은 대답은 경험이 더 힘들고 시간이 많이 걸리는 길을가는 것이 좋은 생각 일 때만 당신에게 실제로 말할 수 있다는 것입니다. 누군가가 당신에게 항상 '적절한'방법으로해야한다고 말하면, 그들은 단순히 잘못입니다.

당신은 이미 그것이 tradoff라는 것을 알고 있습니다. 한편으로 하드 코딩은 빠르고 쉽게 진행할 수 있기 때문에 매우 유혹적이지만 장기적으로 기능 추가 및 디버깅은 악몽이 될 것입니다. 반면에, 유연하고 확장 가능하고 훌륭한 시스템을 작성하려면 초기 투자가 많이 필요하지만 장기적으로는 인생이 훨씬 쉬워집니다.

목표는 무언가를 완성하는 것이며, 훌륭한 시스템을 만드는 데 어려움을 겪으면 목표가 더 멀어지고 동기를 잃게됩니다. 일부 상황에서는 하드 코딩 작업이 문제가되지 않지만 그에 따른 결과를 이해해야합니다. 하드 코딩이 좋지 않은 이유는 다음과 같습니다.

  • 프로젝트가 작다고 생각할 수 있지만 더 많은 기능을 추가하기로 결정함에 따라 프로젝트가 커질 수 있습니다. 하드 코딩을 시작하면,이를 유지하는 데 필요한 에너지 (새로운 것들로 업데이트하고 무수한 불가피한 버그를 수정)가 초기 이익보다 심각하게 시작될 때가 올 것입니다.

  • 하드 코딩 항목은 현재 프로젝트에 따라 정의됩니다. 다음 프로젝트의 경우 처음부터 다시 시작해야합니다. 다시 하드 코딩 할 수 있습니다 (편리한 것이기 때문에). 괜찮은 로딩 시스템에 시간을 투자했다면, 앞으로의 모든 프로젝트에서 그 일과 골칫거리를 건너 뛸 수 있습니다.

  • 당신은 지금 혼자 일하고 있을지 모르지만 다른 사람을 프로젝트에 데려오고 싶을 때가 있습니다. 역겨운 교구 시스템을 설명하고 문서를 작성하는 데 시간을 내시겠습니까?

  • 하드 코딩에는 종종 특정 매직 넘버의 의미 또는 복잡한 클래스 종속성을 알아야합니다. 당신은 지금 당신의 마음에 모든 것을 유지할 수 있습니다, 그러나 당신이 코드에서 잠시 동안 떨어져있을 때까지 기다리십시오. 광범위한 의견에도 불구하고 잘못 설계된 구조는 다시 돌아 가기가 쉽지 않습니다.

가장 작은 세부 사항에만 하드 코딩을 자유롭게해야한다고 말하고 싶습니다. 다른 사람이 사용하고 있거나, 더 크게 성장하거나, 다른 프로젝트에서 사용중인 요소에 대해 조금이라도 생각하고 있다면 지금 당장 할 시간을 가지십시오.

반면에, 나는 매드 먼처럼 프로토 타입을 만들고 특정 일을 빠르고 쉽게 코딩하며 실험에 집중할 수 있습니다. 그것은 당신의 작업 스타일에 달려 있습니다.


답변 해주셔서 감사합니다. 이미 시스템이 제대로 작동하지 않는 것으로 나타났습니다. 자바에서 물건을 확장하기 때문에 내 클래스에는 종종 약 10 ~ 15 개의 생성자 인수가 있으며, 어떤 순서로 전달되는지 항상 잊어 버립니다.주의 범위가 짧기 때문에 '빠르고 더러운'일을하는 데 익숙합니다. 실제로 한 번 프로젝트를 끝내고 싶습니다. 게다가 나중에 통계를 조정할 필요가 있다고 생각되면, 수천 줄의 하드 코딩 된 객체를 통해 트롤링에 걸리고 싶지 않습니다 ...
Singular1ty

@ Singular1ty이 경우 지금하고있는 일을 중단하십시오. 미친 듯이 리팩토링 할 때입니다. 새로운 내용을 잊고 기존의 전체 구조를 개선하는 데 집중하십시오. 나는 게임 회사에서 일하고 있으며 항상 호흡과 리팩토링 기간 동안 추진하고 있습니다. 그러나 물론, 그것은 귀가 들리지 않으며 우리는 항상 미친 듯이 바삭 거리며 결국 벌레 / 해킹으로 가득 찬 수렁을 극복합니다. Ho hum
DaleyPaley 2016 년

8

당신이 말하는 것은 데이터 중심 프로그래밍 입니다.

소규모 프로젝트의 경우 개선 할 수있는 훨씬 더 중요한 기능이 종종 있기 때문에 시간 투자 가치가 없을 수 있습니다.

그러나 데이터 기반 프로그래밍은 구현하기가 매우 쉽습니다. 진지한 경우 XML, JSON 또는 YAML을 사용해야하지만 일반 텍스트 파일을 사용할 수도 있습니다.

데이터 중심 프로그래밍

찬성

  1. 설계자가 프로그래밍 지식없이 게임 데이터에 액세스하고 수정할 수 있습니다
  2. 다시 컴파일 할 필요없이 게임을 수정할 수 있습니다 . 이 방법으로 게임을 훨씬 더 빠르게 개발할 수 있으므로 과소 평가해서는 안됩니다. 좋은 게임은 많은 반복 후에옵니다.

단점

  1. 구현하는 데 시간과 노력이 필요합니다.
  2. 프로그램의 복잡성을 증가시킬 수 있습니다.

이것들은 내가 지금 생각할 수있는 장단점 중 일부입니다. 더 생각하면 알려주세요!
Nick Caplinger

1
타이틀 수정을 승인했습니다.
Singular1ty
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.