#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
#define DIFFICULTY 0.4 // 0~1 ·Î ³ôÀ»¼ö·Ï ¾î·Á¿ò
#define NUM_MONSTER 5
#define get_prob() rand()/(double) RAND_MAX
void CursorView()
{
CONSOLE_CURSOR_INFO cursorInfo = { 0, };
cursorInfo.dwSize = 1; //Ä¿¼ ±½±â (1 ~ 100)
cursorInfo.bVisible = FALSE; //Ä¿¼ Visible TRUE(º¸ÀÓ) FALSE(¼û±è)
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo);
}
void move_monster(int xpos, int ypos, int* xpos_m, int* ypos_m)
{
if (get_prob() < DIFFICULTY) { // monster
if (get_prob() < get_prob()) { // ¹«ÀÛÀ§ À̵¿
if (get_prob() < 0.5) {
if (get_prob() < 0.5) {
if (*xpos_m <= 8) (*xpos_m)++;
}
else {
if (*xpos_m >= 1) (*xpos_m)--;
}
}
else {
if (get_prob() < 0.5) {
if (*ypos_m <= 8) (*ypos_m)++;
}
else {
if (*ypos_m >= 1) (*ypos_m)--;
}
}
}
else { // ij¸¯ÅÍ µû¶ó°¨
*xpos_m = *xpos_m > xpos ? --(*xpos_m) : *xpos_m < xpos ? ++(*xpos_m) : *xpos_m;
*ypos_m = *ypos_m > ypos ? --(*ypos_m) : *ypos_m < ypos ? ++(*ypos_m) : *ypos_m;
}
}
}
int main(void)
{
char board[10][10];
int xpos = 1, ypos = 1;
int xpos_m[NUM_MONSTER], ypos_m[NUM_MONSTER];
int xpos_g = 9, ypos_g = 9;
int score = 0;
int num = 0, ch=0, flag=0;
CursorView();
srand(time(NULL));
// º¸µå¸¦ ÃʱâÈÇÑ´Ù.
for (int y = 0; y < 10; y++)
for (int x = 0; x < 10; x++) board[y][x] = '.';
for (int i = 0; i < NUM_MONSTER; i++) {
xpos_m[i] = rand() % 10;
ypos_m[i] = rand() % 10;
}
board[ypos][xpos] = '#';
board[ypos_g][xpos_g] = 'G';
for (int i = 0; i < NUM_MONSTER; i++) {
board[ypos_m[i]][xpos_m[i]] = 'M';
}
printf("¿ÞÂÊÀ̵¿:a, ¿À¸¥ÂÊ À̵¿:d À§ÂÊ À̵¿:w, ¾Æ·¡ÂÊ À̵¿:s\n");
// »ç¿ëÀڷκÎÅÍ À§Ä¡¸¦ ¹Þ¾Æ¼ º¸µå¿¡ Ç¥½ÃÇÑ´Ù.
while (1) {
system("cls");
printf("¿ÞÂÊÀ̵¿:a, ¿À¸¥ÂÊ À̵¿:d À§ÂÊ À̵¿:w, ¾Æ·¡ÂÊ À̵¿:s (%d)\n", num++);
for (int y = 0; y < 10; y++) {
for (int x = 0; x < 10; x++) printf("%c", board[y][x]);
printf("\n");
}
for (int i = 0 ; i < NUM_MONSTER; i++) {
if (ypos == ypos_m[i] && xpos == xpos_m[i]) {
printf("ij¸¯ÅÍ Á×À½ (Á¡¼ö:%d)", score);
flag = 1;
break;
}
}
if (flag == 1) break;
if (ypos == ypos_g && xpos == xpos_g) {
printf("°ÔÀÓÁ¾·á (Á¡¼ö:%d)", score);
break;
}
board[ypos][xpos] = '.';
for (int i = 0; i < NUM_MONSTER; i++) {
board[ypos_m[i]][xpos_m[i]] = '.';
}
if (_kbhit() == 1) {
ch = _getch();
//if (ch == 0) ch = _getch(); // Çѹø ÀÔ·ÂÇصµ µÎ¹ø° 0ÀÌ ¶Ç ÀԷµǴ ¹®Á¦ ÇØ°á
if (ch == 'a') { if (xpos >= 1) xpos--; }
else if (ch == 's') { if (ypos <= 8) ypos++; }
else if (ch == 'w') { if (ypos >= 1) ypos--; }
else if (ch == 'd') { if (xpos <= 8) xpos++; }
}
for (int i = 0; i < NUM_MONSTER; i++) {
move_monster(xpos, ypos, &xpos_m[i], &ypos_m[i]);
}
board[ypos][xpos] = '#';
for (int i = 0; i < NUM_MONSTER; i++) {
board[ypos_m[i]][xpos_m[i]] = 'M';
}
board[ypos_g][xpos_g] = 'G';
score++;
Sleep(200);
}
return 0;
}