邓志奇毕业设计总结

上传人:无*** 文档编号:83384412 上传时间:2022-05-01 格式:DOC 页数:27 大小:991.41KB
返回 下载 相关 举报
邓志奇毕业设计总结_第1页
第1页 / 共27页
邓志奇毕业设计总结_第2页
第2页 / 共27页
邓志奇毕业设计总结_第3页
第3页 / 共27页
点击查看更多>>
资源描述
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结毕业设计总结俄罗斯方块游戏 院 (系) 信息工程与艺术设计系 专 业 软件技术 学生姓名 邓志奇 学生学号 指导教师 陈静 提交时间 2011年12月2日 目 录摘 要I第一章 绪论1第二章J2ME相关知识22.1 J2ME的概念22.2 J2ME体系结构介绍22.2.1 JVM32.2.2 J2ME配置简介32.2.3 MIDP(MobileInformationDeviceProfile)移动信息设备简表32.3 J2ME手机编程的常用类42.3.1 Display类42.3.2 Canvas类42.3.3 Graphics类42.3.4 RMS记录管理系统42.4 MIDlet应用程序的生命周期5第三章 俄罗斯方块游戏设计与制作73.1游戏的具体设计流程73.1.1 俄罗斯方块游戏简述73.1.2 游戏操作流程73.1.3 系统设计思想83.1.4 系统设计主要功能103.2游戏代码分析11图6游戏开始界面11开始游戏界面部分程序代码:11结 论23致谢24参考文献24第 23 页 共 24 页摘 要随着计算机技术的发展,手机游戏已经成为游戏行业的重要组成部分。同样也可以说是成为人们日常生活中不可或缺的部分。手机游戏具有很高的经济价值,是一项很值得探索与研究的领域。“俄罗斯方块”是一款非常普及而且经典的益智类游戏,它以其操作简单,上手容易等特点倍受玩家的青睐。而本文介绍的就是在J2ME技术下利用eclipse开发工具配合java虚拟机在电脑端实现俄罗斯方块手机游戏的开发关键词:J2ME JAVA 移动设备 手机游戏 山东劳动职业技术学院毕业设计总结第一章 绪论游戏作为人们日常生活的一个重要的娱乐项目,也带动了巨大的游戏相关产业市场的发展。游戏平台从游戏机、电视游戏,到pc游戏,到手机游戏。随着手机的日益普及,人们对手机的娱乐功能的需求也相应增强,尤其是近几年手机2D、3D技术的日益成熟,大大地提高了手机游戏的娱乐性、操作性和方便性等多方面的性能。而基于手机平台的手机游戏也就拥有了巨大的市场空间,随着3g的开通和应用,手机游戏必将迎来新的一轮游戏热潮!J2ME在游戏开发方面的优势,由它开发的各种软件在手机上大规模的应用将会刮起一阵势不可挡的革命潮流。下面在本篇文章中就将详细的介绍J2ME这一技术在手机游戏制作方面的具体过程和应用。第二章J2ME相关知识2.1 J2ME的概念 J2ME的全称是Java2 Micro Edition(J2ME)Java2技术微型版,与J2SE、J2EE一样都是有美国SUM微系统公司提出的JAVA技术规范。 J2ME是为了能够开发运行在小型设备、独立设备、互联移动设备、嵌入式设备上的JAVA应用程序而被提出的。J2ME是建立在一个由概要描述、配置、JAVA虚拟机和操作系统等部分组成的标准架构之上的,这些内容共同组成了完整的J2ME实时运行环境。它的技术核心是由一个JAVA虚拟机( JVM )及一套适合运行在上述设备环境上的API接口构成。J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算设备的开发人员,这些开发人员需要在他们的产品中整合跨平台的能力。开发Java ME程序一般不需要特别的开发工具, 开发者只需要装上Java SDK 及下载免费的 Sun Java Wireless Toolkit 2.xx系列开发报,就可以开始编写Java ME程式,编译及测试, 此外目前主要的IDE(Eclipse 及 NetBeans)都支持 Java ME 的开发,个别的手机开发商如 Nokia 、Sony Ericsson、摩托罗拉、Android系统 都有自己的SDK, 供开发者在开发出兼容于他们的平台的程序。2.2 J2ME体系结构介绍J2ME的体系可划分JVM、配置、API信息类库和简表。如图1所示,其中JVM,配置和简表构成了J2ME运行环境。对于各个层次的详细解释和功能如下:图1 J2ME体系结构2.2.1 JVM在J2ME中提供了2中JVM。由于JVM是java代码运行时必须的,只有任何设备上有了JVM才能改很好的解释“一次编译,到处运行”的关键技术。那么在嵌入式或移动设备中也需要JVM作为操作系统和java应用程序间的接口。但是由于内存的限制,嵌入式设备的JVM也要特殊提供。J2ME中提供的JVM分为CVM和KVM,是JVM的缩减版,KVM比CVM功能稍弱。CVMCompactVirtualMachine,最初是这种解释的,但是后来对于C没有任何意义了。只是CVM虚拟机主要运行在存储量较大的嵌入式设备,比如可视电话.POS收款机等。KVM是最小运行时环境的一部分,也就是用于CPU和内存较小的设备,这里的K是千字节的意思。KVM主要用于移动电话,个人数字助理(PAD)等小型设备。2.2.2 J2ME配置简介当前提供的J2ME配置有两类,CDC和CLDC。CDC(ConnectionDeviceConfiguration)连接设备配置主要用于存储量较大,内存2MB以上的设备中,大多用CVM虚拟机。其用户接口较多。网络带宽有限,所以有很多不同的简表。而其最大的特点就是支持浮点数。包含了所有CLDC中定义的类和接口。CLDC(ConnectionLimitedDeviceConfiguration)有限连接设备配置。主要用于小型的资源较小的设备中,针对内存小于512Kb的嵌入式系统。采用KVM虚拟机。其特点是很多J2SE的类和接口没有实现,最大的特点就是不支持浮点数。比如银行的POS机,支持浮点数,内存较大,肯定是CDC类的设备。而个人移动电话内存小,肯定不支持浮点数。用的就是KVM虚拟机。2.2.3 MIDP(MobileInformationDeviceProfile)移动信息设备简表这里主要针对的是CLDC设备。包含3个生命周期和事件处理等机制。Paused状态:程序处于暂停状态,方法:pauseApp();Actived状态:程序处于运行活动状态。方法startApp()Destroy状态:程序运行销毁结束前的状态。DestroyApp();MIDP包含其他事件处理状态和机制。2.3 J2ME手机编程的常用类2.3.1 Display类 Display类代表了系统显示屏和输入设备的管理器,包含用来获取设备属性的方法,以及要求在设备上显示对象的方法,其他处理设备的方法主要应用在 Canvas对象。Display类直接从所有的祖先类Object继承而来。2.3.2 Canvas类 为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是Canvas 抽象类进行绘图。从程序开发的观点看,Canvas 类可与高级Screen 类交互,程序可在需要时在Canvas 中掺入高级类的组件。Canvas 提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。 2.3.3 Graphics类Graphics 是图形处理的基础类,提供了简单的2D 绘图功能。使用Graphics 类可以在屏幕上绘制图片、线条、文字等多种低级的界面。它具有 24 位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在 paint() 函数中使用 Graphics 绘制, GameCanvas 可调用 getGraphics()函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。其对象会被传给Canvas 的paint()函数,以便最终显示。2.3.4 RMS记录管理系统移动信息设备框架(Mobile Information Device Profile)和 移动 Java 应用程序的平台 为 MIDP 应用程序提供一种跨多个调用持久存储数据的机制。这种持久存储机制可以被视为一种简单的面向记录的数据库模型,被称为记录管理系统(record management system(RMS)。通过这种机制,MIDlet 能够持久存储数据,并在以后检索数据。在面向记录的方法中,J2ME RMS 由多个记录存储构成。可以将每个记录存储想像成一个记录集合,它将跨多个 MIDlet 调用持久存在。设备平台负责在平台正常使用的整个过程(包括重新启动、换电池等)中,尽全力维护 MIDlet 的记录存储的完整性。记录存储在与平台相关的位置(比如非易失性设备存储器)创建,这些位置不直接公开给 MIDlet。RMS 类调用特定于平台的本机代码,这种本机代码使用标准 OS 数据管理器函数来执行实际的数据库操作。 记录存储实现确保所有单个的记录存储操作都是原子的、同步的以及序列化的,因此多个访问将不会出现数据毁坏。记录存储被盖上时间戳来指示它上次被修改的时间。记录存储还维护版本(version),它是一个整数,修改记录存储内容的操作每发生一次,这个数加一。版本和时间戳对于同步目的很有用。 当 MIDlet 使用多个线程访问一个记录存储时,协调该访问是 MIDlet 的责任;如果它不能这样做,可能出现无法意料的结果。同样,如果一个平台使用试图同时访问记录存储的多个线程执行记录存储的同步,那么对 MIDlet 及其同步引擎之间的记录存储实施排外访问是平台的责任。 记录存储中的每个记录是一个字节数组,并且有唯一的整数标识符。2.4 MIDlet应用程序的生命周期理解J2ME的体系结构并不像想象的那么容易,我们觉得读更多的资料帮助也不大,我们直接迈向J2ME开发也许会对你理解J2ME平台体系结构这个重要的概念有所帮助。在MIDP中定义了一种新的应用程序模型MIDlet,它是被Application Management Software(AMS)管理的。AMS负责MIDlet的安装、下载、运行和删除等操作。在被AMS管理的同时,MIDlet可以和应用管理软件通信通知应用管理软件自己状态的变化,通常是通过方法notifyDestroyed()和notifyPaused()实现的MIDlet有三个状态,分别是pause、active和destroyed。在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态,也就是所说的运行状态。在active状态调用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。值得一提的是destroyApp(boolean unconditional)方法,事实上,当destroyApp()方法被调用的时候,AMS通知MIDlet进入destroyed状态。在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。如果unconditional为false的时候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态。图2说明了MIDlet状态改变情况:图2 MIDlet生命周期第三章 俄罗斯方块游戏设计与制作3.1游戏的具体设计流程3.1.1 俄罗斯方块游戏简述俄罗斯方块是个老幼皆宜的小游戏,它是由四块正方形的色块组成,然后存储在一个数组的四个元素中,由计算机随机产生七种不同形状的方块,然后玩家可以根据键盘的四个方向键控制翻转、向左、向右和向下的操作来堆叠成各种不同的形状。(控制键的实现是由键盘的方向键的事件处理实现)3.1.2 游戏操作流程本游戏的操作流程非常简单,用户启动MIDlet后,进入游戏运行界面,选择“帮助”进入游戏帮助界面,选择“退出游戏”则退出整个游戏。在游戏运行界面,当用户想暂停游戏时,按下#按钮,游戏就暂停了,在暂停的情况下按#按钮,游戏继续运行。在游戏结束界面按下“最高分”按钮进入最高分界面任何时候点击 退出按钮,游戏MIDlet都会终止。如图3所示:图3 游戏框架3.1.3 系统设计思想MIDP的游戏设计,本质上就是用一个线程或者定时器重绘事件,用线程和用户输入改变游戏状态。这个俄罗斯方块也不例外,当启动MIDlet以后,就立即生成一个重绘线程,该线程每隔几ms就重新绘制一次屏幕。当然重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择。比如游戏画布上那些已经固定下来的下坠物(下坠物有7种,由4个小砖块组成,可以上下左右旋转变形)就不需要重绘。游戏画布是一个CommandListener,可以接收用户键盘输入命令:控制下坠物的左移、右移、加速下落、变形旋转动作。下坠物能否下坠下坠物下坠一格在当前位置绘制下坠物固定下坠物是否需要删除行重绘游戏地图初始化一个新的下坠物游戏是否结束绘制游戏结束画面绘制新下坠物游戏处于运行状态是是否否否是游戏处于暂停状态游戏处于结束状态结束游戏执行空操作图4 游戏控制流程整个游戏的控制流程体现在游戏画布的paint()方法里,paint()根据当前的游戏状态,绘制出当时的游戏画面。而暂停画面的绘制,是通过设立标志,让paint ()无需真正的执行重绘动作。对于游戏处于运行状态的画面绘制,则需要在下坠物当前位置绘制下坠物。在绘制下坠物之前,判断下坠物是否还能下坠,如果能下坠就让它下落一格,再进行绘制,如果下坠物不能下坠,则把下坠物固定下来,同时检查游戏画布上下坠物当前下面所有的行,看是否能进行删行动作,如果需要进行删行动作,则清楚游戏画布上被删行的数据,再把删行之上的所有行都下移一行,然后再初始化一个新的下坠物。如果不需要删除行,则判断游戏是否处于结束状态,如果是处于结束状态,则设置游戏状态为GAME_OVER状态,这样画布在下一次重绘时就给出游戏结束的画面。如果不是处于GAME_OVER状态,则绘制新下坠物,然后判断下坠物能否下坠,重复以上动作。3.1.4 系统设计主要功能 从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,我们在设计中在一个图片框中构造了一个4*4的网状小块,由这些小块组合成新的形状,每四个小块连接在一起就可以构造出一种造型,本游戏总共设计了7种造型,每种造型又可以通过旋转而变化出4种形状,利用随机函数在一个预览窗体中提前展示形状供用户参考,然后将展示的形状复制到游戏窗体中进行摆放,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,其中,方块向下的速度是由时钟控件控制的,在游戏中,用户也可以使用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用判断语句对得分进行判断,当达到一定的积分时游戏难度就会增加。俄罗斯方块游戏设计的主要步骤包括以下5个方面:1. 游戏界面的设计,以及游戏方块的造型游戏界面分两大部分,左侧为游戏容器,为游戏运行提供空间;右侧用来显示得分、游戏难度及下一个下坠物。游戏方块本质上为16个小砖块组成的正方形,一共有七种,如“田”字形、“L”字形等。每种方块一共有四种旋转变化,程序中是用16进制表示的这些方块,这些用16进制表示的方块可以换算成用一个44的二维数组来存储每种方块的一种状态。在有色砖块出现的位置,值为1,而只有背景颜色,无需绘制的位置,值为0。如图5所示为长条形: 图5 方块模型2. 俄罗斯游戏方块的旋转和运动控制该游戏方块的运动由键盘的方向键控制,左键表示让方块向左移动,右键表示让方块向右移动,向下的方向键让方块加速下落,上键及中间键实现游戏方块的旋转变化。3. 俄罗斯游戏方块的颜色选择该游戏中的4种方块都是固定的颜色,每种方块一种颜色。4. 俄罗斯方块的自动消行功能和计分功能游戏中当方块填满一行时便可以消行,每消去一行分数增加1,同时消去的行数越多,分数增长的越快。5. 游戏的自动升级功能该游戏设置的游戏等级是自动增加的。当玩家达到一定的分数时,游戏等级上升,当然游戏难度也会上升3.2游戏代码分析图6游戏开始界面开始游戏界面部分程序代码:public GameScreen(RussiaBoxMIDlet midlet) this.midlet = midlet;/ 获取屏幕大小screenWidth = getWidth();screenHeight = getHeight();/ 添加屏幕命令exitCommand = new Command(退出, Command.EXIT, 1);newGameCommand = new Command(开始, Command.SCREEN, 2);addCommand(exitCommand);addCommand(newGameCommand);/ 侦听命令按键setCommandListener(this);/ 装载位图片段try fangkuai = Image.createImage(/fangkuai.png);catch (Exception e)/* (非 Javadoc) * see javax.microedition.lcdui.CommandListener#commandAction(javax.microedition.lcdui.Command, javax.microedition.lcdui.Displayable) */public void commandAction(Command arg0, Displayable arg1) if (arg0 = exitCommand) timer.cancel();isGameOver = true;try / 退出midlet.quit(); catch (MIDletStateChangeException e) / TODO 自动生成 catch 块e.printStackTrace();else if (arg0 = newGameCommand) / 开始游戏initialize(); 图7游戏运行中界面 private void initialize() / 初始化数据for (i = 0; i SQUARE_AMOUNT; i+)for (j = 0; j SQUARE_AMOUNT; j+)IsFilledji = false;for (i = 0; i 4; i+)sq.ps_xi = sq.ps_yi= 0;sq.type = 0;Score = 0;/ 白色清空画布 graph.setColor(WHITE);graph.fillRect(0, 0, screenWidth, screenHeight);/ 重绘屏幕isGameOver = false;isNextOne = true;repaint();public void paint(Graphics g) graph = g;if (isGameOver = true)return;/ 重绘if (isNextOne = true)OnNewSquare();public void erasebackground()/ 白色清空画布 graph.setColor(WHITE);/ 擦除上次停留位置for (i = 0; i = 0 & sq.ps_yi = 0)graph.fillRect(sq.ps_xi * UNIT_SIZE, sq.ps_yi * UNIT_SIZE, UNIT_SIZE, UNIT_SIZE);/* * author Administrator * * TODO 要更改此生成的类型注释的模板,请转至 * 窗口 首选项 Java 代码样式 代码模板 */public class Square public int ps_x = new int4;public int ps_y = new int4;public int type; 图8游戏结束界面 游戏结束界面全部代码:import java.util.TimerTask;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;public class Thinking extends TimerTaskprivate static final int WHITE = 0x00FFFFFF;private static final int BLACK = 0x00000000;private int i = 0;private int j = 0;public GameScreen gameScreen;public Thinking(GameScreen screen)this.gameScreen = screen;/* (非 Javadoc) * see java.util.TimerTask#run() */public void run() / 是否不能再往下落了for (i = 0; i 4; i+)if (gameScreen.IsFilledgameScreen.sq.ps_xigameScreen.sq.ps_yi = true)/ 游戏结束gameScreen.isGameOver = true;cancel();/ 状态信息String statusMsg = 本局积分: + String.valueOf(gameScreen.Score);/ 设置字体Font font = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);int strHeight = font.getHeight();int strWidth = font.stringWidth(statusMsg);/ 计算字符绘制位置 int x = (gameScreen.screenWidth - strWidth) / 2;x = x 0 ? 0 : x;int y = (gameScreen.screenHeight - 2 * strHeight) / 2;y = y 0 ? 0 : y;/ 白色清空画布 gameScreen.graph.setColor(WHITE);gameScreen.graph.fillRect(0, 0, gameScreen.screenWidth, gameScreen.screenHeight);/ 黑色显示信息gameScreen.graph.setColor(BLACK);gameScreen.graph.drawString(statusMsg, x, y, (Graphics.TOP | Graphics.LEFT);gameScreen.repaint();return;if (gameScreen.sq.ps_yi = gameScreen.SQUARE_AMOUNT - 1 | gameScreen.IsFilledgameScreen.sq.ps_xigameScreen.sq.ps_yi + 1 = true)/ 填充方块所占的区域for (j = 0; j 4; j+)gameScreen.IsFilledgameScreen.sq.ps_xjgameScreen.sq.ps_yj = true; cancel();/ 消去方块 boolean flag = new boolean16;boolean full = false;for (i = 0; i = 0; i-) / y shaftfor (j = 0; j = 0; i-)/ 消去这一行if (flagi = true) gameScreen.Score = gameScreen.Score + 100;for (j = 0; j = 0; i-)/ 这行没有消去,进行下落处理if (flagi = false)int temp = i + 1;int offset = 0;while (temp gameScreen.SQUARE_AMOUNT)if (flagtemp = true)offset+;temp+;for (j = 0; j gameScreen.SQUARE_AMOUNT; j+)if (gameScreen.IsFilledji = true)int ptx = j * gameScreen.UNIT_SIZE;int pty = i * gameScreen.UNIT_SIZE;/ 白色清空画布 gameScreen.graph.setColor(WHITE);/ 擦除上次停留位置gameScreen.graph.fillRect(ptx, pty, gameScreen.UNIT_SIZE, gameScreen.UNIT_SIZE);gameScreen.graph.drawImage(gameScreen.fangkuai, ptx, pty + offset * gameScreen.UNIT_SIZE, 0); gameScreen.IsFilledji = false;gameScreen.IsFilledji + offset = true;/ 产生新的方块组合gameScreen.isNextOne = true;gameScreen.repaint();return;/ 擦除背景gameScreen.erasebackground();/ 移动方块 for (i = 0; i 4; i+)gameScreen.sq.ps_yi = gameScreen.sq.ps_yi + 1;gameScreen.graph.drawImage(gameScreen.fangkuai,gameScreen.sq.ps_xi * gameScreen.UNIT_SIZE, gameScreen.sq.ps_yi * gameScreen.UNIT_SIZE, 0);/ 没有落到底时不产生新的方块组合gameScreen.isNextOne = false;gameScreen.repaint(); 结 论本论文从分析、设计到实现,揭示了一个手机俄罗斯方块游戏开发的一般过程。本文主要介绍了使用低级界面函数如Canvas等,进行基本的游戏开发,使用这些基本的知识可以全面的熟悉和了解游戏构造的基本原理,俄罗斯方块手机游戏是手机游戏代表作中最为典型的一个,并且实现起来并不复杂,对系统的掌握、J2ME开发的流程也很有作用。通过研究俄罗斯方块游戏的设计和实现过程,也是为以后构造自己的游戏引擎做最好的基石铺垫。毕业设计是对大学所学知识的一次全面检验,通过本次毕业设计使我了解到理论与实践结合的重要性,同时也看到自己的不足。在以后的人生道路上,要不断探索求知,不断自我完善,使自己成为一名合格的IT人才。 致谢在论文结束之际,我要对我的指导老师表示衷心的感谢。在整个论文写作过程中,我始终得到了吕树红老师的悉心指导。她一丝不苟的工作态度和对学生的认真负责的态度使我受益匪浅。通过这一阶段的努力,我的毕业论文终于完成了,这意味着大学生活即将结束。在大学阶段,我在学习上和思想上都得到了极大的提高,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。在本论文的写作过程中,陈老师倾注了大量的心血,从选题到开题报告,从写作提纲,到一遍又一遍地指出论文中的具体问题,严格把关,循循善诱,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。写作毕业论文是一次系统学习的过程,毕业论文的完成,同样也意味着新的学习生活的开始。感谢所有任课老师和所有同学在这三年来给自己的指导和帮助,是他们教会了我专业知识,教会了我如何学习,教会了我如何做人。正是由于他们,我才能在各方面取得明显的进步,在此向他们表示我由衷的谢意,并祝所有的老师培养出越来越多的优秀人才,桃李满天下!参考文献1. 朱海华,卢颖.基于J2ME的手机游戏系统的实现.北京:中国电力出版社,20052陈小玉,杨新锋.基于J2ME的Java手机游戏开发技巧.电脑编程技巧与维护,20063. 汪永松.J2ME手机高级编程.北京:机械工业出版社,20104. 王勇,周必水.基于J2ME的手机游戏程序的几个实现技巧.计算机时代,20095. 张晓蕾.J2ME手机游戏设计案例教程.北京:人民邮电出版社,20106. 温尚书.J2ME无线通信实用案例教程.北京: 清华大学出版社,2009
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!