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轴也同理,组合起来就是最接近鼠标点击处的棋盘交叉点了。

  • 相关阅读:
    操作系统介绍
    python 面向对象 公有属性 用在哪里
    python 类 __module__ __class__
    操作系统发展史
    python 面向对象 字典 有序字典
    python 面向对象 私有属性
    python 面向对象 类 __doc__
    saltstack 部署
    【SQL】MySQL之使用mysqlbinlog进行增量备份及恢复详解
    [SOA] Mule ESB 3.x 入门(二)—— 配置(spring, properties, log4j)
  • 原文地址:https://www.cnblogs.com/fmnisme/p/2076305.html
Copyright © 2011-2022 走看看