• 回调函数的案例


    参考链接:

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

    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");
    }
    

      

    加油啦!加油鸭,冲鸭!!!
  • 相关阅读:
    《POJ-2369》
    《1402
    《2018 Multi-University Training Contest 8》
    《HDU
    循环串
    模拟赛 数根 题解
    备份
    关于带删除线性基
    论OIer谈恋爱的必要性
    某计数题题解
  • 原文地址:https://www.cnblogs.com/clarencezzh/p/11745278.html
Copyright © 2020-2023  润新知