前言

该中国象棋为单机版程序,实现了全部的象棋走棋,并且实现了悔棋,落子标记等功能。唯一不足的是,该程序没有实现联机功能,后续有时间持续跟进的。

界面效果图

图1

部分代码

 //棋子的行走规则
public bool RulesForChess(int row, int col){bool tempCanDrop = false;//判断是否落在原处if (row == _pickRow && col == _pickCol)tempCanDrop = false;else{//象的走棋规则if (_pickChess == Piece.蓝象){//如果走田子,不绊象脚if (Math.Abs(_pickRow - row) == 2 && Math.Abs(_pickCol - col) == 2&& _chess[(_pickRow + row) / 2, (_pickCol + col) / 2] == Piece.无子 && row <= 5)tempCanDrop = true;}//象的走棋规则else if (_pickChess == Piece.红相){//如果走田子,不绊象脚if (Math.Abs(_pickRow - row) == 2 && Math.Abs(_pickCol - col) == 2&& _chess[(_pickRow + row) / 2, (_pickCol + col) / 2] == Piece.无子 && row >= 6)tempCanDrop = true;}//马的走棋规则else if (_pickChess == Piece.红马 || _pickChess == Piece.蓝马){//如果横着走日字,且不绊马脚if (Math.Abs(_pickRow - row) == 1 && Math.Abs(_pickCol - col) == 2 &&_chess[_pickRow, (_pickCol + col) / 2] == Piece.无子)tempCanDrop = true;//如果竖着走日字,且不绊马脚else if (Math.Abs(_pickRow - row) == 2 && Math.Abs(_pickCol - col) == 1 &&_chess[(_pickRow + row) / 2, _pickCol] == Piece.无子)tempCanDrop = true;}//车的行走规则else if (_pickChess == Piece.红车 || _pickChess == Piece.蓝车){//如果车横着走if (_pickRow == row){//比较起点列和落点列的大小int max = col > _pickCol ? col : _pickCol;int min = col > _pickCol ? _pickCol : col;//统计移动路径上棋子的数量int chessNum = 0;for (int i = min + 1; i <= max - 1; i++)if (_chess[row, i] != Piece.无子)chessNum++;//当移动路径上棋子数量为0时,才允许落子if (chessNum == 0){ //落子点为无子或对方棋子if (_chess[row, col] == Piece.无子 || _chess[row, col].ToString().IndexOf(_curPlayer.ToString()) == -1)tempCanDrop = true;}  }//如果车竖着走else if (_pickCol == col){//比较起点行和落点行的大小int max = row > _pickRow ? row : _pickRow;int min = row > _pickRow ? _pickRow : row;//统计移动路径上棋子的数量int chessNum = 0;for (int i = min + 1; i <= max - 1; i++)if (_chess[i, col] != Piece.无子)chessNum++;//当移动路径上棋子数量为0时,才允许落子if (chessNum == 0){//落子点为无子或对方棋子if (_chess[row, col] == Piece.无子 || _chess[row, col].ToString().IndexOf(_curPlayer.ToString()) == -1)tempCanDrop = true;} }}//士的行走规则else if (_pickChess == Piece.红士){ //斜着走if(row >= 8 && col <= 6 && col >= 4 && Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 1)tempCanDrop = true;}//士的行走规则else if (_pickChess == Piece.蓝士){//斜着走if (row <= 3 && col <= 6 && col >= 4 && Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 1)tempCanDrop = true;}//帅或将的行走规则else if (_pickChess == Piece.红帅){ if(row >= 8 && col >= 4 && col <= 6 && (Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 0 || Math.Abs(row - _pickRow) == 0 && Math.Abs(col - _pickCol) == 1))tempCanDrop = true;}//帅或将的行走规则else if (_pickChess == Piece.蓝将){if (row <= 3 && col >= 4 && col <= 6 && (Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 0 ||Math.Abs(row - _pickRow) == 0 && Math.Abs(col - _pickCol) == 1))tempCanDrop = true;}//炮的行走规则else if (_pickChess == Piece.红炮 || _pickChess == Piece.蓝炮){ //如果是竖着走if (_pickCol == col){//比较起点行和落点行的大小int max = row > _pickRow ? row : _pickRow;int min = row > _pickRow ? _pickRow : row;//统计移动路径上棋子的数量int chessNum = 0;for (int i = min + 1; i <= max - 1; i++)if (_chess[i, col] != Piece.无子)chessNum++;//当移动路径上棋子数量为0时,落子点为无子if (chessNum == 0 && _chess[row, col] == Piece.无子)tempCanDrop = true;//当移动路径上棋子数量为1时,落子点为对方棋子else if(chessNum == 1 && _chess[row, col] != Piece.无子 && _chess[row, col].ToString().IndexOf(_curPlayer.ToString()) == -1)tempCanDrop = true;}//如果是横着走else if (_pickRow == row){//比较起点行和落点行的大小int max = col > _pickCol ? col : _pickCol;int min = col > _pickCol ? _pickCol : col;//统计移动路径上棋子的数量int chessNum = 0;for (int i = min + 1; i <= max - 1; i++)if (_chess[row, i] != Piece.无子)chessNum++;//当移动路径上棋子数量为0时,落子点为无子if (chessNum == 0 && _chess[row, col] == Piece.无子)tempCanDrop = true;//当移动路径上棋子数量为1时,落子点为对方棋子else if (chessNum == 1 && _chess[row, col] != Piece.无子 && _chess[row, col].ToString().IndexOf(_curPlayer.ToString()) == -1)tempCanDrop = true;}}//兵或卒的行走规则else if (_pickChess == Piece.红卒){//如果过了河界if (_pickRow <= 5 && row <= _pickRow && (Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 0 || Math.Abs(row - _pickRow) == 0 && Math.Abs(col - _pickCol) == 1))tempCanDrop = true;//没有过河界else if(row < _pickRow && (Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 0))tempCanDrop = true;}//兵或卒的行走规则else if (_pickChess == Piece.蓝兵){//如果过了河界if (_pickRow >= 6 && row >= _pickRow && (Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 0 || Math.Abs(row - _pickRow) == 0 && Math.Abs(col - _pickCol) == 1))tempCanDrop = true;//没有过河界else if (row > _pickRow && (Math.Abs(row - _pickRow) == 1 && Math.Abs(col - _pickCol) == 0))tempCanDrop = true;}}return tempCanDrop;}

完整文件

中国象棋程序

c#开发技术 中国象棋(单机)相关推荐

  1. 手机软件开发入门 - 中国象棋(1)090308

    最近迷恋起中国象棋来了.我棋力很一般,但是总感觉人生如棋,每一个决定都会影响将来局势的发展.深思熟虑者,后势就比较占优.沉着应战,方显人生力量.刚好,2月份的时候把我的一部使用了快两年的三星普通手机换 ...

  2. Unity3D 2019.3开发的中国象棋的源代码

    Unity3D 2019.3开发的中国象棋的源代码 1 ChessEnum public enum ChessSide {RED,BLACK,Barrier } public enum ChessTy ...

  3. 开源力作, 使用 C# 开发的中国象棋

    Chess Chess 是一个基于 C# WPF开发的功能完善的中国象棋软件, 已开源全部源码,开箱即用.代码中含有大量注释,能够快速理解程序流程.可用于二次开发和学习. 功能特性 1. 人机对战,测 ...

  4. 【C++课程设计】期末大作业 - 基于Qt开发的中国象棋软件

    1 题目 基于Qt的中国象棋软件开发 本博客只是简略的描述论文的大致结构.框架,以及软件开发的大致过程.有兴趣的参考原文档资料. 2总体设计与主要功能 2.1概述 中国象棋是起源于中国的一种棋,属于二 ...

  5. java中白盒测试用例_基于JAVA开发的中国象棋游戏的开发与研究白盒测试用例.doc...

    中国象棋白盒测试用例 文件状态当前版本V1.0草稿 作 者梁世聪完成日期2012/6/17文档模板SSP-VER-T13-V1.0密 级变更历史 版本完成日期变更记录作者批准签字V1.02012/6/ ...

  6. Firefox os 游戏开发之中国象棋

    一款界面精美,棋力强大,功能丰富的中国象棋游戏,国粹值得大家学习,今天献上Firefox os 游戏源码中国象棋供大家学习! 下载地址

  7. 手机软件开发入门 - 中国象棋(2)090311

    认识 windows mobile 的窗口部件 为了查阅MSDN.沟通交流,我们先来认识一下windows mobile的UI部分.如下图,我们需要搞清楚几个基本的概念: SIP - soft inp ...

  8. Qt开发之中国象棋篇(四):棋子移动(上)

    有了前两篇的象棋棋盘和象棋棋子的铺垫,那么基本的象棋的雏形就出来,接下来要完善各个棋子行走的规则就可以让棋子移动起来,在贴代码之前,让我们回想一下象棋棋子的行走规则吧!在象棋中:士走斜线,象走田字格, ...

  9. 基于java的中国象棋的设计与实现

    技术:Java等 摘要: 中国象棋作为中华民族的文化瑰宝,千百年来常盛不衰,在中国有非常广泛的大众基础,在社会上有广泛的认同,它不仅是人们茶余饭后消遣娱乐的工具,其本身更是具有严密的逻辑和教育功能.随 ...

最新文章

  1. union 与 union all 及其他并集操作说明
  2. 无锁数据结构二-乱序控制(栅栏)
  3. MSSQL数据库C#操作类(SQLHELPER类的修改版)
  4. 2007武汉.NET俱乐部沙龙-VS2008、WPF、Silverlight
  5. 幼儿课外活动游戏_幼儿园户外游戏活动大全
  6. 【iOS】从实际出发理解多线程(二)--NSThread基础操作
  7. C语言数据类型转换详解
  8. pandas数据切片
  9. 【Spring 工厂】反转控制与依赖注入、Spring工厂创建复杂对象3种方式
  10. 给你出道题---最佳组合问题
  11. C3P0数据源和Tomcat jdbc数据源的基本配置
  12. 实例分割和语义分割使用labelme制作的数据集如何转换为voc和coco格式的数据
  13. 网络安全实验7 防火墙 Iptables应用
  14. 机顶盒 img打包工具_网络机顶盒刷机、固件升级图文详解 宏旺半导体包教包会...
  15. 信号与系统学习之第一章(系统的六大基本性质定义与判别:无记忆性、可逆性、因果性、稳定性、时不变性、线性)
  16. android 优酷 api接口,腾讯优酷网站视频引用接口
  17. 国内装备制造业为什么需要项目管理
  18. excel中条形图的条目排序与逆序
  19. ssl证书是什么?为什么需要部署ssl证书?
  20. 华为PPPoE简单实现

热门文章

  1. 公司认缴期限30年内还清吗
  2. Android 显示系统键盘搜索按键,实现搜索功能
  3. Python匿名函数的使用lambda
  4. js文件网页打开后显示中文注释乱码。解决如下:
  5. 传统管理软件的SaaS发展战略 [用友公司]
  6. 抖音怎么养号,老抖音号怎么重新养号
  7. oracle怎么找出失效索引,Oracle数据库索引失效
  8. Draw Call是什么?
  9. matlab的 figure 如何保存后,被adobe illustrator打开,MATLAB导出矢量图
  10. Ubuntu20.04安装QGroundcontrol开发环境