利用c++设计四子棋

编写一个"人机对弈"的下棋程序,四个棋子连成一线即为赢。人走棋的合法输入为0-6。棋盘是垂直放置,棋子落到底部。

 

程序功能参考可执行程序game1.exe

说明:这个程序可以选择是计算机先走还是人先走,我们的作业不要求这样,固定为人先走,计算机后走即可

 

程序结构可以参考如下结构,也可以按自己思路。

 

class game//这是个抽象类,抽象的是所有人走一步,计算机走一步的对弈游戏

    {

    public:

  enum who { HUMAN, NEUTRAL, COMPUTER }; 

 

  game( ) { move_number = 0; }

  virtual ~game( ) { }

  who play( ); //人先走,计算机后走,返回值是游戏的赢者,后面给出了此函数的定义

    protected:

        //以下虚函数可以被覆盖,也可以不被覆盖

  virtual void display_message(const string& message)const;//在屏幕显示信息message

             virtual int get_user_move( )const; // 输出"Your move,please:",然后接受用户输入,并将输入返回

  virtual who last_mover( ) const 

   { return (move_number % 2 == 1 ? HUMAN : COMPUTER); }

  virtual int moves_completed( ) const { return move_number; }

  virtual who next_mover( ) const

   { return (move_number % 2 == 0 ? HUMAN : COMPUTER); }

  

        // 以下虚函数必须被覆盖

     virtual void make_move(const int& move)//将棋子真正下到棋盘上,此函数被子类覆盖

       { ++move_number; }

     virtual void restart( ) { move_number = 0; }//开始新的棋局

 

        //以下为纯虚函数 

        virtual who winning( )const =0; //返回胜利者 

     virtual void display_status( ) = 0; //显示游戏棋盘的当前状态

     virtual bool is_game_over( ) = 0; //如果游戏结束,返回真

    virtual bool is_legal(const int& move) = 0; //如果给定走法为合法,就返回真

        virtual void make_computer_move( )=0; //计算计算机所有的可能的走法,选出一种最好的,并调用make_move(best_move)

      

 private:

  int move_number; //当前已走的步数

  void make_human_move( ); //调用 get_user_move( ),并用is_legal(move)判断是否合法输入,若是则调用make_move(move)

    };

 

class c4 : public game//这个类是我们具体要实现的“四子棋”

    {

    public:

     c4( ) {restart( );}

    protected:

  

                virtual void make_move(const int& move); // 修改data[][],many_used[]和most_recent_column的值,并调用game::make_move(move)

  virtual void restart( ); //将data[6][7]各元素置为NEUTRAL,将many_used[7]各元素置为0 ,再调用game::restart();

         virtual game::who winning( )const ;

         virtual void display_status( ) ; //显示棋盘的状态

  virtual bool is_game_over( ) ;

  virtual bool is_legal(const int& move) ; 

  virtual void make_computer_move( );  

好家伙,朗青表示很赞