华容道游戏j2me实现(4).htm

来自「这是很好的J2ME实例教程,很适合初学者!」· HTM 代码 · 共 383 行 · 第 1/2 页

HTM
383
字号
}
.center01 A:link {
	COLOR: #000000; TEXT-DECORATION: none
}
.center01 A:visited {
	COLOR: #000000; TEXT-DECORATION: none
}
.center01 A:hover {
	COLOR: #2b7128; TEXT-DECORATION: underline
}
.center02 {
	COLOR: #194e00; LINE-HEIGHT: 20px
}
.center02 TD {
	COLOR: #194e00; LINE-HEIGHT: 20px
}
.center02 A:link {
	COLOR: #194e00; TEXT-DECORATION: none
}
.center02 A:visited {
	COLOR: #194e00; TEXT-DECORATION: none
}
.center02 A:hover {
	COLOR: #194e00; TEXT-DECORATION: underline
}
</STYLE>

<TABLE cellSpacing=0 cellPadding=0 width=760 align=center bgColor=#f3f3f3 
border=0 valign="top">
  <TBODY>
  <TR class=center01>
    <TD style="PADDING-LEFT: 10px; PADDING-TOP: 10px" width=488><A 
      href="http://act.it.sohu.com/book/index.php">连载</A> &gt; <A 
      href="http://act.it.sohu.com/book/slist.php?class1=6">程序设计</A> &gt; <A 
      href="http://act.it.sohu.com/book/slist.php?class2=7">Java</A> &gt; <A 
      href="http://act.it.sohu.com/book/serialize.php?id=461">Java手机游戏开发专辑</A> 
    </TD>
    <TD style="PADDING-LEFT: 10px; PADDING-TOP: 10px" width=280>
      <DIV align=center><FONT color=#0000ff><A 
      href="http://act.it.sohu.com/book/chapter.php?id=461&amp;volume=4&amp;chapter=3">上一页</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#0000ff><A 
      href="http://act.it.sohu.com/book/serialize.php?id=461">回书目</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#0000ff><A 
      href="http://act.it.sohu.com/book/chapter.php?id=461&amp;volume=4&amp;chapter=5">下一页</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </DIV></TD></TR>
  <TR class=center01>
    <TD style="PADDING-LEFT: 10px; PADDING-TOP: 10px" align=middle 
    colSpan=2>&nbsp;</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>华容道游戏J2ME实现(4)</DIV>
      <DIV 
      style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; FONT-SIZE: 10.5pt; COLOR: black; LINE-HEIGHT: 180%" 
      align=left><BR>&nbsp;&nbsp;&nbsp;&nbsp;
      <P><SPAN 
      class=f14>  五、详细设计<BR><BR>  详细设计是程序开发过程中至关重要的一个环节,好在我们在前面的各个阶段中已经搭建好了项目所需的一些工具,现在这个阶段中我们只需集中精力设计好Displayable1中的逻辑。(两天的时间当然不只干这点活,还要把其他几个类的设计修改一下)<BR><BR>  Displayable1这个类负责处理程序的控制逻辑。首先,它需要有表示当前关面的变量level、表示当前光标位置的变量loc、表示要移动区域的变量SelectArea、表示要移动到的区域的变量MoveArea、表示是否已有区域被选中而准备移动的变量Selected和Map类的实例MyMap。然后,我们根据用户按不同的键来处理不同的消息,我们要实现keyPressed()函数,在函数中我们处理按键的上下左右和选中(Fire),这里的处理需要我展开来讲一讲,后面我很快会把这一部分详细展开。<BR><BR>  接下来,是实现paint()函数,我们打算在这一部分中反复的重画背景、地图和选择区域,这个函数必须处理好区域被选中之后的画笔颜色的切换,具体讲就是在没有选中任何区域时要用黑色画笔,当选重要移动的区域时使用绿色画笔,当选择要移动到的区域时改用红色画笔(当然附加一张流程图是必不可少的)。<BR><BR>  再下面要实现的setRange()函数和setMoveRange()函数,这两个函数用来设置要移动的区域和要移动到的区域,我的思路就是利用前面在Images类中介绍过的地图组合标记常量,当移动到地图组合标记常量时,根据该点地图中的值做逆向变换找到相应的地图标记常量,然后设置相应的loc、SelectArea和MoveArea,其中setMoveRange()函数还用到了一个辅助函数isInRange(),isInRange()函数是用来判断给定的点是否在已选中的要移动的区域之内,如果isInRange()的返回值是假并且该点处的值不是空白就表明要移动到的区域侵犯了其他以被占用的区域。有了setRange()和setMoveRange()函数,Move()函数就水到渠成了,Move()函数将要移动的区域移动到要移动到的区域,在移动过程中分为三步进行:<BR><BR>  第一.复制要移动的区域;<BR><BR>  第二.将复制出的要移动区域复制到要移动到的区域(这两步分开进行的目的是防止在复制过程中覆盖掉要移动的区域);<BR><BR>  第三.用isInRange2()判断给定的点是否在要移动到的区域内,将不在要移动到的区域内的点设置成空白。<BR><BR>  下面我们详细的分析一下keyPressed()函数的实现方法:首先,keyPressed()函数要处理按键的上下左右和选中(Fire),在处理时需要用Canvas类的getGameAction函数来将按键的键值转换成游戏的方向,这样可以提高游戏的兼容性(因为不同的J2ME实现,其方向键的键值不一定是相同的)。<BR><BR>  接下来,分别处理四个方向和选中.当按下向上时,先判断是否已经选定了要移动的区域(即this.selected是否为真),如果没有选中要移动区域则让光标向上移动一格,然后调用setRange()函数设置选择要移动的区域,再调用repaint()函数刷新屏幕,否则如果已经选中了要移动的区域,就让光标向上移动一格,然后调用setMoveRange()函数判断是否能够向上移动已选中的区域,如果能移动就调用repaint()函数刷新屏幕,如果不能移动就让光标向下退回到原来的位置。<BR><BR>  当按下向下时,先判断是否已经选定了要移动的区域,如果没有选中要移动的区域则判断当前所处的区域是否为两个格高,如果是两个格高则向下移动两格,如果是一个格高则向下移动一格,接着再调用setRange()函数设置选择要移动的区域,而后调用repaint()函数刷新屏幕,否则如果已经选中了要移动的区域,就让光标向下移动一格,然后调用setMoveRange()函数判断是否能够向下移动已选中的区域,如果能移动就调用repaint()函数刷新屏幕,如果不能移动就让光标向上退回到原来的位置.按下向左时情况完全类似向上的情况,按下向右时情况完全类似向下的情况,因此这里不再赘述,详细情况请参见程序的源代码。<BR><BR>  当按下选中键时,先判断是否已经选中了要移动的区域,如果已经选中了要移动的区域就调用Move()函数完成由要移动的区域到要移动到的区域的移动过程,接着调用repaint()函数刷新屏幕,然后将已选择标记置成false,继续调用win()函数判断是否完成了任务,否则如果还没有选定要移动的区域则再判断当前选中区域是否为空白,如果不是空白就将选中标记置成true,然后刷新屏幕.这里介绍一个技巧,在开发程序遇到复杂的逻辑的时候,可以构造一格打印函数来将所关心的数据结构打印出来以利调试,这里我们就构造一个PrintGrid()函数,这个函数纯粹是为了调试之用,效果这得不错.至此我们完成了编码前的全部工作。</SPAN></P><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&amp;volume=4&amp;chapter=3">上一页</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#0000ff><A 
      href="http://act.it.sohu.com/book/serialize.php?id=461">回书目</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      <FONT color=#0000ff><A 
      href="http://act.it.sohu.com/book/chapter.php?id=461&amp;volume=4&amp;chapter=5">下一页</A></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      </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="华容道游戏J2ME实现(4).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>&nbsp;给此书打分:<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> &nbsp; 
            用户名: <INPUT id=id type=hidden value=461 name=id> <INPUT type=hidden 
            value=/book/chapter.php?id=461&amp;volume=4&amp;chapter=4 
            name=backurl> <INPUT id=username maxLength=20 name=username> <FONT 
            color=#666666>*评论字数请控制在一百字以内</FONT> </TD></TR></TBODY></TABLE><BR>&nbsp;<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=华容道游戏J2ME实现(4).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 &copy; 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="华容道游戏J2ME实现(4).files/m.gif"> </NOSCRIPT><!-- END NNR Site Census V5.1 -->
<SCRIPT language=JavaScript src="华容道游戏J2ME实现(4).files/nnselect.js"></SCRIPT>
<NOSCRIPT><IMG height=1 src="" width=1> </NOSCRIPT></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?