하얀색 칸이 플레이어라고 치면
두더지랑 적당히 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();
}
}
형 괴물이야 ?
그리드 3x3 배열과 두더지 3x3 배열이 필요할텐데 스페이스바 누르면 그리드 말고 두더지 배열이랑 비교해주면 될듯
반쪽 짜리니까 나머지는 너 생각대로~
근데 window.h는 맥에서는 어떡해 ?
virtualbox 가상 윈도우같은거 써야할듯 싶은데
그런거 안쓰면 불가능한거구나
찾아봤는데 그런거같아
근데 이 두더지게임 코드들 보면 다 window.h가 들어가던데 이유가 뭐야 ? ? ?
맥북 써서..
POINT라던가 gdi mfc 쓸 때 라이브러리에 있는 함수들을 사용하고자 할 때 쓰는거라 윈도우 전용 프로그램들은 디폴트로 있다고 보면됨
윈트북로 갈아탈까 ..? 진지하게
아니 어차피 언리얼이나 유니티 쓰면 같은거 써서 상관없음 지금만 좀 고생만 하면돼
그 니 교수도 마찬가지로 윈도우 쓸텐데 거기에 맞게끔 해주는게 낫겠지
고맙당 ㅜ
와 이걸 다해주네