게임에서 접근하기 쉽고 강력하며 빠른 코드 입력이 가능한 프로그래밍 시스템을 어떻게 구현합니까?


15

저는 현재 공간 기반 샌드 박스 게임을 개발 중이며,이 시스템은 시스템을 사용자 정의 할 수있는 기능을 많이 갖추고 있습니다. 둘 다의 방식으로 이것을 구현하고 싶습니다.

  1. 얻기 쉬운,
  2. 강력 함 (최소한은 튜링 완전 성임)
  3. 빠른 코딩.

텍스트 기반 언어는 일반적으로 후자의 두 가지 요구 사항 만 충족하며 처음 두 가지를 만족하는 시각적 언어를 디자인하는 것은 어렵지 않지만 마우스를 광범위하게 사용해야하기 때문에 시각적 언어는 프로그래밍하기가 어렵습니다. 매우 접근하기 쉬운 텍스트 기반 언어가 있지만 완전한 프로그래머가 아닌 프로그래머가 프로그래밍을 쉽게 할 수 있기를 바랍니다.


누군가가 실제로 당신에게 모범을 보여줄 수 있다면 놀랄 것입니다. 왜냐하면 나는 이것이 인간이 논리를 적용하는 방법과 그렇지 않은 것, 심리적 요인 등 모든 인간 중심의 물건과 같은 광범위한 연구가 필요하다고 생각합니다.
Sidar

2
스크래치를 언급 한 사람이 없습니까?
Russell

2
나는 가까운 투표를 제안하지는 않지만, 이것이 "질문에 답하는 책 전체를 상상할 수 있다면 너무 많이 묻습니다"라는 질문 범주에 거의 해당되지 않는다고 지적하고 싶습니다. FAQ에서; 이것은 매우 어려운 문제이며, 여기 사람들이 조언을 제공 할 수는 있지만,이 문제는 SE 사이트의 범위를 넘어서 해결해야 할 문제입니다.
Steven Stadnicki 2016

튜링 완성도는 Conway의 인생 게임 , Minecraft 및 프로그래밍을 위해 설계되지 않은 기타 시스템을 통해 달성 할 수 있습니다 .

답변:


10

실제로 모든 기능을 갖춘 유일한 방법은 여러 인터페이스를 구현하는 것입니다. 접근성과 강력 함은 종종 스펙트럼의 두 끝입니다. 가장 쉬운 방법은 초보자가 직관적 인 방식으로 시스템과 상호 작용할 수있는 추가 인터페이스가있는 강력한 시스템을 구현하는 것입니다.

초보자가 시각적으로 프로그래밍 할 수있는 시스템, 아마도 Lego Mindstorms 프로그래밍 도구 와 유사한 것을 허용 합니다.

여기에 이미지 설명을 입력하십시오

끌어서 놓기 구성 요소가있는 위치 구성 요소에는 입력 및 출력이 있습니다. 구성 요소는 게이트 AND또는 OR게이트 와 같은 간단한 것이 거나 근처의 적을 테스트하는 것과 같이 더 복잡 할 수 있습니다 .

시각적 표현은 백그라운드에서 작성된 언어 스크립트를 컴파일하는 것이 이상적입니다. 이것은 언어 학습을위한 강력한 도구를 제공합니다. 초보자가 프로그램을 시각적으로 "쓰기"할 수 있으면 생성 된 코드를 읽고 이해하면 훨씬 더 이해하고 생성 된 코드를 수정할 수 있습니다. 결국 시각적 도구만으로 허용되는 것보다 더 강력한 코드를 작성할 수 있습니다. 이것은 사용자가 프로그래밍을 용이하게하는 요구 사항을 충족시킵니다.

물론 시스템의 중추는 서면 언어입니다. 시각적 도구는 사용자에게 간단한 것을 프로그래밍 하는 빠른 방법을 제공하고 초보자가 시작할 수 있도록하는 것입니다.

서면 언어를 사용하면 고급 사용자가 고급 작업을 수행 할 수 있습니다. 또한 사용자 정의 스크립트를 작성하여 사용자가 자신의 구성 요소를 만들도록 허용 할 수도 있습니다. 그런 다음 빠른 프로그래밍을 위해 빠르고 쉬운 인터페이스로 만든 구성 요소를 재사용 할 수 있습니다.

