已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕 业 论 文(设计)网络五子棋的编程设计学 号: b0726057 姓 名: 年 级: 07级计科(2)班 学 院: 信息科学技术学院 系 别: 计算机科学与技术 专 业: 计算机科学与技术 指导教师: 网络五子棋摘 要通过对网络五子棋游戏算法和技术的研究,以java为开发平台,设计并实现了一个基于c/s模式的网络五子棋对战游戏。本设计将一般的单机五子棋程序开发成了一种网络游戏,其主要乐趣是实现人与人之间的对战,而不仅仅是人与事先设置的各种程序的对战,所以比普通的人机对战游戏更加具有生命力和趣味性。系统采用面向连接的tcp协议作为主要通信协议,运用windows socket网络编程技术实现游戏客户端和游戏服务器端之间的通讯,最后对程序实现的功能进行测试。本文首先阐述网络游戏的历史、现状及发展趋势以及目前基于java程序语言设计的网络游戏的现状;其次,详细描述网络五子棋的实现;最后,通过对网络五子棋游戏的进行功能测试,达到预期目标。本设计主要功能模块包括服务器端模块和客户端模块。关键词:五子棋;网络游戏;c/s模式;网络编程;测试abstractthrough the research on algorithm and technology of online fir game, i designed and completed this online fir game which is based on c / s mode with java development platform.the design will generally become a stand-alone program development fir online games, fun is to achieve its main battle between people, not just people with pre-set to play against a variety of programs, so more than ordinary humangame of greater vitality and fun.system uses a connection-oriented tcp protocol as the main communication protocol, the use of windows socket network programming technology game client and game server-side communication between the function of the final implementation of procedures for testing.this paper describes the history of online games, and the current situation and development trend of the design based on java programming language the status of online games; secondly, the realization of a detailed description of backgammon network; finally, fir games on the network functional testing, to achieve the desired objectives.the design of the main functional modules includes the server-side modules and client modules.keywords: fir; online games; c / s mode; network programming; test- 3 -网络五子棋目 录摘 要2abstract3目 录41.前言62.系统分析82.1 需求分析82.2 可行性分析82.3 开发环境分析92.4 编辑环境分析102.5 运行环境分析103.总体分析113.1 设计目标113.2 项目规划114.服务器端设计134.1 服务器端总体设计134.2 服务器端主界面设计164.3 动作事件的处理174.4 服务器的启动设计184.5 对于服务器端异常处理205.客户端设计225.1 棋盘界面的设计225.2 棋盘规则的实现245.3 连接服务器端模块设计275.4 异常情况的处理286.程序演示307.总结36致 谢37参考文献38- 5 -网络五子棋1. 前言随着网络的发展和技术的进步,各种编程语言随之产生,java语言就是其中的一种。java产生的时间并不长,其发展却是及其飞快的。java是一门计算机编程语言,它又是一种网络程序设计语言。java语言称霸企业级应用这么多年,事实证明了它非常适合于开发大型软件。当java的运行效率不再是问题的时候,java语言严谨、高抽象、可读性强的优势就体现出来了。这对于规模越来越庞大的游戏软件来说,有着不小的诱惑。本次课题就是一种基于 java语言开发的网络小游戏,且游戏是基于cs模式下的。网络五子棋游戏不仅可以使网络上的两个人进行对弈,而且其他人也可以连接进来对话。游戏分为服务器端和客户端,通过创建通信协议来保证客户机与服务器之间的正常通信。游戏的主要模块如下表所示:表1 java网络五子棋模块一览表模块名类名功能描述用户面板模块userpad用户列表面板chatpad用户聊天面板inputpad用户输入面板controlpad用户操作面板棋盘面板模块chesspoint_black黑棋类chesspoint_white白棋类chesspad棋盘面板类chessthread棋盘多线程类服务器模块messageserver服务器信息输出面板serverthread服务器多线程类chessserver服务器端类客户端模块chessclient客户端类clientthread客户端多线程类国际比赛规则规定:对局中如黑方出现禁手,白方应立即指出禁手点,黑方即负。如白方在黑方出现禁手后,又落一步白子,黑棋禁手则不成立了。 所以在有禁手的房间里,如果黑方出现禁手,白方应立即按下禁手按钮。程序会判黑方负。如果这时白方又在棋盘上落一子,黑棋禁手则不成立了。为了简化用户对禁手按钮的使用,也有走禁手就输和禁手不能落子规则的房间,顾名思义不多介绍。虽然采取了禁手的限制,黑棋先行仍有优势,黑棋仍可以必胜。所以如果用户是高段位的棋手,或者想成为高手一定要选择国际上比赛选用的比赛标准,即“三手交换,五手两打”。(1)五子棋棋盘棋盘正中一点为“天元”。棋盘两端的横线称端线。棋盘左右最外边的两条纵线称边线。从两条端线和两条边线向正中发展而纵横交叉在第四条线形成的四个点称为“星”。天元和星应在棋盘上用直径约为0.5厘米的实心小圆点标出。以持黑方为准,棋盘上的纵轴线从左到右用英文字母ao标记。横行线从近到远用阿拉伯数字115标记。纵横轴上的横纵线交叉点分别用横纵线标记的名称合写成。如“天元”h8,四个“星”分别为d4、d12、l12、l4等。(2)五子棋比赛规则行棋顺序黑先、白后,从天元开始相互顺序落子。判断胜负最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。黑棋禁手判负(lose),白棋无禁手。黑棋禁手包括“三、三”(double three)(包括“四、三、三”)、“四、四”(double four)(包括“四、四、三”)、“长连”(overline)。黑棋只能以“四、三”取胜。l 如分不出胜负,则定为平局(draw)。l 对局中中途退场判为负。l 五连与禁手同时形成,先五为胜。黑方禁手形成时,白方应立即指出。若白方未发现或发现后未指明而继续应子,则不能判黑方负。2. 系统分析2.1 需求分析对于普通五子棋博弈而言,需实现以下功能:有黑白两种棋子,两位棋手各执一棋,率先五珠相连的获胜。为此,需要设计黑白两种棋子类及棋盘类并设计判断获胜的算法等。对于网络五子棋而言,在普通五子棋的基础上还需添加以下功能:拥有服务器端和客户端,用户通过客户端登录服务器后可与其他登录的用户进行对弈;服务器支持多组用户同时进行对弈;用户可以在服务器上创建新游戏或加入已创建的游戏;用户在下棋的时候可以进行聊天交流等。综上所述,将需要实现的网络五子棋的功能罗列如下。l 提供服务器和客户端的功能。l 服务器将监视客户端的登录情况并允许多个客户端进行登录。l 用户通过客户端可以登录服务器,之后可以看到服务器当天在线的其他用户,并与他们进行聊天交流。l 用户登录服务器后,可以创建新的五子棋游戏或加入已创建的五子棋游戏。l 用户通过客户端可以像普通五子棋那样与其他用户对弈。2.2 可行性分析为了给游戏的设计提供依据,对需求的分析进行了总结,对软件的可行性分析如下:1.编写的目的:对于计算机这一行业,需要的是高技术和坚忍不拔的意志,这一点在编程方面有所体现。学习使用java语言编写一个小型的网络游戏只是想让自己体会一下程序设计的感受,从中定会受益匪浅。2.可行性分析的前提:网络五子棋游戏必须对网络的断开和链接有着严格的控制,更要严格的遵守游戏的规则,必须对游戏的胜负做出相应。网络五子棋游戏的开发目的是为了让多个用户同时在线,自由选择对手进行对弈,同时严格按照五子棋游戏的规则进行游戏,满足五子棋游戏爱好者的需求。3.对技术的支持分析:通过对游戏性质的分析,该游戏可以开发为c/s的架构,同时该游戏可以通过网络套接字的知识开发。2.3 开发环境分析本次的网络五子棋游戏开发所使用的语言选用java语言是由于java是一种高级面向对象型的程序设计语言。使用java语言编辑的程序时跨平台的,从pc机到手持电话都有java开发的程序和游戏,java程序可以在任何的计算机、操作系统和支持java的硬件设备上运行。l intel(r) pentium(r) dual cpu t2370 1.73ghz (2 cpus),2046mb ram内存,120g硬盘l microsoft windowsxp professionall jdk 1.6l eclipse 3.6.22.4 编辑环境分析程序的编辑环境其实只需记事本就可以了,但是一个好的编辑开发软件可以大大的缩减编辑开发的时间,由于通过各方面观察决定使用目前比较流行的java开发软件eclipse 3.6.2。eclipse是一个综合开发环境(integrated development environment)ide,它是一个功能完整且成熟的软件,由ibm公司于2001年首次推出,eclipse是一个开放源代码、基于java的可扩展开发平台。2.5 运行环境分析l intelpentium 2及以上处理器,32m以上内存,4g以上硬盘l microsoft windows 9x/nt操作系统l 800*600或以上的屏幕分辨率3. 总体分析3.1 设计目标1. 实现需求分析阶段所要求的功能2. 服务器端要求能及时显示客户连接情况3. 客户端的信息交流完全通过服务器端来传递4. 客户端游戏功能齐全及能对客户的各个事件做出响应3.2 项目规划l 游戏服务器端程序模块实现. l 游戏客户端程序模块实现. l 游戏棋盘模块实现. 该游戏主要分为服务器端和客户端,其具体的功能模块如下:serverclientclient客户端服务器客户端图3-1 软件设计图作为服务器角色所具有的功能:角色-服务器等待加入.作为黑棋玩家第一轮可以先下棋图3-2 服务器功能图作为客户端所具有的功能:角色-客户端请求加入作为白棋玩家第一轮不可先下棋图3-3 客户端功能图4. 服务器端设计网络五子棋游戏服务器端主要是有3个类来完成:chessserver类(主类)、serverthread类(线程类)和messageserver类。4.1 服务器端总体设计 服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发信息。接收一客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中介的作用。 serverthread类继承了thread,它集成了服务器端的所有功能,包括与各客户端之间的相互通信,转发信息。 在主类chessserver中最重要的函数makemessageserver(int port,messageserver server),在此方法中初始化: serversocket=new serversocket(port);this.server=server;在循环while(true)中不断接受客户端的信息,并启动了线程serverthread的对象,为每一个客户端启动了一个线程,减轻了服务器端的承受能力。在方法actionperformed(actionevent e)实现了按钮的控制功能,messageclearbutton按钮主要功能清空文本区的服务器信息。serverstatusbutton按钮显示服务器信息在文本区。serveroffbutton按钮关闭服务器,与客户端断开连接。线程是由omok_thread类来实现的,omok_thread类的对象不仅可以获取套接字、输入输出流,而且它还提供了有关客户机的信息,例如客户机的名称、房间号、游戏的开始和结束等。客户端消息的传递处理主要是负责接收和发送客户端的信息。 ip:172.16.233.7 ip:172.16.233.1clientserver图4-1 服务器通信的原理在多线程的情况下,由于同一进程的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。java语言提供了专门机制以解决这种冲突,有效避免了同一个数据对象被多个线程同时访问。由于可以通过 private 关键字来保证数据对象只能被方法访问,所以我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,这里我们使用synchronized 块。synchronized块控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized块都必须获得调用该块的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的方法均被声明为synchronized)。 在 java 中,不光是类实例,每一个类也对应一把锁,这样我们也可将类的静态成员函数声明为 synchronized ,以控制其对类的静态成员变量的访问。synchronized 块:通过 synchronized关键字来声明ynchronized 块。代码如下:synchronized(chesspeerhash)/chesspeerhash添加新映射chesspeerhash.put(clientname,chesspeerhash.get(clientnamehash.get(clientsocket);/chesspeerhash删除旧映射chesspeerhash.remove(clientnamehash.get(clientsocket);/发送新名字到客户端chesspeertalk(inchess+clientname),(/yourname +(inchess+clientname);/发送peer客户端chesspeertalk(string)chesspeerhash.get(clientname),(/peer +inchess+clientname);synchronized 块是这样一个代码块,其中的代码必须获得对象 syncobject (如前所述,可以是类实例或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性较高。4.2 服务器端主界面设计图4-2 五子棋服务器messageserver类继承panel,是面板类的子类,主要来实现服务器端的界面布局,在面板类的子类里添加了一个标签和一个文本区。标签:statuslabel文本区:messageboard。还定义了两个面板类boardpanel,statuspanel。将整个面板类的子类的布局设为borderlayout,将boardpanel的布局设为flowlayout,将statuspanel的布局设为borderlayout。setlayout(new borderlayout();boardpanel.setlayout(new flowlayout();statuspanel.setlayout(new borderlayout();然后将标签:statuslabel文本区:messageboard添加到statuspanel中。最后在主类里添加了三个按钮messageclearbutton,serverstatusbutton,closeserverbutton添加到了窗体中,在主类的构造函数中对整个服务器端的界面进行了布局。4.3 动作事件的处理上面的主界面设计完了后,对于上面的控件需要注册动作事件后才能实现一定的功能。通过分析主界面中只有按钮需要进行动作事件的处理。1.点击清屏按钮是将触发按钮事件执行:server.messageboard.settext();2.点击服务器状态按钮将触发按钮事件执行:if(e.getsource()=serverstatusbutton)tryserver.messageboard.append(servermessage:+serversocket.getinetaddress().getlocalhost()+:+serversocket.getlocalport()+n);catch(exception ee)system.out.println(serversocket.getinetaddress().getlocalhost() error n);3.点击服务器关闭按钮将触发按钮时间执行:system.exit(0);4.4 服务器的启动设计服务器的启动分以下几步:(1)新建服务器对象public static void main(string args)chessserver chessserver=new chessserver();(2)启动服务器流程public void run()datainputstream indata;synchronized(clientdatahash)server.statuslabel.settext(current connections:+clientdatahash.size();tryindata=new datainputstream(clientsocket.getinputstream();firstcome();while(true)string message=indata.readutf();messagetransfer(message);catch(ioexception esx)finallyif(!isclientclosed)clientclose();以上设计中的server是类serversocket的对象,serversocket用于表示服务器套接字。服务器套接字通过指定的端口号来等待连接的套接字。服务器套接字一次只能和一个套接字连接。socket类表示套接字,使用socket时,需要指定待连接服务器的ip地址及端口号。服务器套接字等待客户机的连接请求,并创建新的套接字使其与客户机的套接字连接,而本身继续等待其他的客户机的连接请求。(1)服务器套接字(2)(3)服务器套接字套接字 客户端套接字连 接试图连接客户端套接字服务器套接字图4-3 套接字连接对于客户端消息处理机制为了保证服务器和客户机间正常的通信,我们需要确定所有交换的信息属于何种类型。假设两个玩家同时连接上服务器,要求进行对弈。首先,一名玩家点击开始按钮,向服务器发送“creatgame”消息,另一个玩家也向服务器发送“joingame”消息,然后服务器将会认为两名玩家要进行对弈。4.5 对于服务器端异常处理首先是对于服务器端的启动,当启动发生异常时系统将会抛出异常,所以需要对异常情况进行处理。java对于异常的处理是通过try-catch语句来实现的。使用try-catch语句可以保证程序在发生异常的时候能继续的执行下去,而不是中断退出。下面是实现异常捕获的功能代码:tryindata=new datainputstream(clientsocket.getinputstream();firstcome();while(true)string message=indata.readutf();messagetransfer(message);catch(ioexception esx)finallyif(!isclientclosed)clientclose();对于服务器异常的处理使用弹出提示框的形式实现,下面是其功能代码:catch(ioexception esx)经过以上设计服务器端已基本实现了。5. 客户端设计客户端设计主要包括两个模块的设计,棋盘类的设计和连接服务器端的设计。棋盘类不仅要设计出棋盘界面来而且需要对下棋的规则进行设计,需要对鼠标事件进行设计。连接服务器的设计需要设计出如何与服务器端连接的线程出来。5.1 棋盘界面的设计(1)首先不管动作事件,要设计出棋盘界面出来:chesspad类userpad类chatpad类inputpad类controlpad类图5-1 五子棋客户端userpad类、 chatpad类、controlpad 类、inputpad类、chesspad类都继承panel类是panel的子类。在主类chessclient中,将其布局方式设为borderlayout边框布局,定义westpanel将userpad的对象添加进去westpanel.setlayout(new borderlayout();westpanel.add(userpad,borderlayout.north);westpanel.add(chatpad,borderlayout.center);westpanel.setbackground(color.red);定义 centerpanel将chesspad的对象,inputpad 的对象添加进去centerpanel.add(chesspad,borderlayout.center);centerpanel.add(inputpad,borderlayout.south);centerpanel.setbackground(color.red);定义southpanel将controlpad的对象添加进去,outhpanel.add(controlpad,borderlayout.center);southpanel.setbackground(color.red);棋盘类的实现是正把整个棋盘抽象为一个二维数组,棋子类的实现通过在paint()方法中画圆设置背景色来区别黑白棋子。黑棋子:g.setcolor(color.black);g.filloval(0,0,14,14);白棋子:g.setcolor(color.white);g.filloval(0,0,14,14);向组件绘制图形时,并不是直接向其绘制图形,而是先将待绘制图形绘制到缓冲区中,然后再将已经绘制于缓冲区图形绘制到组件上。这种绘制图形的技术称为双缓冲,用于消除图像闪烁现象。public void paint(graphics g)for (int i=40;i=380;i=i+20)g.drawline(40,i,400,i);g.drawline(40,400,400,400);for(int j=40;j=380;j=j+20)g.drawline(j,40,j,400);g.drawline(400,40,400,400);g.filloval(97,97,6,6);g.filloval(337,97,6,6);g.filloval(97,337,6,6);g.filloval(337,337,6,6);g.filloval(217,217,6,6);5.2 棋盘规则的实现程序中最重要的部分是如何决定胜负。横竖、或是对角线方向上拥有五颗同颜色的棋子时,及为胜利。checkwin()方法是用于查找并计算连在一起的五颗棋子。下面是checkwin()代码的总体框架:/判断当前状态是否为胜利状态public boolean checkwin(int a,int b,int checkcolor)int step=1,chesslink=1,chesslinktest=1,chesscompare=0;if(checkcolor=1)chesslink=1;/以下每对for循环语句为一组,因为这样使得下棋的位置能中间而非两端for(step=1;step=4;step+)/遍历相邻4个网络for(chesscompare=0;chesscompare=chessblackcount;chesscompare+)/遍历棋盘上所有黑棋子if(a+step)*20=chessblack_xchesscompare) & (b*20)=chessblack_ychesscompare)/判断当前下的棋子的右边4个棋子是否都为黑棋chesslink=chesslink+1;if(chesslink=5)/五子相连时,胜利return(true); if(chesslink=(chesslinktest+1)chesslinktest+;else/若中间有一个棋子非黑棋,则会进入此分支,此时无需再遍历break;依次再判断当前下的棋子的左边、上边、下边、左上方向、右下方向、右上方向、左下方向4个棋子是否都为黑棋,代码如下:if(a-step)*20=chessblack_xchesscompare) & (b*20=chessblack_ychesscompare)if(a*20=chessblack_xchesscompare) & (b+step)*20=chessblack_ychesscompare)mpare+)if(a*20=chessblack_xchesscompare) & (b-step)*20=chessblack_ychesscompare)if(a-step)*20=chessblack_xchesscompare) & (b+step)*20=chessblack_ychesscompare)if(a+step)*20=chessblack_xchesscompare) & (b-step)*20=chessblack_ychesscompare)if(a+step)*20=chessblack_xchesscompare) & (b+step)*20=chessblack_ychesscompare)if(a-step)*20=chessblack_xchesscompare) & (b-step)*20=chessblack_ychesscompare)if(a+step)*20=chesswhite_xchesscompare) & (b*20=chesswhite_ychesscompare)if(a-step)*20=chesswhite_xchesscompare) & (b*20=chesswhite_ychesscompare)if(a*20=chesswhite_xchesscompare) & (b+step)*20=chesswhite_ychesscompare)if(a*20=chesswhite_xchesscompare) & (b-step)*20=chesswhite_ychesscompare)if(a-step)*20=chesswhite_xchesscompare) & (b+step)*20=chesswhite_ychesscompare)if(a+step)*20=chesswhite_xchesscompare) & (b-step)*20=chesswhite_ychesscompare)if(a+step)*20=chesswhite_xchesscompare) & (b+step)*20=chesswhite_ychesscompare)if(a-step)*20=chesswhite_xchesscompare) & (b-step)*20=chesswhite_ychesscompare)5.3 连接服务器端模块设计 服务器端主要通过建立流连接来连接客户端,与客户端进行相互通信、转发信息。接收一客户端的信息,接收信息后按照此客户端的要求将信息发送到相应的客户端,服务器端起到了中介的作用。 serverthread类继承了thread,它集成了服务器端的所有功能,包括与各客户端之间的相互通信,转发信息。 在主类chessserver中最重要的函数makemessageserver(int port,messageserver server),在此方法中初始化: serversocket=new serversocket(port);this.server=server;在循环while(true)中不断接受客户端的信息,并启动了线程serverthread的对象,为每一个客户端启动了一个线程,减轻了服务器端的承受能力。在方法actionperformed(actionevent e)实现了按钮的控制功能,messageclearbutton按钮主要功能清空文本区的服务器信息。serverstatusbutton按钮显示服务器信息在文本区。serveroffbutton按钮关闭服务器,与客户端断开连接。5.4 异常情况的处理对于一些动作事件可能会出现异常而导致程序中断,所以要对异常情况进行处理。对于异常的处理是使用try-catch语句。首先对于客户机连接的情况来说当客户机连接不上的时候,需要将有关的信息返回给客户。图5-2 连接服务器失败至此已经大致的介绍了客户端的设计,服务器端和客户端已经基本实现了它们所需要的功能。6. 程序演示此小节将演示创建的网络五子棋。首先启动服务器,打开chessserver.java文件,在文件中的任一行单击鼠标右键,在弹出的菜单中单击“运行方式”命令,并选择“java应用程序”命令,若成功运行则出现如图所示的五子棋服务器界面。图6-1 五子棋服务器成功运行接着打开chessclient.java文件,按上述方法运行,若成功运行则出现如图所示的五子棋客户端界面。图6-2 打开五子棋客户端单击客户端界面上的“连接服务器”按钮,连接到主机,若成功连接则会出现如图所示的提示信息。图6-3 连接服务器成功此时,单击界面上的“创建游戏”按钮创建游戏,若成功则会给信息要求等待对手加入,如图所示。图6-4 创建游戏成功再次运行chessclient.java,打开一个新的客户端,单击“连接服务器”按钮,成功的话会看到已经创建游戏的用户,如图所示。图6-5 打开另一个五子棋服务器选择刚才创建游戏的用户名后,单击界面上的“加入游戏”按钮加入游戏,若成功则等待对方下棋,此时之前创建游戏的用户界面将提示开始下棋,一场五子棋赛就此拉开帷幕。用户将轮流下棋直到决出胜负,如图所示。图6-6 五子棋对战界面这里介绍了创建java网络五子棋的方法,由于网络五子棋同时涉及java网络编程、多线程编程及五子棋胜利算法设计等方面,所以本工程有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 共振音叉课件教学课件
- 电商物流解决方案
- 糖尿病的自我监测与管理
- 无人驾驶汽车的发展前景
- 食管癌晚期治疗进展
- 糖尿病治疗仪使用
- 初中化学常见气体的制取专题教案
- 角膜病病人的护理
- 海上日出说课稿第课时
- 重症急性胰腺炎手术治疗
- 宝钢中央研究院创新战略与运行机制研究
- 建筑CAD测试多选题
- 支座铸造工艺设计
- 2022年学校禁毒工作计划
- GB-T-30512-2014-汽车禁用物质要求
- 生物相容性试验检测报告
- 精品资料(2021-2022年收藏)云南白药财务报表分析精讲
- 美国入境海关申报单
- 七年级上册数学期中考试试题(含答案)
- 小学四年级上册美术课件-第3课车-苏少版(17张)ppt课件
- 纸品配送服务方案纸品采购项目方案
评论
0/150
提交评论