[紀念用]白霧森林地圖略解
Dec 11, 2023 @ 9:25am2662
AchievementsMaps or LevelsTraditional Chinese
[1]地圖說明
[2]地鐵圖化的白霧森林地圖
浪費了好多心血重做了幾次的 地鐵圖化了的白霧森林地圖
為了方便理解,將整個地圖分成了4個主幹道,
其中最核心的區域為B區域,
玩家剛進入白霧森林時最快接觸到的則是A區域,
C區域則是在擊敗BOSS後深入探索才會循環。
箭頭從A指向B意味著可以從A到B
箭頭上的U\D\L\R等分別為Up、Down、Left、Right、UpsideRight等
當移動的方向跨區域時,不是直接連線過去導致圖變得更加複雜,而是通過顏色和前面的A/等表明去的區域和該區域的格子
(相對來說可能不太好用,因為這個圖中沒有指名路中會不會有阻攔格子)
目前這個圖的意義在於……幫助大家理解為什麼白霧森林會循環和如何記住白霧森林
即把雙向通行的主幹道給記住(畢竟只要到過最左下角這個地圖就失去意義了)
[3]草履蟲級別的C++導航代碼[其一]
這個想法本身來自於Philos大佬的
https://steamcommunity.com/sharedfiles/filedetails/?id=3107453931
最下方的给更聪明的TEVI
因為自己也不是吃代碼這口飯的,程序也是基本能跑就行,因此是草履蟲級別的
因為本身是打算也寫夢想之地的,但是好像已經沒那個必要了,所以放棄了沒問成,代碼結構其實也差不多,就是地圖轉換和地圖表要重寫
代碼用法大概就是輸入起點、輸入重點、輸入希望在多少步以內完成,然後等結果。
由於條條大路通羅馬(目的地),加之白霧森林共有75個格子(不算新加的傳送點),因此步數過多後似乎就會陷入很讓人頭大的循環狀態(不是出的結果超多就是一直等不出結果)。
原因主要是因為路上時不時會有路障,可能要炸開什麼的或者是路障會自己恢復,因此只列一條路說不定就列了一條死路了……所以全部路都列了出來。
具體代碼如下,可以隨便使用和修改(畢竟我也不打算修BUG了……還不如直接散去白霧後自己找來得快)
https://steamcommunity.com/sharedfiles/filedetails/?id=3107453931
最下方的给更聪明的TEVI
因為自己也不是吃代碼這口飯的,程序也是基本能跑就行,因此是草履蟲級別的
因為本身是打算也寫夢想之地的,但是好像已經沒那個必要了,所以放棄了沒問成,代碼結構其實也差不多,就是地圖轉換和地圖表要重寫
代碼用法大概就是輸入起點、輸入重點、輸入希望在多少步以內完成,然後等結果。
由於條條大路通羅馬(目的地),加之白霧森林共有75個格子(不算新加的傳送點),因此步數過多後似乎就會陷入很讓人頭大的循環狀態(不是出的結果超多就是一直等不出結果)。
原因主要是因為路上時不時會有路障,可能要炸開什麼的或者是路障會自己恢復,因此只列一條路說不定就列了一條死路了……所以全部路都列了出來。
具體代碼如下,可以隨便使用和修改(畢竟我也不打算修BUG了……還不如直接散去白霧後自己找來得快)
#include <iostream>
#include <stack>
using namespace std;
int map[77][2][8] = {
{{0,0,03,02,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 1
{{27,0,01,01,0,0,0,0},{1,0,0,0,0,0,0,0}}, //Coordinates 2
{{04,04,04,01,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 3
{{47,03,01,05,0,0,0,0},{4,0,0,0,0,0,0,0}}, //Coordinates 4
{{0,0,04,06,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 5
{{0,0,05,07,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 6
{{45,0,8,46,0,0,0,0},{4,0,0,0,0,0,0,0}}, //Coordinates 7
{{0,10,9,07,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 8
{{10,02,8,8,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 9
{{0,11,70,9,0,0,0,0},{0,0,2,0,0,0,0,0}}, //Coordinates 10
{{45,0,12,0,0,0,47,47},{5,0,0,0,0,0,0,0}}, //Coordinates 11
{{0,10,18,13,14,0,21,0},{0,0,0,0,0,0,1,0}}, //Coordinates 12
{{0,0,8,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 13
{{0,12,15,19,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 14
{{03,11,16,11,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 15
{{29,17,25,15,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 16
{{0,02,01,01,16,0,16,0},{0,0,0,0,0,0,0,0}}, //Coordinates 17
{{72,0,71,12,0,17,0,17},{2,0,2,0,0,2,0,0}}, //Coordinates 18
{{25,0,14,20,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 19
{{77,22,21,24,0,0,0,0},{1,0,0,0,0,0,0,0}}, //Coordinates 20
{{0,12,0,20,0,0,0,0},{1,0,0,0,0,0,0,0}}, //Coordinates 21
{{23,20,34,35,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 22
{{0,22,06,24,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 23
{{14,19,23,32,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 24
{{0,27,29,26,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 25
{{0,12,25,07,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 26
{{28,02,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 27
{{44,27,14,01,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 28
{{30,16,01,03,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 29
{{0,29,12,41,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 30
{{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 31 empty
{{0,45,19,33,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 32
{{0,50,18,49,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 33
{{0,37,36,22,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 34
{{65,0,20,48,0,51,0,51},{2,0,0,2,0,0,0,0}}, //Coordinates 35
{{0,37,38,34,0,0,0,0},{0,5,0,0,0,0,0,0}}, //Coordinates 36
{{0,38,0,38,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 37
{{37,39,37,36,0,0,0,0},{0,3,0,5,0,0,0,0}}, //Coordinates 38
{{38,0,40,34,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 39
{{20,57,12,34,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 40
{{0,28,0,8,42,42,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 41
{{0,0,0,0,43,12,43,43},{0,0,0,0,0,0,0,0}}, //Coordinates 42
{{0,0,0,0,42,42,42,0},{0,0,0,0,0,0,0,0}}, //Coordinates 43
{{0,28,48,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 44
{{32,07,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 45
{{0,0,0,0,11,11,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 46
{{0,04,11,44,11,0,0,0},{0,0,0,2,0,2,0,0}}, //Coordinates 47
{{67,63,66,22,0,0,0,0},{2,2,2,0,0,0,0,0}}, //Coordinates 48
{{0,0,19,73,0,0,0,0},{0,0,0,2,0,0,0,0}}, //Coordinates 49
{{33,0,17,52,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 50
{{0,0,54,52,35,0,35,0},{0,0,0,0,0,0,0,0}}, //Coordinates 51
{{0,0,50,53,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 52
{{0,0,51,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 53
{{56,0,59,55,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 54
{{0,0,50,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 55
{{0,0,0,14,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 56
{{17,58,0,59,0,0,0,0},{1,0,0,0,0,0,0,0}}, //Coordinates 57
{{57,0,28,61,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 58
{{0,19,60,54,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 59
{{24,65,22,16,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 60
{{59,62,58,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 61
{{34,0,63,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 62
{{48,0,0,64,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 63
{{0,0,63,22,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 64
{{60,35,0,0,0,0,0,0},{2,0,0,0,0,0,0,0}}, //Coordinates 65
{{0,0,35,48,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 66
{{15,48,69,0,0,0,0,0},{1,2,0,0,0,0,0,0}}, //Coordinates 67
{{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 68 empty
{{16,0,0,0,16,0,10,0},{0,0,0,0,0,0,0,0}}, //Coordinates 69
{{42,0,73,71,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 70
{{41,0,70,18,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 71
{{0,18,0,12,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 72
{{40,54,74,74,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 73
{{36,0,75,70,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 74
{{0,0,76,70,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 75
{{0,0,75,75,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 76
{{0,20,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}}, //Coordinates 77
};
//Sequence
int loopTimesA = 0;
//WayNumber
int loopTimesB = 0;
int CoordinateTransformationA(int Coordinate){
switch(Coordinate){
case 11 : return 76;case 21 : return 76;case 31 : return 75;
case 32 : return 43;case 33 : return 74;case 34 : return 36;
case 35 : return 5;case 41 : return 70;case 42 : return 42;
case 43 : return 62;case 44 : return 34;case 45 : return 6;
case 51 : return 71;case 52 : return 41;case 53 : return 62;
case 54 : return 22;case 55 : return 23;case 56 : return 56;
case 61 : return 51;case 62 : return 35;case 63 : return 65;
case 64 : return 60;case 65 : return 24;case 66 : return 14;
case 71 : return 53;case 72 : return 66;case 73 : return 69;
case 74 : return 16;case 75 : return 29;case 76 : return 30;
case 77 : return 11;case 81 : return 63;case 82 : return 48;
case 83 : return 67;case 84 : return 15;case 85 : return 3;
case 86 : return 4;case 87 : return 47;case 88 : return 46;
case 91 : return 64;case 92 : return 2;case 93 : return 27;
case 94 : return 28;case 95 : return 44;case 96 : return 39;
case 97 : return 38;case 98 : return 37;case 101 : return 17;
case 102 : return 18;case 103 : return 72;case 104 : return 58;
case 105 : return 57;case 106 : return 9;case 107 : return 10;
case 108 : return 1;case 111 : return 50;case 112 : return 33;
case 113 : return 12;case 114 : return 61;case 115 : return 59;
case 116 : return 8;case 117 : return 19;case 118 : return 25;
case 121 : return 52;case 122 : return 49;case 123 : return 12;
case 124 : return 21;case 125 : return 55;case 126 : return 13;
case 127 : return 19;case 128 : return 26;case 131 : return 54;
case 132 : return 73;case 133 : return 40;case 134 : return 20;
case 135 : return 77;case 136 : return 45;case 137 : return 32;
case 138 : return 7;
}
};
[3]草履蟲級別的C++導航代碼[其二]
int CoordinateTransformationB(int Coordinate){
switch(Coordinate){
case 1 : return 108;case 2 : return 92;case 3 : return 85;
case 4 : return 86;case 5 : return 35;case 6 : return 45;
case 7 : return 138;case 8 : return 116;case 9 : return 106;
case 10 : return 107;case 11 : return 77;case 12 : return 113;
case 13 : return 126;case 14 : return 66;case 15 : return 84;
case 16 : return 74;case 17 : return 101;case 18 : return 102;
case 19 : return 117;case 20 : return 134;case 21 : return 124;
case 22 : return 54;case 23 : return 55;case 24 : return 65;
case 25 : return 118;case 26 : return 128;case 27 : return 93;
case 28 : return 94;case 29 : return 75;case 30 : return 76;
case 32 : return 137;case 33 : return 112;case 34 : return 44;
case 35 : return 62;case 36 : return 34;case 37 : return 98;
case 38 : return 97;case 39 : return 96;case 40 : return 133;
case 41 : return 52;case 42 : return 42;case 43 : return 32;
case 44 : return 95;case 45 : return 136;case 46 : return 88;
case 47 : return 87;case 48 : return 82;case 49 : return 122;
case 50 : return 111;case 51 : return 61;case 52 : return 121;
case 53 : return 71;case 54 : return 131;case 55 : return 125;
case 56 : return 56;case 57 : return 105;case 58 : return 104;
case 59 : return 115;case 60 : return 64;case 61 : return 114;
case 62 : return 43;case 63 : return 81;case 64 : return 91;
case 65 : return 63;case 66 : return 72;case 67 : return 83;
case 68 : return 73;case 70 : return 41;case 71 : return 51;
case 72 : return 103;case 73 : return 132;case 74 : return 33;
case 75 : return 31;case 76 : return 11;case 77 : return 135;
}
};
class path{
public:
stack <int> way;
stack <int> direction;
stack <int> block;
void addCoordinates(int wayA,int directionA,int blockA){
way.push(wayA);
direction.push(directionA);
block.push(blockA);
};
void deleteCoordinates(){
way.pop();
direction.pop();
block.pop();
};
void readPath(int times){
stack <int> wayCache = way;
stack <int> directionCache = direction;
stack <int> blockCache = block;
if(wayCache.size() <= times){
while(wayCache.size() > 0){
if((wayCache.top() == 12) || (wayCache.top() == 19) || (wayCache.top() == 62) || (wayCache.top() == 76)){
switch(wayCache.top()){
case 12: cout << "113/123 << ";break;
case 19: cout << "117/127 << ";break;
case 62: cout << "43/53 << ";break;
case 76: cout << "11/21 <<";break;
}
}else{
cout << CoordinateTransformationB(wayCache.top()) << " << ";
}
wayCache.pop();
};
cout << "start" << endl << "finish";
while(directionCache.size() > 0){
switch(directionCache.top()){ //Up,Down,Left,Right,UpsideLeft,DownsideLeft,UpsideRight,UpsideLeft
case 1:cout << " << Up";break;
case 2:cout << " << Down";break;
case 3:cout << " << Left";break;
case 4:cout << " << Right";break;
case 5:cout << " << UpsideLeft";break;
case 6:cout << " << DownsideLeft";break;
case 7:cout << " << UpsideRight";break;
case 8:cout << " << UpsideLeft";break;
};
// cout << directionCache.top() << " << ";
directionCache.pop();
};
cout << endl;
while(blockCache.size() > 0){
switch(blockCache.top()){ //1 - 3 = block{outside,inside,hidden},4 - 5 can't pass
case 0:cout << "pass << ";break;
case 1:cout << "OutsideBlock << ";break;
case 2:cout << "InsideBlock << ";break;
case 3:cout << "HiddenBlock << ";break;
case 4:cout << "can't pass << ";break;
case 5:cout << "can't pass << ";break;
};
blockCache.pop();
};
cout << "start\n\n";
};
};
};
path pathA;
int wayLoop(int times,int start,int goal) {
int point = 0,flag = 0;
if(start == goal){
cout << "What?" << endl;
return 1;
};
for(int direction = 0; direction < 8; direction++){
if(map[start - 1][0][direction] != 0){
point = map[start - 1][0][direction];
stack <int> cache = pathA.way;
while(cache.size() > 0){
if(cache.top() == point){
flag = 1;
};
cache.pop();
}
if(flag == 0){
if(pathA.way.size() <= times){
pathA.addCoordinates(point,(direction + 1),map[start - 1][1][direction]);
if (pathA.way.top() != goal){
if(wayLoop(times,pathA.way.top(),goal) == 0){};
}else{
pathA.readPath(times);
pathA.deleteCoordinates();
};
}
}else if(flag == 1){
flag = 0;
};
};
};
//cout << "flag G\t";
pathA.deleteCoordinates();
return 0;
};
int main(int argc, char *argv[])
{
int start = 0,goal = 0,times = 0;
//input
cout << "input the starting point:";
cin >> start;
start = CoordinateTransformationA(start);
cout << "input the goal:";
cin >> goal;
goal = CoordinateTransformationA(goal);
cout << "input the move count you hope:";
cin >> times;
if(wayLoop(times,start,goal) == 0){};
cout << "waiting input to exit: ";
cin >> times;
return 0;
}