-
Couldn't load subscription status.
- Fork 135
TicTacToe demo cocos2dx functionality #46
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
Changes from 9 commits
a1d7ea7 fe6b14f a6e9567 441998b 1826d7d 9d0c311 eedf812 1777aff 12d03ce 11aed62 7322220 5caac8a 2b8b2b9 c6be411 3ce4079 78775cf File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| 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 == nullptr) { | ||
| 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() {} | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| #pragma once | ||
| ||
| | ||
| #include "cocos2d.h" | ||
| | ||
| class AppDelegate : private cocos2d::Application { | ||
| public: | ||
| AppDelegate(); | ||
| ~AppDelegate() override; | ||
| | ||
| bool applicationDidFinishLaunching() override; | ||
| void applicationDidEnterBackground() override; | ||
| void applicationWillEnterForeground() override; | ||
| }; | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,100 @@ | ||
| #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(); | ||
| | ||
| if (scene == nullptr || tic_tac_toe_layer == nullptr) { | ||
| log("Error while creating the scene and tictactoe layer."); | ||
DellaBitta marked this conversation as resolved. Outdated Show resolved Hide resolved | ||
| exit(true); | ||
| } | ||
| | ||
| 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. | ||
| // 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("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(); | ||
DellaBitta marked this conversation as resolved. Outdated Show resolved Hide resolved | ||
| // 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())) { | ||
| // 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 | ||
| ||
| // 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() | ||
DellaBitta marked this conversation as resolved. Show resolved Hide resolved | ||
| ->getEventDispatcher() | ||
| ->addEventListenerWithSceneGraphPriority(touchListener, board_sprite); | ||
| | ||
| this->addChild(board_sprite); | ||
| | ||
| return true; | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,18 @@ | ||
| #pragma once | ||
| ||
| | ||
| #include <array> | ||
| ||
| #include <cstdlib> | ||
| | ||
| #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(); | ||
DellaBitta marked this conversation as resolved. Show resolved Hide resolved | ||
| // 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); | ||
| }; | ||
Uh oh!
There was an error while loading. Please reload this page.