五子棋设计报告

时间:2024.4.21

北华大学

电气信息工程学院

C++项目实习

       

       

 

姓名:王文新

  班级:通信12.1

                    学号:23

                    组长:田莉莉

                    指导教师:高玉峰

                    实习日期:8月25日~9月10日

                

                

 

 

 

一、开发环境

Microsoft VisualC++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。在这次实习中,我们主要采用的是

Visual C++ 6.0提供的MFC类库,它是一个很大的、扩展了C++类层次结构,使开发Windows应用程序变得很容易。其中,MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。并且,MFC也 提供了MFC AppWizard 自动生成框架。MFC是微软提供的VC++可以调用的类库,其中封装了开发人员常用的类,使编程效率大大的提高。

二、背景概要

五子棋是我国古代传统的黑白棋种之一,大约在南北朝时期随围棋一起先后传入朝鲜、日本等地。五子棋在日本又叫“连珠棋”。通过一系列的规则变化使连珠五子棋这个简单的游戏复杂化、规范化,而最终成为今天的职业连珠五子棋,同时也成为一种国际化赛棋。 

五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征,“短”、”平”、“快”,又有古典哲学的高深学问“阴阳易理”;其既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;五子棋文化源远流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。是中西文化的交流点,是古今哲理的结晶。

三、模块分析

游戏规则类:主要负责各种类的调用及游戏规则的实现。 ? 棋盘窗口类:主要负责棋盘和棋子等的更新和显示。 ? 设置对话框类:主要负责参数的设置与连接。 ? 网络通信类:主要负责游戏的网络通信。 ? 网络协议类:主要负责游戏网络通信协议的实现。

1。棋盘窗口类

定义头文件

#if !defined(AFX_BOARD_H__5959DFF1_31AC_463D_969E_D68EA68C106F__INCLUDED_)

#define AFX_BOARD_H__5959DFF1_31AC_463D_969E_D68EA68C106F__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include "stdafx.h"

class CBoard : public CWnd 

{

private:

    CImageList m_iml; // 棋子图像

    int m_color; // 玩家颜色

    BOOL m_bWait; // 等待标志

BOOL m_bOldWait;

public:

CBoard();

virtual ~CBoard();

           void RestoreWait();

    void Clear( BOOL bWait );

    void SetColor(int color);

    int  GetColor() const;

    void SetWait( BOOL bWait );

    void SetData( int x, int y, int color );

    void DrawGame();

void Draw(int x, int y, int color);

void Receive();

void Over(int x, int y);

protected:

    afx_msg void OnPaint();

    afx_msg void OnLButtonUp( UINT nFlags, CPoint point );

    DECLARE_MESSAGE_MAP()

};

#endif // !defined(AFX_BOARD_H__AA8DF826_F12E_4E8F_BA07_F2144FF643B4__INCLUDED_)

旗子及棋盘的绘制调用

#include "StdAfx.h"

#include "Board.h"

#include "Resource.h"

#include "Rule.h"

#include "FiveChessDlg.h"

#define MAX_LEN 256                              /*定义最大长度*/

//////////////////////////////////////////////////////////////////////////

// 构造函数,初始化棋盘数据以及图像数据

//////////////////////////////////////////////////////////////////////////

CBoard::CBoard()

{

    // 初始化图像列表

    m_iml.Create( 24, 24, ILC_COLOR24 | ILC_MASK, 0, 2 );

    // 载入黑、白棋子掩码位图

    CBitmap bmpBlack, bmpWhite;

    bmpBlack.LoadBitmap( IDB_BMP_BLACK );

    m_iml.Add( &bmpBlack, 0xff00ff );

    bmpWhite.LoadBitmap( IDB_BMP_WHITE );

    m_iml.Add( &bmpWhite, 0xff00ff );

}

//////////////////////////////////////////////////////////////////////////

// 析构函数

//////////////////////////////////////////////////////////////////////////

CBoard::~CBoard()

{

}

// 消息映射表

BEGIN_MESSAGE_MAP( CBoard, CWnd )

//{{AFX_MSG_MAP(CBoard)

    ON_WM_PAINT()

    ON_WM_LBUTTONUP()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////////////////

// 处理WM_PAINT消息

//////////////////////////////////////////////////////////////////////////

void CBoard::OnPaint()

