JavaScript基础--超级玛丽(七)(上下左右控制)

相信大家都玩过超级玛丽,下面实现控制玛丽的上、下、左、右等基本功能,本篇只是在练习JavaScript的用法

1、创建一个HTML页面


  1 <!doctype html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="Generator" content="EditPlus?">
6 <meta name="Author" content="">
7 <meta name="Keywords" content="">
8 <meta name="Description" content="">
9 <title>Document</title>
10 <link href="Mario.css" type="text/css" rel="stylesheet" />
11 <script language="javascript" type="text/javascript">
12 //设计Mario类
13 function Mario(){
14 this.x =0;
15 this.y =0;
16 this.mymario = document.getElementById(‘mymario‘);
17 this.move = function(direct){
18 switch(direct){
19 case 0:
20 //window.alert("mario上移动");
21 upControl(mymario);
22 break;
23 case 1:
24 //这里为了改变img的left和Top值,需要先要得到img这个元素
25 //var mymario =document.getElementById(‘mymario‘);
26 rightControl(mymario);
27 break;
28 case 2:
29 //window.alert("mario下移动");
30 downControl(mymario);
31 break;
32 case 3:
33 //window.alert("mario左移动");
34 leftControl(mymario);
35 break;
36 }
37 }
38 }
39
40 //创建Mario对象
41 var mario = new Mario();
42 //创建计数器,计算一行是否走到边界处。
43 var countWidth = 0;
44 //全局函数
45 function marioMove(direct){
46 switch(direct){
47 //0表示向上走
48 case 0:
49 mario.move(direct);
50 break;
51 //1表示向右走
52 case 1:
53 mario.move(direct);
54 break;
55 //2表示向下走
56 case 2:
57 mario.move(direct);
58 break;
59 //3表示向左走
60 case 3:
61 mario.move(direct);
62 break;
63 }
64 }
65
66
67 //控制向右的方法
68 function rightControl(mymario){
69 //countWidth判断Mario是否可以前进的条件,450表示已走到X轴的最后位置,再继续走要超出div层
70 if(countWidth<450){
71 //获取mario的img元素的left属性:9px
72 //截取left属性的px,并把值转换成整型
73 var left = window.leftPosition(mymario);
74 //mario每次前进150px,并把累加的值 赋给img的left属性
75 mymario.style.left = (left+150) + "px";
76 //计数器,每次累加的结果保存在计数器中,用于判断一行是否结束
77 countWidth+=150;
78 }else{
79 //获取当前mario图片的高度
80 y = window.heightPosition(mymario);
81 //获取图片相对于浏览器上边界的高度
82 var top = window.topPosition(mymario);
83 //判断mario是否走到div的最后一行的尽头了,如果没有,就继续一行一行往下走
84 //359px是y轴坐标,如果超过359px,表示mario的y轴坐标再加70px,div的底层坐标就是359px
85 if(top < 359){
86 //y轴坐标每次加70px,sum完后放在top属性中
87 mymario.style.top = y + top + "px";
88 //每行的x轴坐标都是从9px开始的
89 mymario.style.left = "9px";
90 //重置计数器,用于判断x轴的是否可以继续的条件,换行后计数器要清零,否则计数器的值还为450;
91 countWidth = 0;
92 }else{
93 window.alert("游戏结束了");
94 //判断mario已走到了尽头(最后一行和最后一列的位置),重置游戏起始位置
95 mymario.style.top = "9px";
96 mymario.style.left = "9px";
97 }
98
99 }
100 }
101
102 //向下移动
103 function downControl(mymario){
104 var top = window.topPosition(mymario);
105 y = window.heightPosition(mymario);
106 if(top <359){
107 mymario.style.top = y + top + "px";
108 }else{
109 window.alert("到底了,再往下就掉下去了!");
110 }
111 }
112
113 //向上移动
114 function upControl(mymario){
115 var top = window.topPosition(mymario);
116 var height = window.heightPosition(mymario);
117 if(top >9){
118 mymario.style.top = (top -height) + "px";
119 }else{
120 window.alert("到顶了,在往上头就碰这天花板了!");
121 }
122 }
123
124 //向左移动
125 function leftControl(mymario){
126 //设置初始位置(从图片的最后一行开始,而不是Div的。最后一行一列位置是left=459px,top=359px)
127 //向左移动
128 var left = window.leftPosition(mymario);
129 var top = window.topPosition(mymario);
130 var height = window.heightPosition(mymario);
131 //判读是否左移动到边界处,边界位置left ==9
132 if(left > 9){
133 //继续左移动
134 mymario.style.left = (left - 150) + "px";
135 }else{
136 //判读是否到达游戏开始位置
137 if(left - top !=0){
138 //退回上一行的最后一列的位置:left = 459px的位置,left相当于x轴
139 mymario.style.left ="459px";
140 //退回上一行的最后一行的位置:top-height的位置,top 相当于y轴
141 mymario.style.top = (top - height) + "px";
142 }else{
143 window.alert("已回到开始位置!");
144 }
145 }
146 }
147
148 //获取img元素top属性
149 var topPosition =function(mymario){
150 var top = mymario.style.top;
151 top = window.removeSuffixAndToInt(top);
152 return top;
153 }
154
155 //获取img元素的left属性
156 var leftPosition = function(mymario){
157 var left = mymario.style.left;
158 left = window.removeSuffixAndToInt(left);
159 return left;
160 }
161
162
163 //获取img元素的height
164 var heightPosition = function(mymario){
165 var height = mymario.style.height;
166 //height = parseInt(height.substr(0,height.length-2));
167 height = window.removeSuffixAndToInt(height);
168 return height;
169 }
170
171 //截取字符串并转换整型,把字符串后面的px去掉
172 var removeSuffixAndToInt = function(imgStyleAttribute){
173 //接受传过过来的坐标值(字符串),例如:79px,去掉px,再把字符串79转换成整型
174 var imgAttriIntValue=parseInt(imgStyleAttribute.substr(0,imgStyleAttribute.length-2));
175 return imgAttriIntValue;
176 }
177
178 //注意:被调用的方法名不能与HTML元素里的属性相同,否则调用是方法名跟属性名冲突,被调方法不起任何作用
179 //在谷歌浏览器是不能这样调用的,但是在IE中这样的是可以,由于IE浏览器支持的JavaScript语法属于弱类型,所以
180 //在IE是可用的
181 </script>
182 </head>
183
184 <body>
185 <div class="gamediv">
186 <img id="mymario" style="height:70px;width:50px;left:9px;top:9px;position:absolute;" src="mario.jpg"/>
187 </div>
188
189 <table border="1px" class="controlcenter">
190 <tr><td colspan="3">游戏键盘</td></tr>
191 <tr><td>**</td><td><input type="button" value="↑" onclick="marioMove(0)"/></td><td></td></tr>
192 <tr><td><input type="button" value="←" onclick="marioMove(3)"/></td><td>**</td><td><input type="button" value="→" onclick="marioMove(1)"/></td></tr>
193 <tr><td>**</td><td><input type="button" value="↓" onclick="marioMove(2)"/></td><td></td></tr>
194 </table>
195 </body>
196 </html>

