¡¡¡¡¡¾´úÂëÇåµ¥¡¿
¡¡¡¡typedef.h
¡¡¡¡[html]
¡¡¡¡#ifndef __TYPEDEF_H__
¡¡¡¡#define __TYPEDEF_H__
¡¡¡¡#include <stdio.h>
¡¡¡¡#include <stdlib.h>
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡typedef enum _Ret
¡¡¡¡{
¡¡¡¡RET_OK,
¡¡¡¡RET_FAIL
¡¡¡¡}Ret;
¡¡¡¡#define return_if_fail(p)\
¡¡¡¡if(!(p)){\
¡¡¡¡printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\
¡¡¡¡return;}
¡¡¡¡#define return_val_if_fail(p, ret)\
¡¡¡¡if(!(p)){\
¡¡¡¡printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\
¡¡¡¡return (ret);}
¡¡¡¡#define SAFE_FREE(p) if(p != NULL){free(p); p = NULL;}
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡#ifndef __TYPEDEF_H__
¡¡¡¡#define __TYPEDEF_H__
¡¡¡¡#include <stdio.h>
¡¡¡¡#include <stdlib.h>
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡typedef enum _Ret
¡¡¡¡{
¡¡¡¡RET_OK,
¡¡¡¡RET_FAIL
¡¡¡¡}Ret;
¡¡¡¡#define return_if_fail(p)\
¡¡¡¡if(!(p)){\
¡¡¡¡printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\
¡¡¡¡return;}
¡¡¡¡#define return_val_if_fail(p, ret)\
¡¡¡¡if(!(p)){\
¡¡¡¡printf("%s:%d Warning:"#p"Failed\n",__func__,__LINE__);\
¡¡¡¡return (ret);}
¡¡¡¡#define SAFE_FREE(p) if(p != NULL){free(p); p = NULL;}
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡player.h
¡¡¡¡[html]
¡¡¡¡#ifndef __PLAYER_H__
¡¡¡¡#define __PLAYER_H__
¡¡¡¡#include "typedef.h"
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡struct _Player;
¡¡¡¡typedef struct _Player Player;
¡¡¡¡struct _Player
¡¡¡¡{
¡¡¡¡char *name;
¡¡¡¡void (*attack)(void *player);
¡¡¡¡void (*defend)(void *player);
¡¡¡¡void (*destroy)(void *player);
¡¡¡¡};
¡¡¡¡static inline void player_attack(Player *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡if(thiz->attack != NULL)
¡¡¡¡{
¡¡¡¡thiz->attack(thiz);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡static inline void player_defend(Player *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡if(thiz->defend != NULL)
¡¡¡¡{
¡¡¡¡thiz->defend(thiz);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡static inline void player_destroy(Player *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡if(thiz->destroy != NULL)
¡¡¡¡{
¡¡¡¡thiz->destroy(thiz);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡#ifndef __PLAYER_H__
¡¡¡¡#define __PLAYER_H__
¡¡¡¡#include "typedef.h"
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡struct _Player;
¡¡¡¡typedef struct _Player Player;
¡¡¡¡struct _Player
¡¡¡¡{
¡¡¡¡char *name;
¡¡¡¡void (*attack)(void *player);
¡¡¡¡void (*defend)(void *player);
¡¡¡¡void (*destroy)(void *player);
¡¡¡¡};
¡¡¡¡static inline void player_attack(Player *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡if(thiz->attack != NULL)
¡¡¡¡{
¡¡¡¡thiz->attack(thiz);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡static inline void player_defend(Player *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡if(thiz->defend != NULL)
¡¡¡¡{
¡¡¡¡thiz->defend(thiz);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡static inline void player_destroy(Player *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡if(thiz->destroy != NULL)
¡¡¡¡{
¡¡¡¡thiz->destroy(thiz);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡forwardsplayer.h
¡¡¡¡[html]
¡¡¡¡#ifndef __FORWARDSPLAYER_H__
¡¡¡¡#define __FORWARDSPLAYER_H__
¡¡¡¡#include "player.h"
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡struct _Forwards;
¡¡¡¡typedef struct _Forwards Forwards;
¡¡¡¡struct _Forwards
¡¡¡¡{
¡¡¡¡Player player;
¡¡¡¡};
¡¡¡¡Forwards *ForwardsCreate(char *name);
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡#ifndef __FORWARDSPLAYER_H__
¡¡¡¡#define __FORWARDSPLAYER_H__
¡¡¡¡#include "player.h"
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡struct _Forwards;
¡¡¡¡typedef struct _Forwards Forwards;
¡¡¡¡struct _Forwards
¡¡¡¡{
¡¡¡¡Player player;
¡¡¡¡};
¡¡¡¡Forwards *ForwardsCreate(char *name);
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡forwardsplayer.c
¡¡¡¡[html]
¡¡¡¡#include <stdio.h>
¡¡¡¡#include <stdlib.h>
¡¡¡¡#include "forwardsplayer.h"
¡¡¡¡static void forwards_attack(void *thiz)
¡¡¡¡{
¡¡¡¡printf("ǰ·æ %s ½ø¹¥\n", ((Forwards *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void forwards_defend(void *thiz)
¡¡¡¡{
¡¡¡¡printf("ǰ·æ %s ·ÀÊØ\n", ((Forwards *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void forwards_destroy(void *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡SAFE_FREE(thiz);
¡¡¡¡}
¡¡¡¡Forwards *ForwardsCreate(char *name)
¡¡¡¡{
¡¡¡¡Forwards *thiz = malloc(sizeof(Forwards));
¡¡¡¡if(thiz != NULL)
¡¡¡¡{
¡¡¡¡thiz->player.name = name;
¡¡¡¡thiz->player.attack = forwards_attack;
¡¡¡¡thiz->player.defend = forwards_defend;
¡¡¡¡thiz->player.destroy = forwards_destroy;
¡¡¡¡}
¡¡¡¡//printf("%s\n", thiz->player->name);
¡¡¡¡return thiz;
¡¡¡¡}
¡¡¡¡#include <stdio.h>
¡¡¡¡#include <stdlib.h>
¡¡¡¡#include "forwardsplayer.h"
¡¡¡¡static void forwards_attack(void *thiz)
¡¡¡¡{
¡¡¡¡printf("ǰ·æ %s ½ø¹¥\n", ((Forwards *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void forwards_defend(void *thiz)
¡¡¡¡{
¡¡¡¡printf("ǰ·æ %s ·ÀÊØ\n", ((Forwards *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void forwards_destroy(void *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡SAFE_FREE(thiz);
¡¡¡¡}
¡¡¡¡Forwards *ForwardsCreate(char *name)
¡¡¡¡{
¡¡¡¡Forwards *thiz = malloc(sizeof(Forwards));
¡¡¡¡if(thiz != NULL)
¡¡¡¡{
¡¡¡¡thiz->player.name = name;
¡¡¡¡thiz->player.attack = forwards_attack;
¡¡¡¡thiz->player.defend = forwards_defend;
¡¡¡¡thiz->player.destroy = forwards_destroy;
¡¡¡¡}
¡¡¡¡//printf("%s\n", thiz->player->name);
¡¡¡¡return thiz;
¡¡¡¡}
¡¡¡¡centerplayer.h
¡¡¡¡[html]
¡¡¡¡#ifndef __CENTERPLAYER_H__
¡¡¡¡#define __CENTERPLAYER_H__
¡¡¡¡#include "player.h"
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡struct _Center;
¡¡¡¡typedef struct _Center Center;
¡¡¡¡struct _Center
¡¡¡¡{
¡¡¡¡Player player;
¡¡¡¡};
¡¡¡¡Center *CenterCreate(char *name);
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡#ifndef __CENTERPLAYER_H__
¡¡¡¡#define __CENTERPLAYER_H__
¡¡¡¡#include "player.h"
¡¡¡¡#ifdef __cplusplus
¡¡¡¡extern "C" {
¡¡¡¡#endif
¡¡¡¡struct _Center;
¡¡¡¡typedef struct _Center Center;
¡¡¡¡struct _Center
¡¡¡¡{
¡¡¡¡Player player;
¡¡¡¡};
¡¡¡¡Center *CenterCreate(char *name);
¡¡¡¡#ifdef __cplusplus
¡¡¡¡}
¡¡¡¡#endif
¡¡¡¡#endif
¡¡¡¡centerplayer.c
¡¡¡¡[html]
¡¡¡¡#include <stdio.h>
¡¡¡¡#include <stdlib.h>
¡¡¡¡#include "centerplayer.h"
¡¡¡¡static void center_attack(void *thiz)
¡¡¡¡{
¡¡¡¡printf("Öзæ %s ½ø¹¥\n", ((Center *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void center_defend(void *thiz)
¡¡¡¡{
¡¡¡¡printf("Öзæ %s ·ÀÊØ\n", ((Center *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void center_destroy(void *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡SAFE_FREE(thiz);
¡¡¡¡}
¡¡¡¡Center *CenterCreate(char *name)
¡¡¡¡{
¡¡¡¡Center *thiz = malloc(sizeof(Center));
¡¡¡¡if(thiz != NULL)
¡¡¡¡{
¡¡¡¡thiz->player.name = name;
¡¡¡¡thiz->player.attack = center_attack;
¡¡¡¡thiz->player.defend = center_defend;
¡¡¡¡thiz->player.destroy = center_destroy;
¡¡¡¡}
¡¡¡¡return thiz;
¡¡¡¡}
¡¡¡¡#include <stdio.h>
¡¡¡¡#include <stdlib.h>
¡¡¡¡#include "centerplayer.h"
¡¡¡¡static void center_attack(void *thiz)
¡¡¡¡{
¡¡¡¡printf("Öзæ %s ½ø¹¥\n", ((Center *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void center_defend(void *thiz)
¡¡¡¡{
¡¡¡¡printf("Öзæ %s ·ÀÊØ\n", ((Center *)thiz)->player.name);
¡¡¡¡}
¡¡¡¡static void center_destroy(void *thiz)
¡¡¡¡{
¡¡¡¡return_if_fail(thiz != NULL);
¡¡¡¡SAFE_FREE(thiz);
¡¡¡¡}
¡¡¡¡Center *CenterCreate(char *name)
¡¡¡¡{
¡¡¡¡Center *thiz = malloc(sizeof(Center));
¡¡¡¡if(thiz != NULL)
¡¡¡¡{
¡¡¡¡thiz->player.name = name;
¡¡¡¡thiz->player.attack = center_attack;
¡¡¡¡thiz->player.defend = center_defend;
¡¡¡¡thiz->player.destroy = center_destroy;
¡¡¡¡}
¡¡¡¡return thiz;
¡¡¡¡}