看完之前的几篇面向对象的介绍,至少也应该了解了其工作原理和简单的用法,那么本章将做一个实例演示一下使用面向对象是如何制作小游戏的。
要求:要制作的马里奥是一个会按照你按键的方向移动。
分析思路:
1、如何通过按钮来控制 Mario 的位置
2、设计相关的对象( Mario 的坐标 x , y)
3、给每个按键设置点击事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>马里奥Mario 小游戏</title>
<style>
.gameDiv{
width: 1000px;
height: 500px;
background: slategray;
}
#marioImg{
position: relative;
width: 60px;
left: 0;
top: 0;
}
.control{
width: 150px;
height: 150px;
border:2px solid #cccccc;
text-align: center;
}
</style>
<script>
//设计Mario 的类
function Mario(){
this.x = 0;
this.y = 0;
// 向上移动 0-->上 ,1-->右 ,2-->下 , 3--左
this.move = function(derect){
//这里为了改变 img 的 left 和 top,我们要得到 img 元素
var marioImg = document.getElementById('marioImg');
//用getComputedStyle,currentStyle来获取图片 marioImg 的属性
var marioStyleInfo = window.getComputedStyle ? window.getComputedStyle(marioImg,"") : marioImg.currentStyle;
switch(derect){
case 0:
//把获取得到的top属性值 赋值给变量 top,但是注意此变量的值是“30px”,我们要把它变为30才可以相加减
var top = marioStyleInfo.top;
//先解析字符串'30px',并返回一个整数30px,然后再用substr()指定下标抽取字符30
top = parseInt(top.substr(0,top.length-2));
marioImg.style.top = (top - 10) + 'px';
break;
case 1:
var left = marioStyleInfo.left;
left = parseInt(left.substr(0,left.length-2));
marioImg.style.left = (left + 10) + 'px';
break;
case 2:
var top = marioStyleInfo.top;
top = parseInt(top.substr(0,top.length-2));
marioImg.style.top = (top + 10) + 'px';
break;
case 3:
var left = marioStyleInfo.left;
left = parseInt(left.substr(0,left.length-2));
marioImg.style.left = (left - 10) + 'px';
break;
}
};
}
//创建Mario 对象
var mario = new Mario(); //实例化
</script>
</head>
<body>
<h3>分析思路:</h3>
<ul>
<li>如何通过按钮来控制Mario 的位置</li>
<li>设计相关的对象(Mario 的坐标 x , y)</li>
<li>给每个按键设置点击事件</li>
</ul>
<div class="gameDiv">
<img id="marioImg" class="marioGif" src="mario.gif"/>
</div>
<table class="control">
<tr>
<td colspan="3">游戏键盘</td>
</tr>
<tr>
<td></td>
<td><input type="button" value="↑" onclick="mario.move(0)"></td>
<td></td>
</tr>
<tr>
<td><input type="button" value="←" onclick="mario.move(3)"></td>
<td><input type="button" value="↓" onclick="mario.move(2)"></td>
<td><input type="button" value="→" onclick="mario.move(1)"></td>
</tr>
</table>
</body>
</html>
通过上面简单的代码,实现点击按键控制马里奥的移动(在网上随便照一张移动的马里奥的gif图片插入 src 中),其实现原理就是通过面向对象编程,让多余的代码少量化,要操作的方向都在一个函数里面,通过点击的不同按键传递不同的参数 derect 实现。
如果完成上面的简单马里奥的移动,那我们来加深一下难度,完成一个贪吃蛇的游戏如何?