面向接口编程

  • 实现公司中编程方式
  • 甲方和乙方商定好接口,分别实现自己的功能
  • 最后对接成功,实现游戏功能

代码示例:

面向接口编程.c

#define
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "GameCompany.h"
#include <time.h>
//初始化游戏
typedef void(*INIT_GAME)(void**gameHandle, char*name);
//游戏战斗
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 *gameHanel = NULL;
printf("请输入玩家的姓名:\n");
char name[64];
scanf("%s",name);
init(&gameHanel,name);
//游戏战斗
int level = -1;
while (1)
{
getchar();
system("cls");//清屏
printf("请选择游戏难度:\n");
printf("1.普通\n");
printf("2.中等\n");
printf("3.困难\n");
scanf("%d", &level);
getchar();
int ret = fight(gameHanel, level);
if (ret == 0)
{
printf("挑战失败\n");
break;
}
else
{
printf("挑战成功\n");
printGame(gameHanel);
}
}

//离开游戏
closeGame(gameHanel);
}
int main()
{
//加入随机种子
srand((unsigned int)time NULL);
playGame(INIT_GAME_COMPANY,FIGHT_GAME_COMPANY,PRINT_GAME_COMPANY,CLOSE_GAME_COMPANY);
return EXIT_SUCCESS;
}

GameCompany.c

#include "GameCompany.h"
//初始化游戏
void INIT_GAME_COMPANY(void**gameHandle, char*name)
{
struct Player*player = malloc(sizeof(struct Player));
if (player == NULL)
{
return;
}
//玩家进行初始化操作
strcpy(player->name,name);
player->level = 0;
player->exp = 0;
*gameHandle = player;
}
//游戏战斗
int FIGHT_GAME_COMPANY(void*gameHandle, int gameLevel)
{
struct Player*plgyer = gameHandle;
int addExp = 0;//累积的经验值
switch (gameLevel)
{
case 1:
//内部提供一个函数 判断游戏是否胜利
addExp=isWin(90,1);
break;
case 2:
addExp = isWin(50, 2);
break;
case 3:
addExp = isWin(30, 3);
break;
default:
break;
}
//将获取的经验 给人物身上
plgyer->exp += addExp;
plgyer->level = plgyer->exp / 10;
if (addExp == 0)
{
return 0;//战斗失败
}
else
{
return 1;//战斗胜利
}
}
//查看玩家信息
void PRINT_GAME_COMPANY(void *gameHandle)
{
struct Player*player = gameHandle;
printf("玩家 <%s>-----当前等级 <%d>------当前经验-----<%d>\n", player->name, player->level, player->exp);
}
//离开游戏
void CLOSE_GAME_COMPANY(void *gameHandle)
{
if (gameHandle == NULL)
{
return;
}
free(gameHandle);
gameHandle = NULL;
}
//判断游戏是否胜利 参数1 胜率 参数2 难度 返回值 胜利后的经验,乳沟返回的是0 代表战斗失败
int isWin(int winRate, int diff)
{
int random = rand() % 100 + 1;//1~100
if (random <= winRate)
{
//表达胜利
return 10 * diff;
}
else
{
//战斗失败
return 0;
}
}

GameCompany.h

#pragma
#define
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Player
{
char name[64]; //玩家姓名
int level; //玩家等级
int exp; //玩家经验
};
//初始化游戏
void INIT_GAME_COMPANY(void**gameHandle, char*name);
//游戏战斗
int FIGHT_GAME_COMPANY(void*gameHandle, int gameLevel);
//查看玩家信息
void PRINT_GAME_COMPANY(void *gameHandle);
//离开游戏
void CLOSE_GAME_COMPANY(void *gameHandle);
//判断游戏是否胜利 参数1 胜率 参数2 难度 返回值 胜利后的经验,乳沟返回的是0 代表战斗失败
int isWin(int winRate,int diff);