




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件开发生产实习报告姓名XXX学号XXXXXX班级XXXX项目名称飞机大战游戏实习地点XXX实习时间XXX实习成绩指导教师签字信息科学与工程学院 2014 年 10 月 6 日 软件开发生产实习报告1. 实习目的1.1使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本素质和技术能力要求。1.2使学生掌握C+及Window程序设计的基本技术,能够运用MFC技术及其开发环境进行小型项目的开发。1.3重点培养学生的独立创新精神和查阅资料能力,提高其口头和书面的沟通能力。1.4使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决问题的能力1.5重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编程习惯。2. 实习计划 2.1 C+语言知识复习,尤其是指针的安全和类型转换继承的使用、多态的使用。 2.2 项目技术学习:Windows窗体消息机制、透明绘图、游戏对象的面向对象分析和设计、API使用,参考相应的书籍详尽的学习。 2.3 Windows API编程基础练习,实现简单的透明贴图,即把战机图片贴到屏幕上。 2.4 读懂老师给的游戏项目技术架构设计、游戏对象的面向对象分析和设计、UML建模,同时把其余的图片包括敌机、子弹、爆炸效果登都贴到屏幕上。 2.5 项目编码、测试(包括讲师演练)、完成基本功能,主要实现战机的控制移动、敌机的随机出现并移动和敌机发射子弹等。 2.6 项目迭代,完成扩展功能,把本项目的功能(尤其是人工智能部分)实现。 2.7 全部代码测试并改进,尽可能好的完善项目。3实习过程3.1 技术准备提高程序编写能力,提高程序调试能力,资料检索、阅读能力,强大的自学能力,加深对面向对象程序设计的理解。具体说来,需要掌握指针的安全和类型转换,继承和组合的区别、继承的使用,多态的使用,GDI的应用以及UML建模,了解游戏编程架构、Win32 API编程。再具体来说:3.1.1透明贴图实现技术绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。整个功能的实现过程如下: (1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图;(2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中;(3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色;(4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图设备描述表中存放的位图与位图设备描述表中的位图一样;(5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;(6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作;(7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操作绘制到对话框上;(8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指针,最后把新建的设备描述表也删除。BOOL CGameObject:LoadImage(CImageList& imgList,UINT bmpID,COLORREF crMask,int cx,int cy,int nInitial) CBitmap bmp; if(!bmp.LoadBitmap(bmpID) return FALSE; if(!imgList.Create(cx, cy, ILC_COLOR24|ILC_MASK, nInitial, 0) return FALSE; imgList.Add(&bmp, crMask); return TRUE;3.1.2 CObList链表在本程序中我使用了CObList链表来分别存储敌机,炸弹,导弹,爆炸效果和掉落物品。CobList类似于一个双向链表,POSITION类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。本程序中主要用到的函数有:GetHeadPosition()获取链表首元素的POSITION,AddTail()向链表尾部添加新的元素,GetNext( POSITION& rPosition )返回当前rPosition指向的元素,并使rPosition指向下一个元素。3.1.3内存释放在VC/MFC用CDC绘图时,频繁的刷新,屏幕会出现闪烁的现象,CPU时间占用率相当高,绘图效率极低,很容易出现程序崩溃。及时的释放程序所占用的内存资源是非常重要的。在程序中使用到的链表、刷子等占用内存资源的对象都要及时的删除。Delete Brush,List.removeall()等。3.1.4双缓冲技术当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。双缓冲实现过程如下:在内存中创建与画布一致的缓冲区在缓冲区画图将缓冲区位图拷贝到当前画布上释放内存缓冲区 下面给出实现的程序,同样是在OnDraw(CDC *pDC)中: CDC MemDC; /定义一个显示设备对象 CBitmap MemBitmap;/定义一个位图对像 MemDC.CreateCompatibleDC(NULL); MemBitmap.CreateCompatibleBitmap(MemDC,nWidth,nHeight);/将位图选入到内存显示设备中 CBitmap* pOldBit=MemDC.SelectObject(&MemBitmap); MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255); MemDC.MoveTo(); MemDC.LineTo(); pDC-BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBit); MemBitmap.DeleteObject(); MemDC.DeleteDC();3.1.5键盘对战机的控制添加OnKeyDown()和OnKeyUp()函数,用GetKeyState()函数来判断按下了哪个键,通过修改战机的相应参数来实现对战机的控制,如上下左右运动,发射子弹等等。如果战机此时已处于屏幕边缘,则控制战机飞出屏幕的按键信息无效。3.2 项目实施 按照项目实施计划和技术准备一步一步去实现项目。 3.2.1 功能需求 本程序为飞机大战游戏,飞机大战游戏作为PC中一款桌面游戏,界面简洁流畅、游戏方式简单,玩起来易于上手。主要实现的功能如下: 1. 战机数量为1 2.由玩家通过键盘控制(方向键控制位置、默认开启炸弹、空格键发射清屏导弹)战机3.导弹释放存在间隔,有一定的运行速度 4.导弹遇到敌机发生爆炸,敌机被炸毁,导弹消失,玩家得分,当得分到达一定数目就进入下一关 5.由计算机控制敌机自动向战机发动攻击,击中时战机掉血,初始20条命 6.敌机数量随机,计算机生成敌机时随机选择类别 7.敌机从游戏区域的上端进入,左右位置随机8.敌机行驶期间,不左右移动,不反向移动9.当敌机位于战机后方时发射炸弹对战机进行攻击10.敌机运行线路为直线,方向为从下至上,或从下至上,不可左右移动,纵向由发射位置起至游戏区域结束 11.敌机与敌机炸弹均具有一定的速度,且随着关卡难度的增大,数量和速度均增加 12.炸弹遇到战机时发生爆炸,战机生命数量减少1,炸弹消失,游戏结束炸弹运行时有速度限制13.游戏过程中会随机掉落物品,得到后可以变换子弹或者得到全屏炸弹 14.根据菜单可以选择重新开始游戏,Esc键可以暂停游戏15.可以在选择关卡处选择关卡 16.在游戏界面输出当前游戏进行信息,包括当前得分、当前关卡以及剩余生命数量17.游戏过程中添加了声效 3.2.2 总体设计 系统模块划分游戏规则子系统模块名称功能简述人工智能人机对战规则的实现游戏子系统模块名称功能简述应用程序对象游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事件获取游戏对象各个游戏对象的抽象父类战机对象战机类敌机对象敌机类导弹对象导弹类炸弹对象炸弹类爆炸对象爆炸类文字对象文字类物品对象物品类类体系 主要功能模块系统对象类图飞机大战游戏执行流程图:产生敌机并绘制敌机流程图: 3.2.3 详细设计与编码/ PlaneGameView.cpp : implementation of the CPlaneGameView class/#include stdafx.h#include PlaneGame.h#include PlaneGameDoc.h#include PlaneGameView.h#include MyPlane.h#include Enemy.h#include Enemy1.h#include Bomb.h#include Ball.h#include Explosion.h#include Nuke.h#include Newbomb.h#include Setlvl3.h#include mmsystem.h/windows中与多媒体有关的大多数接口,用于播放声音。#pragma comment(lib, WINMM.LIB)#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifstatic int init;int lvl31=550,1100,2200,2933,3758,4583,5408,6233,7058,7883,8708,9533,10358,11183,12008,12833,13658,14483,15308,16133,16958,17783,18608,19433,20258,21083,21908,22733,23558,24383,25208;/ CPlaneGameViewIMPLEMENT_DYNCREATE(CPlaneGameView, CView)BEGIN_MESSAGE_MAP(CPlaneGameView, CView)/ 标准打印命令ON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)ON_WM_TIMER()ON_WM_KEYDOWN()ON_COMMAND(ID_START, CPlaneGameView:OnStart)ON_COMMAND(ID_RESTART, CPlaneGameView:OnRestart)ON_COMMAND(ID_SETLVL, CPlaneGameView:OnSetlvl)END_MESSAGE_MAP()/ CPlaneGameView construction/destructionCPlaneGameView:CPlaneGameView():m_pMe(NULL),lifeNum_Me(20),Score_Me(0),Lvl_Me(1),Nuke_Me(5), setlvl(1)/ TODO: add construction code hereCPlaneGameView:CPlaneGameView()BOOL CPlaneGameView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CPlaneGameView drawingvoid CPlaneGameView:OnDraw(CDC* pDC)CPlaneGameDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/断定宏 if (!pDoc)/如果不是文档类指针return; /绘制游戏开始界面CDC *m_pMemDC1;/为绘图提供成员函数m_pMemDC1 = new CDC;/为绘图申请内存空间m_pMemDC1-CreateCompatibleDC(pDC);CBitmap bmp1;bmp1.LoadBitmap(IDB_start); /创建位图m_pMemDC1-SelectObject(&bmp1);pDC-BitBlt(0,0,480,644,m_pMemDC1,0,0,SRCCOPY);DeleteObject(bmp1);delete m_pMemDC1;/释放内存/ CPlaneGameView printingBOOL CPlaneGameView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CPlaneGameView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CPlaneGameView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CPlaneGameView 诊断#ifdef _DEBUGvoid CPlaneGameView:AssertValid() constCView:AssertValid();void CPlaneGameView:Dump(CDumpContext& dc) constCView:Dump(dc);CPlaneGameDoc* CPlaneGameView:GetDocument() / 非调试版本是内联的ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CPlaneGameDoc);return (CPlaneGameDoc*)m_pDocument;#endif /_DEBUGvoid CPlaneGameView:OnStart()/ TODO: 在此添加命令处理程序代码if(!init)InitGame();init = 1;void CPlaneGameView:OnRestart()/重新开始/ TODO: 在此添加命令处理程序代码if(init = 0)OnStart();else KillTimer(1); m_pMe = new MyPlane;/重新申请内存空间 Score_Me=0; lifeNum_Me=20; Lvl_Me=1; Nuke_Me=5; for(int i = 0; i CreateCompatibleDC(m_pDC);/建立内存位图m_pMemBitmap = new CBitmap;m_pMemBitmap-CreateCompatibleBitmap(m_pDC,GAME_WIDTH,GAME_HEIGHT);/将位图选入到内存显示设备中/将位图选入内存DCm_pMemDC-SelectObject(m_pMemBitmap);MyPlane:LoadImage();Enemy:LoadImage();Enemy1:LoadImage();Bomb:LoadImage();Ball:LoadImage();Explosion:LoadImage();Nuke:LoadImage();Newbomb:LoadImage();/产生主角(战机)m_pMe = new MyPlane;/启动游戏SetTimer(1,30,NULL);pause = 0;/暂停标志 : 0-继续 1-暂停return true;int my = 0;/移动背景标志void CPlaneGameView:UpdateFrame(CDC* pDC)wchar_t lifeleft20;/存储剩余生命wchar_t Score20;/存储分数wchar_t Lvl20;/存储关卡wchar_t Nuke20;/存储导弹/绘制背景CBitmap bmp;if(m_pMe!=NULL)int pn = (Lvl_Me)%5+1;switch(pn)case 1:bmp.LoadBitmap(IDB_background1); /创建位图break;case 2:bmp.LoadBitmap(IDB_background2);break;case 3:bmp.LoadBitmap(IDB_background3);break;case 4:bmp.LoadBitmap(IDB_background4);break;case 5:bmp.LoadBitmap(IDB_background5);break;m_pMemDC-SelectObject(&bmp); pDC-BitBlt(0,0,480,644,m_pMemDC,10,my,SRCCOPY); if(my0) my-; else if(my=0) my = 644;else if(Lvl_MeSelectObject(&bmp);my=0; pDC-BitBlt(0,0,480,644,m_pMemDC,10,my,SRCCOPY);/绘制我方战机if(m_pMe!=NULL) m_pMe-Draw(m_pMemDC,FALSE); pDC-SetBkMode(TRANSPARENT);/透明文字背景 pDC-SetTextColor( RGB(0, 255, 0) ); pDC-TextOut(10,10, 生命值:); wsprintfW(lifeleft, L%d , lifeNum_Me ); pDC-SetTextColor( RGB(255, 0, 0) ); pDC-TextOut(80,10, lifeleft); pDC-SetTextColor( RGB(0, 255, 0) ); pDC-TextOut(10,35, 得分:); wsprintfW(Score, L%d, Score_Me ); pDC-SetTextColor( RGB(255, 0, 0) ); pDC-TextOut(60,35, Score); pDC-SetTextColor( RGB(0, 255, 0) ); pDC-TextOut(10,60, 关卡:); wsprintfW(Lvl, L%d, Lvl_Me ); pDC-SetTextColor( RGB(255, 0, 0) ); pDC-TextOut(60,60, Lvl); pDC-SetTextColor( RGB(0, 255, 0) ); pDC-TextOut(10,90, 核武器:); wsprintfW(Nuke, L%d, Nuke_Me ); pDC-SetTextColor( RGB(255, 0, 0) ); pDC-TextOut(80,90, Nuke);else /PlaySound(LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC); if(Lvl_MeSetTextColor( RGB(0, 255, 0) ); pDC-TextOut(25,25, 最终到达关卡:); wsprintfW(Lvl, L%d, Lvl_Me ); pDC-SetTextColor( RGB(0, 255, 0) ); pDC-TextOut(150,25, Lvl); pDC-SetTextColor( RGB(255, 0, 0) ); pDC-TextOut(80,70, 最终得分:); wsprintfW(Score, L%d, Score_Me ); pDC-TextOut(170,70, Score); else /绘制 导弹、爆炸、敌机、子弹for(int i=0;iDraw(pDC,FALSE)m_ObjListi.RemoveAt(pos2);delete pObj;/复制内存DC到设备DCm_pDC-BitBlt(0,0,GAME_WIDTH,GAME_HEIGHT,m_pMemDC,0,0,SRCCOPY);void CPlaneGameView:AI()static int nCreator = rand() %5+10;if(m_pMe=NULL)return;/随机产生敌机for(int i=0;i=Lvl_Me/4;i+) if(nCreatorCD=0)int tpb = rand()%3;if(tpb%2=0) m_ObjListenNuke.AddTail(new Nuke);if(tpb%2=1) m_ObjListenNew.AddTail(new Newbomb);m_pMe-CD = 300;/检测四个方向键,移动战机for(i=0;iSetVerMotion(0);m_pMe-SetHorMotion(0);nMeMotion = GetKey(VK_UP);if(nMeMotion=1)m_pMe-SetVerMotion(1); nMeMotion = GetKey(VK_DOWN);if(nMeMotion=1)m_pMe-SetVerMotion(-1);nMeMotion = GetKey(VK_RIGHT);if(nMeMotion=1)m_pMe-SetHorMotion(1);nMeMotion = GetKey(VK_LEFT);if(nMeMotion=1)m_pMe-SetHorMotion(-1);/产生战机导弹if(GetKey(VK_SPACE)=1)/按下了空格键if(m_pMe!=NULL & m_pMe-Fired()Bomb *bommb = NULL;CPoint pt = m_pMe-GetPoint();switch( Bomb:BombType )case 0: bommb = new Bomb( pt.x + 10, pt.y );m_ObjListenBomb.AddTail(bommb);bommb = new Bomb( pt.x + 20, pt.y );m_ObjListenBomb.AddTail(bommb);bommb = new Bomb( pt.x + 30, pt.y );m_ObjListenBomb.AddTail(bommb);break;case 1: bommb = new Bomb( pt.x + 10, pt.y );bommb-toward = -1;m_ObjListenBomb.AddTail(bommb);bommb = new Bomb( pt.x + 20, pt.y );bommb-toward = 0;m_ObjListenBomb.AddTail(bommb);bommb = new Bomb( pt.x + 30, pt.y );bommb-toward = 1;m_ObjListenBomb.AddTail(bommb);break; /敌机1发射子弹CPoint PlanePt = m_pMe-GetPoint();for(POSITION ePos=m_ObjListenEnemy.GetHeadPosition();ePos!=NULL;) Enemy* pEnemy = (Enemy*)m_ObjListenEnemy.GetNext(ePos); if(!pEnemy-Fired() continue; CPoint ePt = pEnemy-GetPoint(); /敌机在战机前面 if(pEnemy-GetMontion()=1 & ePt.yPlanePt.y) m_ObjListenBall.AddTail(new Ball(ePt.x+14,ePt.y,pEnemy-GetMontion(); / 敌机在战机后面 if(pEnemy-GetMontion()=-1 & ePt.yGetMontion(); /敌机2发射子弹CPoint PlanePt1 = m_pMe-GetPoint();for(POSITION ePos1=m_ObjListenEnemy1.GetHeadPosition();ePos1!=NULL;) Enemy1* pEnemy1 = (Enemy1*)m_ObjListenEnemy1.GetNext(ePos1); if(!pEnemy1-Fired() continue; CPoint ePt = pEnemy1-GetPoint(); / 敌机在战机后面 if(pEnemy1-GetMontion()=-1 & ePt.yGetMontion(); /敌机1、2子弹炸掉战机POSITION bPos1=NULL,bPos2=NULL;CRect mRect = m_pMe-GetRect();for(bPos1=m_ObjListenBall.GetHeadPosition();( bPos2 = bPos1 ) != NULL;)Ball* pBall = (Ball*)m_ObjListenBall.GetNext(bPos1);CRect bRect = pBall-GetRect();CRect tmpRect;if(tmpRect.IntersectRect(&bRect,mRect)/添加爆炸效果m_ObjListenExplosion.AddTail(new Explosion(mRect.left,mRect.top);/添加声音PlaySound(LPCTSTR)IDR_WAVE1, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);/删除子弹m_ObjListenBall.RemoveAt(bPos2);delete pBall;/删除战机if ( lifeNum_Me 0 ) -lifeNum_Me;if(lifeNum_Me = 0)delete m_pMe;m_pMe=NULL;PlaySound(LPCTSTR)IDR_WAVE2, AfxGetInstanceHandle(), SND_RESOURCE |SND_ASYNC);break;/战机导弹炸掉敌机1POSITION mPos1=NULL,mPos2=NULL;for(mPos1=m_ObjListenBomb.GetHeadPosition();(mPos2=mPos1)!=NULL;)Bomb* pBomb = (Bomb*)m_ObjListenBomb.GetNext(mPos1);CRect bRect = pBomb-GetRect();POSITION ePos1=NULL,ePos2=NULL;for(ePos1=m_ObjListenEnemy.GetHeadPosition();(ePos2=ePos1)!=NULL;)Enemy* pEnemy = (Enemy*)m_ObjListenEnemy.GetNext(ePos1);CRect mRect = pEnemy-GetRect();CRect tmpRect;if(tmpRect.IntersectRect(&bRect,mRect)/添加爆炸效果m_ObjListenExplosion.AddTail(new Explosion(mRect.left,mRect.top);/删除导弹m_ObjListenBomb.RemoveAt(mPos2);delete pBomb;/删除敌机m_ObjListenEnemy.RemoveAt(ePos2);delete pEnemy;Score_Me+=10 ;break; /战机导弹炸掉敌机2POSITION qPos1=NULL,qPos2=NULL;for(qPos1=m_ObjListenBomb.GetHeadPosition();(qPos2=qPos1)!=NULL;)Bomb* pBomb = (Bomb*)m_ObjListenBomb.GetNext(qPos1);CRect bRect = pBomb-GetRect();POSITION ePos1=NULL,ePos2=NULL;for(ePos1=m_ObjListenEnemy1.GetHeadPosition();(ePos2=ePos1)!=NULL;)Enemy1* pEnemy1 = (Enemy1*)m_ObjListenEnemy1.GetNext(ePos1);CRect mRect = pEnemy1-GetRect();CRect tmpRect;if(tmpRect.IntersectRect(&bRect,mRect)/添加爆炸效果m_ObjListenExplosion.AddTail(new Explosion(mRect.left,mRect.top);/删除导弹m_ObjListenBomb.RemoveAt(qPos2);delete pBomb;/删除敌机m_ObjListenEnemy1.RemoveAt(ePos2);delete pEnemy1;Score_Me+=10 ;break; /检测是否释放核武器炸掉敌机1if(GetKey(VK_TAB)=1&Nuke_Me0)Nuke_Me-=1;CRect bRect;bRect.top = 0;bRect.left = 0;bRect.right = GAME_WIDTH;bRect.bottom = GAME_HEIGHT;POSITION ePos1=NULL,ePos2=NULL;for(ePos1=m_ObjListenEnemy.GetHeadPosition();(ePos2=ePos1)!=NULL;)Enemy* pEnemy = (Enemy*)m_ObjListenEnemy.GetNext(ePos1);CRect mRect = pEnemy-GetRect();CRect tmpRect;if(tmpRect.IntersectRect(&bRect,mRect)Score_Me += 10;/添加爆炸效果m_ObjListenExplosion.AddTail(new Explosion(mRect.left,mRect.top); /删除敌机m_ObjListenEnemy.RemoveAt(ePos2);delete pEnemy;Sleep(150);/检测是否释放核武器炸掉敌机2if(GetKey(VK_TAB)=1&Nuke_Me0)CRect bRect;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古锡林郭勒盟 锡林浩特市迎东口腔门诊部招聘13人备考考试题库附答案解析
- 2025农业农村部在京事业单位招聘43人考试参考试题及答案解析
- 广安市华蓥市2025年下半年“小平故里英才计划”引进急需紧缺专业人才考试参考试题及答案解析
- 2025山东济宁学院招聘二级学院院长3人备考考试题库附答案解析
- 2025年河北唐山芦台经济开发区高校毕业生临时公益性岗位招聘备考考试题库附答案解析
- 济南市教育局所属学校公开招聘2026届部属公费师范毕业生(163人)笔试参考题库附答案解析
- 2025江苏南通市机关事务管理局招聘政府购买服务岗位人员1人笔试备考试题及答案解析
- 2025年山东省水利工程建设监理有限公司公开招聘(8人)备考考试题库附答案解析
- 中医推拿健康宣教课件
- 3山东八年级物理第一学期期中考试试题以及答案(适合沪科版)
- 舞蹈基础教学舞蹈基础知识科普培训PPT教学课件
- 安全教育7不要离家出走
- 最新鲁科版四年级上册英语Unit 4《Lesson 1 Its spring》课件
- 工程项目质量管理手册范本
- 养老机构入住老人服药记录表模板
- 家谱模板,树形图(绝对精品,一目了然)
- 广播电视节目的主持人概念、类型和作用
- 决策分析管理运筹学课件
- 新能源汽车技术完整版课件
- PFMEA密封圈范例
- 广通客车bms通讯协议分册
评论
0/150
提交评论