首页 技术 正文
技术 2022年11月21日
0 收藏 633 点赞 4,931 浏览 4031 个字

剧情描述:

美国大兵抗把汉阳造 拿着5个弹夹(每个弹夹5发子弹) 带着弟兄们干架 子弹打完了就求救

类:

士兵:

属性: 姓名(_name) 身高(_height) 体重(_weight)

行为: 开枪(fire) 求救(callForHelp)

枪:

属性: 弹夹(_clip) 弹夹数量(_clipNum) 品牌(_model)

行为: 换弹夹(changeClip) 发射子弹(shot)

弹夹:

属性: 子弹数量(_bulletCount)

行为: 装子弹(addBullet)

方法说明:

士兵开枪方法(fire)

参数: 枪 和 弹夹

返回值: 剩余弹夹数量

逻辑: 将弹夹作为参数  调用枪的发射子弹方法(shot) 获得剩余弹夹数

如果剩余弹夹数 == 0 则调用自己的求救方法(callForHelp)

枪发射子弹方法(shot)

参数: 弹夹

返回值: 弹夹数

逻辑: 如果弹夹里的子弹==0 则调用自己的换弹夹的方法获得新弹夹  否则弹夹子弹减1

枪换弹夹方法(changeClip)

参数: 弹夹

返回值: 弹夹数量

逻辑: 将弹夹数量-1(因为已经用了一个了) 如果还有弹夹 则调用弹夹的装子弹方法 否则提示子弹打光了

弹夹装子弹方法(addBullet)

参数: 无

返回值: 弹夹对象

逻辑: 如果弹夹内子弹数量==0 则装5发子弹  然后将弹夹返回

对象去哪了:

士兵开枪接收了枪和弹夹对象  开枪方法中将弹夹对象传入枪的发射子弹方法  发射子弹方法中又将弹夹对象传入换弹夹方法  换弹夹方法中调用这个弹夹对象的加子弹方法  获得一个弹夹对象的返回值  返回的这个弹夹对象 嘿嘿  不好意思 没用到

弹夹类声明文件Clip.h:

/*
弹夹
事物名称: 弹夹(Clip)
属性:子弹数量(_bulletCount)
行为:装子弹(addBullet)
*/
#import <Foundation/Foundation.h>@interface Clip : NSObject
{
@public
// 子弹数量
int _bulletCount;
}
//给弹夹装子弹
- (Clip *) addBullet;
@end

弹夹类实现文件Clip.m:

#import "Clip.h" @implementation Clip // 给弹夹装子弹  假设装一次 弹夹就少一个(代表换弹夹)  返回弹夹对象其实没被用到
- (Clip *)addBullet{
if(_bulletCount == ){
_bulletCount = ;
NSLog(@"clip 新兵蛋子 子弹装好了 你去冲吧 子弹数量:%i", self->_bulletCount);
}
return self;
}
@end

枪类声明文件Gun.h:

/*

事物名称:枪(Gun)
属性:大弹夹(_bigClip) , 弹夹数量(_clipNum), 型号(model)
行为:换弹夹(changeClip) 射击(shot)
*/
#import <Foundation/Foundation.h>
#import "Clip.h" @interface Gun : NSObject
{
@public
// 弹夹对象
Clip* _bigClip;
// 弹夹数量
int _clipNum;
// 枪的牌子
NSString* _model;
}
// 换弹夹方法
- (int) changeClip:(Clip *) newClip;
// 发射子弹方法
- (int) shot:(Clip *) clip;
@end

枪类实现文件Gun.m:

#import "Gun.h" @implementation Gun
// 换弹夹方法 接收弹夹对象 返回弹夹数量
- (int)changeClip:(Clip *)clip{
// 需要换弹夹说明已经用了一个了 弹夹数量 -1
_clipNum -= ;
// 如果还有弹夹 则调用弹夹加子弹的方法
if (_clipNum > ) {
_bigClip = [clip addBullet];
NSLog(@"gun 装弹完毕 子弹数量:%i 继续干", clip->_bulletCount);
}
else{
NSLog(@"gun 子弹打光了");
}
return _clipNum;
}
// 枪发射子弹方法 接收弹夹对象 返回弹夹数量
- (int)shot:(Clip *)clip{
// 变量存储弹夹数量 (可以不用这个变量 直接使用属性成员)
int clipNum = _clipNum;
// 如果弹夹内没子弹了 则调用换弹夹方法
if (clip->_bulletCount == ) {
NSLog(@"gun 友情提示: 大哥 你没子弹了 俺去给你装弹 你先拼会刺刀吧 装好了再通知你 好吗 就这么愉快的决定吧");
clipNum = [self changeClip:clip];
}
// 否则 子弹 -1
else{
NSLog(@"gun 子弹 减 1");
clip->_bulletCount -= ;
}
return clipNum;
}
@end

