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