Swiftで放置ゲーが作りたかった

日記です。メモ書きのつもりで書きなぐっているので可読性が低いかもしれません

6日目 座礁

 

qiita.com

 前回のこれ、gameのプロジェクト内でやったらわけわからなくなったので新しいプロジェクトを作って言われた通りに作ってみた。

 で、それはうまくいった。できた。ただそれをgameのプロジェクト内で再現しようとしたらメタメタにエラー出まくりでにっちもさっちもいかない。正直お手上げだ。

 というわけで新しくプロジェクトを作り直すことにした(2回目)

 まあ毎回知識は増えて来てるし… 

 作り直した。なんかうまく動いている。

 

 ここで思ったのはPlanetクラスのインスタンスとかをどこで管理すればいいのかってこと。ViewControllerの中で処理するのはなんかおかしいよね…?

 あとは時間経過で資源等が増える処理もつけたいのだが、それもどこに書けばいいのやら。

 というわけでGameControllerクラスを新しく作りました。ここで諸々の数値を管理するつもり。

 クラス変数の作り方がわかんなくて少し詰まったのでこのサイトを見て解決した

cccookie.hatenablog.com

 クラス変数にするにはstaticをつければいいらしい。

 

 と今日はここまで。今日はあんまし進まなかったな…

5日目 一定時間で変化させる

 とりあえず参考にしていた

qiita.com

 ここを読み進めて行ったら時間経過の諸々が出てきたのでここを参考に今回はやっていく。

 記事では「空腹」パラメータを設定しているが、そうね…とりあえず惑星に「人口」インスタンスを設定して、それが一定時間おきに増えるようにしよう。

 

 とりあえず出来た。

 しかしふと思ったのは今はViewControllerでこの処理をやってるけどこれでいいんだろうかということ。

 というか今はメインの処理をviewDidLoad()内でやってしまっているわけだが、この関数は画面が読み込まれた時に実行される。このタイミングで実行するべきなのか?

 …わからん。まあわからないものは仕方ないし問題がもっと明確になったらその時に考えよう。

 

 あとは何をしよう。そうだな、メインの画面を作り込んで見ることにする。

 メインの画面に表示するものってなんだろう?惑星のリストとかかな。リスト表示ってどうやるんだろう。

 storyboardをいじっていたらTableviewとかが出てきた。これっぽい?

 この記事が良さそう。

qiita.com

 できた。でも本当に基礎だけって感じだったので他のページも漁ってみる。

qiita.com

 こことかどうだろう。

 ふーん、どうも素の状態だとクソダサだったけど、table内もある程度配置をいじれるみたい。

 で、少しやってみてnavigation controllerってなんだよってなったので調べる。

hajihaji-lemon.com

 なるほど。navigation controllerお前…画面じゃなかったのか…

 わっかりづらい見た目してんのなお前な。

 

 と、時間が来たので今日はここまで。

 

 

四日目

 はい、じゃあ今回もやっていきます。

 今回までの間にふと思ったのは、プロジェクト作る時のテンプレートGameじゃなくてsinngle view でもよくね?と気づいた。

 というわけで作り直した。

 まあなんでそんなことになっているのかと言うと、story boardでViewControllerを追加しようとして少し詰まったから。

techblog.wanabe.net

 ここに新しいViewControllerの追加方法を見つけた。どうも新しい画面を追加したら、それに対応するソースファイルを作らなきゃいけたいらしい。

 しかし、これ画面遷移について少し詰めないといけないかもしれない。

 

 とりあえずやってみた。できた。

 

 さてこっからどうするか…

 

三日目

 随分間が開いたように見えますが、実は私は前回からタイムワープしたのでそう見えるだけです。では三日目やっていきます。

 タイムマシンの中でlabelのやり方を学習した。で、それについてはだいたいわかったのでこれについてはもういいかなという気になって来た。ゲーム中に画像とかは出す気があまりないし表示はこれでいいかなって

 というかこれ以上をどうググったらいいのかがわからない…

 というわけで今回は中身について勉強したいな。することにします。

  とその前にプロジェクトを作るときのGameとかsingle view なんとかとかってなんだよってふと思ったのでググった

qiita.com

 まあ要するにただのテンプレートらしい。今回はGameにしてるけどまあいいか。

 で、この記事を読んでる時に気になったのは、最初に打ち込むBundle Identifierとかの項目である。アプリを配布する時に必要らしいが適当に作っちゃったけど後から変更できるんだろうか。

