您的位置:首页 > 其它

OC应用:射击游戏

2015-05-29 00:37 176 查看
在学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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: