Big2 – 프로젝트를 여러 단계로 분할

8812 단어
시간을 내서 취미 아이템을 하나 만드는 것은 그중에서 매우 어려운 일이다.더 어려운 것은 네가 일하는 동안 배경을 잃었다는 것이다.규모가 합리적인 프로젝트가 관련될 때 주말에 완성할 수 있는 것보다 더 큰 일은 어느 정도의 기획과 시스템 설계가 필요하다. 머릿속의 신선한 배경을 잃는 것도 흥미/열정, 포기를 잃을 수도 있다.
빅2 게임 프로젝트는 저한테 이렇습니다.I started it a few months ago, 생활에 장애가 생겨서 나는 멈추었다.
내가 시작했을 때, 나는 온라인 게임의 큰 계획을 세웠다. 그것은 동기화와 비동기적인 작업, 그리고 각종 사용자 인터페이스 기능과 생각을 할 수 있다.나는 큰 돌진에서 모든 코드를 쓰기 시작했다.나는 확실히 코드 파일을 합리적으로 조직하고 Svelte의 구성 요소 구조를 충분히 이용하는 동시에 깨끗한 백엔드/전단 분리(more on the stack and system design here를 사용한다.실제 코드에서 최선의 실천을 따르다.
그럼에도 불구하고 몇 달 동안 중단된 후에도 복구 작업은 매우 어렵다.내 머릿속에서 클라이언트-서버 통신에 관한 많은 시스템 설계(서버가 클라이언트의 연결을 어떻게 처리하고 모든 클라이언트에 데이터를 나누어 주는지)가 모두 내 머릿속에서 사라졌다. 내가 쓴 코드는 이해하기 어렵다.
나는 게임 클라이언트/UI 코드가 섞인 모든 온라인 게임 코드에서 한 걸음 물러나 프로젝트를 다른 단계로 나누기로 결정했다. 나는 각각 작업을 할 수 있고 각 단계는 몇 일 안에 완성할 수 있을 만큼 작다.
그것은 다음과 같은 세 가지 주요 방면으로 귀결될 수 있다.

바둑 논리
이 단계는 두 개의 하위 점으로 세분화됩니다.

Big2 게임 규칙 논리를 처리하는 순수 함수
프로젝트를 세 가지 주요 분야로 나누기 전에, 이것은 사실상 내가 일하는 코드 라이브러리의 첫 번째 부분이다.이것은 당시에도 일리가 있었다.나는 클라이언트와 서버 측에 반드시 이런 게임 논리가 있어야 한다는 것을 예견했다. (클라이언트는 서버가 요청하기 전에 이동이 유효한지 신속하게 확인할 수 있고 서버는 이동을 검증하고 실행할 수 있다.)실제 최종 디자인 결과는 약간 다르지만 이 공유 라이브러리는 로컬 게임 모델이 있기 때문에 유용하다.
이것들은 순수 함수 (함수 프로그래밍 용어에서) 입니다. 입력값을 제공합니다. 논리적으로 실행되고 출력을 제공합니다.데이터베이스도 없고 상태도 없고 요청 상하문도 없고 클라이언트도 없습니다.
예를 들어 하나의 함수는 이렇게 될 수 있다. 모든 사람이 통과할 때, 함수는 하나의 동작을 검증하고, 네가 어떤 카드를 할 차례가 될 것이다.
/**
 * next is a card or array of cards the player wants to play
 */
module.exports = next => {
  const cards = Array.isArray(next) ? next : [next];
  if (cards.length === 1) {
    //
    // Singles
    //
    return true;
  } else if (cards.length === 2) {
    //
    // Pairs
    //
    if (cards[0].order !== cards[1].order) {
      return false; // not pair
    }
    return true;
  } else if (cards.length === 3) {
    //
    // Triples
    //
    if (cards[0].order !== cards[1].order || cards[0].order !== cards[2].order) {
      return false; // not triple
    }
    return true;
  } else if (cards.length === 5) {
    //
    // Five Card Set
    //
    const fiveCardType = getFiveCardType(cards);
    if (!fiveCardType.type) {
      return false; // invalid set
    }
    return true;
  } else {
    return false; // invalid move
  }
};
빅2 게임의 모든 게임 논리는 위와 유사한 순수함수 십여 개로 구성된다.이것은 다섯 장의 카드가 직패인지, 동화순패인지, 만패인지, 네가 하고 있는 카드가 전 유저가 하고 있는 카드보다 더 강한지, 등등을 검사하는 것을 포함한다.

게이머가 게임을 시작하고 번갈아 가며 순함수를 처리하다
일단 게임 논리의 상술한 순수 함수 집합을 완성하면 이것은 사실상 게임 절차를 처리하는 소자 집합이다.
이 순함수는 전체 게임 상태 대상을 수신하고 다음 차례가 누구인지, 그들이 차례나 패스를 할 때 무슨 일이 일어날지, 발생하는 모든 것을 위해 게임 상태를 업데이트하는 등이다.

로컬 게임 모드
이 단계는 기본적으로 내가 UI와 전단을 충실하게 할 수 있도록 허락한다.
일단 위의 모든 게임 논리와 게임 절차를 처리하는 순수한 기능을 완성하면 로컬 게임 모드에서 일하는 것은 완전히 날씬한 전단 코드이다.
날씬한 전단 구성 요소 코드의 간결성과 날씬한 웹 응용 프로그램의 레이아웃 구조는 이 작업을 전단과 같이 간단하고 재미있게 한다.리액션도 하지 말라고 조언했고 jQuery 전단을 아마추어 프로젝트에 간단하게 사용하지 말라고 조언한 사람으로서 저는 Svelte가 개발 과정에서 주도적인 위치를 차지했다고 말할 수 밖에 없습니다.Svelte는 입문하기 쉽고 간결한 코드를 제공하여 jQuery ad-hoc 전단과 같이 대형 전단 프로젝트에 필요한 코드 구조와 구성 요소를 바탕으로 한 디자인을 제공하여 jQuery 전단 코드 라이브러리가 자주 혼란스러워지지 않도록 한다.

온라인 게임 모드
이 부분을 끝까지 남겨두면 나는 그것의 네트워크 방면과 다른 온라인 기능, 예를 들어 당신의 이름과 이미지를 설정하는 데 전념할 수 있다.
현재 모든 게임 논리가 완성되었습니다. 저는 간소화된 게임 전단을 가지고 주로 현지 게임 모드에서 일합니다.물론 온라인 모드에는 추가적인 기능이 있을 수 있지만, 현재 UI는 하나의 상태에 처해 있어, 나는 처음부터 시작하지 않고 교체해서 업데이트할 수 있다.
이것은 내가 처음으로 이 프로젝트를 시작했을 때의 웹 소켓스 온라인 게임 코드로 돌아가 그 내용을 이해하고 코드 라이브러리의 나머지 부분에서 현재 더욱 독립된 구성 요소를 사용할 수 있도록 필요한 수정을 했다.
하루가 끝날 때, 인터넷 게임 모드를 내가 예상한 것보다 훨씬 쉽고, 시간도 훨씬 짧게 운행하게 한다.한 번은 내 머릿속에서 발견한 적이 있는데,"잠깐만, 그렇다. 나는 실제로 완전히 정상적으로 실행되는 온라인 게임에서 몇 발자국 떨어진 것 같다. 나는 기본적으로 API 요청을 연결할 뿐이다. 게이머들이 단추를 누르고 모퉁이를 돌 때 무슨 일이 일어날지, 나머지 웹소켓스 코드는 요청을 받고, 요청을 실행하고, 모든 클라이언트에게 업데이트된 게임 상태를 방송하면 나머지는 처리할 수 있다."사실 내가 이렇게 하면 클라이언트 코드는 업데이트된 게임 상태를 받아 전체 게임 단계(게임판)를 정확하게 나타낼 것이다.그리고 게임 중의 모든 유저는 자동으로 완전한 게임을 완성할 것이다.
얼마나 만족스러운 느낌인가!나는 심지어 이 온라인 게임이 이렇게 빨리 완전히 사용에 들어갈 줄은 생각지도 못했지만, 그것은 확실히 존재한다.

좋은 웹페이지 즐겨찾기