`
lixinye0123
  • 浏览: 335660 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

如何使用J2ME中的线程(2)

    博客分类:
  • Java
阅读更多
                 private void draw3DBlock(Graphics g, int c, int x, int y, int width, int height){<o:p></o:p>

                      int color = g.getColor();<o:p></o:p>

                      g.setColor( COLOR_WHITE );<o:p></o:p>

                      g.drawRect( x, y, width, height );<o:p></o:p>

                      g.setColor(c);<o:p></o:p>

                      g.fillRect( x + 1, y + 1, width-2, height-2 );<o:p></o:p>

                      g.setColor( COLOR_BLACK );<o:p></o:p>

                      g.drawLine( x + width-1, y, x + width-1, y + height-1 );<o:p></o:p>

                      g.drawLine( x, y + height-1, x + width-1, y + height-1 );<o:p></o:p>

                      g.setColor(color);<o:p></o:p>

                  }<o:p></o:p>

                  <o:p></o:p>

                  public static boolean drawText(Graphics g, String str, int x, int y, int anchor, int color, int size) {<o:p></o:p>

                      Font f_old,f_new;<o:p></o:p>

                      int c_old;<o:p></o:p>

                      try {<o:p></o:p>

                          f_old = g.getFont();<o:p></o:p>

                          f_new =  Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,size);<o:p></o:p>

                          g.setFont(f_new);<o:p></o:p>

                          c_old = g.getColor();<o:p></o:p>

                          g.setColor(color);<o:p></o:p>

                          <o:p></o:p>

                          g.drawString(str, x, y, anchor );<o:p></o:p>

                          <o:p></o:p>

                          g.setColor(c_old);<o:p></o:p>

                          g.setFont(f_old);<o:p></o:p>

                          <o:p></o:p>

                          return true;       <o:p></o:p>

                      }catch (Exception ex) {<o:p></o:p>

                          return false;<o:p></o:p>

                      }<o:p></o:p>

                  }    <o:p></o:p>

                  <o:p></o:p>

                  protected void paint(Graphics g){<o:p></o:p>

                      //画背景<o:p></o:p>

                      try{<o:p></o:p>

                          Image image_Splash = Image.createImage("/back.png");<o:p></o:p>

                          g.drawImage(image_Splash, 0, 0,Graphics.TOP | Graphics.LEFT);<o:p></o:p>

                      }<o:p></o:p>

                      catch(Exception ex) {<o:p></o:p>

                      }<o:p></o:p>

                      <o:p></o:p>

                      //画下一个要出现的方块<o:p></o:p>

                      drawText(g, "下一个", 91, 5, Graphics.TOP| Graphics.LEFT, COLOR_BLUE, Font.SIZE_SMALL);<o:p></o:p>

                      g.setColor(COLOR_GRAY);<o:p></o:p>

                      g.drawRoundRect(91, 18, 26, 30, 2, 2);<o:p></o:p>

                      g.setColor(COLOR_DARK_GRAY);<o:p></o:p>

                      g.fillRoundRect(92, 19, 24, 28, 2, 2);<o:p></o:p>

                                          for(int i=0;i<=3;i++)<o:p></o:p>

                                              draw3DBlock(g, BlockInfo[FutureBlockType][8],<o:p></o:p>

                                     93+BlockInfo[FutureBlockType][i*2+1]*BLOCK_SIZE,<o:p></o:p>

                                     20+BlockInfo[FutureBlockType][i*2]*BLOCK_SIZE,<o:p></o:p>

                                     BLOCK_SIZE,BLOCK_SIZE);  <o:p></o:p>

                      <o:p></o:p>

                      drawText(g, "速度:"+String.valueOf(CurSpeed), 91, 60, Graphics.TOP| Graphics.LEFT, COLOR_BLUE, Font.SIZE_SMALL);<o:p></o:p>

                      drawText(g, "行数:"+String.valueOf(BlockLines), 91, 75, Graphics.TOP| Graphics.LEFT, COLOR_BLUE, Font.SIZE_SMALL);<o:p></o:p>

                      drawText(g, "成绩:", 91, 90, Graphics.TOP| Graphics.LEFT, COLOR_BLUE, Font.SIZE_SMALL);<o:p></o:p>

                      g.setColor(COLOR_GRAY);<o:p></o:p>

                      g.drawRoundRect(91, 105, 26, 20, 2, 2);<o:p></o:p>

                      g.setColor(COLOR_DARK_GRAY);<o:p></o:p>

                      g.fillRoundRect(92, 106, 24, 18, 2, 2);     <o:p></o:p>

                      drawText(g, String.valueOf(BlockScore), 93, 107, Graphics.TOP| Graphics.LEFT, COLOR_WHITE, Font.SIZE_MEDIUM);<o:p></o:p>

                      <o:p></o:p>

                      //画当前战况<o:p></o:p>

                                          for(int i=0;i<CANVAS_SIZE_HEIGHT-1;i++)<o:p></o:p>

                          for(int j=1;j<CANVAS_SIZE_WIDTH-1;j++)<o:p></o:p>

                              if (Gridmatrix[i][j]!=0)<o:p></o:p>

                                      draw3DBlock(g,Gridmatrix[i][j],CANVAS_OFFSET_X+j*BLOCK_SIZE,<o:p></o:p>

                                              CANVAS_OFFSET_Y+i*BLOCK_SIZE,<o:p></o:p>

                                              BLOCK_SIZE,BLOCK_SIZE);<o:p></o:p>

                      <o:p></o:p>

                                          if (!ISDOWN){<o:p></o:p>

                                          //画上新的方块<o:p></o:p>

                                               LastX=BlockX; LastY=BlockY; LastType=BlockType;<o:p></o:p>

                                               for(int i=0;i<=3;i++)<o:p></o:p>

                                                      draw3DBlock(g,BlockInfo[BlockType][8],<o:p></o:p>

                                                             CANVAS_OFFSET_X+BlockX*BLOCK_SIZE+BlockInfo[BlockType][i*2+1]*BLOCK_SIZE,<o:p></o:p>

                                                             CANVAS_OFFSET_Y+BlockY*BLOCK_SIZE+BlockInfo[BlockType][i*2]*BLOCK_SIZE,<o:p></o:p>

                                                             BLOCK_SIZE,BLOCK_SIZE);<o:p></o:p>

                                          }<o:p></o:p>

                  }<o:p></o:p>

              <o:p></o:p>

                  private boolean feasible(){<o:p></o:p>

                                   for(int i=0;i<=3;i++)<o:p></o:p>

                               if (Gridmatrix[BlockY+BlockInfo[BlockType][i*2]][BlockX+BlockInfo[BlockType][i*2+1]]!=0)<o:p></o:p>

                                      return false;<o:p></o:p>

                                   return true;<o:p></o:p>

                  }<o:p></o:p>

                  <o:p></o:p>

                  private void delline(){<o:p></o:p>

                                   for(int i=0;i<=3;i++)<o:p></o:p>

                                        Gridmatrix[BlockY+BlockInfo[BlockType][i*2]][BlockX+BlockInfo[BlockType][i*2+1]]=BlockInfo[BlockType][8];<o:p></o:p>

                                   int temp=4;<o:p></o:p>

                                   boolean CanSkip=false;  <o:p></o:p>

                                   int i=CANVAS_SIZE_HEIGHT-2;<o:p></o:p>

                                   while((temp>0)&&(i>=1)){     <o:p></o:p>

                                        CanSkip=false;<o:p></o:p>

                                        label1: for(int j=1;j<=CANVAS_SIZE_WIDTH-2;j++){<o:p></o:p>

                                            if (Gridmatrix[i][j]==0)  {CanSkip=true; i--; break label1;}<o:p></o:p>

                                        }<o:p></o:p>

                                        if (!CanSkip){<o:p></o:p>

                                            temp--;<o:p></o:p>

                                             for(int k=i;k>=1;k--)<o:p></o:p>

                                             for(int l=1;l<=CANVAS_SIZE_WIDTH-2;l++)<o:p></o:p>

                                                  Gridmatrix[k][l]=Gridmatrix[k-1][l];<o:p></o:p>

                                            BlockLines++;<o:p></o:p>

                                            BlockScore+=200;<o:p></o:p>

                                            if((BlockScore%2000)<200) CurSpeed++;      <o:p></o:p>

                                        }<o:p></o:p>

                                   }<o:p></o:p>

                  }<o:p></o:p>

                  <o:p></o:p>

                  public void run() {<o:p></o:p>

                    while (Blocker != null) {<o:p></o:p>

                                           if(!ISDOWN){<o:p></o:p>

                                               BlockY++;<o:p></o:p>

                                               if (!feasible()) {<o:p></o:p>

                                                    ISDOWN=true; BlockY--; delline();<o:p></o:p>

                                                    try {Thread.sleep(400);} catch (InterruptedException e){}<o:p></o:p>

                                               }<o:p></o:p>

                                               else{<o:p></o:p>

                                                                 repaint();<o:p></o:p>

                                                                 try {Thread.sleep(950-100*(int)BlockSpeed);} catch (InterruptedException e){}<o:p></o:p>

                                                    }<o:p></o:p>

                                                 }<o:p></o:p>

                                                 else{   BlockScore+=50;<o:p></o:p>

                                                               if((BlockScore%2000)<50) CurSpeed++;    <o:p></o:p>

                                                               ISDOWN=false;<o:p></o:p>

                                                               repaint();<o:p></o:p>

                                                               BlockSpeed=CurSpeed;<o:p></o:p>

                                                               BlockType=FutureBlockType;<o:p></o:p>

                                                               FutureBlockType=Math.abs(generator.nextInt()%19);<o:p></o:p>

                                                                  BlockX=4;     LastX=BlockX;<o:p></o:p>

                                                               BlockY=0;     LastY=BlockY;<o:p></o:p>

                                                               if (!feasible()) { init();}<o:p></o:p>

                                                 }<o:p></o:p>

                         }<o:p></o:p>

                         Blocker = null;<o:p></o:p>

                  }<o:p></o:p>

              <o:p></o:p>

                  protected void keyPressed(int keyCode) {<o:p></o:p>

                      //处理按下键盘的事件,这是Canvas的实例方法<o:p></o:p>

                      switch (getGameAction(keyCode)) {//将按键的值转化成方向常量<o:p></o:p>

                          case Canvas.UP://向上<o:p></o:p>

              <o:p></o:p>

                              break;<o:p></o:p>

                          case Canvas.DOWN://向下<o:p></o:p>

                              BlockY++;<o:p></o:p>

                              if (!feasible()) BlockY--;<o:p></o:p>

                                  repaint();<o:p></o:p>

                              BlockSpeed=9;<o:p></o:p>

                              //Blocker.run();<o:p></o:p>

                              break;<o:p></o:p>

                          case Canvas.LEFT://向左<o:p></o:p>

                                                                      BlockX--;<o:p></o:p>

                                                                      if (!feasible()) BlockX++;<o:p></o:p>

                                                                      break;<o:p></o:p>

                          case Canvas.RIGHT://向右<o:p></o:p>

                                                                      BlockX++; <o:p></o:p>

                                                                      if (!feasible()) BlockX--; <o:p></o:p>

                              break;<o:p></o:p>

                          case Canvas.FIRE:<o:p></o:p>

                                                                      int tempBlockType=BlockType; <o:p></o:p>

                                                                      if (BlockType==1) BlockType=-1;<o:p></o:p>

                                  else if (BlockType==3) BlockType=1;<o:p></o:p>

                                  else if (BlockType==5) BlockType=3;<o:p></o:p>

                                  else if (BlockType==6) BlockType=5;<o:p></o:p>

                                  else if (BlockType==10) BlockType=6;<o:p></o:p>

                                  else if (BlockType==14) BlockType=10;<o:p></o:p>

                                  else if (BlockType==18) BlockType=14;<o:p></o:p>

                                                                      BlockType++; <o:p></o:p>

                                                                      if (!feasible()) BlockType=tempBlockType; <o:p></o:p>

                              break;<o:p></o:p>

                          default:<o:p></o:p>

                              break;<o:p></o:p>

                      }<o:p></o:p>

                      repaint(); return;<o:p></o:p>

                  }   <o:p></o:p>

              }

分享到:
评论

相关推荐

    J2ME的多线程教程和测试

    但它们必须在`synchronized`代码块或方法中使用。 三、线程优先级 J2ME中的线程优先级通过`setPriority()`方法设置,有三个级别:`Thread.MIN_PRIORITY`(最低),`Thread.NORM_PRIORITY`(默认),和`Thread.MAX_...

    J2ME里面的线程和网络

    在Java Micro Edition (J2ME)中,线程和网络编程是两个至关重要的概念,尤其对于开发移动设备上的应用程序来说。J2ME为资源有限的设备提供了轻量级的Java平台,因此理解和掌握这两个主题是编写高效、响应式以及能够...

    J2ME中文教程,J2ME手机程序开发

    Java 2 Micro Edition(J2ME)是Java平台的一个重要分支,专为资源有限的嵌入式设备设计,包括移动电话、智能家电、数字电视等。本教程将深入讲解J2ME在手机程序开发中的应用,帮助开发者掌握这一核心技术。 ### ...

    J2ME 小游戏(多线程操作示例)

    在J2ME中,多线程的使用可以实现游戏的流畅运行,例如,一个线程负责游戏的图形渲染,另一个线程则处理用户的输入事件,这样即使在复杂的交互中,游戏画面也不会出现卡顿。 对于新手开发者来说,了解并实践多线程是...

    J2ME API 2.0 J2ME使用手册 J2ME帮助文档

    **J2ME API 2.0 - J2ME使用手册 - J2ME帮助文档** Java 2 Micro Edition(J2ME)是Java平台的一个子集,专为资源有限的设备如移动电话、智能手表和家用电器等设计。J2ME API 2.0 提供了在这些小型设备上开发应用...

    秒表j2me使用多线程,可倒计时及多个计时

    j2me写的秒表程序,使用多线程,对于初学者是一个很好的例子。。。

    J2ME 中文教程 MIDP2.0

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机和智能家电。MIDP(Mobile Information Device Profile)2.0是J2ME中的一个重要配置,它提供了在这些小型设备上开发应用...

    J2ME中程序优化的十个小方法

    1. **合理使用数据结构**:J2ME中的数据结构如ArrayList和Vector在内存管理上不如Java SE高效。考虑使用数组代替ArrayList,避免动态扩容带来的性能开销。对于小规模的数据存储,可以考虑使用哈希表或者简单的数组...

    j2me_plane.rar_j2me_j2me 飞机_j2me 飞机 游戏_飞机游戏

    在J2ME中,我们通常使用Canvas类作为画布,绘制游戏的各个元素。Canvas继承自Displayable,允许我们自定义绘制函数,实现游戏画面的更新。例如,在飞机游戏中,我们需要绘制飞机、敌人、子弹以及背景等元素。 事件...

    J2ME开发源码大全

    6. **多线程编程**:J2ME中的线程管理对于实现后台任务和提升用户体验至关重要。 7. **网络服务集成**:如XML解析、SOAP通信,以及与Web服务的交互。 8. **资源管理**:在有限的内存和存储条件下,有效地管理和...

    j2me中文教程

    Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发和部署嵌入式设备、移动设备以及消费电子产品的应用程序。本教程将深入探讨J2ME的基础概念、开发环境、应用模型以及实际开发过程中的关键技术和技巧...

    J2ME游戏开发(中文译本)

    2. **图形和用户界面**:详细介绍如何使用J2ME的Graphics类进行2D图形绘制,包括线条、形状、颜色填充以及图像的加载和显示。同时,还会讨论如何创建和管理用户界面组件,如按钮、文本框等。 3. **事件处理**:探讨...

    j2me移植Android引擎

    7. **线程管理**:J2ME的线程模型不同于Android,需要适应Android的AsyncTask或Thread/Handler机制。 8. **性能优化**:Android设备性能各异,移植时需注意内存管理和性能优化,避免在Android上出现J2ME中的性能...

    j2Me 实例 笔记源码

    5. **类与方法**:源码中可能包含对J2ME API的多种使用,如网络通信(利用HttpConnection和DataInputStream/OutputStream进行HTTP请求),文件I/O(FileConnection API),以及线程管理(Thread类)。 6. **事件...

    j2me中精灵知识的应用

    理解如何在J2ME中使用精灵对于创建动态、交互式的用户体验至关重要。 1. **精灵的概念**: - 精灵是一种二维图形对象,可以在游戏场景中独立移动和动画化。它们通常由多个帧组成,通过快速切换帧来创建连续的动作...

    J2ME通用进度条,解决联网、线程操作等候问题

    在Java 2 Micro Edition (J2ME)平台上开发应用程序时,常常会遇到用户需要等待联网操作或线程执行完毕的情况,比如数据下载、文件上传等。这种情况下,为用户提供一个可视化的进度条能够显著提高用户体验,让用户...

    android平台中使用j2me MIDP2.0中GameAPI

    本文将详细介绍如何在Android环境中使用J2ME MIDP 2.0的Game API,特别是四个关键工具类:Layer、LayerManager、Sprite和TiledLayer。 **Layer** 类在MIDP 2.0中是一个基础组件,它代表了一个可绘制的平面层。Layer...

    j2me 开发工具的使用

    2. **Eclipse IDE**: 另一个广泛使用的IDE是Eclipse,它同样有J2ME开发插件,如J2ME Polish和WTP(Web Tools Platform)。这些插件使开发者能进行项目管理、代码编辑和设备模拟。Eclipse的灵活性和可扩展性使其成为...

    j2me版本的深水炸弹

    在J2ME游戏开发中,为了实现游戏的流畅运行和实时响应,通常需要使用多线程。游戏的主要逻辑和用户输入处理在一个线程上,而图形渲染和其他后台任务则在另一个线程中执行,这样可以确保游戏不会因为某一任务的阻塞...

    j2me游戏.rar

    2. **事件处理**:J2ME使用键事件和触摸事件(如果设备支持)来处理用户输入,这在游戏控制中至关重要。 3. **线程管理**:游戏通常需要独立于用户界面的线程来实现游戏逻辑和动画,以确保流畅性。 4. **资源管理**...

Global site tag (gtag.js) - Google Analytics