게임 개발의 기본은 무엇입니까? [닫은]


12

비디오 게임을 코딩하는 방법을 완전히 이해하지 못합니다.

저는 초보자 프로그래머이며 수학을하는 콘솔 응용 프로그램을 작성하는 경험이 있습니다. 이러한 논리적 프로세스가 어떻게 이미지를 화면에서 움직일 수 있는지 이해하지 못합니다 (비디오 게임). 분명히 내가 게임 개발 책이나 그와 비슷한 것에 뛰어 들었다면 이해하고 있지만 현재는 여전히 프로그래밍의 기본 원리를 파악하고 있습니다. 컴퓨터로 비디오 게임과 같은 놀라운 그래픽 프로그램을 만드는 것까지 컴퓨터로 간단한 수학을하는 것 사이에서 도약에 대한 간단한 설명을 현명하게 코딩 할 수 있습니까? 누군가 나를 가리킬 수있는 소개 동영상이 있습니까?

답변:


14

프로그래밍의 절대 초보자라고 가정하고 알고있는 것에 기반을 둔 예제를 만들기 위해 사용자가 사용 가능한 옵션 중에서 선택할 수있는 메뉴가있는 콘솔 응용 프로그램을 작성하는 경우 먼저 무엇을해야합니까?

메뉴 만들기에 대해 생각했다면 요점을 알 수 있지만 사용자가 사용 가능한 옵션의 일부가 아닌 키를 누른 후,

  1. 응용 프로그램이 종료되거나
  2. 사용자가 "종료"키를 누를 때까지 계속해야합니까?

내 베팅은 # 2 일 것입니다. 사용자가 명시 적으로 키를 눌러 콘솔 응용 프로그램을 종료 할 때까지 응용 프로그램이 계속 진행됩니다.

게임은 어떻게 든 비슷합니다! 언제 게임을 종료하겠습니까? 사용자가 선택하면 맞습니까? 따라서 액션 또는 게임 메뉴는 사용자가 종료하기를 원할 때까지 지속되어야합니다. 그런 다음 종료 키를 누를 때까지 프로그램이 계속 진행되도록하는 루프를 작성해야합니다.

방금 Game Loop를 소개했습니다. 게임은 사용자가 명시 적으로 종료 할 때까지 실행되는 또 다른 프로그램입니다.

게임 루프에서 게임을 할 때 화면에 특정 좌표로 그려진 이미지가 이동합니다. 사용자 / 플레이어가와 같은 방향키를 누르면 [Left]X 좌표를 줄이면서 이미지의 좌표를 새로 고침하여 왼쪽 방향으로의 움직임에 대한 인상을줍니다. 플레이어가 캐릭터 / 함선이 다음에하고 싶은 행동을 얻기 위해이 입력을 받아야합니다. 그런 다음 게임이 종료 될 때까지 플레이어에서 원하는 다른 동작을 얻을 수있을 때까지 게임 루프가 계속 반복됩니다.

글쎄, 나는이 대답이 충분히 길기 시작하기를 두려워하므로 관심이있을 수있는 다른 두 가지 질문을 알려 드리겠습니다.

  1. 게임, 튜토리얼 등을 어디서 시작할 수 있습니까?
  2. 클래스를 사용 XNA 내 스프라이트를 이동 .

이 세 번째 링크는 게임을 시작하는 방법이 아니라 화면에서 스프라이트 이동을 만드는 방법에 관한 것입니다. 화면에서 그래픽을 이동시키는 방법에 대해서도 물었으므로 관심이 있으리라 생각했습니다.

이게 도움이 되길 바란다! =)


4

콘솔 응용 프로그램을 만드는 동안 대부분 print () 또는 read () 또는 write ()라는 함수를 사용합니다. 이 대신 그래픽 게임은 set_pixel ()만큼 낮은 수준의 다른 기능을 사용하여 화면의 개별 픽셀의 색상을 설정하고 많은 효과로 3 차원 모델을 그릴 수있는 전체 프레임 워크로 설정합니다.

