在学OC基础视频过程中,将老师讲的例题改进了一下,写成了一个有意思的小游戏。想想还有点小激动呢……
/*
实现
:
射击游戏
1.
弹夹类:
属性:型号,伤害,子弹数
行为:造成伤害
2.
枪类:
属性:型号,弹夹
行为:发射子弹,装弹
3.
士兵类:
属性:姓名,生命,等级
行为:跑,蹲,跳,开枪,被射,装弹,加血
*/
#import
<Foundation/Foundation.h>
#pragma mark
弹夹
//
弹夹的声明
@interface
Bullet : NSObject
{
@public
//
弹夹的成员变量
NSString *_size;
//
型号
int
_hurt;
//
伤害
int
_bulletCount;
//
子弹数
}
//
子弹的行为
-(
void
)doHurt;
//
造成伤害
@end
//
子弹行为的实现
@implementation
Bullet
//
造成伤害
-(
void
)doHurt{
NSLog(
@”%@
造成了
%d
点伤害
”
, _size, _hurt);
_bulletCount –;
NSLog(
@”%@
还剩
%d
颗
”
, _size, _bulletCount);
}
@end
#pragma mark
枪类
//
枪类的声明
@interface
Gun : NSObject
{
@public
//
枪类的成员变量
NSString *_name;
//
型号
Bullet *_bullet;
//
子弹
}
//
枪的行为
-(
void
)shootByBullet:(Bullet *)bullet;
//
射击
-(
void
)reload;
//
装弹
@end
//
枪类行为的实现
@implementation
Gun
//
射击
-(
void
)shootByBullet:(Bullet *)bullet{
[bullet doHurt];
}
//
装弹
-(
void
)reload{
_bullet -> _bulletCount =
6
;
NSLog(
@”
装弹完毕,
%@
内的
%@
数量为
%d”
,_name, _bullet ->_size, _bullet ->_bulletCount);
}
@end
#pragma mark
士兵类
//
士兵类的声明
@interface
Soldier : NSObject
{
@public
//
士兵类的成员变量
NSString *_name;
//
姓名
int
_life;
//
生命
int
_level;
//
等级
}
//
士兵的行为
-(
void
)run;
//
跑
-(
void
)squat;
//
蹲
-(
void
)jump;
//
跳
-(
void
)fire:(Soldier *)army ByGun:(Gun *)gun;
//
开枪
-(
void
)shootedByBullet:(Bullet *)bullet;
//
被射
-(
void
)reload:(Gun *)gun;
//
装弹
-(
void
)cure;
//
加血
@end
//
士兵行为的实现
@implementation
Soldier
//
跑
-(
void
)run{
NSLog(
@”%@
跑
”
, _name);
}
//
蹲
-(
void
)squat{
NSLog(
@”%@
蹲
”
, _name);
}
//
跳
-(
void
)jump{
NSLog(
@”%@
跳
”
, _name);
}
//
开枪
-(
void
)fire:(Soldier *)army ByGun:(Gun *)gun{
if
(army ->_life >
0
) {
if
(gun ->_bullet ->_bulletCount >
0
) {
NSLog(
@”%@
用
%@
射了
%@”
,_name, gun ->_name, army ->_name);
[gun shootByBullet:gun ->_bullet];
[army shootedByBullet:gun ->_bullet];
}
else
{
NSLog(
@”
没子弹了还射个毛!赶紧按
R
键装填子弹
”
);
}
}
else
{
NSLog(
@”
死了还要射?!!你个禽兽!!赶紧按
W
键给
%@
补血,补完还能继续射
”
,army ->_name);
}
}
//
被射
-(
void
)shootedByBullet:(Bullet *)bullet{
NSLog(
@”%@
的生命值减少了
%d
点
”
,_name, bullet ->_hurt);
_life -= bullet ->_hurt;
NSLog(
@”%@
的生命值还剩
%d”
, _name, _life);
}
//
装弹
-(
void
)reload:(Gun *)gun{
NSLog
(
@”%@
正在往
%@
里装填
%@……”
,
_name
, gun ->
_name
, gun ->
_bullet
->
_size
);
[gun
reload
];
}
//
加血
-(
void
)cure{
NSLog
(
@”%@
吃药了
,
血量增加
”
,
_name
);
_life
+=
30
;
NSLog
(
@”%@
当前血量为:
%d”
,
_name
,
_life
);
}
@end
int
main(
int
argc,
const
char
* argv[]) {
@autoreleasepool
{
//
创建子弹对象
Bullet
*bullet1 = [
Bullet
new
];
bullet1 ->
_size
=
@”
萝莉弹
”
;
bullet1 ->
_hurt
=
10
;
bullet1 ->
_bulletCount
=
6
;
//
创建枪对象
Gun
*gun1 = [
Gun
new
];
gun1 ->
_name
=
@”
萝莉枪
”
;
gun1 ->
_bullet
= bullet1;
//
创建士兵对象
Soldier
*soldier1 = [
Soldier
new
];
soldier1 ->
_name
=
@”
怪叔叔
”
;
soldier1 ->
_life
=
100
;
soldier1 ->
_level
=
2
;
//
创建敌人对象
Soldier
*loli =[
Soldier
new
];
loli ->
_name
=
@”
小萝莉
”
;
loli ->
_life
=
80
;
//
提示用户输入指令
NSLog
(
@”
请输入指令
d.
跑
e.
跳
s.
蹲
f.
开枪
r.
装弹
w.
加血
”
);
//
循环控制
while
(
1
) {
//
接收用户输入的指令
int
command =
getchar
();
getchar
();
//
根据指令执行相应动作
switch
(command) {
case
‘d’
:
[soldier1
run
];
break
;
case
‘e’
:
[soldier1 jump];
break
;
case
‘s’
:
[soldier1 squat];
break
;
case
‘f’
:
[soldier1 fire:loli ByGun:gun1];
break
;
case
‘r’
:
[soldier1 reload:gun1];
break
;
case
‘w’
:
[loli cure];
break
;
case
‘q’
:
NSLog(
@”
射累了,不射了。
”
);
return
0
;
break
;
default
:
break
;
}
}
return
0
;
}
}
