Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

55 create simple ai #11

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 56 additions & 1 deletion Classes/PlayScene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<TileInfo*> PlayScene::tileInfoVector;

CCScene* PlayScene::scene()
{
// 'scene' is an autorelease object
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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; i<tileInfoVector.size(); i++)
{
if (tileInfoVector.at(i)->getNumberEdgeAvailale() == 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<TileInfo*> PlayScene::getTileInfoVector()
{
return tileInfoVector;
}
15 changes: 13 additions & 2 deletions Classes/PlayScene.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -38,7 +37,6 @@ class PlayScene : public cocos2d::CCLayer
cocos2d::CCArray *mEdgeArrRight;

cocos2d::CCArray *popsArr;
std::vector<TileInfo*> tileInfoVector;

int curTile = 0;
int numPop = NUMBER_EDGE_AVAILABLE;
Expand All @@ -48,13 +46,26 @@ class PlayScene : public cocos2d::CCLayer
static cocos2d::CCScene* scene();
~PlayScene();

static std::vector<TileInfo*> tileInfoVector;
CCTMXTiledMap *tileMap;

void addPauseButton();
void addPlayGroud();
void addPLayerOne();
void addPlayerTwo();
void addScoreLbn();
void addFrameImg();

void tileUpdate(int pSender);

static std::vector<TileInfo*> getTileInfoVector();

static void addToTiledMap(cocos2d::CCSprite *pSender);

CCTMXTiledMap getTileMap();
// CC_SYNTHESIZE_READONLY(std::vector<TileInfo*>, tileInfoVector, TileInfoVector);
// CC_SYNTHESIZE_PASS_BY_REF(std::vector<TileInfo*>, tileInfoVector, TileInfoVector);

void makeMapScroll();
void pauseButtonTouched();
void moveMap(float offsetX, float offsetY);
Expand Down
175 changes: 175 additions & 0 deletions Classes/SimpleAI.cpp
Original file line number Diff line number Diff line change
@@ -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<int> SimpleAI::queue;
std::vector<int> SimpleAI::tileAccepted;
std::vector<TileInfo*> 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; t<tileArr.size(); t++)
{
if (tileArr.at(t)->getGID() == 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; r<tileArr.size(); r++)
{
if(tileArr.at(r)->getGridX()== 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());
}
}
31 changes: 31 additions & 0 deletions Classes/SimpleAI.h
Original file line number Diff line number Diff line change
@@ -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<int> queue;
static int qfirst;
static int qlast;

public:
static std::vector<int> tileAccepted;
static std::vector<TileInfo*> 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
4 changes: 2 additions & 2 deletions Classes/TileInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down
Binary file added Resources/Sound/background.wav
Binary file not shown.
6 changes: 6 additions & 0 deletions proj.ios/landlord.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -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 */; };
Expand Down Expand Up @@ -740,6 +741,8 @@
6692F13518BB4E4400068D35 /* GameManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GameManager.cpp; path = ../Classes/GameManager.cpp; sourceTree = "<group>"; };
66EB9FF518B65370000A1CEB /* SettingScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingScene.cpp; sourceTree = "<group>"; };
66EB9FF618B65370000A1CEB /* SettingScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingScene.h; sourceTree = "<group>"; };
66FD900918CF7C4200D4F43B /* SimpleAI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SimpleAI.h; path = ../Classes/SimpleAI.h; sourceTree = "<group>"; };
66FD900A18CF7EE300D4F43B /* SimpleAI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SimpleAI.cpp; path = ../Classes/SimpleAI.cpp; sourceTree = "<group>"; };
7A08F1C918C6CC4900BB75AA /* ChooseCharacterScene */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ChooseCharacterScene; sourceTree = "<group>"; };
7A08F1CA18C6CC4900BB75AA /* ChooseMapScene */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ChooseMapScene; sourceTree = "<group>"; };
7A08F1CB18C6CC4900BB75AA /* CloseNormal.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = CloseNormal.png; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1324,6 +1327,8 @@
663E4F0718BBAF6A00AFFF9F /* SceneTransition.h */,
7A18DB6F18CD91F100C95A32 /* TileInfo.cpp */,
7A18DB7018CD91F100C95A32 /* TileInfo.h */,
66FD900918CF7C4200D4F43B /* SimpleAI.h */,
66FD900A18CF7EE300D4F43B /* SimpleAI.cpp */,
);
name = Classes;
path = ../classes;
Expand Down Expand Up @@ -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 */,
Expand Down
Loading