그러나 주요 아이디어는 간단한 수학 콘솔 응용 프로그램과 동일합니다. 사용자로부터 입력을 받고 그에 따라 일부 변수를 수정 한 다음 출력을 인쇄 (또는 그리기)합니다. 게임 및 기타 대화 형 프로그램은 매 초마다 이러한 입력 계산 출력주기를 30, 60 개 이상 수행합니다. 물론 모든 부품은 원하는만큼 복잡 할 수 있지만 일반적으로 입력 계산 출력으로 귀결됩니다. 따라서 걱정하지 마십시오. 올바른 길을 가고 있습니다.

권장 사항에 관해서는 가능한 한 많이 프로그래밍을 유지한다고 말하고 싶습니다. 게임 프로그래밍에 관심이 있고 콘솔 프로그래밍 만 알고 있다면 작은 텍스트 기반 모험이나 RPG를 만들어보십시오. 이렇게하면 변수를 관리하고 난수를 사용하며 코드를 구성하는 방법에 대해 많이 연습하게됩니다.

그것에 대해 약간의 경험을 얻은 후에는 그래픽 라이브러리의 기본 사항에 착수하십시오. 절차 적 프로그래밍을 수행하는 경우 OpenGL을 권장하고 객체 지향 프로그래밍을 수행하는 경우 XNA를 권장합니다.

그러나 한 번에 너무 많은 것을 가져 가지 마십시오. 복잡한 도구를 배우는 것에 실망하고 소스 트리를 관리하는 방법을 배우는 동안 배열을 반복하는 방법을 배우는 동안 입력과 소리를 얻는 방법을 배우는 동안 실망하기 쉽습니다. 게임을 디자인하고 있습니다.

먼 길은 있지만 재미는 실제로 그것을 걷는다는 것을 기억하십시오.

좋은 일을 계속하십시오!


4

컴퓨터 게임은 다음과 같은 끝없는 루프입니다.

  • 업데이트 : 게임 상태를 1/80 초와 같은 작은 시간 조각으로 진행하십시오.
  • 현재 게임 상태를 그립니다.

이들의 변형이 있습니다. 일부 게임은 각 페인트 사이에 더 많은 업데이트가 있거나 다른 컴퓨터에서 게임 흐름을 동일하게 매끄럽게 만들기 위해 변경 될 수 있습니다. 그러나 그것은 기술적 세부 사항입니다.

초당 50에서 100 번 사이에 발생하는 업데이트 단계 (그렇습니다)

  • 게임 물리를 업데이트하십시오. 액터에 속도가 있다고 가정하십시오. 업데이트는 그를 올바른 방향으로 조금 움직여야합니다. 또한 물리 엔진을 사용하는 경우 다른 액토 또는 장애물과의 충돌을 확인해야합니다.
  • 게임 규칙을 업데이트하십시오. 이것이 물리 실험이 아닌 게임이되는 이유입니다. 총알이 플레이어 액터에 부딪쳤다 고 가정하십시오. 게임 규칙은 플레이어에게 체력의 X 포인트를 빼고 총알이 사라지게합니다.
  • AI 업데이트. 때때로 컴퓨터 제어 행위자는 무엇을해야할지 고민해야합니다. 왼쪽이나 오른쪽으로 이동? 좋은 곳으로가는 길을 찾으십시오. 무기를 발사하십시오.
  • 입력 제어. 키보드에서 누른 버튼에 따라 플레이어 액터를 업데이트합니다.
  • 장면 그래프를 업데이트하십시오. 이것은 애니메이션을 한 단계 진전 시키거나 GUI를 업데이트하여 플레이어의 체력이 10 점 낮음을 표시 할 수 있습니다. 게임의 외관과 느낌을 좋게 만드는 것이 유일한 목적입니다.

어디서 시작하니?

그래픽 게임의 기본 요구 사항은 그래픽을 프로그래밍하는 것입니다. 창을 열고 그 안에 공을 그릴 수 있는지 확인하십시오.

