如何用c语言编写军旗游戏

今天教大家如何用C语言编写军旗游戏 ~

1.效果图:

 2.主要代码:

#include <graphics.h>
#include <time.h>

#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;

IMAGE image;
AREA area[6][6];		// 定义棋盘大小
CHESS datachess[19];	// 几种基本棋子类型
CHOOSE choose;			// 用户选择信息
MOUSEMSG mmsg;			// 鼠标信息
TEAM  user;				// 执棋方
int lockchessboard = 0;	// 是否锁定棋盘
int i;					// 当前鼠标所在区域的坐标
int j;                         
char *str[]={"工","班","排","连","营","团","旅","师","军","司","棋","炸","变","雷","飞","超","升","神","仙"}; 

void init();      
void initchessbute();	// 给初始化棋子基本参数
void initvalue();
void drawboard();		// 画棋盘
void randomarr(int *);	// 实现棋的随机排列
void judge();
void getpreij();		// 获得当前鼠标所在区域坐标
int  checkij();			// 检查当鼠标所在区域
void open();			// 打开所在区域
int  whemove();			// 判断是否能移动
void move();			// 移动
int  judgeunknow();		// 检测当前未翻开棋子数
ATTSTYLE  wheattack();	// 判断是否能攻击
void kill();			// 杀死当前选择的棋
void killself();		// 自杀
void perishtogether();	// 同归于尽
void getteam();			// 用作改变棋子类型时,对棋子所属方赋值
void userchange();		// 交换执棋方
void judgebunko();		// 判断输赢
void choosearea();		// 选定区域
void cancelchoose();	// 取消选定
void change();			// 变身
void bluewin();			// 蓝方胜利
void redwin();			// 红方胜利
void gamehelp();		// 规则说明
void quit();			// 退出游戏
void peace();			// 和棋
void surrender();		// 投降
void resetchessboard();	// 重置

// 下面几个函数为判断棋子的攻击类型
ATTSTYLE judgegong();	// 判断工兵
ATTSTYLE judgecom();	// 判普通人物
ATTSTYLE judgezha();	// 判断炸弹

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 init()
{
	initgraph(640, 480);

	setorigin(RESETX, RESETY);		// 重置原点
	setaspectratio(1, -1);			// 把 y 轴上方设为正半轴

	drawboard();
	initvalue();

}

void drawboard()					// 画棋盘
{
	int i1;

	setlinecolor(WHITE);
	for (i1=0; i1<7; i1++)
	{
		line(i1*CHESIZE, 0, i1*CHESIZE, CHESIZE*6);
	}

	for (i1=0; i1<7; i1++)
	{
		line(0, i1*CHESIZE, CHESIZE*6, i1*CHESIZE);
	}


	setlinecolor(WHITE);
	setfillcolor(RED);
	rectangle(-10, -10, CHESIZE*6+10, CHESIZE*6+10);
	floodfill(-1, -1, WHITE);

	rectangle(7*CHESIZE, CHESIZE, 9*CHESIZE, 6*CHESIZE);
	line(7*CHESIZE, 5*CHESIZE, 9*CHESIZE, 5*CHESIZE);
	line(7*CHESIZE, 4*CHESIZE, 9*CHESIZE, 4*CHESIZE);
	line(7*CHESIZE, 3*CHESIZE, 9*CHESIZE, 3*CHESIZE);
	line(7*CHESIZE, 2*CHESIZE, 9*CHESIZE, 2*CHESIZE);
	setaspectratio(1, 1);
	settextstyle(35, 18, "黑体");
	settextcolor(RED);
	outtextxy(7*CHESIZE+2, -6*CHESIZE+2, "帮助");
	settextcolor(BROWN);
	outtextxy(7*CHESIZE+2, -5*CHESIZE+2, "投降");
	settextcolor(GREEN);
	outtextxy(7*CHESIZE+2, -4*CHESIZE+2, "和棋");
	settextcolor(YELLOW);
	outtextxy(7*CHESIZE+2, -3*CHESIZE+2, "重置");
	settextcolor(CYAN);
	outtextxy(7*CHESIZE+2, -2*CHESIZE+2, "退出");

	settextcolor(LIGHTMAGENTA);
	settextstyle(50, 20, "黑体");
	outtextxy(CHESIZE, -CHESIZE*8, "两国军旗"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值