A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李言 中级黑马   /  2015-7-10 21:11  /  2599 人查看  /  25 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

小白的我试着用学到的知识,试着改善了一下课堂练习,一个小游戏
因为包含5个文件
文件一: main.m
#import <Foundation/Foundation.h>
#import "Gun.h"
#import "Soldier.h"

int main() {
//  创建人,枪对象
    Gun *gun = [[Gun alloc] init];
    Soldier *sol = [[Soldier alloc] initGun:gun];
//  游戏控制
    [sol control];
    return 0;
}
文件二:Gun.h
#import <Foundation/Foundation.h>
/**
*  枪类的声明
*  属性:
*  枪的型号, 子弹数量
*  方法:
*  枪发射子弹,重写init
*/
@interface Gun : NSObject
{
    @public
    NSString *_size;
    int _bulletNumber;
}
- (void)shoot;  //  射击
- (id)init;    //   初始化
@end
文件三:Gun.m
#import "Gun.h"
/**
*  枪类的方法实现
*/
@implementation Gun
// 枪发射子弹方法实现
- (void)shoot{
    if (_bulletNumber > 0) {
        _bulletNumber--;
        NSLog(@"啪!干死一个鬼子!!!");
        NSLog(@"萝莉管家:亲,您还有%d颗子弹哦,么么哒(^_^)", _bulletNumber);
    } else
        NSLog(@"亲,咱们没子弹了,呜呜");
}
// init方法的重写
- (id)init{
    if (self = [super init]) {
        _bulletNumber = 6;
    }
    return self;
}
@end
文件四:Soldier.h
#import <Foundation/Foundation.h>
#import "Gun.h"
/**
*  创建一个士兵类
*  属性:
*  名字,等级,生命,枪,人物经验
*  方法:
*  跑,蹲,射击,跳,装子弹,初始化,提示,重写init
*/
@interface Soldier : NSObject
{
    @public
    NSString *_name;
    int _level;
    Gun *_gun;
    int _life;
    int _experience;
}
- (void)run;    //  跑
- (void)jemp;   //  跳
- (void)squat;  //  蹲
+ (void)tiShi;     //  游戏提示
- (void)fireGun;   //  射击
- (void)control;   //  游戏控制
- (void)loadBullet;    //   装弹
- (id)initGun:(Gun *)gun;   //  初始化
@end
文件五:Soldier.m
#import "Soldier.h"
/**
*  士兵类方法的实现
*/
@implementation Soldier
// 跑方法实现
- (void)run{
    NSLog(@"风紧,扯呼!!!");
}
// 蹲方法实现
- (void)squat{
    NSLog(@"蹲下可不代表哥投降了,只是想拉屎...");
}
// 跳方法实现
- (void)jemp{
    _life++;
    NSLog(@"按剧情跳悬崖一定摔不死,弟兄们跳吧.");
    NSLog(@"哇塞,跳崖果然没死,捡到大力丸:生命+1");
}

// 射击方法实现
- (void)fireGun{
    [_gun shoot];
    switch(++_experience){
        case 5 :
            NSLog(@"终于升到一等兵了");
            break;
        case 20 :
            NSLog(@"终于升到二等兵了");
            break;
        case 80 :
            NSLog(@"终于升到三等兵了");
            break;
    }
}

// 装子弹方法的实现
- (void)loadBullet{
    _gun->_bulletNumber = 6;
    NSLog(@"好了子弹满了,不用手撕僵尸了");
}

// 提示方法的实现
+ (void)tiShi{
    NSLog(@"新兵蛋子,哥来教你打鬼子");
    NSLog(@"a是开枪了,z是装子弹,w是跳了,d是跑了,s是蹲下,q退出.嘿嘿,小子,有惊喜哦");
}
// 游戏控制的实现
- (void)control{
    //        游戏控制
    int n = 1;
    char action, ch;
    [Soldier tiShi];
    while(n){
        scanf("%c", &action);
        scanf("%c", &ch);
        switch(action){
            case 'a' :
            case 'A' :
                [self fireGun]; //  射击
                break;
            case 'W' :
            case 'w' :
                [self jemp]; // 跳
                break;
            case 'd' :
            case 'D' :
                [self run]; // 跑
                break;
            case 's' :
            case 'S' :
                [self squat]; // 蹲
                break;
            case 'z' :
            case 'Z' :
                [self loadBullet]; // 装弹
                break;
            case 'x' :
            case 'X' :
                [Soldier tiShi]; // 游戏提示
                break;
            case 'q' :
            case 'Q' :
                n = 0;      //  退出
                NSLog(@"你妈妈喊你回家吃饭了");
                break;
            default :
                NSLog(@"输入不正确哦");
        }
        NSLog(@"需要提示按x哦");
    }
}

// init方法的重写
- (id)initGun:(Gun *)gun{
    if (self = [super init]) {
        self->_gun = gun;
        self->_life = 3;
        self->_level = 0;
    }
    return self;
}
@end

25 个回复

