diff --git a/pokemonGUI/pokemonGUI/Cordinate.h b/pokemonGUI/pokemonGUI/Cordinate.h index a99fecd..4d631ba 100644 --- a/pokemonGUI/pokemonGUI/Cordinate.h +++ b/pokemonGUI/pokemonGUI/Cordinate.h @@ -4,17 +4,20 @@ #include #include #include +#define X_MAX 1000 +#define X_STEP 20 +#define Y_MAX 500 +#define Y_STEP 20 + struct Node { - //properties of all class properties int y; int x; int parentX; int parentY; - float gCost - , hCost; // distance from starting node, distance from end cost and total cost + float gCost; + float hCost; float fCost; - }; inline bool operator < (const Node& lhs, const Node& rhs) @@ -28,9 +31,9 @@ public: static bool isValid(int x, int y) { //If our Node is an obstacle it is not valid - int id = x + y * (1000 / 20); + int id = x + y * (X_MAX / X_STEP); if (world.obstacles.count(id) == 0) { - if (x < 0 || y < 0 || x >= 50 || y >= 25) { + if (x < 0 || y < 0 || x >= (X_MAX / X_STEP) || y >= (Y_MAX / Y_STEP)) { return false; } return true; @@ -51,7 +54,7 @@ public: return H; } - static vector makePath(array,50> map, Node dest) { + static vector makePath(array, (X_MAX / X_STEP)> map, Node dest) { try { cout << "Found a path" << endl; int x = dest.x; @@ -59,10 +62,9 @@ public: stack path; vector usablePath; - while (!(map[x][y].parentX == x && map[x][y].parentY == y) - && map[x][y].x != -1 && map[x][y].y != -1) { - + && map[x][y].x != -1 && map[x][y].y != -1) + { path.push(map[x][y]); int tempX = map[x][y].parentX; int tempY = map[x][y].parentY; @@ -70,7 +72,6 @@ public: y = tempY; } - path.push(map[x][y]); while (!path.empty()) { @@ -99,13 +100,13 @@ public: return empty; //You clicked on yourself } - bool closedList[50][25]; + bool closedList[(X_MAX / X_STEP)][(Y_MAX / Y_STEP)]; //Initialize whole map //Node allMap[50][25]; - array,50> allMap; - for (int x = 0; x < 50; x++) { - for (int y = 0; y < 25; y++) { + array, (X_MAX / X_STEP)> allMap; + for (int x = 0; x < (X_MAX / X_STEP); x++) { + for (int y = 0; y < (Y_MAX / Y_STEP); y++) { allMap[x][y].fCost = FLT_MAX; allMap[x][y].gCost = FLT_MAX; allMap[x][y].hCost = FLT_MAX; @@ -127,17 +128,18 @@ public: allMap[x][y].parentX = x; allMap[x][y].parentY = y; - vector openList; - + vector openList; openList.emplace_back(allMap[x][y]); bool destinationFound = false; - while (!openList.empty()&&openList.size()<1250) { + while (!openList.empty()&&openList.size()<(X_MAX / X_STEP)*(Y_MAX / Y_STEP)) { Node node; do { - if (openList.empty()) { - break; - } + //This do-while loop could be replaced with extracting the first + //element from a set, but you'd have to make the openList a set. + //To be completely honest, I don't remember the reason why I do + //it with a vector, but for now it's still an option, although + //not as good as a set performance wise. float temp = FLT_MAX; vector::iterator itNode; for (vector::iterator it = openList.begin(); @@ -152,59 +154,49 @@ public: openList.erase(itNode); } while (isValid(node.x, node.y) == false); - - x = node.x; y = node.y; closedList[x][y] = true; - + //For each neighbour starting from North-West to South-East for (int newX = -1; newX <= 1; newX++) { for (int newY = -1; newY <= 1; newY++) { double gNew, hNew, fNew; if (isValid(x + newX, y + newY)) { if (isDestination(x + newX, y + newY, dest)) { + //Destination found - make path allMap[x + newX][y + newY].parentX = x; allMap[x + newX][y + newY].parentY = y; - destinationFound = true; return makePath(allMap, dest); - } else if (closedList[x + newX][y + newY] == false) { gNew = node.gCost + 1.0; hNew = calculateH(x + newX, y + newY, dest); fNew = gNew + hNew; - // Check if this path is better than the one already present if (allMap[x + newX][y + newY].fCost == FLT_MAX || allMap[x + newX][y + newY].fCost > fNew) { - // Update the details of this cell + // Update the details of this neighbour node allMap[x + newX][y + newY].fCost = fNew; allMap[x + newX][y + newY].gCost = gNew; allMap[x + newX][y + newY].hCost = hNew; allMap[x + newX][y + newY].parentX = x; allMap[x + newX][y + newY].parentY = y; openList.emplace_back(allMap[x + newX][y + newY]); - } } } } } - - - } if (destinationFound == false) { cout << "Destination not found" << endl; return empty; - } - } }; #endif \ No newline at end of file diff --git a/pokemonGUI/pokemonGUI/Maps/astar.txt b/pokemonGUI/pokemonGUI/Maps/astar.txt new file mode 100644 index 0000000..9b1c932 --- /dev/null +++ b/pokemonGUI/pokemonGUI/Maps/astar.txt @@ -0,0 +1,625 @@ +0 black +1 black +2 black +3 black +4 black +5 black +6 black +7 black +8 black +9 black +10 black +11 black +12 black +13 black +14 black +15 black +16 black +17 black +18 black +19 black +20 black +21 black +22 black +23 black +24 black +25 black +26 black +27 black +28 black +29 black +30 black +31 black +32 black +33 black +34 black +35 black +36 black +37 black +38 black +39 black +40 black +41 black +42 black +43 black +44 black +45 black +46 black +47 black +48 black +49 black +50 black +51 black +52 blue +53 blue +54 blue +55 black +63 black +66 black +98 black +99 black +100 black +101 black +102 blue +103 blue +104 blue +105 black +109 black +113 black +116 black +120 black +121 black +122 black +123 black +124 black +125 black +126 black +127 black +128 black +129 black +130 black +131 black +132 black +133 black +134 black +135 black +136 black +137 black +138 black +139 black +140 black +141 black +142 black +143 black +144 black +145 black +147 black +148 black +149 black +150 black +151 black +152 black +153 black +154 black +155 black +159 black +163 black +170 black +198 black +199 black +200 black +201 black +209 black +213 black +220 black +221 black +222 black +223 black +224 black +225 black +227 black +228 black +229 black +230 black +231 black +232 black +233 black +234 black +235 black +236 black +237 black +238 black +239 black +240 black +241 black +242 black +243 black +244 black +245 black +246 black +247 black +248 black +249 black +250 black +251 black +259 black +263 black +266 black +270 black +298 black +299 black +300 black +301 black +309 black +313 black +316 black +320 black +321 black +322 black +323 black +324 black +325 black +326 black +327 black +328 black +329 black +330 black +332 black +333 black +334 black +335 black +336 black +337 black +338 black +339 black +340 black +341 black +342 black +344 black +345 black +346 black +347 black +348 black +349 black +350 black +351 black +353 black +354 black +355 black +356 black +357 black +358 black +359 black +366 black +370 black +398 black +399 black +400 black +401 black +416 black +420 black +421 black +422 black +423 black +424 black +425 black +426 black +427 black +428 black +429 black +430 black +431 black +432 black +433 black +434 black +435 black +436 black +437 black +438 black +439 black +440 black +441 black +442 black +443 black +444 black +445 black +446 black +448 black +449 black +450 black +451 black +460 black +461 black +462 black +463 black +464 black +465 black +466 black +467 black +470 black +498 black +499 black +500 black +501 black +502 black +503 black +504 black +505 black +506 black +507 black +510 black +517 black +518 black +519 black +520 black +521 black +522 black +523 black +524 black +525 black +526 black +527 black +528 black +529 black +530 black +531 black +532 black +533 black +534 black +535 black +536 black +537 black +538 black +539 black +540 black +541 black +542 black +543 black +545 black +546 black +547 black +548 black +549 black +550 black +551 black +560 black +563 black +567 black +578 black +588 black +592 black +597 black +598 black +599 black +600 black +601 black +610 black +612 black +613 black +617 black +618 black +619 black +628 black +630 black +631 black +632 black +633 black +634 black +635 black +638 black +640 black +642 black +644 black +645 black +647 black +648 black +649 black +650 black +651 black +652 black +653 black +654 black +656 black +657 black +658 black +659 black +660 black +669 black +670 black +671 black +672 black +673 black +674 black +675 black +676 black +678 black +679 black +680 black +688 black +690 black +692 black +695 black +697 black +698 black +699 black +700 black +701 black +710 black +719 black +726 black +728 black +730 black +732 black +733 black +734 black +735 black +736 black +738 black +740 black +745 black +748 black +749 black +750 black +751 black +755 black +756 black +757 black +758 black +759 black +760 black +761 black +762 black +763 black +769 black +771 black +772 black +773 black +774 black +776 black +778 black +786 black +788 black +789 black +790 black +791 black +792 black +793 black +795 black +796 black +797 black +798 black +799 black +800 black +801 black +803 black +805 black +819 black +822 black +824 black +826 black +828 black +830 black +831 black +832 black +833 black +834 black +836 black +838 black +848 black +849 black +850 black +851 black +853 black +855 black +869 black +870 black +871 black +872 black +874 black +876 black +878 black +880 black +884 black +886 black +888 black +890 black +891 black +892 black +893 black +894 black +895 black +896 black +898 black +899 black +900 black +901 black +903 black +905 black +906 black +907 black +908 black +909 black +910 black +911 black +912 black +913 black +914 black +915 black +916 black +917 black +924 black +926 black +928 black +930 black +931 black +932 black +934 black +936 black +938 black +944 black +948 black +949 black +950 black +951 black +953 black +974 black +976 black +978 black +980 black +982 black +984 black +986 black +988 black +989 black +990 black +991 black +992 black +994 black +995 black +996 black +998 black +999 black +1000 black +1001 black +1003 black +1006 black +1007 black +1008 black +1009 black +1010 black +1011 black +1012 black +1013 black +1014 black +1015 black +1016 black +1017 black +1018 black +1019 black +1020 black +1021 black +1022 black +1023 black +1024 black +1026 black +1028 black +1030 black +1032 black +1034 black +1036 black +1042 black +1043 black +1044 black +1048 black +1049 black +1050 black +1051 black +1053 black +1076 black +1082 black +1086 black +1088 black +1089 black +1090 black +1096 black +1098 black +1099 black +1100 black +1101 black +1103 black +1104 black +1105 black +1106 black +1107 black +1108 black +1109 black +1110 black +1111 black +1112 black +1113 black +1114 black +1115 black +1116 black +1117 black +1118 black +1119 black +1120 black +1121 black +1122 black +1123 black +1124 black +1125 black +1126 black +1128 black +1129 black +1130 black +1131 black +1132 black +1134 black +1135 black +1136 black +1138 black +1140 black +1141 black +1142 black +1143 black +1144 black +1145 black +1146 black +1148 black +1149 black +1150 black +1151 black +1188 black +1198 black +1199 black +1200 black +1201 black +1202 black +1203 black +1204 black +1205 black +1206 black +1207 black +1208 black +1209 black +1210 black +1211 black +1212 black +1213 black +1214 black +1215 black +1216 black +1217 black +1218 black +1219 black +1220 black +1221 black +1222 black +1223 black +1224 black +1225 black +1226 black +1227 black +1228 black +1229 black +1230 black +1231 black +1232 black +1233 black +1234 black +1235 black +1236 black +1237 black +1238 black +1239 black +1240 black +1241 black +1242 black +1243 black +1244 black +1245 black +1246 black +1247 black +1248 black +1249 black diff --git a/pokemonGUI/pokemonGUI/Player.cpp b/pokemonGUI/pokemonGUI/Player.cpp index 10a747a..6b46280 100644 --- a/pokemonGUI/pokemonGUI/Player.cpp +++ b/pokemonGUI/pokemonGUI/Player.cpp @@ -37,6 +37,7 @@ Player::Player(string name, Pokemon pokemon, int money, int healthPotions, int s this->y = y; } + int Player::savePlayer() { //Saves player in SQL database //and returns ID for the save @@ -73,10 +74,9 @@ int Player::savePlayer() { //Get data from our querry int PlayerFK = sqlite3_column_int(statement, 0); //Reset our statement - sqlite3_finalize(statement); - sqlite3_close(db); + sqlite3_reset(statement); + - sqlite3_open(DB, &db); querry = "INSERT INTO PlayerStats(PokemonID, PosX, PosY, Money, HealthPotions, StaminaPotions, Score, PlayerFK) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; ok = sqlite3_prepare(db, querry.c_str(), querry.size() + 1, &statement, nullptr); //We prepare our statement if (ok != SQLITE_OK) { @@ -168,10 +168,9 @@ void Player::loadPlayer(int PlayerID) { sqlite3_bind_text(statement, 1, name.c_str(), name.size(), NULL); sqlite3_step(statement); PlayerID = sqlite3_column_int(statement, 0); - sqlite3_finalize(statement); - sqlite3_close(db); + sqlite3_reset(statement); } - sqlite3_open(DB, &db); + querry = "SELECT * FROM PlayerStats WHERE PlayerFK = ?"; sqlite3_prepare(db, querry.c_str(), querry.size() + 1, &statement, nullptr); sqlite3_bind_int(statement, 1, PlayerID); diff --git a/pokemonGUI/pokemonGUI/Pokemon.sqlite b/pokemonGUI/pokemonGUI/Pokemon.sqlite index 381611f..d107a61 100644 Binary files a/pokemonGUI/pokemonGUI/Pokemon.sqlite and b/pokemonGUI/pokemonGUI/Pokemon.sqlite differ diff --git a/pokemonGUI/pokemonGUI/frmAdventrureMap.h b/pokemonGUI/pokemonGUI/frmAdventrureMap.h index 5687eff..fa3fb3e 100644 --- a/pokemonGUI/pokemonGUI/frmAdventrureMap.h +++ b/pokemonGUI/pokemonGUI/frmAdventrureMap.h @@ -36,10 +36,6 @@ namespace pokemonGUI { bool mapMaking = false; Graphics ^ graphics; //Using these to draw on our panel System::Windows::Forms::MouseEventArgs^ mouse; - int X_MAX = 1000; - int X_STEP = 20; - int Y_MAX = 500; - int Y_STEP = 20; Color color = Color::Black; int characterX = game.getPlayer().getX(); int characterY = game.getPlayer().getY(); @@ -403,31 +399,36 @@ namespace pokemonGUI { //Also Enables new buttons specifically made for world design //After the first press, works as a "New Map" button - pictureCharacter->Location = Point(characterX, characterY); - world.blocks.clear(); - graphics = Graphics::FromImage(pbMap->Image); - drawGrid(); - mapMaking = true; - btnLoadMap->Visible = true; - btnSaveMap->Visible = true; - if (textBoxWorldName->Text == "") { - //Do not enable Load and Save buttons if world name is not specified - btnLoadMap->Enabled = false; - btnSaveMap->Enabled = false; + if (mapMaking) { + world.blocks.clear(); + removeEnemies(); + graphics->Clear(Color::White); + drawGrid(); + } + else { + + mapMaking = true; + btnLoadMap->Visible = true; + btnSaveMap->Visible = true; + if (textBoxWorldName->Text == "") { + //Do not enable Load and Save buttons if world name is not specified + btnLoadMap->Enabled = false; + btnSaveMap->Enabled = false; + } + btnStopMapMaking->Visible = true; + textBoxWorldName->Visible = true; + btnBack->Visible = false; + label1->Visible = true; + label2->Visible = true; + label3->Visible = true; + label4->Visible = true; + label5->Visible = true; + panelWall->Visible = true; + panelWater->Visible = true; + panelMoney->Visible = true; + panelMoney->BackColor = Color::Gold; + btnMapMaker->Text = "New Map"; } - btnStopMapMaking->Visible = true; - textBoxWorldName->Visible = true; - btnBack->Visible = false; - label1->Visible = true; - label2->Visible = true; - label3->Visible = true; - label4->Visible = true; - label5->Visible = true; - panelWall->Visible = true; - panelWater->Visible = true; - panelMoney->Visible = true; - panelMoney->BackColor = Color::Gold; - btnMapMaker->Text = "New Map"; } @@ -527,7 +528,8 @@ namespace pokemonGUI { private: System::Void btnLoadMap_Click(System::Object^ sender, System::EventArgs^ e) { //Since we are manually loading map we disable the automatic map update automatic = false; - loadEnemies(&world); + removeEnemies(); + //loadEnemies(&world); loadMap(&world); automatic = true; } diff --git a/pokemonGUI/pokemonGUI/frmLogin.h b/pokemonGUI/pokemonGUI/frmLogin.h index f6f0867..aa0653f 100644 --- a/pokemonGUI/pokemonGUI/frmLogin.h +++ b/pokemonGUI/pokemonGUI/frmLogin.h @@ -180,6 +180,8 @@ namespace pokemonGUI { this->Controls->Add(this->label1); this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedSingle; this->Margin = System::Windows::Forms::Padding(3, 2, 3, 2); + this->MaximizeBox = false; + this->MinimizeBox = false; this->Name = L"frmLogin"; this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; this->Text = L"Login";