2014年11月27日木曜日

[swift]テキストRPGをswiftの練習がてら作ってみようと思った - 3


戦士アルテアに色々させようととりあえず行動を追加してみた
(追記:この文を考えると、行動内容は戦士、何をするかは条件は洞窟というのが自然な気がしますね)

歩くとHPを消費
走るともっと消費
泉の水を飲むと回復

今回は泉の洞窟に変更を加える

public class Cave{
    var name="泉の洞窟"
    var item:String="泉の水"
    var size:Int=20
    var stepCount=0;
    var player:Warrior;
    var direction:Int=1;
    var progress:Bool;

    
    public init(player:Warrior){
        self.stepCount=0
        self.player=player
        self.progress=true;
        print("\(player.name)\(name)の探索を始める\n")
    }
    
    public func step(){
        if(!progress){
            return
        }
        var rand = arc4random()%100
        if(rand>60){
            stepCount+=direction;
            player.hp-=2;
            print("\(player.name)が歩く(HP:\(player.hp))\n")
        }else if(rand>30){
            stepCount+=direction;
            player.hp-=6;
            print("\(player.name)は走った(HP:\(player.hp))\n")
        }else{
            //stepCount+=direction;
            player.hp++;
            print("\(player.name)は少し休んだ(HP:\(player.hp))\n")
        }
        
        if(stepCount==20){
            direction = -1
            stepCount--;
            //満タンとかやるならここは、playerの役割なんだろう
            player.hp=100;
            print("\(player.name)\(item)を手に入れた。泉の水を少しだけ飲むと体の疲れとれたようだ。(HP:\(player.hp))\n")
        }
        if(stepCount<0){
            progress=false;
            print("\(player.name)\(name)から出た\n")
        }
    
    }
    
}


■出力
アルテアは泉の洞窟の探索を始める
アルテアは少し休んだ(HP:101)
アルテアが歩く(HP:99)
アルテアが歩く(HP:97)
アルテアは走った(HP:91)
アルテアは少し休んだ(HP:92)
アルテアが歩く(HP:90)
アルテアが歩く(HP:88)
アルテアは走った(HP:82)
アルテアは少し休んだ(HP:83)
アルテアが歩く(HP:81)
アルテアは走った(HP:75)
アルテアは走った(HP:69)
アルテアが歩く(HP:67)
アルテアは少し休んだ(HP:68)
アルテアが歩く(HP:66)
アルテアが歩く(HP:64)
アルテアが歩く(HP:62)
アルテアは少し休んだ(HP:63)
アルテアは走った(HP:57)
アルテアが歩く(HP:55)
アルテアは少し休んだ(HP:56)
アルテアは少し休んだ(HP:57)
アルテアは走った(HP:51)
アルテアは走った(HP:45)
アルテアは少し休んだ(HP:46)
アルテアは少し休んだ(HP:47)
アルテアは少し休んだ(HP:48)
アルテアは少し休んだ(HP:49)
アルテアが歩く(HP:47)
アルテアは少し休んだ(HP:48)
アルテアは少し休んだ(HP:49)
アルテアが歩く(HP:47)
アルテアは少し休んだ(HP:48)
アルテアが歩く(HP:46)
アルテアが泉の水を手に入れた。泉の水を少しだけ飲むと体の疲れとれたようだ。(HP:100)
アルテアは少し休んだ(HP:101)
アルテアは走った(HP:95)
アルテアは少し休んだ(HP:96)
アルテアが歩く(HP:94)
アルテアは走った(HP:88)
アルテアが歩く(HP:86)
アルテアは少し休んだ(HP:87)
アルテアが歩く(HP:85)
アルテアが歩く(HP:83)
アルテアは走った(HP:77)
アルテアは少し休んだ(HP:78)
アルテアは少し休んだ(HP:79)
アルテアが歩く(HP:77)
アルテアは走った(HP:71)
アルテアが歩く(HP:69)
アルテアは少し休んだ(HP:70)
アルテアは走った(HP:64)
アルテアは走った(HP:58)
アルテアは少し休んだ(HP:59)
アルテアは少し休んだ(HP:60)
アルテアが歩く(HP:58)
アルテアは少し休んだ(HP:59)
アルテアは走った(HP:53)
アルテアは少し休んだ(HP:54)
アルテアは少し休んだ(HP:55)
アルテアが歩く(HP:53)
アルテアは走った(HP:47)
アルテアは走った(HP:41)
アルテアは少し休んだ(HP:42)
アルテアが歩く(HP:40)
アルテアは少し休んだ(HP:41)
アルテアは少し休んだ(HP:42)
アルテアが歩く(HP:40)
アルテアは少し休んだ(HP:41)
アルテアは走った(HP:35)
アルテアは泉の洞窟から出た

気になる点ありありですね。

HPの最大値とかきになるし、ランダムすぎるので元気なのにやすんだり、走り続けすぎるのもどうか。
場所にいろいろと戦士アルテアを動かしてもらったけど、幾つかは、戦士自体が管理するようにした方がよさそうだ。
ランダムで動かしたけど、ロジック(簡易AI)で判断とかもいれたいね。

