サイズが[512,512]の整数型の二次元配列を作って、陣営が8つだったら32ビットを4ビットずつ8個の領域に分割して 各領域の値を取り出した時に0で無ければ(陣営の陣地であれば)4ビットの最大数(15)をRND()関数の引数にした乱数をAND演算とシフト演算を駆使して代入しておいて 全ての領域で乱数の配置が終わったら 512×512の各ドットについて周囲8マス、もしくは上下左右の4マスと比較してみて、変化するドットの色を決めてやる感じにすればいいんじゃないです? メモリーに余裕があれば陣営や乱数の幅はもっと増やしたり出来そうですけど。