ランダムに13牌の配牌を生成するjavaコード(牌重複チェックあり)

待機の時間暇なので書いてみました。
多分無駄な部分が多すぎてツッコミどころも満載。
(変数名・関数名は適当すぎるのでご容赦)

package test01;

import java.util.Arrays;
import java.util.Random;

public class Test01 {

	public static void main(String[] args) {
		Random rnd = new Random();
		int rnd1 = 0;
		
		int counter = 0;
		int paicheck = 0;
		int usepai = 0;
		int tehai[] = {137,137,137,137,137,137,137,137,137,137,137,137,137};
		
		while(counter<13) {
			rnd1 = rnd.nextInt(136);
			usepai = 0;
			for(paicheck=0; paicheck<13; paicheck++) {
				if(tehai[paicheck]==rnd1) {
					usepai = 1;
					break;
				}
			}
			if(usepai==0) {
				tehai[counter] = rnd1;
				counter++;
			}
		}
		
		Arrays.sort(tehai);

		counter = 0;
		int maisuu = 0;
		int manpinsou = 0;
		
		while(maisuu<13) {
			for(paicheck=0; paicheck<13; paicheck++) {
				if(tehai[paicheck]==counter) {
					if(maisuu==0) {
						System.out.print(tsumo(counter));
					} else {
						switch(manpinsou) {
						case 0:
							if(counter<36) {
								System.out.print(tsumo(counter));
							} else if(counter<72) {
								System.out.print("m" + tsumo(counter));
								manpinsou = 1;
							} else if(counter<108) {
								System.out.print("m" + tsumo(counter));
								manpinsou = 2;
							} else {
								System.out.print("m" + tsumo(counter));
								manpinsou = 3;
							}
							break;
						case 1:
							if(counter<72) {
								System.out.print(tsumo(counter));
							} else if(counter<108) {
								System.out.print("p" + tsumo(counter));
								manpinsou = 2;
							} else {
								System.out.print("p" + tsumo(counter));
								manpinsou = 3;
							}
							break;
						case 2:
							if(counter<108) {
								System.out.print(tsumo(counter));
							} else {
								System.out.print("s" + tsumo(counter));
								manpinsou = 3;
							}
							break;
						case 3:
							System.out.print(tsumo(counter));
							break;
						}
					}
					maisuu++;
					break;
				}
			}
			counter++;
		}
		
		switch(manpinsou) {
		case 0:
			System.out.print("m");
			break;
		case 1:
			System.out.print("p");
			break;
		case 2:
			System.out.print("s");
			break;
		case 3:
			break;
		}
				
	}

	static String tsumo(int var1) {
		String res1 = "";
		if(var1 < 36) {
			res1 = String.valueOf(((var1 - (var1 % 4)) / 4) + 1);
		} else if(var1 < 72) {
			res1 = String.valueOf(((var1 - 36 - (var1 % 4)) / 4) + 1);
		} else if(var1 < 108) {
			res1 = String.valueOf(((var1 - 72 - (var1 % 4)) / 4) + 1);
		} else {
			switch((var1 - 108 - (var1 % 4))/4) {
			case 0:
				res1 = "東";
				break;
			case 1:
				res1 = "南";
				break;
			case 2:
				res1 = "西";
				break;
			case 3:
				res1 = "北";
				break;
			case 4:
				res1 = "白";
				break;
			case 5:
				res1 = "發";
				break;
			case 6:
				res1 = "中";
				break;
			}
		}
		return res1;
	}
}

なんかスッキリしないなぁ。なんでだろう。
ちゃんと考えてないからか。

ちなみに

rnd1 = rnd.nextInt(136);

の部分の136を36に変更すると、萬子だけの配牌になってメンチン考えるコードに早変わり。

なんだこれ。

この記事が気に入ったらサポートをしてみませんか?