zoukankan      html  css  js  c++  java
  • C# 五子棋_GDI+实现

    之前写了一个联网五子棋,棋格使用的是pictureBox,棋子是在棋格中间的,而且很多picturebox感觉效率不高,今天换了一个方法。使用了GDI+绘图,画了棋子和棋格。

    这个绘图的难点在于棋子,在一个棋盘交叉点的周围点击时,要保证棋子绘制在正确的交叉点上。

    pictureBox实现棋格的博客:http://www.cnblogs.com/fmnisme/archive/2011/06/08/2074750.html

    GDI+实现五子棋的源代码地址,vs2008:https://files.cnblogs.com/fmnisme/%E4%BA%94%E5%AD%90%E6%A3%8B3_drawing.rar

    下面介绍实现方法。

    首先是棋格:

    //重绘棋格函数。
    public void DrawCheckerboar()
    {
      
    int checkerNum = 15; //棋盘的线条数。
    int initBase = 10; //画棋盘的初始位置。
    int checkPoint = 0;  //用于画线条的位置,每画一个线条,加chessLength的长度。
    int chessLength = 30; //棋格的长度
    Graphics gp = this.CreateGraphics(); //this.CreateGraphics()方法要在窗体显示出来后才能使用。
        
    //想在窗口初始化时就绘图,参见:http://www.cnblogs.com/long-gengyun/archive/2010/04/01/1702578.html?login=1
    SolidBrush sbh = new SolidBrush(Color.DarkOrange);
    //绘制线条长度时,长度是要绘制的线条数-1,所以要checkerNum-1,这里小心点。
    Rectangle rec = new Rectangle(initBase, initBase, chessLength * (checkerNum - 1), chessLength * (checkerNum - 1));
    gp.FillRectangle(sbh, rec);  
    //画一个矩形,填充颜色。
    Pen p = new Pen(Color.Black, 2);  //创建画笔
        
    //下面循环画了横条,竖条,组成棋盘。
    for (int x = 0; x < checkerNum; x++)
    {
    gp.DrawLine(p, checkPoint
    + initBase, initBase, checkPoint + initBase, chessLength * (checkerNum-1) + initBase); //竖线
    gp.DrawLine(p, initBase, checkPoint + initBase, initBase + chessLength * (checkerNum - 1), initBase + checkPoint);
    checkPoint
    += chessLength;
    }
    }

    落子的实现:

    首先要添加鼠标点击事件处理

    this.Click += new EventHandler(MouseClick);

    处理鼠标点击的MouseClick()函数,这个在源代码中有,我在此介绍下思路。

    首先简化一下,假设只有一条x轴,该轴上每个30px就有一个点,要求点击该x轴时,在距离鼠标点击处最近的点上画一个实心圆。可以这样实现:

    假设鼠标点击的位置为:mouseX=32。

    取整:int  xm=(int)mouseX/30;取余:int xn=mouseX%30;

    这里余数xn为2,我们,将2舍去,这时就得到绘图的点:_x=xm*30.只要在该点上绘制一个圆就行了。

    假如mouseX=55。55/30的余数是25,25更接近30所以将最接近mouseX的点就是:_x=(xm+1)*30.

    x轴时这样的,y轴也同理,组合起来就是最接近鼠标点击处的棋盘交叉点了。

  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/fmnisme/p/2076305.html
Copyright © 2011-2022 走看看