【项目展示】自己用C语言编写的象棋小程序

本文目录

  • 1、前言
  • 2、程序规格
  • 3、核心算法与象棋规则、术语
      • 3.1 行棋规则与行棋判定函数设计
        • 3.1.0 象棋棋盘
        • 3.1.1 兵/卒
        • 3.1.2 士
        • 3.1.3 象
        • 3.1.4 马
        • 3.1.5 车
        • 3.1.6 炮
        • 3.1.7 将/帅
      • 3.2 其他规则与术语
        • 3.2.1 吃子
        • 3.2.2 将军/应将/送将
        • 3.2.3 将帅照面/王不见王
        • 3.2.4 绝杀/困毙
        • 3.2.5 长打/禁止长打
      • 3.3 程序中的其它函数说明
        • 3.3.1 abs()取绝对值函数
        • 3.3.2 sgn()取符函数
        • 3.3.3 sq()计算平方函数
  • 4、源代码
  • 5、运行结果
    • 5.1 界面与操作展示
    • 5.2 测试结果
  • 6、心得
  • 7、开心一刻:象棋笑话一则

1、前言

2017年应该是我迄今为止的人生当中最快乐的整年了(没有之一),虽然它也是我发誓这一年从头到尾都坚决不谈恋爱、坚决不找对象的一年。但,也许正因为如此,才让我的心灵没有了相思的羁绊,没有了虚妄的念头,从而发现了世界上除了儿女情长以外,还有更多更有意义、更有趣味、更有价值的美好事物吧!而这其中,就包括了3月份的时候,我在学校机房奋斗了三天三夜用C语言捣鼓出来的象棋小程序。
三天,九页A4纸。现在回过头来看,就对那句话颇感认同——真正令你快乐的,不是结果,而是过程。最后阶段看着BUG一个一个被改掉,测试表上面的项目一个一个通过,心里固然很高兴。但比这更让我的心中充满奇妙喜悦滋味的,是设计成功了一个又一个判定函数的算法的瞬间。一个你原本以为高不可攀的山峰,经过你的努力,也终于被你驯服。这一瞬间的自恋值真是爆表了,以致于都产生了幻觉:认为自己简直就是个天才,是这个世界上最聪明的人(just开个玩笑)——“仰天大笑出门去,我辈岂是蓬蒿人!”
而当时设计算法的草稿纸,我珍藏了将近4年,一直到租房期满搬家之前,都没舍得扔。但很可惜的是,最后搬家时,因为东西实在是太多了,才不得不选择性地带回了最最重要的几样东西,而把其他的全都忍痛割爱扔了——不管它刻录下了我怎样的美好时光。后来,由于一些原因,原本在CSDN只是一届潜水看客的我,也开始在这里的写博之旅了。于是灵光闪现——我能不能让自己以前写过的五子棋、汉诺塔、象棋等小程序的代码,在CSDN这片天地里得以永生呢br> 但愿我今天写的所有程序,千百年后都能成为证明我曾经来到过这个世界上的化石吧!

2、程序规格

【外部规格】
界面表现形式:CUI

操作方法:通过WSAD键控制光标上下左右移动,按空格键选择或移动棋子。

对战形式:仅可进行双人单机对战,无法联网或人机对战。

胜负判定:程序无法自动判断绝杀或困毙,须棋手手动吃掉对方的将或帅,才判定胜负。将帅照面时,将或帅可以直接飞到对方的九宫里吃掉对方棋子。

犯规检测:本程序无用以检测是否存在长打犯规行为的功能。

回合制:否。当前版本暂时为一回合游戏。胜负分晓即结束游戏。

BUG情况:最新版本中暂未发现肉眼可见的BUG。

【内部规格】
开发所用语言:C语言

代码总行数:478行

函数总数:16个(包括main函数)

初版时间:2017年3月5日

此版时间:2021年4月23日

3、核心算法与象棋规则、术语

3.1 行棋规则与行棋判定函数设计

在这里,只考虑了红方棋子的情况,目的是为了让大家理解棋盘上的一些相对位置和线如何用数学语言去表达。至于黑方棋子的情况,由于这个博主很懒 为了给大家一个自己思考的机会,也为了文章更加简洁美观,在这里不作探讨。请有兴趣的同志自己思考补充完成。

3.1.0 象棋棋盘

象棋棋盘长这样。应该不会有人没见过吧会吧不会吧br>

【项目展示】自己用C语言编写的象棋小程序

河界:全称“楚河汉界”,是划分双方阵地的界限。过了河界就是对方阵地。
九宫:画斜线的地方的九个点叫九宫。将/帅和士只能在九宫内行棋,永远不可出宫(将帅照面的情况除外,此时将或帅可直接飞到对方九宫里吃掉对方的王)。

3.1.1 兵/卒

兵/卒的行棋规则
①兵卒全程禁止后退;
②兵卒每步只能走一格
③过河兵卒可横向行棋,没过河的只能前进

【项目展示】自己用C语言编写的象棋小程序

兵/卒合法行棋条件的数学表达
{ ① 向 前 行 一 格   ( y 起 始 点 > 4 ) ① 向 前 行 一 格 ∨ ② 横 向 行 一 格   ( y 起 始 点 ≤ 4 )

{①向前行一格 (y起始点>4)①向前行一格∨②横向行一格 (y起始点≤4)” role=”presentation” style=”position: relative;”>

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月21日
下一篇 2021年3月21日

相关推荐