행운을 빕니다! 재미있는 프로젝트처럼 들립니다.


설명 주셔서 감사합니다. 나는 실제로 NXT-G와 같은 것을 스스로 생각하고 있었지만, 그런 언어로 복잡한 프로그램을 만드는 것이 얼마나 어려운지 경험을 통해서만 알았습니다. 나는 시각적 프로그램을 코드로 변환하는 아이디어를 좋아하여 플레이어가 경험이 많을 때 텍스트를 다시 텍스트로 편집하고 편집 할 수 있으므로 사용할 것입니다.
Dimitriye98

1
그래픽 표현으로 일부 스크립트 코드를 생성하는 것은 쉽지만 스크립트에서 (의미 있고 읽기 쉬운) 그래픽 표현을 생성하는 것은 매우 어렵습니다. 따라서 아마도 매우 제한된 자체 스크립트 구문으로 끝날 것입니다.
Imi

1
정확한 이유로 스크립트-> 비주얼을 구현하고 싶지는 않습니다. 시각적-> 스크립트를 고수하십시오.
MichaelHouse

매크로 블록 (입력 / 출력을 제공하는 블록 및 임의의 블록을 내부에 배치 할 수있는 기능)을 사용하여 복잡한 프로그램을 쉽게 만들 수 있도록 계층 구조, 캡슐화 및 재사용을 제공 할 수 있습니다. 매크로 안에 매크로를 넣을 수 없거나 그러한 경우를 감지 할 수 없는지 확인하십시오. 무한 루프를 감지하지 못하는 하나 이상의 프로그램을 알고 있습니다.
Exilyth

5

당신은 구글의 블록을 살펴보고 싶을 것입니다 . 시각적 요소를 인식 가능한 프로그래밍 용어와 결합하면서 상당히 적절한 수준의 접근성을 유지합니다.

여기에 이미지 설명을 입력하십시오

영감을 얻기 위해 Maze 데모 를 살펴볼 수 있습니다. 프로그래머가 아닌 많은 친구들이 그것을 사용하여 퍼즐을 최대한 활용할 수 있었으며 최소한의 기준 중 일부를 만족 시켰습니다.


접근성 관점에서 흥미로운 언어이지만 프로그래밍이 매우 느립니다 (방금 시도했습니다) ...
Pasha

@PashaS 실제로, 그것은 당신이 두 세계의 최고를 얻으려고 노력하기 위해 지불 해야하는 가격의 일부라고 생각합니다.
케찰코아틀

4

이전에 언급되지 않은 것에 대해 놀랐지 만 MIT의 스크래치 (Scratch) 는 코드 입력이 빠른 블록 인터페이스를 사용합니다. 사용자가 자신의 기능을 만들 수 있고 아이들에게 언어를 익히는 방법을 놀라 울 정도로 복잡하게 만들 수 있습니다. 암호.

Stencyl 은 원하는 것과 더 유사한 블록 코딩의 또 다른 예입니다. 이와 같은 블록으로 코딩하는 것은 Lego NXT에서 사용하는 것과 같은 시각적 프로그래밍 인터페이스보다 훨씬 효율적이고 시간이 덜 걸립니다. Stencyl을 통해 사용자는 액션 스크립트 또는 블록으로 코딩 할 수 있습니다.

사진이 부족하여 죄송합니다. 아직 이미지를 게시 할만한 명성이 없습니다.


2

BPEL 프로그래밍 언어 에는 시각적 표현과 함께 사용할 수있는 많은 도구가 있습니다. 프로그래밍 언어가 아닌 워크 플로 언어이지만 튜링 완료입니다. 장황하지만 프로그래머와 비즈니스맨 모두가 작성하기 쉽고 시각적에서 텍스트 형식으로 쉽게 번역 할 수 있습니다. 나는 그것이 좋은 게임 언어를 만들 것이라고 생각하지 않지만 영감의 원천이 될 수 있습니다. 그리고 BPEL 엔진과 툴의 양이 주어지면 일부 아이디어 및 / 또는 코드를 재사용 할 수 있어야합니다.

BPEL과 같은 언어는 라우팅 및 연결 시스템과 같은 프로그래밍과 같은 느낌이 들지 않습니다. 따라서 사이에 약간의 논리가있는 건 시스템에 타겟팅 시스템을 연결할 수 있습니다.


