JS 코드 를 사용 하여 러시아 블록 게임 을 실현 합 니 다.
효과 그림:
코드 는 다음 과 같 습 니 다.복사 하면 사용 할 수 있 습 니 다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title> JS </title>
<style type="text/css">
.MainFrame
{
border: 1px solid burlywood;
margin: 10px auto;
position: relative;
background-color: silver;
}
.MainFramediv
{
float: left;
margin: 1px;
position: absolute;
/*z-index: -1;*/
}
.smallDiv
{
margin: 1px;
position: absolute;
}
.smallDivblack
{
/*float: left;*/
margin: 1px;
/*margin: 1px;*/
position: absolute;
/*z-index: 2;*/
}
#tetris{
width: 50%;
margin: 0 auto;
padding: 0;
/*border: 1px solid silver;*/
}
#tetris:after{
content: "";
Display: block;
Clear: both;
}
#control{
float: left;
border: 1px solid silver;
width: 150px;
height: 578px;
margin-top: 10px;
margin-left: 20px;
padding-top: 30px;
font-size: 24px;
font-weight: 400;
color: blue;
text-align: center;
}
#level,#regame{
width: 100px;
height: 30px;
border: 1px solid blue;
font-size: 16px;
color: red;
font-weight: 300;
}
#control p{
margin-top: 200px;
}
#regame{
margin-top: 100px;
font-weight: 600;
background-color: azure;
}
#TFrime{
float: left;
}
#info{
float: left;
border: 1px solid silver;
width: 150px;
height: 578px;
margin: 10px auto;
padding-top: 30px;
text-align: center;
color: blue;
font-size: 24px;
font-weight: 400;
}
#nextfigure{
width: 100px;
height: 100px;
background-color: silver;
margin: 0 auto;
margin-bottom: 100px;
position: relative;
}
.drawdiv{
background-color: red;
margin: 1px;
border: 1px solid silver;
position: absolute;
}
</style>
<!-- JS -->
<script src="js/GameFrame.js" type="text/javascript" charset="utf-8"></script>
<script src="js/graph.js" type="text/javascript" charset="utf-8"></script>
<script src="js/index.js" type="text/javascript" charset="utf-8"></script>
</head>
<body onload="initGame()">
<div id="tetris">
<div id="control">
:
<div><select id="level" onchange="changespeed()">
<option value="1000">
<option value="500">
<option value="200">
</select></div>
<input type="button" id="regame" value=" " onclick="regame()">
<p>
↑: <br>
←: <br>
→: <br>
↓: <br>
</p>
</div>
<div id="TFrime"></div>
<div id="info">
:
<div id="nextfigure">
</div>
<div> :<span id="score">0</span></div>
</div>
</div>
<div style="text-align:center;margin:10px 0; font:normal 14px/24px 'MicroSoft YaHei';">
<p> :360、FireFox、Chrome、Safari、Opera、 、 、 . IE8 。</p>
</div>
</body>
</html>
GameFrame.js
function GameFrame(unit,row,col)
{
//
this.unit = unit;
// ( ),,( )
this.row = row;
// ( ),,( )
this.col =col;
// div
this.Content;
//
this.samlldiv;
// id
this.intervalid;
//
this.speed =document.getElementById("level").value;
//
this.ChangeSped=0;
// div
this.datas=[];
//
this.score=[0,100,300,600,1000]
//
this.now;
//
this.next;
//
this.nowcolor;
//
this.nextcolor;
// 7
this.arr = "0,1,0,2,1,2,2,2;0,1,1,1,1,2,2,2;0,1,0,2,1,1,2,1;0,2,1,1,1,2,2,1;1,0,1,1,1,2,1,3;1,1,1,2,2,1,2,2;1,1,2,0,2,1,2,2".split(";");
//
this.color=["red","blue","green","yellow","#00FFFF","#930093","#F80000","#984B4B"];
// div
this.init = function()
{
// div
var div = document.createElement("div");
// div
div.style.width = (this.unit*this.row)+"px";
// div
div.style.height=(this.unit*this.col)+"px";
// div
div.className="MainFrame";
div.id="MainFrame";
// body
document.getElementById("TFrime").appendChild(div);
this.Content =div; // div
//
for(var i=0;i<this.col;i++) //i
{
for(var j=0;j<this.row;j++){ //j
var sdiv = document.createElement("div");
sdiv.className="MainFramediv";
sdiv.style.width = (this.unit - 2) + "px";
sdiv.style.height = (this.unit - 2) + "px";
sdiv.style.left=(j*this.unit)+"px";
sdiv.style.top=(i*this.unit)+"px";
this.Content.appendChild(sdiv);
this.datas.push(0);
}
}
this.next=Math.floor(Math.random() * this.arr.length);
this.nextcolor=this.color[Math.floor(Math.random() * this.color.length)];
Start();
}
this.MoveLeft = function()
{
this.samlldiv.moveleft();
}
this.MoveRight = function(){
this.samlldiv.moveright();
}
this.Change = function(){
this.samlldiv.change();
}
this.MoveDown = function(){
if(this.samlldiv.movedown())
{
// for(var i=0;i<this.samlldiv.divs.length;i++)
// {
// this.Content.removeChild(this.samlldiv.divs[i]);
// }
this.samlldiv.rescore();
Start();
}
}
function Start()
{
// next now
this.frame.now=this.frame.next;
this.frame.nowcolor=this.frame.nextcolor;
// div
this.frame.samlldiv=new Graph(this.frame);
this.frame.samlldiv.init(this.frame.now,this.frame.nowcolor);
//
this.frame.next=Math.floor(Math.random() * this.frame.arr.length);
this.frame.nextcolor=this.frame.color[Math.floor(Math.random() * this.frame.color.length)];
draw();
//
this.frame.intervalid = setInterval(autoMoveDown,this.frame.speed);
//
if (this.frame.samlldiv.movedown()){
clearInterval(this.frame.intervalid);
alert(" !");
}
}
function autoMoveDown()
{
if(this.frame.samlldiv.movedown())
{
this.frame.samlldiv.rescore();
Start();
}
//
if(this.frame.ChangeSped){
clearInterval(this.frame.intervalid);
this.frame.intervalid = setInterval(autoMoveDown,this.frame.speed);
this.frame.ChangeSped=0;
}
}
// , ChangeSped 1
this.changespeed=function(){
this.speed=document.getElementById("level").value;
this.ChangeSped=1;
// alert(this.ChangeSped);
}
//
function draw(){
//
var cleardiv=document.getElementsByClassName("drawdiv");
for(;;){
if(cleardiv.length){
document.getElementById("nextfigure").removeChild(cleardiv[0]);
}else{
break;
}
}
//
var smallarr = this.frame.arr[this.frame.next].split(",");
for (var i = 0; i < 8; i += 2) {
var drawdiv = document.createElement("div");
drawdiv.className = "drawdiv";
drawdiv.style.backgroundColor=this.frame.nextcolor;
drawdiv.style.width = (this.frame.unit - 2) + "px";
drawdiv.style.height = (this.frame.unit - 2) + "px";
drawdiv.style.top = (((smallarr[i] - 0) * this.frame.unit)+18) + "px";
drawdiv.style.left = (((smallarr[i + 1] - 0) * this.frame.unit)+18) + "px";
document.getElementById("nextfigure").appendChild(drawdiv);
}
}
}
graph.js
function Graph(frame) {
// 7
// var arr = "0,1,0,2,1,2,2,2;0,1,1,1,1,2,2,2;0,1,0,2,1,1,2,1;0,2,1,1,1,2,2,1;1,0,1,1,1,2,1,3;1,1,1,2,2,1,2,2;1,1,2,0,2,1,2,2".split(";");
// 4
this.divs = [];
// div
this.parentFrame = frame;
//
this.x = 0;
this.y = 0;
//
this.zb = [];
//
this.line=0;
//
this.init = function(rand,color) {
//
var startleft = (this.parentFrame.row - 4) / 2;
this.x = startleft;
//
// var rand = Math.floor(Math.random() * arr.length);
//
var smallarr = this.parentFrame.arr[rand].split(",");
this.zb = smallarr;
// div left top
for (var i = 0; i < 8; i += 2) {
// div
var smalldiv = document.createElement("div");
//
smalldiv.className = "smallDiv";
//
smalldiv.style.backgroundColor=color;
//
smalldiv.style.width = (this.parentFrame.unit - 2) + "px";
smalldiv.style.height = (this.parentFrame.unit - 2) + "px";
// div top
smalldiv.style.top = ((smallarr[i] - 0) * this.parentFrame.unit) + "px";
// div left
smalldiv.style.left = (((smallarr[i + 1] - 0) + startleft) * this.parentFrame.unit) + "px";
// div
this.divs.push(smalldiv);
//
document.getElementById("MainFrame").appendChild(smalldiv);
}
//
//this.parentFrame.intervalid = setInterval(autoMoveDown, this.parentFrame.speed);
}
//
this.moveleft = function() {
// var canmove = true;
// //
//
// for(var i=0;i<this.divs.length;i++)
// {
// var left=parseInt(this.divs[i].style.left); //div left
// if(left - this.parentFrame.unit <0) // 0
// {
// canmove = false; //
// break;
// }
// }
if (canMove(this.zb, this.x, this.y, this.parentFrame, 2)) //
{
this.x -= 1;
for (var i = 0; i < this.divs.length; i++) // div, div left
{
var left = parseInt(this.divs[i].style.left);
this.divs[i].style.left = (left - this.parentFrame.unit) + "px";
}
}
}
//
this.moveright = function() {
// var canmove = true;
// //
// for(var i=0;i<this.divs.length;i++)
// {
// var left=parseInt(this.divs[i].style.left);
// if(left + this.parentFrame.unit >=parseInt(this.parentFrame.Content.style.width))
// {
// canmove = false;
// break;
// }
// }
var temp = canMove(this.zb, this.x, this.y, this.parentFrame, 1);
// alert(temp);
console.log(temp);
if (canMove(this.zb, this.x, this.y, this.parentFrame, 1)) {
this.x += 1;
for (var i = 0; i < this.divs.length; i++) {
var left = parseInt(this.divs[i].style.left);
this.divs[i].style.left = (left + this.parentFrame.unit) + "px";
}
}
}
//
this.change = function() {
//
// div 2 x = y ; y= 3-x; (0,1) x=1,y=3-0 -> (1,3)
// 4 div
if (!canMove(this.zb, this.x, this.y, this.parentFrame, 4)) {
if (this.x < 0) {
this.x += 1;
} else {
this.x -= 1;
}
}
for (var i = 0; i < this.divs.length; i++) {
// div ,2
var temp = this.zb[i * 2]
this.zb[i * 2] = this.zb[i * 2 + 1];
this.zb[i * 2 + 1] = 3 - temp;
// left top
this.divs[i].style.top = ((this.y + parseInt(this.zb[i * 2])) * this.parentFrame.unit) + "px";
this.divs[i].style.left = ((this.x + parseInt(this.zb[i * 2 + 1])) * this.parentFrame.unit) + "px";
}
}
this.movedown = function() {
var $this = this =="window" ? this.frame.samlldiv : this;
if (canMove($this.zb, $this.x, $this.y, $this.parentFrame, 3)) {
$this.y += 1;
for (var i = 0; i < $this.divs.length; i++) {
var top = parseInt($this.divs[i].style.top);
$this.divs[i].style.top = (top + $this.parentFrame.unit) + "px";
}
return false;
} else {
clearInterval($this.parentFrame.intervalid);
// var temp = $this.parentFrame.Content.getElementsByTagName("div");
for (var i=0;i<$this.divs.length;i++) {
//div
//$this.divs[i].className ="smallDivblack";
var $y = $this.y + parseInt($this.zb[i*2]);
var $x = $this.x+parseInt($this.zb[i*2+1]);
// debugger;
$this.parentFrame.datas[$y*$this.parentFrame.row+ $x] =1;
$this.divs[i].dataset.row=$y; // div
$this.divs[i].dataset.col=$x; // div
$this.divs[i].className="smallDivblack";
$this.divs[i].style.backgroundColor="black";
//$this.parentFrame.datas[]
}
//
for (var i= 0;i<$this.parentFrame.col;i++) { //i
//
for (var j=0;j<$this.parentFrame.row;j++) { //j
if($this.parentFrame.datas[i*$this.parentFrame.row+ j] !=1){
break;
}
}
// , div
if(j==$this.parentFrame.row){
var x; // div
var y; // div
var getsmalldiv=document.getElementById("TFrime").getElementsByClassName("smallDivblack");// div
for (var a=0;a<getsmalldiv.length;a++){
y=parseInt(getsmalldiv[a].dataset.row);
x=parseInt(getsmalldiv[a].dataset.col);
if(y==i){ //
debugger;
$this.parentFrame.datas[y*$this.parentFrame.row+ x]=0;
getsmalldiv[a].remove();
a--;
}
}
for (var a=i-1;a>0;a--) {
for (var b=0;b<getsmalldiv.length;b++) {
y=parseInt(getsmalldiv[b].dataset.row);
x=parseInt(getsmalldiv[b].dataset.col);
if(y==a){ // div
// debugger;
var divtop=parseInt(getsmalldiv[b].style.top);
getsmalldiv[b].style.top=(divtop+$this.parentFrame.unit)+"px";
getsmalldiv[b].dataset.row++;
$this.parentFrame.datas[y*$this.parentFrame.row+ x]=0;
$this.parentFrame.datas[(y+1)*$this.parentFrame.row+ x]=1;
}
}
}
$this.line++;
// for (var a=0;a<getsmalldiv.length;a++) {
// y=parseInt(getsmalldiv[a].dataset.row);
// x=parseInt(getsmalldiv[a].dataset.col);
//// alert(getsmalldiv[a].dataset.row);
// if(y<i){ // div
//// debugger;
// var divtop=parseInt(getsmalldiv[a].style.top);
//// alert(getsmalldiv[a].style.top);
// getsmalldiv[a].style.top=(divtop+$this.parentFrame.unit)+"px";
// getsmalldiv[a].dataset.row++;
// debugger;
// $this.parentFrame.datas[y*$this.parentFrame.row+ x]=0;
// $this.parentFrame.datas[(y+1)*$this.parentFrame.row+ x]=1;
// }
//// }else if(y==i){ //
//// debugger;
//// $this.parentFrame.datas[y*$this.parentFrame.row+ x]=0;
//// getsmalldiv[a].className="MainFramediv";
//// }
// }
}
}
return true;
}
}
// function autoMoveDown() {
//
// var small = this.frame.samlldiv;
// var f = this.frame;
//
// if (canMove(small.zb, small.x, small.y, 0, f.col, 3)) {
// small.y += 1;
// for (var i = 0; i < small.divs.length; i++) {
// var top = parseInt(small.divs[i].style.top);
// small.divs[i].style.top = (top + f.unit) + "px";
// }
// } else {
// clearInterval(f.intervalid);
// }
//
// }
// ,action:1. ,2. ,3. ,4.
//zb 4 ,x ,y top ,f frame
function canMove(zb, x, y, f, action) {
//datas[parseInt(zb[i + 1]) + x + 1)+(this.y-1)*row] !=0
switch (action) {
case 1:
// debugger;
for (var i = 0; i < zb.length; i += 2) {
if (parseInt(zb[i + 1]) + x + 1 >= f.row)
{
return false;
}else if(f.datas[(parseInt(zb[i + 1]) + x + 1)+(y+parseInt(zb[i]))*f.row] !=0)
{
return false;
}
}
break;
case 2:
for (var i = 0; i < zb.length; i += 2) {
if (parseInt(zb[i + 1]) + x - 1 < 0 ) {
return false;
}else if(f.datas[(parseInt(zb[i + 1]) + x - 1)+(y+parseInt(zb[i]))*f.row] !=0)
{
return false;
}
}
break;
case 3:
for (var i = 0; i < zb.length; i += 2) {
if (parseInt(zb[i]) + y + 1 >= f.col ||
f.datas[(parseInt(zb[i + 1]) + x)+(parseInt(zb[i]) + y+1)*f.row] !=0) {
return false;
}
}
break;
case 4:
for (var i = 0; i < zb.length; i += 2) {
var temp = 3 - zb[i];
if (temp + x < 0 || temp + x >= f.row) {
return false;
}
}
break;
}
return true;
}
this.rescore=function(){
var gamescore=document.getElementById("score");
gamescore.innerHTML=parseInt(gamescore.innerHTML)+this.parentFrame.score[this.line];
}
}
index.js
var frame;
function initGame()
{
frame = new GameFrame(16,20,38);
frame.init();
document.body.addEventListener("keydown",MoveOrChange)
}
function changespeed(){
frame.changespeed();
}
function regame(){
location.reload();
}
function MoveOrChange()
{
switch(event.keyCode)
{
case 38: // ( )
frame.Change();
break;
case 37: //
frame.MoveLeft();
break;
case 39://
frame.MoveRight();
break;
case 40: //
frame.MoveDown();
break;
}
}
총결산위 에서 말 한 것 은 소 편 이 소개 한 JS 코드 를 사용 하여 러시아 블록 게임 을 실현 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.