{

    CPaintDC dc( this );

    CDC MemDC;

    MemDC.CreateCompatibleDC( &dc );// 装载棋盘

   

    CBitmap bmp;

    CPen pen;

    bmp.LoadBitmap( IDB_BMP_QP );// 装载棋盘图片

   

    pen.CreatePen( PS_SOLID, 1, 0xff );

    MemDC.SelectObject( &bmp );//选择对象

    MemDC.SelectObject( &pen );

    MemDC.SetROP2( R2_NOTXORPEN );//去除图片背景

    // 根据棋盘数据绘制棋子

    int x, y;

    POINT pt;

    for ( y = 0; y < 15; y++ )

    {

        for ( x = 0; x < 15; x++ )

        {

            if ( -1 != m_data[x][y] )

            {

                pt.x = 12 + 25 * x;

                pt.y = 84 + 25 * y;

                m_iml.Draw( &MemDC, m_data[x][y], pt, ILD_TRANSPARENT );

            }

        }

    }

// 完成绘制

    dc.BitBlt( 0, 0, 395, 472, &MemDC,0, 0, SRCCOPY );

}

如下图所示

2.设置对话框类

#if !defined(AFX_SETUPDLG_H__44F243EF_655E_4902_97A7_1890780CF9FF__INCLUDED_)

#define AFX_SETUPDLG_H__44F243EF_655E_4902_97A7_1890780CF9FF__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include "stdafx.h"

#include "Resource.h"

/////////////////////////////////////////////////////////////////////////////

// CSetupDlg dialog

class CSetupDlg : public CDialog

{

// Construction

public:

       CSetupDlg(CWnd* pParent = NULL);   // standard constructor

// Dialog Data

       //{{AFX_DATA(CSetupDlg)

       enum { IDD = IDD_SETUP_DLG };

       CIPAddressCtrl     m_ip_addr;

       UINT      m_net_port;

       //}}AFX_DATA

public:

       BOOL m_isHost;           //主机类型,TRUE:主机 FALSE:客户机

       CString m_strHostIP;//IP 地址

// Overrides

       // ClassWizard generated virtual function overrides

       //{{AFX_VIRTUAL(CSetupDlg)

       protected:

       virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

       //}}AFX_VIRTUAL

// Implementation

protected:

       // Generated message map functions

       //{{AFX_MSG(CSetupDlg)

       virtual void OnCancel();//取消键响应

       virtual void OnOK();

       afx_msg void OnHostOption();//选中主机选项响应

       afx_msg void OnClientOption();//选中客户机选项响应

       virtual BOOL OnInitDialog();

       //}}AFX_MSG

       DECLARE_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SETUPDLG_H__44F243EF_655E_4902_97A7_1890780CF9FF__INCLUDED_)

构建主机客机的接

3.网络通信类

网络通信就是网络之间沟通、交流的桥梁,只有相同网络协议的计算机才能进行信息的沟通与交流。这就好比人与人之间交流所使用的各种语言一样,只有使用相同语言才能正常、顺利地进行交流。从专业角度定义,网络协议是计算机在网络中实现通信时必须遵守的约定,也就是通信协议。主要是对信息传输的速率、传输代码、代码结构、传输控制步骤、出错控制等作出规定并制定出标准。

#if !defined(AFX_CONNECT_H__216C3E4C_EE5E_49BD_891E_9D738A98B676__INCLUDED_)

#define AFX_CONNECT_H__216C3E4C_EE5E_49BD_891E_9D738A98B676__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include <afxsock.h>

class CConnect : public CAsyncSocket 

{

public:

       CConnect();

       virtual ~CConnect();

protected:

       virtual void OnAccept( int nErrorCode );//主机建立连接成功响应函数

       virtual void OnConnect( int nErrorCode );//客户端建立连接成功响应函数

       virtual void OnReceive( int nErrorCode );//接收数据响应函数

       virtual void OnClose( int nErrorCode );//关闭端口时响应函数

};

#endif // !defined(AFX_CONNECT_H__216C3E4C_EE5E_49BD_891E_9D738A98B676__INCLUDED_)

#include "stdafx.h"

#include "FiveChessDlg.h"

#include "Connect.h"

#include "Board.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CConnect::CConnect()

{

}

CConnect::~CConnect()

{

}

