>백엔드 개발 >PHP 튜토리얼 >간단한 복권 테스트 프로토타입

간단한 복권 테스트 프로토타입

WBOY
WBOY원래의
2016-07-25 09:05:101103검색


비즈니스 요구 사항에 따라 간단한 프로토타입 테스트를 만들었습니다. 기능의 주요 요구 사항은 사용자 계정의 금액이 높을수록 상품을 받을 확률이 높아진다는 것입니다.
이 스크립트는 명령줄에서만 사용할 수 있습니다. 사용 예:
php Lucky.php 100

  1. /**
  2. * 복권 프로그램
  3. *
  4. * @File: Lucky.php
  5. * @Author: zzxworld
  6. * @Email: zzxworld@gmail.com
  7. * @Date: 2012-05 -09
  8. */
  9. $timer = 마이크로타임(true);
  10. /** 수동으로 구성된 매개변수 **/
  11. # 상금 규모
  12. $lucky_size = 1000;
  13. # 가장 높은 금액을 보유한 사용자의 당첨 확률은 상금 규모를 초과할 수 없습니다
  14. $star_user_rate = 100;
  15. # 1등 보너스
  16. $lucky_first = 100;
  17. # 2등 보너스
  18. $lucky_second = 50;
  19. # 3등 보너스
  20. $lucky_third = 25;
  21. # 최대 금액 일반상
  22. $lucky_normal_max = 10;
  23. # 일반상 최소금액
  24. $lucky_normal_min = 1;
  25. /**시스템에서 자동으로 값을 가져오는 매개변수 **/
  26. # 총상금
  27. $lucky_amount = 578 ;
  28. # 가장 많은 자산을 보유한 사용자의 계정 금액
  29. $star_user_amount = 134;
  30. # 현재 사용자 금액
  31. $user_amount = isset($argv[1] ) ? intval($argv [1]) : 0;
  32. if ($user_amount < 1) {
  33. die('명령어 뒤에 사용자 금액을 설정하세요.' . chr(10));
  34. }
  35. # 현재 사용자의 당첨 확률 계산
  36. $user_rate = $star_user_rate/$lucky_size/$star_user_amount*$user_amount;
  37. # 확률에 따라 보너스 수 계산 승리
  38. $lucky_num = intval($user_rate * $lucky_size);
  39. # 상금 풀 초기화
  40. $lucky_pool = array_fill(0, $lucky_size, 0);
  41. # 당첨 확률이 1보다 작으면 1로 조정
  42. if ( $lucky_num < 1) {
  43. $lucky_num = 1;
  44. }
  45. # 상품을 다음과 같이 정렬합니다. 상금
  46. $lucky_items = array('first', 'second', 'third' , 'normal');
  47. $lucky_num = 3;
  48. # 1등, 2등, 3등 상품 제거 총 상금에 따라
  49. if ($lucky_amount < $lucky_first) {
  50. $lucky_num -= 1;
  51. unset($lucky_items['first']);
  52. }
  53. if ($lucky_amount < $lucky_second) {
  54. $lucky_num -= 1;
  55. unset($lucky_items['second']);
  56. }
  57. if ($lucky_amount < ; $lucky_third) {
  58. $lucky_num -= 1;
  59. unset($lucky_items['third ']);
  60. }
  61. # 상금 풀에서 무작위로 상품을 생성
  62. (array_rand($lucky_pool, $lucky_num) as $key) {
  63. $name = $lucky_items[array_rand( $lucky_items)];
  64. if (!isset($create_lucky_first) && $name == 'first') {
  65. $lucky_pool[$key] = $lucky_first;
  66. $create_lucky_first = true;
  67. 계속;
  68. }
  69. if (!isset($create_lucky_second) && $name == '두 번째') {
  70. $lucky_pool[$key] = $lucky_second;
  71. $create_lucky_second = true ;
  72. 계속;
  73. }
  74. if (!isset($create_lucky_third) && $name == '세 번째') {
  75. $lucky_pool[$key] = $lucky_third;
  76. $create_lucky_third = true;
  77. 계속;
  78. }
  79. if ($name = = 'normal') {
  80. $lucky_pool[$key] = rand($lucky_normal_min, $lucky_normal_max)
  81. }
  82. }
  83. # 무승부
  84. $result = $lucky_pool[rand(0, $lucky_size)];
  85. echo '상금 규모:' . $lucky_size . chr(10);
  86. echo '총 보너스 금액:' . 10);
  87. echo '1등 상금:' . $lucky_first . chr(10);
  88. echo '2등 상금:' . $lucky_second . chr(10);
  89. echo '3등 상금: ' . $lucky_third . chr(10);
  90. echo '일반 상금:' . $lucky_normal_min . ' - ' . $lucky_normal_max .
  91. echo '스타 사용자를 위한 총 금액:' . $star_user_amount . chr(10);
  92. echo '스타 사용자의 승리 확률:' . ($star_user_rate/$ Lucky_size) . chr(10);
  93. echo ' 사용자의 총 자금:' . $user_amount . chr(10);
  94. echo '현재 사용자의 당첨 확률:' . $user_rate . chr(10);
  95. echo '현재 사용자 상금:';
  96. foreach($lucky_items as $name) {
  97. switch($name) {
  98. case 'first':
  99. echo '1등 상품(1),';
  100. $lucky_num--;
  101. break;
  102. 케이스 '두 번째':
  103. echo '2등 상(1),';
  104. $lucky_num--;
  105. break;
  106. 케이스 '세 번째':
  107. echo '3등 상품(1),';
  108. $lucky_num--;
  109. break;
  110. case 'normal':
  111. echo '보통 상품(' . $lucky_num . ')';
  112. break;
  113. }
  114. }
  115. echo chr(10);
  116. echo '현재 사용자 추첨 결과: ';
  117. if ($result == $lucky_first) {
  118. echo ' 1위' . $result . '위안';
  119. } elseif($result == $lucky_second) {
  120. echo '2위' . $result . = $lucky_third) {
  121. echo '3등' . $result . '위안';
  122. } elseif($result >= $lucky_normal_min && $result <= $lucky_normal_max) {
  123. echo 'Normal 상' . $result . '위안';
  124. } else {
  125. echo '상 없음' ;
  126. }
  127. echo chr(10);
  128. echo '실행 시간:' . (microtime(true) - $timer) . '초' .chr(10);
코드 복사
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.