倒序浏览
不错    666    就是要这样
回复 使用道具 举报
感觉很厉害啊  佩服
回复 使用道具 举报
初始化程序那一段应该是// init方法的重写 - (id)initGun: (Gun *)gun{     if (self = [super init]) {         self->_gun = gun;         self->_life = 3;         self->_level = 0;     }     return self; } @end
回复 使用道具 举报
流弊哄哄吊炸天。。。献上我的膝盖一副
回复 使用道具 举报
4B青年 发表于 2015-7-10 23:07
流弊哄哄吊炸天。。。献上我的膝盖一副

:o不至于吧
回复 使用道具 举报

因为还没学到OC,只要有改进视频的都至少用心了,都是脱离了低级趣味的人,都是最可爱的人
回复 使用道具 举报
牛人真多啊!你进黑马了没
回复 使用道具 举报
李言 中级黑马 2015-7-10 23:42:43
9#
carshoel 发表于 2015-7-10 23:39
牛人真多啊!你进黑马了没

现在基础班呢
回复 使用道具 举报
学习了~~~  :victory:
回复 使用道具 举报
好牛逼的样子!
回复 使用道具 举报
写的不错。。。。。物理引擎在哪!!!!!你的json,png人物,,,,还要自己写flashtool来实现人物的动作。
你这些类的实现写一个出来剩下的都可以copy出来了!你可以在cocos2d中开启物理引擎在helloword.cpp   中添加
auto scene = Scene::createWithPhysics();
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);来实现
hero的图像自己做出来通过Flash导出JSON格式再写一个Flashtool来实现他;
#include "FlashTool.h"
#include <json/document.h>


Animate * FlashTool::readJsonSpriteSheet(std::string jsonFile,float delayPerUnit){
   
    rapidjson::Document doc;
    std::string fileContent = FileUtils::getInstance()->getStringFromFile(jsonFile);
    fileContent.erase(0,fileContent.find_first_of('{'));
   
    doc.Parse<0>(fileContent.c_str());
   
    std::string imgFileName = doc["meta"]["image"].GetString();
   
    auto &frames = doc["frames"];
    auto sfc = SpriteFrameCache::getInstance();
   
    Vector<AnimationFrame*> animFrames;
    for (auto m=frames.MemberonBegin(); m!=frames.MemberonEnd(); m++) {
        auto frameName = m->name.GetString();
        auto & frameProperties = m->value["frame"];
        auto & spriteSourceSize = m->value["spriteSourceSize"];
        
        auto sf = sfc->getSpriteFrameByName(frameName);
        if (!sf) {
            sf = SpriteFrame::create(imgFileName, Rect(frameProperties["x"].GetInt(), frameProperties["y"].GetInt(), frameProperties["w"].GetInt(), frameProperties["h"].GetInt()), m->value["rotated"].GetBool(), Vec2(spriteSourceSize["x"].GetInt(), spriteSourceSize["y"].GetInt()), Size(spriteSourceSize["w"].GetInt(), spriteSourceSize["h"].GetInt()));
            sfc->addSpriteFrame(sf, frameName);
        }
        animFrames.pushBack(AnimationFrame::create(sf, delayPerUnit, ValueMapNull));
    }
   
    Animation * animation = Animation::create(animFrames,delayPerUnit);
    return Animate::create(animation);
}
flashtool.h
#include <iostream>
#include <cocos2d.h>

USING_NS_CC;

class FlashTool {
   
public:
    static Animate * readJsonSpriteSheet(std::string jsonFile,float delayPerUnit);
};


#endif /* defined(__NoOneDies__FlashTool__) */

回复 使用道具 举报
学习学习!
回复 使用道具 举报
  张恒宇 发表于 2015-7-11 23:09
写的不错。。。。。物理引擎在哪!!!!!你的json,png人物,,,,还要自己写flashtool来实现人物的动作 ...

我只是基础班啊,大哥,你说的这些我都没学过的:(
回复 使用道具 举报
李言 发表于 2015-7-11 23:21
我只是基础班啊,大哥,你说的这些我都没学过的

我想多了。。。。
回复 使用道具 举报
李言 发表于 2015-7-11 23:21
我只是基础班啊,大哥,你说的这些我都没学过的

其实我连基础班都没去呢;加油吧。。。前面的路还很长基础班写这样不错了
回复 使用道具 举报
  张恒宇 发表于 2015-7-11 23:09
写的不错。。。。。物理引擎在哪!!!!!你的json,png人物,,,,还要自己写flashtool来实现人物的动作 ...

我也是直接添加这两个文件,可是报错,说frames.MemberonBegin()与frames.MemberonEnd()不是rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>的成员,请教一下这个问题怎么解决
回复 使用道具 举报
不错。挺好的哈
回复 使用道具 举报

大哥在线啊,帮我看看这是什么问题,说frames.MemberonBegin()与frames.MemberonEnd()不是rapidjson::GenericValue<rapidjson::UTF8<char>,rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>>的成员,请教一下这个问题怎么解决
回复 使用道具 举报
别叫我大哥  哈哈虽说我很老。。。关键是哥们俺还没看到你那呢。。。就是凑个热闹
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马