c++代码实现象棋 int main() { Qipan qipan; int start_x,start_y,end_x,end_y; qipan.show(); string color; int step=1; string colors[2]={"B","R"}; while(1) { while(1) { color=colors[step%2]; cout<<"请输入第"<<step<<"步需要移动"<<color<<"色棋子的原始位置坐标(x和y):"<<endl; cin>>start_x>>start_y; if(!qipan.exist(start_x,start_y,color)) { cout<<"坐标("<<start_x<<","<<start_y<<")没有"<<color<<"色棋子,本步重走"<<endl; continue; } cout<<"请输入第"<<step<<"步需要移动"<<color<<"色棋子的目的位置坐标(x和y):"<<endl; cin>>end_x>>end_y; if(qipan.exist(end_x,end_y,color)) { cout<<"坐标("<<end_x<<","<<end_y<<") 有"<<color<<"色棋子,本步重走"<<endl; continue; } if(!qipan.q[start_x][start_y]->move(qipan,start_x,start_y,end_x,end_y)) { cout<<"移动规则不符,本步重走"<<endl; continue; } //移动 qipan.q[end_x][end_y]=qipan.q[start_x][start_y]; qipan.q[start_x][start_y]=&qipan.space; //刷新棋盘 system("cls"); qipan.show(); step++; } } return 0; } 从给定的文件信息来看,这段代码是用C++语言编写的,旨在实现一个象棋程序。在这个程序中,它包括了一些基本的类和函数,用于展示象棋棋盘,以及根据用户输入来移动棋子。下面我将详细解释其中的知识点。 main函数是程序的入口点。在这个函数中,首先创建了一个Qipan类型的对象qipan,这是用来管理象棋棋盘的。接着定义了几个整型变量start_x, start_y, end_x, end_y,用于存储用户输入的坐标位置。 随后,程序进入一个无限循环,用于不断地让用户输入移动棋子的指令。在这个循环中,使用了颜色数组colors来记录当前是哪一方的回合,并提示用户输入移动的步骤数和颜色。通过调用qipan对象的show方法来显示棋盘,并通过exist方法来判断用户输入的起始位置是否有棋子。 程序接着检查用户输入的目的位置,确保这个位置上没有同色棋子,以及是否符合棋子的移动规则。如果移动符合规则,程序就执行移动操作,并通过交换指针来更新棋盘数组。然后,使用system("cls")来清屏,并重新显示棋盘。 这段代码中还展示了一些棋子类的声明和move方法的框架。每个棋子类都继承自Qizi类,且都提供了自己的move方法。虽然这些move方法的实现被省略了,但是可以推测这个方法会根据各自棋子的移动规则来判断移动是否合法。例如,车(Che)的移动应该是沿着一条直线,没有其他棋子阻挡。 此外,程序还包括了一些未实现的方法,比如Space类的move方法。Space类代表的是棋盘上的空格,它应该允许任何棋子移动到这个位置。 为了构建完整的象棋游戏,程序还需要实现所有的棋子类(例如马(Ma)、炮(Pao)、象(Xiang)、士(Shi)、帅(Shuai)、将(Jiang)、兵(Bing)、卒(Zu))的移动规则。每个棋子的移动规则是特定的,这在实现时需要在各自的move方法中用代码来表示。 整个程序涉及到的C++编程概念包括类的继承、多态、数组的操作、循环控制语句、条件判断以及C++标准库中的iostream和string的使用。例如,使用iostream库来处理输入输出,使用string类来处理字符串相关的操作。 需要注意的是,代码中存在一些中文注释和变量命名,这在正式的软件开发中是不被推荐的做法,因为它会降低代码的可读性和国际化程度。代码应该使用英文注释和规范的变量命名。 由于代码示例并不完整,实现一个完整的象棋游戏还需要定义棋盘的数据结构、所有棋子的逻辑以及游戏结束条件的判断等。此外,为了提高用户体验,通常会有一个用户友好的界面,而非仅仅使用控制台输入输出。这可能需要使用图形用户界面(GUI)库,比如Qt或者SDL,来增强程序的交互性。















#include<string>
#include"qi.h"
#include<stdlib.h>
using namespace std;
Qizi::Qizi(string name,string color):name(name),color(color){}
//车的实现
Che::Che(string color):Qizi("che",color){}
int Che::move(Qipan &qp, int start_x,int start_y, int end_x,int end_y)
{
int i;
//起点、终点不在同一条直线上
if((start_x!=end_x) && (start_y!=end_y))
{
cout<<"车必须走直线"<<endl;
return 0;
}
//横向移动时,中间是否有棋子。
if(start_x==end_x)
{
if(start_y<end_y)
{
for(i=start_y+1;i<end_y;i++)
if(qp.q[start_x][i]->name!=" ")
{
cout<<"水平线路上有棋子"<<endl;
return 0;
}
}
{
for(i=end_y+1;i<start_y;i++)
if(qp.q[start_x][i]->name!=" ")
{
cout<<"水平线路上有棋子"<<endl;
return 0;
}
}
}
//纵向移动时,中间是否有棋子。
if(start_y==end_y)
{
if(start_x<end_x)
{
for(i=start_x+1;i<end_x;i++)
if(qp.q[i][start_y]->name!=" ")
{
cout<<"垂直线路上有棋子"<<endl;
return 0;
}
}
else
{
for(i=end_x+1;i<start_x;i++)
if(qp.q[i][start_y]->name!=" ")
{
cout<<"垂直线路上有棋子"<<endl;
return 0;
}
剩余6页未读,继续阅读


- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 国家网络安全宣传周活动心得.doc
- 数据结构与算法(5)ppt课件.ppt
- 电子商务的求职信范文.doc
- 最新国家开放大学电大《文学英语赏析》网络核心课形考网考作业及答案.pdf
- 锅炉过热气温控制MATLAB及控制系统仿真.doc
- 网络系统集成概述.docx
- 从技术专家到领导者:管理转型指南
- 软件项目验收报告模板.doc
- 游戏开发团队建设培养.pptx
- 医学科研数据挖掘概述.ppt
- 销售项目管理LTC.ppt
- 有关计算机求职信三篇.docx
- 武汉大学网络营销()网络营销产品层次.pptx
- 中职-计算机基础教学工作总结.docx
- 无线网络勘察技术.ppt
- 电子商务项目成本效益分析方法研究.doc


