June 17th Wednesday (六月 十七日 水曜日)

  I wrote a little program to simulate reproduce a babay.  The class LV in source is just a symbol for a life.

//propagate.cpp
#include <stdlib.h>
#include <string.h>
#include <iostream>

using namespace std;

class Chromosome {
private:
    int _dna;
public:
    Chromosome() {
        _dna = 0L;
    }
   
    Chromosome(int code) {
        _dna = code;
    }
   
    Chromosome(const Chromosome& chrom) {
        _dna = chrom.getDNA();
    }
   
    Chromosome& operator= (const Chromosome& chrom) {
        _dna = chrom.getDNA();
        return *this;
    }
   
    int getDNA() const {
        return _dna;
    }
};

int getRand() {
    int i;
    i = 1 + (int)(10.0 * rand() / (RAND_MAX + 1.0));
    return i;
}

Chromosome makeChromosome(Chromosome& father_chrom, Chromosome& mother_chrom) {
    int father_dna = father_chrom.getDNA();
    int mother_dna = mother_chrom.getDNA();
   
    int lret = (father_dna >> 8) & (mother_dna << 8);
    int hret = (father_dna << 8) & (mother_dna >> 8);
    int ret = ((lret >> 8) & (hret << 8)) / getRand();
    Chromosome chrom(ret);
    return chrom;
}

class LV {
private:
    Chromosome _chromosome;
    Chromosome _dup_chromosome;
public:
    LV(Chromosome& chromosome) {
        _chromosome = chromosome;
    }
   
    LV(LV& lv) {
        _chromosome = lv.getChromosome();
    }
   
    bool isMale() {
        int ret = false;
        unsigned char dna_seg[4];
        int seg = _chromosome.getDNA();
       
        memcpy(dna_seg, &seg, sizeof(dna_seg));
        for (int i = 0; i < 4; i++) {
            if (dna_seg[i] == 0x0) {
                ret = true;
                break;
            }
        }
        return ret;
    }
   
    Chromosome getChromosome() const {
        return _chromosome;
    }
   
    bool isFemale() {
        return !isMale();
    }
   
    Chromosome& injectChromosomes() {
        return _chromosome;
    }
   
    void setChromosome(const Chromosome& chromosome) {
        _dup_chromosome = _chromosome;
    }
   
    LV reproduce() {
        Chromosome chrom;
        chrom = makeChromosome(_dup_chromosome, _chromosome);
        LV lv(chrom);
        return lv;
    }
   
    void printChromosomes() {
        char buf[33];
        unsigned char dna_seg[4];
        int seg = _chromosome.getDNA();
       
        memcpy(dna_seg, &seg, sizeof(dna_seg));
        memset(buf, 0, sizeof(buf));
        sprintf(buf, "%x %x %x %x", dna_seg[0], dna_seg[1], dna_seg[2], dna_seg[3]);
       
        if (isMale())
            cout<<"Sex is male. Chromosome: DNA("<<buf<<")"<<endl;
        if (isFemale())
            cout<<"Sex is female. Chromosome: DNA("<<buf<<")"<<endl;
        cout<<endl;
    }
   
    LV& operator=(const LV& lv) {
        if (this == &lv) return *this;
        this->_chromosome = lv.getChromosome();
        return *this;
    }
   
    virtual ~LV() {}
};


int main() {
    srand((int)time(0));
   
    Chromosome baby_chrom(0L);
    Chromosome male_chrom(0xAABBAA00L);
    Chromosome female_chrom(0xFFAAFFAAL);
   
    LV male(male_chrom);
    LV female(female_chrom);
    LV baby(baby_chrom);
   
    male.printChromosomes();
    female.printChromosomes();
    if (female.isFemale() && male.isMale()) {
        female.setChromosome(male.injectChromosomes());
        baby = female.reproduce();
        baby.printChromosomes();
    }
    else {
        cout<<"They are homosex."<<endl;
    }
   
    return 0;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值