象棋c语言算法,中国象棋的算法是怎样的?
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语言算法,中国象棋的算法是怎样的?相关推荐
- java象棋代码注释_中国象棋程序的设计与实现(十一)--棋盘绘制算法(尽管注释非常详细,完全理解仍有难度)...
上几篇中,我们详细介绍了,棋盘类的定义和关键属性,简要介绍了棋盘绘制算法的骨架. 本篇,我们将详细解读棋盘绘制算法的每一个细节. 强烈建议,大家结合文章末尾的"棋盘截图"来思考绘制 ...
- android象棋源码 ai,中国象棋代码,参考象眼,AI算法相当给力
[实例简介] 中国象棋代码,参考象眼,AI算法相当给力 [实例截图] [核心代码] chineseChess └── chineseChess ├── AndroidManifest.xml ├── ...
- C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)
前言:中国象棋的规则很多人都懂,用C语言做一个中国象棋游戏,其要点是怎么把抽象的规则变成形象.具体的代码.本项目提供详细的实现思路,源码附带大量的注释说明,源码逐步地实现了每一种棋类的走棋规则.吃棋规 ...
- linux下的c语言实现象棋,用C语言实现中国象棋
基于五子棋框架上的 象棋 小游戏 本游戏是上各种水课无聊时的产物...不参考现有游戏从零开始实现各项功能. 游戏配置:二维数组,循环系统,wasd基本移动,调整窗台的函数,以及富足的发呆时间.. 完整 ...
- 中国象棋棋盘c语言编程,中国象棋 C语言编程.ppt
中国象棋 C语言编程 双人对弈中国象棋 程序所负责内容介绍 计算机生成红黑双方以及棋盘. 各个棋子的移动. 当危险时显示被"将军". 分支思路 1.棋盘棋子的制作与输出 棋盘 走子 ...
- C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!
中国象棋是起源于中国的一种棋,属于二人对抗性游戏的一种,在中国有着悠久的历史.由于用具简单,趣味性强,成为流行极为广泛的棋艺活动. 它是中国棋文化,也是中华民族的文化瑰宝,它源远流长,趣味浓厚,基本规 ...
- 用C语言实现中国象棋(mac+windows双版本)
今天突然翻到了大一上学期的c语言中国象棋大作业,想到这已经是我的编程水平巅峰,不由得心生悲哀,只好发出来记录一下. 零.前言 本程序已知的缺陷有:未能实现将/帅不能相对这一规则,其他bug暂时未知,建 ...
- 安卓android中国象棋chess程序项目源码源代码,C/C++编程笔记:C语言打造中国象棋游戏,项目源代码分享!,c语言笔记大全...
#include#include #define INTERVAL 50 //前面的间隔 #define CHESS_GRID_SIZE 70 //格子宽度 #define ROW 10 #defin ...
- java象棋实验报告_中国象棋java程序设计实验报告
中国象棋java程序设计实验报告 东北大学秦皇岛分校信息与计算科学系Java 程序设计实验报告专业名称 信 息 与 计 算 科 学班级学号 7080206学生姓名 彭 军指导教师 王 薇完成时间 20 ...
- java象棋实验报告_中国象棋java程序设计实验报告.doc
中国象棋java程序设计实验报告.doc 东北大学秦皇岛分校 信息与计算科学系 Java 程序设计实验报告 专业名称 信息与计算科学 班级学号 7080206 学生姓名 彭 军 指导教师 王薇 完成时 ...
最新文章
- element UI 选择器 踩的坑 获取到了value 显示不出对应的 value
- Python3 configparser 中文乱码
- 网络编程学习笔记(getsockopt和setsockopt函数)
- 编程之美读书笔记2.1—求二进制数中1的个数
- (Z)复杂繁琐的芯片设计流程
- 《Groovy in Action》笔记
- ubuntu解决tensorflow提示未编译使用SSE3、SSE4.1、SSE4.2、AVX、AVX2、FMA的问题
- poj 1328 贪心+qsort
- 在CentOS6.5上安装/启动PostgreSQL
- python 给数组修改值_DAY2-step4 Python数组:创建,追加,弹出,反转示例
- 已经通过CMMI/CMM3级评估的企业名单
- 「Mac小技巧」教你如何解决WiFi的国家地区代码冲突
- 为什么要学习鸿蒙,HarmonyOS不只是操作系统
- C++面向对象程序设计——简单的商品销售题
- 支付宝生活号h5网页--蚂蚁认证
- 关于win10打印机设置错误,无法打印的解决办法
- rtf格式转word格式
- 南京沁恒推出的国产 M3 架构芯片与意法半导体 M3 芯片对比
- python基础数据类型
- 恋爱骗局泛滥,过亿单身女性成待宰羔羊!
热门文章
- Idea配置类和方法的注释, for循环快捷键
- 【cartographer】(2)分枝定界算法
- simulink中mux和function关联时信号维度报错(xxx does not fully set the dimensions of output xxx)
- 抖音seo账号矩阵新玩法?应该如何借助新的接口技术开发
- 用python做自我介绍_用python做个自我介绍(python入门教程)_逻辑教育
- 阿里云服务器9月优惠来啦
- 桌面图标无缘无故变成白色了,咋整?
- 自学AE AK大神笔记026_地震效果
- android 仿小红书标签,Android仿小红书图片标签第三方库
- tar 解压 跳过第一级目录