C语言实现面向接口编程

面向接口编程

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

代码示例:

面向接口编程.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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑马金牌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值