FrontPage

配列要素のシャッフル

一般的なList::Utilモジュールを利用する方法です。

関連ページ

ファイル名: shuffle.pl

#!/usr/local/bin/perl -w


# 実行コマンド perl shuffle.pl
use strict;                                                     # ソースを厳密にチェック                           #
use warnings;                                                   # 警告を出す                                       #
use List::Util;                                                 # リストに関するモジュール                         #
                                                                #                                                  #
my @races = ( 'Human', 'Amberite', 'Vampire', 'Half-Titan',     # 種族リスト                                       #
    'Hobbit', 'Elf', 'Half-Elf', 'Dwarf','Gnome', 'Yeek',       #                                                  #
    'Dark-Elf', 'Zombie', 'Draconian', 'Mindflayer', 'Imp',     #                                                  #
    'Beastman', 'Half-Orc', 'Half-Troll', 'High Elf','Android', #                                                  #
    'Half-Ogre', 'Cyclops', 'Klackon', 'Kobold', 'Nibelung',    #                                                  #
    'Golem', 'Skeleton', 'Spectre', 'Sprite', 'Half-Giant',     #                                                  #
    'Ent', 'Death Mold' );                                      #                                                  #
                                                                #                                                  #
my @classes = ( 'Warrier', 'Ranger', 'Warrier-Mage', 'Paladin', # 職業リスト                                       #
    'Blue Mage', 'Mindcrafter', 'Chaoss-Warrier', 'Mage',       #                                                  #
    'Priest', 'Monk', 'High Mage', 'Alchemist', 'Archer',       #                                                  #
    'Samurai', 'Axemaster', 'Bard', 'Demonologist', 'Druid',    #                                                  #
    'Geomancer', 'Haftedmaster', 'Loremaster', 'Mimic',         #                                                  #
    'Ninja', 'Tourist', 'Polearmmaster', 'Runecrafter',         #                                                  #
    'Sorceror', 'Summoner', 'Swordmaster', 'Symbiant',          #                                                  #
    'Thaumaturgist', 'Red Mage' );                              #                                                  #
                                                                #                                                  #
my $m = 0;                                                      # 種族カウント用                                   #
my $n = 0;                                                      # 職業カウント用                                   #
my @mssids;                                                     # 作業用                                           #
                                                                #                                                  #
                                                                # シャッフル対象の配列を用意する                   #
while( $m < 32 )                                                # ループ: 種族数 == 32 回分                        #
{                                                               #                                                  #
    while( $n < 32 )                                            # ループ: 職業数 == 32 回分                        #
    {                                                           #                                                  #
        unshift( @mssids, ("$races[$m] $classes[$n],") );       # 配列の先頭に要素追加(push関数でもよい)           #
        $n++;                                                   # 職業カウントアップ                               #
    }                                                           #                                                  #
                                                                #                                                  #
    $n -= 32;                                                   # 職業カウントリセット                             #
    $m++;                                                       # 種族カウントアップ                               #
}                                                               #                                                  #
                                                                #                                                  #
@mssids = List::Util::shuffle( @mssids );                       # 配列要素のシャッフル                             #
                                                                #                                                  #
open (DECK, ">./deck_o.txt");                                   # 書き込みでファイルを開く                         #
flock (DECK, 2);                                                # 排他ロック(LOCK_EX == 2)                         #
print (DECK @mssids);                                           # ファイルにシャッフル結果を書き込む               #
close DECK;                                                     # ファイルクローズ                                 #

参考までに(ファイル名: deck_o.txt)

Golem Archer,Half-Elf Polearmmaster,Half-Giant Druid,Dwarf Polearmmaster,Dwarf Monk,Half-Orc Haftedmaster,...,以下改行なしで続く

参考ページ

http://www.kt.rim.or.jp/~kbk/perl-5.8/list-util.html


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-02-08 (月) 02:08:16 (5189d)