小粒プログラミング

#08 手牌を並べ替えて表示する

Javascriptで遊ぶ麻雀小粒プログラミング
シャッフルされた牌山から取った手牌は見た目は並べられていない状態です。今回のお題は、手牌用の配列(tehai)に格納された手牌をマンズ→ピンズ→ソウズ→字牌の順に表示する処理を紹介します。




プログラムの解説と実行

第7回目のお題の配牌を配列に格納するで格納した配牌をマンズ→ピンズ→ソウズ→字牌の順に表示する処理を紹介します。手牌(tehai)を順番に表示させるだけでソートする必要はありませんが、赤ドラがある場合は処理が少し複雑になります。

配列のサイズは0~37まで。各番地に牌を割り当てます。

mpsz形式の牌記号割当一覧

赤ドラカウント用変数を使って赤ドラがある場合の手牌構成のズレを修正します。

赤ドラtehai内の番地格納する変数名
赤五萬0red5manCount
赤五筒10red5pinCount
赤五索20red5souCount

並べ替える前の手牌
並べ替えた手牌1【赤ドラ未処理】
並べ替えた手牌2【赤ドラ処理済み】



JavaScriptソースコード

本記事で紹介したサンプルプログラムをダウンロードできます。

ダウンロードをする前にお読みください

  • サイトで紹介している記事の内容や公開しているプログラムの動作は100%保障するものではありません。
  • 当プログラム使用による如何なる不具合やトラブル、損害の責任も負いかねます。
  • 当プログラムは断り無く内容が変わることがあります。
  • 当プログラムを別サイトで配布することは禁止します。
  • サポートはいたしません。
  • 自己責任にてご利用くださいませ。

以上をご確認の上、プログラムのダウンロードをお願いいたします。

サンプルプログラムのソースコード

ソースコードは折りたたんであります。[+]を押すと、折りたたまれたソースコードが開きます。[-]を押すと、コードは折りたたまれます。

+ program_008.jsを開く

