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

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

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

511閲覧

学習サイトにてスーパーマリオのようなステージのシステムを実装するには

kakedashieng

総合スコア2

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/09/25 11:38

前提

超駆け出しwebエンジニアです.現在学習サイトを作りたいと考え,構想をねっているところです.

言語はPHP8でフレームワークがLaravel9です.

実現したいこと

学習コース1をクリアしたら学習コース2が解放されるといったステージ機能の実現です.
またそのコースの進捗度も計算してプログレスバーのように表示も行いたいと考えています.

考えている案

※アルゴリズムが猿の考えるようなものだったらごめんなさい.

現在考えているものは2つで,

1つ目はSQLに次のようなテーブルを作成し,ステージ1-1が1になったらステージ1-2を解放するという仕組みです.デフォルトは0に設定しておき,ステージをクリアしたときにクリアボタンなどを押して貰う仕組みにして1にしようと考えています.

ユーザーIDステージ1-1ステージ1-2
110

そしてhtml側では

html

1if(ステージ1-1 == 1){ 2 <img href="/stage1-2" src="xxx"> 3} else{ 4 <img style="opacity: 0.5;" src="xxx"> 5}

クリアしていたらリンクつき画像を表示,クリアしてなかったらリンクなしの半透明画像を表示.といった仕組みにしようと考えています.

2つ目の案では
ステージ1というカラムにクリアした分加算,すなわち
初期値を0にしておき,ステージ1-1をクリアしたら1を加算という仕組みです.

そして両方ともミドルウェアで判定を行って認可の設定を行いページが表示されないようにしようと考えています.

質問

初めて考えた設計なので普通学習サイトやステージシステムどのように設計されているかが全くわかりません.
また調べ方も難しく,機能の名前すらわからないため,

  1. 普通はどのような感じに設計されるのか
  2. 機能の名称

を教えていただきたいです.

解答よろしくおねがいします.

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「マスタ」と「データ」の考え方を学ぶところからかと思います。
各ステージの名称や設定などを持つのが「マスタ」
各ユーザがどこのステージにいるのかを持つのが「データ」としましょう。

まずは「マスタ」に必要な項目を洗い出すこと。

あと懸念事項として「ステージ」は「必ず順番に進むのか、任意の順番なのか、フローがあるのか」というところ。
履歴データなどを持てばとりあえず「どのユーザがどういう順番でステージを踏んでいったか」は分かりますが、「ステージをどういう順番で踏ませるか」はまた仕様になるのでそこは考えなくてはいけません。

本当にマリオとするなら、プレイヤーの選択次第で飛ばせたり、戻ったりできますよね。

申請の承認経路みたいなものをイメージしてもらえればと思います。
条件によって通る承認者がいたり、通らない承認者がいたりするのか。

あと、ユーザ自体も「マスタ」なので「ユーザが今どこにいるのか」は「データ」として持った方が分かりやすいと思いますし、ユーザ名よりもユーザID、コース名よりもコースID(外部から参照されない被らない値)を持っておいた方がデータとしては持ちやすくなります。

履歴データとしてはこんな形

ユーザID連番コースID処理(処理)日時分秒

ユーザ名(aさん、bさん)はユーザマスタから
コース名(1-1,1-2,2-1)はコースマスタから 取得することで対応。

ただ、名称って変更されることもあるので、「操作したときの」名称を持ちたいのであれば
この履歴データに持っておいた方がいいかもしれません。
処理と処理日時分秒は仕様が分からないので例えば処理を「開始/終了」みたいな区分を持っておいて
いつ開始していつ終わるようにしたいとか言う感じ。
中断も持ちたければこの「処理」に区分として持たせても良いでしょう。
区分自体もマスタ化したほうが軽くなります(DBの正規化)

あくまで例で、ある程度正規化すべきという考え方の元提示していますが、
まずは機能を完全に確定することかと思います。

もっと言えば「画面レイアウト」の確定ですね。
画面は機能なので、機能が決まれば取り扱う情報が決まり、データベース設計も決まります。
手法はともかく、必要な情報をすべて洗い出すことが先決と思います。

当回答の中でも幾つか確認事項を出してはいますが、パッと読んだ感じでこれだけ出てくるので
やはりまだまだ詰め切れてないのではないかなと(書いてないだけかもしれませんが、書いてないことは赤の他人には考慮出来ないので)

データベース設計は機能がすべて確定してからです。
(いきなり正規化を考える必要はないですが、共通化できそうなものとか、マスタ化できそうなものとかはある程度意識しておいた方が堅牢になると思う)

ということで、言語やフレームワークももっと基本的な設計ができてからでいいと思います。
道具にしかすぎませんので。
(もちろんデータベース設計時にはフレームワークに寄せた設定やカラム名称などはあるけど、そこは物理名と論理名で後から調整して入れるので良いと思う)

投稿2022/09/25 11:59

編集2022/09/25 21:06
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2022/09/25 21:07

>低評価された方 無言で低評価できるような内容に思いませんが、 どこがどう低評価対象だと考えたのでしょうか? ぜひお聞かせください。できれば質問も回答もきちんと読んでから。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問