一个简单的纸牌小游戏

一个简单的纸牌小游戏

初始化页面布局

function initView(){
		var html = html2 = '';
		for(var i=1;i<=10;i++){
			html += '<div class="pokerBr" style="left: '+(120*i-100)+'px" group="'+i+'"></div>';
			html2 += '<div class="pokerLine" style="left: '+(120*i-100)+'px" group="'+i+'"></div>';
		}
		var html3 = '<div class="pokerDeposit"></div>'; // 牌堆
		var html4 = '<div class="pokerMoveGroup"></div>'; // 移动牌组
		var html5 = '<div class="pokerDoneGroup"></div>'; // 完成牌组
		$('#pokerBox').html(html+html2+html3+html4+html5);
	}

生成随机扑克牌数组

var pokerData = {
		type: [ 'a', 'b', 'c', 'd' ], // [a 方片] [b 梅花] [c 黑桃] [d 红桃]
		num: [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ],
	};
	var pokerAllCount = 0;
	var pokerAllPet = [];
	var pokerSendNum = 0;
	var pokerDifficult = 1; // [1 简单(单色)] [2 中等(双色)] [3 困难(四色)]
	function initRandomPoker(){
		pokerAllCount = 0;
		pokerAllPet = [];
		pokerSendNum = 0;
		for(var i=1;i<=pokerData.type.length;i++){
			for(var t=1;t<=pokerData.num.length;t++){
				var d = pokerData.type[i-1]+'-'+pokerData.num[t-1];
				pokerAllPet.push(d,d);
			}
		}
		// console.log(pokerAllPet);
		pokerAllCount = pokerAllPet.length;
		pokerAllPet = shuffle(pokerAllPet);
	}

数组随机排序

function shuffle(arr){
		var len = arr.length;
		for(var i = 0; i < len - 1; i++){
			var idx = Math.floor(Math.random() * (len - i));
			var temp = arr[idx];
			arr[idx] = arr[len - i - 1];
			arr[len - i -1] = temp;
		}
		return arr;
	}

生成扑克牌卡片

function initPokerCard(){
		var html = '';
		for(var i=1;i<=pokerAllCount;i++){
			var sort = pokerAllCount-i+1;
			var card = pokerAllPet[sort-1];

			html += '<div class="pokerLi" isOpen="no" sort="'+sort+'" card="'+card+'" style="left: '+(i*2-1)+'px;">'+
						'<div class="img">'+
							'<img src="img/'+card+'.png" name="face" />'+
							'<img src="img/f-1.png" name="back" />'+
						'</div>'+
					'</div>';
		}
		$('#pokerBox .pokerDeposit').append(html);
	}

首次发牌动画

function initFirstSendPoker(){
		var pokerLineView = 54; // [ 6, 6, 6, 6, 5, 5, 5, 5, 5, 5 ]
		var pokerLineStart = 1;
		var pokerLineInset = null;
		setTimeout(function(){
			pokerLineInset = setInterval(function(){
				var s = pokerLineStart;
				if(s<=54){ // 执行首次发牌
					var groupTop = Math.ceil(s/10);
					var top = (groupTop-1)*30;
					var groupLeft = (s-1)%10+1;
					var left = (groupLeft-1)*120;
					animateSendPoker(s,{
						param: {
							top: -612+top,
							left: left,
							// 'z-index': s,
						},
						group: {
							groupTop: groupTop,
							groupLeft: groupLeft,
						},
					});
					pokerLineStart++;
					pokerSendNum++;
				}else{
					clearInterval(pokerLineInset);
					setTimeout(function(){
						for(var i=pokerLineView-9;i<=pokerLineView;i++){ // 执行首次翻牌
						// for(var i=pokerLineView-54;i<=pokerLineView;i++){ // 执行首次翻牌
							animateOpenPoker(i);
						}
					},200)
				}
			},100)
		},800)
	}

继续发牌

function keepSendPoker(){
		var canSend = true;
		$('#pokerBox .pokerLine').each(function(){
			if($(this).find('.pokerLi').length==0){
				canSend = false;
			}
		})
		if(canSend){
			var lastAllNum = pokerSendNum;
			var pokerLineStart = lastAllNum+1;
			var pokerLineInset = null;
			pokerLineInset = setInterval(function(){
				var s = pokerLineStart;
				if(s<=lastAllNum+10){ // 每轮发牌10张
					var groupLeft = s-lastAllNum;
					var left = (groupLeft-1)*120;
					var groupTop = $('#pokerBox .pokerLine[group="'+groupLeft+'"] .pokerLi').length+1;
					var top = (groupTop-1)*30;
					animateSendPoker(s,{
						param: {
							top: -612+top,
							left: left,
							// 'z-index': s,
						},
						group: {
							groupTop: groupTop,
							groupLeft: groupLeft,
						},
					},function(){
						animateOpenPoker(s);
					});
					pokerLineStart++;
					pokerSendNum++;
				}else{
					clearInterval(pokerLineInset);
				}
			},100)
		}else{
			gAlert({
				txt: '不允许在有空列的时候发牌',
			})
		}
	}