void CConnect::OnAccept( int nErrorCode )//主机建立连接成功响应函数

{

       CFiveChessDlg * pDlg = (CFiveChessDlg*)AfxGetMainWnd();

       pDlg->Accept();//调用祝对话框的处理函数

       pDlg->SetMenuState(FALSE);

}

void CConnect::OnClose( int nErrorCode )//关闭端口响应函数

{

       CFiveChessDlg * pDlg = (CFiveChessDlg*)AfxGetMainWnd();

       pDlg->MessageBox( _T("对方已经退出游戏"), _T("五子棋"), MB_ICONINFORMATION);

       pDlg->SetMenuState(TRUE);

       pDlg->m_board.SetWait(TRUE);//设置等待状态

       pDlg->m_conncet.Close();//关闭监听连接端口

       pDlg->m_sock.Close();//关闭连接端口

       pDlg->m_bIsConnect = FALSE;//设置连接状态变量

   

}

void CConnect::OnConnect( int nErrorCode )//客户端建立连接成功响应函数

{

       CFiveChessDlg * pDlg = (CFiveChessDlg*)AfxGetMainWnd();

       pDlg->Connect();//调用主对画框

       pDlg->SetMenuState(FALSE);   

}

void CConnect::OnReceive( int nErrorCode )//接收响应函数

{

    CBoard *pBoard = (CBoard *)AfxGetMainWnd()->GetDlgItem( IDC_BOARD );

    pBoard->Receive();//调用棋盘类的接受处理函数

}

连接成功

4.游戏规则类

一:无禁手规则:

黑白双方依次落子,由黑先下,当棋盘上有三个子时(两黑一白),如果此时白方觉得开的局不利于自已可以提出交换,黑方无条件接受!也可以不交换,主动权在白方!然后继续下棋,任一方先在棋盘上形成横向、竖向、斜向的连续的相同颜色的五个(含五个以上)棋子的一方为胜。

二:禁手规则

禁手是针对黑棋而言的,禁手是指一手黑棋棋形成:双活三,双四,长连(五子以上)为输!这种方法限制了黑棋先行的优势!禁手对白棋无效!

#if !defined(AFX_RULE_H__2972EE6C_5A44_45B0_AD67_39204309FC3A__INCLUDED_)

#define AFX_RULE_H__2972EE6C_5A44_45B0_AD67_39204309FC3A__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#define _WIN 0x00

#define _LOST 0x01

#define _OTHER 0x02

class CRule 

{

public:

    CRule();

    virtual ~CRule();

    int Win(int color, int x, int y);       //胜负判断接口函数

    BOOL Ban(int x, int y, int color);      //禁手判断接口函数

private:

    BOOL forbid2(int x, int y);             //非连子禁手判断

    BOOL forbid1(int x, int y);             //连子禁手判断

};

#endif // !defined(AFX_RULE_H__2972EE6C_5A44_45B0_AD67_39204309FC3A__INCLUDED_)

#include "stdafx.h"

#include "FiveChess.h"

#include "Rule.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

#define NONE -1

CRule::CRule()

{

}

CRule::~CRule()

{

}

// 禁手判断接口函数

BOOL CRule::Ban(int x, int y, int color)

{

    if(forbid1(x, y) || forbid2(x, y))

    {   return TRUE;

    }

    return FALSE;

}

// 连五判断

// 返回 0 为胜利 1为禁手 2为无状态

int CRule::Win(int color, int xpos, int ypos)

