面向接口编程

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

代码示例:

面向接口编程.c

#define _CRT_SECURE_NO_WARNINGS
#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 once
#define _CRT_SECURE_NO_WARNINGS
#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);