質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

iOSゲームアプリの構造について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,411

earnest_gay

score 403

アカウントを必要としないゲームアプリはだいたい作れるようになりました。(Swift)
実際、作りたいのは、アカウントを持ったPRGゲームなどです。

例えば下記です。

・パズドラ
・モンスト
・白猫プロジェクト
・タワプリ

疑問点は下記です。

・サーバーを持っていて、DBにプレイヤー情報を格納して管理しているのか
・それとも、単にアプリ内で記憶させているだけなのか

とりあえずゲームアプリのその辺の構造が分からない状態です。

例えばどっかの企業の会計システムとかはたいていDBで管理していると思いますがその構造は分っています。(PHPをよく触っていたので)

・ウェブブラウザ(HTML/CSS/JavaScript/PHP)
・サーバー()

①ウェブ上で入力したものをDBへ格納していき(INSERT)
②得たい情報はSQLで組んだクエリでゲットしてきてウェブ上に表示させたり(SELECT)
③変更したい内容があれば①と同じことしたり(UPDATE)
④削除したいな内容があれば削除したり(DELETE)

と、
ウェブからサーバーへリクエスト
サーバーからウェブへレスポンス
と、ウェブだとそこらへんは分かっています。

ゲームアプリも同じのでしょうか?

レベルが上がりばステータスも上がり、その値をUPDATEで修正していってるのでしょうか?

そこらへんが良く分かりません。

そこらへんの構造の図があれば分かりやすいのですが、リンク先などありましたら教えていただけるとありがたいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

・サーバーを持っていて、DBにプレイヤー情報を格納して管理しているのか 
・それとも、単にアプリ内で記憶させているだけなのか

一般的に言って、ソシャゲを含むオンラインゲームは、
サーバのデータベースにプレイヤーの情報を保存して管理しています。

なぜ、「単にアプリ内で記憶させているだけ」でないのか。
それは一言でいうと、課金の都合です。
違法コピーや改造ツールなどで、データを改ざんされないためです。

なお、課金のないフリーゲームでも、サーバに保存する場合があります。
それはランキングがあるタイプのゲームで、やはり改ざんされないためです。


ゲームアプリも同じのでしょうか?

DBの設計方針は様々だと思いますが、
普通にSQLを使っていたりしますし、
ゲームだからといって特殊なDBではないです。

ただし、微妙に違ってくるところもあります。
セキュリティと負荷対策、メンテナンスと障害対策です。

企業のビジネス用システムと違い、外部に公開され何万人もアクセスでき、
しかも24時間営業していますから、上記が大きな問題となるでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/18 11:35

    具体的にありがとうございます!

    課金の都合というのが気になりますが、制作前にまだまだ調べることが多そうです、、、

    キャンセル

0

DBの構造自体は会計などと同じ考え方で良いかと思います。

数年前のソシャゲだと、Webサーバを立てて
そこにHTTPリクエストで要求を受けられるようにAPIを(PHPなどで)用意して、
実際のSQL処理などはそのAPIが処理する、という形が一般的だったかと思います。

HTTP通信そのものの暗号化、それとシークレットキーなどによるAPIの保護なんかは
だいたい必須項目として普通に入ってきますね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

・サーバーを持っていて、DBにプレイヤー情報を格納して管理しているのか 
・それとも、単にアプリ内で記憶させているだけなのか

サーバ側にもアプリ側にも(それぞれ異なる)情報を記録しています。

1シナリオ5ステージで10ポイントを消費するゲームで例えると
(1) シナリオ開始時 → 10ポイント消費という情報をサーバへ送信
(2) ユーザー操作後 または ステージクリア時にアプリ側に記録
(3) シナリオ終了時 → 結果をサーバへ送信
といった感じになるかと思います。
#実際にはもっと複雑になるかと思いますが。。。

スマートフォンでは突然の通信断や充電切れ、予期せぬエラーによってアプリが続行不能になることが多々あります。
サーバ側だけで情報を管理している場合は (2) の途中で続行不能になった場合、再度起動したとき「10ポイント消費してシナリオを開始した」という情報しか残っていないため、またステージの最初から始めなければいけません(クリアできそうになくても、アプリを落としてしまえば再度チャレンジできちゃいます)。
シナリオクリア直前でアプリが続行不能になって、またシナリオの最初からというのはあまりにも不親切過ぎますしね。

また、(2) の情報もサーバ側へ送信すればよいのでは?という考えもあるかと思いますが、リアルタイムな情報が必要でないゲームアプリでサーバとの通信を頻繁に行うのは、都度ユーザーの待ち時間が発生するためナンセンスかと思われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る