现在的位置: 首页 > 综合 > 正文

《华清远见学习手记》之 网络五子棋游戏QT类的设计与实现 (1)

2012年09月28日 ⁄ 综合 ⁄ 共 1778字 ⁄ 字号 评论关闭

网络五子棋游戏QT类的设计与实现 (1)

 

    讲C++课的第一天,老师就让我们编一个C++的五子棋游戏,虽然她给出一些提示,但我还是觉得不可思议,不知从什么地方开始下手 , 于是,拿起中性笔开始在笔记本上鬼画桃符起来:

    1. 按照面向对象的思想结合实际中下五子棋的经验,整个程序至少应该有两个类,一是棋盘类,二是棋子类。

    2. 对于棋盘,它有哪些属性和行为呢?我们知道,棋盘上有格子,所以有一个尺寸规格的属性;开始下棋时,棋盘上应该是干净的,所以需要一个清理棋盘的行为;要把棋放到棋盘上,所以需要一个放置棋子的行为;下完棋后,还需要一个判断谁赢谁输的行为。

    3. 对于棋子,它有哪些属性和行为呢?是的,有黑棋和白棋;还有它们该往哪儿下呢?那么就需要拥有一个棋盘和放置的位置信息;同时,它也有放置棋子行为,放的位置应该是我们下棋的人给它的,所以棋子需要个读取输入信息的行为。

    4. 根据以上思路,大概编写这两个类的头文件:

      4.1 棋盘类  chessBoard.h

       class ChessBoard

       {

        public:

                   void setChessBoard();  // 清理棋盘

                   void setChess(int x , int y,  int chess);// 放置棋子

                   void judgeVictory(); // 判断胜负

        private:

                   int  board[19][19] ; // 棋盘的规格尺寸,一般设为19

       };

      4.2 棋子类 myChess.h

       class MyChess

       {

        public:

                  void readInfo(); // 读取信息

                  void setChess();// 放置棋子

        private:

                  int chessType; // 棋子的类型

                  int currentX;  // 当前放置的X坐标位置

                  int currentY;  // 当前放置的Y坐标位置

                  chessBoard  * board; //当前拥用的棋盘    
  

       };

  5. 程序实现的关键应在于:哪个先下哪个后下?如何放置一个棋子到棋盘上?如何判断哪个颜色的棋子胜负?

    5.1 我们规定先让黑棋下。

    5.2 第一次下棋的时候,棋盘的任何位置都可以,其他时候需要判断欲下的位置是否被占用。

    5.3 从当前放置位置向8个方向(上下,左右,左上右下,左下右上)查找相同颜色的棋子,如果找到5个棋子连在一起,则代表该颜色的棋子获胜。

 

  6. 开始编写棋盘类和棋子类的实现文件 chessBoard.cpp 、myChess.cpp 和 主文件main.cpp,其中main.cpp如下:

    int main()
   {
      int ret;
      ChessBoard ourboard;   
      MyChess    mychs;
      ourboard.setChessBoard();
   
     while(1)   
     {

    do{
        cout<<"White,you go:"<<endl<<endl;
        mychs.readInfo('W');
        ret=mychs.setChess(&ourboard);
       }while(ret==1);
   
    if(ret==2) break;
      do{
           cout<<"Black,you go:"<<endl<<endl;
           mychs.readInfo('B');
           ret = mychs.setChess(&ourboard);
         }while(ret==1);
        if(ret==2) break;
      }
    cout<<"Bye,Bye!"<<endl<<endl;

 }

  7. 编译程序,并反复修改有bug的地方,我的五子棋第一版运行结果如下:

   

抱歉!评论已关闭.