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;
};
June 17th Wednesday (六月 十七日 水曜日)
最新推荐文章于 2022-03-23 22:45:20 发布