资源简介
华容道基本功能,简单的c++代码实现,适合初学者,需要学过数组等内容,以及一点点对结构的了解。主要是提供一个编程思路。
代码片段和文件信息
#include
#include
using namespace std;
//位置类型
struct Position
{
int x y; //坐标位置(xy)
};
//棋子形状类型
struct Shape
{
int h w; //棋子的高度和宽度,以棋盘格度量
};
//棋子类型
struct Chessman
{
char *cmd_name; //棋子的控制命令
char *surface; //棋子的显示内容
struct Shape cur_size; //当前关卡棋子的形状
struct Position cur_pos; //当前关卡棋子的当前位置
};
//棋子ID
enum ChessID { CC/*曹操*/ GY/*关羽*/ ZF/*张飞*/ MC/*马超*/ HZ/*黄忠*/ ZY/*赵云*/
Z1/*卒1*/ Z2/*卒2*/ Z3/*卒3*/ Z4/*卒4*/ EMPTY CHESS_NUM = EMPTY };
//棋子
struct Chessman chessmen[CHESS_NUM] =
{
{“CC““曹操曹操“}{“GY““关羽“}{“ZF““张飞“}{“MC““马超“}{“HZ““黄忠“}{“ZY““赵云“}
{“Z1““Z1“}{“Z2““Z2“}{“Z3““Z3“}{“Z4““Z4“}
};
//移动ID
enum MoveOp { UP DOWN LEFT RIGHT OP_NUM };
//移动类型
struct Move
{
char name;
int x;
int y;
};
//移动方向
struct Move move_dir[] = {
{ ‘U‘ -1 0 }
{ ‘D‘ 1 0 }
{ ‘L‘ 0 -1 }
{ ‘R‘ 0 1 }
};
//棋盘格类型
struct Cell
{
enum ChessID id; //所放棋子ID
int part; //所属棋子局部位置
};
//关卡类型
struct Level
{
char *name; //关卡名称
struct Shape size[CHESS_NUM]; //关卡棋子形状
struct Position org[CHESS_NUM]; //关卡棋子初始位置
int step; //当前步数
};
struct Cell map[5][4]; //棋盘布局
struct Level levels[] = //游戏关卡
{
{ “横刀立马“
/*曹操 关羽 张飞 马超 黄忠 赵云 卒1 卒2 卒3 卒4 */
{{22}{12}{21}{21}{21}{21}{11}{11}{11}{11}}
{{01}{21}{23}{20}{00}{03}{31}{32}{40}{43}}}
};
struct Level *pcur_level; //当前关卡
void ClearMap();
void ShowMap();
void ShowChessMan( enum ChessID id int part );
bool PlaceChessMan( enum ChessID id struct Shape &s struct Position &pos );
//开始游戏
bool Start( struct Level *lv )
{
int i;
ClearMap();
for( i = 0; i < CHESS_NUM; i++ )
PlaceChessMan( (enum ChessID)i lv->size[i] lv->org[i] );
lv->step = 0;
ShowMap();
return true;
}
//清空棋盘
void ClearMap()
{
int i j;
for( i = 0; i < 5; i++ )
for( j = 0; j < 4; j++ )
map[i][j].id = EMPTY;
return;
}
//显示棋盘布局
void ShowMap()
{
int i = 0 j;
system(“cls“);
cout << pcur_level->step << “ steps:“ << endl;
for( i = 0; i < 5; i++ )
{
for( j = 0; j < 4; j++ )
ShowChessMan( map[i][j].id map[i][j].part );
cout << ‘\n‘;
}
cout << ‘\n‘;
return;
}
//显示棋子
void ShowChessMan( enum ChessID id int part )
{
struct Chessman *p = &chessmen[id];
int pos = part*2;
if( id != EMPTY )
{
cout << p->surface[pos];
cout << p->surface[pos+1];
}
else
cout << “ “;
return;
}
//放置棋子
bool PlaceChessMan( enum ChessID id struct Shape &s struct Position &pos )
{
int i j part = 0;
chessmen[id].cur_size = s;
chessmen[id].cur_pos = pos;
for( i = 0; i < s.h; i++ )
{
int x = pos.x + i;
for( j = 0; j < s.w; j++ )
{
int y = pos.y + j;
map[x][y].id = id;
map[x][y].part = part++;
}
}
return true;
}
//移动棋子
bool MoveChessMan( enum ChessID id enum MoveOp op )
{
struct Chessman *p = &chessmen[id];
struct Move *q = &move_dir[op];
int i j;
if( q->x != 0 )
{
- 上一篇:基于暗通道和导向滤波的图像去雾算法C++实现
- 下一篇:基于二叉堆优化的A星算法
相关资源
- 基于暗通道和导向滤波的图像去雾算
- 学生社团管理系统数据结构课程设计
- python35_d.lib
- C++十进制加减法
- K近邻算法c/c++
- C++实现8方向A*算法
- Pthread 多线程C++动态库+静态库+头文件
- VC++的.cpp文件调用CUDA的.cu文件中的函
- WOA鲸鱼优化算法 C++实现
- 黄金矿工游戏源码c++
- C++API中文版CHM
- windows后台监听键盘事件vs mfc版
- icp C++实现包含测试数据
- 多项式计算
- 诊所信息管理系统C++课程设计报告
- DICOM医学图像格式转换的C++实现
- C++代码提取LBP特征
- 个人银行账户管理程序C++
- 编写并调试一个模拟的进程调度程序
- C++编写的有界面的扫雷游戏
- 遗传算法.cpp
- C++编写的第三人称视角小球Ploygon风格
- C++ Primer Plus第6版源码.zip
- 小甲鱼98集全套数据结构视频
- c++制作黄金矿工
- C/C++:Windows编程—代码获取本地所有
- c++ 课程设计报告多个题目合集 完整
- C++课设高校人员信息管理系统
- c++实现哈夫曼树的编译码
- c++24期网盘链接
评论
共有 条评论