用js做一个小游戏平台 (一)


Posted in Javascript onDecember 29, 2009

记得上班写代码时,我们技术总监总说是要先“设计”,那就先“设计”吧。
ps:我是新手大家多多见谅。

.网页游戏区域。就是说需要知道游戏在网页上的区域,如下:
在网页中插入一个div,设定宽高和id,
<div id="GameFrame" style="width:400;height:400"></div>
然后再js中得到该对象,
var _GameFrame = document.getElementById("GameFrame");

.键盘参数对象:在游戏中会经常获取键盘的值,设定一个键值对应的对象:
var _KeyParameters = { KeyEnter: 13, KeySpace: 32, KeyLeft: 37, KeyUp: 38, KeyRight: 39, KeyDown: 40, KeyESC: 27 };

.标签控制对象:用于控制、产生html标签,辅助生成对应样式的"控件":

var _HtmlControl = 
{ 
//清空网页游戏区域 
_ClearArea: function() { 
}, 
//创建一个div 
newDiv: function() { 
var div = document.createElement("div"); 
return div; 
}, 
//创建一个指定宽高的按钮样式标签 
newButton: function(w, h) { 
var div = this.newDiv(); 
div.style.width = w + "px"; 
div.style.height = h + "px"; 
div.select = function() { 
//被选中时的变化 
}; 
div.unselect = function() { 
//没选中时的样子 
}; 
return div; 
} 
//继续... 
};

.动画类:用于播放一些游戏跳转动画:

var Animation = function(endFn) { 
//播放动画 
this._play = function() { 

//具体怎么放没有想好。 
}; 
//播放结束事件 
this._palyEnd = endFn || function() { 
alert("动画播放结束"); 
}; 
};

.游戏类:要有一个游戏名,
a.控制:1.逻辑控制、2.键盘控制
b.主界面:1.标题、2.游戏区域、3.状态显示区、4.控制区
c.动画:1.开场动画、2.过关动画、3.通关动画
d:事件:1.开始、2.结束。

代码大致如下:
代码

var Game = function(name, logicalFn, keyFn) { 
//游戏名 
this._name = name || "未命名"; 
this._LControl = logicalFn || function() { 
//简单游戏逻辑控制 
}; 
this._KControl = keyFn || function(event) { 
//简单键盘逻辑 
}; 
//开场动画 
this._AnmLoad = new Animation(null); 
//过关动画 
this._AnmNext = new Animation(null); 
//通关动画 
this._AnmEnd = new Animation(null); 
};

.游戏列表:就是游戏类的对象列表。

.游戏选择器:可以是一个游戏类对象。
var _GameChoose = new Game("选择器", null, null);
.页面控制:用于注册页面事件,接受用户响应,并传递给游戏选择器;
代码

var _PageControl = { 
//8.a:线程控制 
_ThreadControl: function() { 
_GameChoose._LControl(); 
}, 
//8.b:键盘控制 
_KeyControl: function(event) { 
_GameChoose._KControl(event); 
}, 
//8.cc.事件注册 
_StartRegedit: function() { 
//把this._ThreadControl添加到循环线程 
//把this._KeyControl注册到document的键盘单击 
} 
}

最后,到了这一步,貌似就“设计”完了?暂且不管这是不是设计,姑且说是一种边敲代码边设计的设计吧。不过貌似真的就可行了。当然它现在是不能运行的。我们先把总体代码贴出来看一下:
整体代码

