• 周六. 4 月 25th, 2026

物嫩软件资讯网

软件资讯来物嫩

OC应用:射击游戏

admin@wunen

4 月 18, 2025


在学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

;

}

}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注