北华大学
电气信息工程学院
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排版,核心代码编辑,我和小组成员合作得很好,正是队友的团结,才促成项目的完成! 总的来说,我收获了很多,感触了很多,在一个科学团队里,需要具备各种才能的人的合作,而我,正是其中的一员。