士兵类声明文件Soldier.h:

/*
士兵
事物名称: 士兵(Soldier)
属性:姓名(name), 身高(height), 体重(weight)
行为:打枪(fire), 打电话(callPhone)
*/
#import <Foundation/Foundation.h>
#import "Gun.h" @interface Soldier : NSObject
{
@public
NSString* _name;
double _height;
double _weight;
}
- (int) fireWithGun:(Gun*) gun andClip:(Clip *) clip;
- (void) callForHelp;
@end

士兵类实现文件Soldier.m:

#import "Soldier.h" @implementation Soldier
// 士兵开枪 接收枪和弹夹两个对象 返回弹夹剩余数
- (int)fireWithGun:(Gun *)gun andClip:(Clip *)clip{
NSLog(@"soldier 儿子们 孙子们 王八羔子们 都跟我一起上 冲啊 杀鸡鸡~~~");
// 将弹夹对象传入 调用枪射击的方法
int remainClipNum = [gun shot: clip];
// 如果没弹夹了 调用求救方法
if( == remainClipNum){
[self callForHelp];
}
return remainClipNum;
}
- (void)callForHelp{
NSLog(@"soldier 拐洞拐 我没子弹了 还中弹了 中了好多呢 你是不知道 吓死宝宝了 快来9我吧 等 你哦 么么哒");
}
@end

Main.m:

#import <Foundation/Foundation.h>
#import "Soldier.h" int main(int argc, const char * argv[]) {
// 士兵对象
Soldier * soldier = [Soldier new];
soldier->_height = 2.12;
soldier->_weight = ;
soldier->_name = @"美国大兵";
// 弹夹对象
Clip * clip = [Clip new];
clip->_bulletCount = ; // 枪对象
Gun * gun = [Gun new];
gun->_bigClip = clip;
gun->_model = @"汉阳造";
gun->_clipNum = ; // 士兵开始干架
// 保存剩余弹夹数量 如果数量==0 则跳出循环
int remainClip = ;
while () {
// 调用士兵开枪方法 获得剩余弹夹数
remainClip = [soldier fireWithGun:gun andClip:clip];
if (!remainClip) {
break;
}
}
return ;
}

输出结果:

/*
输出结果:
应该是循环五次后提示子弹打光了 然后求救 每次循环中发射五颗子弹
2015-08-27 23:18:37.182 对象做参数传递[892:34503] soldier 儿子们 孙子们 王八羔子们 都跟我一起上 冲啊 杀鸡鸡~~~
2015-08-27 23:18:37.184 对象做参数传递[892:34503] gun 子弹 减 1
2015-08-27 23:18:37.184 对象做参数传递[892:34503] soldier 儿子们 孙子们 王八羔子们 都跟我一起上 冲啊 杀鸡鸡~~~
2015-08-27 23:18:37.184 对象做参数传递[892:34503] gun 子弹 减 1
2015-08-27 23:18:37.184 对象做参数传递[892:34503] soldier 儿子们 孙子们 王八羔子们 都跟我一起上 冲啊 杀鸡鸡~~~
2015-08-27 23:18:37.185 对象做参数传递[892:34503] gun 子弹 减 1
2015-08-27 23:18:37.185 对象做参数传递[892:34503] soldier 儿子们 孙子们 王八羔子们 都跟我一起上 冲啊 杀鸡鸡~~~
2015-08-27 23:18:37.185 对象做参数传递[892:34503] gun 子弹 减 1
2015-08-27 23:18:37.185 对象做参数传递[892:34503] soldier 儿子们 孙子们 王八羔子们 都跟我一起上 冲啊 杀鸡鸡~~~
2015-08-27 23:18:37.185 对象做参数传递[892:34503] gun 子弹 减 1
2015-08-27 23:18:37.186 对象做参数传递[892:34503] soldier 儿子们 孙子们 王八羔子们 都跟我一起上 冲啊 杀鸡鸡~~~
2015-08-27 23:18:37.186 对象做参数传递[892:34503] gun 友情提示: 大哥 你没子弹了 俺去给你装弹 你先拼会刺刀吧 装好了再通知你 好吗 就这么愉快的决定吧
……………
                …………….
                …………….
                …………….
2015-08-27 23:18:37.217 对象做参数传递[892:34503] gun 子弹打光了
2015-08-27 23:18:37.217 对象做参数传递[892:34503] soldier 拐洞拐 我没子弹了 还中弹了 中了好多呢 你是不知道 吓死宝宝了 快来9我吧 等你哦 么么哒
*/
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,093
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,570
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,417
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,190
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,825
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,908