实现控制Mario的基本功能(上、下、左、右)

2、创建一个名为Mario.css


 1 .gamediv{
2 width:500px;
3 height:420px;
4 background-color:pink;
5 /*position:absolute;*/
6 }
7
8 /*表格样式*/
9 .controlcenter{
10 width:200px;
11 height:100px;
12 border:1px solid black;
13 }

3、在网页中显示:

时间: 2024-10-16 23:06:41

JavaScript基础--超级玛丽(七)(上下左右控制)的相关文章

Unit04: JavaScript 概述 、 JavaScript 基础语法 、 流程控制

Unit04: JavaScript 概述 . JavaScript 基础语法 . 流程控制 my.js function f3() { alert("唐胜伟"); } demo1.html  演示点击按钮,弹出提示框 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <

JavaScript基础(七)

JavaScript基础(七) 将日期对象转化为毫秒的方式(了解) 知道日期对象可以转换为毫秒: 显示的是距离1970-1-1之间的时间转换为毫秒的形式 console.log(date.getTime()); // 推荐方式 console.log(+date); // 也可以记忆这个 console.log(Date.now()); console.log(date.valueOf()); console.log(Date.parse('2018-7-5')); 内置对象数组 基本操作方法(

JavaScript 基础第七天(DOM的开始)

