본문 바로가기

지식창고/프로그래밍

C++ 언어를 사용하여 간단한 미로게임 구현하기 3_(c_move.cpp)

반응형

#include "miro_H.h"

//해당함수는 콘솔(도스)창에 맵을 그려주기 위한 함수로 사용됨.
void Main_Date::Map_Print()
{
          if(S_level == 1) 

          {
                    for(int i = 0; i < S_1_M_width; i++)
                    {
                              for(int j = 0; j < S_1_M_height; j++)
                              {


                              //맵은 int형 배열로 선언되어 있으며, 각 배열마다 0과 1로 초기화가 되어있는데
                              //해당 숫자에 맞춰 빈공간(캐릭터가 움직일 부분)과 벽으로 체크할 부분을
                              //나누어 화면에 뿌려주게 하는 기능을 함.
                              //빈 공간을 두번 띄운 이유는 벽으로 사용한 한글 'ㅁ'자는 2바이트이기 때문에
                              //맵의 모양을 원하는 대로 맞추어 뿌리기 위하여 두 칸을 띄워 2바트를 맞췄기 때문에.


                                        if(test[i][j] == 3)

                                        {
                                                  Map_Color(7,12);
                                                  cout << "★";

                                                  player_X = i;
                                                  player_Y = j;
                                        }


                                        if(test[i][j] == 1)
                                        {
                                                  Map_Color(0, 10);
                                                  cout << "ㅁ";
                                        }

 

                                        else if(test[i][j] == 0 )
                                        {
                                                  Map_Color(7, 0);
                                                  cout << "  ";
                                        }
                    

                                        else if(test[i][j] ==4)
                                        {
                                                  Map_Color(0, 14);
                                                  cout << "탈";
                                        }

                    

                                        else if(test[i][j] ==5)
                                        {
                                                  Map_Color(0, 14);
                                                  cout << "출";
                                        }
    
                              }
                              cout << endl;
                    }

 

          }

 

          else if(S_level == 2) 

          {
                    for(int i = 0; i < S_2_M_width; i++)
                    {
                              for(int j = 0; j < S_2_M_height; j++)
                              {
                                        if(test[i][j] == 3) 

                                        {
                                                  Map_Color(7,12);
                                                  cout << "★";
                                                  player_X = i;
                                                  player_Y = j;
                                        }
                                        

                                        if(test[i][j] == 1)
                                        {
                                                  Map_Color(0, 10);
                                                  cout << "ㅁ";
                                        }
                                        

                                        else if(test[i][j] ==0)
                                        {
                                                  Map_Color(7, 0);
                                                  cout << "  ";
                                        }
                                        

                                        else if(test[i][j] ==4)
                                        {
                                                  Map_Color(0, 14);
                                                  cout << "탈";
                                        }
                    

                                        else if(test[i][j] ==5)
                                         {
                                                  Map_Color(0, 14);
                                                  cout << "출";
                                        }
                              }
                              cout << endl;
                    }
          }


          else if(S_level == 3) {
                    for(int i = 0; i < S_3_M_width; i++)
                    {
                              for(int j = 0; j < S_3_M_height; j++)
                              {
                                        if(test[i][j] == 3) 

                                        {
                                                  Map_Color(7,12);
                                                  cout << "★";
                                                  player_X = i;
                                                  player_Y = j;
                                        }

                              

                                        if(test[i][j] == 1)
                                        {
                                                  Map_Color(0, 10);
                                                  cout << "ㅁ";
                                        }
     

                                        else if(test[i][j] ==0)
                                        {
                                                  Map_Color(7, 0);
                                                  cout << "  ";
                                        }
     

                                        else if(test[i][j] == 4)
                                        {
                                                  cout << "탈";
                                        }

                              

                                        else if(test[i][j] == 5)
                                        {
                                                  cout << "출";
                                        }
    
                              }
                              cout << endl;
                    }
          
}

 

void Main_Date::C_Move()
{
          int key;
          int MAX_X , MAX_Y; 
          key = getch();
          int x = player_X, y = player_Y;

          

          if(S_level == 1) 

          
                    MAX_X = S_1_M_width;
                    MAX_Y = S_1_M_height;
          }

 

          else if(S_level == 2) 

          
                    MAX_X = S_2_M_width;
                    MAX_Y = S_2_M_height;
           }
  

          else if(S_level == 3) 

          
                    MAX_X = S_3_M_width;
                    MAX_Y = S_3_M_height;
          }
 

switch(key) 

{  
 // 119 - 상, 하 - 115, 97 - 좌,100 - 우 
 //상
                    case 119:
                    if(player_X > 0)
                    //오류 - x y 값이 뒤바뀜..
                    //플레이어의 하단에 위치한 공간이 0 (비어잇을경우) 플레이어와 위치변경 후 위치좌표 값 재설정
                    if( test[player_X - 1][player_Y] == 0){
                              test[player_X][player_Y] = 0;
                              test[player_X - 1][player_Y] = 3;
                              player_X--;
                    } else if(test[player_X - 1][player_Y] == 4) {
                              S_level++;
                              G_map();
                    }

                    break;
//하
                    case 115:
                    if(player_X < S_3_M_height)
                    if( test[player_X + 1][player_Y] == 0) {
                              test[player_X][player_Y] = 0;
                              test[player_X + 1][player_Y] = 3;
                              player_X++;
                    }else if(test[player_X +  1][player_Y] == 4) {
                              S_level++;
                              G_map();
                    }
                    break;
//좌
                    case 97: 
                    if(player_Y > 0)
                    if( test[player_X][player_Y - 1] == 0) {
                              test[player_X][player_Y] = 0;
                              test[player_X][player_Y-1] = 3;
                             player_Y -= 1;
                    }else if(test[player_X][player_Y - 1] == 4) {
                              S_level++;
                              G_map();
                    }
                    break;
//우
                    case 100:
                    if(player_Y < S_3_M_width)
                    if( test[player_X][player_Y + 1] == 0) {
                              test[player_X][player_Y] = 0;
                              test[player_X][player_Y + 1] = 3;
                              player_Y += 1;
                    }else if(test[player_X][player_Y + 1] == 4) {
                              S_level++;
                              G_map();
                    }
                    break;

          }
}

 

해당 소스는 c와 c++을 공부했던 이들이라면 쉽게 이해될 거라 생각됩니다.

c와 c++을 공부하기 시작하는 분들에게도 도움이 되었으면 하는 바램에 가져왔습니담.

참고로 자세한 설명은 기재되어 있지 않습니다~ ㅎ

처음 공부하는 이들이라면 '왜 이렇게 되는지'라는 의문을 가지고 검색해보고 고민해봤으면 하는 바램이기 때문이죠 ㅎ

 

모두 화이팅!!!!

반응형