俄罗斯方块游戏源代码476685.docx

上传人:b****3 文档编号:3847403 上传时间:2022-11-25 格式:DOCX 页数:54 大小:33.46KB
下载 相关 举报
俄罗斯方块游戏源代码476685.docx_第1页
第1页 / 共54页
俄罗斯方块游戏源代码476685.docx_第2页
第2页 / 共54页
俄罗斯方块游戏源代码476685.docx_第3页
第3页 / 共54页
俄罗斯方块游戏源代码476685.docx_第4页
第4页 / 共54页
俄罗斯方块游戏源代码476685.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

俄罗斯方块游戏源代码476685.docx

《俄罗斯方块游戏源代码476685.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块游戏源代码476685.docx(54页珍藏版)》请在冰豆网上搜索。

俄罗斯方块游戏源代码476685.docx

俄罗斯方块游戏源代码476685

JAVA游戏编程之三----j2me手机游戏入门开发--俄罗斯方块_4_增加消除行声音收藏

 

之前的游戏代码中都未加声音,不少网友在做别业设计时要求增加声音,其实声音还是比较好做的!

但手机真机上可能会有不同的问题,但在模拟器上一般都没什么问题,所以真机上的问题就具体问题具体分析吧!

这里给出一个很简单的声音应用。

在原俄罗斯方块_3的代码基础上增加一个声音类!

示例代码如下

 

--------------------------------------------------------------------------------

viewplaincopytoclipboardprint?

packagecode。

importjava.io.*。

importjavax.microedition.media.Manager。

importjavax.microedition.media.MediaException。

importjavax.microedition.media.Player。

publicclassSound

