欢迎光临
我们一直在努力

一个javascript脚本写的俄罗斯方块 (2)Russia.js

建站超值云服务器,限时71元/月

var cols = 10, rows = 20, sqlen = 16;
var color = new array(8);
var delline = new array();
var cloc = new array();
var rloc = new array();
var cursq,nextsq;
var type=-1,oldtype;
var delay = new array(600,500,400,300,200,100,90,80,70);
var timerid;
var pos = 0,end,level=0,score=0,lines=0;
var isover=false,ispause=false;

color[0] = "#d0d0d0";
color[1] = "red";
color[2] = "green"
color[3] = "cyan";
color[4] = "yellow";
color[5] = "orange";
color[6] = "pink";
color[7] = "blue";

function gamearea(row,col,name){
var s = "<table border=1 cellspacing=0 cellpadding=1 bgcolor=" + color[0] + ">";
for(var i=0; i<row; i++){
  s = s + "<tr height=" + sqlen + ">";
  for(var j=0; j<col; j++){
   var id = name + i + "#" + j;
   s = s + "<td width=" + sqlen + " class=btnup id=" + id;
   s = s + " style=\"background:" + color[0] + "\"> </td>"
  }
  s = s + "</tr>";
}
s = s + "</table>";
return s;
}

function init(){
gamebody.innerhtml = gamearea(rows,cols,main);
gameforecast.innerhtml = gamearea(4,4,forecast);
}

function square(cols,rows,color){
this.rows = rows;
this.cols = cols;
this.color = color;
}

function choosesquare(type,x,y){
var sq = new array(4);
switch(type){
  case 0:
   sq[0] = new square(x-1,y,1);
   sq[1] = new square(x,y,1);
   sq[2] = new square(x+1,y,1);
   sq[3] = new square(x+2,y,1);
   break;
  case 1:
   sq[0] = new square(x,y,5);
   sq[1] = new square(x,y+1,5);
   sq[2] = new square(x+1,y+1,5);
   sq[3] = new square(x,y+2,5);
   break;
  case 2:
   sq[0] = new square(x,y,2);
   sq[1] = new square(x,y+1,2);
   sq[2] = new square(x+1,y+1,2);
   sq[3] = new square(x+1,y+2,2);
   break;
  case 3:
   sq[0] = new square(x+1,y,7);
   sq[1] = new square(x+1,y+1,7);
   sq[2] = new square(x,y+1,7);
   sq[3] = new square(x,y+2,7);
   break;
  case 4:
   sq[0] = new square(x,y,3);
   sq[1] = new square(x+1,y,3);
   sq[2] = new square(x,y+1,3);
   sq[3] = new square(x+1,y+1,3);
   break;
  case 5:
   sq[0] = new square(x,y,6);
   sq[1] = new square(x+1,y,6);
   sq[2] = new square(x+1,y+1,6);
   sq[3] = new square(x+1,y+2,6);
   break;
  case 6:
   sq[0] = new square(x+1,y,4);
   sq[1] = new square(x,y,4);
   sq[2] = new square(x,y+1,4);
   sq[3] = new square(x,y+2,4);
   break;
}
return sq;
}

function redraw(name,sq){
var obj;
for(var i=0; i<sq.length; i++){
  obj = document.all(name + sq[i].rows + "#" + sq[i].cols);
  obj.style.background = color[sq[i].color];
}
}
function cleardraw(name,sq){
var obj;
for(var i=0; i<sq.length; i++){
  obj = document.all(name + sq[i].rows + "#" + sq[i].cols);
  obj.style.background = color[0];
}
}

function isbounds(sq){
for(var i=0; i<sq.length; i++){
  if(sq[i].cols<0 || sq[i].cols>9 || sq[i].rows<0 || sq[i].rows>19)
   return false;
}
return true;
}

function sortsquare(sq,name,ismax){
if(ismax){
  var max = 0;
  if(name=="rows"){
   for(var i=0; i<sq.length; i++){
    if(sq[i].rows>max) max = sq[i].rows;
   }
  }
  else{
   for(var i=0; i<sq.length; i++){
    if(sq[i].cols>max) max = sq[i].cols;
   }   
  }
  return max;
}
else{
  var min = 20;
  if(name=="rows"){
   for(var i=0; i<sq.length; i++){
    if(sq[i].rows<min) min = sq[i].rows;
   }
  }
  else{
   for(var i=0; i<sq.length; i++){
    if(sq[i].cols<min) min = sq[i].cols;
   }  
  }
  return min;
}
}

function startgame(){
start.disabled = true;
pause.focus();
type = parseint(math.random()*7);
oldtype = type;
type = parseint(math.random()*7);
var m = 4/2 -1;
newsq = choosesquare(type,m,0);
redraw(forecast,newsq);
start();
}
function start(){
if(isover){
  var s = "本次游戏结束! ";
  overgame(s);
}
gscore.innertext = score;
gline.innertext = lines;
glevel.innertext = level;
oldtype = type;
cleardraw(forecast,newsq);
type = parseint(math.random()*7);
var m = 4/2 -1;
newsq = choosesquare(type,m,0);
redraw(forecast,newsq);
var mm = cols/2 -1;
cursq = choosesquare(oldtype,mm,0);
redraw(main,cursq);
window.clearinterval(timerid);
timerid = window.setinterval("run()",delay[level]);
}
function run(){
if(ispause) return;
if(movecursq(0,1,false) == false){
  window.clearinterval(timerid);
  if(removelines()==true) {
   dellines();
   lines = lines + delline.length;
   switch(delline.length){
    case 1:
     score = score + 100;
     break;
    case 2:
     score = score + 300;
     break;
    case 3:
     score = score + 700;
     break;
    case 4:
     score = score + 1000;
     break;
   }

   level = parseint(score/10000);
  }
  start();
}
}

