diff --git a/Classes/PlayScene.cpp b/Classes/PlayScene.cpp index 3ca7336..fed3958 100644 --- a/Classes/PlayScene.cpp +++ b/Classes/PlayScene.cpp @@ -9,10 +9,13 @@ #include "PlayScene.h" #include "WinScene.h" #include "GameManager.h" +#include "SimpleAI.h" USING_NS_CC; USING_NS_CC_EXT; +std::vector PlayScene::tileInfoVector; + CCScene* PlayScene::scene() { // 'scene' is an autorelease object @@ -117,7 +120,9 @@ void PlayScene::makeMapScroll() tileInfo->setGID(PAIR_FUNC(i, j)); CCLog("gid %d", PAIR_FUNC(i, j)); tileInfoVector.push_back(tileInfo); - + tileInfo->setGridX(i); + tileInfo->setGridY(j); + if (j > 0 && mapLayer->tileAt(ccp(i, j-1))) { tileInfo->setGIDTileUp(PAIR_FUNC(i, j-1)); @@ -362,6 +367,13 @@ void PlayScene::chooseEdgeEnded(cocos2d::CCObject *pSender) } } tileInfo->setNumberEdgeAvailale(tileInfo->getNumberEdgeAvailale()-1); + + //Run Simple AI if needed +// if(tileInfo->getNumberEdgeAvailale() == 0) +// { +// SimpleAI::Breath_First_Search(tileInfo->getGridX(), tileInfo->getGridY()); +// } + CCLog("tileInfo->getNumberEdgeAvailale() = %d", tileInfo->getNumberEdgeAvailale()); // if (tileInfo->getNumberEdgeAvailale() == 0) @@ -444,7 +456,50 @@ void PlayScene::update(float pdT) { if (tileInfoVector.at(i)->getNumberEdgeAvailale() == 0) { + tileInfoVector.at(i)->setNumberEdgeAvailale(-1); tileInfoVector.at(i)->getTile()->setColor(ccGRAY); + SimpleAI::Breath_First_Search(tileInfoVector.at(i)->getGridX(), tileInfoVector.at(i)->getGridY()); + break; } } + + for (int i=0; igetNumberEdgeAvailale() == 0) + { + //Bottom + CCSprite *edge1 = CCSprite::create("PlayScene/edge.png"); + + TileInfo *tileInfo = tileInfoVector.at(i); + + CCSprite *sp = tileInfo->getTile(); + + edge1->setPosition(ccp(sp->getPositionX() + sp->getContentSize().width/2, sp->getPositionY())); + tileMap->addChild(edge1, GR_FOREGROUND); + //Top + CCSprite *edge2 = CCSprite::create("PlayScene/edge.png"); + edge2->setPosition(ccp(sp->getPositionX() + sp->getContentSize().width/2, sp->getPositionY()+sp->getContentSize().height)); + tileMap->addChild(edge2, GR_FOREGROUND); + //Left + CCSprite *edge3 = CCSprite::create("PlayScene/edge.png"); + edge3->setRotation(90); + edge3->setPosition(ccp(sp->getPositionX(), sp->getPositionY()+sp->getContentSize().height/2)); + tileMap->addChild(edge3, GR_FOREGROUND); + //Right + CCSprite *edge4 = CCSprite::create("PlayScene/edge.png"); + edge4->setRotation(90); + edge4->setPosition(ccp(sp->getPositionX() + sp->getContentSize().width, sp->getPositionY()+sp->getContentSize().height/2)); + tileMap->addChild(edge4, GR_FOREGROUND); + } + } +} + +CCTMXTiledMap PlayScene::getTileMap() +{ + return *tileMap; +} + +std::vector PlayScene::getTileInfoVector() +{ + return tileInfoVector; } diff --git a/Classes/PlayScene.h b/Classes/PlayScene.h index 7965f87..523a1b3 100644 --- a/Classes/PlayScene.h +++ b/Classes/PlayScene.h @@ -28,7 +28,6 @@ class PlayScene : public cocos2d::CCLayer CCPoint beginLocation; CCPoint beginLocationToMap; // beginLocation in tilemap co-ordinate - CCTMXTiledMap *tileMap; CCTMXLayer *mapLayer; CCTMXObjectGroup *mTileEdges; bool mIsScrolling = false; @@ -38,7 +37,6 @@ class PlayScene : public cocos2d::CCLayer cocos2d::CCArray *mEdgeArrRight; cocos2d::CCArray *popsArr; - std::vector tileInfoVector; int curTile = 0; int numPop = NUMBER_EDGE_AVAILABLE; @@ -48,6 +46,9 @@ class PlayScene : public cocos2d::CCLayer static cocos2d::CCScene* scene(); ~PlayScene(); + static std::vector tileInfoVector; + CCTMXTiledMap *tileMap; + void addPauseButton(); void addPlayGroud(); void addPLayerOne(); @@ -55,6 +56,16 @@ class PlayScene : public cocos2d::CCLayer void addScoreLbn(); void addFrameImg(); + void tileUpdate(int pSender); + + static std::vector getTileInfoVector(); + + static void addToTiledMap(cocos2d::CCSprite *pSender); + + CCTMXTiledMap getTileMap(); +// CC_SYNTHESIZE_READONLY(std::vector, tileInfoVector, TileInfoVector); +// CC_SYNTHESIZE_PASS_BY_REF(std::vector, tileInfoVector, TileInfoVector); + void makeMapScroll(); void pauseButtonTouched(); void moveMap(float offsetX, float offsetY); diff --git a/Classes/SimpleAI.cpp b/Classes/SimpleAI.cpp new file mode 100644 index 0000000..445e5a8 --- /dev/null +++ b/Classes/SimpleAI.cpp @@ -0,0 +1,175 @@ +// +// SimpleAI.cpp +// landlord +// +// Created by HaLink on 3/12/14. +// +// + +#include "SimpleAI.h" +#include "PlayScene.h" + +int SimpleAI::qfirst = 0; +int SimpleAI::qlast = 0; +std::vector SimpleAI::queue; +std::vector SimpleAI::tileAccepted; +std::vector SimpleAI::tileArr; + +void SimpleAI::initQueue() +{ + qfirst = 0; + qlast = -1; +} + +bool SimpleAI::qEmpty() +{ + return qfirst > qlast; +} + +void SimpleAI::push(int pSender) +{ + qlast++; + if(qlast >= queue.size()) + { + queue.push_back(pSender); + } + else + queue.at(qlast) = pSender; +} + +int SimpleAI::pop() +{ + int returnValue = queue[qfirst]; + qfirst++; + return returnValue; +} + + +void update(int pSender) +{ + int vt = pSender; + SimpleAI::tileArr.at(vt)->setNumberEdgeAvailale(0); + + //BOTTOM + if(!SimpleAI::tileArr.at(vt)->getHasBottomPop()) + { + SimpleAI::tileArr.at(vt)->setHasBottomPop(true); + SimpleAI::tileArr.at(vt)->setEdgeBottomSts(STS_NOT_AVAILABLE); + for (int i = 0; i < SimpleAI::tileArr.size(); ++i) + { + if (SimpleAI::tileArr.at(i)->getGID() == SimpleAI::tileArr.at(vt)->getGIDTileDown()) + { + SimpleAI::tileArr.at(i)->setHasTopPop(true); + SimpleAI::tileArr.at(i)->setEdgeTopSts(STS_NOT_AVAILABLE); + SimpleAI::tileArr.at(i)->setNumberEdgeAvailale(SimpleAI::tileArr.at(i)->getNumberEdgeAvailale()-1); + break; + } + } + } else + + //TOP + if(!SimpleAI::tileArr.at(vt)->getHasTopPop()) + { + SimpleAI::tileArr.at(vt)->setHasTopPop(true); + SimpleAI::tileArr.at(vt)->setEdgeTopSts(STS_NOT_AVAILABLE); + for (int i = 0; i < SimpleAI::tileArr.size(); ++i) + { + if (SimpleAI::tileArr.at(i)->getGID() == SimpleAI::tileArr.at(vt)->getGIDTileUp()) + { + SimpleAI::tileArr.at(i)->setHasBottomPop(true); + SimpleAI::tileArr.at(i)->setEdgeBottomSts(STS_NOT_AVAILABLE); + SimpleAI::tileArr.at(i)->setNumberEdgeAvailale(SimpleAI::tileArr.at(i)->getNumberEdgeAvailale()-1); + break; + } + } + } else + + //LEFT + if(!SimpleAI::tileArr.at(vt)->getHasLeftPop()) + { + SimpleAI::tileArr.at(vt)->setHasLeftPop(true); + SimpleAI::tileArr.at(vt)->setEdgeLeftSts(STS_NOT_AVAILABLE); + for (int i = 0; i < SimpleAI::tileArr.size(); ++i) + { + if (SimpleAI::tileArr.at(i)->getGID() == SimpleAI::tileArr.at(vt)->getGIDTileLeft()) + { + SimpleAI::tileArr.at(i)->setHasRightPop(true); + SimpleAI::tileArr.at(i)->setEdgeRightSts(STS_NOT_AVAILABLE); + SimpleAI::tileArr.at(i)->setNumberEdgeAvailale(SimpleAI::tileArr.at(i)->getNumberEdgeAvailale()-1); + break; + } + } + } else + + //RIGHT + if(!SimpleAI::tileArr.at(vt)->getHasRightPop()) + { + SimpleAI::tileArr.at(vt)->setHasRightPop(true); + SimpleAI::tileArr.at(vt)->setEdgeRightSts(STS_NOT_AVAILABLE); + for (int i = 0; i < SimpleAI::tileArr.size(); ++i) + { + if (SimpleAI::tileArr.at(i)->getGID() == SimpleAI::tileArr.at(vt)->getGIDTileRight()) + { + SimpleAI::tileArr.at(i)->setHasLeftPop(true); + SimpleAI::tileArr.at(i)->setEdgeLeftSts(STS_NOT_AVAILABLE); + SimpleAI::tileArr.at(i)->setNumberEdgeAvailale(SimpleAI::tileArr.at(i)->getNumberEdgeAvailale()-1); + break; + } + } + } +} + +void SimpleAI::Breath_First_Search(int ptileIndex_i, int ptileIndex_j) +{ + tileArr = PlayScene::getTileInfoVector(); + tileAccepted.clear(); + CCLog("Number of tile arr is %lu", tileArr.size()); + + initQueue(); + + int k = PAIR_FUNC(ptileIndex_i, ptileIndex_j); + push(k); + CCLog("i= %i, j= %i", ptileIndex_i, ptileIndex_j); + CCLog("k= %i", k); + int direct_i[4] = {-1, 0, 1, 0}; + int direct_j[4] = {0, 1, 0, -1}; + + while (!qEmpty()) + { + int u = pop(); + CCLog("u= %i", u); + int i, j; + for(int t=0; tgetGID() == u) + { + i = tileArr.at(t)->getGridX(); + j = tileArr.at(t)->getGridY(); + CCLog("i= %i, j= %i", i, j); + break; + } + } + + int x, y; + for(int k = 0; k<4; k++) + { + x = i + direct_i[k]; + y = j + direct_j[k]; + for(int r = 0; rgetGridX()== x && tileArr.at(r)->getGridY()==y) + { + if (tileArr.at(r)->getNumberEdgeAvailale() == 1) + { + update(r); + tileArr.at(r)->getTile()->setColor(ccGRAY); + tileArr.at(r)->setNumberEdgeAvailale(0); + push(tileArr.at(r)->getGID()); + tileAccepted.push_back(tileArr.at(r)->getGID()); + } + } + } + } + CCLog("%lu", tileAccepted.size()); + } +} \ No newline at end of file diff --git a/Classes/SimpleAI.h b/Classes/SimpleAI.h new file mode 100644 index 0000000..f3ad620 --- /dev/null +++ b/Classes/SimpleAI.h @@ -0,0 +1,31 @@ +// +// SimpleAI.h +// landlord +// +// Created by HaLink on 3/12/14. +// +// + +#ifndef landlord_SimpleAI_h +#define landlord_SimpleAI_h + +#include "TileInfo.h" + +class SimpleAI +{ +private: + static std::vector queue; + static int qfirst; + static int qlast; + +public: + static std::vector tileAccepted; + static std::vector tileArr; + + static void initQueue(); + static void push(int pSender); + static int pop(); + static bool qEmpty(); + static void Breath_First_Search(int ptileIndex_i, int ptileIndex_j); +}; +#endif diff --git a/Classes/TileInfo.h b/Classes/TileInfo.h index 95653c4..ec855c5 100644 --- a/Classes/TileInfo.h +++ b/Classes/TileInfo.h @@ -38,8 +38,8 @@ class TileInfo CC_SYNTHESIZE(int, mGIDTileLeft, GIDTileLeft); CC_SYNTHESIZE(int, mGIDTileRight, GIDTileRight); CC_SYNTHESIZE(int, mGID, GID); -// CC_SYNTHESIZE(float, mGridX, GridX); -// CC_SYNTHESIZE(int, mGridY, GridY); + CC_SYNTHESIZE(int, mGridX, GridX); + CC_SYNTHESIZE(int, mGridY, GridY); TileInfo(); diff --git a/Resources/Sound/background.wav b/Resources/Sound/background.wav new file mode 100644 index 0000000..dfe4693 Binary files /dev/null and b/Resources/Sound/background.wav differ diff --git a/proj.ios/landlord.xcodeproj/project.pbxproj b/proj.ios/landlord.xcodeproj/project.pbxproj index 257c7fb..1b49c60 100644 --- a/proj.ios/landlord.xcodeproj/project.pbxproj +++ b/proj.ios/landlord.xcodeproj/project.pbxproj @@ -228,6 +228,7 @@ 661B812118B3E5AD00578534 /* StartScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 661B812018B3E5AD00578534 /* StartScene.cpp */; }; 6692F13618BB4E4400068D35 /* GameManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6692F13518BB4E4400068D35 /* GameManager.cpp */; }; 66EB9FF718B65370000A1CEB /* SettingScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 66EB9FF518B65370000A1CEB /* SettingScene.cpp */; }; + 66FD900B18CF7EE300D4F43B /* SimpleAI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 66FD900A18CF7EE300D4F43B /* SimpleAI.cpp */; }; 7A08F1D618C6CC4900BB75AA /* ChooseCharacterScene in Resources */ = {isa = PBXBuildFile; fileRef = 7A08F1C918C6CC4900BB75AA /* ChooseCharacterScene */; }; 7A08F1D718C6CC4900BB75AA /* ChooseMapScene in Resources */ = {isa = PBXBuildFile; fileRef = 7A08F1CA18C6CC4900BB75AA /* ChooseMapScene */; }; 7A08F1D818C6CC4900BB75AA /* CloseNormal.png in Resources */ = {isa = PBXBuildFile; fileRef = 7A08F1CB18C6CC4900BB75AA /* CloseNormal.png */; }; @@ -740,6 +741,8 @@ 6692F13518BB4E4400068D35 /* GameManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameManager.cpp; path = ../Classes/GameManager.cpp; sourceTree = ""; }; 66EB9FF518B65370000A1CEB /* SettingScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingScene.cpp; sourceTree = ""; }; 66EB9FF618B65370000A1CEB /* SettingScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingScene.h; sourceTree = ""; }; + 66FD900918CF7C4200D4F43B /* SimpleAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimpleAI.h; path = ../Classes/SimpleAI.h; sourceTree = ""; }; + 66FD900A18CF7EE300D4F43B /* SimpleAI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleAI.cpp; path = ../Classes/SimpleAI.cpp; sourceTree = ""; }; 7A08F1C918C6CC4900BB75AA /* ChooseCharacterScene */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ChooseCharacterScene; sourceTree = ""; }; 7A08F1CA18C6CC4900BB75AA /* ChooseMapScene */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ChooseMapScene; sourceTree = ""; }; 7A08F1CB18C6CC4900BB75AA /* CloseNormal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = CloseNormal.png; sourceTree = ""; }; @@ -1324,6 +1327,8 @@ 663E4F0718BBAF6A00AFFF9F /* SceneTransition.h */, 7A18DB6F18CD91F100C95A32 /* TileInfo.cpp */, 7A18DB7018CD91F100C95A32 /* TileInfo.h */, + 66FD900918CF7C4200D4F43B /* SimpleAI.h */, + 66FD900A18CF7EE300D4F43B /* SimpleAI.cpp */, ); name = Classes; path = ../classes; @@ -2044,6 +2049,7 @@ 1AC3624916D4A1E8000847F2 /* AppController.mm in Sources */, 1AC3624B16D4A1E8000847F2 /* main.m in Sources */, 1AFCDA8216D4A25900906EA6 /* RootViewController.mm in Sources */, + 66FD900B18CF7EE300D4F43B /* SimpleAI.cpp in Sources */, 1A8F3B6E175E05DA00049216 /* Animation.cpp in Sources */, 1A8F3B6F175E05DA00049216 /* AnimationState.cpp in Sources */, 1A8F3B70175E05DA00049216 /* AnimationStateData.cpp in Sources */, diff --git a/proj.ios/landlord.xcodeproj/project.xcworkspace/xcshareddata/landlord.xccheckout b/proj.ios/landlord.xcodeproj/project.xcworkspace/xcshareddata/landlord.xccheckout index 8db26f5..3fb4247 100644 --- a/proj.ios/landlord.xcodeproj/project.xcworkspace/xcshareddata/landlord.xccheckout +++ b/proj.ios/landlord.xcodeproj/project.xcworkspace/xcshareddata/landlord.xccheckout @@ -5,34 +5,34 @@ IDESourceControlProjectFavoriteDictionaryKey IDESourceControlProjectIdentifier - 5B371B9F-616D-4D96-B70B-74ECD0AA8F6B + 3D4275D6-1F4E-42D5-83E5-09CDC5352E06 IDESourceControlProjectName landlord IDESourceControlProjectOriginsDictionary - 5E91F313-12CB-43B6-9890-B337C6BA70F7 - ssh://github.com/tranvictor/landlord.git + DB937413-44A9-4D79-B239-3499DA3E9DF6 + https://github.com/tranvictor/landlord IDESourceControlProjectPath proj.ios/landlord.xcodeproj/project.xcworkspace IDESourceControlProjectRelativeInstallPathDictionary - 5E91F313-12CB-43B6-9890-B337C6BA70F7 + DB937413-44A9-4D79-B239-3499DA3E9DF6 ../../.. IDESourceControlProjectURL - ssh://github.com/tranvictor/landlord.git + https://github.com/tranvictor/landlord IDESourceControlProjectVersion 110 IDESourceControlProjectWCCIdentifier - 5E91F313-12CB-43B6-9890-B337C6BA70F7 + DB937413-44A9-4D79-B239-3499DA3E9DF6 IDESourceControlProjectWCConfigurations IDESourceControlRepositoryExtensionIdentifierKey public.vcs.git IDESourceControlWCCIdentifierKey - 5E91F313-12CB-43B6-9890-B337C6BA70F7 + DB937413-44A9-4D79-B239-3499DA3E9DF6 IDESourceControlWCCName landlord diff --git a/proj.ios/landlord.xcodeproj/project.xcworkspace/xcuserdata/SCN.xcuserdatad/UserInterfaceState.xcuserstate b/proj.ios/landlord.xcodeproj/project.xcworkspace/xcuserdata/SCN.xcuserdatad/UserInterfaceState.xcuserstate index eed347b..4d4b807 100644 Binary files a/proj.ios/landlord.xcodeproj/project.xcworkspace/xcuserdata/SCN.xcuserdatad/UserInterfaceState.xcuserstate and b/proj.ios/landlord.xcodeproj/project.xcworkspace/xcuserdata/SCN.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/proj.ios/landlord.xcodeproj/xcuserdata/SCN.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/proj.ios/landlord.xcodeproj/xcuserdata/SCN.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 2fdb94f..0dc7caf 100644 --- a/proj.ios/landlord.xcodeproj/xcuserdata/SCN.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/proj.ios/landlord.xcodeproj/xcuserdata/SCN.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -97,5 +97,253 @@ endingLineNumber = "102"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +