参考链接:
指针参数在函数中不能改变指针指向的原因和解决方法
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("请输入玩家的姓名: "); char name[64]; scanf("%s", name);//sscanf会直接略过 打印下面的信息***** init(&gameHandel, name); //游戏战斗 int level = -1; while (1) { getchar(); system("cls"); printf("请选择游戏难度: "); printf("1、普通 "); printf("2、中等 "); printf("3、困难 "); scanf("%d", &level);//scanf sscanf 差别? getchar();//****重点 int ret = fight(gameHandel, level); if (ret == 0) { printf("挑战失败 "); break; } else { printf("挑战成功 "); printGame(gameHandel); } } //printf("请选择游戏难度: "); //printf("1、普通 "); //printf("2、中等 "); //printf("3、困难 "); //scanf("%d", &level);//scanf sscanf 差别? //int ret = fight(gameHandel, level); //if (ret == 0) // printf("挑战失败 "); //else //{ // printf("挑战成功 "); // 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"); }