나는 당신이 어떤 종류의 수업을 만들 수 있다고 가정합니다. Ball 클래스를 만드십시오. x, y, deltaX, deltaY 멤버가 있습니다. 모두 정수와 픽셀 단위입니다. 이제이 루프를 작성하십시오.

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

그러면 창 경계가 공을 튀어 오릅니다. 아직 게임이 아니라 실제 시뮬레이션입니다. 볼 클래스 내에 볼 물리 업데이트를 작성하면 여러 볼을 쉽게 추가 할 수 있습니다. 그것들을 목록에 저장하고 각 프레임마다 하나씩 업데이트하고 페인트하십시오.

패들 (물리 시뮬레이션 및 마우스 또는 키보드로 제어 가능)과 공이 왼쪽 벽에 닿지 않도록 막는 등 게임 목표를 추가 할 수 있습니다. 게임이 시간이 지남에 따라 점점 더 많은 공을 추가하면 난이도가 증가합니다. 게임이 있습니다.

(25-workTime) 밀리 초 동안 을 자나요? 이렇게하면 시뮬레이션이 초당 40 개의 업데이트와 페인트의 일정한 속도로 실행됩니다. 꽤 부드럽습니다. 수면 부분을 건너 뛰면 애니메이션이 끊기고 CPU를 100 % 차지합니다. 또한 공의 속도는 공을 돌리는 기계의 속도에 달려 있습니다. 이제 볼 수직 속도는 초당 40 * deltaY 픽셀입니다.


2

수학을 수행하는 콘솔 프로그램을 가지고 정답을 입력하면 색종이 조각을 쏴 버릴 수 있습니다. 그것은 게임이되었습니다.

게임 환경을 만들기 위해 컴퓨터를 만드는 방법에 대해서는 때때로 머리를 감쌀 수도 있지만 주변 세계에 대한 인간의 이해를 바탕으로합니다. 게임은 수학, 물리학 및 과학과 동일한 수학, 물리학 및 과학을 사용하여 주변 세계에 적용되는 방식을 설명합니다.

Sim 게임은 실제 대 가상의 좋은 예입니다. 오래 전에 나는 Sim 게임의 배후에있는 사람과의 인터뷰를 읽었으며 거의 ​​모든 것은 예외없이 우리 주변 세계를 설명하려는 주제에 대해 읽은 후 수학 공식으로 활용하여 가상 환경에 넣었습니다. 그것을 표현하기 위해. 예를 들어, SimCity는 경제의 기본을 모방하려는 시도에서 비롯되었습니다.

3D 게임 환경을 만드는 방법에 대한 자세한 내용은 물리를 넣고 오디오를 추가하고 사용자가 상호 작용을 시작하게하십시오.이 사이트와 다른 많은 사이트가 존재하는 것은 불가능합니다. 더 구체적인 답변으로 요약하십시오.

하루가 끝나면 비디오 게임을 매우 제한된 데이터 세트 데이터베이스로 설명합니다. 관계형 데이터와 고속 데이터 액세스에 중점을 둡니다. 60 초마다 프레임을 렌더링하는 경우 플레이어가 게임에서있는 위치의 관계에 따라 잠재적으로 많은 양의 데이터를 매우 빠르게 처리한다는 의미입니다. 게임에 의해 추적 된 다른 모든 데이터 :)


롤은 "매우 제한된 데이터 세트 데이터베이스와 같은 비디오 게임"은 아마도 혼란을 가중시킬 것입니다.
michael.bartnett

1

이해해야 할 것은 행렬입니다. 그들은 게임을 뒷받침합니다. 행렬의 힘을 이해하면 게임이 간단한 수학으로 어떻게 축소되는지 알 수 있습니다.

게임 공간에서 정점 위치를 차지합니다. 매트릭스를 사용하여 스크린에 투영합니다 (스크린 좌표 찾기). 당신은 그것과 이웃 정점 사이에 약간의 픽셀을 보간하고 끝났습니다. 그것은 분명히 크게 단순화 된 것입니다. 그러나 래스터 화의 기본은 매트릭스를 파악한 후에는 전혀 복잡하지 않습니다.

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