




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号 总页数: 毕业设计专业名称: 班 级: 姓 名: 学 号: 指导老师: 二 年 月 日 基于JAVA的五子棋游戏开发*计算机工程系摘要:五子棋作为一个棋类竞技运动在民间十分流行,为了熟悉五子棋规则及技巧,以及研究简单的人工智能,决定用Java开发五子棋游戏。本系统是一个基于JavaME平台的无线网络移动端的五子棋游戏,利用JavaMEWirelessToolkit(WTK)开发包工具在无线网络移动端上实现经典的五子棋游戏。论文开始部分对无线网络移动系统开发中常使用几种开发语言和环境作了比较,说明了选择JavaMEWirelessToolkit作为开发环境的的原因并对它作了相关的介绍。并展示了在WTK中打开一个项目、把源文件打包成JAR包、产生混淆包的方法和过程。在系统设计时,遵循了无线网络移动端程序的startApp、pauseApp、destroyApp的开发生命周期。在设计与实现方面,分成难度选择、游戏规则、电脑智能级别、棋盘大小等这几个模块进行实现。在开发与实现的同时也介绍了五子棋这款古老而经典游戏的游戏背景、规则以及相关特性。最终展示了无线网络移动端的游戏开发的基本开发过程和设计思路。在人机对弈中通过深度搜索和估值模块,来提高电脑棋手的智能。分析估值模块中的影响精准性的几个要素,以及提出若干提高精准性的办法,以及对它们搜索的节点数进行比较,在这些算法的基础上分析一些提高电脑AI方案,如递归算法、电脑学习等。算法的研究有助于理解程序结构,增强逻辑思维能力,在其他人工智能方面也有很大的参考作用。关键词:无线网络移动端;JavaME;五子棋;游戏开发;算法;电脑AI目录1 绪论42 游戏开发环境42.1 Java的编程环境42.2 Java ME WTK52.3 WTK安装过程53 五子棋游戏设计63.1游戏背景6传统五子棋6称谓7起源73.2五子棋游戏规则及解释73.3五子棋常用术语83.4五子棋攻防九诀94 游戏总体设计104.1程序流程:105 游戏详细设计115.1操作界面设计115.1.1 界面绘制125.1.2棋盘绘制135.2游戏设置145.3 程序流程控制设计156 游戏调试247 总结258 参考文献251 绪论Java是由美国的Sun Microsystems公司发展出来的一套面向对象程序语言,因为它的面向对象,分散运算,跨平台等等特性,又支持多线程。使得许多用过的人都爱不释手。Java既是一种程序设计语言,也是一种完整的平台。作为一种程序语言,它简洁、面向对象、安全、健壮,以及适用于Internet技术;而作为一个平台对于符合Sun公司Java标准的应用程序,都可以在Java平台上正确运行,与程序运行操作系统无关。Java发展到今天,已从编程语言发展成为全球第一大通用开发平台,Java技术已被计算机行业主要公司所采纳。1999年,Sun公司推出了以Java2平台为核心的J2EEJ2SE和J2ME三大平台。随着三大平台的迅速推出,全球形成了一股巨大的Java应用浪潮。这个五子棋游戏正是用这个平台做的,在实践中充分体现了Java面向对象给我们带来的方便。多用户聊天程序也让我们体会到了Java多线程的强大功能。2 游戏开发环境2.1 Java的编程环境首先要下载J2SE,安装后就要设置环境变量:(1)classpath类路径的设置:在桌面选择“我的电脑”单击鼠标右键,选择“ 属性”在菜单中选择“高级”选项卡,点击“环境变量”选择“系统变量”点“新建”出现两个输入框,一个为变量名,一个为变量值。在变量名输入“classpath”。变量值输入lib文件夹下的所有jar包的路径。(注意:输入前加一个“.”表示当前路径,然后用“;”隔开,每一个路径都要隔开。)(2)path系统路径同样在环境变量下,选择“系统变量”点“编辑”出现两个输入框,一个为变量名,一个为变量值。变量名为path,变量值是把bin路径加到变量值输入框内就可以了。设置完了,我们来测试一下。在开始菜单中选择“运行”,输入cmd,打开命令窗口,又称为控制台窗口(dos窗口),输入“java-version”如果设置正确会显示你当前的下载版本信息。再输入javac来执行,正确就会显示java编译器命令的参数。2.2 Java ME WTK 1. 什么是J2ME Wireless ToolkitWTK 的全称是Sun J2ME Wireless Toolkit Sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。使用其中的工具可以开发与 Java Technology for the Wireless Industry (JTWI, JSR 185) 规范兼容的设备上运行的j2me 应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作时为止可以获取有四个版本,分别是1.0.4, 2.0, 2.1和2.2。每个版本都包括英语,日语,简体中文,繁体中文4个语种包。1.0.4版只能够开发MIDP1.0 应用程序。2.0版只能够开发MIDP2.0 应用程序。2.1版则可以同时开发MIDP1.0、 JTWI(CLDC 1.0, MIDP2.0, WMA1.1)可改用CLDC1.1或加入MMAPI1.1),自定义(自己随机组合Configuration, Profile以及Optional Package)三种环境下的应用程序。2.2版中,WTK全面的支持JTWI规范。具体的说,即MIDP 2.0, CLDC 1.1, WMA 2.0, MMAPI 1.1, Web Services (JSR 172), File and PIM APIs (JSR 75), Bluetooth and OBEX APIs (JSR 82), and 3D Graphics (JSR 184);同时也可以使用该版本开发面向CLDC1.0 和MIDP1.0的应用程序。系统要求上,WTK2.2至少需要50MB可用硬盘,128MB系统RAM和800MHZ Pentium III CPU。可以在sun的官方网站免费下载。WTK2.2 下载链接: WTK是Sun提供的一个开发工具包。目前各大手机厂商往往把WTK经过自身的简化与改装,推出适合自身产品,如SonyEricsson,Nokia Developers suit等,都属于此种类型;而通过JBuilder, Eclipse等IDE,J2ME开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。2.3 WTK安装过程WTK的安装程序与普通程序一样简单,只有一点需要注意,由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的JDK(我们这里选用的是JDK1.4.2)。WTK会首先自动检测当前系统已有的Java虚拟机;然后显示出当前虚拟机所在路径,在确定无误后,就可以继续了,最后安装成功后,将得到一个包括多种实用工具的开发包。WTK是用来开发MIDP的,为了让MIDlet可以顺利编译和执行,WTK必须具有CLDC和MIDP的类库,WTK可以帮助我们省去额外安装调试这些类库的时间。而不同版本的WTK包含的程序库内容是不一样的,比如说2.0中包含了midpapi.jar, wma.jar, mmapi.jar,而在2.1中则变为了cldcapi10. jar, cldcapi11.jar, midpapi10.jar, midpapi20.jar, wma.jar以及mmapi.jar;在2.2中,wma.jar又细分为wma11.jar, wma20.jar。如果您在开发中需要某个特定的jar包而当前的WTK版本又没有时,您可以简单把这个jar包拷贝如当前WTK的lib文件夹即可。3 五子棋游戏设计3.1游戏背景传统五子棋传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为1919,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。 图1称谓五子棋,日文亦有“连五子、五子连、串珠、五目、五目碰、五格、五石、五法、五联、京棋”等多种称谓,英文则称之为“FIR (Five In A Row的缩写)、Gomoku(日语“五目”的罗马拼音)、Gobang、connect 5、mo-rphion”。捷克语piskvorky,韩语omok 许多国家的人对五子棋都有不同的爱称,例如,韩国人把五子棋称为“情侣棋”,暗示情人之间下五子棋有利于增加情感的交流;欧洲人称其为“绅士棋”,代表下五子棋的君子风度胜似绅士;日本人则称其为“中老年棋”,说明五子棋适合中老年人的生理特点和思维方式;美国人喜欢将五子棋称为“商业棋”,也就是说,商人谈生意时可边下棋边谈生意,棋下完了生意也谈成了。 起源五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。在上古的神话传说中有“女娲造人,伏羲做棋”一说,增山海经中记载:“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。”李善注引三国魏邯郸淳艺经中曰:“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。这段虽没明讲是何种棋类,但至少知道远古就以漂亮的石头为棋子。因而规则简单的五子棋也可能出自当时,并是用石子作棋子。亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。在古代,五子棋棋具虽然与围棋相类同,但是下法却是完全不同的。正如辞海中所言,五子棋是“棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子 连成一行者为胜”。3.2五子棋游戏规则及解释1.黑棋先行,白棋随后。从天元开始相互顺序落子。2.最先在棋盘的横向、竖向、斜向形成连续的相同色五个棋子的一方为胜利。3.黑棋禁手判负、白棋无禁手。黑棋禁手包括“三、三”;“四、四”;“连”。 黑方只能用“四、三”去取胜。4.如分不出胜负,则定位平局。5.对局中拔子、中途退场均判为负。6.五连与禁手同形成,先五为胜。7.黑方禁手形成时,白方颖立即指出。若白方未发现或发现后不立即指正,反而继续落子,则不能判黑方负。五子棋是由两个人在一起盘上进行对抗的竞技运动。在对局开始时,先由执黑棋的一方将一枚棋子落在“天元”上,然后再由执白棋的一方在黑棋周围的交叉点上落子。如此轮流落子直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子或五子以上,则该方就算获胜。但是五子棋的特点是先行的一方优势大。因此,在职业比赛中对黑方做了种种限制,以利公平竞争。黑方双方的胜负结果必须按照职业五子棋的规则要求来决定。3.3五子棋常用术语1.着:也称“步”。对局中把一棋子按照规则放到某一交叉点,称之为一着棋。一着棋是否完成有两种规则:(1)在执行落子舞会规则时,以行棋者的手离开棋子一着已完成。(2)在执行限时规则时,以行棋者按下棋钟作为一着完成。2.PASS:五子棋中引入的英文名称,即应该行棋的一方主动放弃此次行棋的机会,由对方继续行棋。3.先手:对方必须应答的着法,如对方形成三必须阻止形成活四。4.绝对先手:相对先手而言,即形成同色连四或嵌五,对方必须应着,就是绝对先手。绝对先手又叫“冲”。5.VCF:(Victory of Continus Four的缩写)意思是利用连续冲四取胜之意。利用连续不断地冲四或嵌五德绝对先手,制止形成连五获得胜利的一种方法。在对局接近尾声或排局解题中一种常见的取胜技巧。6.追下取胜:是指白棋利用黑棋禁手取胜的战术。白1冲四,迫使黑2行成“四、四”禁手(即冲四,活四禁手),这种取胜方法叫做追取胜。7.自由取胜:追下取胜以外的取胜方法,即未利用黑棋禁手战术取胜。8.一子双杀:是指对局中一方落子后出现两个获胜点,而使对方无法防守情形。一般是有两个冲四活三点,白棋的双活三,双四均可称为一子双杀。9.阳线:棋盘上可见的横线与直线的总称。10.阴线:也称“斜线”。是棋盘上不可见的横斜线。11. “四、三”:指同时具备两个先手,其中一个四,另一个是活三。12. “活三”、“嵌五”、“冲四”:参见五子棋重要棋形讲座。13. 禁手:对局中禁止使用的战术或被判为负的行棋手段。14. 开局:也称“布局”。布局阶段大体为七至十几着之内。种类繁多,职业连珠五子棋有二十四种开局。15. 局面:亦称“局势”。为对局中某一段时间内双方子力的配置情况。16. 优势:是指足以取胜的优势局面,其对方即为败势。17.妙着:对局中走出的一步精妙的着法。既合乎逻辑又出人意料,有使局面顿时改观的效果,对局势的发展及对局的质量有重大影响。18. 好着:也称“佳着”。对局中成功的某一步。19. 正着:对局的某一局面中的正确着法。20. 劣着:对局中,导致严重不利后果的一步错误着法。21. 败着:也称“失着”“漏着”。对局中造成局面恶化的一步严重错误着法。22. 等着:对局中具有等待性的一步着法,主要意图是等待有利时机。23. 废着:也称“空着”。对局中不起作用的着法。实际上指浪费时间毫无疑义的错着。24. 抢先:对局中利用反活三或冲四的强制手段夺取主动权的着法。25. 打谱:按照棋谱演练着法,是提高棋艺水平的重要方法之一。26. 复局:也叫“复着”。对局结束又重演对局的过程。一般用以研究、比较双方的成败得失和着法的优劣。3.4五子棋攻防九诀博弈之道,贵在严谨;连珠之妙,贵在争先。 执黑先行,巧妙布阵,先手先机,一举成功。 执白后行,稳固防守,守中带攻,变后为先。 开局布二,力争主动;中盘抢三,聚力争胜。 虚实相顾,点线相应,眼观六路,三思而行。 连三跳三,临场应变;留三不冲,可以跳四。 成角易攻,攻取要点;八卦易守,守其必争。 先后次序,得心应手;攻彼顾我,攻守兼备。 温故知新,勤于研究;纹枰对弈,乐在棋中。4 游戏总体设计4.1程序流程: 图2流程图中开始游戏就会初始化游戏界面,显示出游戏画面,玩家可根据相应的需求对游戏进行设置。玩家可以设置让电脑先下子,或者玩家先下子,当电脑下完子后就轮到玩家下子。最后就可以根据规则判断游戏胜负。利用层次图来表示软件中各模块之间的关系.层次方框图是用树形结构的一系列多层次的矩形框描绘数据的层次结构.树形结构的顶层是一个单独的矩形框,它代表完整的数据结构,下面的各层矩形框代表各个数据的子集,最底层的各个矩形框代表组成这个数据的实际数据元素(不能再分割的元素).随着结构的精细化,层次方框图对数据结构描绘也越来越详细,这种模式非常适合于需求分析阶段的需要.从对顶层信息的分类开始,沿着图中每条路径反复细化,直到确定了数据结构的全部细节为止.本游戏软件一共分为三大模块:开局、游戏设置、帮助和退出游戏.每个模块的功能都是按照在调研中搜集的资料进行编排制作的.依据上述功能的分析,本游戏软件在四大模块的基础上每一大模块又分为几个模块:开局包括五个模块:开始游戏、重新游戏、悔棋、认输、和退出游戏.游戏设置包括三个模块:先后手设置、棋盘大小设置和电脑智能级别设置.帮助包括两个模块:游戏帮助和关于.各模块的详细功能如下:开始游戏:进行新一局的五子棋游戏.重新游戏:游戏结束或人方认输时可以进行新的游戏.悔棋:人机对弈时人方对自己的上一步棋重新思考.认输:人机对弈时人方自动放弃本局.退出游戏:退出此手机五子棋游戏软件.先后手设置:对人机双方下棋先后顺序的选择.棋盘大小设置:对五子棋棋盘大小的选择.电脑智能级别设置:对难度的选择.5 游戏详细设计5.1操作界面设计操作界面显示的是有戏刚开始的界面,界面描绘的是一幅对弈的场景,界面中有四个按钮,上面写着“开局”,“设置”,“关于”,“退出”。按下按钮会有相应的操作 。操作界面如下: 图35.1.1 界面绘制图45.1.2棋盘绘制图5模拟器中显示一个棋盘,棋盘覆盖在画面上,棋盘的左上方写着“请下子”,左右下方各有一个按钮,上面分别写着“退出”、“悔棋”。按下“退出”按钮就可以退出游戏,按下“悔棋”按钮玩家就可以对上一步棋进行思考,再重新落子。程序1:public void itemStateChanged(Item item) if(item = gaugeSize) int bs = gaugeSize.getValue() + 10; gaugeSize.setLabel(棋盘大小: + bs + X + bs); public void commandAction(Command c, Displayable s) if(c = CMD_OK) boardSize = gaugeSize.getValue() + 10; if(boardSize 20) boardSize = 20; if(boardSize 10) boardSize = 10; isComputerFirst = choiceFirst.isSelected(0); degree = choiceDegree.getSelectedIndex() + 1; saveOptions(); FlowControl.show(FlowControl.FORM_MENU); else if(c = CMD_CANCEL) FlowControl.show(FlowControl.FORM_MENU); 5.2游戏设置 图6画面上显示的是一个Form表单,上面写着“游戏设置”,表单上包含三个小模块,分别写着“棋盘大小”,“对方先行”,“电脑智能级别”。左下角是一个“取消”的按钮,右下角是一个“确定”按钮。玩家可以根据自己的需求对游戏进行设置。例如可以设置棋盘的大小,课以选择对方先行或玩家先行,还可以选择电脑智能级别。选好之后按下“确定”按钮,即游戏设置完成,按下“取消”按钮则不对游戏进行设置。程序2:public FormSet() / TODO Auto-generated constructor stubsuper(游戏设置); boardSize = 15; isComputerFirst = true; degree = 1; loadOptions(); gaugeSize = new Gauge(棋盘大小: + boardSize + X + boardSize, true, 10, boardSize - 10); this.append(gaugeSize); choiceFirst = new ChoiceGroup(null, 2); choiceFirst.append(对方先行, null); choiceFirst.setSelectedIndex(0, isComputerFirst); this.append(choiceFirst); choiceDegree = new ChoiceGroup(电脑智能级别:, 1); choiceDegree.append(拜师学艺, null); choiceDegree.append(初出茅庐, null); choiceDegree.append(闯荡江湖, null); choiceDegree.append(谁与争锋, null); choiceDegree.setSelectedIndex(degree-1 , true); this.append(choiceDegree); this.setItemStateListener(this); CMD_OK = new Command(确定, 4, 2); CMD_CANCEL = new Command(取消, 3, 1); this.addCommand(CMD_OK); this.addCommand(CMD_CANCEL); this.setCommandListener(this);5.3 程序流程控制设计程序3: package com.mjrg.five.ui;import java.io.IOException;import javax.microedition.lcdui.Canvas;import javax.microedition.lcdui.Command;import javax.microedition.lcdui.CommandListener;import javax.microedition.lcdui.Display;import javax.microedition.lcdui.Displayable;import javax.microedition.lcdui.Font;import javax.microedition.lcdui.Graphics;import javax.microedition.lcdui.Image;import javax.microedition.rms.RecordStore;import javax.microedition.rms.RecordStoreException;import com.mjrg.five.FIRMIDlet;import com.mjrg.five.FlowControl;import com.mjrg.five.util.Dot;import com.mjrg.five.util.FIRLogic;public class FormMain extends Canvas implements CommandListener private Command CMD_STOP; private Command CMD_NEW; private Command CMD_UNDO; private FIRLogic logic; private int boardSize; private boolean isComputerFirst; private int degree; private int canvasWidth; private int canvasHeight; private int cWidth; private int cHeight; private Font font; private int fontWidth; private int fontHeight; private int boardX; private int boardY; private int boardLength; private int gridLength; private int stoneLength; private int statusY; private String status; private int statusColor; private boolean isUpSide; private final Image imgStatus = new Image4; private int statusImage; public static int THINK = 0; public static int SMILE = 1; public static int CRY = 2; public static int NONE = 3; private boolean isColor; public FormMain() / TODO Auto-generated constructor stub CMD_NEW = new Command(重玩, 4, 2); CMD_STOP = new Command(退出, 2, 1); CMD_UNDO = new Command(悔棋, 1, 3); addCommand(CMD_NEW); addCommand(CMD_STOP); setCommandListener(this); canvasWidth = getWidth(); canvasHeight = getHeight(); status = ; statusColor = 0; isUpSide = true; for(int i = 0; i canvasWidth; if(isUpSide) cWidth = canvasWidth; cHeight = canvasHeight - fontHeight; else cWidth = canvasWidth - fontWidth; cHeight = canvasHeight; boardLength = cWidth cHeight ? cHeight : cWidth; gridLength = boardLength / boardSize; boardLength = gridLength * boardSize; boardX = (cWidth - boardLength) / 2; boardY = (cHeight - boardLength) / 2; if(isUpSide) boardY += fontHeight; stoneLength = gridLength - 2; public void paint(Graphics g) /清除屏幕 g.setColor(0xffffff); g.fillRect(0, 0, canvasWidth, canvasHeight); /如果是彩色显示屏幕,那么填充边界 if(isColor) g.setColor(219,219,0); g.fillRect(boardX, boardY, boardLength, boardLength); g.setColor(isColor ? 255 : 0); int y; for(int r = 0; r boardSize; r+) int x1 = boardX + gridLength / 2; int x2 = (x1 + boardLength) - gridLength; y = boardY + r * gridLength + gridLength / 2; g.drawLine(x1, y, x2, y); int x; for(int c = 0; c boardSize; c+) x = boardX + c * gridLength + gridLength / 2; int y1 = boardY + gridLength / 2; int y2 = (y1 + boardLength) - gridLength; g.drawLine(x, y1, x, y2); int computerColor; int manColor; if(isComputerFirst) computerColor = 0; manColor = 0xffffff; else computerColor = 0xffffff; manColor = 0; Dot triedDot = logic.triedDot(); int triedRow = triedDot.getRow(); int triedCol = triedDot.getCol(); for(int r = 0; r boardSize; r+) for(int c = 0; c boardSize; c+) if(r != triedRow | c != triedCol) int stone = logic.getTable()rc; if(stone != 0) x = xByCol(c) - stoneLength / 2; y = yByRow(r) - stoneLength / 2; g.setColor(stone = 1 ? computerColor : manColor); g.fillArc(x, y, stoneLength, stoneLength, 0, 360); g.setColor(0); g.drawArc(x, y, stoneLength, stoneLength, 0, 360); Dot lastDot = logic.lastDot(); int lastRow = lastDot.getRow(); int lastCol = lastDot.getCol(); int cLast; if(isColor) cLast = 0xff0000; else cLast = 0; switch(logic.getTable()lastRowlastCol) case 1: / 001 cLast = manColor; break; case 2: / 002 cLast = computerColor; break; g.setColor(cLast); x = xByCol(lastCol) - 3; y = yByRow(lastRow) - 3; g.drawRect(x, y, 6, 6); g.setFont(font); g.setColor(isColor ? statusColor : 0); if(isUpSide) g.drawImage(imgStatusstatusImage, 0, 0, 20); x = imgStatusstatusImage.getWidth(); g.drawString(status, x, 0, 20); else x = cWidth + fontWidth; g.drawImage(imgStatusstatusImage, x, 0, 24); x = cWidth + fontWidth / 2; y = imgStatusstatusImage.getHeight(); for(int i = 0; i status.length(); i+) char c = status.charAt(i); g.drawChar(c, x, y, 17); y += fontHeight; private int xByCol(int col) return boardX + col * gridLength + gridLength / 2; private int yByRow(int row) return boardY + row * gridLength + gridLength / 2; protected void keyPressed(int keyCode) if(!logic.checkGameOver() & !
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年二手电动摩托车环保材料研发与生产合同范本
- 2025年出口贸易货运代理全面服务合同
- 2025宾馆客房用品一站式采购及服务合同
- 2025标准个人医疗贷款合同范本
- 2025年度知识产权法律保护与维权服务合同范本
- 2025年度企业员工职业规划与就业指导合同
- 2025年度奢侈品导购员服务协议及销售提成合同
- 2025版教师综合素养与职业道德聘用合同
- 2025年单身公寓租赁合同编制指南
- 2025年度国有企业员工试用期劳动合同及福利
- 成人肠内营养支持护理
- 2024秋新北师大版数学七年级上册教学课件 ☆ 问题解决策略:直观分析
- 8. 选择健康的生活方式(导学案)(解析版)
- DB61T 5113-2024 建筑施工全钢附着式升降脚手架安全技术规程
- 小学生育儿心得课件
- 《油井工程课件:钻井技术培训》
- 2024年秋新仁爱科普版七年级上册英语第1~6单元高频率常用常考动词100个
- 《手术室感染与预防》课件
- 第四届全国冶金矿山行业职业技能竞赛(磨矿分级工)理论参考试题库(含答案)
- 皮肤镜课件教学课件
- 2024至2030年中国军工压缩机行业投资前景及策略咨询研究报告
评论
0/150
提交评论