ここでいう経験値と能力とはリアルのことではありません
RPGとかSRPG(ゲーム)の世界の中の経験値と能力のことです
敵と戦って経験値を取得してLVが上がれば能力が上がって強くなるのです
LVが上がると、次にLVを上げるのに必要な経験値は増えますが
一般的にLVを上げるのに必要な経験値は(LV*X)の2乗みたいです
LVが上がる時に上がる能力値は一定みたいです
能力値=LV*Xですね
僕は簡単なGAMEしか作ったことがないですが
僕はLVが上がるのに必要な経験値はXのLV乗にしたいんです
例えば
LV1の場合、X*1.2
LV2の場合、X*1.44
LV3の場合、X*1.584
LVZの場合、X*(1.2のLV乗)
って具合に
能力値もLV*Xではなく
LVNの場合、Y*(1.1のLV乗)
にしたいんです
一般的なRPGやSRPGの場合
LVがある程度上がってくると
能力はそんなに伸びなくなりますが
そこでもグングン値を伸ばしたいんです
GAMEをしはじめの頃のLVが上がればスッゲー強くなる感覚を
常に表現したいんです
そこでX*(1.1のN乗)という概念を打ち立ててみました
ちなみにこの計算式を思いついたのは
魔界戦記ディスガイアというGAMEで
武器の価格が倍になると、強さが1.2倍になるー。すげー。と思い
パクッたんですがw
それは中盤までで
中盤以降は価格が(武器のランク*X)の2乗で
強さが武器のランク*Xっぽくなってきます
ですが僕は武器の価格も能力も
LVUPに必要な経験値もキャラクターの能力も
X*(1.1のN乗)なGAMEの構想を考えています
なら、どうでもいいことばかり考えないでプログラミングしれって?
そうですね
でもなかなか長続きしないんです。ごめんちゃい
2011年11月22日火曜日
2011年11月21日月曜日
8n+x? その2
8n+x?の記事は、何がやりたいかというと
LVが8上がるごとにclassが上がる処理なんですね
ただ1から9回上がるとclassが上がり
その後は8回上がるごとにclassを上げたいんです
で、ちょっと試行錯誤しながらやってみたら
スッキリになりました
Perlに翻訳してみました
HSPとPerlは剰余の挙動が違ってあんまりスッキリ書けませんでした。ガックリw
0~99を
0x+7,0x+8,1x+1,~,1x+8,2x+1~
とするのではなく
0x-1,0x+0,0x+1,~,0x+8,1x+1~
としてみました
Xn+YのYが-1~8になるのがポイントです
Yが0か1になるのはXが0の時だけなので
そこだけ条件分岐すればいいですね
Xn+YのYが-1と0の値があるのが考えてみた結果です
_input-2になっているのは
Xn+Yが(X+1)n+Yに桁あがりするのは8n+2だからです
0~7が0X+Yで8~15が1X+Yではなく
0~9が0X+Yで10~17が1X+Yなのです
(9-2)/8=0で(10-2)/8=1なんですよね
2引いた効果です
¥8+1になっているのは
Xn+YのYが0~7ではなく1~8にしたいからです
0~7に+1すると1~8になりますよね
この2点は出力を見ながら調整しました
Xn+(y1~y2)の数値を得たい時は
幾らか引いてnで割ればXが得られる
幾らか引いてnの剰余を得てそれに幾らかを足せば(y1~y2)の間の値を得られる
nで割ることと、nの剰余を計算することの2点を抑えれば
出力を見ながら調整すれば求められるのではないでしょうか
この記事と前の記事のスクリプトをPerlに翻訳するのが次のTODOです
Perlって有名だし前ver交換性がしっかりしているので
書籍に掲載する言語として優れている。と常々思っているので
LVが8上がるごとにclassが上がる処理なんですね
ただ1から9回上がるとclassが上がり
その後は8回上がるごとにclassを上げたいんです
で、ちょっと試行錯誤しながらやってみたら
スッキリになりました
#module #deffunc get_imi_oct_int2 int _input,var p1,var p2 p2=(_input-2)/8 p1=(_input-2)¥8+1//¥の半角が表示できなくて全角になってます return #global repeat 100 x=cnt:y1=0:y2=0 get_imi_oct_int2 x,y1,y2 logmes "n:"+x+" y1:"+y1+" y2:"+y2 loop stop |
Perlに翻訳してみました
use strict; use warnings; for my $x (0..99){ my ($y1,$y2)=&get_imi_oct_int2($x); print "\$x:$x \$y1:$y1 \$y2:$y2\n"; } sub get_imi_oct_int2{ my $x=$_[0]; my $y2=int(($x-2)/8); my $y1=$x-2; if ($y1>=0){ $y1=$y1%8+1; }else{ $y1++; } return ($y1,$y2); } |
HSPとPerlは剰余の挙動が違ってあんまりスッキリ書けませんでした。ガックリw
0~99を
0x+7,0x+8,1x+1,~,1x+8,2x+1~
とするのではなく
0x-1,0x+0,0x+1,~,0x+8,1x+1~
としてみました
Xn+YのYが-1~8になるのがポイントです
Yが0か1になるのはXが0の時だけなので
そこだけ条件分岐すればいいですね
Xn+YのYが-1と0の値があるのが考えてみた結果です
_input-2になっているのは
Xn+Yが(X+1)n+Yに桁あがりするのは8n+2だからです
0~7が0X+Yで8~15が1X+Yではなく
0~9が0X+Yで10~17が1X+Yなのです
(9-2)/8=0で(10-2)/8=1なんですよね
2引いた効果です
¥8+1になっているのは
Xn+YのYが0~7ではなく1~8にしたいからです
0~7に+1すると1~8になりますよね
この2点は出力を見ながら調整しました
Xn+(y1~y2)の数値を得たい時は
幾らか引いてnで割ればXが得られる
幾らか引いてnの剰余を得てそれに幾らかを足せば(y1~y2)の間の値を得られる
nで割ることと、nの剰余を計算することの2点を抑えれば
出力を見ながら調整すれば求められるのではないでしょうか
この記事と前の記事のスクリプトをPerlに翻訳するのが次のTODOです
Perlって有名だし前ver交換性がしっかりしているので
書籍に掲載する言語として優れている。と常々思っているので
8n+x?
こんなスクリプト(HSP)書いたんですけど
どう書けばスマートなのかがわからないw
自費出版に使う言語はPerlと決めているのでPerlに翻訳してみました
#ここ色変わらないw変だw
1+8進数みたいなかんじですけど
プログラム的には8*n+1+nみたいなかんじですけど
数学的にはどう表現するんだろうか?
8n 8n+1 8n+2みたいには表現できないint1が-(1+8n)みたいなかんじなので
8n+xみたいに表現するにはどうすべきなのだろうか?w
どう書けばスマートなのかがわからないw
while 1 if i<=9{ int1=i-1: int2=0:_break } if i<=17{ int1=i-9: int2=1:_break } if i<=25{ int1=i-17: int2=2:_break } if i<=33{ int1=i-25: int2=3:_break } if i<=41{ int1=i-33: int2=4:_break } if i<=49{ int1=i-41: int2=5:_break } if i<=57{ int1=i-49: int2=6:_break } if i<=65{ int1=i-57: int2=7:_break } if i<=73{ int1=i-65: int2=8:_break } if i<=81{ int1=i-73: int2=9:_break } if i<=89{ int1=i-81: int2=10:_break } if i<=97{ int1=i-89: int2=11:_break } if i<=99{ int1=i-97: int2=12:_break } await 1 wend |
自費出版に使う言語はPerlと決めているのでPerlに翻訳してみました
use strict; use warnings; for my $i (0..99){ my $int1=0; my $int2=0; while (1){ if ($i<=9) { $int1=$i-1; $int2=0; last; } if ($i<=17){ $int1=$i-9; $int2=1; last; } if ($i<=25){ $int1=$i-17; $int2=2; last; } if ($i<=33){ $int1=$i-25; $int2=3; last; } if ($i<=41){ $int1=$i-33; $int2=4; last; } if ($i<=49){ $int1=$i-41; $int2=5; last; } if ($i<=57){ $int1=$i-49; $int2=6; last; } if ($i<=65){ $int1=$i-57; $int2=7; last; } if ($i<=73){ $int1=$i-65; $int2=8; last; } if ($i<=81){ $int1=$i-73; $int2=9; last; } if ($i<=89){ $int1=$i-81; $int2=10; last; } if ($i<=97){ $int1=$i-89; $int2=11; last; } if ($i<=99){ $int1=$i-97; $int2=12; last; } last; } print "\$i:$i \$int1:$int1 \$int2:$int2\n"; } |
#ここ色変わらないw変だw
1+8進数みたいなかんじですけど
プログラム的には8*n+1+nみたいなかんじですけど
数学的にはどう表現するんだろうか?
8n 8n+1 8n+2みたいには表現できないint1が-(1+8n)みたいなかんじなので
8n+xみたいに表現するにはどうすべきなのだろうか?w
登録:
投稿 (Atom)