HSPのソートを試す(HSP3.6非対応)

これを試そうと思っていたらHSP3.6の不具合にぶつかった。

これを試そうと思っていたらHSP3.6の不具合にぶつかった。

  • タグ:
  • タグはありません
#runtime "hsp3cl"
#cmpopt varinit 1
#include "XorShift.as"
;https://github.com/yosgspec/XorShift128-on-8languages/blob/master/HSP/XorShift.as

;乱数エンジン
new@XorShift xs

;トランプカードモジュール
suits@Card="△","▼","□","◆"
numbers@Card="A","2","3","4","5","6","7","8","9","10","J","Q","K"
#module Card __suit,__number
	#modcfunc crdSuit
		return __suit
	#modcfunc crdNumber
		return __number
	#modcfunc crdName
		return suits(__suit)+numbers(__number)

	#modinit int _suit,int _number
		__suit=_suit
		__number=_number
	return
#global

;トランプの束を用意
dimtype cards,5
foreach suits@Card: i=cnt
	foreach numbers@Card
		newmod cards,Card,i,cnt
	loop
loop

;トランプを表示
foreach cards
	mes crdName(cards.cnt),1
	if (cnt+1)\length(numbers@Card)=0: mes
	;カードのインデックス
	cardIndex.cnt=cnt
loop
mes

;トランプの束をシャッフル
xsShuffle xs,cardIndex,mangleIndex
foreach mangleIndex
	mangles.cnt=cards(mangleIndex.cnt)
loop
mes

;シャッフルしたトランプの束を表示
foreach mangles
	mes crdName(mangles.cnt),1
	if (cnt+1)\length(numbers@Card)=0: mes
loop
mes

;ソートの条件(並べ方)を定義
;数字降順>スート昇順とする
foreach mangles
	compares.cnt=crdNumber(mangles.cnt)*length(suits@Card)+length(suits@Card)-1-crdSuit(mangles.cnt)
loop

;トランプの束を決めた条件で並び替え
sortval compares,1
foreach compares
	sortget i,cnt
	sorted.cnt=mangles.i
loop

;並び変えたトランプの束を表示
foreach sorted
	mes crdName(sorted.cnt),1
	if (cnt+1)\length(suits@Card)=0: mes
loop
mes