멘델로 맥도날드를 만들다

지뢰찾기 게임 만들기
이번에는 일본어 프로그래밍 언어인'Produll'로 마이넘버를 만들어 봤다.
My Swipper란
나의 수마는 땅에 묻힌 지뢰를 찾는 놀이다.
이 게임에서는 지뢰가 있는 곳을 피하면서 지면의 숫자를 단서로 삼으면서 모든 빈칸을 풀어주는 지면 1개의 빈칸을 클릭하면 해방된다.
예전에는 Windows 7이 누구나 다 아는 게임으로 표준으로 설치되어 있었다.하지만 윈도 8 이후에는 없어졌기 때문에 익숙하지 않은 사람도 있을 거라고 생각합니다.

사고 논리
개인 전용 게임에서는 주로 다음과 같은 프로그램을 만들어야 한다.
  • 격자 배치
  • 지뢰의 배치
  • 인접 위치의 개수 설정
  • 클릭하여 송어와 지뢰 방출
  • 안전지대의 해방
  • 격자선 정렬
    지상×공백을 8개로 설정합니다.송어는 안전한 송어와 지뢰가 땅에 떨어진 송어가 있다.또 안전한 송어에는 송어 근처에 지뢰가 얼마나 있는지를 나타내는 숫자가 적혀 있다.그리고 송어가 방출되면 송어의 색깔이 달라진다.
    상기 송어의 상태를 총괄하면 모든 송어는 다음과 같은 정보를 가지고 있다.
  • 종류: 정수(0이면 안전, 1이상이면 근처에 지뢰가 있는 수량, -1이면 지뢰, -2면 구역 밖)
  • 해방: 진가치(송어 방출 여부)
  • 좌표: 배열
  • 이러한 정보는 "Mass"클래스에 의해 정의됩니다.'마스'종류는'하위 캔버스'부품을 계승했다.'자화포'부품을 계승하면 격자 대상을 직접 화포의 모양으로 처리할 수 있다.
    한편,'송어'종류의 대상은'지뢰구화'10개다×10의 2차원 배열에 넣다.게임상 8.×8개의 칸이지만 이들을 둘러싸기 위해서는 종횡으로 2개씩 더 많은 칸을 확보해야 한다.이러한 주위의 공백은 카테고리 변수를 영역 외부-2로 나타냅니다.이런 벽을 번병이라고 부른다.번병을 만들어 나중에 진행하면 주변 지뢰 수와 안전한 송어 해방을 셀 때 글로 쓰는 조건이 간단해진다.
    지뢰 배치
    우선 지뢰 구역에 지뢰를 배치한다.이번에는 지뢰 다섯 개를 묻기로 했다.
    지뢰를 묻기 위해 지뢰를 배치하는 절차(47행)를 정의했다.
    어느 칸에 지뢰를 묻을지는 가로(X)와 세로(Y)에 따라(1からマス数までの乱数)+1 결정된다.번병의 송어를 제거하기 위해 무작위로 센 결과 +1.
    지뢰를 배치할 때 조건 없는 중복문을 사용한다.여기서는 지뢰가 같은 칸에 배치되지 않도록 무작위 수로 결정되는 칸에 지뢰가 배치됐는지 조사해 배치되면 장소를 다시 결정하도록 했다.이 말은 반복적으로 나온 것이고, 지뢰가 없다면 한 번 반복하는 것이다.
    마돈스파.rdr(47행)
    繰り返す
        X=(1からマス数までの乱数)+1
        Y=(1からマス数までの乱数)+1
        もし地雷区画(X,Y)の種別が-1でないなら
            地雷区画(X,Y)の種別=-1
            繰り返しを抜け出す
        もし終わり
    繰り返し終わり
    
    또한 송어의 종류를 확인하기 위해 다음 절차를 통해 송어 지뢰의 위치와 주변 지뢰의 수를 표시할 수 있다.프로그램 오류를 발견할 때 이런 프로그램이 있으면 매우 편리할 것이다.
    //「地雷を配置する」手順の末尾
    マス数+2回Yにカウントして繰り返す
        マス数+2回Xにカウントして繰り返す
            地雷区画(X,Y)の種別を改行せず報告
            「 」を改行せず報告
        繰り返し終わり
        「」を報告
    繰り返し終わり
    
    인접 위치의 개수를 설정합니다.
    이 게임에서 지뢰 주위의 격자에는 부근에 지뢰가 있다는 숫자가 숨겨져 있다.
    숨겨진 숫자를 설정하기 위해 지뢰를 배치할 때 주변 송어에 지뢰의 수(카테고리)를 더한다.
    주위의 빈칸에 추가하기 위해 문장을 반복합니다.다음 프로그램의 DX, DY는 지뢰를 나타내는 송어의 상하좌우를 나타내는 카운터 변수다.DX가 -1이면 왼쪽, DY가 1이면 아래쪽, 이렇게 지뢰 주변을 반복하면서 수량을 가산한다.
    마돈스파.rdr(57행)
    -1から1までDYにカウントして繰り返す
        -1から1までDXにカウントして繰り返す
            対象は、地雷区画(X+DX,Y+DY)
            もし対象の種別が0未満なら繰り返しを続ける
            対象の種別を増やす
        繰り返し終わり
    繰り返し終わり
    
    클릭하여 송어와 지뢰 폭발 방출
    플레이어가 스페이스바를 클릭할 때 스페이스바를 클릭하는 절차를 수행합니다.소스 특수 변수는 클릭할 때 질량 유형의 객체를 포함합니다.
    발생원의 카테고리가 -1(지뢰)이면'폭발'절차를 수행하고 다른 지뢰도 표시되며 게임이 끝난다.'폭발'단계에서는 왼쪽에서 오른쪽 아래로 지뢰 구획을 조사해야 하는데, 종류가 -1인 송어는 배경색이 빨간색으로 변해 지뢰의 송어를 폭발시킨다.
    종류 이외의 경우 그 송어를 해방시킨다.해방 때 송어의 해방 완료에 가입하세요.유형이 0보다 크면 숨겨진 숫자가 표시됩니다.또 종류가 0(안전지대)일 경우 상하좌우 안전지대의 송어를 방출한다.
    안전지대의 해방
    운동선수가 클릭한 공백을 해제하는 좌표 단계를 정의합니다.
    클릭한 송어가 안전지대(종류 0)라면 위아래 좌우 4개의 빈칸을 따라가면 안전지대에서 해방된다.이런 상황에서 석방 이전의 안전지대를 위해 같은 석방 절차를 다시 호출한다.이렇게 자신의 순서에 따라 자신의 절차를 집행하는 것을 회귀라고 한다.
    귀속은 이 절차에 따라 집행된 처리를 보류하고 같은 절차에 따라 다른 처리를 집행하는 상태를 말한다.그러나 무조건 자신의 절차에 따라 프로그램을 실행하면 첫 번째 처리가 영원히 끝나지 않고 무한순환이 되기 때문에 회귀를 이용할 때 특정 조건을 충족시킬 때만 프로그램을 호출한다.
    해방의 단계는 송어 한 마리가 상하좌우로 올라온 송어 4마리를 풀어주는 안전지대의 송어다.앞쪽 송어와 관련해서도 번병과 지뢰 주변 송어가 차례가 될 때까지 상하좌우를 더 조사해야 안전지대를 풀어줄 수 있다.또 다음 프로그램의 X와 Y는 해방된 송어의 좌표를 나타낸다.
    마돈스파.rdr(111행)
    もし地雷区画(X,Y+1)の種別が0なら{X,Y+1}を解放する
    もし地雷区画(X+1,Y)の種別が0なら{X+1,Y}を解放する
    もし地雷区画(X,Y-1)の種別が0なら{X,Y-1}を解放する
    もし地雷区画(X-1,Y)の種別が0なら{X-1,Y}を解放する
    
    완성된 프로그램
    마돈스파.rdr
    //マインスイーパ//
    地雷区画={}
    ゲーム中=○
    メイン画面を表示する
    待機する
    
    メイン画面とは
        ウィンドウを継承する
        マスサイズ=20
        地雷数=5
        マス数=8
        解放数=0
    はじめの手順
        初期化する
        ーー貼り付けた部品に対する操作をここに書きます
        マス数+2回Yにカウントして繰り返す
            マス数+2回Xにカウントして繰り返す
                マス(キャンバス1)を作って地雷区画(X,Y)とする
                キャンバス1に地雷区画(X,Y)を加える
                    その位置と大きさは{X*マスサイズ,Y*マスサイズ,マスサイズ+1,マスサイズ+1}
                    その線色を灰に変える
                    その太さを1に変える
                    その背景色をネズミに変える
                    そのクリックされた時の手順は、マスクリック
                地雷区画(X,Y)へ文字を描いて地雷区画(X,Y)のラベルとする
                    その大きさ調整を×に変える
                    そのフォントを「メイリオ,10,太字」に変える
                    その文字色を緑色に変える
                    その文字配置を「中央」に変える
                    その位置と大きさは{0,0,マスサイズ+1,マスサイズ+1}
                    その表示を×に変える
                地雷区画(X,Y)の座標={X,Y}
                もしXが1またはXがマス数+2なら
                    地雷区画(X,Y)の種別=-2
                    地雷区画(X,Y)の解放済は、○
                    地雷区画(X,Y)の表示を×に変える
                他でもしYが1またはYがマス数+2なら
                    地雷区画(X,Y)の種別=-2
                    地雷区画(X,Y)の解放済は、○
                    地雷区画(X,Y)の表示を×に変える
                そうでなければ
                    地雷区画(X,Y)の種別=0
                もし終わり
            繰り返し終わり
        繰り返し終わり
        地雷を配置する
    終わり
    地雷を配置する手順
        地雷数回iにカウントして繰り返す
            繰り返す
                X=(1からマス数までの乱数)+1
                Y=(1からマス数までの乱数)+1
                もし地雷区画(X,Y)の種別が-1でないなら
                    地雷区画(X,Y)の種別=-1
                    繰り返しを抜け出す
                もし終わり
            繰り返し終わり
            -1から1までDYにカウントして繰り返す
                -1から1までDXにカウントして繰り返す
                    対象は、地雷区画(X+DX,Y+DY)
                    もし対象の種別が0未満なら繰り返しを続ける
                    対象の種別を増やす
                繰り返し終わり
            繰り返し終わり
        繰り返し終わり
    終わり
        初期化する手順
        ーー自動生成された手順です。ここにプログラムを書き加えても消える場合があります
            この実質大きさを{428,394}に変える
            この内容を「マインスイーパ」に変える
            初期化開始する
            キャンバス1というキャンバスを作る
                その位置と大きさを{0,0,428,394}に変える
                その移動順を1に変える
                そのドッキング方向を「全体」に変える
            初期化終了する
            この設計スケール比率を{144,144}に変える
    終わり
    マスクリックされた手順
        もしゲーム中でないなら返す
        もし発生元の種別が-1なら
            爆発する
            ゲーム中は、×
        そうでなければ
            発生元の座標を解放する
        もし終わり
        キャンバス1を再描画する
    終わり
    [座標]を解放する手順
        【X】=座標(1)
        【Y】=座標(2)
        もし地雷区画(X,Y)の解放済なら返す
        地雷区画(X,Y)の解放済は、○
        地雷区画(X,Y)の背景色を白色に変える
        解放数を増やす
        もし解放数がマス数*マス数-地雷数なら
            「おめでとうございます!クリアしました」を表示する
            ゲーム中は、×
            返す
        もし終わり
        もし地雷区画(X,Y)の種別が0より大きいなら
            種別は、地雷区画(X,Y)の種別
            ラベルは、地雷区画(X,Y)のラベル
            ラベルの内容を種別に変える
            もし種別が1ならラベルの文字色は、青
            他でもし種別が2ならラベルの文字色は、緑
            他でもし種別が3ならラベルの文字色は、赤
            他でもし種別が4ならラベルの文字色は、紺
            ラベルの表示を○に変える
        そうでなければ
            もし地雷区画(X,Y+1)の種別が0なら{X,Y+1}を解放する
            もし地雷区画(X+1,Y)の種別が0なら{X+1,Y}を解放する
            もし地雷区画(X,Y-1)の種別が0なら{X,Y-1}を解放する
            もし地雷区画(X-1,Y)の種別が0なら{X-1,Y}を解放する
        もし終わり
    終わり
    爆発する手順
        Y=2
        マス数+2回Yにカウントして繰り返す
            X=2
            マス数+2回Xにカウントして繰り返す
                もし地雷区画(X,Y)の種別が-1なら
                    地雷区画(X,Y)の背景色を赤色に変える
                もし終わり
            繰り返し終わり
        繰り返し終わり
        キャンバス1を再描画する
    終わり
    終わり
    マスとは
        子キャンバスを継承する
        +座標
        -内種別
        +解放済
        +ラベル
        はじめ(キャンバス)の手順=(キャンバス)
        終わり
        種別という属性
            取得する手順
                内種別を返す
            終わり
            設定する手順
                内種別=設定値
                もし解放済なら背景色は「灰色」
                他でもし設定値が-2なら背景色は「白色」
                そうでなければ背景色は「ネズミ」
            終わり
        終わり
    終わり
    
    총결산
    오늘 감자 진흙을 만들어 보았다.게임 자체는 매우 간단하지만, 나는 이것이 영원히 질리지 않는 게임이라고 생각한다.
    이런 송어를 사용한 게임에서는 대부분 회귀 처리를 한다.회귀는 프로그래밍을 공부할 때 어려운 일 중 하나입니다. 이번 예를 통해 이해할 수 있다면 기쁩니다.
    다른 한편, 격자구멍을 늘리고 정교하게 디자인된 부품을 만드는 것도 프로그래밍의 즐거움이라고 생각합니다. 이 스마트폰을 꼭 개조해 보세요.
    참조 페이지

    좋은 웹페이지 즐겨찾기