徐々に見直していこう。

2014年11月25日火曜日

[swift]テキストRPGをswiftの練習がてら作ってみようと思った - 2

とりあえず、冒険をシミュレーションするようにしたい
(コードに一切効率は考えない。継承しまくり、ネストとか気にしない)

■ 最初の物語
ある戦士アルテアが、泉の洞窟にいって、探索を開始する
洞窟にはコウモリがいて襲ってくるが撃退しながら
探索を継続し、一番奥にある泉の水をくんでくる。


■ 構成要素はなんだろう
戦士
コウモリ
洞窟
拾ってくるもの


うん、なんか大きいので、少し話を縮小しよう。
■最初の物語改
戦士アルテアは泉の洞窟にいく、洞窟の奥には泉があり、それを汲みにいく

(構成要素)
戦士  (Warrior)
洞窟  (Cave)


public class Warrior{
    var name:String
    var hp:Int
    public init(name:String,hp:Int){
        self.name=name
        self.hp=hp
    }

}


public class Cave{
    var name="泉の洞窟"
    var item:String="泉の水"
    var size:Int=20 //洞窟の大きさ
    var stepCount=0; //どれだけ進んだか
    var player:Warrior; //冒険者
    var direction:Int=1; //進んでいる方向
    var progress:Bool;//進行中かどうか

    
    public init(player:Warrior){
        self.stepCount=0
        self.player=player
        self.progress=true;
        print("\(player.name)\(name)の探索を始める\n")
    }
    
    public func step(){
        if(!progress){
            return
        }
        stepCount+=direction;
        print("\(player.name)が歩く(\(stepCount))\n")
        if(stepCount==20){
            direction = -1
            print("\(player.name)\(item)を手に入れた\n")
        }
        if(stepCount<0){
            progress=false;
            print("\(player.name)\(name)から出た\n")
        }
    
    }
    

}

動かす
    func testTextRPG() {
        var warrior:Warrior=Warrior(name: "アルテア", hp: 100)
        var cave:Cave=Cave(player: warrior)
        
        
        for(var i=0;i<100000;i++){
            cave.step()
        }

    }


アルテアは泉の洞窟の探索を始める
アルテアが歩く(1)
アルテアが歩く(2)
アルテアが歩く(3)
アルテアが歩く(4)
アルテアが歩く(5)
アルテアが歩く(6)
アルテアが歩く(7)
アルテアが歩く(8)
アルテアが歩く(9)
アルテアが歩く(10)
アルテアが歩く(11)
アルテアが歩く(12)
アルテアが歩く(13)
アルテアが歩く(14)
アルテアが歩く(15)
アルテアが歩く(16)
アルテアが歩く(17)
アルテアが歩く(18)
アルテアが歩く(19)
アルテアが歩く(20)
アルテアが泉の水を手に入れた
アルテアが歩く(19)
アルテアが歩く(18)
アルテアが歩く(17)
アルテアが歩く(16)
アルテアが歩く(15)
アルテアが歩く(14)
アルテアが歩く(13)
アルテアが歩く(12)
アルテアが歩く(11)
アルテアが歩く(10)
アルテアが歩く(9)
アルテアが歩く(8)
アルテアが歩く(7)
アルテアが歩く(6)
アルテアが歩く(5)
アルテアが歩く(4)
アルテアが歩く(3)
アルテアが歩く(2)
アルテアが歩く(1)
アルテアが歩く(0)
アルテアが歩く(-1)
アルテアは泉の洞窟から出た


うん、物語は動き出した。次は、アルテアが真面目に歩きすぎるので、それを調整しよう。

2014年11月24日月曜日

[swift]テキストRPGをswiftの練習がてら作ってみようと思った - 1

やりたいことが、言語やツールを覚えることが邪魔になるなら、前からの方法を使うというふうに焦って、とにかくアプリを出すことを優先してきましたが、ここに来て急いで出すものが見当たらなくなったので、swiftでできる範囲からちょこちょこやっていきながらゆっきり考えていきます。

題材は、いつも途中でめげるテキストRPGです。
本によく猫をclass定義して、にゃーと泣かす。とかありますよね。
そんな、テキストな世界でRPGな世界を定義したいのです。いろいろな人が、いろんな形でやっているのですが、自分ならどうするかを、考えなしに進行します。
ちゃんとしたゲームプログラマーではないので悪しからずご了承ください。
swiftも必要以上にがんばりません。

まずは、開発環境から
swiftなので当然xcode6、そしてios7より前は諦めなくてはいけません。これが、私がswiftにすぐ手を出さない言い訳の第1位です

さて、テキストRPGだから、アプリのUIベースでなくて、CIベースで開発しやすいかなとおもって、テストフレームワークを使ってやるぜと思ったら、クラスを読みまなくて、早くも諦めかけた...。

どうやら、APPモジュールとテストモジュールが名前空間が別らしい。

