• 简单的c#winform象棋游戏(附带源码)


    算法源自网络(网络源码连接:http://www.mycodes.net/161/6659.htm)

      整体思路:用二维数组构建棋盘每一个数组元素封装为一个picturebox附带若干属性(例如:棋子归属方、棋子的类型),用一个抽象基类规定基本的棋子移动规则(例如:不能选中空白picturebox、该红方走棋时不能选中蓝方棋子),具体的棋子单独从基类棋子类派生 重写派生类的方法规定其走棋规则,和相应填充picturebox的图片(例如: 炮不能斜着走不能直线吃子,翻山炮必须吃子且移动路径上只能有一个棋子)  

      窗体所用控件:lable、timer、picturebox

      

                

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Windows.Forms;
      6 using System.Drawing;
      7 
      8 namespace 象棋_封_
      9 {
     10     enum chess_type
     11     {
     12         blank,
     13         jiang,
     14         che,
     15         ma,
     16         pao,
     17         xiang,
     18         zu,
     19         shi
     20     };//棋类的枚举类型
     21     enum player_type
     22     {
     23         blank,
     24         red,
     25         blue,
     26     };//玩家类别的枚举类型
     27     abstract class Chess
     28     {
     29         private static Chess[] cover_blue =new Chess[16];//被吃区
     30         private static int r=0;
     31         private static Chess[] cover_red = new Chess[16];//被吃区
     32         private static int f=0;
     33         protected static int chosenX;
     34         protected static int chosenY;
     35         public static bool chosen;
     36         static int n = 1;
     37         public static player_type control_side;
     38         public PictureBox PB;
     39         public chess_type type;
     40         public player_type side;
     41         public Chess()
     42         {
     43             side = player_type.blank;
     44             type = chess_type.blank;
     45         }
     46         public abstract bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard);
     47         public abstract void Put_picture();
     48         //public void Assignment(chess_type ct, player_type pt, Image pic)
     49         //{
     50         //    side = pt;
     51         //    type = ct;
     52         //    PB.Image = pic;
     53         //}//给棋子赋值
     54         public void Bg_Tored()
     55         {
     56             this.PB.BackColor = Color.Red;
     57         }//背景变为红色
     58         public void Bg_Toblank()
     59         {
     60             this.PB.BackColor = Color.Transparent;
     61         }//背景变为白色
     62         private void Chess_Toblank(ref Chess a, PictureBox PB)
     63         {
     64             this.Bg_Toblank();
     65             this.PB.Image = null;
     66             a = new Chess_blank(PB);
     67         }//棋子属性清空
     68         public static void Clearground(Main f, ref Chess[][] checkerboard)//布置战场
     69         {
     70             int i, j;
     71             Control[] col_blue=null;
     72             Control[] col_red=null;
     73             Chess.control_side = player_type.red;
     74             Chess.chosen = false;
     75             //*********************初始化被吃区**************//
     76             for (i = 0; i < 16; i++)
     77             {
     78                 cover_blue[i] = new Chess_blank();
     79                 cover_red[i] = new Chess_blank();
     80             }
     81             for (i = 1; i <= 16; i++)
     82             {
     83                 col_blue = f.Controls.Find("Cover_PBox_blue" + i, false);//检索控件
     84                 col_red = f.Controls.Find("Cover_PBox_red" + i, false);//检索控件
     85                 cover_blue[i - 1].PB = col_blue[0] as PictureBox;
     86                 cover_red[i - 1].PB = col_red[0] as PictureBox;
     87             }
     88             //*********************初始话被吃区**************//
     89 
     90             //*****************构建棋盘********************//
     91             checkerboard = new Chess[10][];
     92             for (i = 0; i < 10; i++)
     93             {
     94                 checkerboard[i] = new Chess[9];//10行9列
     95             }
     96             for (i = 0; i < 10; i++)
     97                 for (j = 0; j < 9; j++)
     98                 {
     99                     checkerboard[i][j] = new Chess_blank();
    100                 }
    101             checkerboard[0][0] = new Chess_che(player_type.blue);
    102             checkerboard[0][1] = new Chess_ma(player_type.blue);
    103             checkerboard[0][2] = new Chess_xiang(player_type.blue);
    104             checkerboard[0][3] = new Chess_shi(player_type.blue);
    105             checkerboard[0][4] = new Chess_jiang(player_type.blue);
    106             checkerboard[0][5] = new Chess_shi(player_type.blue);
    107             checkerboard[0][6] = new Chess_xiang(player_type.blue);
    108             checkerboard[0][7] = new Chess_ma(player_type.blue);
    109             checkerboard[0][8] = new Chess_che(player_type.blue);
    110             checkerboard[2][1] = new Chess_pao(player_type.blue);
    111             checkerboard[2][7] = new Chess_pao(player_type.blue);
    112             checkerboard[3][0] = new Chess_zu(player_type.blue);
    113             checkerboard[3][2] = new Chess_zu(player_type.blue);
    114             checkerboard[3][4] = new Chess_zu(player_type.blue);
    115             checkerboard[3][6] = new Chess_zu(player_type.blue);
    116             checkerboard[3][8] = new Chess_zu(player_type.blue);
    117 
    118 
    119             checkerboard[6][0] = new Chess_zu(player_type.red);
    120             checkerboard[6][2] = new Chess_zu(player_type.red);
    121             checkerboard[6][4] = new Chess_zu(player_type.red);
    122             checkerboard[6][6] = new Chess_zu(player_type.red);
    123             checkerboard[6][8] = new Chess_zu(player_type.red);
    124             checkerboard[7][1] = new Chess_pao(player_type.red);
    125             checkerboard[7][7] = new Chess_pao(player_type.red);
    126             checkerboard[9][0] = new Chess_che(player_type.red);
    127             checkerboard[9][1] = new Chess_ma(player_type.red);
    128             checkerboard[9][2] = new Chess_xiang(player_type.red);
    129             checkerboard[9][3] = new Chess_shi(player_type.red);
    130             checkerboard[9][4] = new Chess_jiang(player_type.red);
    131             checkerboard[9][5] = new Chess_shi(player_type.red);
    132             checkerboard[9][6] = new Chess_xiang(player_type.red);
    133             checkerboard[9][7] = new Chess_ma(player_type.red);
    134             checkerboard[9][8] = new Chess_che(player_type.red);
    135             for (i = 0; i < 10; i++)
    136                 for (j = 0; j < 9; j++)//control 是一个存放控件类的容器
    137                 {
    138                     Control[] col = f.Controls.Find("pictureBox" + (i * 9 + j + 1), false);//检索控件
    139                     checkerboard[i][j].PB = col[0] as PictureBox;//类型转换
    140                     checkerboard[i][j].PB.Location = new Point(170 + 60 * j, 57 * i);
    141                 }
    142             for (i = 0; i < 10; i++)
    143                 for (j = 0; j < 9; j++)
    144                 {
    145                     checkerboard[i][j].Put_picture();
    146                 }
    147             //*****************构建棋盘********************//
    148         }
    149         protected static int Getx(object sender)
    150         {
    151             int x;
    152             string name = (sender as PictureBox).Name;
    153             string number = name.Substring(10);//在字符串中从指定位开始检索(这里是在x后也就是picturebox控件ID不同的尾号)
    154             int index = Convert.ToInt32(number);
    155             x = (index - 1) / 9;//
    156             return x;
    157         }
    158         protected static int Gety(object sender)
    159         {
    160             int y;
    161             string name = (sender as PictureBox).Name;
    162             string number = name.Substring(10);//在字符串中从指定位开始检索(这里是在x后也就是picturebox控件ID不同的尾号)
    163             int index = Convert.ToInt32(number);
    164             y = (index - 1) % 9;//
    165             return y;
    166         }
    167         public static void Nochozen_dispose(object sender, Chess[][] checkerboard)
    168         {
    169             Chess.chosen = true;
    170             chosenX = Chess.Getx(sender);
    171             chosenY = Chess.Gety(sender);
    172             if (checkerboard[chosenX][chosenY].side != control_side)//选择的不是当前应该走棋的一方
    173             {
    174                 chosen = false;
    175                 return;
    176             }
    177             if (checkerboard[chosenX][chosenY].side != player_type.blank)//选择的不是空白
    178                 checkerboard[chosenX][chosenY].Bg_Tored();
    179             return;
    180         }
    181         public static bool Chozen_dispose(object sender, Chess[][] checkerboard)
    182         {
    183             Chess.chosen = false;
    184             int x= Getx(sender);
    185             int y= Gety(sender);
    186             if (checkerboard[chosenX][chosenY].side == checkerboard[x][y].side)//移动位置与选择位是同一阵营
    187             {
    188                 checkerboard[chosenX][chosenY].Bg_Toblank();
    189                 return false;
    190             }
    191             if (checkerboard[chosenX][chosenY].side == player_type.blank)//选中的是空白
    192                 return false;
    193             if (checkerboard[chosenX][chosenY].type == chess_type.ma || checkerboard[chosenX][chosenY].type == chess_type.xiang || checkerboard[chosenX][chosenY].type == chess_type.shi)//马象士的移动不能同y或同x
    194             {
    195                 if (chosenX == x || chosenY == y)
    196                 {
    197                     checkerboard[chosenX][chosenY].Bg_Toblank();
    198                     return false;
    199                 }
    200             }
    201             else
    202             {
    203                 if (chosenX != x && chosenY != y)//其他棋类都必须同x或同y移动
    204                 {
    205                     checkerboard[chosenX][chosenY].Bg_Toblank();
    206                     return false;
    207                 }
    208             }
    209 
    210             if (!checkerboard[chosenX][chosenY].Move_judge(sender, x, y, checkerboard))
    211             {
    212                 checkerboard[chosenX][chosenY].Bg_Toblank();
    213                 return false;
    214             }
    215             if (Chess.Setmove(checkerboard, x, y))
    216                 return true;
    217             else
    218                 return false;
    219         }
    220         static bool Setmove(Chess[][] checkerboard,int X,int Y)
    221         {
    222             n++;
    223             bool over = false;
    224             player_type z=player_type.blank;
    225             if (checkerboard[X][Y].type == chess_type.jiang)
    226             {
    227                 over = true;
    228                 z = checkerboard[X][Y].side;
    229             }
    230             if (checkerboard[X][Y].PB.Image!=null)
    231             Cover(checkerboard[X][Y]);
    232             Chess.Change(ref checkerboard[Chess.chosenX][Chess.chosenY],ref  checkerboard[X][Y]);
    233             Chess.chosen = false;
    234             if (over)
    235             {
    236                 if (z == player_type.blue)
    237                     MessageBox.Show("红方胜利");
    238                 else
    239                     MessageBox.Show("蓝方胜利");
    240                 End f = new End(Time.fen + "" + Time.miao + "");
    241                 f.Show();
    242                 return true;
    243             }
    244             if (n % 2 == 0)
    245                 Chess.control_side = player_type.blue;
    246             else
    247                 Chess.control_side = player_type.red;
    248             return false;
    249         }
    250         private static void Change(ref Chess a,ref  Chess b)//a子位移到b子
    251         {
    252             Chess c = new Chess_blank();
    253             c.PB = b.PB;
    254             switch (a.type)
    255             { 
    256                 case chess_type.zu:
    257                     b = new Chess_zu(a.side);break;
    258                 case chess_type.pao:
    259                     b = new Chess_pao(a.side);break;
    260                 case chess_type.che:
    261                     b = new Chess_che(a.side); break;
    262                 case chess_type.ma:
    263                     b = new Chess_ma(a.side); break;
    264                 case chess_type.xiang:
    265                     b = new Chess_xiang(a.side); break;
    266                 case chess_type.shi:
    267                     b = new Chess_shi(a.side); break;
    268                 case chess_type.jiang:
    269                     b = new Chess_jiang(a.side); break;
    270             }
    271             b.type = a.type;
    272             b.side = a.side;
    273             b.PB = c.PB;
    274             b.PB.Image = a.PB.Image;
    275             a.Chess_Toblank(ref a,a.PB);
    276         }
    277         private static void Cover(Chess a)
    278         {
    279             if (a.side == player_type.blue)
    280             {
    281                 Change(ref a, ref cover_red[r]);
    282                 r++;
    283             }
    284             else
    285             {
    286                 Change(ref a, ref cover_blue[f]);
    287                 f++;
    288             }
    289         
    290         }//棋子被吃后移动到被吃区
    291 
    292     }
    293 }
    棋子抽象基类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Windows.Forms;
     6 
     7 namespace 象棋_封_
     8 {
     9     class Chess_blank : Chess
    10     {
    11         public Chess_blank()
    12         {
    13             base.type = chess_type.blank;
    14             base.side = player_type.blank;
    15         }
    16         public Chess_blank(PictureBox PB)
    17         {
    18             base.type = chess_type.blank;
    19             base.side = player_type.blank;
    20             this.PB = PB;
    21         }
    22         public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    23         {
    24             return false;
    25         }
    26         public override void Put_picture()
    27         {
    28                 this.PB.Image = null;
    29         }
    30     }
    31 }
    空白属性棋子类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 象棋_封_
     7 {
     8     class Chess_che:Chess
     9     {
    10         public Chess_che(player_type b)
    11         {
    12             base.type = chess_type.che;
    13             base.side = b;
    14         }
    15         public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    16         {
    17             int i, j, k;
    18             if (Chess.chosenX == X)
    19             {
    20                 i = Chess.chosenY < Y ? Chess.chosenY : Y;
    21                 j = Chess.chosenY > Y ? Chess.chosenY : Y;
    22                 for (k = i + 1; k < j; k++)
    23                 {
    24                     if (checkerboard[X][k].side != player_type.blank)//在移动路径上有棋子情况
    25                     {
    26                         return false;
    27                     }
    28                 }
    29             }
    30             if (Chess.chosenY == Y)
    31             {
    32                 i = Chess.chosenX < X ? Chess.chosenX : X;
    33                 j = Chess.chosenX > X ? Chess.chosenX : X;
    34                 for (k = i + 1; k < j; k++)
    35                 {
    36                     if (checkerboard[k][Y].side != player_type.blank)
    37                     {
    38                         return false;
    39                     }
    40                 }
    41             }
    42             return true;
    43         }
    44         public override void Put_picture()
    45         {
    46             if (base.side == player_type.red)
    47                 this.PB.Image = global::象棋_封_.Properties.Resources.红車;
    48             else
    49                 this.PB.Image = global::象棋_封_.Properties.Resources.蓝車;
    50         }
    51     }
    52 }
    车类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 象棋_封_
     7 {
     8     class Chess_jiang:Chess
     9     {
    10         public  Chess_jiang(player_type b)
    11         {
    12             base.type = chess_type.jiang;
    13             base.side = b;
    14         }
    15         public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    16         {
    17             int i, j, k;
    18             if (checkerboard[X][Y].type == chess_type.jiang && Chess.chosenY == Y)//王吃王情况
    19             {
    20                 i = Chess.chosenX < X ? Chess.chosenX : X;//棋子移动的起点行
    21                 j = Chess.chosenX > X ? Chess.chosenX : X;//棋子移动的结束行
    22                 for (k = i + 1; k < j; k++)
    23                 {
    24                     if (checkerboard[k][Y].side != player_type.blank)//中间有棋子情况
    25                     {
    26                         return false;
    27                     }
    28                 }
    29                 return true;
    30             }
    31             if (this.side == player_type.blue)
    32             {
    33 
    34                 if (Y < 3 || Y > 5 || X > 2)//当控制者是蓝色方  限制将的移动范围
    35                 {
    36                     return false;
    37                 }
    38             }
    39             else
    40             {
    41                 if (Y < 3 || Y > 5 || X < 7)//当控制者是红色方  限制将的移动范围
    42                 {
    43                     return false;
    44                 }
    45             }
    46             if ((Chess.chosenX - X) * (Chess.chosenX - X) + (Chess.chosenY - Y) * (Chess.chosenY - Y) != 1)//点到点距离x平方加y平方
    47             {
    48                 return false;
    49             }
    50             return true;
    51         }
    52         public override void Put_picture()
    53         {
    54             if (base.side == player_type.red)
    55                 this.PB.Image = global::象棋_封_.Properties.Resources.红帥;
    56             else
    57                 this.PB.Image = global::象棋_封_.Properties.Resources.蓝将;
    58         }
    59     }
    60 }
    将类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 象棋_封_
     7 {
     8     class Chess_ma:Chess
     9     {
    10        public Chess_ma(player_type b)
    11         {
    12             base.type = chess_type.ma;
    13             base.side = b;
    14         }
    15        public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    16        {
    17            if (Math.Abs(Chess.chosenX - X) == 1 && Math.Abs(Chess.chosenY - Y) == 2)//移动X方向绝对值为1y方向为2
    18            {
    19                if (checkerboard[Chess.chosenX][Chess.chosenY + (Y - Chess.chosenY) / Math.Abs(Y - Chess.chosenY)].side != player_type.blank)//不是撇脚马
    20                {
    21                    return false;
    22                }
    23            }
    24            else if (Math.Abs(Chess.chosenX - X) == 2 && Math.Abs(Chess.chosenY - Y) == 1)//移动y方向绝对值为2x方向为1
    25            {
    26                if (checkerboard[Chess.chosenX + (X - Chess.chosenX) / Math.Abs(X - Chess.chosenX)][Chess.chosenY].side != player_type.blank)//不是撇脚马
    27                {
    28                    return false;
    29                }
    30            }
    31            else
    32            {
    33                return false;
    34            }
    35            return true;
    36        }
    37        public override void Put_picture()
    38        {
    39            if (base.side == player_type.red)
    40                this.PB.Image = global::象棋_封_.Properties.Resources.红马;
    41            else
    42                this.PB.Image = global::象棋_封_.Properties.Resources.蓝马;
    43        }
    44     }
    45 }
    马类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 象棋_封_
     7 {
     8     class Chess_pao:Chess
     9     {
    10        public Chess_pao(player_type b)
    11         {
    12             base.type = chess_type.pao;
    13             base.side = b;
    14         }
    15        public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    16        {
    17            int p = 0;//用于记录路径上的棋子数
    18            int i, j, k;
    19            if (Chess.chosenX == X)//同列移动情况
    20            {
    21                i = Chess.chosenY < Y ? Chess.chosenY : Y;//定起始点
    22                j = Chess.chosenY > Y ? Chess.chosenY : Y;//定起始点
    23                p = 0;
    24                for (k = i + 1; k < j; k++)
    25                {
    26                    if (checkerboard[X][k].side != player_type.blank)
    27                    {
    28                        p++;//移动路径上有棋子的个数
    29                    }
    30                }
    31                if (p > 1)
    32                {
    33                    return false;
    34                }
    35            }
    36 
    37 
    38            else if (Chess.chosenY == Y)//同行移动情况
    39            {
    40                i = Chess.chosenX < X ? Chess.chosenX : X;
    41                j = Chess.chosenX > X ? Chess.chosenX : X;
    42                p = 0;
    43                for (k = i + 1; k < j; k++)
    44                {
    45                    if (checkerboard[k][Y].side != player_type.blank)
    46                    {
    47                        p++;
    48                    }
    49                }
    50                if (p > 1)
    51                {
    52                    return false;
    53                }
    54            }
    55            else
    56            {
    57                return false;
    58            }
    59            if (p == 0 && checkerboard[X][Y].side != player_type.blank)//中间没有棋子炮不能吃子
    60            {
    61                return false;
    62            }
    63            if (p == 1 && checkerboard[X][Y].side == player_type.blank)//中间有棋子但是不能打空炮
    64            {
    65                return false;
    66            }
    67            return true;
    68        }
    69        public override void Put_picture()
    70        {
    71            if (base.side == player_type.red)
    72                this.PB.Image = global::象棋_封_.Properties.Resources.红炮;
    73            else
    74                this.PB.Image = global::象棋_封_.Properties.Resources.蓝炮;
    75        }
    76     }
    77 }
    炮类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 象棋_封_
     7 {
     8     class Chess_shi:Chess
     9     {
    10          public Chess_shi(player_type b)
    11         {
    12             base.type = chess_type.shi;
    13             base.side = b;
    14         }
    15          public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    16          {
    17              if (this.side == player_type.blue)
    18              {
    19                  if (Y < 3 || Y > 5 || X > 2)//限制将的移动范围
    20                  {
    21                      return false;
    22                  }
    23              }
    24              else
    25              {
    26                  if (Y < 3 || Y > 5 || X < 7)//限制将的移动范围
    27                  {
    28                      return false;
    29                  }
    30              }
    31              if (Math.Abs(X - Chess.chosenX) != 1 || Math.Abs(Chess.chosenY - Y) != 1)//只能跨一个方格
    32              {
    33                  return false;
    34              }
    35              return true;
    36          }
    37          public override void Put_picture()
    38          {
    39              if (base.side == player_type.red)
    40                  this.PB.Image = global::象棋_封_.Properties.Resources.红士;
    41              else
    42                  this.PB.Image = global::象棋_封_.Properties.Resources.蓝士;
    43          }
    44     }
    45 }
    士类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 象棋_封_
     7 {
     8     class Chess_xiang:Chess
     9     {
    10         public Chess_xiang(player_type b)
    11         {
    12             base.type = chess_type.xiang;
    13             base.side = b;
    14         }
    15         public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    16         {
    17             if (this.side == player_type.blue)
    18             {
    19                 if (X > 4)
    20                 {
    21                     return false;
    22                 }
    23             }
    24             else
    25             {
    26                 if (X < 5)
    27                 {
    28                     return false;
    29                 }
    30             }
    31             if ((X - Chess.chosenX) * (X - Chess.chosenX) + (Chess.chosenY - Y) * (Chess.chosenY - Y) != 8)
    32             {
    33                 return false;
    34             }
    35             if (checkerboard[(X + Chess.chosenX) / 2][(Y + Chess.chosenY) / 2].side != player_type.blank)
    36             {
    37                 return false;
    38             }
    39             return true;
    40         }
    41         public override void Put_picture()
    42         {
    43             if (base.side == player_type.red)
    44                 this.PB.Image = global::象棋_封_.Properties.Resources.红象;
    45             else
    46                 this.PB.Image = global::象棋_封_.Properties.Resources.蓝象;
    47         }
    48     }
    49 }
    象类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 
     6 namespace 象棋_封_
     7 {
     8     class Chess_zu:Chess
     9     {
    10        public Chess_zu(player_type b)
    11         {
    12             base.type = chess_type.zu;
    13             base.side = b;
    14         }
    15        public override bool Move_judge(object sender, int X, int Y, Chess[][] checkerboard)
    16        {
    17            if (this.side == player_type.blue)//蓝方卒
    18            {
    19                if (Chess.chosenX < 5 && X - Chess.chosenX != 1)//在5行后选中的卒  
    20                {
    21                    return false;
    22                }
    23                if (Chess.chosenX > 4)//移动布数不能大于1
    24                {
    25                    if (X == Chess.chosenX && Math.Abs(Y - Chess.chosenY) != 1)
    26                    {
    27                        return false;
    28                    }
    29                    if (Y == Chess.chosenY && X - Chess.chosenX != 1)
    30                    {
    31                        return false;
    32                    }
    33                }
    34            }
    35            else//红方卒
    36            {
    37                if (Chess.chosenX > 4 && Chess.chosenX - X != 1)
    38                {
    39                    return false;
    40                }
    41                if (Chess.chosenX < 5)
    42                {
    43                    if (X == Chess.chosenX && Math.Abs(Y - Chess.chosenY) != 1)
    44                    {
    45                        return false;
    46                    }
    47                    if (Y == Chess.chosenY && Chess.chosenX - X != 1)
    48                    {
    49                        return false;
    50                    }
    51                }
    52            }
    53            return true;
    54        }
    55        public override void Put_picture()
    56        {
    57            if (base.side == player_type.red)
    58                this.PB.Image = global::象棋_封_.Properties.Resources.红兵;
    59            else
    60                this.PB.Image = global::象棋_封_.Properties.Resources.蓝卒;
    61        }
    62     }
    63 }
    卒类
     1 using System;
     2 using System.Collections.Generic;
     3 using System.ComponentModel;
     4 using System.Data;
     5 using System.Drawing;
     6 using System.Linq;
     7 using System.Text;
     8 using System.Windows.Forms;
     9 
    10 namespace 象棋_封_
    11 {
    12     public partial class Start : Form
    13     {
    14         public Start()
    15         {
    16             InitializeComponent();
    17         }
    18 
    19         private void LB_Begin_Click(object sender, EventArgs e)
    20         {
    21             Main f = new Main();
    22             f.Show();
    23             this.Hide();
    24         }
    25 
    26         private void label2_Click(object sender, EventArgs e)
    27         {
    28             About f = new About();
    29             f.Show();
    30             this.Hide();
    31         }
    32 
    33         private void LB_exit_Click(object sender, EventArgs e)
    34         {
    35             Application.Exit();
    36         }
    37     }
    38 }
    主窗体代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Windows.Forms;
     6 
     7 namespace 象棋_封_
     8 {
     9     class Time
    10     {
    11         public Timer t;
    12         private Label l;
    13         private double s ;
    14         private double m ;
    15         public  double sum=0;
    16         public static string fen="0";
    17         public static string miao ="0";
    18         public Time(Timer t,Label L) 
    19         {
    20             s = 0;
    21             m = 0;
    22             this.t = t;
    23             this.l = L;
    24         }
    25         public string outtime()
    26     {
    27         string second;
    28         string minute;
    29         s++;
    30         if (s >= 60)
    31         {
    32             m = s / 60;
    33             s = s % 60;
    34         }
    35         second = Convert.ToString(s);
    36         minute = Convert.ToString(m);
    37         string sum = minute + "" + second;
    38         return sum;
    39     }
    40         public void clear()
    41     {
    42         fen = (Convert.ToInt32(fen) + m).ToString();
    43         miao = (Convert.ToInt32(miao) + s).ToString();
    44         l.Text = "";
    45         m = 0;
    46         s = 0;
    47     }
    48     }
    49 }
    timer类

          

  • 相关阅读:
    cnblogs blogStats All In One
    ESLint & vue template indent validate All In One
    vue & elementui 表单验证 bug All In One
    vue 表单验证 rule.message bug All In One
    vue 表单验证 rule message bug All In One
    Node.js & TypeScript error All In One
    VS2010如何调试IIS上的网站
    用LINQ查询XML并绑定给GridView显示
    SQLServer2008评估期已过解决方法
    ASP.NET给用户控件(.ascx)增加属性
  • 原文地址:https://www.cnblogs.com/cyh1282656849/p/5741236.html
Copyright © 2020-2023  润新知