关闭

一步一步实现五子棋1

标签: 五子棋gdi+
840人阅读 评论(1) 收藏 举报



最近待业中,趁这段时间想实现一个VC版的五子棋软件,并且把每天的工作内容写出来当作对自己工作的总结,同时希望能达到抛砖引玉的效果,希望各位大侠多多指教。

首先建立一个MFC工程,如下图:

        


工程建好后我们先完成棋盘的绘制。这里我们使用GDI+来绘图。要使用GDI+,先要完成如下工作。

   (1)将以下代码加入到StdAfx.h头文件中:

#include <comdef.h>

#ifndef ULONG_PTR 

#define ULONG_PTR  unsignedlong*

#include "GdiPlus.h" 

using namespace Gdiplus;

#endif 

#pragma comment(lib,"gdiplus.lib")

(2) 在程序初始化部分加入以下代码:

// 装载GDI+ 

GdiplusStartupInput gdiplusStartupInput;     

ULONG_PTR  pGdiToken; 

GdiplusStartup(&pGdiToken,&gdiplusStartupInput,NULL);

(3) 在程序结束部分前加入如下代码:

// 卸载GDI+

GdiplusShutDown(pGidToken);

这样这个工程就可以使用GDI+了。

在OnPaint()中添加绘图部分代码如下:

void CFiveDlg::OnPaint()

{

    if (IsIconic())

    {

      

    }

    else

    {

       CRect rect;

       GetClientRect(&rect);

       

       // 获得绘制区的高宽

       m_width = rect.Width();

       m_height = rect.Height();

 

       // 根据高宽获得棋盘方格大小、左边界和上边界距离

       if (m_width>m_height)

       {

            m_blockSize= m_height / 16;

            m_top= m_blockSize;

            m_left= m_blockSize;

       }

       else

       {

            m_blockSize= m_width / 16;

            m_left= m_blockSize;

            m_top= (m_height - 14 *m_blockSize)/ 2;

       }

 

       CPaintDC dc(this);

       Graphics graphics(dc.m_hDC);

 

       // 绘制棋盘

       DrawChessBoard(&graphics);

 

       // 绘制棋子

       DrawChess(&graphics);

       

       CDialog::OnPaint();

    }

}


绘制棋盘的方法实现如下

void CFiveDlg::DrawChessBoard(Graphics *g)

{

   // 绘制棋盘背景

   Image image(L"img/board.png",FALSE);

   g->DrawImage(&image,m_left -m_blockSize / 2,m_top- m_blockSize / 2, 15 *m_blockSize, 15 * m_blockSize);

 

   // 绘制棋格

   Pen myPen(Color(255, 100, 100, 100), 1);

   for (inti = 0;i< 15; i++)

   {

       g->DrawLine(&myPen,m_left, m_top +m_blockSize* i,m_left+ m_blockSize * 14,m_top+ m_blockSize *i);

       g->DrawLine(&myPen,m_left +m_blockSize *i,m_top, m_left+ m_blockSize * i,m_top + m_blockSize* 14);

   }

}

 

绘制棋子的方法实现如下,这里只是简单的绘制了两颗棋子。

void CFiveDlg::DrawChess(Graphics *g)

{

   Image whiteChess(L"img/whitestone.png",FALSE);

   Image blackChess(L"img/blackstone.png",FALSE);

 

   int chessLeft= m_left - m_blockSize/ 2;

   int chessTop= m_top - m_blockSize/ 2;

   int chessSize= m_blockSize;

 

   g->DrawImage(&whiteChess,chessLeft+ 7 * m_blockSize,chessTop+ 7 * m_blockSize,chessSize,chessSize);

   g->DrawImage(&blackChess,chessLeft+ 6 * m_blockSize,chessTop+ 7 * m_blockSize,chessSize,chessSize);

}

 

好了,到这里就完成了棋盘的绘制了,看看运行之后的效果吧。

这棋盘和棋子可是我用Photoshop借鉴了N多教程后绘制的,怎么样,还不错吧!

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4939次
    • 积分:117
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章存档
    最新评论