写贪吃蛇,俄罗斯方块,这些4399小游戏l贪吃蛇对初学C的真必要吗

> 施用自主研发的小游戏框架开发的俄罗斯方块,贪吃蛇,连连看
施用自主研发的小游戏框架开发的俄罗斯方块,贪吃蛇,连连看
ljrchina & &
发布时间: & &
浏览:1 & &
回复:9 & &
悬赏:0.0希赛币
使用自主研发的小游戏框架开发的俄罗斯方块,贪吃蛇,连连看
最近利用业余时间,开发了几款最基本的J2ME小游戏程序,有俄罗斯方块,贪吃蛇,连连看等。对开发J2ME游戏以致游戏开发做了一些探索,自己研发了一个很小的J2ME游戏框架,暂时就命名为J2MEEngine了。由于开发J2ME游戏时间不长,仅2个月,而且都是自己摸索,所以框架暂时还非常简陋,只提供了一些J2ME游戏的常用的功能,计Canvas封装器,数据存取,文本文档读取,常用算法,短信发送等。而对于一般游戏引擎应该具有的图像的渲染,粒子特效,资源管理,网络服务,图形编辑器,场景管理,物理引擎等等还全都没有涉及。今后如果有时间的话,我会深入研究,然后慢慢填补上,毕竟俺不是专业开发游戏的。如果有哪位大牛愿意合作开发的话,可站短或者EMail联系我。通过对这几个小游戏的开发,基本摸清了游戏的开发思路,确实和一般的Java,J2EE程序在思路及模式上有较大的区别,而且游戏程序从实现上来说也更倾向于面向过程式编程。面向对象及设计模式在这里体现不出他们的威力,如果大量使用以上两者,常常还会不同程度上减缓程序的运行速度,这对于我这种长期使用纯粹的面向对象,设计模式进行设计和实现的javaer来说,确实是一种新的尝试。附件里是俄罗斯方块的源代码及可运行jar文件。仅仅是做了一个很简单的演示程序,图片是从腾讯QQ游戏中扒下来,自己使用windows附件里的画图程序修改的,呵呵。不过看起来已经非常专业了。此程序所有的绘图定位都做到了各种终端类型机通用,一套程序就可以在各种屏幕大小的手机上运行,为简单起见,仅开发了240x320,360x640屏幕机型的程序。在240x320屏幕大小下,使用KEmulator测试,运行时内存占用不到25k,其中图片加载大概是13k左右。
   先顶贴,再看.ljs8703 & &
