• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: C/C++
  • 标签: 华容道  c++  

资源简介

华容道基本功能,简单的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 )
{

评论

共有 条评论