背景
企业信息系统一般都有各自成熟的框架,在软件框架不发生变化的前提下可以自由的集成第三方厂商的产品。
案例需求
在企业信息系统框架中集成第三方厂商的游戏功能产品。软件设计要求:能够满足用户需求,完成的产品可以与用户完美对接。
案例要求
- 能支持多个厂商的游戏功能产品入围
- 能够实现第三方产品和用户产品的对接
- 系统整体框架不轻易发生改变
编程提示
- 抽象游戏中玩家结构体设计(struct Player)
- 框架接口设计(playGame)
- 初始化游戏
- 核心功能战斗
- 查看玩家信息
- 结束游戏
- a游戏厂商1入围(GameCompany1), b 游戏厂商2入围(GameCompany2)
- 框架接口分文件编写
编程说明
甲方定义接口
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "gameCompany1.h"
#include <time.h>
typedef void(*INIT_GAME)(void ** player , char * name);
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 printGame, EXIT_GAME exitGame)
{
void * player = NULL;
printf("请输入姓名:\n");
char userName[64];
scanf("%s", userName);
init(&player, userName);
int diff = -1;
while (1)
{
getchar();
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");
printGame(player);
}
}
exitGame(player);
}
int main(){
srand((unsigned int)time(NULL));
playGame(INIT_GAME_COMPANY1, FIGHT_GAME_COMPANY1, PRINT_GAME_COMPANY1, EXIT_GAME_COMPANY1);
system("pause");
return EXIT_SUCCESS;
}
乙方提供接口实现
gameCompany1.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_COMPANY1(void ** player, char * name);
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);
具体实现gameCompany1.c
#include "gameCompany1.h"
void INIT_GAME_COMPANY1(void ** player, char * name)
{
struct Player * player1 = malloc(sizeof(struct Player));
if (player1 == NULL)
{
printf("初始化失败\n");
return;
}
*player = player1;
strcpy(player1->name, name);
player1->level = 0;
player1->exp = 0;
}
int FIGHT_GAME_COMPANY1(void * p, int gameDiff)
{
struct Player * player = p;
int addExp = 0;
switch (gameDiff)
{
case 1:
addExp = isWin(90, 1);
break;
case 2:
addExp = isWin(50, 2);
break;
case 3:
addExp = isWin(30, 3);
break;
default:
break;
}
player->exp += addExp;
player->level = player->exp / 10;
if (addExp == 0)
{
return 0;
}
else
{
return 1;
}
}
int isWin(int winRate, int diff)
{
int random = rand() % 100 + 1;
if (random <= winRate)
{
return diff * 10;
}
else
{
return 0;
}
}
void PRINT_GAME_COMPANY1(void * p)
{
struct Player * player = p;
printf("玩家<%s> ------ 当前等级:<%d>级 ----- 当前经验: <%d> \n", player->name, player->level, player->exp);
}
void EXIT_GAME_COMPANY1(void * player)
{
if ( player==NULL)
{
return;
}
free(player);
player = NULL;
}
|