📄 用midp实现贪吃蛇游戏(2).htm
字号:
href="http://act.it.sohu.com/book/chapter.php?id=461&volume=4&chapter=14">下一页</A></FONT>
</DIV></TD></TR>
<TR class=center01>
<TD style="PADDING-LEFT: 10px; PADDING-TOP: 10px" align=middle
colSpan=2> </TD></TR>
<TBODY>
<TR>
<TD align=middle colSpan=2><BR>
<DIV style="FONT-SIZE: 18pt; COLOR: #990000; FONT-FAMILY: 楷体_GB2312"
align=center><B>Java手机游戏开发实例</B></DIV><BR>
<DIV style="FONT-SIZE: 18px; COLOR: #990000; FONT-FAMILY: ; 宋体: "
align=center>用MIDP实现贪吃蛇游戏(2)</DIV>
<DIV
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 180%"
align=left><BR>
<P><SPAN class=f14> <STRONG>WormLink类
</STRONG><BR><BR> 贪吃蛇是由一节一节组成的。因为它经常有一些节连成一条直线形成段,所以这是一种相对有效的方法来保存整个蛇。[X,Y]表示段头部的坐标,然后段的头部开始按照方向向后画若干节。(段的头尾和蛇的头尾不是一个概念)<BR><BR> 下面代码段是WormLink中的段得属性:<BR><BR></P>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>// 段头部坐标<BR><BR>private int x, y;<BR><BR>// 段长度<BR><BR>private
int len;<BR><BR>// 移动方向<BR><BR>private byte dir;
</TD></TR></TBODY></TABLE><BR> 下面重点介绍几个重要函数:<BR><BR> public void
decreaseLength()<BR><BR> 这是从段的头部减少一格<BR><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>// 首先段的总长度减少1<BR><BR>len--;<BR><BR>switch (dir) { //
不同的方向左边的改变也不一样<BR><BR>case Worm.LEFT:<BR><BR>x--; break;<BR><BR>case
Worm.RIGHT:<BR><BR>x++; break;<BR><BR>case Worm.UP:<BR><BR>y--;
break;<BR><BR>case Worm.DOWN:<BR><BR>y++; break;
}</TD></TR></TBODY></TABLE><BR> public boolean contains(int x, int
y)<BR><BR> 判断所给的坐标[x,y]是否包含在段中<BR><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>switch (dir) { // 不同的方向判断的方法也不一样<BR><BR>case
Worm.LEFT:<BR><BR>return ((y == this.y) && ((x <= this.x)
&& (x >= getEndX())));<BR><BR>case
Worm.RIGHT:<BR><BR>return ((y == this.y) && ((x >=
this.x) && (x <= getEndX())));<BR><BR>case
Worm.UP:<BR><BR>return ((x == this.x) && ((y <= this.y)
&& (y >= getEndY())));<BR><BR>case
Worm.DOWN:<BR><BR>return ((x == this.x) && ((y >= this.y)
&& (y <=
getEndY())));<BR><BR>}</TD></TR></TBODY></TABLE><BR> public int
getEndX()<BR><BR> 得到这一段的尾部x坐标(段方向指向的最后一格的坐标),当这段是蛇的头部段时,得到的是头部最前面的坐标。<BR><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>// 不同的方向判断方法不一样<BR><BR>if (dir == Worm.LEFT) <BR><BR>return
x-len;<BR><BR>if (dir == Worm.RIGHT)<BR><BR>return
x+len;<BR><BR>return x; </TD></TR></TBODY></TABLE><BR> <B>WormPit类
</B><BR><BR> WormPit类中包括了Worm和WormFood。贪吃蛇将会在画面中移动寻找食物。如果它吃到食物它将会长一格。如果它碰到边界或者吃到自己将Game
Over。<BR><BR> 下面介绍几个重要的函数:<BR><BR> private void
paintPitContents(Graphics g) <BR><BR> 重绘屏幕上的所有元素<BR><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>// 更新贪吃蛇的状态<BR><BR>myWorm.update(g); <BR><BR>//
头部的位置和食物的位置重合就吃到食物<BR><BR>if (myFood.isAt(myWorm.getX(),
myWorm.getY())) {<BR><BR>myWorm.eat();<BR><BR>score +=
level;<BR><BR>foodEaten++;<BR><BR>if (foodEaten > (level <<
1)) {<BR><BR>/* 增加游戏难度 */<BR><BR>forceRedraw =
true;<BR><BR>foodEaten = 0;<BR><BR>level++;<BR><BR>if (tonePlayer !=
null) {<BR><BR>try
{<BR><BR>tonePlayer.setMediaTime(0);<BR><BR>tonePlayer.start();<BR><BR>}
catch (MediaException me) { } }<BR><BR>} else {<BR><BR>if
(audioPlayer != null) {<BR><BR>try {<BR><BR>Manager.playTone(69, 50,
100); // Play audio<BR><BR>} catch (MediaException me) { } }
}<BR><BR>g.setColor(WormPit.ERASE_COLOUR);<BR><BR>//
填充长方形(三个字的宽度)<BR><BR>g.fillRect((width - (SCORE_CHAR_WIDTH *
3))-START_POS,<BR><BR>height-START_POS,<BR><BR>(SCORE_CHAR_WIDTH *
3),<BR><BR>SCORE_CHAR_HEIGHT);<BR><BR>g.setColor(WormPit.DRAW_COLOUR);<BR><BR>//
显示新的分数<BR><BR>g.drawString("" + score, <BR><BR>width -
(SCORE_CHAR_WIDTH * 3) - START_POS, <BR><BR>height - START_POS,
Graphics.TOP|Graphics.LEFT);<BR><BR>//
重新生成食物<BR><BR>myFood.regenerate();<BR><BR>int x =
myFood.getX();<BR><BR>int y = myFood.getY();<BR><BR>while
(myWorm.contains(x, y)) {<BR><BR>//
如果食物和贪吃蛇的身体重复就重新生成<BR><BR>myFood.regenerate();<BR><BR>x =
myFood.getX(); y = myFood.getY(); } }<BR><BR>//
画出食物<BR><BR>myFood.paint(g);<BR><BR>} catch (WormException se) {
gameOver = true; }<BR></TD></TR></TBODY></TABLE><BR> public void
run()<BR><BR> 主循环体:<BR><BR>
<TABLE width="100%" bgColor=#ffffff>
<TBODY>
<TR>
<TD>while (!gameDestroyed) { // 游戏不终止就一直循环执行<BR><BR>try
{<BR><BR>synchronized (myWorm) { // 多线程中要进行同步<BR><BR>//
如果游戏结束<BR><BR>if (gameOver) {<BR><BR>if
(WormScore.getHighScore(level) < score) {<BR><BR>//
把最高分保存<BR><BR>WormScore.setHighScore(level, score, "me");
}<BR><BR>if ((audioPlayer != null) &&
<BR><BR>(audioPlayer.getState() == Player.STARTED)) {<BR><BR>try
{<BR><BR>audioPlayer.stop();<BR><BR>Manager.playTone(60, 400,
100);<BR><BR>} catch (Exception ex) { } }<BR><BR>//
重绘<BR><BR>repaint();<BR><BR>// 游戏结束时等待用户重新开始<BR><BR>myWorm.wait();
<BR><BR>} else if (gamePaused)
{<BR><BR>//重绘<BR><BR>repaint();<BR><BR>//
游戏暂停时等待用户重新开始<BR><BR>myWorm.wait();<BR><BR>} else {<BR><BR>//
游戏继续<BR><BR>myWorm.moveOnUpdate();<BR><BR>repaint();<BR><BR>//
这里的等待时间决定了游戏难度!!!<BR><BR>myWorm.wait(DEFAULT_WAIT-(level*40));<BR><BR>}<BR><BR>}<BR><BR>}
catch (java.lang.InterruptedException ie)
{<BR><BR>}<BR><BR>}<BR></TD></TR></TBODY></TABLE></SPAN><BR><BR></DIV></TD></TR>
<TR>
<TD class=center01>
<DIV align=center>来源:天极网 作者:
<DIV></DIV></DIV></TD>
<TD class=center01 width=280>
<DIV align=center><FONT color=#0000ff><A
href="http://act.it.sohu.com/book/chapter.php?id=461&volume=4&chapter=12">上一页</A></FONT>
<FONT color=#0000ff><A
href="http://act.it.sohu.com/book/serialize.php?id=461">回书目</A></FONT>
<FONT color=#0000ff><A
href="http://act.it.sohu.com/book/chapter.php?id=461&volume=4&chapter=14">下一页</A></FONT>
</DIV></TD></TR></TBODY></TABLE>
<TABLE>
<TBODY>
<TR>
<TD width=760>
<TABLE height=10 cellSpacing=0 cellPadding=0 width=760 border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE><!------------ 评论 ---------------->
<TABLE cellSpacing=0 cellPadding=0 width=760 border=0>
<TBODY>
<TR>
<TD><IFRAME id=vs src="用MIDP实现贪吃蛇游戏(2).files/comment_list1.htm"
frameBorder=0 width="100%"
scrolling=no></IFRAME></TD></TR></TBODY></TABLE><BR>
<SCRIPT language=javascript>function CheckNetwordForm(theForm){ if("" == theForm.content.value) { alert("写两句吧~~"); theForm.content.focus(); return false; } var index; for(index=0;index<theForm.content.value.length;index++) { if(" " != theForm.content.value.charAt(index)) break; } if(index == theForm.content.value.length) { alert("写两句吧~~"); theForm.content.focus(); return false; } if (theForm.content.value.length>100){ alert("评论字数不能超过100哦"); theForm.content.focus(); return false; } return true;}</SCRIPT>
<!------------------ 评论 --------------->
<FORM name=netword onsubmit="javascript: return CheckNetwordForm(this);"
action=insertnetword.php method=post>
<TABLE cellSpacing=0 cellPadding=0 width=760 border=0>
<TBODY>
<TR>
<TD class=text6 height=25> 给此书打分:<A name=1></A> <SELECT
name=score> <OPTION value=5 selected>非常好</OPTION> <OPTION
value=4>还凑合</OPTION> <OPTION value=3>一般吧</OPTION> <OPTION
value=2>不太行</OPTION> <OPTION value=1>太差了</OPTION></SELECT>
用户名: <INPUT id=id type=hidden value=461 name=id> <INPUT type=hidden
value=/book/chapter.php?id=461&volume=4&chapter=13
name=backurl> <INPUT id=username maxLength=20 name=username> <FONT
color=#666666>*评论字数请控制在一百字以内</FONT> </TD></TR></TBODY></TABLE><BR> <TEXTAREA id=description name=content rows=4 wrap=off cols=80></TEXTAREA>
<INPUT type=submit value=提交 name=Submit>
</FORM></TD></TR></TBODY></TABLE></TD></TR></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=760 border=0>
<TBODY>
<TR>
<TD width=1003 background=用MIDP实现贪吃蛇游戏(2).files/t_bj01.gif height=9><IMG
height=1 src="" width=1></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=760 bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD>
<HR width=760 noShade SIZE=1>
</TD></TR>
<TR>
<TD align=middle><A class=black href="http://www.chinaren.com/"
target=_blank>ChinaRen</A> - <A class=black
href="http://big5.www.sohu.com/" target=_blank>繁体版</A> - <A class=black
href="http://hr.sohu.com/hrm.html" target=_blank>搜狐招聘</A> - <A class=black
href="http://add.sohu.com/" target=_blank>网站登录</A> - <A class=black
href="http://help.sohu.com/" target=_blank>帮助中心</A> - <A class=black
href="http://book.news.sohu.com/onClick=this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.sohu.com');return"
target=_blank false;>设置首页</A> - <A class=black
href="http://adinfo.sohu.com/" target=_blank>广告服务</A> - <A class=black
href="http://www.sohu.com/about/lianxi.htm" target=_blank>联系方式</A> - <A
class=black href="http://www.sohu.com/about/privacy.html"
target=_blank>保护隐私权</A> - <A class=black href="http://www.sohu.com/about/"
target=_blank>About SOHU</A> - <A class=black
href="http://www.sohu.com/about/" target=_blank>公司介绍</A><BR><SPAN
class=eng>Copyright © 2004 Sohu.com Inc. All rights reserved. 搜狐公司
版权所有</SPAN> </TD></TR></TBODY></TABLE></CENTER><!-- START NNR Site Census V5.1 --><!-- COPYRIGHT 2004 Nielsen // Netratings -->
<SCRIPT language=JavaScript type=text/javascript>
<!--
var _rsCI="cn-sohu";
var _rsCG="0";
var _rsDT=0;
var _rsDU=0;
var _rsDO=0;
var _rsX6=0;
var _rsSI=escape(window.location);
var _rsLP=location.protocol.indexOf('https')>-1?'https:':'http:';
var _rsRP=escape(document.referrer);
var _rsND=_rsLP+'//secure-cn.imrworldwide.com/';
if (parseInt(navigator.appVersion)>=4)
{
var _rsRD=(new Date()).getTime();
var _rsSE=1;
var _rsSV="";
var _rsSM=0.01;
_rsCL='<scr'+'ipt language="JavaScript" type="text/javascript" src="'+_rsND+'v51.js"><\/scr'+'ipt>';
}
else
{
_rsCL='<img src="'+_rsND+'cgi-bin/m?ci='+_rsCI+'&cg='+_rsCG+'&si='+_rsSI+'&rp='+_rsRP+'">';
}
document.write(_rsCL);
//-->
</SCRIPT>
<NOSCRIPT><IMG alt="" src="用MIDP实现贪吃蛇游戏(2).files/m.gif"> </NOSCRIPT><!-- END NNR Site Census V5.1 -->
<SCRIPT language=JavaScript src="用MIDP实现贪吃蛇游戏(2).files/nnselect.js"></SCRIPT>
<NOSCRIPT><IMG height=1 src="" width=1> </NOSCRIPT></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -