Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Suggested changes from @DellaBitta.
  • Loading branch information
Grant-Postma committed Jun 3, 2020
commit 12d03ce89880fd6040cc3ac0b56af6006b1f0865
2 changes: 1 addition & 1 deletion demos/TicTacToe/Classes/AppDelegate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ AppDelegate::~AppDelegate() {}
bool AppDelegate::applicationDidFinishLaunching() {
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if (!glview) {
if (glview == nullptr) {
glview = GLViewImpl::create("Tic-Tac-Toe");
glview->setFrameSize(kFrameWidth, kFrameHeight);
director->setOpenGLView(glview);
Expand Down
52 changes: 37 additions & 15 deletions demos/TicTacToe/Classes/TicTacToeScene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,22 @@ static const double kTileWidth = (kScreenWidth / kTilesX);
static const double kTileHeight = (kScreenHeight / kTilesY);
static const int kNumberOfPlayers = 2;
static const char* kBoardImageFileName = "tic_tac_toe_board.png";
std::array<const char*, kNumberOfPlayers> kMoveImageFileNames = {
std::array<const char*, kNumberOfPlayers> kPlayerTokenFileNames = {
"tic_tac_toe_x.png", "tic_tac_toe_o.png"};

Scene* TicTacToe::createScene() {
auto scene = Scene::create();
auto layer = TicTacToe::create();
// Builds a simple scene that uses the bottom left cordinate point as (0,0)
// and can have sprites, labels and layers added onto it.
Scene* scene = Scene::create();
// Builds a layer to be placed onto the scene which has access to TouchEvents.
TicTacToe* tic_tac_toe_layer = TicTacToe::create();

if (scene == nullptr || tic_tac_toe_layer == nullptr) {
log("Error while creating the scene and tictactoe layer.");
exit(true);
}

scene->addChild(layer);
scene->addChild(tic_tac_toe_layer);

return scene;
}
Expand All @@ -34,34 +42,48 @@ bool TicTacToe::init() {
return false;
}
int current_player_index = 0;
auto file_names_it = std::begin(kMoveImageFileNames);
auto file_names_it = std::begin(kPlayerTokenFileNames);

// TODO(grantpostma): This should reflect the size that is set in AppDelegate.
// Should modify kTileWidth and kTileHeight based on that size auto
// Should modify kTileWidth and kTileHeight based on that size. auto
// kScreenWidth = Director::getInstance()->getWinSize().width; auto
// kScreenHeight = Director::getInstance()->getWinSize().height;

auto board_sprite = Sprite::create(kBoardImageFileName);
// Creating the board sprite , setting the position to the bottom left of the
// frame (0,0), and finally moving the anchor point from the center of the
// image(default) to the bottom left, Vec2(0.0,0.0).
Sprite* board_sprite = Sprite::create("notFoundImage.png");
if (!board_sprite) {
log("kBoardImageFileName: %s file not found.", kBoardImageFileName);
exit(true);
}
board_sprite->setPosition(0, 0);
board_sprite->setAnchorPoint(Vec2(0.0, 0.0));

auto touchListener = EventListenerTouchOneByOne::create();
// Adding a function to determine which tile was selected to the onTouchBegan
// listener.
touchListener->onTouchBegan = [board_sprite, current_player_index](
Touch* touch,
Event* event) mutable -> bool {
auto bounds = event->getCurrentTarget()->getBoundingBox();

if (bounds.containsPoint(touch->getLocation())) {
// This takes the touch location and calculates which tile number [0-8]
// corresponds to that location
int move_tile = floor(touch->getLocation().x / kTileWidth) +
kTilesX * floor(touch->getLocation().y / kTileHeight);

auto sprite = Sprite::create(kMoveImageFileNames[current_player_index]);
// Calculates the tile number [0-8] which corresponds to the touch
// location.
int selected_tile = floor(touch->getLocation().x / kTileWidth) +
kTilesX * floor(touch->getLocation().y / kTileHeight);

auto sprite = Sprite::create(kPlayerTokenFileNames[current_player_index]);
if (!sprite) {
log("kPlayerTokenFileNames: %s file not found.",
kPlayerTokenFileNames[current_player_index]);
exit(true);
}
// This calculates and sets the position of the sprite based on the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Calculate and set..."

// move_tile and the constant screen variables.
sprite->setPosition((.5 + move_tile % kTilesX) * kTileWidth,
(.5 + move_tile / kTilesY) * kTileHeight);
sprite->setPosition((.5 + selected_tile % kTilesX) * kTileWidth,
(.5 + selected_tile / kTilesY) * kTileHeight);
board_sprite->addChild(sprite);
current_player_index = (current_player_index + 1) % kNumberOfPlayers;
}
Expand Down
7 changes: 6 additions & 1 deletion demos/TicTacToe/Classes/TicTacToeScene.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@

class TicTacToe : public cocos2d::Layer {
public:
// Builds a simple scene that uses the bottom left cordinate point as (0,0)
// and can have sprites, labels and nodes added onto it.
static cocos2d::Scene* createScene();
virtual bool init();
// Initializes the instance of a Node and returns a boolean based on if it was
// successful in doing so.
bool init() override;
// Defines a create type for a specific type, in this case a Layer.
CREATE_FUNC(TicTacToe);
};