なんとな~くしあわせ?の日記

「そしてそれゆえ、知識そのものが力である」 (Nam et ipsa scientia potestas est.) 〜 フランシス・ベーコン

麻雀的オブジェクト指向

麻雀牌はそれぞれに属性があって役割がある。なんとなく書いたデータ型(未完)。

// /src/data.MahjongTile.java

package data;

import java.util.ArrayList;

@SuppressWarnings("serial")
public class MahjongTile extends ArrayList<MahjongTile>{

	/*
	 * コンストラクタ
	 */
	public MahjongTile(String KindOfTile, int NumberOfTile, int QuantityOfTile){
		setKindOfTile(KindOfTile);
		setNumberOfTile(NumberOfTile);
		setQuantityOfTile(QuantityOfTile);
	}

	/**
	 * 麻雀牌の種類を設定
	 * @param KindOfTile
	 */
	public void setKindOfTile(String KindOfTile) {
		this.kindOfTile = KindOfTile;
	}

	/**
	 * 麻雀牌の種類を取得
	 * @return kindOfTile
	 */
	public String getKindOfTile() {
		return kindOfTile;
	}

	/**
	 * 牌の数字を設定
	 * @param NumberOfTile
	 */
	public void setNumberOfTile(int NumberOfTile) {
		this.numberOfTile = NumberOfTile;
	}

	/**
	 * 牌の数字を取得
	 * @return numberOfTile
	 */
	public int getNumberOfTile() {
		return numberOfTile;
	}

	/**
	 * 牌の個数を取得
	 * @return quantityOfTile
	 */
	public int getQuantityOfTile() {
		return quantityOfTile;
	}

	/**
	 * 牌の個数を設定
	 * @param QuantityOfTile
	 */
	public void setQuantityOfTile(int QuantityOfTile) {
		this.quantityOfTile = QuantityOfTile;
	}

	/*
	 * 麻雀牌の種類
	 */
	private String kindOfTile;

	/*
	 * 牌の数字
	 */
	private int numberOfTile;

	/*
	 * 牌の個数(これは何個目か)
	 */
	private int quantityOfTile;
}
// /src/util.MahjongTileSort.java

package util;

import java.util.ArrayList;
import java.util.List;
import data.MahjongTile;

public class MahjongTileSort {

	/*
	 * 牌の初期化を行うコンストラクタ
	 */
	public MahjongTileSort(){
		setManzu();
		setPinzu();
		setSorzu();
		setKazehai();
		setSangen();
	}


	/**
	 * 麻雀牌の全てのデータ型を保持した配列を取得するメソッド
	 * @return mt
	 */
	public List<MahjongTile> getMahjongTile(){
		return mt;
	}

	/*
	 * 麻雀牌の全てのデータ型を保持した配列
	 *
	 */
	public List<MahjongTile> mt = new ArrayList<MahjongTile>();

	/*
	 * 萬子を9個×4セット作る
	 */
	private void setManzu(){
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 10; j++) {
				mt.add(new MahjongTile("Manzu", (int)j , (int)i));
			}
		}
	}

	/*
	 * 筒子を9個×4セット作る
	 */
	private void setPinzu(){
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 10; j++) {
				mt.add(new MahjongTile("Pinzu", (int)j , (int)i));
			}
		}
	}

	/*
	 * 索子を9個×4セット作る
	 */
	private void setSorzu(){
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 10; j++) {
				mt.add(new MahjongTile("Sorzu", (int)j , (int)i));
			}
		}
	}

	/*
	 * 風牌を4個×4セット作る
	 */
	private void setKazehai(){
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 5; j++) {
				//jの値によって右のように決める 1:東, 2:南, 3:西, 4:北
				switch (j){

				case 1 : mt.add(new MahjongTile("Ton", (int)j , (int)i));
					break;
				case 2 : mt.add(new MahjongTile("Nan", (int)j , (int)i));
					break;
				case 3 : mt.add(new MahjongTile("Sya", (int)j , (int)i));
					break;
				case 4 : mt.add(new MahjongTile("Peh", (int)j , (int)i));
					break;
				}
			}
		}
	}

	/*
	 * 三元牌を3個×4セット作る
	 */
	private void setSangen(){
		for (int i = 1; i < 5; i++) {
			for (int j = 1; j < 4; j++) {
				//jの値によって右のように決める 1:白, 2:發, 3:中
				switch (j){

				case 1 : mt.add(new MahjongTile("Haku", (int)j , (int)i));
					break;
				case 2 : mt.add(new MahjongTile("Hatsu", (int)j , (int)i));
					break;
				case 3 : mt.add(new MahjongTile("Tyun", (int)j , (int)i));
					break;
				}
			}
		}
	}

}


// /src/main.MainFrame.java

package main;

import java.util.ArrayList;
import java.util.List;

import data.MahjongTile;
import util.MahjongTileSort;

public class MainFrame {

	//麻雀牌の数は固定値として定義
	public static final int MAHJONG_TILES = 137;

	public static void main(String args[]){

		//牌を生成するクラスのコンストラクタ
		MahjongTileSort mts = new MahjongTileSort();

		//全ての麻雀牌を含んだリストを取り出す
		List<MahjongTile> mainMahjongTile = new ArrayList<MahjongTile>(mts.getMahjongTile());

		for ( int i = 0; i < MAHJONG_TILES -1 ; i++ ){
			System.out.println(mainMahjongTile.get(i).getKindOfTile());
			System.out.println(mainMahjongTile.get(i).getNumberOfTile());
			System.out.println(mainMahjongTile.get(i).getQuantityOfTile());
		}
	}
}


…これどうやって要素をとりだそう??( ・´ω・`)
追記:結局 Listの中にあるMahjongTileクラスをまるっとコピーして、それの中身を参照させた。HashMapを使って一意に取り出したいところ。よく考えたらListのindex自体が麻雀牌を一意に取り出せる番号になってるので大丈夫だった。