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

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

HTM
565
字号
}
.center01 TD {
	COLOR: #000000; LINE-HEIGHT: 20px
}
.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=4">上一页</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=6">下一页</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实现(5)</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> <STRONG>六.编码<BR></STRONG><BR>  整个项目共有五个类,有四个类的代码前面已经介绍过了,而且是在其他项目中使用过的相对成熟的代码.现在只需全力去实现Displayable1类.Displayable1类的代码如下:<BR></P>
      <P></P>
      <TABLE width="100%" bgColor=#ffffff>
        <TBODY>
        <TR>
          <TD>
            <P>package huarongroad;</P>
            <P>import javax.microedition.lcdui.*;</P>
            <P>public class Displayable1 extends Canvas implements 
            CommandListener {</P>
            <P>private int[] loc = new int[2]; <A 
            href="file://光">file://光</A>标的当前位置,0是水平位置,1是竖直位置<BR>private int[] 
            SelectArea = new int[4];//被选定的区域,即要移动的区域<BR>private int[] MoveArea = 
            new int[4];//要移动到的区域<BR>private Map MyMap = new 
            Map();//地图类<BR>private boolean selected;//是否已经选中要移动区域的标志<BR>private 
            int level;//但前的关面<BR>public Displayable1() {//构造函数<BR>try 
            {<BR>jbInit();//JBuilder定义的初始化函数<BR>}catch (Exception e) 
            {<BR>e.printStackTrace();<BR>}<BR>}<BR>private void 
            Init_game(){<BR>//初始化游戏,读取地图,设置选择区域,清空要移动到的区域<BR>this.loc = 
            MyMap.read_map(this.level);//读取地图文件,并返回光标的初始位置<BR>//0为水平位置,1为竖直位置<BR>this.SelectArea[0] 
            = this.loc[0];//初始化选中的区域<BR>this.SelectArea[1] = 
            this.loc[1];<BR>this.SelectArea[2] = 1;<BR>this.SelectArea[3] = 
            1;<BR>this.MoveArea[0] = -1;//初始化要移动到的区域<BR>this.MoveArea[1] = 
            -1;<BR>this.MoveArea[2] = 0;<BR>this.MoveArea[3] = 
            0;<BR>}<BR>private void jbInit() throws Exception 
            {//JBuilder定义的初始化函数<BR><A 
            href="file://初">file://初</A>始化实例变量<BR>this.selected = 
            false;//设置没有被选中的要移动区域<BR>this.level = 
            1;<BR>Images.init();//初始化图片常量<BR>Init_game();//初始化游戏,读取地图,设置选择区域,清空要移动到的区域<BR>setCommandListener(this);//添加命令监听,这是Displayable的实例方法<BR>addCommand(new 
            Command("Exit", Command.EXIT, 1));//添加“退出”按钮<BR>}</P>
            <P>public void commandAction(Command command, Displayable 
            displayable) {<BR>//命令处理函数<BR>if (command.getCommandType() == 
            Command.EXIT) {//处理“退出”<BR>MIDlet1.quitApp();<BR>}<BR>}</P>
            <P>protected void paint(Graphics g) 
            {<BR>//画图函数,用于绘制用户画面,即显示图片,勾画选中区域和要移动到的区域<BR>try 
            {<BR>g.drawImage(Images.image_Frame, 0, 0,<BR>Graphics.TOP | 
            Graphics.LEFT);//画背景<BR>MyMap.draw_map(g);//按照地图内容画图<BR>if ( 
            this.selected 
            )<BR>g.setColor(0,255,0);//如果被选中,改用绿色画出被选中的区域<BR>g.drawRect(this.SelectArea[0] 
            * Images.UNIT + Images.LEFT,<BR>this.SelectArea[1] * Images.UNIT + 
            Images.TOP,<BR>this.SelectArea[2] * 
            Images.UNIT,<BR>this.SelectArea[3] * Images.UNIT);//画出选择区域,<BR><A 
            href="file://如">file://如</A>果被选中,就用绿色<BR><A 
            href="file://否">file://否</A>则,使用黑色<BR>g.setColor(255,255,255);//恢复画笔颜色<BR>if 
            (this.selected) {//已经选中了要移动的区域<BR>g.setColor(255, 0, 
            255);//改用红色<BR>g.drawRect(this.MoveArea[0] * Images.UNIT + 
            Images.LEFT,<BR>this.MoveArea[1] * Images.UNIT + 
            Images.TOP,<BR>this.MoveArea[2] * Images.UNIT,<BR>this.MoveArea[3] * 
            Images.UNIT);//画出要移动到的区域<BR>g.setColor(255, 255, 
            255);//恢复画笔颜色<BR>}<BR>}catch (Exception ex) 
            {<BR>}<BR>System.out.println(Runtime.getRuntime().freeMemory());<BR>System.out.println(Runtime.getRuntime().totalMemory());<BR>}</P>
            <P>private void setRange() 
            {<BR>//设置移动后能够选中的区域<BR>//调整当前光标位置到地图的主位置,即记录人物信息的位置<BR>if 
            (this.MyMap.Grid[this.loc[1]][this.loc[0]] == Images.DLEFT) 
            {<BR>this.loc[0] -= 1;//向左调<BR>}else if 
            (this.MyMap.Grid[this.loc[1]][this.loc[0]] == Images.DUP) 
            {<BR>this.loc[1] -= 1;//向上调<BR>}else if 
            (this.MyMap.Grid[this.loc[1]][this.loc[0]] == Images.DLEFTUP) 
            {<BR>this.loc[0] -= 1;//向左调<BR>this.loc[1] -= 
            1;//向上调<BR>}<BR>this.SelectArea[0] = 
            this.loc[0];//设置光标的水平位置<BR>this.SelectArea[1] = 
            this.loc[1];//设置光标的竖直位置<BR>//设置光标的宽度<BR>if (this.loc[0] + 1 < 
            Images.WIDTH) {<BR>this.SelectArea[2] = 
            this.MyMap.Grid[this.loc[1]][this.loc[0] + 1] != (byte) '1' ?<BR>1 : 
            2;<BR>}else {<BR>this.SelectArea[2] = 1;<BR>}<BR>//设置光标的高度<BR>if 
            (this.loc[1] + 1 < Images.HEIGHT) {<BR>this.SelectArea[3] = 
            this.MyMap.Grid[this.loc[1] + 1][this.loc[0]] != (byte) '2' ?<BR>1 : 
            2;<BR>}else {<BR>this.SelectArea[3] = 1;<BR>}<BR>}</P>
            <P>private boolean setMoveRange() 
            {<BR>//设置要移动到的区域,能够移动返回true,否则返回false<BR>for (int i = 0; i < 
            this.SelectArea[2]; i++) {<BR>for (int j = 0; j < 
            this.SelectArea[3]; j++) {<BR>if (this.loc[1] + j >= Images.HEIGHT 
            ||<BR>this.loc[0] + i >= Images.WIDTH ||<BR>(!isInRange(this.loc[0] 
            + i, this.loc[1] + j) &amp;&amp;<BR>this.MyMap.Grid[this.loc[1] + 
            j][this.loc[0] + i] !=<BR>Images.BLANK)) {<BR>return 
            false;<BR>}<BR>}<BR>}<BR>this.MoveArea[0] = 
            this.loc[0];<BR>this.MoveArea[1] = this.loc[1];<BR>this.MoveArea[2] 
            = this.SelectArea[2];<BR>this.MoveArea[3] = 
            this.SelectArea[3];<BR>return true;<BR>}</P>
            <P>private boolean isInRange(int x, int y) 
            {<BR>//判断给定的(x,y)点是否在选定区域之内,x是水平坐标,y是竖直坐标<BR>if (x >= 
            this.SelectArea[0] &amp;&amp;<BR>x < this.SelectArea[0] + 
            this.SelectArea[2] &amp;&amp;<BR>y >= this.SelectArea[1] 
            &amp;&amp;<BR>y < this.SelectArea[1] + this.SelectArea[3]) 
            {<BR>return true;<BR>}else {<BR>return false;<BR>}<BR>}</P>
            <P>private boolean isInRange2(int x, int y) 
            {<BR>//判断给定的(x,y)点是否在要移动到的区域之内,x是水平坐标,y是竖直坐标<BR>if (x >= 
            this.MoveArea[0] &amp;&amp;<BR>x < this.MoveArea[0] + 
            this.MoveArea[2] &amp;&amp;<BR>y >= this.MoveArea[1] &amp;&amp;<BR>y 
            < this.MoveArea[1] + this.MoveArea[3]) {<BR>return true;<BR>}else 
            {<BR>return false;<BR>}<BR>}</P>
            <P>protected void keyPressed(int keyCode) 
            {<BR>//处理按下键盘的事件,这是Canvas的实例方法<BR>switch (getGameAction(keyCode)) 
            {//将按键的值转化成方向常量<BR>case Canvas.UP://向上<BR>if (!this.selected) 
            {//还没有选定要移动的区域<BR>if (this.loc[1] - 1 >= 0) 
            {//向上还有移动空间<BR>this.loc[1]--;//向上移动一下<BR>setRange();//设置光标移动的区域,该函数能将光标移动到地图主位置<BR>repaint();//重新绘图<BR>}<BR>}else 
            {//已经选定了要移动的区域<BR>if (this.loc[1] - 1 >= 0) 
            {//向上还有移动空间<BR>this.loc[1]--;//向上移动一下<BR>if (setMoveRange()) 
            {//能够移动,该函数能够设置要移动到的区域<BR>repaint();//重新绘图<BR>}else 
            {//不能移动<BR>this.loc[1]++;//退回来<BR>}<BR>}<BR>}<BR>break;<BR>case 
            Canvas.DOWN://向下<BR>if (!this.selected) {//还没有选定要移动的区域<BR>if 
            (this.loc[1] + 1 < Images.HEIGHT) {//向下还有移动空间<BR>if 
            (this.MyMap.Grid[this.loc[1] + 1][this.loc[0]] 
            ==<BR>Images.DUP){//该图片有两个格高<BR>this.loc[1]++;//向下移动一下<BR>if 
            (this.loc[1] + 1 < Images.HEIGHT) {//向下还有<BR><A 
            href="file://移">file://移</A>动空间<BR>this.loc[1]++;//向下移动一下<BR>setRange();//设置光标移动的区域,<BR><A 
            href="file://该">file://该</A>函数能将光标移动到地图主位置<BR>repaint();//重新绘图<BR>}else 
            {//向下没有移动空间<BR>this.loc[1]--;//退回来<BR>}<BR>}else 
            {//该图片只有一个格高<BR>this.loc[1]++;//向下移动一下<BR>setRange();//设置光标移动的区域,<BR><A 
            href="file://该">file://该</A>函数能将光标移动到地图主位置<BR>repaint();//重新绘图<BR>}<BR>}else 
            {<BR>}<BR>}else {//已经选定了要移动的区域<BR>if (this.loc[1] + 1 < 
            Images.HEIGHT) {//向下还有移动空间<BR>this.loc[1]++;//向下移动一下<BR>if 
            (setMoveRange()) {//能够移动,该函数能够设置要移动到的区域<BR>repaint();//重新绘图<BR>}else 
            {//不能移动<BR>this.loc[1]--;//退回来<BR>}<BR>}<BR>}<BR>break;<BR>case 
            Canvas.LEFT://向左<BR>if (!this.selected) {//还没有选定要移动的区域<BR>if 
            (this.loc[0] - 1 >= 0) 
            {//向左还有移动空间<BR>this.loc[0]--;//向左移动一下<BR>setRange();//设置光标移动的区域,该函数能将光标移动到地图主位置<BR>repaint();//重新绘图<BR>}<BR>}else 
            {//已经选定了要移动的区域<BR>if (this.loc[0] - 1 >= 0) 
            {//向左还有移动空间<BR>this.loc[0]--;//向左移动一下<BR>if (setMoveRange()) 
            {//能够移动,该函数能够设置要移动到的区域<BR>repaint();//重新绘图<BR>}else 
            {//不能移动<BR>this.loc[0]++;//退回来<BR>}<BR>}<BR>}<BR>break;<BR>case 
            Canvas.RIGHT://向右<BR>if (!this.selected) {//还没有选定要移动的区域<BR>if 
            (this.loc[0] + 1 < Images.WIDTH) {//向右还有移动空间<BR>if 
            (this.MyMap.Grid[this.loc[1]][this.loc[0] + 1] ==<BR>Images.DLEFT) 
            {//该图片有两个格宽<BR>this.loc[0]++;//向右移动一下<BR>if (this.loc[0] + 1 < 
            Images.WIDTH) {//向右还有<BR><A 
            href="file://移">file://移</A>动空间<BR>this.loc[0]++;//向右移动一下<BR>setRange();//设置光标移动的区域,<BR><A 
            href="file://该">file://该</A>函数能将光标移动到地图主位置<BR>repaint();//重新绘图<BR>}else 

⌨️ 快捷键说明

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