资源简介
华容道基本功能,简单的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星算法
相关资源
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
- FTP客户端源码(c++)
- c++ 画图(14Qt-XPS)
- c++多边形交并差运算
- VC++基于OpenGL模拟的一个3维空间模型
评论
共有 条评论