一.引言 JavaScript的内容分为三个部分,这三个部分分别是ECMAScript.DOM.BOM三个部分组成.所谓ECMAScript就是JavaScript和核心基础语法,DOM是文档对象模型,最后剩下的BOM则是浏览器对象模型.这三个部分相辅相成组成了现在的JavaScript. 二.导入 前面几天我们学习就是有关有ECMAScript即基础语法部分,从今天开始我们将开始接触文档对象模型,做好准备.let's Go! 三.重点内容 ① 什么是DOM: DOM= Document Obj

Javascript基础篇小结

Javascript基础篇小结 字数9973 阅读3975 评论7 喜欢28 转载请声明出处 博客原文 随手翻阅以前的学习笔记,顺便整理一下放在这里,方便自己复习,也希望你有也有帮助吧 第一课时 入门基础 知识点: 操作系统就是个应用程序 只要是应用程序都要占用物理内存 浏览器本身也是一个应用程序 浏览器本身只懂得解析HTML 调用浏览器这个应用程序的一个功能绘制 1.javascript介绍 JavaScript操作DOM的本质是=获取+触发+改变 目的:就是用来操作内存中的DOM节点 修改D

【JavaScript基础入门】总结目录

一.JavaScript基础 1.1JavaScript概述 1.2如何使用的JavaScript 1.3JavaScript基本语法 1.4JavaScript数据类型 1.5JavaScript运算符 1.6JavaScript变量作用域和生命周期 1.7输出语句 二.JavaScript流程控制 三.JavaScript字符串和数组 3.1字符串 3.2数组 四.对象和函数 4.1对象 4.2对象的原型 4.3函数 4.4函数参数 五.JavaScript错误处理 六.JavaScript

javascript基础修炼(7)——Promise,异步,可靠性

开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一. 别人是开发者,你也是 Promise技术是[javascript异步编程]这个话题中非常重要的,它一度让我感到熟悉又陌生,我熟悉其所有的API并能够在编程中相对熟练地运用,却对其中原理和软件设计思想感到陌生,即便我读了很多源码分析和教程也一度很难理解为什么Promise这样一个普通的类能够实现异步,也曾尝试着去按照Promise/A+规范来编写Promise,但很快便陷入了一种更大的混乱之中.直到我接触到一些软

javascript基础学习(十五)

javascript之cookie 学习要点: cookie介绍 创建与获取cookie cookie的编码 cookie的生存期 cookie的路径 cookie的domain cookie的secure 一.cookie介绍 cookie实际上就是一些信息,这些信息以文件的形式存储在客户端计算机上.在javascript中,cookie主要用来保存状态,或用于识别身份. 二.创建与获取cookie 创建cookie的语法代码如下所示:document.cookie="name=value&q

javascript基础学习(八)

javascript之日期对象 学习要点: 日期对象 将日期对象转换为字符串 将日期对象中的日期和时间转换为字符串 日期对象中的日期 日期对象中的时间 设置日期对象中的日期 设置日期对象中的时间 与毫秒相关的方法 一.日期对象 在javascript中并没有日期型的数据类型,但是提供了一个日期对象可以操作日期和时间. 日期对象的创建: new Date(); 二.将日期对象转换为字符串 将日期对象转换为字符串可以使用以下4种方法: date.toString();//将日期对象转换为字符串时,采

javascript基础学习(二)

javascript的数据类型 学习要点: typeof操作符 五种简单数据类型:Undefined.String.Number.Null.Boolean 引用数据类型:数组和对象 一.typeof操作符 typeof操作符用来检测变量的数据类型,操作符可以操作变量也可以操作字面量. 对变量或值运用typeof操作符得到如下值: undefined----如果变量是Undefined类型: boolean-------如果变量是Boolean类型: number-------如果变量是Numbe