<script type="text/javascript"language="javascript"> 
/*** 
* 1.网页游戏区域: 
* 2.键盘参数类 
* 3.标签类:用于控制、产生html标签 
* 4.动画类:播放动画,播放结束事件 
* 5.游戏类:游戏名 
* a.控制:1.逻辑控制、2.键盘控制 
* b.主界面:1.标题、2.游戏区域、3.状态显示区、4.控制区 
* c.动画:1.开场动画、2.过关动画、3.通关动画 
* d:事件:1.开始、2.结束 
* 6.游戏列表 
* 7.游戏选择器 
* 8.页面控制:a.线程控制、b.键盘控制、c.事件注册 
***/ window.onload = function() { 
//---------------------------------------------------- 
//1.网页游戏区域: 
var _GameFrame = document.getElementById("GameFrame"); 
//---------------------------------------------------- 
//2.键盘参数类:可以根据需要把键值添加进来 
var _KeyParameters = { KeyEnter: 13, KeySpace: 32, KeyLeft: 37, KeyUp: 38, KeyRight: 39, KeyDown: 40, KeyESC: 27 }; 
//---------------------------------------------------- 
//3.标签类:用于控制、产生html标签 
var _HtmlControl = 
{ 
//清空网页游戏区域 
_ClearArea: function() { 
}, 
//创建一个div 
newDiv: function() { 
var div = document.createElement("div"); 
return div; 
}, 
//创建一个指定宽高的按钮样式标签 
newButton: function(w, h) { 
var div = this.newDiv(); 
div.style.width = w + "px"; 
div.style.height = h + "px"; 
div.select = function() { 
//被选中时的变化 
}; 
div.unselect = function() { 
//没选中时的样子 
}; 
return div; 
} 
//继续... 
}; 
//---------------------------------------------------- 
//4.动画类:播放动画,播放结束事件 
var Animation = function(endFn) { 
//播放动画 
this._play = function() { 
}; 
//播放结束事件 
this._palyEnd = endFn || function() { 
alert("动画播放结束"); 
}; 
}; 
//---------------------------------------------------- 
//5.游戏类: 
var Game = function(name, logicalFn, keyFn, startFn, endFn) { 
//游戏名 
this._name = name || "未命名"; 
//5.a.1:逻辑控制 
this._LControl = logicalFn || function() { 
//简单游戏逻辑控制 
}; 
//5.a.2:键盘控制 
this._KControl = keyFn || function(event) { 
//简单键盘逻辑 
}; 
//5.b.1:标题区域 
this._FrameTitle; 
//5.b.2:游戏区域 
this._FrameMain; 
//5.b.3:状态显示区 
this._FrameState; 
//5.b.4:控制区 
this._FrameControl; 
//5.c.1:开场动画 
this._AnmLoad = new Animation(null); 
//5.c.2:过关动画 
this._AnmNext = new Animation(null); 
//5.c.3:通关动画 
this._AnmEnd = new Animation(null); 
//5.d.1:开始 
this._Start = startFn || function() { 
alert("游戏开始"); 
}; 
//5.d.2:结束 
this._End = endFn || function() { 
alert("游戏结束"); 
}; 
}; 
//---------------------------------------------------- 
//创建游戏 
var game1 = new Game("贪吃蛇", null, null); 
var game2 = new Game("俄罗斯方块", null, null); 
var game3 = new Game("推箱子", null, null); 
var game4 = new Game("赛车", null, null); 
var game5 = new Game("坦克大战", null, null); 
//---------------------------------------------------- 
//6.游戏列表 
var _GameList = [game1, game2, game3, game4, game5]; 
//---------------------------------------------------- 
//7.游戏选择器 
var _GameChoose = new Game("选择器", null, null); 
//---------------------------------------------------- 
//8.页面控制: 
var _PageControl = { 
//8.a:线程控制 
_ThreadControl: function() { 
_GameChoose._LControl(); 
}, 
//8.b:键盘控制 
_KeyControl: function(event) { 
_GameChoose._KControl(event); 
}, 
//8.cc.事件注册 
_StartRegedit: function() { 
//把this._ThreadControl添加到循环线程 
//把this._KeyControl注册到document的键盘单击 
} 
} 
//---------------------------------------------------- 
} 
</script> 
<div id="GameFrame" style="width:400;height:400"> 
</div>

就先这样吧,明天再让它运行一下,顺便设计一下第一个游戏:贪吃蛇。
用同事的一句话喊一下口号:不做权限设计,做全国最好的贪吃蛇,汗一个...
Javascript 相关文章推荐
用jQuery模拟页面加载进度条的实现代码
Dec 19 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
Nov 25 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
Apr 03 Javascript
被遗忘的javascript的slice() 方法
Apr 20 Javascript
JS制作手机端自适应缩放显示
Jun 11 Javascript
基于jquery实现复选框全选,反选,全不选等功能
Oct 16 Javascript
10个JavaScript中易犯小错误
Feb 14 Javascript
浅谈Webpack 持久化缓存实践
Mar 22 Javascript
koa-router源码学习小结
Sep 07 Javascript
Vuejs监听vuex中值的变化的方法示例
Dec 02 Javascript
JavaScript中的ES6 Proxy的具体使用
Jun 16 Javascript
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
js 学习笔记(三)
Dec 29 #Javascript
js DOM模型操作
Dec 28 #Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
Dec 28 #Javascript
javascript iframe编程相关代码
Dec 28 #Javascript
通过javascript设置css属性的代码
Dec 28 #Javascript
JavaScript的public、private和privileged模式
Dec 28 #Javascript
Javascript 面向对象特性
Dec 28 #Javascript
You might like
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
使用淘宝IP库获取用户ip地理位置
2013/10/27 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
javascript模拟的Ping效果代码 (Web Ping)
2011/03/13 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
Vuex的actions属性的具体使用
2019/04/14 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Django框架 信号调度原理解析
2019/09/04 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
一年级班主任寄语
2014/01/19 职场文书
商务考察邀请函范文
2014/01/21 职场文书
公司薪酬管理制度
2014/01/31 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
产品售后服务承诺书
2014/05/21 职场文书
学习保证书100字
2015/02/26 职场文书
2015年前台个人工作总结
2015/04/03 职场文书
工商行政处罚决定书
2015/06/24 职场文书
食堂卫生管理制度
2015/08/04 职场文书
Python爬虫:从m3u8文件里提取小视频的正确操作
2021/05/14 Python
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android