首页 > 代码库 > 小动物园系统
小动物园系统
Main.m
#import "Panda.h" #import "Elephant.h" #import "Kangaroo.h" #import "Zoo.h" #import "Admin.h" int main(int argc, const char * argv[]) { @autoreleasepool { //创建对象 Panda *panda = [[[Panda alloc] initWithName:@"熊猫"]autorelease]; Elephant *elephant = [[[Elephant alloc] initWithName:@"大象"]autorelease]; Kangaroo *kangaroo = [[[Kangaroo alloc] initWithName:@"袋鼠"]autorelease]; Admin *admin = [[[Admin alloc]init]autorelease]; Zoo *zoo = [[[Zoo alloc] init]autorelease]; //设置仓库的总量 zoo.houseSize = 500; //设置饲料的总量 zoo.store =zoo.houseSize; //添加动物到数组中 [zoo addAnimal:panda]; [zoo addAnimal:elephant]; [zoo addAnimal:kangaroo]; //动物园营业了 [zoo run:admin]; //定时器,代码暂停 [[NSRunLoop currentRunLoop] run]; } return 0; }
Zoo.h
@class Zoo; @class Animal; @class Admin; //动物管理协议 @protocol helpAnimal <NSObject> @required //为动物园购买饲料 - (void)buyFodder:(Zoo *)zoo; @optional //有新动物出生,照顾新动物 - (void)lookAfterAnimal:(Animal *)animal; @end //主体 @interface Zoo : NSObject { //动物园的动物 NSMutableArray *_animals; //饲料的总量 NSInteger _store; //营业的天数 NSInteger _days; //仓库总量 NSInteger _houseSize; } @property(nonatomic, assign)NSInteger houseSize;//仓库总量 @property(nonatomic, assign)NSInteger store;//饲料总量 //添加动物到数组 - (void)addAnimal:(Animal *)animal; //动物园开始运营 - (void)run:(Admin *)admin;
Zoo.m
#import "Animal.h" #import "Admin.h" @implementation Zoo { NSInteger code; //动物编码 } - (id)init { self = [super init]; if (self) { _days = 1;//营业天数初始化 // ★ _animals = [[NSMutableArray array] retain];★ //或者 _animals = [[NSMutableArray alloc] init]; code = 100;//动物编码初始化 } return self; } - (void)addAnimal:(Animal *)animal { //给添加动物到数组 [_animals addObject:animal]; } //动物园开始运营 - (void)run:(Admin *)admin { //创建信息管理员 admin.name=@"老王"; NSLog(@"动物园开始营业了,%@上班了",admin.name); //开启定时器 [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeAction:) userInfo:admin//传送信息 repeats:YES]; } - (void)timeAction:(NSTimer *)time { //接收信息管理员 Admin *admin = [time userInfo]; //---------创建一个可变数组【新动物数组】----------- NSMutableArray *newanimal = [[[NSMutableArray alloc] init] autorelease]; //---------不可变数组Animal的遍历--------------- //每个动物拿出来遍历 for (Animal *animal in _animals) { if (_store <= 0) { break; } //总量减去每个动物的食量(一个一个吃) _store -= animal.eating; //动物的年龄增加 animal.age ++; //判断动物是否在生产周期 if (animal.age % animal.birthCycle == 0 && animal.age > 0) { //------字符串的拼接------- NSString *name = [NSString stringWithFormat:@"%ld",code]; //调用生产方法,生产小动物并给它带编码的名字 Animal *baby = [animal birth:name]; //错误,_animals正在循环遍历,不允许修改 //[_animals addObject:baby]; //管理员照顾新生的小动物 [admin lookAfterAnimal:animal]; //----------给数组添加元素---------- //将新动物添加到新动物数组中 [newanimal addObject:baby]; code ++;//编码往后累加 } } //----------数组元素个数-------- //如果新动物的数组中有元素,那么将新动物数组中的元素添加到动物数组中 if (newanimal.count > 0) { //---------将数组元素添加到数组中(复制A数组全部元素到B数组 [_animals addObjectsFromArray:newanimal]; } NSLog(@"第%ld天、动物的数量:%ld、动物园饲料的余量:%ld",_days,_animals.count,_store); _days ++;//营业天数增加 if (_store <= 0) { NSLog(@"动物园的饲料没有了,请及时添加"); //--------关闭定时器-------------- // [time invalidate]; //管理员为动物园去买饲料 //--------方法调用类自己本身-------- [admin buyFodder:self]; } } //销毁 - (void)dealloc { //清除动物 [_animals release]; [super dealloc]; }
Admin.h
#import "Zoo.h"//拿到协议 @interface Admin : NSObject<helpAnimal>//签协议 { NSString *_name; } @property(nonatomic,copy)NSString *name;
Admin.m
#import "Animal.h" #import "Zoo.h" @implementation Admin //实现协议内容 //购买饲料 - (void)buyFodder:(Zoo *)zoo { NSLog(@"管理员%@去购买饲料",_name); //给仓库饲料加满 zoo.store = zoo.houseSize; } //有新动物出生,照顾新动物 - (void)lookAfterAnimal:(Animal *)animal { NSLog(@"管理员照顾新动物"); }
Animal.h
{ NSString *_name;//动物的名字 } //自定义初始化(带名字) - (id)initWithName:(NSString *)name; //食量 @property(nonatomic, assign) int eating; //生产周期 @property(nonatomic, assign) int birthCycle; //年龄 @property(nonatomic, assign) int age; //生产的方法【带一个参数:编码】 - (Animal *)birth:(NSString *)code;
Animal.m
//----------自定义初始化方法的重写(父)-------- - (id)initWithName:(NSString *)name { self = [super init]; if (self) { //------给字符串retain------- _name = [name copy]; } return self; } //----------生产方法的重写(父)-------- //【带一个参数:编码】 - (Animal *)birth:(NSString *)code { return nil; }
Panda、Elephant、Kangaroo继承于animal类
Panda.m
//----------自定义初始化方法的重写(子)-------- - (id)initWithName:(NSString *)name { //--------调用父类的方法--------- self = [super initWithName:name]; if (self) { self.eating = 10; //初始化食量 self.birthCycle = 5; //生产周期 self.age = 0; //年龄 } return self; } //--------生产方法的重写(子)--------- - (Animal *)birth:(NSString *)code { //给新动物编号 NSString *name = [NSString stringWithFormat:@"熊猫%@",code]; //创建小熊猫 Panda *panda = [[[Panda alloc] initWithName:name] autorelease]; NSLog(@"熊猫生产了一个小熊猫,名字:%@",name); return panda; }Elephant.m
//----------自定义初始化方法的重写(子)-------- - (id)initWithName:(NSString *)name { self = [super initWithName:name]; if (self) { self.eating = 15; //初始化食量 self.birthCycle = 10; //生产周期 self.age = 0; } return self; } //--------生产方法的重写(子)--------- - (Animal *)birth:(NSString *)code { NSString *name = [NSString stringWithFormat:@"大象%@",code]; Elephant *elephant = [[[Elephant alloc] initWithName:name] autorelease]; NSLog(@"大象生产了一个小象,名字:%@",name); return elephant; }
Kangaroo.m
//----------自定义初始化方法的重写(子)-------- - (id)initWithName:(NSString *)name { self = [super initWithName:name]; if (self) { self.eating = 5; //初始化食量 self.birthCycle = 4; //生产周期 self.age = 0; } return self; } ////--------生产方法的重写(子)--------- - (Animal *)birth:(NSString *)code { NSString *name = [NSString stringWithFormat:@"袋鼠%@",code]; Kangaroo *kangaroo = [[[Kangaroo alloc] initWithName:name] autorelease]; NSLog(@"袋鼠生产了一个小袋鼠,名字:%@",name); return kangaroo; }
小动物园系统
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。