执行发牌动画 [s 序号] [j 参数] [c 回调函数]

function animateSendPoker(s,j,c){
		var obj = $('#pokerBox .pokerDeposit .pokerLi[sort="'+s+'"]');
		obj.attr(j.group).animate(j.param,150,function(){
			$('#pokerBox .pokerLine[group="'+j.group.groupLeft+'"]').append(obj.addClass('importantClass').prop('outerHTML'));
			obj.remove();
			if(c){ c(); }
		});
	}

执行翻牌动画 [s 序号] [j 参数] [c 回调函数]

function animateOpenPoker(s,j,c){
		$('#pokerBox .pokerLine .pokerLi[sort="'+s+'"]').attr('isOpen','yes');
	}

检测是否可以拖动

function checkCanPickPoker(obj){
		var result = {
			state: false, // 是否可以拖动 [true 可以] [false 不可以]
			dropGroupTop: 0, // 拖动的卡牌序号
		}
		if($(obj).attr('isOpen')=='yes'){
			var groupTop = Number($(obj).attr('groupTop'));
			var groupCardArr = [];
			$(obj).closest('.pokerLine').find('.pokerLi').each(function(){
				if($(this).attr('groupTop')>=groupTop){
					var c = $(this).attr('card').split('-');
					groupCardArr.push({
						a: c[0],
						b: Number(c[1]),
						g: $(this).attr('groupTop'),
					});
				}
			})
			// console.log(groupCardArr);

			result.state = true;
			result.dropGroupTop = groupCardArr[0].g;

			if(groupCardArr.length>1){
				for(var i=0;i<=groupCardArr.length-2;i++){
					var nowCard = groupCardArr[i];
					var nextCard = groupCardArr[i+1];
					if( !(nowCard.a==nextCard.a && nowCard.b==nextCard.b+1) ){
						result.state = false;
						result.dropGroupTop = 0;
					}
				}
			}
		}
		return result;
	}

检测是否可以直接收取正确排序的卡牌

function checkDonePoker(){
		if(pokerSendNum<54){ return false; }
		$('#pokerBox .pokerLine .pokerLi[isopen="yes"][card$="-13"]').each(function(){
			var checkBit = $(this).attr('card').split('-')[0];
			var checkTop = Number($(this).attr('groupTop'));
			var pobj = $(this).closest('.pokerLine');
			var isDone = true;
			var pushCard = [ $(this).attr('sort') ];
			for(var i=1;i<=12;i++){
				var s = pobj.find('.pokerLi[isopen="yes"][groupTop="'+(checkTop+i)+'"]');
				pushCard.push(s.attr('sort'));
				if(pobj.find('.pokerLi[isopen="yes"][groupTop="'+(checkTop+i)+'"]').attr('card')!=checkBit+'-'+(13-i)){
					isDone = false;
					break;
				}
			}
			if(isDone){
				pushCard.reverse();
				moveDonePoker(pushCard);
			}
		})
	}

选择游戏难度

function chooseGameDifficulty(){
		gAlert({
			txt: '请选择游戏难度',
			txtCenter: true,
			btn: '简单(单色)',
			btnCall: function(){
				pokerDifficult = 1;
				pokerData.type = [ 'c', 'c', 'c', 'c' ];
				initGame();
			},
			btn2: '中等(双色)',
			btn2Call: function(){
				pokerDifficult = 2;
				pokerData.type = [ 'c', 'd', 'c', 'd' ];
				initGame();
			},
			btn3: '困难(四色)',
			btn3Call: function(){
				pokerDifficult = 3;
				pokerData.type = [ 'a', 'b', 'c', 'd' ];
				initGame();
			},
		});
	}

开始游戏

function initGame(){
		initRandomPoker(); // 生成随机扑克牌数组
		initPokerCard(); // 生成扑克牌卡片
		initFirstSendPoker(); // 触发首次发牌动画
	}

	initView(); // 初始化页面布局
	chooseGameDifficulty(); // 选择游戏难度
发布了19 篇原创文章 · 获赞 19 · 访问量 1584

猜你喜欢

转载自blog.csdn.net/weixin_45558363/article/details/105556577