三消游戏FSM状态机设计图
来源:互联网 发布:linux 关闭图形界面 编辑:程序博客网 时间:2024/05/16 09:31
三消游戏FSM状态机设计图
1) 设计FSM图
2) smc配置文件
///////////////////////////////////////////////////////////////////////// ColorTable.sm// -- ColorTable State Map for C++ classes auto-generation//// 1) generate c++ classes:// $ java -jar Smc.jar -c++ ColorTable.sm//// 2) generate graphviz dot graph:// $ java -jar Smc.jar -graph -glevel 1 ColorTable.sm//// see also:// http://graphviz.org///// Author: cheungmine// Copyright 2015-?, All rights reserved./////////////////////////////////////////////////////////////////////////%class ColorTable%header ColorTable.h%start ColorTableMap::Vacancy%map ColorTableMap%%/*** State {* Transition [Guard Condition]*EndState {*Action(s)*}** Transition [context.getOwner().is_valid()]*EndState {*Action(s)*}* ...* }*///==> ColorTableMap::VacancyVacancyEntry {enterVacancy();}Exit {leaveVacancy();}{// Expose Transitions to other parts if necessaryshuffleShuffleFilled {shuffle();}}//==> ColorTableMap::ShuffleFilled// only swappable stateShuffleFilledEntry {enterShuffleFilled();}Exit {leaveShuffleFilled();}{// !!can swap here!!swap [ context.getOwner().swap_done() ]Filled {}swapShuffleFilled {// set stack top sub sm: SwapMap}}//==> ColorTableMap::FallenOverFallenOverEntry {enterFallenOver();}Exit { leaveFallenOver();}{// Expose Transitions to other parts if necessaryfill [ context.getOwner().is_empty() ]Vacancy {}fillFilled {fill();}}//==> ColorTableMap::FilledFilledEntry {enterFilled();}Exit {leaveFilled();}{erase [ context.getOwner().can_erase() ]Unfilled {erase();}eraseVacancy {empty();}}//==> ColorTableMap::UnfilledUnfilledEntry {enterUnfilled();}Exit {leaveUnfilled();}{fallFallen {fall();}}//==> ColorTableMap::FallenFallenEntry { enterFallen();}Exit {leaveFallen();}{erase [ context.getOwner().can_erase() ]Unfilled {erase();}eraseFallenOver {empty();}}%%
3) ColorTable.h和ColorTable.cpp
/*** ColorTable.h* 2015-02-01* cheungmine, all rights reserved.** col->* +-------+-------+-------+-------+-------+-------+-------+* row |00 |01 |02 |03 |04 |05 |06 |* | | | | | | | | |* v | | | | | | | |* +-------+-------+-------+-------+-------+-------+-------+* |10 |11 |12 |13 |14 |15 |16 |* | | | | | | | |* | | | | | | | |* +-------+-------+-------+-------+-------+-------+-------+* |20 |21 |22 |23 |24 |25 |26 |* | |(xp,yp)| | | | | | height* | | . | | | | | |* +-------+-------+-------+-------+-------+-------+-------+* |30 |31 |32 |33 |34 |35 |36 |* | | | | | | | |* | | | | | | | |* +-------+-------+-------+-------+-------+-------+-------+* y |40 |41 |42 |43 |44 |45 |46 |* ^ | | | | | | | |* | | | | | | | | |* | o-------+-------+-------+-------+-------+-------+-------+* | origin width* +------------>x* (0,0)**/#ifndef __COLORTABLE_H__#define __COLORTABLE_H__#include "cocos2d.h"USING_NS_CC;#include "ColorTable_sm.h"class ColorTable : public Node{public: // Global Settings: static const int ColorTable_NumRows = 5; static const int ColorTable_NumCols = 7; static const int ColorTable_NumCells = ColorTable_NumRows*ColorTable_NumCols; static const int ColorTable_NumColors = 4; static const int ColorTable_ColorsPal[ColorTable_NumColors+1]; // colors palette // Construct and Deconstruct ColorTable() : swap_done_(false), _fsm(0), _DeltaTime(0.1f), _NumRows(ColorTable_NumCols), _NumCols(ColorTable_NumRows), _NumCells(ColorTable_NumCells) { } // Public Types: enum EnumColor { INVALID = 0, RED = 1, GREEN = 2, BLUE = 3, YELLOW = 4 }; // Public Inline Methods: inline int index(int row, int col) const { return (col*_NumCols + row); } inline int color(int row, int col) const { return table_[index(row, col)]; } inline int result(int row, int col) const { return results_[index(row, col)]; }public: // Public Methods: CREATE_FUNC(ColorTable); virtual bool init(); bool is_empty(); bool can_erase(); bool swap_done(); void shuffle(); void empty(); void erase(); void fall(); void fill(); void print();public: // Public Callbacks: void enterVacancy(); void leaveVacancy(); void enterShuffleFilled(); void leaveShuffleFilled(); void enterFallenOver(); void leaveFallenOver(); void enterFilled(); void leaveFilled(); void enterUnfilled(); void leaveUnfilled(); void enterFallen(); void leaveFallen(); // Public Events: void onIdleVacancy(float dt); void onIdleShuffleFilled(float dt); void onIdleFallenOver(float dt); void onIdleFilled(float dt); void onIdleUnfilled(float dt); void onIdleFallen(float dt);private: // Private Methods: void init_table(); void exit();private: // Private Members: ColorTableContext * _fsm; const int _NumRows; const int _NumCols; const int _NumCells; const float _DeltaTime; bool swap_done_; int table_[ColorTable_NumCells]; int results_[ColorTable_NumCells];};#endif // __COLORTABLE_H__
/*** ColorTable.cpp* 2015-02-01* cheungmine, all rights reserved.**/#include "ColorTable.h"const int ColorTable::ColorTable_ColorsPal[ColorTable_NumColors+1] = {'O', 'R', 'G', 'B', 'Y'};/////////////////////////// Private Methods ////////////////////////////void ColorTable::init_table(){ int fixed[] = { 1,1,3,1,2, 3,2,1,1,4, 2,2,4,3,3, 1,3,3,4,1, 3,4,4,2,4, 2,2,4,1,1, 2,1,1,2,4 }; int at = 0; int * p = table_; while (p - table_ < _NumCells) { *p++ = fixed[at++]; }}/////////////////////////// Public Callbacks ///////////////////////////void ColorTable::enterVacancy(){ empty(); this->schedule(schedule_selector(ColorTable::onIdleVacancy), _DeltaTime);}void ColorTable::leaveVacancy(){ exit();}void ColorTable::enterShuffleFilled(){ this->schedule(schedule_selector(ColorTable::onIdleShuffleFilled), _DeltaTime);}void ColorTable::leaveShuffleFilled(){ exit();} void ColorTable::enterFallenOver(){ this->schedule(schedule_selector(ColorTable::onIdleFallenOver), _DeltaTime);}void ColorTable::leaveFallenOver(){ exit();} void ColorTable::enterFilled(){ this->schedule(schedule_selector(ColorTable::onIdleFilled), _DeltaTime);}void ColorTable::leaveFilled(){ exit();} void ColorTable::enterUnfilled(){ this->schedule(schedule_selector(ColorTable::onIdleUnfilled), _DeltaTime);}void ColorTable::leaveUnfilled(){ exit();} void ColorTable::enterFallen(){ this->schedule(schedule_selector(ColorTable::onIdleFallen), _DeltaTime);}void ColorTable::leaveFallen(){ exit();}//////////////////////////// Public Events ////////////////////////////void ColorTable::onIdleVacancy(float dt){ _fsm->shuffle();}void ColorTable::onIdleShuffleFilled(float dt){}void ColorTable::onIdleFallenOver(float dt){}void ColorTable::onIdleFilled(float dt){}void ColorTable::onIdleUnfilled(float dt){}void ColorTable::onIdleFallen(float dt){}/////////////////////////// Public Methods ////////////////////////////bool ColorTable::init(){ _fsm = new ColorTableContext(*this); _fsm->setDebugFlag(true); _fsm->enterStartState(); return true;}void ColorTable::exit(){ this->unscheduleAllCallbacks();}bool ColorTable::is_empty(){ for (int index = 0; index < _NumCells; ++index) { if (table_[index] != INVALID) { return false; } } return true;}bool ColorTable::can_erase(){ return false;}bool ColorTable::swap_done(){ return swap_done_;}void ColorTable::shuffle(){ init_table();}void ColorTable::empty(){ for (int cell = 0; cell < _NumCells; ++cell) { table_[cell] = INVALID; results_[cell] = 0; }}void ColorTable::erase(){}void ColorTable::fall(){}void ColorTable::fill(){}void ColorTable::print(){#if defined(COCOS2D_DEBUG) && defined(WIN32) FILE * fp = fopen("c:/temp/color-table.prt", "a+"); if (fp) { fprintf(fp, "\n>>>> %s {", _fsm->getState().getName()); fprintf(fp, "\n---- TABLE ----\n"); for (int row = 0; row < ColorTable_NumRows; ++row) { for (int col = 0; col < ColorTable_NumCols; ++col) { int v = color(row, col); fprintf(fp, " %c", ColorTable_ColorsPal[v]); } fprintf(fp, "\n"); } fprintf(fp, "\n---- RESULTS ----\n"); for (int row = 0; row < ColorTable_NumRows; ++row) { for (int col = 0; col < ColorTable_NumCols; ++col) { int v = result(row, col); fprintf(fp, " %d", v); } fprintf(fp, "\n"); } fprintf(fp, "}\n"); fclose(fp); }#endif}
0 0
- 三消游戏FSM状态机设计图
- 状态机FSM
- FSM状态机
- Unity3D游戏开发框架-FSM状态机的实现
- 自动状态机,FSM
- 状态机FSM代码框架
- 可视化的状态机(FSM)
- 状态机FSM的描述方法
- [FSM]状态机实践入门——程咬金只要三斧头厉害
- cocos2d-x 游戏开发之有限状态机(FSM) (三)
- 游戏逻辑底层,MainLoop&&FSM&&MSG(三)
- 游戏人工智能--FSM篇
- 表驱动的自动状态机(FSM)
- Unity3d编程,简易状态机(fsm)
- 通过Synplify Pro查看FSM状态机
- 游戏状态机
- 游戏状态机
- 设计图
- Android获取Toast的String解析
- C++ 指向函数的指针
- MFC listBox 某一项数据显示不同的颜色
- mod_jk(Apache+mod_jk+tomcat)详细配置方法
- 反转栈
- 三消游戏FSM状态机设计图
- 深入理解Android系列书籍资源分享更新
- JQuery实现图片切换(自动切换+手动切换)
- docker 容器相关命令
- 给菜单配置小图标
- 开始Linux之路
- ZOJ 1003 Crashing Balloon
- POJ 1306 Combinations (二项式系数公式求组合数)
- virtualbox+ubuntu设置共享文件夹