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

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

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

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

Q&A

解決済

3回答

3233閲覧

ガチャの作成と確率表記の方法

ppphysiccc

総合スコア20

PHP

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

1グッド

0クリップ

投稿2017/05/16 12:49

非常に基本的な質問かもしれませんが、
確率表の計算方法について教えてほしいです。

プログラムの練習としてソーシャルゲームのガチャのような機能を作成しはじめました。
いろいろなサイトを参考にしつつ、見よう見まねで作成して実際にガチャを引くというところまではできました。
次の段階として確率の表記の処理を作成しています。

しかし、肝心の確率の計算方法が上手くあわずに困っています。
プログラムの問題というよりかは算数に近く、お恥ずかしいですが計算方法について教えていただきたく思います。

例えば
|ID|レアリティ|重み|
|1 | 1 |2000|
|2 | 1 |2000|
|3 | 1 |2000|
|4 | 1 |2000|
|5 | 2 |500|
|6 | 2 |500|
|7 | 2 |500|
|8 | 3 |200|
|9 | 3 |200|
|10| 4 |100|

というデータがあった場合にどういった計算を行えばよいのでしょうか?
何を算出したいかといいますと下記の通りです。
① レアリティごとに確率を出したい
レアリティ1:AA %
レアリティ2:BB %
レアリティ3:CC %
レアリティ4:DD %

② IDごとに確率を出したい
ID:1 aa %
ID:2 bb %
ID:3 cc %
...
ID:10 zz%

のような形です。
深く考えすぎているせいか完全に煮詰まってしまいました・・・。
ヒントまででも構いませんので、ご教示いただければと思います。
よろしくお願い致します。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答3

0

ベストアンサー

重みを全部足した数が総数と考えてみるとよいかと思います

上の例だと、重みの全部を足した数
2000+2000+2000+2000+500+500+500+200+200+100=10000
で、そのうちID=1のものが2000出るので、2000/10000=0.2
0.2*100で20%です。

後は端数処理の関係で全部足しても100に戻らない事があるので、そこを気をつければいいかと思います。

投稿2017/05/16 13:01

yoorwm

総合スコア1305

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

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

ppphysiccc

2017/05/16 13:25

なるほど、単純に全て足した値でそれぞれのIDの重みを割ってあげればいいんですね。 レアリティ毎に算出する場合は そのレアリティのみの重み(2000+2000+2000+2000) / 10000 * 100でしてあげればよいということでしょうか。 なんとも単純な事でした…。 すぐに取り掛かりたいところですが、手元に作業環境がないため明日再チャレンジしてみます。 回答ありがとうございました!
guest

0

「②IDごとに確率を出したい」の意味が分かりませんでしたが、
「①レアリティごとに確率を出したい」は、

勝率が25%として、

mt_rand(1, 100);

の結果が単純に25より上か下かだけで勝敗判断すれば良いと思いますがいかがでしょうか。

投稿2017/05/16 13:10

squirrel

総合スコア18

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

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

ppphysiccc

2017/05/16 13:29

質問事項がわかりにくくて申し訳ございませんでした。 ②IDごとに確率を出したい とはID=1はxx%の割合、ID=2はyy%の割合で出る という表記を行いたかったというものでした。 明日再チャレンジしてみます。回答ありがとうございました!
guest

0

こんな感じでどうしょうか?

  • 元データ

SQL

1create table tbl(id int,rare int,weight int); 2insert into tbl values(1,1,2000),(2,1,2000),(3,1,2000), 3(4,1,2000),(5,2,500),(6,2,500),(7,2,500),(8,3,200), 4(9,3,200),(10,4,100); 5
  • rare毎の比率

SQL

1select rare,sum(weight)/(select sum(weight) from tbl) as avg 2 from tbl group by rare; 3
  • id毎の比率

SQL

1select id,sum(weight)/(select sum(weight) from tbl) as avg 2from tbl group by id; 3

投稿2017/05/16 13:07

yambejp

総合スコア114775

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

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

ppphysiccc

2017/05/16 13:27

それぞれ重みを合計、全体の重みを合計を使って計算してやればよいという単純な答えでした。 色々悩んでしまっていたので目の前にあった答えを見逃していたようです… SQLでの回答ありがとうございました。大変参考になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問