{

publicstaticPlayerm_sounds。

publicstaticintm_currentSoundID=-1。

publicstaticbooleans_sound_bg_On=false。

privatestaticfinalStringSOUND_FILENAME="/pics/newmsg.wav"。

//0.背景声音

 

publicstaticfinalvoidinitSound(>

{

if(m_sounds!

=null>

return。

try

{

DataInputStreamdis=newDataInputStream("".getClass(>.getResourceAsStream(SOUND_FILENAME>>。

byte[]soundBuffer=newbyte[dis.available(>]。

dis.read(soundBuffer>。

InputStreamis=newByteArrayInputStream(soundBuffer>。

m_sounds=Manager.createPlayer(is,"audio/x-wav">。

m_sounds.realize(>。

m_sounds.prefetch(>。

}catch(Exceptione>

{

e.printStackTrace(>。

}

}

publicstaticvoidplaySound(intsoundID>

{

playSound(soundID,1>。

}

publicstaticvoidplaySound(intsoundID,intloopCount>

{

try

{

if(m_sounds==null>

return。

if(m_sounds.getState(>==javax.microedition.media.Player.STARTED>

return。

m_currentSoundID=soundID。

m_sounds.setMediaTime(0>。

m_sounds.setLoopCount(loopCount>。

m_sounds.start(>。

Thread.sleep(50>。

//maybethiscanhelpforsoundproblems

}catch(Exceptione>

{

e.printStackTrace(>。

}

}

privatestaticvoidstopSound(>throwsException

{

try

{

if(m_sounds==null>

return。

if(m_sounds.getState(>==javax.microedition.media.Player.STARTED>

m_sounds.stop(>。

if(m_sounds.getState(>==javax.microedition.media.Player.PREFETCHED>

m_sounds.deallocate(>。

m_currentSoundID=-1。

}catch(Exceptione>

{

e.printStackTrace(>。

}

}

publicstaticintreadFileToMemory(StringfileName,byte[]buffer>

{

java.io.InputStreamfile=null。

intsize。

try

{

file=fileName.getClass(>.getResourceAsStream(fileName>。

size=file.read(buffer>。

file.close(>。

file=null。

}catch(Exceptione>

{

return-1。

}

returnsize。

}

}

packagecode。

importjava.io.*。

importjavax.microedition.media.Manager。

importjavax.microedition.media.MediaException。

importjavax.microedition.media.Player。

publicclassSound

{

publicstaticPlayerm_sounds。

publicstaticintm_currentSoundID=-1。

publicstaticbooleans_sound_bg_On=false。

privatestaticfinalStringSOUND_FILENAME="/pics/newmsg.wav"。

//0.背景声音

 

publicstaticfinalvoidinitSound(>

{

if(m_sounds!

=null>

return。

try

{

DataInputStreamdis=newDataInputStream("".getClass(>.getResourceAsStream(SOUND_FILENAME>>。

byte[]soundBuffer=newbyte[dis.available(>]。

dis.read(soundBuffer>。

InputStreamis=newByteArrayInputStream(soundBuffer>。

m_sounds=Manager.createPlayer(is,"audio/x-wav">。

m_sounds.realize(>。

m_sounds.prefetch(>。

}catch(Exceptione>

{

e.printStackTrace(>。

}

}

publicstaticvoidplaySound(intsoundID>

{

playSound(soundID,1>。

}

publicstaticvoidplaySound(intsoundID,intloopCount>

{

try

{

if(m_sounds==null>

return。

if(m_sounds.getState(>==javax.microedition.media.Player.STARTED>

return。

m_currentSoundID=soundID。

m_sounds.setMediaTime(0>。

m_sounds.setLoopCount(loopCount>。

m_sounds.start(>。

Thread.sleep(50>。

//maybethiscanhelpforsoundproblems

}catch(Exceptione>

{

e.printStackTrace(>。

}

}

privatestaticvoidstopSound(>throwsException

{

try

{

if(m_sounds==null>

return。

if(m_sounds.getState(>==javax.microedition.media.Player.STARTED>

m_sounds.stop(>。

if(m_sounds.getState(>==javax.microedition.media.Player.PREFETCHED>

m_sounds.deallocate(>。

m_currentSoundID=-1。

}catch(Exceptione>

{

e.printStackTrace(>。

}

}

publicstaticintreadFileToMemory(StringfileName,byte[]buffer>

{

java.io.InputStreamfile=null。

intsize。

try

{

file=fileName.getClass(>.getResourceAsStream(fileName>。

size=file.read(buffer>。

file.close(>。

file=null。

}catch(Exceptione>

{

return-1。

}

returnsize。

}

}

 

现在CSDN上贴代码不如以前的好了!

<

使用方法是在主Canvas类的初始化或者游戏初始化的地方调用Sound类的initSound(>方法,来初始化声音文件,

然后在想要播放的地方调用Sound类的playSound(>方法,目前这个简单的例子里只有一个声音,所以参数给啥都一样,如果以后声音多了!

就可以用这个参数来区分用户要调用的是那个声音了!

这里的用户是相对这个Sound类的使用者,就是程序员,Sound类都是静态方法,这里相对于一个公共的工具类!

如果上述使用方法您没看明白,那就看一下代码

主Canvas类代码如下

viewplaincopytoclipboardprint?

packagecode。

//importjava.awt.*。

//importjava.awt.Canvas。

//importjava.awt.event.*。

//importjavax.swing.*。

importjava.util.Random。

importjavax.microedition.lcdui.*。

//写界面所需要的包

/**

*俄罗斯方块

*高雷

*2007年11月30日

*/

publicclasscGame240x320extendsCanvasimplementsRunnable

{

privateRandomrand。

privateThreadthread。

privateGraphicsgb。

privateImagebuffer。

privateImagegameOverImg。

//游戏结束

privatestaticfinalints_width=240。

privatestaticfinalints_height=320。

privatestaticfinalints_box_w=16。

privatestaticfinalints_box_h=16。

privatestaticfinalints_box_w_sum=10。

//操作区域宽格子数

privatestaticfinalints_box_h_sum=20。

//操作区域高格子数

privatestaticfinalints_line_between_x=s_box_w*s_box_w_sum。

//分割线x位置

publicstaticfinalintUP=-1。

publicstaticfinalintDOWN=-2。

publicstaticfinalintLEFT=-3。

publicstaticfinalintRIGHT=-4。

publicstaticfinalintinit_x=3。

//当前方块初始化坐标X

publicstaticfinalintinit_y=0。

//当前方块初始化坐标y

publicstaticints_box_x=init_x。

//当前方块坐标X

publicstaticints_box_y=init_y。

//当前方块坐标Y

privatestaticintlevel=1。

//等级

privatestaticintsuccess=0。

//得分

privatestaticlonggoDownDelayTime[]=//1800。

//下降延迟时间

{

1000,900,800,700,

600,500,400,

300,200,100

}。

privatestaticintlevel_up=(int>(goDownDelayTime[0]-goDownDelayTime[level]>。

//升级成绩

privatestaticbooleanisShowReseau=true。

//是否现实网格

privatestaticshorts_next_box=0。

//下一个方块编号

privatestaticshortboxColor。

//当前box的颜色

//privatestaticfinalColorgameBG=newColor(0x333333>。

//游戏区域背景颜色

privatestaticfinalintgameBG=0x333333。

//游戏区域背景颜色

//privatestaticfinalColorgameColor[]=newColor[]

privatestaticfinalintgameColor[]=newint[]

{

0x444444,//newColor(0x444444>,//网格颜色

0xEEEEEE,//newColor(0xEEEEEE>,//方块颜色

0xEE0000,//newColor(0xEE0000>,

0x00EE00,//newColor(0x00EE00>,

0x0000EE,//newColor(0x0000EE>,

0xEE00EE,//newColor(0xEE00EE>,

0xEEEE00,//newColor(0xEEEE00>,

0x00EEEE//newColor(0x00EEEE>

}。

privatestaticfinalshortbox_sum[][]=newshort[][]//所有方块图形

{

{0x0660,0x0660,0x0660,0x0660},

{0x2222,0x00F0,0x2222,0x00F0},

{0x0264,0x0630,0x0264,0x0630},

{0x0462,0x0360,0x0462,0x0360},

{0x02E0,0x4460,0x0740,0x0622},

{0x0E20,0x2260,0x0470,0x0644},

{0x0464,0x00E4,0x04C4,0x04E0}

}。

privatestaticshortnext_box[]=newshort[]{0x0660,0x0660,0x0660,0x0660}。

privatestaticshortbox[]=newshort[]{0x0660,0x0660,0x0660,0x0660}。

privatestaticshortmap[][]。

//地图

privatestaticshortbox_state=0。

//当前BOX的状态//旋转方向

privatestaticshortmatrix[][]=//定义矩阵用来计算出box_sum的方块

{

{0x1000,0x0100,0x0010,0x0001},

{0x2000,0x0200,0x0020,0x0002},

{0x4000,0x0400,0x0040,0x0004},

{(short>0x8000,0x0800,0x0080,0x0008}

}。

publiccGame240x320(>

{

setFullScreenMode(true>。

//设置游戏为全屏幕模式,该函数只能在支持midp2.0的手机上使用

//s_width=getWidth(>。

//得到屏幕尺寸宽

//s_height=getHeight(>。

//得到屏幕尺寸高

rand=newRandom(System.currentTimeMillis(>>。

try

{

//gameOverImg=Toolkit.getDefaultToolkit(>.getImage("src/pics/laser.png">。

gameOverImg=Image.createImage("/pics/laser.png">。

}catch(Exceptione>{}

//setSize(s_width,s_height>。

//设置画布

Sound.initSound(>。

//初始化声音资源

initGame(>。

//游戏初始化

thread=newThread(this>。

thread.start(>。

}

privatevoidinitGame(>

{

level=1。

//等级

success=0。

//得分

map=newshort[s_box_h_sum][s_box_w_sum]。

setNextBox(>。

//设置下一个BOX

setBox(>。

//将下一个BOX设置成当前BOX

setGameOver(false>。

//恢复游戏

}

privatevoidsetBox(>//将next_box设置成当前可控制box

{

box_state=0。

//box状态

s_box_x=init_x。

//当前方块坐标X

s_box_y=init_y。

//当前方块坐标Y

boxColor=s_next_box。

//设置当前BOX颜色

System.arraycopy(next_box,0,box,0,next_box.length>。

//box=next_box

goDownPreTime=System.currentTimeMillis(>。

//设置好当前BOX后计时

setNextBox(>。

//设置下一个BOX

if(!

isCanMove(>>

{

setGameOver(true>。

}

}

publicstaticbooleanisGameOver=false。

publicstaticlongupdatas=0。

publicstaticlongfps=0。

privatelongstartTime,beginTime,endTime。

privatelongdelay=25。

privatelongupTime=25。

publicvoidrun(>

{

while(true>

{

try

{

beginTime=System.currentTimeMillis(>。

updatas++。

updata(updatas>。

repaint(>。

endTime=System.currentTimeMillis(>。

upTime=endTime-beginTime。

if(upTime

{

fps=1000/delay。

thread.sleep(delay-upTime>。

}

else

fps=1000/upTime。

}catch(Exceptione>{}

}

}

voidsetGameOver(boolean_isGameOver>

{

isGameOver=_isGameOver。

}

publicvoidupdata(longupdatas>

{

}

publicvoidupdate(Graphicsg>

{

paint(g>。

}

publicstaticintoffx=0。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1