中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 图形图像与多媒体
VC++游戏开发:五子棋
作者:未知 时间:2005-07-20 14:15 出处:VC知识库 责编:chinaitpower
              摘要:VC++游戏开发:五子棋

VC++游戏开发:五子棋

作者:吕鸿

下载源代码

一、程序运行时情况


 
二、本程序里的计算机具有自动判断的功能,能根据当前棋子的布局情况采用相关的走子方式。为了避免在走子时候出现屏幕闪烁,采用双缓冲进行绘图输出,以下是软件实现的部分代码:

#include "stdafx.h"
在CFiveChessView类中定义了如下的数据结构:

	enum    {MAX_X = 18, MAX_Y=18, MIN_X =1, MIN_Y =1};
	
	// NONE :空位置:BLACK :黑 WHITE 白
	enum	{NONE  = 0, BLACK = 1, WHITE = 2}; 

	// ATTACK :进攻:DEFEND :防守
   	enum	{ATTACK = 0, DEFEND = 1}; 

	// MAN_FIRST :黑先:COMPUTER_FIRST :白先
   	enum	{MAN_FIRST = 0, COMPUTER_FIRST = 1}; 

	// BOTH_PEASE :和:BLACK_WIN :黑胜 WHITE_WIN: 白胜
   	enum	{BOTH_PEASE=0, BLACK_WIN = 1,  WHITE_WIN = 2}; 

	// L_TO_R:左到右 T_TO_B :上到下: LB_TO_RT :左下到右上,LT_TO_RB左上到右下
   	enum	{L_TO_R=0, T_TO_B = 1,  LB_TO_RT = 2 , LT_TO_RB = 3}; 


        CChess fiveChess;
	int m_nLastBlackPos_x;
	int m_nLastBlackPos_y;
	int m_nCurrentWhitePos_x;
	int m_nCurrentWhitePos_y;

在CMainFrame类中PreCreateWindow(CREATESTRUCT& cs)增加如下代码设置固定窗口大小:   
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX;// | WS_THICKFRAME;
	cs.style &= ~WS_BORDER;
	cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
	int iWinBorderX = GetSystemMetrics(SM_CXBORDER);
	int iWinBorderY = GetSystemMetrics(SM_CYBORDER);
	int iCaptionY = GetSystemMetrics(SM_CYCAPTION);
	int iMenuY = GetSystemMetrics(SM_CYMENU);
	int iStausY = GetSystemMetrics(SM_CYMENU);
	cs.cx = 510 + iWinBorderX ;
	cs.cy = 530 + iWinBorderY + iCaptionY + iStausY + iMenuY;
	return TRUE;
}
本软件还定义了CChess类,实现了走棋的数据结构和相关算法:
class CChess : public CObject  
{
public:
	enum    {MAX_X = 18, MAX_Y=18, MIN_X =1, MIN_Y =1};

	// NONE :空位置:BLACK :黑 WHITE 白
	enum	{NONE  = 0, BLACK = 1, WHITE = 2}; 

	// ATTACK :进攻:DEFEND :防守
   	enum	{ATTACK = 0, DEFEND = 1}; 

	// MAN_FIRST :人先:COMPUTER_FIRST:计算机先
   	enum	{MAN_FIRST = 0, COMPUTER_FIRST = 1}; 
	
	// BOTH_PEASE :和:BLACK_WIN :黑胜 WHITE_WIN: 白胜
   	enum	{BOTH_PEASE=0, BLACK_WIN = 1,  WHITE_WIN = 2}; 

         // L_TO_R:左到右 T_TO_B :上到下: LB_TO_RT :左下到右上,LT_TO_RB左上到右下
  // 	enum	{L_TO_R=0, T_TO_B = 1,  LB_TO_RT = 2 , LT_TO_RB = 3}; 

	//const static int 
public:
	static int Start_X;
	static int Start_Y;
	static int Width_X;
	static int Height_Y;
   	CObList pList;
	CList <CNode,CNode&> List; // 热解二数据链表

 
public:

	void Draw(CDC *pDC,int x, int y, int nState);
	void Init();
	inline void SetChessState (int x, 
                    int y,
                    int nState)
    { 
        if (x>=0 && x <MAX_X && y>=0 && y <MAX_Y )
				m_chessman[x][y] = nState;
	}
	inline int GetChessState (int x, int y ){ return m_chessman[x][y];}

    inline void SetWhoFirst(int nWhoFirst) {m_nWhoFirst = nWhoFirst;}
    inline int GetWhoFirst() { return m_nWhoFirst;}

    inline void SetGoStyle(int nGoStyle) {m_nGoStyle = nGoStyle;}
    inline int GetGoStyle() { return m_nGoStyle;}

    inline void SetResult(int nResult) {m_nResult = nResult;}
    inline int GetResult() { return m_nResult;}


public:
	BOOL GetSixComputerPos(int &col, int &row);
	BOOL ScanTwo(int side);
	int WhoWin(int state);
	BOOL ScanLTtoRbFive(int side);
	BOOL ScanLbtoRtFive(int side);
	BOOL ScanTtoBFive(int side);
	BOOL ScanLtoRFive(int side);


	void ScanLTtoRbSix(int side);
	void ScanLbtoRtSix(int side);
	void ScanTtoBSix(int side);
	void ScanLtoRSix(int side);

	int m_nWhoFirst ;   //谁先出
	int m_nGoStyle  ;   //走棋方式;
	int m_nResult   ;   //胜负结果
    int m_chessman[MAX_X][MAX_Y];  //保存棋子状态
    

	int m_nFNonePos_x;    //空位置 x坐标
	int m_nFNonePos_y;    //空位置 y坐标

  
	int m_nSNonePos_x;    //空位置 x坐标
	int m_nSNonePos_y;    //空位置 y坐标

	int m_nTNonePos_x;    //空位置 x坐标
	int m_nTNonePos_y;    //空位置 y坐标

	CChess();
	virtual ~CChess();

};
三、本程序在windows 2000,visual c++ 6.0下编译通过。

四、由于时间匆忙,程序中的部分算法设计不够合理,欢迎各位大虾们多多指教,希望能与你们多多交流,联系方式:

ldh5118@sohu.com,
qq:36201365

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有