게임 작성 튜토리얼(마인 스위퍼)(최종회)【마크 기능의 추가】

※지금까지의 튜토리얼은 phina.js 튜토리얼 모음 에 정리하고 있습니다.

이번 목표



지난번 에서는 게임 오버와 클리어 처리를 추가했습니다.
이번에는 마지막 시간으로 마크 기능을 추가합니다.
마크 기능은 스스로 폭탄이라고 판단한 패널을 마크하여 열 수 없게 하는 기능입니다.



코드 설명



마크 기능 추가



MainScene의 변경점


  // メインシーン
  phina.define('MainScene', {
    superClass: 'DisplayScene',
    // コンストラクタ
    init: function() {
      // 親クラス初期化
      
      // ピース配置
      PANEL_NUM_XY.times(function(spanX) {
        PANEL_NUM_XY.times(function(spanY) {
          // パネル作成
          
          // パネルタッチ時
          panel.onpointstart = function() {
            // マークモードなら
            if (self.mode === 'mark') {
              if (!panel.isOpen && !panel.isMark) {
                // マーク追加
                if (self.markCount < BOMB_NUM) {
                  Mark().addChildTo(panel);
                  panel.isMark = true;
                  self.markCount++;
                }
              }
              else {
                if (self.markCount > 0) {
                  // マーク削除
                  panel.children[0].remove();
                  panel.isMark = false;
                  self.markCount--;
                }
              }
            }
            else {
              // パネルを開く
              self.openPanel(panel);
              // クリア判定
              self.checkClear();
            }
          };
        });
      });
      // モード
      this.mode = 'normal';

  • this.mode라는 변수로 모드를 관리합니다.
  • 마크 모드이면, 패널이 터치되었을 때에 그 패널이 아직 열려 있지 않고, 그리고 마크되어 있지 않으면 마크를 추가합니다.
  • 반대로 마크가 있으면 마크를 삭제합니다.

  • this.markCount라는 변수로 마크 수가 폭탄 수를 초과하지 않도록합니다.
  •       // マークモードボタン
          Button({
            width: 120,
            height: 64,
            text: 'Mark',
            fill: 'silver',
          }).addChildTo(this)
            .setPosition(this.gridX.span(14), this.gridY.span(14.5))
            .onpush = function() {
              // モード変更
              if (self.mode === 'normal') {
                this.fill = 'hsl(160, 80%, 50%)';
                self.mode = 'mark';
              }
              else {
                this.fill = 'silver';
                self.mode = 'normal';
              }
            };
          // 参照用
          
          // マークの数
          this.markCount = 0;
        },
    
  • 마크 모드를 전환하려면 Button을 사용하십시오.

  • onpush 함수에 버튼을 눌렀을 때의 처리를 기술합니다.
  • 이번은 현재의 모드를 알 수 있도록(듯이) 전환으로 버튼의 색이 바뀌도록(듯이) 하고 있습니다.
  • // パネルを開く処理
    openPanel: function(panel) {
      // マークされていた何もしない
      if (panel.isMark) return;
      
    },
    
  • 표시된 패널이 체인에서 열리지 않습니다.

  • 결론



    6회에 걸쳐 튜토리얼을 써 왔습니다만, 본 엔트리가 phina.js를 사용한 게임 제작의 참고가 되면 다행입니다.

    runstant 프로젝트 링크

    좋은 웹페이지 즐겨찾기