//============================================================================
//牌の配列:JSON形式
//============================================================================
var paiYama = [
	{"No":0,"paiName":"一萬","paiCode":"1m","paiNo":1},
	{"No":1,"paiName":"一萬","paiCode":"1m","paiNo":1},
	{"No":2,"paiName":"一萬","paiCode":"1m","paiNo":1},
	{"No":3,"paiName":"一萬","paiCode":"1m","paiNo":1},
	{"No":4,"paiName":"二萬","paiCode":"2m","paiNo":2},
	{"No":5,"paiName":"二萬","paiCode":"2m","paiNo":2},
	{"No":6,"paiName":"二萬","paiCode":"2m","paiNo":2},
	{"No":7,"paiName":"二萬","paiCode":"2m","paiNo":2},
	{"No":8,"paiName":"三萬","paiCode":"3m","paiNo":3},
	{"No":9,"paiName":"三萬","paiCode":"3m","paiNo":3},
	{"No":10,"paiName":"三萬","paiCode":"3m","paiNo":3},
	{"No":11,"paiName":"三萬","paiCode":"3m","paiNo":3},
	{"No":12,"paiName":"四萬","paiCode":"4m","paiNo":4},
	{"No":13,"paiName":"四萬","paiCode":"4m","paiNo":4},
	{"No":14,"paiName":"四萬","paiCode":"4m","paiNo":4},
	{"No":15,"paiName":"四萬","paiCode":"4m","paiNo":4},
	{"No":16,"paiName":"赤五萬","paiCode":"0m","paiNo":0},
	{"No":17,"paiName":"五萬","paiCode":"5m","paiNo":5},
	{"No":18,"paiName":"五萬","paiCode":"5m","paiNo":5},
	{"No":19,"paiName":"五萬","paiCode":"5m","paiNo":5},
	{"No":20,"paiName":"六萬","paiCode":"6m","paiNo":6},
	{"No":21,"paiName":"六萬","paiCode":"6m","paiNo":6},
	{"No":22,"paiName":"六萬","paiCode":"6m","paiNo":6},
	{"No":23,"paiName":"六萬","paiCode":"6m","paiNo":6},
	{"No":24,"paiName":"七萬","paiCode":"7m","paiNo":7},
	{"No":25,"paiName":"七萬","paiCode":"7m","paiNo":7},
	{"No":26,"paiName":"七萬","paiCode":"7m","paiNo":7},
	{"No":27,"paiName":"七萬","paiCode":"7m","paiNo":7},
	{"No":28,"paiName":"八萬","paiCode":"8m","paiNo":8},
	{"No":29,"paiName":"八萬","paiCode":"8m","paiNo":8},
	{"No":30,"paiName":"八萬","paiCode":"8m","paiNo":8},
	{"No":31,"paiName":"八萬","paiCode":"8m","paiNo":8},
	{"No":32,"paiName":"九萬","paiCode":"9m","paiNo":9},
	{"No":33,"paiName":"九萬","paiCode":"9m","paiNo":9},
	{"No":34,"paiName":"九萬","paiCode":"9m","paiNo":9},
	{"No":35,"paiName":"九萬","paiCode":"9m","paiNo":9},

	{"No":36,"paiName":"一筒","paiCode":"1p","paiNo":11},
	{"No":37,"paiName":"一筒","paiCode":"1p","paiNo":11},
	{"No":38,"paiName":"一筒","paiCode":"1p","paiNo":11},
	{"No":39,"paiName":"一筒","paiCode":"1p","paiNo":11},
	{"No":40,"paiName":"二筒","paiCode":"2p","paiNo":12},
	{"No":41,"paiName":"二筒","paiCode":"2p","paiNo":12},
	{"No":42,"paiName":"二筒","paiCode":"2p","paiNo":12},
	{"No":43,"paiName":"二筒","paiCode":"2p","paiNo":12},
	{"No":44,"paiName":"三筒","paiCode":"3p","paiNo":13},
	{"No":45,"paiName":"三筒","paiCode":"3p","paiNo":13},
	{"No":46,"paiName":"三筒","paiCode":"3p","paiNo":13},
	{"No":47,"paiName":"三筒","paiCode":"3p","paiNo":13},
	{"No":48,"paiName":"四筒","paiCode":"4p","paiNo":14},
	{"No":49,"paiName":"四筒","paiCode":"4p","paiNo":14},
	{"No":50,"paiName":"四筒","paiCode":"4p","paiNo":14},
	{"No":51,"paiName":"四筒","paiCode":"4p","paiNo":14},
	{"No":52,"paiName":"赤五筒","paiCode":"0p","paiNo":10},
	{"No":53,"paiName":"五筒","paiCode":"5p","paiNo":15},
	{"No":54,"paiName":"五筒","paiCode":"5p","paiNo":15},
	{"No":55,"paiName":"五筒","paiCode":"5p","paiNo":15},
	{"No":56,"paiName":"六筒","paiCode":"6p","paiNo":16},
	{"No":57,"paiName":"六筒","paiCode":"6p","paiNo":16},
	{"No":58,"paiName":"六筒","paiCode":"6p","paiNo":16},
	{"No":59,"paiName":"六筒","paiCode":"6p","paiNo":16},
	{"No":60,"paiName":"七筒","paiCode":"7p","paiNo":17},
	{"No":61,"paiName":"七筒","paiCode":"7p","paiNo":17},
	{"No":62,"paiName":"七筒","paiCode":"7p","paiNo":17},
	{"No":63,"paiName":"七筒","paiCode":"7p","paiNo":17},
	{"No":64,"paiName":"八筒","paiCode":"8p","paiNo":18},
	{"No":65,"paiName":"八筒","paiCode":"8p","paiNo":18},
	{"No":66,"paiName":"八筒","paiCode":"8p","paiNo":18},
	{"No":67,"paiName":"八筒","paiCode":"8p","paiNo":18},
	{"No":68,"paiName":"九筒","paiCode":"9p","paiNo":19},
	{"No":69,"paiName":"九筒","paiCode":"9p","paiNo":19},
	{"No":70,"paiName":"九筒","paiCode":"9p","paiNo":19},
	{"No":71,"paiName":"九筒","paiCode":"9p","paiNo":19},

	{"No":72,"paiName":"一索","paiCode":"1s","paiNo":21},
	{"No":73,"paiName":"一索","paiCode":"1s","paiNo":21},
	{"No":74,"paiName":"一索","paiCode":"1s","paiNo":21},
	{"No":75,"paiName":"一索","paiCode":"1s","paiNo":21},
	{"No":76,"paiName":"二索","paiCode":"2s","paiNo":22},
	{"No":77,"paiName":"二索","paiCode":"2s","paiNo":22},
	{"No":78,"paiName":"二索","paiCode":"2s","paiNo":22},
	{"No":79,"paiName":"二索","paiCode":"2s","paiNo":22},
	{"No":80,"paiName":"三索","paiCode":"3s","paiNo":23},
	{"No":81,"paiName":"三索","paiCode":"3s","paiNo":23},
	{"No":82,"paiName":"三索","paiCode":"3s","paiNo":23},
	{"No":83,"paiName":"三索","paiCode":"3s","paiNo":23},
	{"No":84,"paiName":"四索","paiCode":"4s","paiNo":24},
	{"No":85,"paiName":"四索","paiCode":"4s","paiNo":24},
	{"No":86,"paiName":"四索","paiCode":"4s","paiNo":24},
	{"No":87,"paiName":"四索","paiCode":"4s","paiNo":24},
	{"No":88,"paiName":"赤五索","paiCode":"0s","paiNo":20},
	{"No":89,"paiName":"五索","paiCode":"5s","paiNo":25},
	{"No":90,"paiName":"五索","paiCode":"5s","paiNo":25},
	{"No":91,"paiName":"五索","paiCode":"5s","paiNo":25},
	{"No":92,"paiName":"六索","paiCode":"6s","paiNo":26},
	{"No":93,"paiName":"六索","paiCode":"6s","paiNo":26},
	{"No":94,"paiName":"六索","paiCode":"6s","paiNo":26},
	{"No":95,"paiName":"六索","paiCode":"6s","paiNo":26},
	{"No":96,"paiName":"七索","paiCode":"7s","paiNo":27},
	{"No":97,"paiName":"七索","paiCode":"7s","paiNo":27},
	{"No":98,"paiName":"七索","paiCode":"7s","paiNo":27},
	{"No":99,"paiName":"七索","paiCode":"7s","paiNo":27},
	{"No":100,"paiName":"八索","paiCode":"8s","paiNo":28},
	{"No":101,"paiName":"八索","paiCode":"8s","paiNo":28},
	{"No":102,"paiName":"八索","paiCode":"8s","paiNo":28},
	{"No":103,"paiName":"八索","paiCode":"8s","paiNo":28},
	{"No":104,"paiName":"九索","paiCode":"9s","paiNo":29},
	{"No":105,"paiName":"九索","paiCode":"9s","paiNo":29},
	{"No":106,"paiName":"九索","paiCode":"9s","paiNo":29},
	{"No":107,"paiName":"九索","paiCode":"9s","paiNo":29},

	{"No":108,"paiName":"東","paiCode":"1z","paiNo":31},
	{"No":109,"paiName":"東","paiCode":"1z","paiNo":31},
	{"No":110,"paiName":"東","paiCode":"1z","paiNo":31},
	{"No":111,"paiName":"東","paiCode":"1z","paiNo":31},
	{"No":112,"paiName":"南","paiCode":"2z","paiNo":32},
	{"No":113,"paiName":"南","paiCode":"2z","paiNo":32},
	{"No":114,"paiName":"南","paiCode":"2z","paiNo":32},
	{"No":115,"paiName":"南","paiCode":"2z","paiNo":32},
	{"No":116,"paiName":"西","paiCode":"3z","paiNo":33},
	{"No":117,"paiName":"西","paiCode":"3z","paiNo":33},
	{"No":118,"paiName":"西","paiCode":"3z","paiNo":33},
	{"No":119,"paiName":"西","paiCode":"3z","paiNo":33},
	{"No":120,"paiName":"北","paiCode":"4z","paiNo":34},
	{"No":121,"paiName":"北","paiCode":"4z","paiNo":34},
	{"No":122,"paiName":"北","paiCode":"4z","paiNo":34},
	{"No":123,"paiName":"北","paiCode":"4z","paiNo":34},
	{"No":124,"paiName":"白","paiCode":"5z","paiNo":35},
	{"No":125,"paiName":"白","paiCode":"5z","paiNo":35},
	{"No":126,"paiName":"白","paiCode":"5z","paiNo":35},
	{"No":127,"paiName":"白","paiCode":"5z","paiNo":35},
	{"No":128,"paiName":"發","paiCode":"6z","paiNo":36},
	{"No":129,"paiName":"發","paiCode":"6z","paiNo":36},
	{"No":130,"paiName":"發","paiCode":"6z","paiNo":36},
	{"No":131,"paiName":"發","paiCode":"6z","paiNo":36},
	{"No":132,"paiName":"中","paiCode":"7z","paiNo":37},
	{"No":133,"paiName":"中","paiCode":"7z","paiNo":37},
	{"No":134,"paiName":"中","paiCode":"7z","paiNo":37},
	{"No":135,"paiName":"中","paiCode":"7z","paiNo":37}
];

