原生javascript代码写的2048游戏。建议在谷歌浏览器下跑。
2048.html
复制代码 代码如下:
<!DOCTYPE>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>2048</title>
<link rel="stylesheet" type="text/css" href="css/2048.css" />
<!-- <script type="text/javascript" src="/UploadFiles/2021-04-02/jquery-latest.js"><script type="text/javascript" src="/UploadFiles/2021-04-02/2048.js"></head>
<body>
<div id="div2048">
<a id="start">tap to start :-)</a>
</div>
</body>
</html>
2048.css
复制代码 代码如下:
@charset "utf-8";
#div2048
{
width: 500px;
height: 500px;
background-color: #b8af9e;
margin: 0 auto;
position: relative;
}
#start
{
width: 500px;
height: 500px;
line-height: 500px;
display: block;
text-align: center;
font-size: 30px;
background: #f2b179;
color: #FFFFFF;
}
#div2048 div.tile
{
margin: 20px 0px 0px 20px;
width: 100px;
height: 40px;
padding: 30px 0;
font-size: 40px;
line-height: 40px;
text-align: center;
float: left;
}
#div2048 div.tile0{
background: #ccc0b2;
}
#div2048 div.tile2
{
color: #7c736a;
background: #eee4da;
}
#div2048 div.tile4
{
color: #7c736a;
background: #ece0c8;
}
#div2048 div.tile8
{
color: #fff7eb;
background: #f2b179;
}
#div2048 div.tile16
{
color:#fff7eb;
background:#f59563;
}
#div2048 div.tile32
{
color:#fff7eb;
background:#f57c5f;
}
#div2048 div.tile64
{
color:#fff7eb;
background:#f65d3b;
}
#div2048 div.tile128
{
color:#fff7eb;
background:#edce71;
}
#div2048 div.tile256
{
color:#fff7eb;
background:#edcc61;
}
#div2048 div.tile512
{
color:#fff7eb;
background:#ecc850;
}
#div2048 div.tile1024
{
color:#fff7eb;
background:#edc53f;
}
#div2048 div.tile2048
{
color:#fff7eb;
background:#eec22e;
}
2048.js
复制代码 代码如下:
function game2048(container)
{
this.container = container;
this.tiles = new Array(16);
}
game2048.prototype = {
init: function(){
for(var i = 0, len = this.tiles.length; i < len; i++){
var tile = this.newTile(0);
tile.setAttribute('index', i);
this.container.appendChild(tile);
this.tiles[i] = tile;
}
this.randomTile();
this.randomTile();
},
newTile: function(val){
var tile = document.createElement('div');
this.setTileVal(tile, val)
return tile;
},
setTileVal: function(tile, val){
tile.className = 'tile tile' + val;
tile.setAttribute('val', val);
tile.innerHTML = val > 0 ? val : '';
},
randomTile: function(){
var zeroTiles = [];
for(var i = 0, len = this.tiles.length; i < len; i++){
if(this.tiles[i].getAttribute('val') == 0){
zeroTiles.push(this.tiles[i]);
}
}
var rTile = zeroTiles[Math.floor(Math.random() * zeroTiles.length)];
this.setTileVal(rTile, Math.random() < 0.8 ? 2 : 4);
},
move:function(direction){
var j;
switch(direction){
case 'W':
for(var i = 4, len = this.tiles.length; i < len; i++){
j = i;
while(j >= 4){
this.merge(this.tiles[j - 4], this.tiles[j]);
j -= 4;
}
}
break;
case 'S':
for(var i = 11; i >= 0; i--){
j = i;
while(j <= 11){
this.merge(this.tiles[j + 4], this.tiles[j]);
j += 4;
}
}
break;
case 'A':
for(var i = 1, len = this.tiles.length; i < len; i++){
j = i;
while(j % 4 != 0){
this.merge(this.tiles[j - 1], this.tiles[j]);
j -= 1;
}
}
break;
case 'D':
for(var i = 14; i >= 0; i--){
j = i;
while(j % 4 != 3){
this.merge(this.tiles[j + 1], this.tiles[j]);
j += 1;
}
}
break;
}
this.randomTile();
},
merge: function(prevTile, currTile){
var prevVal = prevTile.getAttribute('val');
var currVal = currTile.getAttribute('val');
if(currVal != 0){
if(prevVal == 0){
this.setTileVal(prevTile, currVal);
this.setTileVal(currTile, 0);
}
else if(prevVal == currVal){
this.setTileVal(prevTile, prevVal * 2);
this.setTileVal(currTile, 0);
}
}
},
equal: function(tile1, tile2){
return tile1.getAttribute('val') == tile2.getAttribute('val');
},
max: function(){
for(var i = 0, len = this.tiles.length; i < len; i++){
if(this.tiles[i].getAttribute('val') == 2048){
return true;
}
}
},
over: function(){
for(var i = 0, len = this.tiles.length; i < len; i++){
if(this.tiles[i].getAttribute('val') == 0){
return false;
}
if(i % 4 != 3){
if(this.equal(this.tiles[i], this.tiles[i + 1])){
return false;
}
}
if(i < 12){
if(this.equal(this.tiles[i], this.tiles[i + 4])){
return false;
}
}
}
return true;
},
clean: function(){
for(var i = 0, len = this.tiles.length; i < len; i++){
this.container.removeChild(this.tiles[i]);
}
this.tiles = new Array(16);
}
}
var game, startBtn;
window.onload = function(){
var container = document.getElementById('div2048');
startBtn = document.getElementById('start');
startBtn.onclick = function(){
this.style.display = 'none';
game = game || new game2048(container);
game.init();
}
}
window.onkeydown = function(e){
var keynum, keychar;
if(window.event){ // IE
keynum = e.keyCode;
}
else if(e.which){ // Netscape/Firefox/Opera
keynum = e.which;
}
keychar = String.fromCharCode(keynum);
if(['W', 'S', 'A', 'D'].indexOf(keychar) > -1){
if(game.over()){
game.clean();
startBtn.style.display = 'block';
startBtn.innerHTML = 'game over, replay?';
return;
}
game.move(keychar);
}
}
2048游戏
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?