`
mmiwwcom
  • 浏览: 9258 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

C语言模拟面向对象

    博客分类:
  • C
阅读更多
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>  /* for sleep() in dos/mingw */

/*
 * 关键字模拟
 */
#ifndef class
    #define class  struct
#endif
#define false 0
#define true (!0)

/*
 * 游戏角色抽象类, 继承自目标类,( c 无法实现继承,采用相同定义)
 */
typedef class Role{
   class Role *this;
    void (*fight) (class Role *this,class Role *other);
    void (*response)(class Role *this);
    int (*is_die)(class Role *this);
    int dps;
    int level;
    int defense;
    int healthPoint;
};
typedef class DeathKnight;

/*
 * 步兵footman
 *
 */
typedef class Footman{
    class Footman *this;
    void (*fight)(class Footman *this,class Role *other );
    void (*response)(class Footman *this);
    int (*is_die)(class Footman *this);
    int dps;
    int level;
    int defense;
    int healthPoint;
};
/*
 * 死亡骑士
 */
typedef class DeathKnight{
    class DeathKnight *this;
    void (*fight)(class DeathKnight *this,class Role *other );
    void (*response)(class DeathKnight *this);
    int (*is_die)(class DeathKnight *this);
    int dps;
    int level;
    int defense;
    int healthPoint;
};

/*
 * 步兵鼠标点中时回应
 * footman_object :Footman对象
 */
void footman_response()
{
    printf("FT:Yes Sir!\n");
}
/**
 * 步兵死了吗?
 * @param footman
 */
int footman_is_die(class Footman *footman)
{
    if(footman->healthPoint<0)
    {
        printf("FT:Footman was dead.\n");
        return 1;
    }
    else
        return 0;
}
/*
 * 步兵攻击目标
 * */
void footman_fight(class Footman *footman,class Role *other)
{
    if(other->is_die(other))
        printf("FT:other was dead\n");
    else
    {
        printf("FT:A~A~ I'm foot man , fight for the king! pilipala...\n");
        int damage=footman->dps-other->defense;
        other->healthPoint -=damage;
        printf("FT:Footman Damage:%d\n",damage);
        printf("other's healthpoint is %d.\n",other->healthPoint);
        other->is_die(other);
    }

}
void deathknight_response()
{
    printf("DK:Nerver die...\n");
}
/*
 * 死亡骑士攻击目标
 */
void deathknight_fight(class DeathKnight *dk,class Role *other)
{
    
     if(other->is_die(other))
         printf("DK:other was dead\n");
    else
    {
        printf("DK:go to hell!\n");
        int damage=dk->dps-other->defense;
        other->healthPoint -=damage;
        printf("DK:DeathKnight Damage:%d\n",damage);
        printf("other's healthpoint is %d.\n",other->healthPoint);
        other->is_die(other);
    }
    
}
/**
 * 死亡骑士死了吗?
 * @param footman
 */
int deathknight_is_die(class DeathKnight* dk)
{
    if(dk->healthPoint<0){
        printf("DK:DeathKnight was died.\n");
        return 1;
    }
    else
        return 0;
}
/*
 * 构造函数
 */
void Footman_New(class Footman* footman)
{
    footman->dps=30;
    footman->level=1;
    footman->defense=10;
    footman->healthPoint=120;
    footman->fight=footman_fight;
    footman->is_die=footman_is_die;
    footman->response=footman_response;
}
void DeathKnight_New(class DeathKnight* dk)
{
    dk->dps=54;
    dk->level=1;
    dk->defense=15;
    dk->healthPoint=240;
    dk->is_die=deathknight_is_die;
    dk->fight=deathknight_fight;
    dk->response=deathknight_response;
}

/*
 * 
 */
int main(int argc, char** argv) {
    class DeathKnight *dk,deathknight;
    class Footman *footman,soilder;
    Footman_New(&soilder);
    DeathKnight_New(&deathknight);
    dk=&deathknight;
    footman=&soilder;
    footman->response(footman);
    dk->response(dk);
    int  i=1;
    do
    {
        printf("\n\n\nROUND %d\n",i);
        if(i%2==0)
        {
            if(!(footman->is_die(footman)))
            {
                if(!(dk->is_die(dk)))
                {
                    footman->fight(footman,dk);
                }
            }
        }else{
            if(!(dk->is_die(dk)))
            {
                if(!(footman->is_die(footman)))
                {
                    dk->fight(dk,footman);
                }
            }
        }
       Sleep(1500);
        i++;
    }while(!(footman->is_die(footman))&&!(dk->is_die(dk)));
    printf("\n\n\nThe END.\n");
    return (EXIT_SUCCESS);
}
0
0
分享到:
评论
1 楼 mmiwwcom 2010-09-26  
运行结果:
FT:Yes Sir!
DK:Nerver die...

ROUND 1
DK:go to hell!
DK:DeathKnight Damage:44
other's healthpoint is 76.

ROUND 2
FT:A~A~ I'm foot man , fight for the king! pilipala...
FT:Footman Damage:15
other's healthpoint is 225.

ROUND 3
DK:go to hell!
DK:DeathKnight Damage:44
other's healthpoint is 32.

ROUND 4
FT:A~A~ I'm foot man , fight for the king! pilipala...
FT:Footman Damage:15
other's healthpoint is 210.

ROUND 5
DK:go to hell!
DK:DeathKnight Damage:44
other's healthpoint is -12.
FT:Footman was dead.
FT:Footman was dead.

The END.

相关推荐

    【C语言】C语言实现面向对象编程之封装代码.rar

    面向对象编程(Object-Oriented ...总的来说,这份资源提供了使用C语言模拟面向对象编程中封装特性的实践案例,适合学习者了解和掌握如何在C语言中实现面向对象编程的基本概念,同时也体现了C语言的灵活性和通用性。

    C语言的面向对象框架加电子书

    "C语言的面向对象框架"旨在通过一些技巧和方法,使开发者能够在C语言中模拟面向对象编程的概念。 标题中提到的"面向对象框架"可能是指一种或多种技术或库,它们提供了类似面向对象的结构,使得开发者能够更方便地...

    C语言实现面向对象思想编程

    然而,通过一些技巧和库,如GObject或模拟类结构,C语言也能实现面向对象编程的思想。在这个案例中,"C语言实现面向对象思想编程"指的是使用C语言来模仿面向对象的特性,如封装、继承和多态。 面向对象编程的核心...

    C语言的面向对象实现在车灯软件中的应用.pdf

    在探讨C语言实现面向对象编程(OOP)的背景下,该文件详细分析了在单片机环境下,通过C语言模拟面向对象的三大特性——封装、继承和多态,以及这些技术如何应用于LED车灯控制软件的开发中,以提升软件的可靠性、稳定...

    oopc.rar_C语言_C语言面向对象_c语言 面向对象_oopc_面向对象

    在C语言中模拟面向对象编程,通常有以下几种常见技术: 1. 结构体与指针:将数据成员(属性)和函数指针(方法)组合在一个结构体中,通过结构体指针调用成员函数,这样就形成了一个类似于对象的概念。 2. 封装:...

    C语言面向对象(针对较大型软件).pdf

    根据提供的文档信息,本文将详细探讨C语言在面向对象编程中的应用,特别是在开发较大规模软件时的方法和技术。本文将从面向对象的三个核心概念——封装、继承和多态出发,结合具体的C语言实现技巧,逐步深入到实际...

    C语言中的面向对象编程技术.pp(中文翻译版)

    ### C语言中的面向对象编程技术 #### 概述 C语言作为一门历史悠久且广泛应用的编程语言,一直以来都被认为是一种过程式的编程语言。然而,《C语言中的面向对象编程技术》这本书提出了一个有趣的观点:即如何利用...

    C语言下面向对象实现

    在C语言中实现面向对象(Object-Oriented Programming, OOP)的概念可能不如其他支持OOP的语言(如C++或Java)那样直接,但通过一些技巧和库,我们可以模拟出面向对象的特性。本工程文件是在Visual Studio 2010环境...

    C语言实现对象编程之继承代码.rar

    然而,对于某些特定场景,如需要在低级系统编程或嵌入式环境中使用面向对象的设计,使用C语言模拟面向对象可能会是合适的选择。通过理解这些C语言的面向对象实现技巧,开发者可以更好地理解和移植C++的面向对象思想...

    c语言面向对象设计

    《C语言面向对象设计》是一本深入探讨如何在C语言中实现面向对象编程思想的书籍。C语言,作为一种强大的低级编程语言,通常被认为不支持面向对象特性,但通过一些技巧和库(如GObject或C++的C接口),可以实现面向...

    brew c语言实现面向对象

    在C语言中实现面向对象的关键之一是通过结构体和函数指针来模拟“类”的概念。结构体用于存储数据,而函数指针则用来封装行为。例如,在给定的部分内容中,`Pig`类是这样定义的: ```c typedef struct _Pig Pig; ...

    用C语言实现面向对象编程

    然而,C语言本身并不直接支持面向对象编程(Object-Oriented Programming, OOP)特性,如类、继承、封装和多态等。为了在C语言中实现面向对象编程,开发者通常需要借助一些扩展或技巧。这个软件开发平台就是为了解决...

    C语言的面向对象编程

    ### C语言中的面向对象编程 #### 一、引言 面向对象编程(OOP)是一种设计方法论,它不依赖于特定的编程语言或工具,而是基于三个核心的设计元模式:封装、继承和多态性。尽管这些元模式通常与面向对象的语言如...

    Brew如何用C模拟面向对象的思想

    ### 如何在Brew环境中利用C语言模拟面向对象思想 #### 概述 在Brew环境中,虽然没有原生支持面向对象编程的语言特性,但可以通过一些技巧和模式来模拟面向对象的思想。本篇文章将深入探讨如何在Brew开发中利用...

    探索C语言中的面向对象编程:模拟OOP特性

    尽管C语言不是面向对象的编程语言,但通过结构体、函数指针和手动内存管理等技术,我们仍然可以在C语言中模拟面向对象编程的一些核心特性。这种方法虽然有一定的局限性,但也提供了足够的灵活性,允许我们在C语言中...

    C语言面向对象程序设计(ppt)

    在C语言中模拟面向对象编程,主要依赖于结构体和函数指针。结构体用来封装数据,函数指针则作为成员,用于操作这些数据,从而形成类的抽象。接下来,我们将探讨C语言如何实现面向对象的三大核心概念:封装、继承和...

    c语言实现面向对象OOP

    C语言,虽然本身不直接支持面向对象特性,但可以通过一些技巧模拟实现面向对象的概念。在C语言中实现OOP,通常包括封装、继承和多态这三大特性。 1. 封装:封装是将数据和操作这些数据的方法绑定在一起,形成一个...

    C语言面向对象编程

    ### C语言面向对象编程 #### 引言与背景 C语言作为一门历史悠久且功能强大的编程语言,在嵌入式系统、操作系统以及其他对性能有极高要求的应用领域有着广泛的应用。然而,传统的C语言是一种过程化编程语言,并没有...

    C语言也能面向对象(四)——继承

    这个例子展示了如何在C语言中通过结构体和函数指针模拟面向对象编程的继承特性,使得代码可以复用和扩展。虽然不如真正的面向对象语言那样简洁明了,但它提供了一种在C语言环境中实现面向对象思想的途径。通过这种...

    C语言也能面向对象(一)——一个简单的类

    这篇博客“C语言也能面向对象(一)——一个简单的类”就探讨了如何在C语言中模拟面向对象编程的思想。 面向对象编程是一种编程范式,它以“对象”为核心,对象是数据和操作这些数据的方法的封装体。在C++或Java中,...

Global site tag (gtag.js) - Google Analytics