var paiType = [
	{"No":0,"paiName":"赤五萬","cssSprite":"man0"},
	{"No":1,"paiName":"一萬","cssSprite":"man1"},
	{"No":2,"paiName":"二萬","cssSprite":"man2"},
	{"No":3,"paiName":"三萬","cssSprite":"man3"},
	{"No":4,"paiName":"四萬","cssSprite":"man4"},
	{"No":5,"paiName":"五萬","cssSprite":"man5"},
	{"No":6,"paiName":"六萬","cssSprite":"man6"},
	{"No":7,"paiName":"七萬","cssSprite":"man7"},
	{"No":8,"paiName":"八萬","cssSprite":"man8"},
	{"No":9,"paiName":"九萬","cssSprite":"man9"},

	{"No":10,"paiName":"赤五筒","cssSprite":"pin0"},
	{"No":11,"paiName":"一筒","cssSprite":"pin1"},
	{"No":12,"paiName":"二筒","cssSprite":"pin2"},
	{"No":13,"paiName":"三筒","cssSprite":"pin3"},
	{"No":14,"paiName":"四筒","cssSprite":"pin4"},
	{"No":15,"paiName":"五筒","cssSprite":"pin5"},
	{"No":16,"paiName":"六筒","cssSprite":"pin6"},
	{"No":17,"paiName":"七筒","cssSprite":"pin7"},
	{"No":18,"paiName":"八筒","cssSprite":"pin8"},
	{"No":19,"paiName":"九筒","cssSprite":"pin9"},

	{"No":20,"paiName":"赤五索","cssSprite":"sou0"},
	{"No":21,"paiName":"一索","cssSprite":"sou1"},
	{"No":22,"paiName":"二索","cssSprite":"sou2"},
	{"No":23,"paiName":"三索","cssSprite":"sou3"},
	{"No":24,"paiName":"四索","cssSprite":"sou4"},
	{"No":25,"paiName":"五索","cssSprite":"sou5"},
	{"No":26,"paiName":"六索","cssSprite":"sou6"},
	{"No":27,"paiName":"七索","cssSprite":"sou7"},
	{"No":28,"paiName":"八索","cssSprite":"sou8"},
	{"No":29,"paiName":"九索","cssSprite":"sou9"},

	{"No":30,"paiName":"裏","cssSprite":"ji0"},
	{"No":31,"paiName":"東","cssSprite":"ji1"},
	{"No":32,"paiName":"南","cssSprite":"ji2"},
	{"No":33,"paiName":"西","cssSprite":"ji3"},
	{"No":34,"paiName":"北","cssSprite":"ji4"},
	{"No":35,"paiName":"白","cssSprite":"ji5"},
	{"No":36,"paiName":"發","cssSprite":"ji6"},
	{"No":37,"paiName":"中","cssSprite":"ji7"}
];
//グローバル変数==============================================================
var yama = new Array(135);//牌山の配列:136牌
var tehai = new Array(37);//手牌の配列:37種
//tehai = [0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0];
var red5manCount = 0;//赤5マンの数
var red5pinCount = 0;//赤5ピンの数
var red5souCount = 0;//赤5ソウの数
//============================================================================
//元になる牌山を生成する関数
function makePaiYama(){
	var i;
	for(i=0;i<136;i++){
		yama[i] = paiYama[i].paiNo;
	}
}
//============================================================================
//牌山をシャッフルする関数【Mersenne Twister in JavaScriptを利用】
function shufflePaiYama(){
    var mt = new MersenneTwister();//Mersenne­Twister オブジェクトの初期化
	var i,j,k;
	for(i=135;i>0;i--){
    	j = mt.nextInt(0, 135);  // 0 以上 135 未満の乱数(整数)を発生させる
        k = yama[i];//変数kに退避
		yama[i] = yama[j];//乱数で発生した番地の牌を代入する
		yama[j] = k;//変数Kから戻す
	}
}
//============================================================================
//牌山から手牌配列に格納する関数
function inputTehaiStore(){
	tehai = [0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0];//初期化
	var i;
	for(i=0;i<13;i++){
		tehai[yama[i]] ++;
	}
}
//============================================================================
//赤ドラの有無をチェックしてカウントする処理【赤ドラのカウントを事前にしなかった場合に使う】
//各赤ドラはtehai配列の0,10,20番地にあるものとする
function checkReddora(){
	//グローバル変数の初期化
	red5manCount = 0;//赤5マンの数
	red5pinCount = 0;//赤5ピンの数
	red5souCount = 0;//赤5ソウの数

	//赤五萬の有無をチェックしてカウントする
	if(tehai[0]){
		red5manCount += tehai[0];//赤五萬の牌数を追加
	}
	//赤五筒の有無をチェックしてカウントする
	if(tehai[10]){
		red5pinCount += tehai[10];//赤五筒の牌数を追加
	}
	//赤五索の有無をチェックしてカウントする
	if(tehai[20]){
		red5souCount += tehai[20];//赤五索の牌数を追加
	}
}
//============================================================================
//赤ドラの有無をチェックして配列操作する処理【シャンテン数やテンパイチェックを実行する前に使う】
//tehai配列内を0→5、10→15、20→25
function moveReddora(){
	//赤五萬の有無をチェックして番地を移動させる処理
	if(tehai[0]&&red5manCount){
		tehai[5]+=tehai[0];//赤五萬の牌数を五萬の番地5に追加
		tehai[0]=0;//番地0を初期化
	}
	//赤五筒の有無をチェックして番地を移動させる処理
	if(tehai[10]&&red5pinCount){
		tehai[15]+=tehai[10];//赤五筒の牌数を五筒の番地15に追加
		tehai[10]=0;//番地10を初期化
	}
	//赤五索の有無をチェックして番地を移動させる処理
	if(tehai[20]&&red5souCount){
		tehai[25]+=tehai[20];//赤五索の牌数を五索の番地25に追加
		tehai[20]= 0;//番地20を初期化
	}
}
//============================================================================
//赤ドラの有無をチェックして配列内の元の番地に戻す処理
//tehai配列内を5→0、15→10、25→20
function removeReddora(){
	//赤五萬の有無をチェックして番地を移動:5→0
	if(!tehai[0]&&tehai[5]&&red5manCount){
		tehai[5]--;
		tehai[0]++;
	}
	//赤五筒の有無をチェックして番地を移動:15→10
	if(!tehai[10]&&tehai[15]&&red5pinCount){
		tehai[15]--;
		tehai[10]++;
	}
	//赤五索の有無をチェックして番地を移動:25→20
	if(!tehai[20]&&tehai[25]&&red5souCount){
		tehai[25]--;
		tehai[20]++;
	}
}//============================================================================
$("#PaiMakeBtn").click(function() {
	makePaiYama();//牌山を生成する関数を呼び出す
	shufflePaiYama();//牌山をシャッフルする関数を呼び出す
	inputTehaiStore();//手牌を配列(tehai)に格納する関数を呼び出す

	//取り出した牌を表示する
	(function (){
		var i;
		var paiga="";
		$("#paiTehai").empty();
		for(i=0;i<13;i++){
			paiga = "<span class=\"" + paiType[yama[i]].cssSprite + "\"></span>";//cssスプライトの牌画を配置
			$("#paiTehai").append(paiga);
		}
	})();

	checkReddora();//赤ドラチェックする関数を呼び出す

	//手牌表示処理1
	(function (){
		var i,k,kazu;
		var paiga="";
		$("#paiTehaiSort1").empty();
		for(i=0;i<38;i++){
			if(tehai[i]){
				kazu = tehai[i];
				for(k=0;k<kazu;k++){
					paiga = "<span class=\"" + paiType[i].cssSprite + "\"></span>";//cssスプライトの牌画を配置
					$("#paiTehaiSort1").append(paiga);
				}
			}
		}
	})();

	//手牌表示処理2
	OutputSortTehai("#paiTehaiSort2");//牌画を師弟の場所に出力する関数の呼び出し
	//OutputSortTehai_old()//旧版参考用です。運用時は「OutputSortTehai(id_name)」を使用してください。
});
//=======================================================================================
//赤ドラの位置を修正して手牌を並べ替えて表示させる関数2015/10/244追加
//グローバル変数tehia配列を操作する。牌画はcssスプライトで出力する
//引数id_nameは牌画を出力する場所。cssのid名を指定する
//=======================================================================================
function OutputSortTehai(id_name){
	var i,k,kazu;
	var paiga="";
	var OutputPlace = $(id_name);//jQueryオブジェクトを変数にキャッシュ

	OutputPlace.empty();
	removeReddora();//赤ドラを元の場所に戻す関数を呼び出す【0,10,20へ移動】
	for(i=1;i<38;i++){
		//赤五萬の牌画を出力する
		if(i==5&&red5manCount&&tehai[0]){
			paiga = "<span class=\"" + paiType[0].cssSprite + "\"></span>";//cssスプライトの牌画を配置
			OutputPlace.append(paiga);
		}

		//赤五筒の牌画を出力する
		if(i==15&&red5pinCount&&tehai[10]){
			paiga = "<span class=\"" + paiType[10].cssSprite + "\"></span>";//cssスプライトの牌画を配置
			OutputPlace.append(paiga);
		}

		//赤五索の牌画を出力する
		if(i==25&&red5souCount&&tehai[20]){
			paiga = "<span class=\"" + paiType[20].cssSprite + "\"></span>";//cssスプライトの牌画を配置
			OutputPlace.append(paiga);
		}

		//赤ドラ以外の牌画を出力する
		if(tehai[i]){
			if(i%10===0){continue;}
			kazu = tehai[i];
			for(k=0;k<kazu;k++){
				paiga = "<span class=\"" + paiType[i].cssSprite + "\"></span>";//cssスプライトの牌画を配置
				OutputPlace.append(paiga);
			}
		}
	}
}
//=======================================================================================
//手牌表示処理2【旧版・参考用】
//=======================================================================================
function OutputSortTehai_old(){
	//手牌表示処理2
	moveReddora();//赤ドラを移動させる関数を呼び出す
	(function (){
		var i,k,kazu;
		var paiga="";
		$("#paiTehaiSort2").empty();
		for(i=0;i<38;i++){
			//赤五萬の位置を修正する
			if(i==5 && red5manCount==1){
				tehai[5]-=1;
				paiga = "<span class=\"" + paiType[0].cssSprite + "\"></span>";//cssスプライトの牌画を配置
				$("#paiTehaiSort2").append(paiga);
			}

			//赤五筒の位置を修正する
			if(i==15 && red5pinCount==1){
				tehai[15]-=1;
				paiga = "<span class=\"" + paiType[10].cssSprite + "\"></span>";//cssスプライトの牌画を配置
				$("#paiTehaiSort2").append(paiga);
			}

			//赤五索の位置を修正する
			if(i==25 && red5souCount==1){
				tehai[25]-=1;
				paiga = "<span class=\"" + paiType[20].cssSprite + "\"></span>";//cssスプライトの牌画を配置
				$("#paiTehaiSort2").append(paiga);
			}

			//通常の手牌表示処理
			if(tehai[i]){
				kazu = tehai[i];
				for(k=0;k<kazu;k++){
					paiga = "<span class=\"" + paiType[i].cssSprite + "\"></span>";//cssスプライトの牌画を配置
					$("#paiTehaiSort2").append(paiga);
				}
			}
		}
	})();
}
//=======================================================================================

