📄 reversi.cpp
字号:
////////////////////////////////////////////////////////////////////////////////// File : Reversi.cpp// Class : Reversi// Description : This class builds the whole window with menubar // and callbacks.// Author : Juergen P. Messerer, juergen.messerer@freesurf.ch// Project : Fl-Reversi// Release Date : 12th March 2003// Revised on :// License : Gnu Public License (GPL)//// Copyright(c) Juergen P. Messerer 2003./////////////////////////////////////////////////////////////////////////////////#include <FL/forms.H>#include <iostream.h>#include <stdlib.h>#include <time.h>#include "Reversi.h"Fl_Menu_Item Reversi::menuEntries[] = { {"&File", 0, 0, 0, 64, 0, 0, 14, 56}, {"&New Game", 0x4006e, (Fl_Callback*)Reversi::s_newGameCB, 0, 0, 0, 0, 14, 56}, {"&Load Game", 0x4006c, (Fl_Callback*)Reversi::s_loadGameCB, 0, FL_MENU_INACTIVE, 0, 0, 14, 56}, {"&Save Game", 0x40073, (Fl_Callback*)Reversi::s_saveGameCB, 0, FL_MENU_INACTIVE|128, 0, 0, 14, 56}, {"&Quit", 0x40071, (Fl_Callback*)Reversi::s_quitGameCB, 0, 0, 0, 0, 14, 56}, {0}, {"&Game", 0, 0, 0, 64, 0, 0, 14, 56}, {"Get &Hint", 0, (Fl_Callback*)Reversi::s_getHintCB, 0, 0, 0, 0, 14, 56}, {"&Undo Move", 0x40075, (Fl_Callback*)Reversi::s_undoMoveCB, 0, 128, 0, 0, 14, 56}, {"Hall of &Fame", 0x40068, (Fl_Callback*)Reversi::s_hallOfFameCB, 0, FL_MENU_INACTIVE, 0, 0, 14, 56}, {0}, {"&Settings", 0, 0, 0, 64, 0, 0, 14, 56}, {"&Computer first", 0, (Fl_Callback*)Reversi::s_switchSidesCB, 0, FL_MENU_TOGGLE|128, 0, 0, 14, 56}, {"Skill", 0, 0, 0, 64, 0, 0, 14, 56}, {"Level 1 (Wimp)", 0x40031, (Fl_Callback*)Reversi::s_setLevelCB, (void*)1, 8, 0, 0, 14, 56}, {"Level 2 (Beginner)", 0x40032, (Fl_Callback*)Reversi::s_setLevelCB, (void*)2, 8, 0, 0, 14, 56}, {"Level 3 (Novice)", 0x40033, (Fl_Callback*)Reversi::s_setLevelCB, (void*)3, 12, 0, 0, 14, 56}, {"Level 4 (Average)", 0x40034, (Fl_Callback*)Reversi::s_setLevelCB, (void*)4, 8, 0, 0, 14, 56}, {"Level 5 (Good)", 0x40035, (Fl_Callback*)Reversi::s_setLevelCB, (void*)5, 8, 0, 0, 14, 56}, {"Level 6 (Expert)", 0x40036, (Fl_Callback*)Reversi::s_setLevelCB, (void*)6, 8, 0, 0, 14, 56}, {"Level 7 (Master)", 0x40037, (Fl_Callback*)Reversi::s_setLevelCB, (void*)7, 8, 0, 0, 14, 56}, {"Level 8 (Wizard)", 0x40038, (Fl_Callback*)Reversi::s_setLevelCB, (void*)8, 8, 0, 0, 14, 56}, {0}, {"Select &Background Color...", 0, (Fl_Callback*)Reversi::s_selectBGColorCB, 0, 128, 0, 0, 14, 56}, {"Animation", 0, (Fl_Callback*)Reversi::s_animationCB, 0, FL_MENU_TOGGLE, 0, 0, 14, 56}, {0}, {"&Help", 0, 0, 0, 64, 0, 0, 14, 56}, {"&About Fl-Reversi", 0, (Fl_Callback*)Reversi::s_aboutReversiCB, 0, 0, 0, 0, 14, 56}, {0}, {0}};Reversi::Reversi() { /* initialize random number generator */ srand(::time(0)); m_mainWindow = new Fl_Double_Window( 274, 317, "Fl-Reversi" ); m_mainWindow->user_data((void*)(this)); m_menuBar = new Fl_Menu_Bar(0, 0, 274, 25); m_menuBar->menu(menuEntries); m_board = new Board( 0, 25, 274, 274 ); m_board->updateAnimations( FALSE ); m_aboutDlg = new AboutDlg(); m_mainWindow->end();}//-----------------------------------------------------------------------------void Reversi::show( int argc, char** argv ) { Fl::visual(FL_DOUBLE|FL_INDEX); m_mainWindow->show();}//-----------------------------------------------------------------------------void Reversi::s_newGameCB( Fl_Menu_ *o, void * ){ ((Reversi*)(o->parent()->user_data()))->newGameCB( );}//-----------------------------------------------------------------------------void Reversi::newGameCB() { m_board->newGame();}//-----------------------------------------------------------------------------void Reversi::s_loadGameCB( Fl_Menu_ *o, void * ) { ((Reversi*)(o->parent()->user_data()))->loadGameCB( );}//-----------------------------------------------------------------------------void Reversi::loadGameCB() { cout << "Load Game" << endl;}//-----------------------------------------------------------------------------void Reversi::s_saveGameCB( Fl_Menu_ *o, void * ) { ((Reversi*)(o->parent()->user_data()))->saveGameCB( );}//-----------------------------------------------------------------------------void Reversi::saveGameCB() { cout << "Save Game" << endl;}//-----------------------------------------------------------------------------void Reversi::s_quitGameCB( Fl_Menu_*, void * ){ cout << "Thank you for playing flreversi!\n"; exit(0);}//-----------------------------------------------------------------------------void Reversi::s_getHintCB( Fl_Menu_ *o, void * ) { ((Reversi*)(o->parent()->user_data()))->getHintCB( );}//-----------------------------------------------------------------------------void Reversi::getHintCB() { m_board->getHint();}//-----------------------------------------------------------------------------void Reversi::s_undoMoveCB( Fl_Menu_ *o, void * ) { ((Reversi*)(o->parent()->user_data()))->undoMoveCB( );}//-----------------------------------------------------------------------------void Reversi::undoMoveCB() { m_board->undoMove();}//-----------------------------------------------------------------------------void Reversi::s_switchSidesCB( Fl_Menu_ *o, void *v ) { ((Reversi*)(o->parent()->user_data()))->switchSidesCB( o, v );}//-----------------------------------------------------------------------------void Reversi::switchSidesCB( Fl_Menu_ *o, void *v ) { m_board->updateComputerBegins( o->mvalue()->value() );}//-----------------------------------------------------------------------------void Reversi::s_hallOfFameCB( Fl_Menu_ *o, void * ) { ((Reversi*)(o->parent()->user_data()))->hallOfFameCB( );}//-----------------------------------------------------------------------------void Reversi::hallOfFameCB() { cout << "Hall of Fame" << endl;}//-----------------------------------------------------------------------------void Reversi::s_setLevelCB( Fl_Menu_ *o, void *v ) { ((Reversi*)(o->parent()->user_data()))->setLevelCB( o, v );}//-----------------------------------------------------------------------------void Reversi::setLevelCB( Fl_Menu_*, void *arg ) { m_board->updateStrength((int)arg);}//-----------------------------------------------------------------------------void Reversi::s_selectBGColorCB( Fl_Menu_ *o, void * ) { ((Reversi*)(o->parent()->user_data()))->selectBGColorCB( );}//-----------------------------------------------------------------------------void Reversi::selectBGColorCB() { cout << "Select Background color" << endl;}//-----------------------------------------------------------------------------void Reversi::s_animationCB( Fl_Menu_ *o, void *v ) { ((Reversi*)(o->parent()->user_data()))->animationCB( o, v );}//-----------------------------------------------------------------------------void Reversi::animationCB( Fl_Menu_ *o, void *v ) { if( o->mvalue()->value() > 0) m_board->updateAnimations( TRUE ); else m_board->updateAnimations( FALSE );}//-----------------------------------------------------------------------------void Reversi::s_aboutReversiCB( Fl_Menu_ *o, void *arg ) { ((Reversi*)(o->parent()->user_data()))->aboutReversiCB( );}//-----------------------------------------------------------------------------void Reversi::aboutReversiCB() { m_aboutDlg->show();}//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -