'步步为营'游戏代码(js+HTML)

001

<!DOCTYPE HTML>
002<html>
003<head>
004<meta charset="UTF-8">
005<title>Flood It</title>
006<style>
007span{display:inline-block;margin:2px;width:30px;height:30px;cursor:pointer;}
008</style>
009</head>
010<body>
011<div style="position:absolute;left:2px;top:2px;width:660px;">
012<canvas id="canvas" width="660" height="660"></canvas>
013</div>
014<div style="position:absolute;left:700px;width:300px;">
015<p><input type=button value="New Game" onclick=init()><span id="hint"></span></p>
016<p>
017<span style="background:#884cb8;" onclick=drawColor(0)></span>
018<span style="background:#f84870;" onclick=drawColor(1)></span>
019<span style="background:#f87c00;" onclick=drawColor(2)></span>
020<span style="background:#f8dc00;" onclick=drawColor(3)></span>
021<span style="background:#10d000;" onclick=drawColor(4)></span>
022<span style="background:#106cf8;" onclick=drawColor(5)></span>
023</p>
024<div>
025<script>
026var canvas = document.getElementById('canvas');
027var context = canvas.getContext('2d');
028//定义填充的颜色
029var color=['#884cb8','#f84870','#f87c00','#f8dc00','#10d000','#106cf8'];
030//格子区域
031var board;
032//宽度,高度最难级别22格
033var level=22;
034//当前颜色索引 0-5
035var currentColorIndex;
036//一个标志位仅在初始化时开启
037var flag;
038//显示步数的div
039var hint=document.getElementById('hint');
040//记录点击步数
041var step;
042//初始化数组,随即产生颜色index并存储
043function init(){
044    board=new Array();
045    for(i=0;i<level;i++){
046        var row=new Array();
047        for(j=0;j<level;j++){
048            row[j]=Math.floor(Math.random()*6);    
049        }
050        board[i]=row;
051    }
052    //当前颜色等于左上角的色块
053    currentColorIndex=board[0][0];
054    //翻转过的格子存储-1值,先另左上角的为-1
055    board[0][0]=-1;
056    //一下几行自己看吧,一言难尽
057    flag=false;
058    drawColor(currentColorIndex);
059    flag=true;
060    _drawBoard();
061    step=0;
062    hint.innerText=step+'/36'
063}
064 
065//绘制格子区域
066function _drawBoard(){
067    context.fillStyle=color[currentColorIndex];
068    context.fillRect(0,0,30*level,30*level);
069    for(i=0;i<level;i++){
070        for(j=0;j<level;j++){
071            if(board[i][j]!=-1){
072            context.fillStyle=color[board[i][j]];
073            context.fillRect(j*30,i*30,30,30);
074            }
075        }
076    }
077    hint.innerText=step+'/36'
078}
079//染色
080function drawColor(color_index){
081    //点击当前颜色值无效。初始化时除外。
082    if(color_index==currentColorIndex && flag) return;
083    for(i=0;i<level;i++){
084        for(j=0;j<level;j++){
085            if(board[i][j]==-1){
086                _findSameColor(i,j,color_index);
087            }
088        }
089    }
090    step++;
091    currentColorIndex=color_index;
092    _drawBoard();
093}
094//递归寻找同色格子
095function _findSameColor(cell_x,cell_y,color_index){
096    if(cell_x-1>=0 && board[cell_x-1][cell_y]==color_index) {board[cell_x-1][cell_y]=-1;_findSameColor(cell_x-1,cell_y,color_index);}
097    if(cell_x+1<level && board[cell_x+1][cell_y]==color_index) {board[cell_x+1][cell_y]=-1;_findSameColor(cell_x+1,cell_y,color_index);}
098    if(cell_y-1>=0 && board[cell_x][cell_y-1]==color_index) {board[cell_x][cell_y-1]=-1;_findSameColor(cell_x,cell_y-1,color_index);}
099    if(cell_y+1<level && board[cell_x][cell_y+1]==color_index) {board[cell_x][cell_y+1]=-1;_findSameColor(cell_x,cell_y+1,color_index);}
100}
101</script>
102</body>
103</html>

