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

原创 2011年01月16日 15:48:00

网络五子棋游戏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的地方,我的五子棋第一版运行结果如下:

   

Qt网络五子棋游戏

网络五子棋: 描述:Qt学习结束后的一个总结性的练习项目,实现两个客户端(邀请和接受方)联机游戏,其它的客户端观看的功能。总代码量1200行。服务器为linux系统编程实现共370行,客户端Qt实现共...
  • baiding1123
  • baiding1123
  • 2013年12月07日 23:43
  • 5451

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

经过一段时间的C++和QT的学习,打算好好的改造一下前面的C++五子棋游戏
  • boat_man
  • boat_man
  • 2011年01月16日 19:31
  • 2793

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

第一版的五子棋游戏实在是太简陋了!谁愿意玩这样的游戏?连我自己都觉得没劲,赶快给它增加一个友好一点的界面吧!...
  • boat_man
  • boat_man
  • 2011年01月16日 16:35
  • 1870

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

第二版的五子棋游戏确实比第一版玩起来好多了。可是,我怎么越看越觉得不怎么像样,特别是棋子!...
  • boat_man
  • boat_man
  • 2011年01月16日 17:39
  • 2168

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

第四版的五子棋游戏界面虽然漂亮多了,但是只能自个跟自个下或者两个人轮着下...
  • boat_man
  • boat_man
  • 2011年01月16日 20:15
  • 2704

Java实现一个简单的两人五子棋游戏(一) 系统设计

1)模块划分 主模块:调用其他模块实现五子棋功能 棋盘模块:绘制五子棋棋盘 落子模块:让玩家在合法位置上落子 功能控制模块:包含了三个功能函数,可被其他模块调用。主要功能为画棋子、判断胜负和行棋方转换...
  • v_xchen_v
  • v_xchen_v
  • 2016年12月04日 13:12
  • 2694

Qt小游戏开发:五子棋(带AI功能)

写了一个带AI的五子棋小游戏,AI的表现还可以~ 预览 步骤 整体的代码结构,一个游戏逻辑类,一个UI类 1 定义游戏数据结构 // 游戏类型,双人还是AI(目前固定让AI下...
  • u012234115
  • u012234115
  • 2016年12月25日 18:22
  • 5062

基于Java的“多功能五子棋”游戏的设计和实现

基于Java的“多功能五子棋”游戏的设计和实现 引言       随着经济社会的迅速发展,人们生活水平有了很大的提高,人们的生活观念也发生了巨大的改 变。高品质的生活、现代化得生活方式成为人们共同追求...
  • clx55555
  • clx55555
  • 2016年12月09日 19:26
  • 2448

JAVA实战3——五子棋游戏设计

一、实践目标:        1.掌握JavaGUI界面设计        2.掌握鼠标事件的监听(MouseListener,MouseMotionListener) 二、实践内容:       设...
  • Selectnew
  • Selectnew
  • 2015年06月09日 22:09
  • 1638

基于qt的五子棋 人人对战 人机对战 程序与程序对战

qt 五子棋
  • qq789045
  • qq789045
  • 2016年03月24日 17:37
  • 1946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《华清远见学习手记》之 网络五子棋游戏QT类的设计与实现 (1)
举报原因:
原因补充:

(最多只允许输入30个字)