+1 : BPEL 자체를 옹호하지는 않지만 그 접근 방식은 제가 제공 한 답변입니다. 텍스트 나 시각적으로 표현하기 쉽고 규칙적인 프로그래밍 패러다임보다 이벤트 라우팅 / 응답에 더 중점을 둔 매우 규칙적인 언어.
Sean Middleditch 2016 년

1

이 접근법을 고려하십시오.

  1. 간단한 규칙 기반 메커니즘으로 스크립트 논리를 표현할 수 있어야합니다. 예를 들어, 가득 채워야하는 "조건"과 관련된 게임 플레이 중에 "트리거"가 발생하면 "작업"이 실행됩니다 (Starcraft 2 Editor에서 뻔뻔스럽게 도난 당함).
  2. 그런 다음 미리 정의 된 액션 / 컨디션 / 트리거를 드래그 앤 드롭 할 수있는 UI를 제공하여 사람들이 일반적으로 원하는 유스 케이스의 90 %를 구성하십시오.
  3. 이제 Lua, Python 또는 C #과 같이 강력하고 널리 사용되는 스크립팅 엔진을 통합하십시오.
  4. 마지막으로 수십 가지의 액션 / 컨디션 / 트리거를 해당 언어로 작성하십시오. 커스터마이징 사용자가 드래그 앤 드롭 편집기에서 이러한 액션과 새로운 액션을 복사하여 붙여 넣기, 편집 및 통합 할 수 있는지 확인하십시오.
  5. 트리거, 조건 및 액션을 매개 변수화 할 수 있기를 원하므로 "GameObject", "Position", "Number"또는 "String"과 같이이 세 가지보다 몇 가지 프리미티브가 더 필요합니다. UI에서는 이러한 매개 변수를 할당하기위한 대화 상자가 필요하지만 UI 작업을 통해 전체 스크립트를 구성 할 수있는 것보다 여전히 작업이 훨씬 적습니다.

그것은 너무 많은 고통없이 모든 사탕을 얻는 가장 빠른 방법에 관한 것입니다. 당신은 click'n'drag noobs뿐만 아니라 vim-geeks을 기내에서 얻습니다. 또한 역학을 단순하게 유지하는 경우 (예 : 트리거-> 조건-> 동작) 강력하고 사용하기 쉬운 그래픽 스크립트 편집기를위한 UI를 개발하는 데 많은 시간을 들일 필요가 없습니다.

의미를 명확하게하는 몇 가지 예 :

  • 트리거는 "Game Framework Initialized", "Game loaded", "Unit created", "Unit destroyed", "Player Damage"등이 될 수 있습니다. 트리거에는 일반적으로 몇 가지 파라미터가 있습니다 (예 : 생성 된 유닛은 생성 된 게임 오브젝트를 얻습니다)
  • 조건은 모두 표준 부울 및 기본 산술 조건 (및 / 또는 / 같지 않음 / 같음 / 더 크게)과 게임에서 발견 한 "Unit is full full"또는 "적어도 두 명의 플레이어가 연결되어 있습니다"와 같은 일반적인 조건입니다. 조건에는 일반적으로 사용자가 입력해야하는 매개 변수가 있습니다 (UI 사용).
  • 동작은 간단한 매개 변수를 사용할 수도있는 스크립트입니다. "카메라를 XXX로 팬 설정", "Kill Unit Y", "Game over", "Execute Trigger"및 "Call Actions X, Y, Z ...를 순차적으로 호출"

프로그래밍은 플러그인이 아닌 게임 내 컴퓨터를위한 것입니다. 그래도 감사합니다.
Dimitriye98

나는 .. 그것은 재미있는 게임 접근법처럼 들린다;). 게임 몰입을 방해하지 않으면 서 코딩 기능을 제공하려고하는 "Code Hero"또는 "Garry 's Mod"와 같은 유사한 게임을 살펴 보셨습니까? 어쨌든 여전히 기본 조언을 구하고 문제를 스크립팅과 UI 부분으로 나눌 수 있습니다. 게임에 행운을 빕니다. :)
Imi

글쎄, 코딩은 게임 내 컴퓨터 콘솔에서 이루어 지므로 몰입을 너무 많이 방해해서는 안됩니다. 원하는 사용자는 게임에서 코드를 만들 수 없지만 코드를 저장하거나 서버에서 가져옵니다.
Dimitriye98
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.