HTML页面:

001<!DOCTYPE HTML>
002<html>
003<head>
004<meta charset="UTF-8">
005<title>Flood It</title>
006<style>
007span{display:inline-block;margin:2px;width:30px;height:30px;cursor:pointer;}
008</style>
009</head>
010<body>
011<div style="position:absolute;left:2px;top:2px;width:660px;">
012<canvas id="canvas" width="660" height="660"></canvas>
013</div>
014<div style="position:absolute;left:700px;width:300px;">
015<p><input type=button value="New Game" onclick=init()><span id="hint"></span></p>
016<p>
017<span style="background:#884cb8;" onclick=drawColor(0)></span>
018<span style="background:#f84870;" onclick=drawColor(1)></span>
019<span style="background:#f87c00;" onclick=drawColor(2)></span>
020<span style="background:#f8dc00;" onclick=drawColor(3)></span>
021<span style="background:#10d000;" onclick=drawColor(4)></span>
022<span style="background:#106cf8;" onclick=drawColor(5)></span>
023</p>
024<div>
025<script>
026var canvas = document.getElementById('canvas');
027var context = canvas.getContext('2d');
028//定义填充的颜色
029var color=['#884cb8','#f84870','#f87c00','#f8dc00','#10d000','#106cf8'];
030//格子区域
031var board;
032//宽度,高度最难级别22格
033var level=22;
034//当前颜色索引 0-5
035var currentColorIndex;
036//一个标志位仅在初始化时开启
037var flag;
038//显示步数的div
039var hint=document.getElementById('hint');
040//记录点击步数
041var step;
042//初始化数组,随即产生颜色index并存储
043function init(){
044    board=new Array();
045    for(i=0;i<level;i++){
046        var row=new Array();
047        for(j=0;j<level;j++){
048            row[j]=Math.floor(Math.random()*6);    
049        }
050        board[i]=row;
051    }
052    //当前颜色等于左上角的色块
053    currentColorIndex=board[0][0];
054    //翻转过的格子存储-1值,先另左上角的为-1
055    board[0][0]=-1;
056    //一下几行自己看吧,一言难尽
057    flag=false;
058    drawColor(currentColorIndex);
059    flag=true;
060    _drawBoard();
061    step=0;
062    hint.innerText=step+'/36'
063}
064 
065//绘制格子区域
066function _drawBoard(){
067    context.fillStyle=color[currentColorIndex];
068    context.fillRect(0,0,30*level,30*level);
069    for(i=0;i<level;i++){
070        for(j=0;j<level;j++){
071            if(board[i][j]!=-1){
072            context.fillStyle=color[board[i][j]];
073            context.fillRect(j*30,i*30,30,30);
074            }
075        }
076    }
077    hint.innerText=step+'/36'
078}
079//染色
080function drawColor(color_index){
081    //点击当前颜色值无效。初始化时除外。
082    if(color_index==currentColorIndex && flag) return;
083    for(i=0;i<level;i++){
084        for(j=0;j<level;j++){
085            if(board[i][j]==-1){
086                _findSameColor(i,j,color_index);
087            }
088        }
089    }
090    step++;
091    currentColorIndex=color_index;
092    _drawBoard();
093}
094//递归寻找同色格子
095function _findSameColor(cell_x,cell_y,color_index){
096    if(cell_x-1>=0 && board[cell_x-1][cell_y]==color_index) {board[cell_x-1][cell_y]=-1;_findSameColor(cell_x-1,cell_y,color_index);}
097    if(cell_x+1<level && board[cell_x+1][cell_y]==color_index) {board[cell_x+1][cell_y]=-1;_findSameColor(cell_x+1,cell_y,color_index);}
098    if(cell_y-1>=0 && board[cell_x][cell_y-1]==color_index) {board[cell_x][cell_y-1]=-1;_findSameColor(cell_x,cell_y-1,color_index);}
099    if(cell_y+1<level && board[cell_x][cell_y+1]==color_index) {board[cell_x][cell_y+1]=-1;_findSameColor(cell_x,cell_y+1,color_index);}
100}
101</script>
102</body>
103</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值