swiftはクラスを自動的に読んでくれるようだが、名前空間が別なのでしょうがない。
フレームワークのように

import ターゲットAPP

とやってやれば、クラスが見つかるようになった。

だけど、public なクラスでないとみつからない。さらに、public init()がないと、ビルドで怒られる。コマンドキー+u でテスト実行。


とりあえず、一歩。

2014年2月26日水曜日

iAd Workbench結果

結果的にこうなりました。



予算50$で
24356の表示
119回のタップ
1回のダウンロード
つまり、一ダウンロードに50$

結論、自分のアプリの宣伝の身の丈にはあっていない。
この予算で結果が同じくでるなら、50000$くらいかければ、順位の上位にいき
シナジーを生むかもしれない。中途半端にしてもたいした効果は得られない。

2014年2月20日木曜日

iAd Workbenchを使い始める

iAd Workbenchで76万表示され一つもダウンロードされなかったという話を聞いた。
実際は、どんなもんか試してみようと思いました。

すごく出稿手続きは簡単でした。
対象国は、iAdが強そうなUnited States
対象アプリはStrengthen (iPhonePLUS記事:http://iphone.ascii.jp/2014/02/18/88743764323/)
       ※リリース2週間で、Downloadがアメリカが70%なのでちょうどいいでしょう。
ユーザの属性は特に絞りませんでした。
表示対象は、ゲーム。
予算は50$




4時間程度で上記の結果に
17.26$を費やし9,666回表示され、52回タップされ、0ダウンロード。

半分を費やしてこの結果だったので、
ユーザの属性をファンタジー系にして継続中です。


2013年5月15日水曜日

自信を取り戻す方法


自信を失って生きる意味を考えていましたが、今回フルスクラツチしたLoopPlayerのおかげで、最近自分の成長に対する疑問に対し、ソースのブラッシュアップを感じられ少し自信を取り戻すことができました。

再び自信を失ったときのために、人は意外と無駄に時間をすごしていないといことを感じられそうなことを記載しておきます。


1、過去やったことをもう一度やる
1回目の経験、それ以外の関係ない経験が意外と生きていて、一回目よりうまくいくはずです。

2、自分がおもっているより簡単なことをやる
周りからの期待、立場から必要以上に自分に求めすぎていませんか。
選ばれた戦士でも、スライムからコツコツと経験を積むものです。

2、よかったときを思い出す
Blog、日記等にそのとき、感じたよかったことを記載しておき、つまったとき、そのよかったことを中心に
思考をめぐらせてみる。

3、10倍、時間をかけてやってみる
時間をかければ、たいていのことは、普通にやるより丁寧になり見栄えがよくなります。
あとは、回数を重ね経験で時間を縮めていくだけ。

4、本をたらふく買う
1冊の本に大事なことは3行ぐらいしかないんです。
わからない、理解できないのは、著者が悪いんです。

5、デッサンをする
細かいほど、ぼけーとして集中できる。
最終的にやりきれる自信と成果物がのこる。
(ブラックゴールドソーのフュギア買ってしまいました)

6、しばらくなにもしない
テンションがあがるのを待つ
今回は、ゴールデンウィークとして2週間ぐらい休んでいて、さすがに最後の方になにかしたくて
はじめました。

7、早歩きして、前歩いている人を抜く


結論、
自分を過小、過大評価せず、
小さいできることを確認しつつ、
自分の可能性を感じることが自信を取り戻すこと一歩かもしれません。


✨当該アプリは2周年感謝で2013/05/19の日曜まで無料にしてます。
https://itunes.apple.com/jp/app/loop-player/id438691099?mt=8




2013年4月17日水曜日

何もできなくなってしまった自分をもう一度見直す

春なのでそんな反省を始めた。村上春樹に触発されて文章が書きたいだけかもしれない。
でも、今、自分を見直さないといけない気がしているのも事実なのです。

原因1
・目的が不明確、達成目標が多すぎる
例)
アプリを作るときに求めること。
・売れる
・ダウンロードされる
・アプリ作成技術がつく
・デザインしたい
・音作りたい
・自分の表現
・アプリを発表する

達成目標が少ないほど、対応策がたてやすいのはわかりきていることなのに、欲張ってしまい、
結局なにもできません。

対策1
・スケージュールから決めて、目標を選択する
・大切なこと、できることを選択する

原因2
目的が明確でない
例)
・売れるアプリ
こんなものは目標でもなんでもない。

対策2
・模写
・〜のようなもの
・〜の何かが最適されたもの
というのと、出力と比べられて、達成感と意味がもたらされる。

細かい部分でも
・線を引く という目標よりも、 柔らかい直線をかけるようになる
・このロジック、こうする方が分かりやすいかも
のほうが工夫もしやすい

原因3
考え過ぎると動けなくなる

対策3
モックをさくっと作れる方法、環境を用意できないかなあ。
準備が必要。(素材)

飛べない豚はただの豚なので
もう一度、トンでみたいと思うのです。