728x90
반응형
캐릭터가 메이플스토리의 몬스터가 되어 이동하면서 서로 땅따먹기 게임을 하는 미니게임입니다.
미니게임판은 이런식으로 양 끝에서 2명~4명의 플레이어가 시작합니다.
WASD나 ←→↑↓로 이동합니다.
이런식으로 이동하면서, 이동한 칸에는 색깔을 입히게 됩니다.
주황버섯과 예티처럼 예티가 지나간 길을 주황버섯이 지나가게 되면 색깔이 주황버섯의 색깔로 변경됩니다.
최종적으로 가장 많이 먹은 캐릭터가 이깁니다.
ex) 소스코드
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int winner, max_eat_box;
int map[21][21];
bool visited[21][21];
vector<pair<int, int>> player(4);
int dx[] = { 1, 0, -1, 0 };
int dy[] = { 0, 1, 0, -1 };
int main()
{
vector<string> moves(4);
for (int i = 0; i < 4; i++) {
string move;
cin >> move;
moves.push_back(move);
}// 예시로 입력받은 움직임을 모두 저장
int size = 0;
for (int i = 0; i < moves.size(); i++) {
int size = moves[i].size();
size = max(size, size);
}// 예시로 가장 많이 이동한 캐릭터의 길이를 최대로 지정
for (int i = 0; i < size; i++) {
for (int j = 0; j < 4; j++) {
if (moves[j].size() < i) {
continue;
}// 예시로 주어진 문자열길이가 i보다 작으면 무시
move(moves[j][i], j);
}
}
bool same_winner = false;
for (int i = 0; i < 21; i++) {
for (int j = 0; j < 21; j++) {
if (!visited[i][j] && map[i][j]) {
int eat_box = bfs(i, j, map[i][j]);
if (max_eat_box < eat_box) {
max_eat_box = eat_box;
winner = map[i][j];
same_winner = false;
}
else if (max_eat_box == eat_box) {
same_winner = true;
}
}
}
}
if (same_winner) {
cout << "공동 우승";
}
else {
cout << winner;
}
}
int bfs(int x, int y, int num) {
queue<pair<int, int>> queue;
visited[x][y] = true;
queue.push({ x, y });
int sum = 0;
while (!queue.empty()) {
int nowx = queue.front().first;
int nowy = queue.front().second;
queue.pop();
sum++;
for (int i = 0; i < 4; i++) {
int nx = nowx + dx[i];
int ny = nowy + dy[i];
if (nx >= 0 && nx < 21 && ny >= 0 && ny < 21) {
if (!visited[nx][ny] && map[nx][ny] == num) {
queue.push({ nx, ny });
visited[nx][ny] = true;
}
}
}
}
return sum;
}
void move(char c, int idx) {
int x = player[idx].first;
int y = player[idx].second;
if (c == 'W' && x > 0) {
x--;
}
else if (c == 'S' && x < 20) {
x++;
}
else if (c == 'A' && y > 0) {
y--;
}
else if (c == 'D' && y < 20) {
y++;
}//범위랑 입력한 문자랑 해서 이동할 수 있으면 이동
if (map[x][y] != idx + 1) {
map[x][y] = idx + 1;
} // 이건 사용자 별로 나눔 1~4(핑크빈, 예티, 주황버섯, 슬라임)
player[idx] = {x, y};
}
728x90
반응형
'메이플스토리' 카테고리의 다른 글
제 1회 임스의 메이플컵 후기 (2) | 2023.09.09 |
---|---|
[백준] 임스의 메이플컵?! (0) | 2023.06.21 |
[CRP] 개선되었으면 하는 사항들(2023-03-29) (0) | 2023.02.23 |
[CRP] 조합 방탈출 (0) | 2023.02.09 |
댓글