如何用C++写一个军旗耍耍

 

 

 跟我小时候玩的军旗不太一样但是玩法是差不多der!个人觉得小时候玩的线下的比较好玩,部分代码放下面了:

#define	CHESIZE	40		// 棋盘尺寸,不能随意调整
#define	RESETX	170
#define	RESETY	350		// 重置原点

typedef enum			// 要用到的棋子ID
{
	si, jun, shi, lv, tuan,
	ying, lian, pai, ban, gong,
	fei, chao, zha, qi, lei, bian,
	xian, sheng, shen
}CHESSID;

typedef enum			// 攻击类型
{
	comatt, preatt, noatt
}ATTSTYLE;

typedef enum			// 当前游戏方和棋子所属方
{
	blue, red, white
}TEAM;

typedef enum			// 选中与未选中
{
	alchoose, unchoose
}CHOOSESTATE;

typedef enum			// 区域状态
{
	unknow, empty, exist
}STATE;

typedef struct			// 坐标
{
	int x;
	int y;
}COOR;

typedef struct			// 棋子
{
	CHESSID    id;		// 棋子的ID
	int        power;	// 棋子的等级
	TEAM       team;	// 所属方
	char* image;	// 该棋子的图片,考虑到运行问题,本程序用字代替
	int        scoopc;	// 工兵是挖到的地雷数
}CHESS;

typedef struct			// 区域
{
	COOR crdld;			// 区域的左下坐标
	CHESS chess;		// 区域的棋子
	STATE  state;		// 区域状态
}AREA;

typedef struct			// 用户的选择信息
{
	int i;
	int j;
	CHOOSESTATE state;	// 选择状态
}CHOOSE;
void main()				// 主函数
{
	init();

	while (true)
	{
		mmsg = GetMouseMsg();
		getpreij();

		if (mmsg.uMsg == WM_LBUTTONDOWN)   //单击左键
		{
			judge();
		}
		else if (mmsg.uMsg == WM_RBUTTONDOWN
			&& choose.state == alchoose) //单击右键
		{
			cancelchoose();
		}
		else if (mmsg.uMsg == WM_MBUTTONDOWN
			&& choose.state == alchoose
			&& area[choose.i][choose.j].chess.id != zha) //单击中键
		{
			killself();
			cancelchoose();
			userchange();
			judgebunko();
		}
	}
}
// 杀死对方
void kill()
{
	move();
}

// 自杀
void killself()
{
	setfillcolor(BLACK);
	floodfill(area[choose.i][choose.j].crdld.x, area[choose.i][choose.j].crdld.y, GREEN);
	area[choose.i][choose.j].state = empty;
}

// 同归于尽
void perishtogether()
{
	setfillcolor(BLACK);
	cancelchoose();
	floodfill(area[choose.i][choose.j].crdld.x, area[choose.i][choose.j].crdld.y, WHITE);
	floodfill(area[i][j].crdld.x, area[i][j].crdld.y, WHITE);

	area[choose.i][choose.j].state = empty;
	area[i][j].state = empty;
}
// 游戏说明
void gamehelp()
{
	getimage(&image, -10, -10, 500, 350);
	cleardevice();

	setorigin(50, 0);
	setaspectratio(1, 1);

	settextcolor(RED);
	settextstyle(14, 0, "黑体");
	outtextxy(-50, 0, "注:单击鼠标左键回到游戏界面");

	settextcolor(WHITE);
	settextstyle(24, 0, "黑体");
	outtextxy(230, 5, "游戏说明");
	settextstyle(12, 0, "宋体");
	outtextxy(0, 35, "棋盘大小:6*6;              棋子总数:36;            敌对双方:红,蓝");
	outtextxy(0, 60, "棋子类别:红棋(红方操作,14个) 蓝棋(蓝方操作,14个) 紫棋(功能棋,8个)");
	outtextxy(0, 85, "红棋(蓝棋)类型:司令,军长,师长,旅长,团长,营长,连长,班长,军旗,工兵*2,炸弹*2.");
	outtextxy(0, 100, "紫棋类型:地雷*4,变身棋*4.  注:'*'后面表示该棋的数量,没注则只有一个");
	outtextxy(0, 125, "规则说明:1.司令最大,工兵最小,大的吃小的,一样就同归于尽,");
	outtextxy(textwidth("规则说明:1."), 140, "炸弹能炸紫棋和敌方除军旗外所有的棋(炸弹也会消失).");
	outtextxy(textwidth("规则说明:"), 155, "2.工兵可挖地雷,挖完后可扛对方棋变身(挖的雷越多,变成的人物越厉害).");
	outtextxy(textwidth("规则说明:"), 170, "3.人物棋可吃变,吃后能变成工兵~军长中的一种,有一定几率变成隐藏BOSS.");
	outtextxy(textwidth("规则说明:"), 185, "4.人物棋可自杀(算一次操作).");
	outtextxy(textwidth("规则说明:"), 200, "5.执棋方进行完一次有效操作后,就换对方执棋(边框颜色表当前执棋方).");
	outtextxy(textwidth("规则说明:"), 215, "6.一方棋子(军旗除外)全被消灭,就算输; 同时全部没有,则和棋.");
	outtextxy(0, 240, "执棋方能进行的操作:操作1:打开棋子(算一次操作).");
	outtextxy(textwidth("执棋方能进行的操作:"), 255, "操作2:攻击.");
	outtextxy(textwidth("执棋方能进行的操作:"), 270, "操作3:移动.");
	outtextxy(textwidth("执棋方能进行的操作:"), 285, "操作4:工兵(已挖雷)扛旗.");
	outtextxy(textwidth("执棋方能进行的操作:"), 300, "操作5:吃变身卡.");
	outtextxy(textwidth("执棋方能进行的操作:"), 315, "操作6:自杀.");
	outtextxy(0, 340, "实施游戏操作说明(鼠标操作):实施操作1:选择要打开棋子所在的区域,单击.");
	outtextxy(textwidth("实施游戏操作说明(鼠标操作):"), 355, "实施操作2~5:单击选中主动方(棋子边框会变绿)");
	outtextxy(textwidth("实施游戏操作说明(鼠标操作):实施操作2~5:"), 370, "再单击选中被动方.");
	outtextxy(textwidth("实施游戏操作说明(鼠标操作):"), 385, "实施操作6:选中己方棋子,单机鼠标的中键.");
	settextcolor(RED);
	outtextxy(textwidth("实施游戏操作说明(鼠标操作):"), 400, "注:要进行其他操作,必先撤销当前选定(单击右键撤销)");
	settextcolor(WHITE);
	setlinecolor(WHITE);
	line(-30, 420, 570, 420);
	outtextxy(0, 425, "人物棋等级一览(等高杀等小):工1 班2 连3 营4 团5 旅6 师7");
	outtextxy(textwidth("人物棋等级一览(等高杀等小):"), 440, "军8 飞8 司9 升9 神10 仙10");
	outtextxy(0, 455, "注:'飞' '升' '神' '仙' 都为工兵挖雷后扛旗所变,'飞''升''神'能直线飞,'仙'能满天飞");

	while (true)
	{
		mmsg = GetMouseMsg();

		if (mmsg.uMsg == WM_LBUTTONDOWN)
		{
			break;
		}
	}

	cleardevice();
	setorigin(RESETX, RESETY);
	setaspectratio(1, -1);
	putimage(-10, -10, &image);
}

这个代码有点多就不全放了,大家需要源代码的进群【881577770】领取一下!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值