プログ

スマホアプリ「コインパズル」開発者の日記https://bit.ly/35gpWAB

iPhoneアプリ「コインパズル」

最近はiPhoneアプリを作っています。

齢35を超えて、まだ自分の理想を追求できることは感謝しなければならないのかと思います。

 

さて、前回の漫画はあまりに友人のウケが悪く、もう辞めようと思いました。

 

その時、友人と自分の中にあるネタを色々と話した際、それは面白いんじゃないか、と言われたアイデアがあり、作ることにしました。

コインパズル

コインパズル

  • Yaneurabeya
  • ゲーム
  • 無料

apps.apple.com

 

これです。

 

夢の中で5枚の1円玉が合体して、五円になる夢を見たのがきっかけです。

このアプリ、結構友人のウケが良く、今後も改善してみようと思っています。

 

エフェクトをアフターエフェクトなどの映像ソフトでなく、プログラミングで作っています。

swiftと言う言語でこんな式を作ると、

    func circle(x:Int,y:Int,w:UInt256){

        for j in 0...rensa - 1{

            for i in 0...19{

                let ransuu = CGFloat(i * Int(cnt)) * CGFloat(sqrt(CGFloat(rensa)))

                let size = ransuu

                let xhajime = center + chaba * (CGFloat(j)-1.5)

                let yhajime = centerheight - chaba * 3.5 + esize/2

                let clabel: UILabel = UILabel(frame: CGRect(x: xhajime - size/2, y: yhajime - size/2, width: size, height: size))

                clabel.layer.masksToBounds = true

                clabel.layer.cornerRadius = random() * 100

                clabel.layer.borderWidth = emargin * random()

                var alpha:CGFloat = 0

                if cnt>0{

                    alpha = CGFloat(cnt) * 0.1

                }

                let aColor = UIColor(red: 1 + random() * 0.1, green: 0.6 + CGFloat(i)*0.005 * random(), blue: CGFloat(rensa) * 0.2, alpha: 1 - alpha)

                clabel.layer.borderColor = aColor.cgColor

                self.view.addSubview(clabel)

            }}}

 

連鎖の際にコインのとこに出てる様なエフェクトを作る事ができるんですね。。

これ、1日がかりです。このたった20行を調整するだけで 笑

バカですよね。


コインパズル 5連鎖

 

1日かけてこの仕上がりかと。うーむ

 

円や四角が出るエフェクトは基本的に四角を20回描いています。

その四角の広がり具合を調整したり、コーナーを丸くする事で円にしたり、色を変更したりしています。

sqrt

という綴りがあると思います。これはルートなんですが、一次関数的に四角が広がっていったのでは、コインが連鎖した時の衝撃が減衰していく感じを上手く表現できません。広がり方はだんだんと弱まっていくべきだと感じ、ルートを採用しました

やはり、数学重要。

これにランダム変数をかませ、ある幅の中で二度と同じエフェクトにならない様、工夫しています、はい。。

 

システムについてです。

こんな具合に5マス5マスの中にテトリスの様に落ちてくるコインを並べていきます

 

2個連続したら消える、と言うシステムを作るのは簡単なのですが、

要は隣あったのが同じだったら消せ、みたいにプログラミングすれば良い訳ですから・・

 

しかし、5個はどう消すとプログラミングすれば良いのでしょうか。

これは数学というか算数の知識を使いました。

読むだけで頭が良くなる本、という面白い本があったのですが、それの一つでこんな問題がありました。面白いので、オススメです。

 

 ちょっと一ページだけすみません、拝借させて下さい

f:id:atomic104:20191012072419j:plain

これ、答えは12通りなのですが、プログラミングする際はそうじゃ無い、左右上下が逆になったりしたものは全部別物と考える必要があります。

f:id:atomic104:20191012071935j:plain

 

こういう具合に。

これは全部で63通りありますね。

これを右上から

01234

56789

という様に5列目まで番号をふって、どことどこが同じになったら反応すべきか打ち込んでいきます。

プログラミングの知識が深ければ、別の手段があるんでしょうけど、63通りくらいなら打ち込んでやるか・・という気持ちになったので、打ち込みました。

 for j in 0...62{

            switch j{

            case 0: kata = [1,2,3,4]

            basyo = [0,5,10,15,20]

            case 1: kata = [5,10,15,20]

            basyo = [0,1,2,3,4]

            case 2: kata = [1,2,3,8]

            basyo = [0,1,5,6,10,11,15,16]

            case 3: kata = [2,3,4,5]

            basyo = [3,4,8,9,13,14,18,19]

            case 4: kata = [1,2,3,5]

            basyo = [0,1,5,6,10,11,15,16]

            case 5: kata = [5,6,7,8]

            basyo = [0,1,5,6,10,11,15,16]

            case 6: kata = [5,10,15,16]

            basyo = [0,1,2,3,5,6,7,8]

            case 7: kata = [5,10,14,15]

            basyo = [1,2,3,4,6,7,8,9]

            case 8: kata = [1,6,11,16]

            basyo = [0,1,2,3,5,6,7,8]

            case 9: kata = [1,5,10,15]

            basyo = [0,1,2,3,5,6,7,8]

            case 10: kata = [3,4,5,6]

            basyo = [2,3,7,8,12,13,17,18]

            case 11: kata = [1,2,3,7]

            basyo = [0,1,5,6,10,11,15,16]

            case 12: kata = [5,10,11,15]

            basyo = [0,1,2,3,5,6,7,8]

            case 13: kata = [5,9,10,15]

            basyo = [1,2,3,4,6,7,8,9]

 ありがとう!算数。。私塾で数学を教えて生計を立ててる訳ですし、自分ほど数学(算数)のお世話になってる人間っていないんじゃないですかね

デジタルな事やってる様で手法は意外とアナログです。

 

ちょっとでもプログラミングがどんなモノか伝わると幸いです・・。

 

あ、コインとかはフォトショ、イラレで作ってます。

プログラミングじゃありません。

世に現存するものを描画するほどプログラミングの腕はありません。

ベベルとエンボス、あとはグラデーションを多用して、光沢を表現しました。

 

アンドロイド版も作ろうとして、Kotlinと言う言語を勉強していたのですが、Unityというソフトで作った方がiPhone版への汎用性もあって良い、ということの様なのでそうすることにしました。。

アンドロイドの方も製作中ですので、もしよろしければやってみて下さい。