function removelines(){
var obj,m=0;
var isremove = true;
var searchpos = true;
var del = new array();
for(var i=19; i>=0; i–){
  for(var j=0; j<10; j++){
   obj = document.all("main" + i + "#" + j);
   if(obj.style.background == color[0]){
    isremove = false;
   }
   else{
    searchpos = false;
   }
  }
  if(searchpos) {
   end = i;
   if(del.length>0){delline=del;return true;}
   else{return false;}
  }
  if(isremove) {del[m] = i; m++;}
  searchpos = true;
  isremove = true;
}
}

function dellines(){
var deleted = 0;
var obj;
for(var i=0; i<delline.length; i++){
  for(var j=0; j<10; j++){
   obj = document.all("main" + delline[i] + "#" + j);
   obj.style.background = color[0];
  }
  deleted = deleted + 1;
  if(delline.length>deleted)
  {
   if(delline[i]-delline[i+1]>1) redrawline(delline[i+1],delline[i],deleted);
  }
}
redrawline(end,delline[delline.length – 1],deleted);
}

function redrawline(endline,startline,moveline){
var obj;
for(var i= startline – 1; i>endline; i–){
  for(var j=0; j<10; j++){
   obj = document.all("main" + i + "#" + j);
   var oldcolor = obj.style.background;
   obj.style.background = color[0];
   var rowid = i + moveline;
   obj = document.all("main" + rowid + "#" + j);
   obj.style.background = oldcolor;
  }
}
}

function movesquare(from,to){
if(isbounds(to) == false) return false;
var obj;
loop:
for(var i=0; i<to.length; i++){
  obj = document.all("main" + to[i].rows + "#" + to[i].cols);
  if(obj.style.background != color[0]){
   for(var j=0; j<from.length; j++)
    if(to[i].cols==from[j].cols&&to[i].rows==from[j].rows&&to[i].color==from[j].color)
     continue loop;
    return false
  }
}
return true;
}

function movecursq(x,y,isrotate){
nextsq = new array(cursq.length);
for(var i=0; i<cursq.length; i++){
  if(isrotate){
   var dx = cursq[i].cols – cursq[0].cols;
   var dy = cursq[i].rows – cursq[0].rows;
   nextsq[i] = new square(cursq[0].cols-dy,cursq[0].rows+dx,cursq[i].color);
  }
  else
   nextsq[i] = new square(cursq[i].cols+x,cursq[i].rows+y,cursq[i].color);
}
if(isrotate) renextsq();
if(movesquare(cursq,nextsq) == false){
  for(var i=0; i<cursq.length; i++){
   if((cursq[i].rows==0&&cursq[i].cols==cols/2)||(cursq[i].rows==0&&cursq[i].cols==cols/2-1))
    isover = true;
  }
  return false;
}

cleardraw(main,cursq);
cursq = nextsq;
redraw(main,cursq);
return true;
}

function renextsq(){
var mincols = sortsquare(nextsq,cols,false);
var minrows = sortsquare(nextsq,rows,false);
var maxcols = sortsquare(nextsq,cols,true);
var maxrows = sortsquare(nextsq,rows,true);

if(mincols<0)  changenextsq(cols,-mincols);
if(minrows<0)  changenextsq(rows,-minrows);
if(maxcols>9)  changenextsq(cols,9-maxcols);
if(maxrows>19) changenextsq(rows,19-maxrows);
}

function changenextsq(name,pos){
for(var i=0; i<nextsq.length; i++){
  if(name="rows")
   nextsq[i].rows = nextsq[i].rows + pos;
  else
   nextsq[i].cols = nextsq[i].cols + pos;
}
}

function keydown(){
switch(event.keycode){
  case 40:
   movecursq(0,1,false);
   break;
  case 37:
   movecursq(-1,0,false);
   break;
  case 38:
   movecursq(0,0,true);
   break;
  case 39:
   movecursq(1,0,false);
   break;
}
}

function pausegame(){
if(pause.innertext == "暂停游戏"){
  ispause = true;
  pause.innertext = "继续游戏";
  pause.focus();
}
else{
  ispause = false;
  pause.innertext = "暂停游戏";
  pause.focus();
  run();
}
}

function overgame(str){
if(typeof(str)=="undefined") str = "你的得分:" + score +"。是否重玩游戏? ";
else str = str + "你的得分:" + score +"。是否重玩游戏? ";

var isok = window.confirm(str);
if(!isok) {
  document.location.reload();
  window.close();
}
else{
  document.location.reload();
}
}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 一个javascript脚本写的俄罗斯方块 (2)Russia.js
分享到: 更多 (0)

相关推荐

  • 暂无文章