12:37:25 & &
& & (0)(0)  下来看看,最近也在学j2me开发ljs0709 & &
12:37:25 & &
& & (0)(0)  @sharong代码下下来了,好像编译有问题,找不到那个引擎的包!ljs0709 & &
12:37:25 & &
& & (0)(0)  引擎的包目前还很不完善,呵呵,暂时还不打算发布,代码稍作修改应该就可以脱离引擎运行ljs0622 & &
12:37:25 & &
& & (0)(0)  一个通过百宝箱的射击游戏,代码近60个类,采用面向对象方法:多态,继承,封装都用了。游戏包大屏500多k,三星因为限制,砍到490k左右。中屏大概300多k, 程序上完全一样,缩图而已,7610完全不卡,e398有点卡,但能过。小屏就没做了。真机测试主流的20个机型系列通过:大屏1、 Nokia_N732、 Nokia_73703、 Moto_V84、 Moto_E6805、 Moto_E26、 SE_K7907、 SE_S7008、 SE_W9589、 KTouch_C80010、Sangsung_D60811、Lenovo_S96612、LG_KF510中屏13、Nokia_761014、SE_K70015、SE_K60016、SE_K75017、Panasonic_X80018、Moto_E39819、Moto_V60020、Moto_L7代码如果仅是通过模拟器检测,那还是不行的。用drawImage,还是drawRegion,总共用了几个线程,多少个匿名类等,很多机器直接出问题。你像readUTF8(),如果一次超过3k,e398就和你说bye bye了,用了绘图翻转,drawRegion在7610面前你就得卡晕,用了大量game包里的类(有些能用,有些绝对不能用),你的移植就不用考虑了,用了Image.create(Image,int x, y,width,height),在nokia面前,就会出些其他颜色。面向对象与面向过程,怎么样使用在j2me游戏中,还是很有研究的地方的。ljs198610 & &
12:37:25 & &
& & (0)(0)  是的,我也看了下,貌似编译通不过ljs_King & &
12:37:25 & &
& & (0)(0)  鸟哥哥 写道  一个通过百宝箱的射击游戏,代码近60个类,采用面向对象方法:多态,继承,封装都用了。游戏包大屏500多k,三星因为限制,砍到490k左右。中屏大概300多k, 程序上完全一样,缩图而已,7610完全不卡,e398有点卡,但能过。小屏就没做了。真机测试主流的20个机型系列通过:大屏1、 Nokia_N732、 Nokia_73703、 Moto_V84、 Moto_E6805、 Moto_E26、 SE_K7907、 SE_S7008、 SE_W9589、 KTouch_C80010、Sangsung_D60811、Lenovo_S96612、LG_KF510中屏13、Nokia_761014、SE_K70015、SE_K60016、SE_K75017、Panasonic_X80018、Moto_E39819、Moto_V60020、Moto_L7代码如果仅是通过模拟器检测,那还是不行的。用drawImage,还是drawRegion,总共用了几个线程,多少个匿名类等,很多机器直接出问题。你像readUTF8(),如果一次超过3k,e398就和你说bye bye了,用了绘图翻转,drawRegion在7610面前你就得卡晕,用了大量game包里的类(有些能用,有些绝对不能用),你的移植就不用考虑了,用了Image.create(Image,int x, y,width,height),在nokia面前,就会出些其他颜色。面向对象与面向过程,怎么样使用在j2me游戏中,还是很有研究的地方的。对于上面关于测试的研究,俺确实没有深入到这个程度,只是发现一套程序在不同的机器上,不同操作系统,或者即使相同的操作系统上跑,也会呈现完全不同的效果,例如白屏闪动,程序运行快慢之类的。但是我这里确实没有那么多机型进行测试,只能是使用cldc1.0,尽量不使用特殊方法了。另:问下,您是不是那个《鸟哥的linux私房菜》电子书的作者?ljs_1011 & &
12:37:25 & &
& & (0)(0)  算法上还需进一步优化,某些方块贴边翻转时,会卡,但主线程继续使方块的Y++ljs8703 & &
12:37:25 & &
& & (0)(0)  sharong 写道  鸟哥哥 写道  一个通过百宝箱的射击游戏,代码近60个类,采用面向对象方法:多态,继承,封装都用了。游戏包大屏500多k,三星因为限制,砍到490k左右。中屏大概300多k, 程序上完全一样,缩图而已,7610完全不卡,e398有点卡,但能过。小屏就没做了。真机测试主流的20个机型系列通过:大屏1、 Nokia_N732、 Nokia_73703、 Moto_V84、 Moto_E6805、 Moto_E26、 SE_K7907、 SE_S7008、 SE_W9589、 KTouch_C80010、Sangsung_D60811、Lenovo_S96612、LG_KF510中屏13、Nokia_761014、SE_K70015、SE_K60016、SE_K75017、Panasonic_X80018、Moto_E39819、Moto_V60020、Moto_L7代码如果仅是通过模拟器检测,那还是不行的。用drawImage,还是drawRegion,总共用了几个线程,多少个匿名类等,很多机器直接出问题。你像readUTF8(),如果一次超过3k,e398就和你说bye bye了,用了绘图翻转,drawRegion在7610面前你就得卡晕,用了大量game包里的类(有些能用,有些绝对不能用),你的移植就不用考虑了,用了Image.create(Image,int x, y,width,height),在nokia面前,就会出些其他颜色。面向对象与面向过程,怎么样使用在j2me游戏中,还是很有研究的地方的。对于上面关于测试的研究,俺确实没有深入到这个程度,只是发现一套程序在不同的机器上,不同操作系统,或者即使相同的操作系统上跑,也会呈现完全不同的效果,例如白屏闪动,程序运行快慢之类的。但是我这里确实没有那么多机型进行测试,只能是使用cldc1.0,尽量不使用特殊方法了。另:问下,您是不是那个《鸟哥的linux私房菜》电子书的作者?呵呵,我不是那个大牛。ljs_King & &
12:37:25 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&JS练习实例--编写经典小游戏俄罗斯方块 - 推酷
JS练习实例--编写经典小游戏俄罗斯方块
最近在学习JavaScript,想编一些实例练练手,之前编了个贪吃蛇,但是实现时没有注意使用面向对象的思想,实现起来也比较简单所以就不总结了,今天就总结下俄罗斯方块小游戏的思路和实现吧(需要下载代码也是有的),我会说得很详细很详细的所以要看完需要好多耐心的。。。
游戏区域:游戏区域是固定的,这里将它设为宽10单位,高16单位的矩形区域,前端显示用表格来实现,并将每个td保存在一个二维数组中,用于渲染游戏过程。
方块:方块有7种形状,用一个4*4的矩阵来保存方块的形状;按方向上键方块可以旋转,可通过矩阵旋转来实现;方块可以左右移动,需要判断是否出界机左右是否已有方块;还需注意判断方块是否已经触底。按方向下键方块可以速降。
分数:在每一次方块降落完成后判断能否得分。
这部分下文有用上在回来看就行,现在看可能有点混乱( ???)? 。
block_now, block_ 当前,下一方块对象,将block_next赋值给block_now,再创建新方块后赋值给block_next。
beforeBlock:16*10的矩阵 方块上一时刻的位置,用于擦除上一秒
allBlock: 16*10的矩阵 已完成方块
ground:16*10的游戏区域,获取DOM,渲染游戏区域
实现这个游戏的最核心就在于这个方块类了,我们将创建一个方块类型,然后7种形状的方块继承这个方块类。
方块类的属性
方块的实例属性有:移动方向,状态,形状,当前位置,颜色。
function Block() {
this.dir = 40;//方块当前移动方向
this.end = 0;//状态,是否下落完成
this.shape = new Array();//4*4的方块
for (var i = 0; i & 4; i++) {
this.shape[i] = new Array();
this.pos = [0, 3];//所在行,列
this.color = [&#FFAEC9&, &#B5E61D&, &#99D9EA&, &#C8BFE7&, &#B97A57&];
这里先明确一下方块和形状的关系哈,后面经常用上这个概念。如下,4*4的矩阵我把它叫“方块”然后有颜色(绿色)的部分我叫它形状。
7种方块子类
function Block_i() {
Block.call(this);
this.shape = [
[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
Block_i.prototype = new Block();
其他形状与上面类似:
s : [[0, 1, 1, 0],[1, 1, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
j : [[0, 1, 0, 0],[0, 1, 0, 0],[1, 1, 0, 0],[0, 0, 0, 0]];
o : [[1, 1, 0, 0],[1, 1, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
z : [[1, 1, 0, 0],[0, 1, 1, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
t : [[0, 1, 0, 0],[1, 1, 1, 0],[0, 0, 0, 0],[0, 0, 0, 0]];
l : [[1, 0, 0, 0],[1, 0, 0, 0],[1, 1, 0, 0],[0, 0, 0, 0]];
方块类的方法
方块类的方法有:旋转方块,移动方块,速降方块,打印方块
1.旋转方块时我们先将矩阵顺时针旋转90度
for(var i = 0,dst = 3;i & 4;i++, dst--){
for(var j = 0;j & 4;j++)
tmp[j][dst] = this.shape[i][j];
2.再将旋转后的图像移到矩阵左上角,这样可以表现出在原地旋转的效果。
for(var i = 0;i & 4;i++){
var flag = 1;
for(var j = 0;j & 4;j++){//判断第一列是否有图像
if (tmp[j][0]) {
if (flag) {//第一列没图像,将第一列移除,并在最后添一列空白
for(var j = 0;j & 4;j++){
tmp[j].shift();
tmp[j].push(0);
3.最后将旋转后的矩阵保存回原来的矩阵
用户按方向下键,方块将直接降落完成。这个步骤我纠结了挺久的,最后用了个比较笨的方法吧,这里简单说下原理,具体可以下载源码看看。
1.先算出方块矩阵中有形状的内容的右边界和下边界(因为我们已经将图案放在左上角了所以不用求左上边界ヾ( ̄▽ ̄)),比如s形的方块右边界是3,下边界是2这样。这个用两个循环就能实现了。
2.判断形状(注意是形状)的正下方有没有方块(检查allBlock)
下方有方块时:
(1)计算当前形状下边界的块对应下方的块的距离y,如图
(2)计算下方最顶方块距离上方块对应位置距离x,如图
(3)取两个距离中较小的距离为方块垂直移动距离,移动方块。并将方块状态修改。
下方没有方块时,方块降至最低,计算距离时,记得得加上方块底部与形状底部的距离。并将方块状态修改。
用户通过键盘方向键来移动方块:左(37) 上(38) 右(39) 下(40)括号内为键码。
对键盘事件进行监听:
用this.dir记录方块当前移动方向。
当用户按上键时,调用旋转方块函数;
按左右时,将方块所在列(this.pos[1])加或减1;
按下键时,调用速降方块函数。 最后打印方块(判断是否出界等问题在打印方块步骤)
判断待打印方块是否超出边界
判断要渲染(给形状上色)的地方是否已经有方块了
擦除上一时刻方块
绘制这一时刻方块
若方块下落完毕(this.end = 1),将方块加入到已下落方块矩阵(allBlock)中
好啦!完成到这步就胜利在望了,撒花ヾ( ̄▽ ̄)~
用两个随机数随机产生方块形状和颜色:
function createBlock(r1, r2) {
// var r = 0;
switch (r1) {
case 0: block_new = new Block_i();
case 1: block_new = new Block_j();
case 2: block_new = new Block_l();
case 3: block_new = new Block_o();
case 4: block_new = new Block_s();
case 5: block_new = new Block_t();
case 6: block_new = new Block_z();
block_new.color = block_new.color[r2];
return block_
2.生产分数
在每次打印方块时都判断一下是否可以得分消去。
若可以得分,就将allBlock中该行删除(splice),并在最开始位置加上一行空白行([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
然后在ground中,将该行样式变为上一行样式,以此类推。呈现出消去该行的效果。
3.记录最高分
我还弄了个用cookie记录最高分的功能,每次得分时判断下是否为最高分,并显示,具体还是看代码啦。
最后付上代码
差不多啦,恩恩去吃饭。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致复制地址:
小游戏,大乐趣
1.按键操作
方向键←→控制移动;方向键↑旋转;方向键↓加速下落;ESC键弹出菜单。
2.如何开始
点击界面,选择关卡游戏开始。
3.游戏目标
解开俄罗斯方块中的奥秘吧!
7K7K网页游戏
7K7K儿童游戏
法律顾问:北京市诺恒律师事务所
京公网安备37
游戏作品版权归原作者享有,如无意之中侵犯了您的版权,请您按照来信告知,本网站将应您的要求删除。
7k7k小游戏温馨提示:适度游戏娱乐,沉迷游戏伤身,合理安排时间,享受快乐生活……
该游戏已收藏}

我要回帖

更多关于 贪吃蛇小游戏下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信