blog.ikenie3.org

 できるらしい。

 ならいいか。その辺は深く考えずに進めよう。

 

 で内部のコードである。

 swiftはオブジェクト指向だったはず。オブジェクト指向といえばjava(自分にとっては)。

 で確かクラスという雛形…設計図を作って、それを元に作られたインスタンスというオブジェクトを作り、それに対して指示を出す(メソッド(命令?)はクラス内に記述する)ことで処理を行う…みたいな感じだったはず。

 

 ふむ。

 作りたいのはリアルタイムのシミュレーションゲームみたいな感じのやつである。

 なんかイメージしているのは…宇宙人の艦隊が攻めてくるので太陽系の各惑星に適切に艦隊を配置して防衛を行う!みたいな感じ。

 とりあえずplanetクラスでも作って見ようかな?

 んー…クラスの作りかたはそこら中に書いてあるが、そもそもそれをどこに置けばいいのかがわからん。

qiita.com

 ここを参考に、とりあえずNew File から新しいファイルを作ってみる。ファイル名はとりあえずPlanetで。

 で、どうしたらいいんですかね。

クラス | Swift言語を学ぶ

 ここのクラス解説をちょっと読んでみる。とりあえず変数を宣言してみる。

 varがいつものでletが定数らしい。

var value = 1 //変数

let value = 1 //定数

qiita.com

 ここのページが詳しい。

 で、とりあえず変数だけ作ったけどなんかエラー出た。"Class 'planet' has no initializers"?

 イニシャライザというものが必要らしい。

qiita.com

 ここの説明が詳しい。初期化関数とかいうものらしい

 とりあえず作ってみる。

class planet {

    let name: String     // 名前

    let size: Int        //惑星の容量

    var Productivity:Int //生産力

    

    init(name: String, size: Int) {

        self.name = name

        self.size = size

    }

}

そうそう、はてな記法で書くとソースコードが埋め込めるらしい。次からやろう。

greenkour.hateblo.jp

 で、なんかエラー出た。"Return from initializer without initializing all stored properties"?

 どうも宣言した変数全てをここで初期化しておかないといけないらしい。違うかもしれない。でもそうしたら出なくなったのでとりあえずそういうことにしておく。

 とりあえずこれをラベルにして表示してみよう。

 できたみたいだが文字が見切れる。sizeToFitメソッドというもので設定できるらしい。

 

 と、ここで電池が切れたのでまた続きは今度に…

 

 

2日目 リスタートとチュートリアル

 すでに著しい意欲の減退が感じられる。せめて3日ぐらいは続けたい…

 さて、昨日はどこまでやったんだったか。記事を見返してみる。

 

 ふーむ。最後のリンク先を少し眺めてきたが、ぶっちゃけ何が書いてあるのかよくわからん。

 それから気になったのは最初に書いてあるデメリット。これ読んでUnityでよくね?と思ってしまった。

 なんでUnityでなくswiftでやろうとしたんだっけ?

 

 よく考えたら理由は特にないな。これよりは慣れてるしやっぱりUnityで作ろう。

 …と思ったけどせっかくなのでもう少し粘ってみることにする。

 私は完全な初心者だ。もっと入門の、それもゲームを作る手順を手取り足取り書いてあるサイトを参考にしたほうがいいだろう。

 

 「swift ゲーム」で改めて検索をかけてみる。

 

