close
嗯嗯 下面這個是自己寫的小程式
目的是要擲骰啦 要有支援smarty才行跑喔
(因為其實我只是想知道一些smarty的coding細節)
目前的程式碼只支援 1~10 d 2/3/4/6/8/10/12/20/30/100
可以去掉最大的, 最小的, 算平均, 和顯示每顆骰的資料
(思考自己來架一個主機跑這些小程式的可行性...一整個懶啊)
btw, 雖然我覺得這個程式沒啥可以給人抄的
如果想抄 拜託留個回應說你抄到哪去了 或著改了什麼地方喔
當然 如果夠懶惰的人 也可以直接留言要我把這個程式碼寄到你信箱啦 XD
畢竟貼上來很多縮排都亂掉了 (只是我不保證處理速度)
最後 如果有什麼還想要的功能 或著想要我改寫哪些部份 麻煩跟我說一下囉
(當然 我接受簡單的修改 然後給你拿去用 XD 只是一樣要幫我寫你拿去哪囉)
Part I: 主程式 (dice.php)
-------------------------------------
<?php
/* initial smarty */
ini_set('include_path', ini_get('include_path').':./class');
require_once('Smarty/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = "templates/";
$smarty->compile_dir = "templates_c/";
foreach( $_POST as $key => $item ) $$key = $item;
/* end of smarty initial */
/* initial smarty */
ini_set('include_path', ini_get('include_path').':./class');
require_once('Smarty/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = "templates/";
$smarty->compile_dir = "templates_c/";
foreach( $_POST as $key => $item ) $$key = $item;
/* end of smarty initial */
/* main code */
$roll_result = 0;
if( isset($number_of_dice) && isset($size_of_dice) ) {
$roll_result = 0;
if( isset($number_of_dice) && isset($size_of_dice) ) {
$detail_report = array();
$total_number_dice = $number_of_dice;
$min_dice = 0;
$max_dice = 0;
$total_number_dice = $number_of_dice;
$min_dice = 0;
$max_dice = 0;
for($count=0; $count<$number_of_dice; $count++) {
$tmp = rand(1, $size_of_dice);
if( $min_dice==0 || $min_dice>$tmp ) {
$roll_result += $min_dice;
$min_dice = $tmp;
}
else if( $max_dice==0 || $max_dice<$tmp ) {
$roll_result += $max_dice;
$max_dice = $tmp;
}
else
$roll_result += $tmp;
array_push($detail_report, $tmp);
}
$tmp = rand(1, $size_of_dice);
if( $min_dice==0 || $min_dice>$tmp ) {
$roll_result += $min_dice;
$min_dice = $tmp;
}
else if( $max_dice==0 || $max_dice<$tmp ) {
$roll_result += $max_dice;
$max_dice = $tmp;
}
else
$roll_result += $tmp;
array_push($detail_report, $tmp);
}
if( isset($ignore_min) && $ignore_min=="on" ) {
$total_number_dice--;
$smarty->assign('min_dice', $min_dice);
$smarty->assign('ignore_min', 1);
}
else {
$roll_result += $min_dice;
$smarty->assign('ignore_min', 0);
}
$total_number_dice--;
$smarty->assign('min_dice', $min_dice);
$smarty->assign('ignore_min', 1);
}
else {
$roll_result += $min_dice;
$smarty->assign('ignore_min', 0);
}
if( isset($ignore_max) && $ignore_max=="on" ) {
$total_number_dice--;
$smarty->assign('max_dice', $max_dice);
$smarty->assign('ignore_max', 1);
}
else {
$roll_result += $max_dice;
$smarty->assign('ignore_max', 0);
}
$total_number_dice--;
$smarty->assign('max_dice', $max_dice);
$smarty->assign('ignore_max', 1);
}
else {
$roll_result += $max_dice;
$smarty->assign('ignore_max', 0);
}
if( isset($show_detail) && $show_detail=="on" ) {
$smarty->assign('show_detail', 1);
$smarty->assign('detail_report', $detail_report);
}
else
$smarty->assign('show_detail', 0);
$smarty->assign('show_detail', 1);
$smarty->assign('detail_report', $detail_report);
}
else
$smarty->assign('show_detail', 0);
if( isset($show_avg) && $show_avg=="on" ) {
$smarty->assign('show_avg', 1);
$smarty->assign('roll_avg', $roll_result/$total_number_dice);
}
else
$smarty->assign('show_avg', 0);
$smarty->assign('show_avg', 1);
$smarty->assign('roll_avg', $roll_result/$total_number_dice);
}
else
$smarty->assign('show_avg', 0);
$smarty->assign('number_of_dice', $number_of_dice);
$smarty->assign('size_of_dice', $size_of_dice);
$smarty->assign('exp_of_roll', ($size_of_dice+1)*($total_number_dice/2));
$smarty->assign('exp_of_avg', ($size_of_dice+1)/2);
}
$smarty->assign('size_of_dice', $size_of_dice);
$smarty->assign('exp_of_roll', ($size_of_dice+1)*($total_number_dice/2));
$smarty->assign('exp_of_avg', ($size_of_dice+1)/2);
}
$smarty->assign('roll_result', $roll_result);
/* end of main */
/* end of main */
$tmp = $smarty->fetch('dice.tpl.htm');
echo $tmp;
//$smarty->display('dice.tpl.htm');
?>
------------------------------------------------------
echo $tmp;
//$smarty->display('dice.tpl.htm');
?>
------------------------------------------------------
Part II Template (templates/dice.tpl.htm)
(ps. 不會smarty的人 這個檔案的名稱跟路徑不能改喔)
-------------------------------------
<html>
<head>
<title>smarty dice</title>
</head>
<head>
<title>smarty dice</title>
</head>
{literal}<script language=JavaScript>
function rollDice() {
if( document.Config.number_of_dice.value==1 ) {
if( document.Config.ignore_min.checked || document.Config.ignore_max.checked ) {
alert("Only one dice will be rolled, cannot ignore it.");
return false;
}
}
if( document.Config.number_of_dice.value==2 ) {
if( document.Config.ignore_min.checked && document.Config.ignore_max.checked ) {
alert("Only two dices will be rolled, cannot ignore them both.");
return false;
}
}
document.Config.submit();
}
</script>{/literal}
function rollDice() {
if( document.Config.number_of_dice.value==1 ) {
if( document.Config.ignore_min.checked || document.Config.ignore_max.checked ) {
alert("Only one dice will be rolled, cannot ignore it.");
return false;
}
}
if( document.Config.number_of_dice.value==2 ) {
if( document.Config.ignore_min.checked && document.Config.ignore_max.checked ) {
alert("Only two dices will be rolled, cannot ignore them both.");
return false;
}
}
document.Config.submit();
}
</script>{/literal}
<body><form method=post name=Config>
<select name=number_of_dice>
<option value=1{if $number_of_dice==1} selected{/if}>1</option>
<option value=2{if $number_of_dice==2} selected{/if}>2</option>
<option value=3{if $number_of_dice==3} selected{/if}>3</option>
<option value=4{if $number_of_dice==4} selected{/if}>4</option>
<option value=5{if $number_of_dice==5} selected{/if}>5</option>
<option value=6{if $number_of_dice==6} selected{/if}>6</option>
<option value=7{if $number_of_dice==7} selected{/if}>7</option>
<option value=8{if $number_of_dice==8} selected{/if}>8</option>
<option value=9{if $number_of_dice==9} selected{/if}>9</option>
<option value=10{if $number_of_dice==10} selected{/if}>10</option>
</select>
D
<select name=size_of_dice>
<option value=2{if $size_of_dice==2} selected{/if}>2</option>
<option value=3{if $size_of_dice==3} selected{/if}>3</option>
<option value=4{if $size_of_dice==4} selected{/if}>4</option>
<option value=6{if $size_of_dice==6} selected{/if}>6</option>
<option value=8{if $size_of_dice==8} selected{/if}>8</option>
<option value=10{if $size_of_dice==10} selected{/if}>10</option>
<option value=12{if $size_of_dice==12} selected{/if}>12</option>
<option value=20{if $size_of_dice==20} selected{/if}>20</option>
<option value=30{if $size_of_dice==30} selected{/if}>30</option>
<option value=100{if $size_of_dice==100} selected{/if}>100</option>
</select>
<input type=button name=roll_dice value=roll onClick="rollDice();">
<br><input type=checkbox name=ignore_min{if $ignore_min==1} checked{/if}> Ignore the minimum dice
<br><input type=checkbox name=ignore_max{if $ignore_max==1} checked{/if}> Ignore the maximum dice
<br><input type=checkbox name=show_detail{if $show_detail==1} checked{/if}> Show each dices
<br><input type=checkbox name=show_avg{if $show_avg==1} checked{/if}> Show the average
{strip} {if $roll_result==0} {* do nothing *}
{else} {* show the result *}
<br><br>
<b>Result: {$roll_result}</b>
<br>Exp(roll)={$exp_of_roll}, and Exp(avg)={$exp_of_avg}
{if $show_detail==1}
<br>(Detail:
{foreach from=$detail_report item=a_dice_value name=dice_detail}
{$a_dice_value}{if !$smarty.foreach.dice_detail.last},{/if}
{/foreach}
)
{/if}
{if $show_avg==1}<br>Avg: {$roll_avg}{/if}
{if $ignore_min==1}<br>Minimum Ignored: {$min_dice}{/if}
{if $ignore_max==1}<br>Maximum Ignored: {$max_dice}{/if}
{/if} {/strip}
</form></body>
<select name=number_of_dice>
<option value=1{if $number_of_dice==1} selected{/if}>1</option>
<option value=2{if $number_of_dice==2} selected{/if}>2</option>
<option value=3{if $number_of_dice==3} selected{/if}>3</option>
<option value=4{if $number_of_dice==4} selected{/if}>4</option>
<option value=5{if $number_of_dice==5} selected{/if}>5</option>
<option value=6{if $number_of_dice==6} selected{/if}>6</option>
<option value=7{if $number_of_dice==7} selected{/if}>7</option>
<option value=8{if $number_of_dice==8} selected{/if}>8</option>
<option value=9{if $number_of_dice==9} selected{/if}>9</option>
<option value=10{if $number_of_dice==10} selected{/if}>10</option>
</select>
D
<select name=size_of_dice>
<option value=2{if $size_of_dice==2} selected{/if}>2</option>
<option value=3{if $size_of_dice==3} selected{/if}>3</option>
<option value=4{if $size_of_dice==4} selected{/if}>4</option>
<option value=6{if $size_of_dice==6} selected{/if}>6</option>
<option value=8{if $size_of_dice==8} selected{/if}>8</option>
<option value=10{if $size_of_dice==10} selected{/if}>10</option>
<option value=12{if $size_of_dice==12} selected{/if}>12</option>
<option value=20{if $size_of_dice==20} selected{/if}>20</option>
<option value=30{if $size_of_dice==30} selected{/if}>30</option>
<option value=100{if $size_of_dice==100} selected{/if}>100</option>
</select>
<input type=button name=roll_dice value=roll onClick="rollDice();">
<br><input type=checkbox name=ignore_min{if $ignore_min==1} checked{/if}> Ignore the minimum dice
<br><input type=checkbox name=ignore_max{if $ignore_max==1} checked{/if}> Ignore the maximum dice
<br><input type=checkbox name=show_detail{if $show_detail==1} checked{/if}> Show each dices
<br><input type=checkbox name=show_avg{if $show_avg==1} checked{/if}> Show the average
{strip} {if $roll_result==0} {* do nothing *}
{else} {* show the result *}
<br><br>
<b>Result: {$roll_result}</b>
<br>Exp(roll)={$exp_of_roll}, and Exp(avg)={$exp_of_avg}
{if $show_detail==1}
<br>(Detail:
{foreach from=$detail_report item=a_dice_value name=dice_detail}
{$a_dice_value}{if !$smarty.foreach.dice_detail.last},{/if}
{/foreach}
)
{/if}
{if $show_avg==1}<br>Avg: {$roll_avg}{/if}
{if $ignore_min==1}<br>Minimum Ignored: {$min_dice}{/if}
{if $ignore_max==1}<br>Maximum Ignored: {$max_dice}{/if}
{/if} {/strip}
</form></body>
------------------------------------------------------
全站熱搜