回调函数的案例

参考链接:

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

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

  

原文地址:https://www.cnblogs.com/clarencezzh/p/11745278.html

时间: 2024-10-31 04:13:22

回调函数的案例的相关文章

进程池与回调函数

一.进程池(重点) 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意的问题是: 1.很明显需要并发执行的任务通常要远大于核数 2.一个操作系统不可能无限开启进程,通常有几个核就开几个进程 3.进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Process动态成生多个进

回调函数案例(二)

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /**************************************** 5 * 函数指针结构体 6 ***************************************/ 7 typedef struct _OP 8 { 9 float (*p_add)(float, float); 10 float (*p_sub)(float, float); 11 float

Python 3 进程池与回调函数

Python 3 进程池与回调函数 一.进程池 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间.多进程是实现并发的手段之一,需要注意的问题是: 很明显需要并发执行的任务通常要远大于核数 一个操作系统不可能无限开启进程,通常有几个核就开几个进程 进程开启过多,效率反而会下降(开启进程是需要占用系统资源的,而且开启多余核数目的进程也无法做到并行) 例如当被操作对象数目不大时,可以直接利用multiprocessing中的Proces

java回调函数机制

Java回调函数机制 参考了网上的一些资料,下面也做出一些总结,供初学者了解学习. 一. 概述 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调.异步调用 . 同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用: 回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 异步调用:一种类似消息或事件的机制,解决了同步阻塞的问题,它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户

Promise对象和回调函数,解决异步数据传递问题

下面的代码例子,均已小程序的异步请求数据为案例来说明 1.利用回调函数,来解决异步数据传递问题 1 异步操作api.js 2 const getBooks = (url, callback) => { 3 wx.request({ 4 url: url, 5 method: 'GET', 6 header: { 7 "Content-Type": "json" 8 }, 9 success: function (res) { 10 console.log(re

回调函数(callback)学习笔记

1.stack overflow 上大神的描述(浏览的网页没记住): A "callback" is any function that is called by another function which takes the first function as a parameter. 2.看了几天的介绍,自己关于回调的简单理解: 1)为了干成某件事,自己建立模块A,然后在A里有一个函数f1负责具体实现某项功能: 2)来自其他地方的模块B已经具备A需要的部分基本功能,B里有个函数 

JavaScript自定义回调函数

背景分析 首先看一段js的代码,主要实现添加的时候首先通过异步请求判断是否存在,如果不存在的话,在进行添加操作: function add(url,data) { var isExited = isExited(data); if(!isExited){ addRequest(url, data); } } 当我添加一个数据的时候,我首先通过判断是否在数据库中存在(当然,如果前后台彻底分离的话,不应该前端进行业务逻辑的判断,前端只应该,用来展示数据),首先,isExited()的请求是ajax请

Javascript实现图片预加载【回调函数,多张图片】

使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多张图片预加载代码.当接二连三的案例中都涉及图片预加载时,就需要考虑把这个功能封装为一个通用方法. (1)下面为JS实现图片预加载方法loadImages(): Js代码   //实现一系列图片的预加载 //参数sources:图片信息关联数组 //参数callback:回调函数——图片预加载完成后立即执行此函数. function loadImages(s

JavaScript apply函数小案例

//回调函数1 function callback(a,b,c) { alert(a+b+c); } //回调函数2 function callback2(a,b) { alert(a+b); } //这个方法做了一些操作.然后调用回调函数 function doCallback(fn,args) { fn.apply(this, args); } function test() { //动态调用方法.并传递参数 doCallback(callback2,['a','b']); doCallba