qiita.com

 これなんか良さそう。これでやってみよう。

 

 とりあえず言われた通りにプロジェクトを作り直す。左上の三角からなんかゲームできると言うのでやってみる。

 おお、なんか四角いのが動く。面白い。

 

 どんどん進めていく。今度は最初にあったコードを削除するらしい。言われた通り削除した。

 で、フリー素材をダウンロードするらしいんだけど。私が作りたいのは別にシューティングではないんだよなぁと。このまま読み進めるか使えそうなところだけ参考にして作りたいものを作るか?

 うーん、まあいいや。最初は指示通りシューティングゲームを作ろう。

 

 ダウンロードが終わるとzipファイルがダウンロードされた。くどい言い方だな…こう言うのってなんて言うんだっけ?ともかく解凍して指示通りAssets.xcassetsにぶち込む。

 Main.storyboardを開き、ボタンを追加して黒い画面にドラックアンドドロップ。…したんだけど図と異なり変なポップアップ?がでた。なんか選ばないといけないらしい。よくわからないがShowを選択する。大丈夫みたい。

 一度走らせてみろとのことなので走らせる。さっきの最初のコードの削除で少しミスをしていて一度失敗したけど、直したらちゃんと動いた。これシミュレーター起動するの結構時間かかるな…デバックとか大変そう。

 

 まあそこまでたどり着けるかかなり怪しいんだけど。

 シミュレーターはとりあえずうまく機能しているように見える。

 地球の画像を追加する。言われた通りのページに飛び、コードをコピペする。本当は見ながら手で打ったほうが勉強になるんだろうけど、まあいいか。飽きないことが何よりも大事だ。

 didMove(to:)の中身を追加したようだ。これは画面に遷移した時に実行される処理らしい。指示にはないが一旦走らせてみる。

 地球が表示された。ちょっと感動。今の所順調に進んでいることにもちょっと感動。

 

 今日はこの辺で時間切れ。続きはまた今度…いや、今度じゃないな。

 明日に必ず続きをしよう。明日は忙しそうだけど、手をつけることだけはしよう。そうしよう。

 

 

 

 …と思ったけど眠れないので続きをやる。

 地球と同じやり方で宇宙船を追加。スマホを傾けることで操作するらしい。

 ここから実機でもデモが必要でApple IDでログインするらしい。が、テスト用にApple IDを別に持っておいたほうが良いとのことなので作った。

 

 Apple IDを作成し、Xcode側ににそれを入力。

 と、ここでエラー。指示通りやったはずだが、なぜだ。

 しばらくウンウン唸ったりググったりして、「General」の「identity」から「Bundle identyfier」にApple IDを打ち込んだら治った。

 無事手持ちのスマホでデモができた。感動もひとしお。

 眠くなってきたので今度こそ寝ることにする。おやすみなさい。

第1回 作りたいものと事始め

 基本的には放置ゲーみたいな感じ。UIはフラットデザイン!みたいな感じでこう…イラストはなくテキストだけで進行する感じを想像している。初めてで何かをがっつり作ろうとすると高確率で失敗するのでこんなもんでいいだろう。

 まあもっといい案が思いついたり、作ってる途中で考えが変わったりしたらその都度反映していけばいい。行き当たりばったりは得意だ。 

 とりあえずXcodeがこのmacに入っているので開発環境は大丈夫なはず。画面の構成ってどうやるのかな? 

 とりあえず「swift ゲーム開発」みたいな感じで検索をかけてみる。

 

 

プログラミング初心者がswiftでゲームアプリ的なものを作ってみた。 | DACエンジニアブログ:アドテクゑびす界

 こんなのが出てきた。2015年と若干古い気もするが、深く考えずにとりあえずこれを参考にしてみることにする。

 

Xcode > Create a new Xcore project > Game 画面より、下記を入力

 

 とのことなのでその通りに。

 Project Nameは…とりあえずGameでいいか。

 

 

 

 一通り設定をして、プロジェクトを作成できたようだ。

 と思ったけどここで問題が。この記事、Sprite Kitなるものの解説にこの後入っていくのだが、私はこのSprite Kitがなんなのか見当もつかない。と言うかそもそもXcodeの画面の見方がよくわからん。

 

 とはいえこれで新しいキーワードが手に入った。「swift Spritekit」で検索。

 

qiita.com

 

このサイトが分かり易そうなのでこれを見ていく。

 

…と思ったけど今日は時間切れ。続きはまた明日にしよう。

 

前置き

 テスト投稿も兼ねてこのブログの趣旨の紹介を。

 

 たった今、突然iosでアプリを作ろうと思い立った。

 が、自分のこの手の決心が3日どころか翌日にもあっさり溶けうることを経験上よく知っている。

 と言うわけでブログを作ることにした。誰かの目につくところに経過をおいておけばモチベーションの維持に役立つだろう…

 たぶん。

 

 自分の現状のスペックは

 C言語java…触ったことある

 Unity …挫折した、と言うか途中で飽きた

 Arduinoなどマイコン…リアル関係で触らないといけないので試行錯誤中

 みたいな感じです。プログラミング関係はこんな感じかな?

 

 と言うわけでやっていきます。よろしくお願いします。

 

 つづけ。