하얀색 칸이 플레이어라고 치면

두더지랑 적당히 d라던가 위치 3 3이니까

랜덤씨드 적용해서 rand()%3 해주면 되겠지?

그 sleep함수 들어간 부분에 두더지 알파벳 넣고

지나면 그 전꺼 지우고 다시 새로 주고

그렇게 해주면 될거같아

참고만 했음 좋겠어 정답은 아니고 너 스타일이랑

많이 다를수도 있으니 이렇게도 짤 수 있다정도?

스페이스바 누르면 현 플레이어 위치 가지고 와서 

거기에 두더지 알파벳이 있는지 확인만 해주면 돼




#include <stdio.h>

#include <stdlib.h>

#include <Windows.h>

#include <conio.h>


#define MAX_HEIGHT 3

#define MAX_WIDTH 3


const POINT g_default_pos{ 0,0 };


// 배경화면 배열


const char k_arr_background[MAX_HEIGHT][MAX_WIDTH]

{

{'1','1','1'},

{'1','1','1'},

{'1','1','1'}

};


enum e_direction

{

UP,

DOWN,

LEFT,

RIGHT

};


struct s_player_data


{


POINT current_pos;




} *p_player = (s_player_data*)malloc(sizeof(s_player_data));


struct s_game_data


{


// 배경화면 배열


char arr_background[MAX_HEIGHT][MAX_WIDTH]{ ' ' };




} *p_game_data = (s_game_data*)malloc(sizeof(s_game_data));




// 초기화


void Init()


{

memcpy(p_game_data->arr_background, k_arr_background, sizeof(k_arr_background));

p_player->current_pos = g_default_pos;

}




// 배경화면 그리기

void Print_background()


{

for (int i = 0; i < MAX_HEIGHT; i++)

{

for (int j = 0; j < MAX_WIDTH; j++)

{

if (p_game_data->arr_background[i][j] == '1')

printf("■ ");


else

printf("□ ");


}

printf(" ");

}

}



// 움직일 수 있는 칸인지 확인


bool Check_block(e_direction _direction)


{

bool can_move = true;


if (_direction == DOWN) // 아래키면 아래 블럭이랑 비교

{

if (p_player->current_pos.y + 1 == 3)

can_move = false;

}

else if (_direction == UP) // 윗쪽키면 윗쪽 블럭이랑 비교

{

if (p_player->current_pos.y - 1 == -1)

can_move = false;

}

else if (_direction == LEFT) // 왼쪽키면 왼쪽 블럭이랑 비교

{

if (p_player->current_pos.x - 1 == -1)

can_move = false;

}

else // 오른쪽키면 오른쪽 블럭이랑 비교

{

if (p_player->current_pos.x + 1 == 3)

can_move = false;

}


return can_move; // 이동 가능


}


// 윗키


void Pressed_up()

{

if (!Check_block(UP))

return;


p_player->current_pos.y--;

}


// 아랫키


void Pressed_down()


{

if (!Check_block(DOWN))

return;


p_player->current_pos.y++;

}




// 왼쪽키


void Pressed_left()


{

if (!Check_block(LEFT))

return;


p_player->current_pos.x--;

}




// 오른쪽키


void Pressed_right()


{

if (!Check_block(RIGHT))

return;


p_player->current_pos.x++;

}




// 플레이어 키 입력받기


void Receive_input()


{


memcpy(p_game_data->arr_background, k_arr_background, sizeof(k_arr_background));




int key_value = _getch();




if (key_value != 0)


{


switch (key_value)


{


// 72 = 윗키


// 75 = 왼쪽키


// 77 = 오른쪽키


// 80 = 아랫쪽키




case 72: Pressed_up(); break;


case 75: Pressed_left(); break;


case 77: Pressed_right(); break;


case 80: Pressed_down(); break;


}


}

p_game_data->arr_background[p_player->current_pos.y][p_player->current_pos.x] = '0';

}




// 전체 화면 지우기


void Clear()


{


Sleep(100);


system("cls");


}




int main()


{


Init();




while (true)


{


Print_background();

Receive_input();

Clear();


}


}