{

    int x, y;

    // 判断横向

    for ( y = 0; y < 15; y++ )

    {

        for ( x = 0; x < 11; x++ )

        {

            if ( color == m_data[x][y] && color == m_data[x + 1][y] &&

                color == m_data[x + 2][y] && color == m_data[x + 3][y] &&

                color == m_data[x + 4][y] )

            {

                return _WIN;

            }

        }

    }

    // 判断纵向

    for ( y = 0; y < 11; y++ )

    {

        for ( x = 0; x < 15; x++ )

        {

            if ( color == m_data[x][y] && color == m_data[x][y + 1] &&

                color == m_data[x][y + 2] && color == m_data[x][y + 3] &&

                color == m_data[x][y + 4] )

            {

                return _WIN;

            }

        }

    }

    // 判断“\”方向

    for ( y = 0; y < 11; y++ )

    {

        for ( x = 0; x < 11; x++ )

        {

            if ( color == m_data[x][y] && color == m_data[x + 1][y + 1] &&

                color == m_data[x + 2][y + 2] && color == m_data[x + 3][y + 3] &&

                color == m_data[x + 4][y + 4] )

            {

                return _WIN;

            }

        }

    }

    // 判断“/”方向

    for ( y = 0; y < 11; y++ )

    {

        for ( x = 4; x < 15; x++ )

        {

            if ( color == m_data[x][y] && color == m_data[x - 1][y + 1] &&

                color == m_data[x - 2][y + 2] && color == m_data[x - 3][y + 3] &&

                color == m_data[x - 4][y + 4] )

            {

                return _WIN;

            }

        }

    }

    if(color == BLACK)

    {

        if(Ban(xpos, ypos, color))

        {

            return _LOST;

        }

    }

    return _OTHER;

}

//////////////////////////////////////////////////////////////////////////

// 连子禁手判断

// 返回TRUE为禁手

//////////////////////////////////////////////////////////////////////////

BOOL CRule::forbid1(int x, int y)

