c#开发技术 中国象棋(单机)
前言
该中国象棋为单机版程序,实现了全部的象棋走棋,并且实现了悔棋,落子标记等功能。唯一不足的是,该程序没有实现联机功能,后续有时间持续跟进的。
界面效果图
图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)090308
最近迷恋起中国象棋来了.我棋力很一般,但是总感觉人生如棋,每一个决定都会影响将来局势的发展.深思熟虑者,后势就比较占优.沉着应战,方显人生力量.刚好,2月份的时候把我的一部使用了快两年的三星普通手机换 ...
- Unity3D 2019.3开发的中国象棋的源代码
Unity3D 2019.3开发的中国象棋的源代码 1 ChessEnum public enum ChessSide {RED,BLACK,Barrier } public enum ChessTy ...
- 开源力作, 使用 C# 开发的中国象棋
Chess Chess 是一个基于 C# WPF开发的功能完善的中国象棋软件, 已开源全部源码,开箱即用.代码中含有大量注释,能够快速理解程序流程.可用于二次开发和学习. 功能特性 1. 人机对战,测 ...
- 【C++课程设计】期末大作业 - 基于Qt开发的中国象棋软件
1 题目 基于Qt的中国象棋软件开发 本博客只是简略的描述论文的大致结构.框架,以及软件开发的大致过程.有兴趣的参考原文档资料. 2总体设计与主要功能 2.1概述 中国象棋是起源于中国的一种棋,属于二 ...
- java中白盒测试用例_基于JAVA开发的中国象棋游戏的开发与研究白盒测试用例.doc...
中国象棋白盒测试用例 文件状态当前版本V1.0草稿 作 者梁世聪完成日期2012/6/17文档模板SSP-VER-T13-V1.0密 级变更历史 版本完成日期变更记录作者批准签字V1.02012/6/ ...
- Firefox os 游戏开发之中国象棋
一款界面精美,棋力强大,功能丰富的中国象棋游戏,国粹值得大家学习,今天献上Firefox os 游戏源码中国象棋供大家学习! 下载地址
- 手机软件开发入门 - 中国象棋(2)090311
认识 windows mobile 的窗口部件 为了查阅MSDN.沟通交流,我们先来认识一下windows mobile的UI部分.如下图,我们需要搞清楚几个基本的概念: SIP - soft inp ...
- Qt开发之中国象棋篇(四):棋子移动(上)
有了前两篇的象棋棋盘和象棋棋子的铺垫,那么基本的象棋的雏形就出来,接下来要完善各个棋子行走的规则就可以让棋子移动起来,在贴代码之前,让我们回想一下象棋棋子的行走规则吧!在象棋中:士走斜线,象走田字格, ...
- 基于java的中国象棋的设计与实现
技术:Java等 摘要: 中国象棋作为中华民族的文化瑰宝,千百年来常盛不衰,在中国有非常广泛的大众基础,在社会上有广泛的认同,它不仅是人们茶余饭后消遣娱乐的工具,其本身更是具有严密的逻辑和教育功能.随 ...
最新文章
- union 与 union all 及其他并集操作说明
- 无锁数据结构二-乱序控制(栅栏)
- MSSQL数据库C#操作类(SQLHELPER类的修改版)
- 2007武汉.NET俱乐部沙龙-VS2008、WPF、Silverlight
- 幼儿课外活动游戏_幼儿园户外游戏活动大全
- 【iOS】从实际出发理解多线程(二)--NSThread基础操作
- C语言数据类型转换详解
- pandas数据切片
- 【Spring 工厂】反转控制与依赖注入、Spring工厂创建复杂对象3种方式
- 给你出道题---最佳组合问题
- C3P0数据源和Tomcat jdbc数据源的基本配置
- 实例分割和语义分割使用labelme制作的数据集如何转换为voc和coco格式的数据
- 网络安全实验7 防火墙 Iptables应用
- 机顶盒 img打包工具_网络机顶盒刷机、固件升级图文详解 宏旺半导体包教包会...
- 信号与系统学习之第一章(系统的六大基本性质定义与判别:无记忆性、可逆性、因果性、稳定性、时不变性、线性)
- android 优酷 api接口,腾讯优酷网站视频引用接口
- 国内装备制造业为什么需要项目管理
- excel中条形图的条目排序与逆序
- ssl证书是什么?为什么需要部署ssl证书?
- 华为PPPoE简单实现