C++로 MyNumber 만들기!① 맵 그리기(1) 목표 설정, 배열, define(매크로 포맷 대상)

프로세스 고려


그러니 마이넘버를 실제로 만들어보자.
최초의 코드는 이런 느낌이었다.
tokuniimihanai
#include<iostream>

using namespace std;

int main(){

 return 0;
}

당연하지, 하지만 아직 아무것도 하지 않았어!
갑자기 여기서부터 쓰면 불가능한 달팽이라서'원래 마이넘버는 뭐예요?'이렇게 생각하면 최초의 목표를 설정한다.
↓↓ 그렇다면 다음 그림을 살펴보자.크면 안 돼.↓↓

마지막 쪽에서 생각한 게 너무 많아서 혼란스러웠지만 먼저 해야 할 일은
① 필드가 있음
② 마당에 파괴할 벽이 있다
그걸 이루는 거야.

지도를 만들겠다고?활용단어참조


예를 들어 세로 15칸*세로 30칸이면 총 450칸의 빈칸이 있다.
450개의 변수를 수동으로 준비하고 관리하기는 어렵다.
그러니 배열을 이용해 한 번 관리하자.
hairetsuttesugoi
 int map[15][30];
이 기술은 맵[0][0]에서 맵[14][29]까지의 int형 변수를 한 줄로 표시했다.편리‼
int map[15][30]; //配列の宣言
for(int i = 0; i < 15; i++){      //0-14行目まで繰り返す処理の中に、
   for(int j = 0; j < 30; j++){   //0-29列目まで繰り返す処理を埋め込みます。この表記は頻出なので注意‼
      map[i][j] = 0;              //配列の全てに0を代入
      cout << map[i][j];          //配列の全てを出力
   }
   cout << "\n";                  //ここ忘れがちですが、各行29列目のあとで改行しましょう。
}
이렇게 기술하면 실행할 때 길이가 15*너비 30개 0으로 배열해야 한다.↓↓
000000000000000000000000000000 //map[0][0]からmap[0][29]まで出力し\nで改行。
000000000000000000000000000000  //map[1][0]からmap[1][29]まで出力し\nで改行。以下同じ。
000000000000000000000000000000
     (……省略……)
000000000000000000000000000000
000000000000000000000000000000
000000000000000000000000000000 //map[14][0]からmap[14][29]まで出力し\nで改行。
↑↑ 이런 인상.

화면이 내 잠꾸러기처럼 보이게!


그렇지만
하지만 여러분.
내 핸드폰 화면 이런 거 아니지?
실제 스마트폰 화면을 살펴봅시다.(이건 주운 사진이야. 안 맞아!)↓↓

0은 안 되는 거지!
마이슈퍼 지도에는 철거해야 할 벽이 촘촘하게 늘어서 있었다.표현하자면 □이겠죠.하지만 이제 지도에 0만 뜨면 끝이에요.
그럼 이런 메커니즘을 소개해 봅시다.
① int[15][30]형 배열맵에 값을 대입(아까의 예에 따라 0)
② 대입치대로 지도에 그리기(0시 □ 그리기)
이렇게 하면 □ 이외의 내용을 그릴 수 있을 뿐만 아니라'디지털 계산'을 통해'각종 문자와 그림'을 관리할 수 있다.편리‼
방금 전의 전선을 수정해 보세요.
이번엔 ①와 ②를 각각 처리하므로 같은 기술이 연속적으로 진행되되 방법이 없다고 판단해 포기하십시오.
int map[15][30];
for(int i = 0; i < 15; i++){
   for(int j = 0; j < 30; j++){
      map[i][j] = 0;
   }
}
//ここまでで配列の全てに0を代入できました。

//以下の記述で画面に出力してみます。
for(int i = 0; i < 15; i++){
   for(int j = 0; j < 30; j++){
      switch(map[i][j]){             //switch文で配列の値の場合分けをします。今回は0しかありませんが、今後増えます。
         case 0: cout << "□"; break; //:の後には必ず半角スペースを入れる事と、各caseの最後にbreak;を忘れずに‼
         default: break;
      }
   }
   cout << "\n";
   }
이런 느낌이에요.
두 번째 설명은 모든 어레이에 대한 것입니다.
①값이 0일 경우 □ 출력
② 이것 말고는 아무것도 하지 않는다
이런 상황에서 헤어지면
배열당 값
① 평범한 벽... 0
② 폭탄이 있는 벽... 1
③ 평범한 벽(체크)... 2
④ 폭탄이 있는 벽(검사)...3
⑤폭탄(게임 종료)...-1
⑥ 파괴된 벽... - 2.
이렇게 되면 6가지 모델로 늘어날 것으로 보인다.그래서 이번에는if문이 아니라 switch문인 경우를 분리해서 채택했습니다.
그럼 실제 출력해 보세요.둥!!

