#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#define MAP_SIZE_X 20
#define MAP_SIZE_Y 20
#define NUM_WALLS 0
#define NUM_ROOMS 8
#define MAX_ROOM_SIZE 6
#define MIN_ROOM_SIZE 4
typedef struct {
int x;
int y;
} Position;
typedef struct {
int width;
int height;
Position position;
} Room;
typedef struct {
char symbol;
Position position;
} Entity;
typedef struct {
char map[MAP_SIZE_X][MAP_SIZE_Y];
Entity player;
Entity enemy;
Position stairs;
Position walls[NUM_WALLS];
Room rooms[NUM_ROOMS];
int currentFloor;
} Game;
void initializeGame(Game* game) {
// 맵 초기화
for (int x = 0; x < MAP_SIZE_X; x++) {
for (int y = 0; y < MAP_SIZE_Y; y++) {
if (x == 0 || y == 0 || x == MAP_SIZE_X - 1 || y == MAP_SIZE_Y - 1) {
game->map[x][y] = '#';
}
else {
game->map[x][y] = '.';
}
}
}
// 방 초기화
srand(time(NULL));
for (int i = 0; i < NUM_ROOMS; i++) {
int roomWidth = rand() % (MAX_ROOM_SIZE - MIN_ROOM_SIZE + 1) + MIN_ROOM_SIZE;
int roomHeight = rand() % (MAX_ROOM_SIZE - MIN_ROOM_SIZE + 1) + MIN_ROOM_SIZE;
int roomX = rand() % (MAP_SIZE_X - roomWidth - 2) + 1;
int roomY = rand() % (MAP_SIZE_Y - roomHeight - 2) + 1;
game->rooms[i].width = roomWidth;
game->rooms[i].height = roomHeight;
game->rooms[i].position.x = roomX;
game->rooms[i].position.y = roomY;
// 방 내부를 '.'으로 채우기
for (int x = roomX; x < roomX + roomWidth; x++) {
for (int y = roomY; y < roomY + roomHeight; y++) {
game->map[x][y] = '.';
}
}
}
// 플레이어 초기화
game->player.symbol = '@';
game->player.position.x = game->rooms[0].position.x + game->rooms[0].width / 2;
game->player.position.y = game->rooms[0].position.y + game->rooms[0].height / 2;
game->map[game->player.position.x][game->player.position.y] = game->player.symbol;
// 적 초기화
game->enemy.symbol = rand() % 9 + 1 + '0'; // 1부터 9까지 랜덤한 숫자로 적의 텍스트 지정
game->enemy.position.x = game->rooms[NUM_ROOMS - 1].position.x + game->rooms[NUM_ROOMS - 1].width / 2;
game->enemy.position.y = game->rooms[NUM_ROOMS - 1].position.y + game->rooms[NUM_ROOMS - 1].height / 2;
game->map[game->enemy.position.x][game->enemy.position.y] = game->enemy.symbol;
// 계단 초기화
int randomRoomIndex = rand() % NUM_ROOMS;
int randomX = rand() % (game->rooms[randomRoomIndex].width - 2) + game->rooms[randomRoomIndex].position.x + 1;
int randomY = rand() % (game->rooms[randomRoomIndex].height - 2) + game->rooms[randomRoomIndex].position.y + 1;
game->stairs.x = randomX;
game->stairs.y = randomY;
game->map[randomX][randomY] = '>';
// 현재 층 초기화
game->currentFloor = 1;
}
void printMap(Game* game) {
printf("Current Floor: %d\n", game->currentFloor);
for (int y = 0; y < MAP_SIZE_Y; y++) {
for (int x = 0; x < MAP_SIZE_X; x++) {
printf("%c ", game->map[x][y]);
}
printf("\n");
}
}
void movePlayer(Game* game, int dx, int dy) {
// 이동할 위치 계산
int new_x = game->player.position.x + dx;
int new_y = game->player.position.y + dy;
// 이동 가능한지 체크
if (game->map[new_x][new_y] != '#') {
// 플레이어 이동
game->map[game->player.position.x][game->player.position.y] = '.';
game->player.position.x = new_x;
game->player.position.y = new_y;
// 계단에 도착했는지 체크
if (new_x == game->stairs.x && new_y == game->stairs.y) {
game->currentFloor++;
initializeGame(game);
return;
}
game->map[game->player.position.x][game->player.position.y] = game->player.symbol;
}
}
void displayInventory() {
printf("인벤토리\n");
printf("아이템 1\n");
printf("아이템 2\n");
printf("아이템 3\n");
}
void displayPlayerInfo() {
printf("내 정보\n");
printf("레벨: 10\n");
printf("체력: 100/100\n");
printf("공격력: 50\n");
printf("방어력: 30\n");
}
void displayOpeningScreen() {
printf("=== 게임 오프닝 화면 ===\n");
printf("게임을 시작하려면 아무 키나 누르세요.\n");
getch();
}
int main() {
displayOpeningScreen();
Game game;
initializeGame(&game);
while (1) {
printMap(&game);
// 플레이어 입력 받기
char input = getch();
// 종료 조건 확인
if (input == 'Q' || input == 'q') {
break;
}
else if (input == 'E' || input == 'e') {
displayInventory();
displayPlayerInfo();
}
// 플레이어 이동 처리
switch (input) {
case 'W':
case 'w':
movePlayer(&game, 0, -1);
break;
case 'A':
case 'a':
movePlayer(&game, -1, 0);
break;
case 'S':
case 's':
movePlayer(&game, 0, 1);
break;
case 'D':
case 'd':
movePlayer(&game, 1, 0);
break;
default:
printf("잘못된 입력입니다.\n");
break;
}
}
return 0;
}
ai가 틀 짜준거 수정중...
피드백 받음