+ program_008.cssを開く

@charset "utf-8";

#paiYama > span , #paiTehai > span , #paiTehaiSort1 > span , #paiTehaiSort2 > span{
background-color:transparent;
background-image:url(../images/pai.png);
background-repeat:no-repeat;
background-attachment:scroll;
display:inline-block;
color:#000;
}

.paishadow{
	box-shadow: 0px 0px 5px 2px rgba(0, 256, 256, 1);
}

.man1{background-position:0px 0px;height:47px;width:31px;}
.man2{background-position:-31px 0px;height:47px;width:31px;}
.man3{background-position:-62px 0px;height:47px;width:31px;}
.man4{background-position:-93px 0px;height:47px;width:31px;}
.man5{background-position:-124px 0px;height:47px;width:31px;}
.man6{background-position:-155px 0px;height:47px;width:31px;}
.man7{background-position:-186px 0px;height:47px;width:31px;}
.man8{background-position:-217px 0px;height:47px;width:31px;}
.man9{background-position:-248px 0px;height:47px;width:31px;}
.man0{background-position:-279px 0px;height:47px;width:31px;}
.pin1{background-position:0px -47px;height:47px;width:31px;}
.pin2{background-position:-31px -47px;height:47px;width:31px;}
.pin3{background-position:-62px -47px;height:47px;width:31px;}
.pin4{background-position:-93px -47px;height:47px;width:31px;}
.pin5{background-position:-124px -47px;height:47px;width:31px;}
.pin6{background-position:-155px -47px;height:47px;width:31px;}
.pin7{background-position:-186px -47px;height:47px;width:31px;}
.pin8{background-position:-217px -47px;height:47px;width:31px;}
.pin9{background-position:-248px -47px;height:47px;width:31px;}
.pin0{background-position:-279px -47px;height:47px;width:31px;}
.sou1{background-position:0px -94px;height:47px;width:31px;}
.sou2{background-position:-31px -94px;height:47px;width:31px;}
.sou3{background-position:-62px -94px;height:47px;width:31px;}
.sou4{background-position:-93px -94px;height:47px;width:31px;}
.sou5{background-position:-124px -94px;height:47px;width:31px;}
.sou6{background-position:-155px -94px;height:47px;width:31px;}
.sou7{background-position:-186px -94px;height:47px;width:31px;}
.sou8{background-position:-217px -94px;height:47px;width:31px;}
.sou9{background-position:-248px -94px;height:47px;width:31px;}
.sou0{background-position:-279px -94px;height:47px;width:31px;}
.ji1{background-position:0px -141px;height:47px;width:31px;}
.ji2{background-position:-31px -141px;height:47px;width:31px;}
.ji3{background-position:-62px -141px;height:47px;width:31px;}
.ji4{background-position:-93px -141px;height:47px;width:31px;}
.ji5{background-position:-124px -141px;height:47px;width:31px;}
.ji6{background-position:-155px -141px;height:47px;width:31px;}
.ji7{background-position:-186px -141px;height:47px;width:31px;}
.ji0{background-position:-217px -141px;height:47px;width:31px;}

おすすめレンタルサーバー

エックスサーバー|高速・高機能レンタルサーバー

オールSSDの快適ハイスペック環境」「国内管理、大容量バックボーン」「独自SSLが無料」「FastCGIなどの高速化機能」「最新のPHP7を実装」など、高機能・高コストパフォーマンスなレンタルサーバーです。※当サイトも「エックスサーバー」で運用しています。

ウザク式麻雀牌効率学習

麻雀の牌効率を覚えたい初心者向け決定版。読者に大好評の麻雀 定石「何切る」301選麻雀 傑作「何切る」300選の著者が「初心者が何切るを解く前に読んでもらうことで、効率よく学習してもらいたい」という願いを込めた一冊です。

-小粒プログラミング
-,