HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0416
マスター素早さで攻撃順番を決定する5解決


マスター

リンク

2007/4/16(Mon) 20:25:58|NO.7512

はじめまして。マスターと申します。
早速ですが、質問させていただきます。
今、素早さによって攻撃順番が変わるようなターン制のRPGを作っているのですが、
素早さのソートで少し困っています。

例(数字は素早さの値です)

a=2 b=3 c=1
この素早さを大きい順にソートすると、3,2,1となります。
この3,2,1を変数名に直して、b,a,cとするにはどのようにすればよいのでしょうか。
分かりにくいかもしれませんが、よろしくお願いします。



この記事に返信する


りさ

リンク

2007/4/16(Mon) 20:53:49|NO.7514

こんばんわ、りさです。

>この3,2,1を変数名に直して、b,a,cとするには

一番分かり易いのは、変数名も一緒にソートすることだと思います。

説明だけでは分かり辛いと思いますので、サンプルを載せます。
(ばぶるソート)

#const NUM 4 sdim name, 8, NUM name = "Ryu ", "Lisa ", "Ken ", "Maria" sdim speed, NUM speed = 4, 2, 1, 3 repeat NUM-1 c = cnt repeat NUM-1-c if (speed(cnt) > speed(cnt+1)) { // 入れ替える tmpv = speed(cnt+1) tmpn = name(cnt+1) speed(cnt+1) = speed(cnt) name(cnt+1) = name(cnt) speed(cnt) = tmpv name(cnt) = tmpn } loop loop repeat NUM mes name(cnt) + " : " +speed(cnt) loop

名前(変数名?)にIDを付けていくのもアリだと思います。

他にも色々な方法(名前を扱う方法や、ソートの方法)がありますので、
wikiやユーザさんのHPなど調べてみてください。



GENKI

リンク

2007/4/16(Mon) 21:12:58|NO.7515




りさ

リンク

2007/4/16(Mon) 21:25:16|NO.7517

>参考資料どうぞ。

GENKIさん、すみません。
あたしがリンクするべきでしたm(_ _)m



KIMU

リンク

2007/4/17(Tue) 05:06:25|NO.7544

こんな方法もある(扱う個数が少ないと利点を生かせないけど・・・)

#const SPMIN 1 ;スピードの範囲(SPMIN〜SPMAX) #const SPMAX 3 randomize max=10 ;キャラの数 dim sortcnt,SPMAX+1 ;同じ速度に何キャラあるかの保存用 sortcntsiz=length(sortcnt) dim sort,max,sortcntsiz ;ソート結果が入るバッファ(左側の要素にキャラIDが入るので全て同じ速度だった時の為にmax分確保) dim char,max ;キャラのスピード設定用 button gosub "初期化",*sub_reset button gosub "ソート",*sub_sort gosub *sub_reset stop *sub_reset color 255,255,255:boxf:color:pos 100,50:mes "ソート前" repeat max:char(cnt)=rnd(SPMAX)+SPMIN:mes "キャラID["+cnt+"] スピード["+char(cnt)+"]":loop ;適当にスピード割り当て return *sub_sort memset sortcnt,0,sortcntsiz*4 ;前回のキャラ数データを初期化 repeat max speed=char(cnt) ;スピードを取り出す sort(sortcnt(speed),speed)=cnt ;sort(同じスピードのキャラ数,スピード)=キャラID sortcnt(speed)++ ;同じスピードのキャラ数を+1 loop pos 320,50:mes "ソート後" //ソート後の取り出し方 speed=SPMAX ;今回は大きい方が優先度高いので配列sortcntの終わりから逆方向に取り出してる repeat SPMAX repeat sortcnt(speed) ;同じスピードのキャラ数をループ回数に使用 mes "キャラID["+sort(cnt,speed)+"] スピード["+speed+"]" loop speed-- loop return

>この3,2,1を変数名に直して、b,a,cとするにはどのようにすればよいのでしょうか。
このサンプルで言うと キャラID[0] が a で キャラID[1] が b を指してる感じになります。

同じ速度を扱わないならもっと簡単になります

n="a","b","c" a=2 b=3 c=1 sort(a)=0 sort(b)=1 sort(c)=2 speed=3 ;最高速度 repeat speed mes n(sort(speed)) speed-- ;0でループが終わるので速度0のキャラが居ても無視される loop



マスター

リンク

2007/4/17(Tue) 15:39:02|NO.7552

皆さん、丁寧なアドバイスありがとうございます。
これを参考に、頑張りたいと思います。



ONION software Copyright 1997-2023(c) All rights reserved.