Skip to content
Merged
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
31 changes: 31 additions & 0 deletions demos/TicTacToe/Classes/AppDelegate.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#include "AppDelegate.h"

#include "TicTacToeScene.h"

USING_NS_CC;

const float kFrameWidth = 600;
const float kFrameHeight = 600;

AppDelegate::AppDelegate() {}

AppDelegate::~AppDelegate() {}

bool AppDelegate::applicationDidFinishLaunching() {
auto director = Director::getInstance();
auto glview = director->getOpenGLView();
if (glview == NULL) {
glview = GLViewImpl::create("Tic-Tac-Toe");
glview->setFrameSize(kFrameWidth, kFrameHeight);
director->setOpenGLView(glview);
}

auto scene = TicTacToe::createScene();
director->runWithScene(scene);

return true;
}

void AppDelegate::applicationDidEnterBackground() {}

void AppDelegate::applicationWillEnterForeground() {}
14 changes: 14 additions & 0 deletions demos/TicTacToe/Classes/AppDelegate.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef TICTACTOE_DEMO_CLASSES_APPDELEGATE_SCENE_H_
#define TICTACTOE_DEMO_CLASSES_APPDELEGATE_SCENE_H_
#include "cocos2d.h"

class AppDelegate : private cocos2d::Application {
public:
AppDelegate();
~AppDelegate() override;

bool applicationDidFinishLaunching() override;
void applicationDidEnterBackground() override;
void applicationWillEnterForeground() override;
};
#endif // TICTACTOE_DEMO_CLASSES_APPDELEGATE_SCENE_H_
96 changes: 96 additions & 0 deletions demos/TicTacToe/Classes/TicTacToeScene.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#include "TicTacToeScene.h"

#include <array>
#include <cstdlib>

#include "cocos2d.h"

USING_NS_CC;

static const int kTilesX = 3;
static const int kTilesY = 3;
static const int kNumberOfTiles = kTilesX * kTilesY;
static const int kMaxMovesPerPlayer = 1 + kNumberOfTiles / 2;
static const double kScreenWidth = 600;
static const double kScreenHeight = 600;
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> kPlayerTokenFileNames = {
"tic_tac_toe_x.png", "tic_tac_toe_o.png"};

Scene* TicTacToe::createScene() {
// 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();

scene->addChild(tic_tac_toe_layer);

return scene;
}

bool TicTacToe::init() {
if (!Layer::init()) {
return false;
}
int current_player_index = 0;
auto file_names_it = std::begin(kPlayerTokenFileNames);

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

// 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(kBoardImageFileName);
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));

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

if (bounds.containsPoint(touch->getLocation())) {
// 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 == NULL) {
log("kPlayerTokenFileNames: %s file not found.",
kPlayerTokenFileNames[current_player_index]);
exit(true);
}
// Calculate and set the position of the sprite based on the
// move_tile and the constant screen variables.
sprite->setPosition((.5 + selected_tile % kTilesX) * kTileWidth,
(.5 + selected_tile / kTilesY) * kTileHeight);
board_sprite->addChild(sprite);
current_player_index = (current_player_index + 1) % kNumberOfPlayers;
}
return true;
};

Director::getInstance()
->getEventDispatcher()
->addEventListenerWithSceneGraphPriority(touch_listener, board_sprite);

this->addChild(board_sprite);

return true;
}
16 changes: 16 additions & 0 deletions demos/TicTacToe/Classes/TicTacToeScene.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#ifndef TICTACTOE_DEMO_CLASSES_TICTACTOE_SCENE_H_
#define TICTACTOE_DEMO_CLASSES_TICTACTOE_SCENE_H_
#include "cocos2d.h"

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();
// 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);
};
#endif // TICTACTOE_DEMO_CLASSES_TICTACTOE_SCENE_H_
Binary file added demos/TicTacToe/Resources/fonts/Marker Felt.ttf
Binary file not shown.
Binary file added demos/TicTacToe/Resources/fonts/arial.ttf
Binary file not shown.
Empty file.
Binary file added demos/TicTacToe/Resources/tic_tac_toe_board.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added demos/TicTacToe/Resources/tic_tac_toe_o.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added demos/TicTacToe/Resources/tic_tac_toe_x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.