int StepJudge(int oldx,int oldy,int nowx,int nowy)

/* oldx,oldy 棋字原来位置 */

/* oldx,oldy 棋字新位置 */

/* 判断从原位置到新位置的合法性 */

{

int index,count=0;

int nox,noy;

int x,y,x1,x2,y1,y2;

BYTE ChessId; /* 棋字是哪一方的,有RED,BLUE,NONE三种值 */

ChessId=map[oldx][oldy].Id;

if(ChessId==NONE) return 0;

if(oldx==nowx&&oldy==nowy) return 0;

if(nowx>8||nowx<0||nowy<0||nowy>9) return 0;

nox=nowx-oldx;noy=nowy-oldy;

switch(map[oldx][oldy].num)

{

case 0:/*HeaderCapital*/将或帅

{

if(map[nowx][nowy].num==0&&map[nowx][nowy].Id!=NONE&&oldx==nowx)

{

/*Face to Face*/

y1=oldy;y2=nowy;

if(nowy

for(y=y1+1;y

if(count==0) return 1;

}

if(abs(nox)>1||abs(noy)>1||abs(nox)==1&&abs(noy)==1) return 0;

if(nowy>2&&nowy<7||nowx<3||nowx>5) return 0;

break;

}

case 14: case 15:/*Genaral*/车

{

if(abs(nox)!=0&&abs(noy)!=0) return 0;

if(abs(nox)>1&&noy==0)

{

x1=oldx;x2=nowx;

if(nowx

for(x=x1+1;x

}

if(nox==0&&abs(noy)>1)

{

y1=oldy;y2=nowy;

if(nowy

for(y=y1+1;y

}

break;

}

case 10: case 11:/*Horse*/马

{

if(abs(nox)==2&&abs(noy)==1||abs(nox)==1&&abs(noy)==2)

{

if(abs(nox)==1&&map[oldx][oldy+noy/2].Id!=NONE) return 0;

if(abs(nox)==2&&map[oldx+nox/2][oldy].Id!=NONE) return 0;

break;

}

else return 0;

}

case 12: case 13:/*Gun*/炮

{

if(abs(nox)>0&&abs(noy)>0) return 0;

if(abs(nox)>0&&noy==0)

{

x1=oldx;x2=nowx;

if(nowx

for(x=x1+1;x

}

else if(nox==0&&abs(noy)>0)

{

y1=oldy;y2=nowy;

if(nowy

for(y=y1+1;y

}

if(count==0&&map[nowx][nowy].Id!=NONE) return 0;

if(count==1&&map[nowx][nowy].Id==NONE) return 0;

if(count>1) return 0;

break;

}

case 3: case 4:/*Minister*/象或相

{

if(abs(nox)!=2||abs(noy)!=2) return 0;

else if(map[oldx+nox/2][oldy+noy/2].Id!=NONE) return 0;

if(nowy==0||nowy==4||nowy==5||nowy==9)

if(nowx==2||nowx==6) break;

if(nowy==2||nowy==7)

if(nowx==0||nowx==4||nowx==8 ) break;

}

case 1: case 2:/*Shi*/士或仕

{

if(abs(nox)!=1||abs(noy)!=1) return 0;

if(nowy>2&&nowy<7||nowx<3||nowx>5) return 0;

break;

}

case 5: case 6: case 7: case 8: case 9: /*Soldier*/兵或卒

{

if(abs(nox)>0&&abs(noy)>0) return 0;

if(ChessId==GREEN&&GreenChess[0].y<3||ChessId==RED&&RedChess[0].y<3)

{

if(oldy>4)

{

if(nox==0&&noy!=1) return 0;

if(abs(nox)!=1&&noy==0) return 0;

}

if(oldy<5) if(nox!=0||noy!=1) return 0;

}

if(ChessId==GREEN&&GreenChess[0].y>6||ChessId==RED&&RedChess[0].y>6)

{

if(oldy<5)

{

if(nox==0&&noy!=-1) return 0;

if(abs(nox)!=1&&noy==0) return 0;

}

if(oldy>4) if(nox!=0||noy!=-1) return 0;

}

index=map[oldx][oldy].num;

if(ChessId==GREEN)

if(GreenChess[0].y<3&&GreenChess[index].y>4||GreenChess[0].y>6&&GreenChess[index].y<5)

GreenChess[index].FixLevel=ADVANCED_SOLDIER_LEVEL;

if(ChessId==RED)

if(RedChess[0].y<3&&RedChess[index].y>4||RedChess[0].y>6&&RedChess[index].y<5)

RedChess[index].FixLevel=ADVANCED_SOLDIER_LEVEL;//兵过河后等级值加1

break;

}

}

if(ChessId==map[nowx][nowy].Id) return 2;

else return 1;

}

网上找的一个算法,大家研究下。

人机互弈又是怎样实现的呢?

[本帖最后由 lxbkey 于 2008-7-20 12:00 编辑]

象棋c语言算法,中国象棋的算法是怎样的?相关推荐

  1. java象棋代码注释_中国象棋程序的设计与实现(十一)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)...

    上几篇中,我们详细介绍了,棋盘类的定义和关键属性,简要介绍了棋盘绘制算法的骨架. 本篇,我们将详细解读棋盘绘制算法的每一个细节. 强烈建议,大家结合文章末尾的"棋盘截图"来思考绘制 ...

  2. android象棋源码 ai,中国象棋代码,参考象眼,AI算法相当给力

    [实例简介] 中国象棋代码,参考象眼,AI算法相当给力 [实例截图] [核心代码] chineseChess └── chineseChess ├── AndroidManifest.xml ├── ...

  3. C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)

    前言:中国象棋的规则很多人都懂,用C语言做一个中国象棋游戏,其要点是怎么把抽象的规则变成形象.具体的代码.本项目提供详细的实现思路,源码附带大量的注释说明,源码逐步地实现了每一种棋类的走棋规则.吃棋规 ...

  4. linux下的c语言实现象棋,用C语言实现中国象棋

    基于五子棋框架上的 象棋 小游戏 本游戏是上各种水课无聊时的产物...不参考现有游戏从零开始实现各项功能. 游戏配置:二维数组,循环系统,wasd基本移动,调整窗台的函数,以及富足的发呆时间.. 完整 ...

  5. 中国象棋棋盘c语言编程,中国象棋 C语言编程.ppt

    中国象棋 C语言编程 双人对弈中国象棋 程序所负责内容介绍 计算机生成红黑双方以及棋盘. 各个棋子的移动. 当危险时显示被"将军". 分支思路 1.棋盘棋子的制作与输出 棋盘 走子 ...

  6. C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!

    中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规 ...

  7. 用C语言实现中国象棋(mac+windows双版本)

    今天突然翻到了大一上学期的c语言中国象棋大作业,想到这已经是我的编程水平巅峰,不由得心生悲哀,只好发出来记录一下. 零.前言 本程序已知的缺陷有:未能实现将/帅不能相对这一规则,其他bug暂时未知,建 ...

  8. 安卓android中国象棋chess程序项目源码源代码,C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!,c语言笔记大全...

    #include#include #define INTERVAL 50 //前面的间隔 #define CHESS_GRID_SIZE 70 //格子宽度 #define ROW 10 #defin ...

  9. java象棋实验报告_中国象棋java程序设计实验报告

    中国象棋java程序设计实验报告 东北大学秦皇岛分校信息与计算科学系Java 程序设计实验报告专业名称 信 息 与 计 算 科 学班级学号 7080206学生姓名 彭 军指导教师 王 薇完成时间 20 ...

  10. java象棋实验报告_中国象棋java程序设计实验报告.doc

    中国象棋java程序设计实验报告.doc 东北大学秦皇岛分校 信息与计算科学系 Java 程序设计实验报告 专业名称 信息与计算科学 班级学号 7080206 学生姓名 彭 军 指导教师 王薇 完成时 ...

最新文章

  1. element UI 选择器 踩的坑 获取到了value 显示不出对应的 value
  2. Python3 configparser 中文乱码
  3. 网络编程学习笔记(getsockopt和setsockopt函数)
  4. 编程之美读书笔记2.1—求二进制数中1的个数
  5. (Z)复杂繁琐的芯片设计流程
  6. 《Groovy in Action》笔记
  7. ubuntu解决tensorflow提示未编译使用SSE3、SSE4.1、SSE4.2、AVX、AVX2、FMA的问题
  8. poj 1328 贪心+qsort
  9. 在CentOS6.5上安装/启动PostgreSQL
  10. python 给数组修改值_DAY2-step4 Python数组:创建,追加,弹出,反转示例
  11. 已经通过CMMI/CMM3级评估的企业名单
  12. 「Mac小技巧」教你如何解决WiFi的国家地区代码冲突
  13. 为什么要学习鸿蒙,HarmonyOS不只是操作系统
  14. C++面向对象程序设计——简单的商品销售题
  15. 支付宝生活号h5网页--蚂蚁认证
  16. 关于win10打印机设置错误,无法打印的解决办法
  17. rtf格式转word格式
  18. 南京沁恒推出的国产 M3 架构芯片与意法半导体 M3 芯片对比
  19. python基础数据类型
  20. 恋爱骗局泛滥,过亿单身女性成待宰羔羊!

热门文章

  1. Idea配置类和方法的注释, for循环快捷键
  2. 【cartographer】(2)分枝定界算法
  3. simulink中mux和function关联时信号维度报错(xxx does not fully set the dimensions of output xxx)
  4. 抖音seo账号矩阵新玩法?应该如何借助新的接口技术开发
  5. 用python做自我介绍_用python做个自我介绍(python入门教程)_逻辑教育
  6. 阿里云服务器9月优惠来啦
  7. 桌面图标无缘无故变成白色了,咋整?
  8. 自学AE AK大神笔记026_地震效果
  9. android 仿小红书标签,Android仿小红书图片标签第三方库
  10. tar 解压 跳过第一级目录