前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向接口封装案例

面向接口封装案例

作者头像
大忽悠爱学习
发布2021-03-04 10:38:45
3900
发布2021-03-04 10:38:45
举报
文章被收录于专栏:c++与qt学习

案例背景:

案例需求:

在这里插入图片描述
在这里插入图片描述

案例要求:

在这里插入图片描述
在这里插入图片描述

编程提示:

在这里插入图片描述
在这里插入图片描述

甲方实现代码:

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//初始化游戏 参数1 玩家指针 参数2 玩家姓名
typedef void(*INIT_GAME)(void** player, char* name);
//副本战斗 返回战斗是否胜利  1 代表胜利 0代表失败 参数1 玩家 参数2 游戏副本难度
typedef int(*FIGHT_GAME)(void* player, int gameDiff);
//查看玩家信息 
typedef void(*PRINT_GAME)(void* player);
//离开游戏
typedef void(*EXIT_GAME)(void* player);

void playGame(INIT_GAME init,FIGHT_GAME fight,PRINT_GAME print,EXIT_GAME exitGame)
{
	//初始化游戏
	void* player = NULL;
	char userName[64];
	printf("请输入玩家的姓名:");
	scanf("%s", userName);
	init(&player, userName);
	//副本难度
	int diff = -1;

	printf("副本难度:\n");
	printf("1.简单\n");
	printf("2.中等\n");
	printf("3.困难\n");

	scanf("%d", &diff);

	//战斗
	int ret = fight(player, diff);
	if (ret == 0)
	{
		printf("游戏失败\n");
	}
	else
	{
		printf("挑战成功,玩家当前信息如下:\n");
		print(player);
	}

	//关闭游戏
	exitGame(player);
}
int main()
{

	return 0;
}

乙方实现代码

company1.h

代码语言:javascript
复制
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
struct person 
{
	char name[64];//玩家姓名
	int level; //玩家等级
	int exp; //玩家经验
};
//初始化游戏 参数1 玩家指针 参数2 玩家姓名
void INTI_GAME_COMPANY1(void** player, char* name);
//副本战斗 返回战斗是否胜利  1 代表胜利 0代表失败 参数1 玩家 参数2 游戏副本难度
int FIGHT_GAME_COMPANY1(void* player, int gameDiff);
//查看玩家信息 
void PRINT_GAME_COMPANY1(void* player);
//离开游戏
void EXIT_GAME_COMPANY1(void* player);


//判断是否胜利
int isWin(int winRate,int diff);

company1.cpp

代码语言:javascript
复制
#include"company1.h"
//初始化游戏 参数1 玩家指针 参数2 玩家姓名
void INTI_GAME_COMPANY1(void** player, char* name)
{
	person* player1 = (person*)malloc(sizeof(person));
	*player = player1;
	strcpy(player1->name, name);
	player1->exp = 0;
	player1->level = 0;
}
//副本战斗 返回战斗是否胜利  1 代表胜利 0代表失败 参数1 玩家 参数2 游戏副本难度
int FIGHT_GAME_COMPANY1(void* player, int gameDiff)
{
	struct person *player1 = (person*)player;
     //增加的经验值
	int addExp = 0;
	switch (gameDiff)
	{
	case 1:
		//简答难度:0.9的胜率
		addExp = isWin(90, 1);
		break;
	case 2:
		//普通难度:0.5的胜率
		addExp = isWin(50, 2);
		break;
	case 3:
		//困难难度:0.3的胜率
		addExp = isWin(30, 3);
		break;
	default:
		break;
	}
	player1->exp += addExp;
	player1->level += addExp / 10;
	//判断战斗是否成功
	if (addExp == 0)
	{
		return 0;
	}
	else 
	{
		return 1;
	}
}
//查看玩家信息 
void PRINT_GAME_COMPANY1(void* player)
{
	struct person* player1 = (person*)player;
	printf("玩家的姓名[%s]\t当前等级:%d\t当前经验:%d",player1->name,player1->level,player1->exp);
}
//离开游戏
void EXIT_GAME_COMPANY1(void* player) 
{
	if (player == NULL)
	{
		return;
	}
	free(player);
	player= NULL;
}

//判断是否胜利:返会的是增加的经验值
int isWin(int winRate,int diff)
{
	//随机数种子
	srand((unsigned int)time(NULL));
	//随机值
	int random = rand() % 100 + 1;//0~100
	if (random <= winRate)
	{
		//成功返回对应难度等级*10的经验值
		return diff * 10;
	}
	else 
	{
		//失败0经验
		return 0;
	}
}

项目对接

只需要对甲方代码进行乙方代码的头文件添加即可 这里对甲方代码进行了优化

代码语言:javascript
复制
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<conio.h>
#include"company1.h"
//初始化游戏 参数1 玩家指针 参数2 玩家姓名
typedef void(*INIT_GAME)(void** player, char* name);
//副本战斗 返回战斗是否胜利  1 代表胜利 0代表失败 参数1 玩家 参数2 游戏副本难度
typedef int(*FIGHT_GAME)(void* player, int gameDiff);
//查看玩家信息 
typedef void(*PRINT_GAME)(void* player);
//离开游戏
typedef void(*EXIT_GAME)(void* player);

void playGame(INIT_GAME init,FIGHT_GAME fight,PRINT_GAME print,EXIT_GAME exitGame)
{
	//初始化游戏
	void* player = NULL;
	char userName[64];
	printf("请输入玩家的姓名:");
	scanf("%s", userName);
	init(&player, userName);
	//副本难度
	int diff = -1;
	while (1)
	{
		//阻塞一下
		_getch();
		system("cls");
		printf("副本难度:\n");
		printf("1.简单\n");
		printf("2.中等\n");
		printf("3.困难\n");

		scanf("%d", &diff);
		//这里的换行符可以不取走
		//因为这里没有字符输入
		//getchar();//取走换行符
		//战斗
		int ret = fight(player, diff);
		if (ret == 0)
		{
			printf("游戏失败\n");
			break;
		}
		else
		{
			printf("挑战成功,玩家当前信息如下:\n");
			print(player);
		}
	}

	//关闭游戏
	exitGame(player);
}
int main()
{
	playGame(INTI_GAME_COMPANY1, FIGHT_GAME_COMPANY1, PRINT_GAME_COMPANY1, EXIT_GAME_COMPANY1);
	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目对接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档