`
javatar
  • 浏览: 1685521 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

圣诞俄罗斯 - 响应J2ME圈子

阅读更多
哈,今天是圣诞节,先在这里祝各位圣诞快乐!
顺便,就把这个东东叫圣诞俄罗斯了,呵呵。

星期五说好写一个俄罗斯方块的Demo,响应J2ME圈子,
主要说明Model和View的分离,使Model通用可移稙。
这个周未全捐给这个小东东上了。

功能很简单,而且还有很多没实现,
道具功能没做完,网络版没写完等。
只在基本能运行了,
周未时间太短了,我已加大马力在写,还是心有余而力不足。
呵,本来要早上发上来的,
谁知一上班就被泰国那破服务器给整上了,现在才忙完。

只有纯文本的java的txt等,没有图片,声音文件等,所以很小。
也不依赖任何jar包,只要jdk1.4就够了。
界面是抄QQ的火拼俄罗斯,没侵权吧。

开发环境:Eclipse
运行环境:jdk1.4以上
运行命令:
bin/单人版.bat
bin/对战版.bat
bin/网络版.bat
没做完,也懒得打成jar了。
  • 大小: 72 KB
  • 大小: 55.1 KB
分享到:
评论
8 楼 javatar 2006-12-27  
看过你的程序了。大概清楚怎么回事了,thanks!
只是现在没空纠缠这些API细节了,我更关注于设计,呵呵。
有空把自己的思路写一下,给这么一个没价值的程序留点记忆。
7 楼 fins 2006-12-26  
没那么复杂

你可以看看我那个小程序
虽然是大学时写的 漏洞也很多
但是思路是一样的
就是在主线程的while里调用 或者其他任何一个调用repain之前的地方调用
6 楼 javatar 2006-12-26  
fins 写道

常用的方法是这样的:

做一个按键映射类 这个类大概是这样(伪代码)

class MyKey {   
  boolean left=false;   
  boolean right=false;   
  ... ...    
}   


游戏如果有两个人 那么有两个 该类的对象 mykeyP1 ,mykeyP2
当玩家1按 "左"的时候 myKeyP1.up=true;
当玩家1放开 "左"的时候 myKeyP1.up=false;

当玩家2按(keyPressed) "左"的时候 myKeyP2.up=true;
当玩家2放开(keyReleased) "左"的时候 myKeyP2.up=false;

在游戏主程序中 游戏事件(例如方块左右移动)
不是直接由 java提供的KeyListener 来触发
而是有一个进程(通常就是游戏的主进程)在轮寻 所有的MyKey对象
然后根据他们的状态来决定动作

而java的 KeyListener 触发的是 MyKey对象 的状态的改变

其实我前一阵发的那个我大学时做的那个小游戏就用了类似的方法


太感谢你了,提供这么好的思路。
是应该想办法绕开系统的KeyEvent,自己定制规则。


fins 写道

而是有一个进程(通常就是游戏的主进程)在轮寻 所有的MyKey对象

还要考虑下,
如果主进程在不停的做事,和其它应用交互就会成问题,而且对系统repaint也会形成阻塞,除非全屏,不许用户离开。
其实用单任务作业的系统上时,才会用for轮寻.

哦,可能是我理解错了你的轮寻,总以为是for
在C#里面,可以向系统申请尽快重绘(而不是自己for循环调用),以达到递归轮寻。
这样也是不错的主意。可Java我没找到这样的API(知道的请指教一下)。

我的想法是java.awt.Robot可能可以帮上点忙,待研究。
5 楼 fins 2006-12-26  
javatar 写道
先问个小问题:

以前在文曲星中,我们都是通过直接POKE键盘内存映像,使其产生假的按键值。Java中不能操作内存,不知怎么处理。



做过文曲星相关开发? 厉害 呵呵
看了你的代码 写的很好啊
我就不行了 啥模式都不会
向你学习

4 楼 fins 2006-12-26  
再补充一下 上面的这个思路 其实是学习自一些很古老的 j2me游戏
midp1.0 时代的手机 不支持同时按下两个按键 这时候就可以通过上面的方法来实现

后来我看了很多相关的资料 即使不在j2me上 不在"不支持同时按下两个按键"的机器上 这种方法也是一个很好的按键处理机制
除了有效避免案件冲突外 还可以很好的做到 让游戏主体与运行平台的事件机制解耦

3 楼 fins 2006-12-26  
常用的方法是这样的:

做一个按键映射类 这个类大概是这样(伪代码)
class MyKey {
  boolean left=false;
  boolean right=false;
  ... ... 
}

游戏如果有两个人 那么有两个 该类的对象 mykeyP1 ,mykeyP2
当玩家1按 "左"的时候 myKeyP1.up=true;
当玩家1放开 "左"的时候 myKeyP1.up=false;

当玩家2按(keyPressed) "左"的时候 myKeyP2.up=true;
当玩家2放开(keyReleased) "左"的时候 myKeyP2.up=false;

在游戏主程序中  游戏事件(例如方块左右移动)
不是直接由 java提供的KeyListener 来触发
而是有一个进程(通常就是游戏的主进程)在轮寻 所有的MyKey对象
然后根据他们的状态来决定动作

而java的 KeyListener  触发的是 MyKey对象 的状态的改变

其实我前一阵发的那个我大学时做的那个小游戏就用了类似的方法





2 楼 wuhua 2006-12-26  
对于j2se的事件机制我不是很了解,
不过我觉得可能是你的程序处理不好吧,
比如j2se支持长按事件,你的问题好像是一个长按了,
而另外一个人有进行长按,这样会不会有冲突,然后你在程序里不能很好的去判断到底是那方面按了。可能这样会导致你没响应。
我也是乱说的。当参考吧
1 楼 javatar 2006-12-26  
先问个小问题:
在做单机双人对战时,发现两人使有一个键盘,会使键盘映射无效,
即:
单人使用时,按住向左键不放,方块会不停的向左运动,
而双人使用时,一方按住键不放,只要另一方按了键,前面按住的键就不再有效,这样,双方都要不停的按键,而不能按住键不放。

以前在文曲星中,我们都是通过直接POKE键盘内存映像,使其产生假的按键值。Java中不能操作内存,不知怎么处理。

相关推荐

Global site tag (gtag.js) - Google Analytics