<html>
<head>
<meta charset="utf-8" />
<style type="text/css">
* {
margin: 0px;
padding: 0px;
}
h1 {
text-align: center;
}
#divview ul li {
width: 50px;
height: 50px;
line-height: 50px;
text-align: center;
background-color: lightblue;
list-style: none;
float: left;
margin-right: 5px;
}
.clean {
clear: both;
}
#divview ul {
margin-top: 5px;
}
#divview {
padding: 10px 10px 10px 10px;
border: 2px solid black;
background-color: #999999;
}
#divview,
#divcontrol {
display: block;
width: 220px;
margin: 50 auto;
}
#divcontrol input {
width: 30px;
height: 30px;
}
#divcontrol p {
display: block;
margin-left: 36px;
}
#divcontrol p input {
margin-left: 30px;
}
#divcontrol>input {
margin-left: 100px;
}
#divcontrol {
margin-top: 50px;
}
</style>
<script type="text/javascript" src="jquery-1.9.1.js"></script>
<script type="text/javascript">
$(function() {
addrandom();
//点击向上时的函数处理
$("#up").click(function() {
merge(1);
});
//点击向右时的函数处理
$("#right").click(function() {
merge(2);
});
//点击向下时的函数处理
$("#down").click(function() {
merge(3);
});
//点击向左时函数处理
$("#left").click(function() {
merge(4);
});
$(window).on("keydown", function(e) {
// alert(e.keyCode);
switch (true) {
case e.keyCode == 87:
merge(1);
break;
case e.keyCode == 68:
merge(2);
break;
case e.keyCode == 83:
merge(3);
break;
case e.keyCode == 65:
merge(4);
break;
}
})
});
function point(x, y) { //定义一个自定义对象,用于存储x和y
this.x = x;
this.y = y;
}
function addrandom() {
var array = new Array();
array.length = 0; //清空数组
for (var x = 0; x < 4; x++) {
for (var y = 0; y < 4; y++) {
var innerval = getVal(1, x, y);
var a = new point(x, y);
if (!innerval) {
array.push(a);
} //获取值为空的坐标并存在一个空的数组里
}
}
if (array.length == 0) {
alert("游戏结束!");
//TODO:restart
} //填满 游戏结束
var rdnumLength = Math.random() > 0.8 ? 2 : 1;
for (var i = 0; i < rdnumLength && i < array.length; i++) {
var idx = Math.floor(Math.random() * array.length);
var x = array[idx].x;
var y = array[idx].y; //获取随机加入数字的坐标
var rdnum = 2; //按照4:1比例随机生成2或是4
setVal(1, x, y, rdnum);
//将生成数赋值给card
};
}
//获取jQuery数组中第index项的值
//directionx :1上,2右,3下,4左
function getVal(direction, idx1, idx2) {
var val = 0;
idx2 = direction == 2 || direction == 3 ? 3 - idx2 : idx2;
if (direction % 2) {
val = parseInt($("#divview ul").eq(idx2).children().eq(idx1).html());
} else {
val = parseInt($("#divview ul").eq(idx1).children().eq(idx2).html());
}
if (isNaN(val)) {
val = 0;
}
return val;
}
var colorList = ["lightblue", "lightcyan", "lightgoldenrodyellow", "lightgreen", "lightpink",
"lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightcoral"
];
// 设置第几行第几排的数字
function setVal(direction, idx1, idx2, val) {
var colorIndex = (val).toString(2).length;
idx2 = direction == 2 || direction == 3 ? 3 - idx2 : idx2;
if (direction % 2) {
return $("#divview ul").eq(idx2).children().eq(idx1).html(val).css("background-color", colorList[colorIndex]);
}
return $("#divview ul").eq(idx1).children().eq(idx2).html(val).css("background-color", colorList[colorIndex]);
}
//directionx :1上,2右,3下,4左
function merge(direction) {
var direction1 = 4;
var direction2 = 4;
//需要遍历的位置始终,合并后的数组
var allArr = [];
var flag = false;
for (var i = 0; i < direction1; i++) {
//合并后的数组
var numberArr = [];
var flagSpace = 0;
var flagMerge = false;
for (var j = 0; j < direction2; j++) {
//找到非空的值并记录是否有非空值在空值之后
var numberVal = getVal(direction, i, j);
if (numberVal != 0) {
numberArr.push(numberVal);
if (flagSpace > 0) {
flagSpace = true;
};
} else {
flagSpace = flagSpace == 0 ? 1 : flagSpace;
}
}
var endArr = [];
//遇到相同的数字合并,并且记录是否有相同数字
for (var j = 0; j < numberArr.length; j++) {
if (numberArr[j] == numberArr[j + 1] && numberArr[j] != 0) {
endArr.push(numberArr[j] + numberArr[j + 1]);
flagMerge = true;
j++;
} else {
endArr.push(numberArr[j]);
}
}
// 只要有一列是有空值或者合并的情况就进行变换
flag = flag || (flagSpace === true) || flagMerge;
allArr.push(endArr);
}
if (!flag) {
var numLength = 0;
for (var i = 0; i < allArr.length; i++) {
numLength += allArr[i].length;
}
if (numLength == 16) {
alert("游戏结束");
for (var i = 0; i < allArr.length; i++) {
for (var j = 0; j < allArr[i].length; j++) {
setVal(direction, i, j, "");
}
}
addrandom();
} else {
alert("此方向不能移动");
}
return;
}
for (var i = 0; i < direction1; i++) {
var endArr = allArr[i];
for (var j = 0; j < direction2; j++) {
if (j < endArr.length) {
setVal(direction, i, j, endArr[j]);
} else {
setVal(direction, i, j, "");
}
}
}
console.log(allArr);
addrandom();
}
</script>
</head>
<body>
<h1>2048:wsad控制方向</h1>
<div>
<div id="gamecontent">
<div id="divview">
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<div class="clean"></div>
</ul>
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<div class="clean"></div>
没有合适的资源?快使用搜索试试~ 我知道了~
网页版2048游戏.rar
共2个文件
js:1个
html:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 36 浏览量
2024-03-09
16:26:23
上传
评论
收藏 74KB RAR 举报
温馨提示
本资源是一套基于HTML、CSS、JavaScript以及jQuery的网页版2048游戏源码。它完美复现了经典的2048游戏玩法,并在界面设计和用户体验上进行了优化,使玩家能够在浏览器中轻松享受这一数字合成游戏的乐趣。 技术栈说明: HTML:构建游戏的基本框架,包括游戏界面、数字方块等元素。 CSS:负责游戏的样式设计,美化游戏界面,调整数字方块的大小、颜色以及动画效果,提升游戏的视觉体验。 JavaScript:实现游戏的核心逻辑,包括控制数字方块的移动、合并、生成新数字等功能,确保游戏的流畅运行。 jQuery:简化JavaScript的编写,提供便捷的DOM操作、事件处理以及动画效果,增强游戏的交互性和用户体验。 源码特点: 经典玩法:完美还原2048游戏的经典玩法,玩家通过W、S、A、D按键或点击屏幕中的上下左右按钮来移动数字方块,使其合并成更大的数字。 精美界面:采用简洁明了的界面设计,数字方块清晰易辨,色彩搭配舒适,给玩家带来愉悦的视觉享受。 流畅体验:通过优化算法和动画效果,实现游戏的流畅运行和快速响应,提升玩家的游戏体验。
资源推荐
资源详情
资源评论
收起资源包目录
网页版2048.rar (2个子文件)
网页版2048
jquery-1.9.1.js 262KB
index.html 9KB
共 2 条
- 1
资源评论
专业研究祖传Bug编写术
- 粉丝: 7046
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功