{    

    int tab[9]={0};

    int w[4]={0};

    int j3=0,j4=0,j6=0;

    int t1=0,t2=0,t3=0,t4=0;

    //水平方向

    for(int i1=1;i1<5;i1++)

    {   if(m_data[x-i1][y]==BLACK)

        {       tab[1]++;

        }

        else if(m_data[x+1][y]==WHITE||m_data[x-i1][y]==WHITE)

        {

            tab[1]=0;

            break;  }

    }

       for(int i2=1;i2<5;i2++)

    {

        if(m_data[x+i2][y]==BLACK)

        {

            tab[1]++;

        }

        else if(m_data[x-1][y]==WHITE||m_data[x-i2][y]==WHITE)

        {

            tab[5]=0;

            break;

        }

    }

    if(tab[1]+tab[5]==2&&t1==1)

    {

        w[0]=0;

    }

    else

    {

        w[0]=tab[1]+tab[5];

    }

    //竖直方向

    for(int i3=1;i3<5;i3++)

    {

        if(m_data[x][y-i3]==BLACK)

        {

            tab[2]++;

        }

        else if(m_data[x][y+1]==WHITE||m_data[x][y+i3]==WHITE)

        {

            tab[2]=0;

            break;

        }

    }

      

    for(int i4=1;i4<5;i4++)

    {

        if(m_data[x][y+i4]==BLACK)

        {

            tab[2]++;

        }

        else if(m_data[x][y-1]==WHITE||m_data[x][y+i4]==WHITE)

        {

            tab[6]=0;

            break;

        }

    } if(tab[2]+tab[4]==2&&t2==1){w[1]=0;

    }

    else

    {

        w[1]=tab[2]+tab[6];

    }

    //右下方向

    for(int i5=1;i5<5;i5++)

    {

        if(m_data[x-i5][y-i5]==BLACK)

        {

            tab[1]++;

        }

        else if(m_data[x+1][y+1]==WHITE||m_data[x-i5][y-i5]==WHITE)

        {

            tab[3]=0;

            break;

        }

    }

      

    for(int i6=1;i6<5;i6++)

    {

        if(m_data[x+i6][y+i6]==BLACK)

        {

            tab[7]++;

        }

        else if(m_data[x-1][y-1]==WHITE||m_data[x+i6][y+i6]==WHITE)

        {

            tab[7]=0;break;}if(tab[3]+tab[6]==2&&t3==1){w[2]=0;

    }

    else

    {

        w[2]=tab[3]+tab[7];

    }

    //左下方向

    for(int i7=1;i7<5;i7++)

    {

        if(m_data[x-i7][y+i7]==BLACK)

        {

            tab[4]++;

        }

        else if(m_data[x+1][y-1]==WHITE||m_data[x-i7][y+i7]==WHITE)

        {

            tab[4]=0;

            break;}for(int i8=1;i8<5;i8++)

    {

        if(m_data[x+i8][y-i8]==BLACK)

        {

            tab[8]++;

        }

        else if(m_data[x-1][y+1]==WHITE||m_data[x+i8][y-i8]==WHITE)

        {

            tab[8]=0;

            break;}}if(tab[3]+tab[6]==2&&t4==1)

    {w[3]=0;}else

    {

        w[3]=tab[4]+tab[8];

    }for(int i=0;i<4;i++)

    {

        if(w[i]==2)

        {

            j3++;

        }

        else if(w[i]==3)

        {

            j4++;

        }

        else if(w[i]==5)

        {

            j6++;

        }

    }if(j3==2&&j4!=2||j4==2||j3==2&&j4==1||j6==1)

    {

       return TRUE;

    }return FALSE;

}

// 非连子禁手判断

// 返回TRUE为禁手

BOOL CRule::forbid2(int x, int y)

{  

     //三三禁手

   if((m_data[x-1][y]==BLACK&&m_data[x-2][y]==BLACK&&m_data[x-3][y]==NONE&&m_data[x+1][y]==NONE

         ||m_data[x+1][y]==BLACK&&m_data[x+2][y]==BLACK&&m_data[x+3][y]==NONE&&m_data[x-1][y]==NONE)

         &&(m_data[x][y+1]==NONE&&m_data[x][y+2]==BLACK&&m_data[x][y+3]==BLACK&&m_data[x][y+4]==NONE&&m_data[x][y-1]==NONE)

         ||m_data[x][y-1]==NONE&&m_data[x][y-2]==BLACK&&m_data[x][y-3]==BLACK&&m_data[x][y-4]==NONE&&m_data[x][y+1]==NONE)

     {

         return TRUE;

     }

     else if((m_data[x][y+1]==BLACK&&m_data[x][y+2]==BLACK&&m_data[x][y+3]==NONE&&m_data[x][y-1]==NONE

              ||m_data[x][y-1]==BLACK&&m_data[x][y-2]==BLACK&&m_data[x][y-3]==NONE&&m_data[x][y+1]==NONE)

         &&(m_data[x+1][y]==NONE&&m_data[x+2][y]==BLACK&&m_data[x+3][y]==BLACK&&m_data[x+4][y]==NONE&&m_data[x-1][y]==NONE

             ||m_data[x-1][y]==NONE&&m_data[x-2][y]==BLACK&&m_data[x-3][y]==BLACK&&m_data[x+1][y]==NONE&&m_data[x-4][y]==NONE))

     {

         return TRUE;

     }

     else if((m_data[x-1][y-1]==BLACK&&m_data[x-2][y-2]==BLACK&&m_data[x-3][y-3]==NONE&&m_data[x+1][y+1]==NONE

          ||m_data[x+1][y+1]==BLACK&&m_data[x+2][y+2]==BLACK&&m_data[x+3][y+3]==NONE&&m_data[x-1][y-1]==NONE)

          &&(m_data[x+1][y-1]==NONE&&m_data[x+2][y-2]==BLACK&&m_data[x+3][y-3]==BLACK&&m_data[x+4][y-4]==NONE

          ||m_data[x-1][y+1]==NONE&&m_data[x-2][y+2]==BLACK&&m_data[x-3][y+3]==BLACK&&m_data[x-4][y+4]==NONE))

     {

         return TRUE;

     }

     else if((m_data[x-1][y+1]==BLACK&&m_data[x-2][y+2]==BLACK&&m_data[x-3][y+3]==NONE&&m_data[x+1][y-1]==NONE

          ||m_data[x+1][y-1]==BLACK&&m_data[x+2][y-2]==BLACK&&m_data[x+3][y-3]==NONE&&m_data[x-1][y+1]==NONE)

          &&(m_data[x+1][y+1]==NONE&&m_data[x+2][y+2]==BLACK&&m_data[x+3][y+3]==BLACK&&m_data[x+4][y+4]==NONE

          ||m_data[x-1][y-1]==NONE&&m_data[x-2][y-2]==BLACK&&m_data[x-3][y-3]==BLACK&&m_data[x-4][y-4]==NONE))

     {

         return TRUE;

     }

     //四四有界禁手

     else if((m_data[x-1][y]==BLACK&&m_data[x-2][y]==NONE&&m_data[x-3][y]==BLACK&&m_data[x-4][y]==BLACK&&m_data[x-6][y]==NONE

        &&m_data[x-5][y]==0&&m_data[x+2][y]==BLACK&&m_data[x+3][y]==BLACK&&m_data[x+1][y]==NONE&&m_data[x+4][y]==0&&m_data[x+5][y]==NONE)

         ||(m_data[x][y+1]==NONE&&m_data[x][y+2]==BLACK&&m_data[x][y+3]==BLACK&&m_data[x][y+4]==WHITE&&m_data[x][y+5]==NONE

         &&m_data[x][y-1]==BLACK&&m_data[x][y-2]==NONE&&m_data[x][y-3]==BLACK&&m_data[x][y-4]==BLACK&&m_data[x][y-5]==WHITE&&m_data[x][y-6]==NONE)

         ||(m_data[x][y+1]==BLACK&&m_data[x][y+2]==NONE&&m_data[x][y+3]==BLACK&&m_data[x][y+4]==BLACK&&m_data[x][y+5]==WHITE&&m_data[x][y+6]==NONE

         &&m_data[x][y-1]==NONE&&m_data[x][y-2]==BLACK&&m_data[x][y-3]==BLACK&&m_data[x][y-4]==WHITE&&m_data[x][y-5]==WHITE)

         ||(m_data[x][y+1]==NONE&&m_data[x][y+2]==BLACK&&m_data[x][y+3]==BLACK&&m_data[x][y+4]==WHITE&&m_data[x][y+5]==NONE

         &&m_data[x][y-6]==NONE&&m_data[x][y-1]==BLACK&&m_data[x][y-2]==NONE&&m_data[x][y-3]==BLACK&&m_data[x][y-4]==BLACK&&m_data[x][y-5]==WHITE))

     {

         return TRUE;

     }

     //四四无界禁手

     else if((m_data[x-1][y]==BLACK&&m_data[x-2][y]==NONE&&m_data[x-3][y]==BLACK&&m_data[x+1][y]==BLACK&&m_data[x+2][y]==NONE&&m_data[x+3][y]==BLACK)

            ||(m_data[x][y+1]==BLACK&&m_data[x][y+2]==NONE&&m_data[x][y+3]==BLACK&&m_data[x][y-1]==BLACK&&m_data[x][y-2]==NONE&&m_data[x][y-3]==BLACK)

            ||(m_data[x+1][y+1]==BLACK&&m_data[x+2][y+2]==NONE&&m_data[x+3][y+3]==BLACK&&m_data[x-1][y-1]==BLACK&&m_data[x-2][y-2]==NONE&&m_data[x-3][y-3]==BLACK)

            ||(m_data[x-1][y+1]==BLACK&&m_data[x-2][y+2]==NONE&&m_data[x-3][y+3]==BLACK&&m_data[x+1][y-1]==BLACK&&m_data[x+2][y-2]==NONE&&m_data[x+3][y-3]==BLACK))

     {

         return TRUE;

     }

     return FALSE;

}

游戏及胜利截图

四.参考文献

参考文献  Bjarn StroustrupC++程序设计语言,高等教育出版社 李春葆等 数据结构教程(第三版), 清华大学出版社 万常选 舒蔚等C语言与程序设计方法,科学出版社 张军等 Visual C++实例精通, 机械工业出版社 王艳萍   Windows程序设计,人民邮电出版社

五.实习心得及体会

这次的实习,给了我很多经验,像对于类的编写的完善,还有如何去深度思考一个问题,然后完美的解决它。这些都是我以前所欠缺的。因此,这次作业帮助了我很多,让我慢慢成熟起来。       教训:在编写main函数时,还有点小问题。尝试过独自解决,但是没有效果。后来在其他队友的帮助下,我终于知道了自己错在哪里。也让我明白了一个道理:团结就是力量!       收获:其实收获很多,不仅加深了我C++的认识,也让我更进一步的了解到C与C++的不同之处,以前将这些好像都好虚幻。      现在的话,有点点凝实的感觉。给我最深印象的是类的应用以及派生,觉得很方便,很实用。还有各个模块之间的调用也是很实用。在另一方面,我觉得一个团队就是如果能像一个个体一样,那么这个团队一定能够战无不胜。界面化程序,呈现在荧屏的那千行代码,让人怦然心动,此前一直都没有做过这样的作业。  虽然因为自我水平的问题,我没能跟他们一块编程(感觉自己可能会帮倒忙),可是在后期整理,写文档,还有期间每次他们做好了什么都会给我试验展示一下,在这之间,我感觉自己是这个团体中的一员,也被同团员的各种性格所感动。感觉他们为了我们这个整体付出了很多的努力,去借很多的书,问一些参加了科研团队的同学一些没有学过的东西,这些都让我看到他们的闪光点,意识到了他们的可爱。  通过此次的实习,让我感触最深的就是小组成员的合作。每个成功的项目必然有着强大的团队,而团队成员亲密合作恰恰是最为重要的。此次作业中,word排版,核心代码编辑,我和小组成员合作得很好,正是队友的团结,才促成项目的完成!  总的来说,我收获了很多,感触了很多,在一个科学团队里,需要具备各种才能的人的合作,而我,正是其中的一员。

更多相关推荐:
五子棋-课程设计报告

五子棋-课程设计报告单位分院(系)专业学号学生姓名指导教师完成日期20xx年05月日摘要五子棋的历史:五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。发展于日本,流行于欧美。容易上手…

五子棋程序设计报告

五子棋程序设计报告班级:姓名:学号:指导老师:20XX/1/07一、课程设计题目与要求题目:网络五子棋游戏。功能要求:该软件应包括服务器端程序和客户端程序两个部分,要求实现的功能如下。客户端功能要求:(1)友好…

五子棋设计报告(完整版)

计算机网络设计报告题目班级姓名指导教师局域网五子棋设计计算机082班颜晓云杨松波20xx年7月15日目录1概论错误未定义书签2功能介绍错误未定义书签3程序流程图错误未定义书签4实现代码错误未定义书签5总结体会错...

五子棋JAVA语言课程设计报告

封面Java语言程序设计课程设计报告分院电信分院班级电子商务1班姓名何芳林学号20xx0210460123指导教师吴军良课设时间20xx1220至20xx1231二O一一年十二月二十日10电商1班何芳林Java...

五子棋游戏 课程设计报告(含源代码可以运行)

五子棋游戏课程设计报告(含源代码可以运行)目录第一章需求分析.11.1总体分析.11.2初始化.11.3主循环控制模块.11.4玩家下子.11.5盘面分析填写棋型表.21.6对方下子.21.7胜负判断.2第二章…

五子棋程序设计报告

宜宾学院面向对象课程设计学院计算机与信息工程学院班级20xx级6班学生姓名郑亮学号141106020设计地点单位宜宾学院设计题目双人五子棋完成日期20xx年12月5日目录1问题要求及任务描述411题目要求412...

五子棋游戏程序设计报告

计算机学院网络工程专业程序设计综合课程设计报告20xx20xx学年第一学期学生姓名学生班级学生学号指导教师20xx年12月30日双人五子棋目录第一章课程设计目的和要求111课程设计的目的112课程设计的要求1第...

C语言五子棋源代码 - 课程设计报告

计算机程序设计基础C语言课程设计题目简易五子棋软件设计院系部信息工程学院姓名张卓班级自103学号10072820xx年7月5日北京目录1课程设计报告311课题描述312需求分析313概要设计4131功能模块41...

基于java程序的五子棋游戏设计 开题报告

陕西科技大学镐京学院毕业设计论文任务书系专业班级学生题目基于JAVA程序的五子棋游戏设计毕业设计论文从20xx年3月20日起到20xx年6月25日课题的意义及培养目标课题意义随着社会经济的迅速发展人们生活水平有...

五子棋游戏设计毕业论文

学号888888888888毕业设计论文题目基于C语言或JAVA语言实现的五子棋游戏专业软件技术班级学生姓名导师姓名起止时间20xx年9月至20xx年11月计算机学院摘要五子棋是一种两人对弈的纯策略型棋类游戏亦...

五子棋设计报告

目录第一章绪论211课题背景212开发目的213开发意义2第二章需求分析321可行性研究322需求分析3221功能需求3222环境需求3第三章总体设计331系统设计思想332系统总体设计433游戏截图4第四章程...

C语言课程设计五子棋源代码_+设计报告

C语言程序设计综合实验设计报告题目班级人数小组成员时间目录1课程设计报告11课题描述12需求分析13概要设计2源程序代码3详细设计1课题设计报告11课题分析游戏介绍在一个1818的方格中下棋两个玩家根据键盘上的...

五子棋设计报告(35篇)