回调函数的案例

参考链接:

指针参数在函数中不能改变指针指向的原因和解决方法

https://www.cnblogs.com/zhaoshuai1215/p/3450788.html

14  面向接口编程

14.1案例背景

一般的企业信息系统都有成熟的框架。软件框架一般不发生变化,能自由的集成第三方厂商的产品。

14.2 案例需求

要求在企业信息系统框架中集成第三方厂商的游戏功能产品。软件设计要求:能够满足用户需求,完成的产品可以与用户完美对接。

14.3 案例要求

  1)能支持多个厂商的游戏功能产品入围

       2)能够实现第三方产品和用户产品的对接

       3)系统整体框架不轻易发生改变

14.4 编程提示

           1)抽象游戏中玩家结构体设计(struct Player)

   2)框架接口设计(playGame)

          a) 初始化游戏

          b) 核心功能战斗

          c) 查看玩家信息

          d) 结束游戏

3)   a) 游戏厂商1入围(GameCompany1)

         b) 游戏厂商2入围(GameCompany2)

4)框架接口分文件编写

//回调函数
 
//以下是函数指针类型
//初始化游戏
typedef void(*INIT_GAME)(void ** gameHandle, char * name);
 
//游戏战斗 返回游戏战斗结果 如果是1 代表游戏胜利 返回0 代表战斗失败
typedef int(*FIGHT_GAME)(void * gamehandle, int gameLevel);
 
//查看玩家信息
typedef void(*PRINT_GAME)(void * gameHandle);
 
//离开游戏
typedef void(*CLOSE_GAME)(void * gameHandle);
 
//形参都是传入的函数指针
void playGame(INIT_GAME init, FIGHT_GAME fight, PRINT_GAME printGame, CLOSE_GAME closeGame)
{
	//初始化游戏
	void * gameHandel = NULL;
	printf("请输入玩家的姓名:\n");
	char name[64];
	scanf("%s", name);//sscanf会直接略过 打印下面的信息*****
 
	init(&gameHandel, name);
 
	//游戏战斗
	int level = -1;
 
	while (1)
	{
		getchar();
		system("cls");
 
		printf("请选择游戏难度:\n");
		printf("1、普通\n");
		printf("2、中等\n");
		printf("3、困难\n");
 
		scanf("%d", &level);//scanf sscanf 差别?
 
		getchar();//****重点
 
		int ret = fight(gameHandel, level);
		if (ret == 0)
		{
			printf("挑战失败\n");
			break;
		}
		else
		{
			printf("挑战成功\n");
			printGame(gameHandel);
		}
 
	}
 
	//printf("请选择游戏难度:\n");
	//printf("1、普通\n");
	//printf("2、中等\n");
	//printf("3、困难\n");
 
	//scanf("%d", &level);//scanf sscanf 差别?
 
	//int ret = fight(gameHandel, level);
	//if (ret == 0)
	//	printf("挑战失败\n");
	//else
	//{
	//	printf("挑战成功\n");
	//	printGame(gameHandel);
	//}
 
	//离开游戏
	closeGame(gameHandel);
 
 
}
 
 
void main()
{
	srand((unsigned int)time(NULL));
 
	playGame(INIT_GAME_COMPANY, FIGHT_GAME_COMPANY, PRINT_GAME_COMPANY, CLOSE_GAME_COMPANY);
	
	
	
	
	
	system("pause");
}

  

猜你喜欢

转载自www.cnblogs.com/clarencezzh/p/11745278.html