import std.stdio : writef; //標準出力writef()使用
import std.random : uniform; //乱数関数uniform()使用
import std.algorithm : swap; //変数入れ替え swap()使用
int main(){
Yama y = new Yama;
Player p = new Player;
y.sort(); // 牌山を並び替え
// 13牌山からツモる
for(int i=0;i<13;i++) {
p.tsumo(y.tsumo()); //山からツモってきた牌をプレイヤーがツモる
}
// 配牌を表示
for(int i=0;i<34;i++) {
for(int j=0;j<p.get(i);j++) {
mj_PutHaiName(i);
}
}
return 0;
}
// プレイヤークラス
class Player{
int haipai[34]; //全34種の牌をいくつづつ持ってるか格納する配列
this(){
haipai[]=0; //牌パイリセット 配列全てを0で初期化
}
void tsumo(int hai){haipai[hai]++;} //ツモ
void dahai(int hai){haipai[hai]--;} //打牌
int get(int n){return haipai[n];} //0~33の番号を与えるとその種類の牌の所持数を返す
} // D言語では;不要
// 牌山操作クラス
class Yama {
int yama[136];
int idx;
this(){ // コンストラクタ
for(int i=0;i<136;i++){yama[i] = i%34;}
idx=0;
}
void sort(){ // 牌のソート
// 牌を乱数使って適当に入れ替え
for(int j=0;j<1000;j++) { // 1000回もやらなくていいような気がするがw
for(int i=0;i<136;i++){
swap(yama[i],
yama[uniform(0,135)]); // i番目の山と0~135番目の山を交換
}
}
}
int tsumo(){return yama[idx++];}
void reset(){idx=0;}
int get(int i){return yama[i];}
}
// 指定された番号(0~33)の牌を表示する
void mj_PutHaiName(int i){
static auto hainame = "{1} {2} {3} {4} {5} {6} {7} {8} {9} [1] [2] [3] [4] [5] [6] [7] [8] [9] (1) (2) (3) (4) (5) (6) (7) (8) (9) [E] [S] [W] [N] { } {*} {+} ";
writef("%c",hainame[i*4+0]);
writef("%c",hainame[i*4+1]);
writef("%c",hainame[i*4+2]);
}
/*
実行結果1
{1}{2}{3}{3}{4}{9}[4](1)(3)(3)(5)(9){+}
実行結果2
{1}{9}[1][6][8](7)[E][S][W][W][N][N]{+}
実行結果3
{3}{3}{4}{5}{8}[4][5][7](7)(7)(8)(8)[E]
*/
インデント修正しました。
なんか先頭の半角スペースやTABが
うまく行かなかったので、
インデントは全角スペースです。