좋은 모래‼
드디어 지도를 그린 것 같다.

더 좋죠!


그렇다면 잘하더라도 현재 코드인'전문'을 살짝 확인해야 한다.
imano-code
#include<iostream>

using namespace std;

int main() {
    int map[15][30];
    for (int i = 0; i < 15; i++) {
        for (int j = 0; j < 30; j++) {
            map[i][j] = 0;
        }
    }   

    for (int i = 0; i < 15; i++) {
        for (int j = 0; j < 30; j++) {
            switch (map[i][j]) {            
            case 0: cout << "□"; break; 
            default: break;
            }
        }
        cout << "\n";
    }

    return 0;
}
이 코드는 처리에 있어서 결코 틀리지 않았지만, "읽기가 매우 어렵다."구체적으로 말하면
① 15, 30 등등 송어에 대한 숫자가 너무 많이 나온다.각자 무엇을 대표하고 있습니까?변경할 때는 모든 것을 착수해야 하기 때문에 매우 번거롭다
②main() 함수에서 많은 처리가 이루어졌는데 각각 어떻게 처리되었는가?
잠깐만요.
실제로는 아직 많을 수도 있지만, 어쨌든 우선 이 두 문제를 집중적으로 해결합시다!

① 수량을 쉽게 이해할 수 있도록--define을 사용하세요!


그나저나 여러분 이것 좀 보세요.
#define MICHO 20  //文末に;は不要なので注意!
"이게 뭐야?"이런 느낌이 들 수 있지만, 이 기술을 사용하면
#define MICHO 20
#include<iostream>
using namespace std;

int main(){
   cout << MICHO;

   return 0;
}
MICHO 값만 출력하는 코드를 만들어 보십시오
20
출력되어야 합니다.
이런 명령을 #define 명령이라고 하는데 #define A 형식으로 사용합니다.이렇게 되자 A는 그 후 B를 나타내는 것이 되었다.
(또한, A가'이것은 define의 값입니다'라는 것을 쉽게 알기 위해 A는 모두 대문자로 표시한다)
이렇게 쓰는 장점은 다음과 같다.
① 값을 통일적으로 변경하면 누락을 방지할 수 있다.
② 읽을 수 있도록 수치를 명명할 수 있다.
잠깐만요.다른 방법으로는 const와 enum을 사용하는 방법도 있고, 혹은 그쪽이 추천받은 것 같다(죄송합니다) 하여튼 이번엔 #define을 사용해 송어 수량을 관리해 봅시다!
먼저 코드의 시작 부분에서
#define MAP_HEIGHT 15
#define MAP_WIDTH 30
이렇게 쓰세요.이렇게 해서
MAP_HEIGHT는 15의 값을 나타냅니다.
MAP_WIDTH가 30인 값을 나타냅니다.
이렇게 결정됐습니다.
따라서 모든 값을 개작하면
#define MAP_HEIGHT 15
#define MAP_WIDTH 30

#include<iostream>

using namespace std;

int main() {
    int map[MAP_HEIGHT][MAP_WIDTH];
    for (int i = 0; i < MAP_HEIGHT; i++) {
        for (int j = 0; j < MAP_WIDTH; j++) {
            map[i][j] = 0;
        }
    }   

    for (int i = 0; i < MAP_HEIGHT; i++) {
        for (int j = 0; j < MAP_WIDTH; j++) {
            switch (map[i][j]) {            
            case 0: cout << "□"; break; 
            default: break;
            }
        }
        cout << "\n";
    }

    return 0;
}
알아!!!!!!!!!!
...아니, 어때.아마도 아직 아무런 효과가 없을 것이다.코드가 워낙 어려워서요.아무튼 이제 속았다고 생각하고 이걸로 써봐요.

끊을게요!


여기까지 보도로 상당히 길어졌다.
②의 "main() 함수에서 어떻게 처리되는지 알기 어려웠지만, 이번에는 여기서 끝내고 다음에 돌릴게요.미안해!!
그렇긴 하지만 이번에만 스마트폰 화면을 성공적으로 보여야 한다."뭘 해야 할까요?"나는 이렇게 현혹된 여러분에게 매우 큰 진보라고 생각한다.다음에도 파이팅!!
그럼 다음에는'지도 그려주세요(2)'를 기대해주세요!!
====================================
읽어주셔서 감사합니다.
미성숙한 사람이라 미성숙한 부분이 많다고 생각해요.모르는 부분에 대해 질문을 하시면 답장 범위 내에서 답장을 드리겠습니다.또 잘못된 점과 개선된 점이 있으면 가급적 지적해달라고 당부했다.진지하게 공부하게 해주세요.
     MICHO

좋은 웹페이지 즐겨찾기