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

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

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

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

Q&A

解決済

1回答

1383閲覧

php 連続ガチャ作成

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2018/04/23 08:25

前提・実現したいこと

phpを勉強中です。
PHPで20連続ガチャを作っています。4回目は必ずSR、10回目は必ずR以上、
20回目は必ずURが出る仕様.
ガチャ基本形コードを参考にシンプルに作成したい.

発生している問題

一応、システムは動くようになったのですが、講師の方からもっとシンプルなコードで出来ると言われました.

該当のソースコード

<?php $gacha = array( 'C' => '20',//数字は確率の整数($val) 'UC' => '40',//左側$rarity 'R' => '60',//10回目はR以上 'SR' => '80',//4回目は必ずSR 'UR' => '100',//20回目は必ずUR。 ); for($i = 1; $i <= 20; $i++){ $hit = rand(1,100); foreach ($gacha as $rarity => $val){//回転しすぎ。 if($i == 4){//4回目の時はSR出す,4回転中。 echo 'SR<br>' ; break; }elseif($i == 10){//10回目はUC以上 $hit = rand($gacha['UC'] + 1,100); if($hit <= $val){ echo $rarity.'<br>'; break; } }elseif($i == 20){//20回目はUR出す echo 'UR<br>'; break; }else{ echo $rarity.'<br>'; break; } } } ### 試したこと 講師の方から $hit = rand(1,100); foreach ($gacha as $rarity => $val){ if($hit <= $val){ echo $rarity; break; } }//ガチャ基本形コードのどこかをelseに入れること,if/elseif()内をもう一度見直してとヒント頂いたのですが,よく分かりませんでした.

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

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

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

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

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

arasi

2018/04/23 08:50

分かりませんと講師に行ってください。
guest

回答1

0

ベストアンサー

でる種類と確率がわからないのでなんといえません。
簡単な処理は全部を一覧にした配列をつくりランダムにソートしておいて、
先頭から20個とりだすとよいような気がします

sample

確率が適当でいいなら、毎回ランダムでデータをとって
こんな感じでいけますね

PHP

1$data=array_map(function($x){ 2 switch($x){ 3 case 4: 4 $r=9500; 5 break; 6 case 20: 7 $r=9980; 8 break; 9 case 10: 10 $r=mt_rand(9000,10000); 11 break; 12 default: 13 $r=mt_rand(1,10000); 14 break; 15 } 16 if($r<7000) return "C"; 17 if($r<9000) return "UC"; 18 if($r<9500) return "R"; 19 if($r<9980) return "SR"; 20 return "UR"; 21},range(1,20)); 22print_r($data);

※微調整しました

投稿2018/04/23 08:55

編集2018/04/23 10:14
yambejp

総合スコア114747

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

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

退会済みユーザー

退会済みユーザー

2018/04/23 09:40

出る種類はC・UC・R・SR・URです。 確率は自由に決めても良いです。 お手数ですが、サンプルのコードをどなたか、宜しくお願いします。
yambejp

2018/04/23 10:13

sampleつけました
arasi

2018/04/23 23:38

昨日までif文しか使えないような人がいきなりswitch文とかarray_map使い出したらおかしい気がするがな だからこういう時は講師に聞くのがいいと思う。なぜこんなの書けたのかと問題にならないといいがな
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問