当前位置:文档之家› 山东科技大学飞机大战课题报告

山东科技大学飞机大战课题报告

山东科技大学飞机大战课题报告
山东科技大学飞机大战课题报告

程序设计综合实践报告

信息科学与工程学院

xxxx年x月xx日

目录

1. 概述 (3)

2. 相关技术 (3)

2.1CObList链表 (4)

2.2获取矩形区域函数 (4)

2.3子弹随武器等级改变 (4)

2.4弹出按钮函数 (5)

2.5字体的输出 (6)

2.6游戏模式切换的实现 (6)

2.7设置定时器 (7)

2.8双缓冲技术 (7)

2.9滚屏的实现 (7)

3. 总体设计与详细设计 (8)

3.1 系统模块划分 (8)

3.2 主要功能模块 (9)

4. 编码实现 (10)

5. 实训中遇到的主要问题及解决方法 (27)

6. 实训体会 (277)

1. 概述

功能介绍:

一、非功能性要求

1. 程序目的。单向(纵版)飞行设计游戏,要求游戏者能持续玩半小时以上。分辨率为520*740。

2. 稳定性。程序无错、运行稳定、适应多种windows系统,游戏运行顺畅。

3. 可玩性高。程序角色丰富,物品多。关卡多,难度安排合理,游戏速度合理,屏幕上的飞机子弹数目合理。界面素材需能清楚区分各种角色,自己搭配的素材要求视觉效果融。

二、功能性要求

1.本机。

本机有血量。有两种形态。普通形态下有4中变形。暴走形态下为动态人马状。

初始血量为10。初始武器等级为1。初始移动速度为1。

2. (本机)所放导弹。

本机所放的导弹随武器等级提升而提升。发射导弹有间歇时间。本机为暴走形态时间歇时间变短。

大招导弹(审判之力):全屏爆炸,消灭除BOSS外所有敌机单位,掉落大量物品包。

3. 物品

物品仅有打落的敌机和boss掉落,敌机掉落一个,boss可掉落多个。每个物品只负责加一种属性,每次只负责加1级。

物品1:本机进入暴走形态。导弹密度发射频率移动速度大幅增强。但不是无敌。

物品2:本机武器设备得到提升。导弹密度提升。最高为5。

物品3:本机获得invincible保护罩,无敌。

物品4:本机血量+1。血量最高为10。

物品5:本机引擎设备得到提升。速度上升。最高为9。

物品6:本机大招(审判之力)数量+1。

4. boss和敌机

所有敌机和boss均从飞机的飞行前方出现。

敌机有两种:enemy 和 elite

BOSS 有不同形态,每个BOSS血量比前一个大幅提升。

5. 敌机子弹(含boss子弹)

飞行路径:敌机均为从上到下,飞出屏幕即消失。boss为屏幕中盘旋飞行,直到消灭。

Enemy 子弹直线飞行。Elite 子弹扩散飞行。

BOSS子弹:

Laser:跟踪本机,但本机可以躲避。

Mire:直线发射。

Track:缓慢飞行,碰撞体积大。

2. 相关技术

2.1CObList链表

在本程序中使用了CObList链表来分别存储敌机,炸弹,导弹,爆炸效果。CobList类似于一个双向链表,POSITION类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION 来访问它。

class CObList : public CObject

//枚举类型

enum ObjType{ enEnemy, enBomb, enBall, enExplosion, enUpup, enElite};

CObList m_ObjList[7];

POSITION pos1,pos2; //定义指针

for( pos1 = m_ObjList[i].GetHeadPosition(); ( pos2 = pos1 ) != NULL ; ) //遍历链表CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext( pos1 );

2.2获取矩形区域函数

以myplane为例:

CRect mRect1 = m_pMe->GetRect();

CRect GetRect(){

return CRect(m_ptPos, CPoint(m_ptPos.x + PLANE_WIDTH, m_ptPos.y + PLANE_HEIGHT));

}

2.3子弹随武器等级改变

if (boom_my == 1 && sss_my==0)

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 0, 10 * bz, 3));

if(boom_my>=2 && sss_my==0)

{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 25, pt.y + 10, 0, 10 * bz, 3));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 55, pt.y + 10, 0, 10 * bz, 3));

}

if (boom_my >= 3 || sss_my){

if (sss_my) {

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 48, pt.y + 10, -2 * bz, 8 * bz, (sss_my > 0))); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 31, pt.y + 10, 2 * bz, 8 * bz, (sss_my > 0))); }

else {

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 48, pt.y + 10, -2 * bz, 8 * bz, 4));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 31, pt.y + 10, 2 * bz, 8 * bz, 4));

}

}

if (boom_my >= 4 || sss_my){

if(sss_my)

{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, -1 * bz, 8 * bz, (sss_my>0))); m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 1 * bz, 8 * bz, (sss_my>0))); }

else

{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, -1 * bz, 8 * bz,3));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 1 * bz, 8 * bz, 3));

}

}

if (boom_my >= 5 || sss_my){

if(sss_my)

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 0, 10 * bz, (sss_my > 0)));

if (sss_my == 0){

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 0, 10 * bz, 3));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y , 0, 15 * bz, 2));

m_ObjList[enBomb].AddTail(new CBomb(pt.x - 15, pt.y , 0, 15 * bz, 2));

}

else{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y, -2 * bz, 15 * bz, 5));

m_ObjList[enBomb].AddTail(new CBomb(pt.x - 15, pt.y, -2 * bz, 15 * bz, 5));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y, 2 * bz, 15 * bz, 5));

m_ObjList[enBomb].AddTail(new CBomb(pt.x - 15, pt.y, 2 * bz, 15 * bz, 5));

}

2.4弹出按钮函数

void CPlaneGameView::OnInitialUpdate()

{

CView::OnInitialUpdate();

//初始化游戏

m_button[0] = new CButton();

m_button[1] = new CButton();

CRect rect_button1(GAME_WIDTH / 2 - 60, GAME_HEIGHT / 2 - 15, GAME_WIDTH / 2 + 40, GAME_HEIGHT / 2 + 15);//模式窗口位置,大小

m_button[0]->Create(_T("经典模式"), WS_CHILD | WS_VISIBLE | WS_BORDER, rect_button1, this, IDC_START1);

m_button[0]->ShowWindow(SW_SHOWNORMAL);

CRect rect_button2(GAME_WIDTH / 2 - 60, GAME_HEIGHT / 2 + 35, GAME_WIDTH / 2 + 40, GAME_HEIGHT / 2 + 65);//模式窗口位置,大小

m_button[1]->Create(_T("无敌模式"), WS_CHILD | WS_VISIBLE | WS_BORDER, rect_button2, this, IDC_START2);

m_button[1]->ShowWindow(SW_SHOWNORMAL);}

2.5字体的输出

pMemDC->SetBkMode(TRANSPARENT);

wsprintf(Score,L"分数:%d", score_my);

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 35, Score, _tcslen(Score));//字体位置

wsprintf(Level, L"武器等级:%d", boom_my);

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 60, Level, _tcslen(Level));//字体位置

wsprintf(V, L"引擎设备:%d", m_pMe->GetV());

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 85, V, _tcslen(V));//字体位置

wsprintf(Fssk, L"审判之力(A):%d", fssk_my);

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 110, Fssk, _tcslen(Fssk));//字体位置

2.6游戏模式切换的实现

void CPlaneGameView::start_jd(){

model_my = 0;

for (int i =0; i< 2 ;++i)

delete m_button[i];

InitGame();

}

void CPlaneGameView::start_god(){

model_my = 1;

for (int i = 0; i< 2; ++i)

delete m_button[i];

InitGame();}

if (!model_my && !Invincible) --life_me;

2.7设置定时器

定时器告诉WINDOWS一个时间间隔,然后WINDOWS以此时间间隔周期性触发程序。通常有两种方法来实现:发送WM_TIMER消息和调用应用程序定义的回调函数。SetTimer(1,30,NULL); //设置每30毫秒刷新一次

2.8双缓冲技术

关于双缓冲技术主要就是利用缓存的原理进行将所有的东西都先存在一个缓冲得虚拟的区域,然后再一次性的将所有的虚拟缓存中的东西都放入实在的存储器中。

//建立设备DC

m_pDC = new CClientDC(this);

//建立内存DC

m_pMemDC = new CDC;

m_pMemDC->CreateCompatibleDC(m_pDC);

//建立内存位图

m_pMemBitmap = new CBitmap;

m_pMemBitmap->CreateCompatibleBitmap(m_pDC,GAME_WIDTH,GAME_HEIGHT);

//将位图选入内存DC

m_pMemDC->SelectObject(m_pMemBitmap);

2.9滚屏的实现

bool DrawBK(CDC *pDC, UINT bmpID, CRect DestRect, int bg_pos)

{

CBitmap bitmap;

bitmap.LoadBitmap(bmpID);

BITMAP BitMap;

bitmap.GetBitmap(&BitMap);

CDC dcMem;

dcMem.CreateCompatibleDC(pDC);

dcMem.SelectObject(&bitmap);

pDC->StretchBlt(DestRect.left, DestRect.top, DestRect.Width(), DestRect.Height(), &dcMem, 0, -bg_pos, BitMap.bmWidth, BitMap.bmHeight, SRCCOPY);

pDC->StretchBlt(DestRect.left, DestRect.top, DestRect.Width(), DestRect.Height(), &dcMem, 0, BitMap.bmHeight - bg_pos, BitMap.bmWidth, BitMap.bmHeight, SRCCOPY);

return true;}

CRect rect;

GetClientRect(&rect);

DrawBK(pMemDC, IDB_BACKGROUND, rect, bg_pos);

3. 总体设计与详细设计

3.1 系统模块划分

主要功能模块主要就是那些类的功能模块,主要有:模块名称功能简述

应用程序对象游戏程序的加载、游戏对象的绘制、游戏规则的调用、玩家的键盘事

件获取

游戏对象各个游戏对象的抽象父类

战机对象战机类,继承于游戏对象父类敌机1对象敌机1类,继承于游戏对象父类敌机2对象敌机2类,继承于游戏对象父类BOSS对象BOSS类,继承于游戏对象父类掉落包对象掉落类,继承于游戏对象父类生命对象生命类,继承于游戏对象父类导弹对象导弹类,继承于游戏对象父类炸弹1对象炸弹1类,继承于游戏对象父类爆炸对象爆炸类,继承于游戏对象父类

3.2 主要功能模块

4.编码实现

// PlaneGameView.cpp : CPlaneGameView 类的实现

#include "stdafx.h"

#include "PlaneGame.h"

#include "PlaneGameDoc.h"

#include "PlaneGameView.h"

#include "MyPlane.h"

#include "Enemy.h"

#include "Bomb.h"

#include "Ball.h"

#include "Upup.h"

#include "Explosion.h"

#include "Boss_Laser.h"

#include "Boss_Track.h"

#include

#include "Elite.h"

#include "BOSS_Mire.h"

#include

#pragma comment(lib, "WINMM.LIB")

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#endif

int score_my = 0;

int score_last = -90000;

int life_me = 10;

int level_my = 1;

int boom_my = 1;

int fssk_my = 9;

int model_my = 0;

int time_all = 1;

int cc = 0;

int bg_pos = 0;

int Invincible = 0;

int sss_my = 0;

int mir_have = 0;

int num_boss = 0;

int CPlaneGameView::boss_have=0;

// CPlaneGameView

IMPLEMENT_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_BN_CLICKED(IDC_START1, start_jd)

ON_BN_CLICKED(IDC_START2, start_god)

//ON_BN_CLICKED(IDC_START3, start_cz)

ON_WM_TIMER()

END_MESSAGE_MAP()

// CPlaneGameView 构造/析构

CPlaneGameView::CPlaneGameView():m_pMe(NULL){} CPlaneGameView::~CPlaneGameView(){}

void CPlaneGameView::start_jd(){

model_my = 0;

for (int i =0; i< 2 ;++i)

delete m_button[i];

InitGame();

}

void CPlaneGameView::start_god(){

model_my = 1;

for (int i = 0; i< 2; ++i)

delete m_button[i];

InitGame();

}

BOOL CPlaneGameView::PreCreateWindow(CREATESTRUCT& cs) {

// TODO: 在此处通过修改

// CREATESTRUCT cs 来修改窗口类或样式

return CView::PreCreateWindow(cs);

}

// CPlaneGameView 绘制

void CPlaneGameView::OnDraw(CDC* /*pDC*/)

{

CPlaneGameDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

if (!pDoc)

return;

// TODO: 在此处为本机数据添加绘制代码

}

// CPlaneGameView 打印

BOOL CPlaneGameView::OnPreparePrinting(CPrintInfo* pInfo) {

// 默认准备

return DoPreparePrinting(pInfo);

}

void CPlaneGameView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

// TODO: 添加额外的打印前进行的初始化过程

}

void CPlaneGameView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)

{

// TODO: 添加打印后进行的清理过程

}

// CPlaneGameView 诊断

#ifdef _DEBUG

void CPlaneGameView::AssertValid() const

{

CView::AssertValid();

}

void CPlaneGameView::Dump(CDumpContext& dc) const

{

CView::Dump(dc);

}

CPlaneGameDoc* CPlaneGameView::GetDocument() const // 非调试版本是内联的

{

ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPlaneGameDoc)));

return (CPlaneGameDoc*)m_pDocument;

}

#endif //_DEBUG

// CPlaneGameView 消息处理程序

void CPlaneGameView::OnInitialUpdate()

{

CView::OnInitialUpdate();

// TODO: 在此添加专用代码和/或调用基类

//初始化游戏

m_button[0] = new CButton();

m_button[1] = new CButton();

CRect rect_button1(GAME_WIDTH / 2 - 60, GAME_HEIGHT / 2 - 15, GAME_WIDTH / 2 + 40, GAME_HEIGHT / 2 + 15);//模式窗口位置,大小

m_button[0]->Create(_T("经典模式"), WS_CHILD | WS_VISIBLE | WS_BORDER, rect_button1, this, IDC_START1);

m_button[0]->ShowWindow(SW_SHOWNORMAL);

CRect rect_button2(GAME_WIDTH / 2 - 60, GAME_HEIGHT / 2 + 35, GAME_WIDTH / 2 + 40, GAME_HEIGHT / 2 + 65);//模式窗口位置,大小

m_button[1]->Create(_T("无敌模式"), WS_CHILD | WS_VISIBLE | WS_BORDER, rect_button2, this, IDC_START2);

m_button[1]->ShowWindow(SW_SHOWNORMAL);

}

void CPlaneGameView::StopGame()

{

delete m_pMe;

delete m_pMemDC;

delete m_pDC;

delete m_pMemBitmap;

}

BOOL CPlaneGameView::InitGame()

{

CRect rc;

GetClientRect(rc);

//产生随机数种子

srand( (unsigned)time( NULL ) );

//建立设备DC

m_pDC = new CClientDC(this);

//建立内存DC

m_pMemDC = new CDC;

m_pMemDC->CreateCompatibleDC(m_pDC);

//建立内存位图

m_pMemBitmap = new CBitmap;

m_pMemBitmap->CreateCompatibleBitmap(m_pDC,GAME_WIDTH,GAME_HEIGHT);

//将位图选入内存DC

m_pMemDC->SelectObject(m_pMemBitmap);

CMyPlane::LoadImage();

CEnemy::LoadImage();

CBomb::LoadImage();

CBall::LoadImage();

CExplosion::LoadImage();

Upup::LoadImage();

CBoss::LoadImage();

CLaser::LoadImage();

CTrack::LoadImage();

CElite::LoadImage();

CMire::LoadImage();

//产生主角(战机)

m_pMe = new CMyPlane;

CPoint mp= m_pMe->GetPoint();

//m_pMe->SetBoomOfMy(boom_my);

//清空BOSS战机

m_Boss = NULL;

//启动游戏

SetTimer(1,30,NULL);

return TRUE;

}

bool DrawBK(CDC *pDC, UINT bmpID, CRect DestRect, int bg_pos)

{

CBitmap bitmap;

bitmap.LoadBitmap(bmpID);

BITMAP BitMap;

bitmap.GetBitmap(&BitMap);

CDC dcMem;

dcMem.CreateCompatibleDC(pDC);

dcMem.SelectObject(&bitmap);

pDC->StretchBlt(DestRect.left, DestRect.top, DestRect.Width(), DestRect.Height(), &dcMem, 0, -bg_pos, BitMap.bmWidth, BitMap.bmHeight, SRCCOPY);

pDC->StretchBlt(DestRect.left, DestRect.top, DestRect.Width(), DestRect.Height(), &dcMem, 0, BitMap.bmHeight - bg_pos, BitMap.bmWidth, BitMap.bmHeight, SRCCOPY);

return true;

}

void CPlaneGameView::UpdateFrame(CDC* pMemDC)

{

//背景滚动

CRect rect;

GetClientRect(&rect);

DrawBK(pMemDC, IDB_BACKGROUND, rect, bg_pos);

//左上角游戏数据显示

wchar_t Score[20];

wchar_t Level[20];

wchar_t Fssk[20];

wchar_t V[20];

if (m_pMe != NULL){

pMemDC->SetBkMode(TRANSPARENT);

wsprintf(Score,L"分数:%d", score_my);

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 35, Score, _tcslen(Score));//字体位置wsprintf(Level, L"武器等级:%d", boom_my);

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 60, Level, _tcslen(Level));//字体位置wsprintf(V, L"引擎设备:%d", m_pMe->GetV());

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 85, V, _tcslen(V));//字体位置

wsprintf(Fssk, L"审判之力(A):%d", fssk_my);

pMemDC->SetTextColor(RGB(255, 0, 0));

pMemDC->TextOut(10, 110, Fssk, _tcslen(Fssk));//字体位置

//计时器

if (++cc) { time_all++; cc -= 100; }

//无敌时间减少

if (Invincible > 0) --Invincible;

//暴走时间减少

if (sss_my) --sss_my;

}

//绘制我方战机

if(m_pMe!=NULL)

{

int temp = boom_my;

if (temp >= 5)

temp--;

m_pMe->SetBoomOfMy(temp);

if (sss_my)

m_pMe->Draw_sss(m_pMemDC, FALSE);

else

m_pMe->Draw(m_pMemDC, FALSE);

if(Invincible) m_pMe->Draw_invin(m_pMemDC, FALSE);

CPoint cpt = m_pMe->GetPoint();

//绘制血条

CPoint pt = m_pMe->GetPoint();

if (life_me>6) pMemDC->FillSolidRect(pt.x+20, pt.y + 60, life_me * 5, 5, RGB(0, 255, 0));

else if (life_me>3) pMemDC->FillSolidRect(pt.x+20, pt.y + 60, life_me * 5, 5, RGB(255, 255, 0));

else pMemDC->FillSolidRect(pt.x+20, pt.y + 60, life_me * 5, 5, RGB(255, 0, 0));

}

else

{ //Game Over

CString str=_T("GAME OVER");

pMemDC->SetBkMode(TRANSPARENT);

pMemDC->SetTextAlign(TA_CENTER);

pMemDC->SetTextColor(RGB(255,0,0));

pMemDC->TextOut(GAME_WIDTH/2,GAME_HEIGHT/2,str);

}

//绘制BOSS

if (boss_have && m_Boss != NULL){

if (num_boss >= 5)

num_boss = 0;

m_Boss->setImgIndex(num_boss);

m_Boss->Draw(m_pMemDC, FALSE);

CPoint pt = m_Boss->GetPoint();

int q = m_Boss->less_life(0);

int w = m_Boss->get_max();

pMemDC->FillSolidRect(pt.x, pt.y + 145, q*200/w, 5, RGB(255, 0, 0));

if (mir_have>0){

--mir_have;

CPoint bpt = m_Boss->GetPoint();

mir_left->SetPoint(CPoint(bpt.x + 24, bpt.y + 140));

mir_right->SetPoint(CPoint(bpt.x + 229, bpt.y + 140));

mir_left->Draw(m_pMemDC, FALSE);

mir_right->Draw(m_pMemDC, FALSE);

}

else mir_have = 0;

}

//绘制导弹、爆炸、敌机、子弹、掉落包

for(int i=0;i<5;i++)

{

POSITION pos1,pos2;

for( pos1 = m_ObjList[i].GetHeadPosition(); ( pos2 = pos1 ) != NULL; )

{

CGameObject* pObj = (CGameObject*)m_ObjList[i].GetNext( pos1 );

if(!pObj->Draw(pMemDC,FALSE))

{

m_ObjList[i].RemoveAt(pos2);

delete pObj;

}

}

}

//复制内存DC到设备DC

m_pDC->BitBlt(0,0,GAME_WIDTH,GAME_HEIGHT,m_pMemDC,0,0,SRCCOPY); }

void CPlaneGameView::AI()

{

static int nCreator = rand() %4+6;

//随机产生敌机Enemy

if(nCreator<=0)

{

nCreator = rand()%6+10;

int s=rand() % 2;

m_ObjList[enEnemy].AddTail(new CEnemy(time_all));

}

nCreator--;

static int elite_nCreator = rand() % 4 + 6;

//随机产生敌机Elite

if (elite_nCreator <= 0)

{

elite_nCreator = rand() % 20 + 30;

int s = rand() % 2;

m_ObjList[enEnemy].AddTail(new CElite(time_all));

}

elite_nCreator--;

if (CPlaneGameView::boss_have <= score_my / 50000 && score_my >= score_last+50000 && m_Boss == NULL) {

m_Boss = new CBoss(time_all);

CPlaneGameView::boss_have += 1;

}

if(m_pMe==NULL)

return;

//检测四个方向键,移动战机

for(int i=0;i<4;i++)

{

int nMeMotion=0;

m_pMe->SetVerMotion(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(sss_my))

{

//产生战机导弹

int bz = sss_my < 0 ? 2: 1;

CPoint pt = m_pMe->GetPoint();

if (boom_my == 1 && sss_my==0)

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 0, 10 * bz, 3));

if(boom_my>=2 && sss_my==0)

{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 25, pt.y + 10, 0, 10 * bz, 3));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 55, pt.y + 10, 0, 10 * bz, 3));

}

if (boom_my >= 3 || sss_my){

if (sss_my) {

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 48, pt.y + 10, -2 * bz, 8 * bz, (sss_my > 0)));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 31, pt.y + 10, 2 * bz, 8 * bz, (sss_my > 0)));

}

else {

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 48, pt.y + 10, -2 * bz, 8 * bz, 4));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 31, pt.y + 10, 2 * bz, 8 * bz, 4));

}

}

if (boom_my >= 4 || sss_my){

if(sss_my)

{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, -1 * bz, 8 * bz, (sss_my>0)));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 1 * bz, 8 * bz, (sss_my>0)));

}

else

{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, -1 * bz, 8 * bz,3));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 1 * bz, 8 * bz, 3));

}

}

if (boom_my >= 5 || sss_my){

if(sss_my)

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 0, 10 * bz, (sss_my > 0)));

if (sss_my == 0){

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 41, pt.y + 10, 0, 10 * bz, 3));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y , 0, 15 * bz, 2));

m_ObjList[enBomb].AddTail(new CBomb(pt.x - 15, pt.y , 0, 15 * bz, 2));

}

else{

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y, -2 * bz, 15 * bz, 5));

m_ObjList[enBomb].AddTail(new CBomb(pt.x - 15, pt.y, -2 * bz, 15 * bz, 5));

m_ObjList[enBomb].AddTail(new CBomb(pt.x + 90, pt.y, 2 * bz, 15 * bz, 5));

m_ObjList[enBomb].AddTail(new CBomb(pt.x - 15, pt.y, 2 * bz, 15 * bz, 5));

}

}

}

}

//清屏大招

if (GetKey('A') == 1)//按下大招A

{

if (m_pMe != NULL && m_pMe->Fired(0) && fssk_my>0)

{

fssk_my--;

POSITION ePos1 = NULL, ePos2 = NULL;

for (ePos1 = m_ObjList[enEnemy].GetHeadPosition(); (ePos2 = ePos1) != NULL;)

{

CEnemy* pEnemy = (CEnemy*)m_ObjList[enEnemy].GetNext(ePos1);

CRect mRect = pEnemy->GetRect();

CRect tmpRect;

score_my += 10;

//添加爆炸效果

m_ObjList[enExplosion].AddTail(

new CExplosion(mRect.left, mRect.top)

山东科技大学毕业设计王振

山东科技大学毕业设计(论文)X-Y数控工作台的机电系统设计 学生:王振 学号:0903216219 专业:机电一体化技术 班级:机电一体化2009.1 指导教师:张山 山东科技大学电气信息系 二O一二年六月

山东科技大学 毕业设计(论文)任务书 设计(论文)题目:X-Y数控工作台的机电系统设计 学院:电气信息系专业:机电一体化班级 09.1 学号:0903216219 学生:王振指导教师:张山 接受任务时间 2012年月3日 教研室主任(签名)院长(签名) 1.毕业设计(论文)的主要内容及基本要求 1、立铣刀最大直径的d=15mm,立铣刀齿数Z=3,最大铣削宽度 a=15mm c 最大背吃刀量p a=8mm,加工材料为碳素钢或有色金属。 2、XY方向的脉冲当量为0.005mm/脉冲。 3、X、Y方向的定位精度均为±0.01mm。 4、工作台面尺寸为230mmx230mm,加工范围为250mmx250mm。 5、工作台空载进给最快移动速度:mm/min Vymax Vxmax, 3000工作台进给最快移动速度:mm/min Vxmaxf。 Vymaxf 400 2.指定查阅的主要参考文献及说明 张建民.机电一体化系统设计[M].北京:高等教育出版社.2001

张训文.机电一体化系统设计与应用[M].北京:北京理工大学出版社.2006 张立勋等.机电一体化系统设计[M].哈尔滨:哈尔滨工程大学出版社. 文怀兴、夏田.机电一体化系统设计[M].北京:化学工业出版社.2008

目录 一、设计目的 (5) 二、设计任务 (5) 三、设计主要步骤 (6) 1、机械传动部件的选择 (6) (1)、导轨副的选用 (6) (2)、丝杠螺母副的选用 (6) (3)减速装置的选用 (6) (4)伺服电动机的选用 (6) (5)检测装置的选用 (7) 2、控制系统的设计 (7) 3、机械传动部件的计算与选型 (8) (1)、导轨上移动部件的重量估算 (8) (2)、切削力的计算 (8) (3)、滚珠丝杠传动的设计计算及选型 (9) (4)滚珠丝杠螺母副的计算与选型 (10) (5)、步进电动机减速箱的选用 (13) (6)步进电动机的计算与选型 (14) (7)增量式旋转编码器的选用 (20) 四、工作台机械装配图的绘制 (21) 五、总结体会 (21) 六、参考文献 (22)

飞机大战实验报告

飞机大战实验报告 专业:网络工程132班 学号:139074298 姓名:孙仁强 计算机科学与技术学院二零一六年十二月

一、软件运行所需要的软硬件环境 本系统是以Windows系统为操作平台,用Java编程语言来实现本系统所需功能的。本机器的配置如下: 处理器:CORE i7 主频:1.2Hz以上 内存:4G以上 硬盘:HHD 50G 编程语言:Java 开发环境:windows7 开发软件:Eclipse Mars 二、游戏流程 1.用户打开游戏,进入开始菜单。 2.用户点击开始游戏按钮,进入游戏界面; 3.用户通过触屏方式控制玩家飞机上下左右移动,躲避与子弹相撞; 4.游戏失败后,显示本次游戏得分,用的秒数和水平; 5.退出游戏 三、主要代码 1、准备代码设置窗口使用双缓冲使飞机不闪烁 Constant设置窗口大小 package com.ahut.准备代码; publicclass Constant { publicstaticfinalint GAME_WIDTH = 350; publicstaticfinalint GAME_HEIGHT = 600; } package com.ahut.准备代码; import java.awt.Image; import java.awt.image.BufferedImage;

import java.io.IOException; import https://www.doczj.com/doc/db1620666.html,.URL; public class GameUtil { private GameUtil () {} public static Image getImage(String path) { BufferedImage bi = null; try { URL u = GameUtil.class.getClassLoader().getResource(path); bi = javax.imageio.ImageIO.read(u); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bi; } } package com.ahut.准备代码; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class MyFrame extends Frame{ public void lauchFrame() { setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT); setLocation(100, 100); setVisible(true); new PaintThread().start(); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); }

飞机大战游戏设计与实现

程序设计综合实践报告 信息科学与工程学院 2015年12月20日

目录 1. 概述 (1) 1.1 关卡设置 (1) 1.2 敌机设置 (1) 1.3 战机设置 (1) 1.4 游戏设置 (1) 2. 相关技术 (2) 2.1 Windows定时器技术 (2) 2.2 双缓冲技术 (2) 2.3 获取矩形区域 (2) 3. 总体设计与详细设计 (2) 3.1 系统模块划分 (2) 3.2 主要功能模块 (3) 4. 编码实现 (4) 4.1 初始准备 (4) 4.2 战机对象 (6) 4.3 敌机对象 (7) 4.4 道具对象 (9) 4.5 主要内容 (10) 4.6 窗口显示信息 (17) 5. 实训中遇到的主要问题及解决方法 (20) 5.1 产生中断及解决方案 (20)

5.2 图片闪烁问题及解决方案 (20) 6. 实训体会 (20)

1. 概述 项目:飞机大战 主要功能有以下几点: 1.1 关卡设置 本次飞机大战游戏中共设置了四个关卡,第一关的难度设置较低,仅有敌机对其进行攻击;第二关在原有的基础上增加一些补血的小道具,当积分达到一定的时候便会出现该道具,并且敌机出现的频率也比第一关高;第三关在第二关的基础上新出现了小boss,并增加了其他的道具;第四关在第三关的基础上再新出现大boss,当积分达到要求以及大boss被消灭后通关成功。 1.2 敌机设置 小敌机随机出现,炮弹也随机发射,当小敌机与战机相撞或被战机的子弹击中时,小敌机消失。当达到一定积分时,小boss出现并随机发射出与小敌机一样的炮弹,但是炮弹分三个方向发射出。当小boss被战机的子弹击中或与战机相撞时失去5滴血。当到达四关并且积分足够多时出现大boss,同小boss一样,当大boss与战机相撞或被战机子弹击中时失去1滴血。除此之外,小boss和大boss上方都有血条显示,当血条消失时意味着生命消失,大boss和小boss消失。小boss会在屏幕上随机出现和走动出了屏幕后会在屏幕的任意地方再随机出现,直至血量为0消失。大boss则在屏幕中随机走动不出屏幕,直至血量为0消失。 1.3 战机设置 战机初始有五条生命,每条命的血量为50,所获得的积分以及其生命值、血条都在窗口的左上角显示。在第一、二关时,按空格键战机会出现两个向上发射的炮弹,到第三、四关的时候,按空格键战机会发射三个不同方向的炮弹。战机吃到药瓶道具时血量会增加20,但不可以超过50;吃到闪电道具时,便可放大招,放大招的次数为15。当战机被敌方的炮弹击中或与敌方相撞时,血量减少,减少为0时生命值减1,直至生命值为0。 1.4 游戏设置 进入游戏时,会有背景音乐,窗口左上角显示战机所得积分及其生命值。根据积分情况进入不同的关卡。游戏通关时屏幕清空,并显示通关成功,按Y可重新开始游戏。当战机的血量以及生命值为0时,游戏失败,屏幕清空并显示游戏结束,按Y即可重新开始游戏。

电气自动化毕业论文...doc

关于110KV变电所一次系统的设计 毕业院校:山东科技大学 系别电气自动化 专业班级: 12级 姓名:臧绍龙 指导教师:

目录 标题、摘要、关键词--------------------------------------2 前言----------------------------------------------------3 第一章原始资料分析-------------------------------------4 1.1 本所设计电压等级--------------------------------4 1.2 电源负荷----------------------------------------4 第二章电气主接线设计-----------------------------------6 2.1 主接线接线方式----------------------------------6 2.2电气主接线的选择---------------------------------8 第三章所用电的设计-------------------------------------10 3.1 所用电接线一般原则------------------------------10 3.2所用电接线方式确定------------------------------10 3.3备用电源自动投入装置----------------------------10 第四章短路电流计算-------------------------------------12 4.1 短路计算的目的----------------------------------12 4.2短路计算过程------------------------------------12 第五章继电保护配置-------------------------------------20 5.1 变电所母线保护配置-----------------------------20 5.2 变电所主变保护的配置---------------------------20 第六章防雷接地----------------------------------------22 6.1 避雷器的选择-----------------------------------22 6.2变电所的进线段保护-----------------------------23

飞机大战MFC实验报告

实训报告 飞机大战游戏设计与开发

目录 1. 概述 (4) 2. 相关技术 (4) 2.1 透明贴图技术 (4) 2.2 CObList链表 (4) 2.3获取矩形区域函数 (4) 2.4弹出对话框函数 (5) 2.5字体的个性化输出函数 (5) 2.6设置定时器 (5) 2.7双缓冲技术 (5) 2.8 内存释放技术 (6) 2.9对话框中添加动态按钮 (6) 2.10检测方向键按下 (6) 3. 需求分析(用结构化方法或面向对象方法给出系统的主要需求模型) (6) 3.1功能需求分析 (6) 3.2 数据需求分析 (7) 3.3 行为需求分析 (7) 3.4 其他需求 (8) 4. 总体设计与详细设计 (8) 4.1 系统模块划分 (9) 4.2 主要功能模块 (10) 4.3 扩展功能设计思路 (10) 5. 编码实现 (11) 5.1游戏初始创建 (11) 5.2定时器 (11) 5.3背景及游戏开始、结束界面绘制函数 (11) 5.4键盘控制函数 (12) 5.5游戏对象进行碰撞测试和碰撞销毁 (13) 5.6创建动态按钮(开始游戏、游戏规则) (13) 5.6重新开始游戏代码 (14) 5.7设置游戏难度代码 (14) 5.8游戏结束时释放资源函数 (15) 5.9调整对话框大小函数 (15) 5.10开始界面背景绘制函数 (15) 5.11选择下一关卡以及选择完成后的执行代码 (16) 6.测试情况说明。 (17) 6.1主要模块测试情况(白盒) (17) 6.11各游戏对象碰撞检测爆炸模块测试 (17) 6.12战机导弹的方向速度模块测试 (17) 6.13文字显示,游戏结束和关卡进入模块测试 (18) 6.14设置游戏难度和重新开始模块测试 (18) 6.2 主要功能测试情况(黑盒) (18)

飞机大战游戏设计报告

JAVA期中作业 飞 机 大 战

目录 飞机大战游戏设计报告 1、游戏名称 (1) 2、游戏初步框架: (1) 3、游戏规则: (1) 4、需求分析 (2) 4.1功能需求: (2) 4.2数据需求: (3) 4.3用户需求: (3) 4.4行为需求: (3) 5、系统设计 (4) 5.1 系统模块划分 (4) 5.2 主要功能模块 (5) 6、详细设计 (6) 6.1 开发工具 (6) 6.2 游戏界面设计 (6)

飞机大战游戏设计报告 1、游戏名称 《飞机大战》 2、游戏初步框架: 游戏元素:游戏背景、不同种类的飞机、敌机 游戏成分:碰撞之后的血量计算、分数统计、暂停恢复、数据存储 游戏的总体设计:分为三个场景,第一个为游戏的进入场景,第二个为游戏的主界面场景,第三个为游戏结束场景,游戏分别有不同关卡,每一关有自己的剧情设计,玩法各一。 游戏开始场景就是开场背景,资源加载以及初始化处理,比如数据存储等。 游戏主界面场景是游戏核心,主要展示游戏过程,在游戏过程中计算得分,玩家战机血量等。 游戏结束界面是统计当前分数,显示玩家的最高分记录,并给出菜单的进一步设计。 3、游戏规则: (1)玩家战机数量为1。 (2)玩家可自由选择战机。 (3)玩家飞机可通过键盘控制战机上下左右移动。 (4)玩家子弹攻击敌机,敌机血量减少。

(5)敌机有计算机自主控制 (6)敌机从界面上端出现,不能反向运动,不能左右移动。 (7)敌机数量随机,由计算机控制。 (8)敌机可发送子弹,若战机被击中,血量减少,血量减少到一定程度,战机坠毁,游戏结束。 (9)子弹具有一定的速度。 (10)玩家可在一段时间内发送导弹清除屏幕中除Boss外的敌机。 4、需求分析 4.1功能需求: 飞机大战需要实现的主要功能如下: (1)用户进入游戏开始菜单可以选择开始游戏、退出游戏。 (2)战机可根据玩家的操作自由移动,但不可移出窗体外。 (3)玩家飞机以一定速度自下而上飞行,用户可以控制飞机上下左右移动。 (4)玩家飞机可连续发射子弹,子弹位置由战机起始位置决定,用户通过操控飞机位置来扫射飞机。 (5)玩家可选择不同的飞机,不同种类飞机的飞行速度不同。 (6)玩家飞机发射的子弹击中敌机后,敌机生命值减少,当生命值变为零时敌机坠毁,子弹击中敌机后消失。 (7)玩家飞机若被Boss敌机的子弹击中,玩家飞机则坠毁,游戏失败。

山东科技大学2013年安全系统工程考研真题

2013年山东科技大学 硕士研究生入学考试 安全系统工程试题 一、简答题(每小题5分,共25分) 1.简述系统安全分析的概念。 2.写出PHA的分析表格式。 3.事故树分析中,如何利用概率重要度求结构重要度? 4.危险和可操作性研究中,其引导词有哪几个? 5.何为特尔菲法?说明特尔菲法的实施程序。 二、计算题(第1小题15分,第2、3小题各10分,共35分) 1.用近似计算法求图1所示事故树顶上事件发生概率,并与精确计算值比较。 各基本事件发生概率分别为q 1=0.01,q 2 =0.02,q 3 =0.03,q 4 =0.04。 图1 事故树之一

2.某国某年人口为2亿,该年度汽车交通事故死亡5万人。设每人每年接触汽车1460小时,使用汽车的安全指标为17FAFR,试对其进行安全评价。 3.某系统的事件树如图2所示,元件A正常的概率P{A}=0.8,元件B正常的概率P{B}=0.6,求系统失效的概率。 图2 事件树 三、问答与论述题(第1、2小题各10分,第3、4小题各15分,共50分) 1.如何建立安全评价的指标体系? 2.FMEA中,如何通过评点法划分故障等级? 3.如何结合应用安全检查表法和事故树分析法,对企业进行安全评价? 4.论述定量安全评价的分类方法和发展趋势。 四、应用题(第1小题15分,第2小题25分,共40分) 1.某厂在马路旁清理铸钢件,工人在捆扎后起吊,起重机吊杆旋转过程中,钢丝绳摆动撞坏施工现场上空9米高的高压输电线,从而造成触电死亡事故。 试用鱼刺图分析这一事故,并指出同类事故的预防措施。 2.如图3所示事故树: (1)求事故树的割集和径集数目; (2)求出最小割集或最小径集(求出二者之一即可); (3)根据求出的最小割集或最小径集,作出其等效事故树;

飞机大战实训报告.

程序设计综合实践 实习报告 学院名称 专业班级 学生姓名 学号 指导教师 山东科技大学

一、实习题目:飞机大战游戏的设计与实现 二、实习时间:18周~ 19周实习地点: 三、实习任务: 1.基本功能要求:飞机大战游戏必须运用透明贴图、按键处理、定时控制、双缓冲技术等技术实现战机(玩家)和敌机(计算机)对战功能 2.扩展功能:在完成基本功能基础上可以增加双人对战、游戏积分制、声音效果、多种子弹类型、客机类型、游戏关卡设计、多种类型敌机、游戏中间结果存贮等功能 四、小组分工说明:自己完成 五、实习成绩 六、指导教师对实习的评语: 指导教师(签章): 2015年月日

目录 1.概述 (4) 1.1实训项目简介 (4) 1.2实训项目功能说明 (4) 2.相关技术 (5) 2.1透明贴图技术 (5) 2.2 获取矩形区域并判断两个矩形区域是否相撞 (5) 2.3鼠标控制我方战机 (5) 2.4 Windows定时器技术 (6) 2.5 CObList链表 (6) 2.6对话框的应用 (7) 2.7双缓冲技术 (7) 3.需求分析 (7) 3.1功能需求分析 (7) 3.2 数据需求分析 . (7) 3.3 行为需求分析 (7) 3.4 其他需求 (7) 4.总体设计与详细设计 (8) 4.1 系统模块划分 (8) 4.2 主要功能模块 (8) 4.2.1系统主要类图 (8) 4.2.2飞机大战游戏设计执行流程图 (8) 4.3 扩展功能设计思路 (9) 4.4 软件结构设计体会 (9) 5.编码实现 (10) 5.1绘制游戏背景位图的程序 (10) 5.2各个游戏对象的绘制 (10) 5.3我方战机位置的动态控制 (12) 5.4各个游戏对象碰撞的实现 (13) 5.5游戏界面输出当前游戏信息 (15) 6.测试情况说明 (17) 6.1主要模块测试情况 (17) 6.2 主要功能测试情况 (18) 7. 实训中遇到的主要问题及解决方法 (19) 8.实训收获与体会 (19)

飞机大战程序设计报告

程序设计综合实践 实习报告 一、实习题目:飞机大战游戏 二、实习时间:2014.9.20-2014.9.30实习地点:J13-132、232 三、实习任务:通过项目实战,掌握C++面向对象编程的基础技术和Windows 应用程序的编程方法,能够运用MFC技术及其开发环境进行小项目的开发。 四、小组分工说明: 五、实习成绩 六、指导教师对实习的评语:

指导教师(签章): 年月日 飞机大战游戏 1.实习目的 1.1使学生全面了解软件项目实施的过程,理解软件企业对于程序员的基本 素质和技术能力要求。 1.2使学生掌握C++及Window程序设计的基本技术,能够运用MFC技术及其 开发环境进行小型项目的开发。 1.3重点培养学生的独立创新精神和查阅资料能力,提高其口头和书面的沟 通能力。 1.4使学生掌握快速学习新知识、新技术方法,培养良好的分析问题和解决 问题的能力 1.5重点提高学生的编程能力,使学生建立正确的编程理念,养成规范的编 程习惯。 2. 实习计划 1、9.20—9.21先建立CGameObject 类,利用继承机制,根据此类进行依次的派生。 2、9.22—9.25再建立派生类:Bomb,Ball,Enemy,MyPlane,Explosion等, 并实现各自功能。 3、9.26—9.29在xxView.cpp中的OnTimer中实现背景的设置,对敌机, 导弹,敌机子弹,爆炸效果的绘制,以及敌机子弹和战机,导弹和敌机的碰撞检验,并添加爆炸效果 4、9.29—9.30最后释放pDC以及定时器

3.实习过程 3.1 技术准备 透明贴图技术 绘制透明位图的关键就是创建一个“掩码”位图(mask bitmap),这个“掩码”位图是一个单色位图,它是位图中图像的一个单色剪影。 在详细介绍实现过程之前先介绍下所使用的画图函数以及函数参数所代表的功能;整个绘制过程需要使用到BitBlt()函数。整个功能的实现过程如下: (1) 创建一张大小与需要绘制图像相同的位图作为“掩码”位图; (2) 将新创建的“掩码”位图存储至掩码位图的设备描述表中; (3) 把位图设备描述表的背景设置成“透明色”,不需要显示的颜色; (4) 复制粘贴位图到“掩码”位图的设备描述表中,这个时候“掩码”位图 设备描述表中存放的位图与位图设备描述表中的位图一样; (5) 把需要透明绘制的位图与对话框绘图相应区域的背景进行逻辑异或操 作绘制到对话框上; (6) 把“掩码”位图与这个时候对话框相应区域的背景进行逻辑与的操作; (7) 重复步骤5的操作,把需要透明绘制的位图与对话框绘图相应区域的背 景进行逻辑异或操作绘制到对话框上; (8) 最后把系统的画笔还给系统,删除使用过的GDIObject,释放非空的指 针,最后把新建的设备描述表也删除。 BOOL CGameObject::LoadImage(CImageList& imgList,UINT

Unity3D游戏开发之子弹追踪和协程

Unity3D游戏开发之子弹追踪和协程应用 今天我们就这几天根据飞机大战个人重做的小项目进行了面试,面试中我遇到了好多技术上的问题和理解上的问题,在这总结一下,以便以后的参考。 场景如图: 1、项目包含的模块: 登陆模块、我方模块、敌方模块、游戏地形模块、子弹模块 2、各个模块的功能和功能所用的技术(功能之能做什么,不是游戏过程):

功能:登陆模块:可以跳转到游戏界面 我方模块:可以前后左右移动,发射子弹,得分,销毁,减少生命值 敌方模块:可以移动,发射子弹,销毁,克隆,子弹追踪 技术:GUI(文字显示,按钮点击,暂停开始); 位移(我方和敌方的移动); 克隆(子弹、敌方的克隆); 销毁(子弹、我方、敌方的销毁); 协程(敌方一波一波的自动出现); 循环判断(得分、减少生命值、游戏的暂停和继续、敌方和我方的销毁); 音频(设置子弹发出的声音,敌方和我方爆炸的声音,背景音乐); 键盘判断(我方的位移和发射子弹和游戏的暂停(esc暂停)); 鼠标判断(我方的发射子弹,跳转界面和游戏继续); 触发器检测(双方子弹互相打中和敌我双方相撞) 3、具体知识点:子弹追踪和协程技术 子弹追踪: 1.void Update() 2. { 3. transform.Translate(0, 0, speed * Time.deltaTime); 4. timer -= Time.deltaTime; 5. if (timer <= 0) 6. { 7. timer = 1; 8. if (myTank != null) 9. { 10. Vector3 pos = enemyTank.position - myTank.position; 完成子弹的追踪, 所用方法为transform . Translate 11. GameObject.Instantiate(enemyRocket, enemyTank.position+new Vector3(0,20,0), Quaternion.LookRotation(pos)); 12. } 13. } 14. } 协程技术: 定义: 协同程序,即在主程序运行时同时开启另一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。

昂扬斗志锐意进取再接再厉铸造新三中辉煌

昂扬斗志锐意进取再接再厉铸造新三中辉煌 ------峨眉新三中2010届教学研讨会主题发言稿 各位老师: 上午好! 伴随着一缕缕春风,我们又迎来了2010。2010是全新的,因为它跨过了充实而忙碌、苦痛而迷茫的2009;2010是全新的,因为我们迎来了新三中。新三中是政府的,新三中更是我们大家的,因为我们的根基在这里,我们的事业在这里,我们的希望在这里!2010对我们来说又是充满挑战的,因为我们2010届承载了为新三中创造社会荣誉的使命,我们在座战友肩负了振奋新三中雄风的重任!新三中刚成立,政府在期待、社会在观望,办出高质量的初中、铸造新三中辉煌既是学生和家长的期盼,更是我们生存和发展的需要。可能我们还没有从分校的感伤中走出来,但作为新三中成立后的第一届毕业班,我们别无选择地挑起了这副重担。所以今天我受学校委托作主题发言,发言的主题就是“昂扬斗志锐意进取再接再厉铸造新三中辉煌”。 一、上学期的工作回顾 众所周知,上学期我们经历了甲型流感的冲击、经历了绩效工资的风潮、经历了早自习和辅导的调整、经历了分校的苦痛,这些无不冲击着我们的正常秩序、影响着我们的平静心态、考量着我们的职业操守,面对这种种不利因素,我们经受住了考验、坚守住了底线、作出了成绩:一调考试人均总分超全市50多分、领先兄弟学校居全市

第一,入围全市560名学生达141人,远超兄弟学校。这样的成绩是我们在座各位辛勤耕耘、无私奉献的结果。在此,请允许我代表学校真诚地对大家说一声:辛苦了,战友们,谢谢大家!在上期经历风风雨雨的过程中,我们在座老师中不乏学校取消早自习后仍坚持组织早读的班级和老师、不乏不计报酬坚持中午在校辅导学生的科任教师、不乏坚持早到校迟离校的班主任、不乏一如既往全心全意为学生的好老师。我们对这些老师充满敬意和谢意! 二、本学期工作要点 (一)奋斗目标:全面完成市教育局下达的人均总分和优分率目标(既人均总分高于全市平均45分,优分率达43%),确保优生入围人数居第一(除二外),力争拔尖生有新突破,争取最大社会效益。 (二)工作重点:入围学生(含踩线生)和后进生 (三)工作思路:打造精良教师团队、夯实常规管理、提升出口质量(四)工作措施和要求: 初三教育教学工作千头万绪,我这里不再面面俱到,只就初三后期阶段工作谈几点学校意见。 1、打造一支有强烈质量意识、高度责任心和较强团队意识的毕业班教师队伍是实现目标的前提; 质量是学校的生命线,也是学校兴盛发展的根本,尽管教育正处于改革时期,但不管怎样改,牢记始终:拼搏精神不降调,提高质量不动摇。现在,上级部门对学校的质量要求不仅没有降低,反而有所提高和强化,社会以及学生家长对学校的评价也还没有改变。学生需

飞机大战实训报告

目录 1. 概述 (1) 2. 相关技术 (2) 2.1碰撞检测 (2) 2.2 CObList链表 (2) 2.3 设置定时器 (2) 2.4 背景滚动 (2) 2.5内存释放技术 (2) 3. 总体设计与详细设计 (2) 3.1 系统模块划分 (2) 3.2 主要功能模块 (3) 4. 编码实现 (5) 5. 实训中遇到的主要问题及解决方法 (37) 6. 实训体会 (37) 1. 概述 这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏。 实现的主要功能: 1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。 2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射 子弹数量增加。

3.战机起始十条命,可以通过过关和吃到道具增加血量。 4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者 boss会有分数加成。 5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高 等级。 2. 相关技术 2.1碰撞检测 用CRect类的GetRect()函数可以获得当前对象的矩形区域,IntersectRect()并用此函数判断二者是否碰撞。 2.2CObList链表 这个程序使用CObList链表来存储各效果。CobList类似于一个双向链表,POSITION 类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。 本程序中主要用到的函数有: GetHeadPosition():获取链表首元素的POSITION; AddTail():将新的元素添加到链表最后; GetNext( POSITION& rPosition ):使rPosition指向下一个元素。 2.3 设置定时器 SetTimer()函数来设置定时器。 2.4 背景滚动 为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。 2.5内存释放技术 这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。 3. 总体设计与详细设计 3.1 系统模块划分

05-12《克隆飞机大战》教学设计

第12课克隆飞机大战 【教材分析】 本节课是Scratch模块的第12课内容,是学习Scratch基础部分的延续,认识和理解“克隆”控件,为后面独立设计程序打下基础。 【学情分析】 在本节课之前,学生已经掌握了使用条件语句、循环语句,侦测、外观、动作等模块,还未涉及“克隆”控件,更不知如何使用。 【教学目标与要求】 1.认识与理解“克隆”控件。 2.掌握利用“克隆”控件控制角色变化方法。 3.通过使用“克隆”控件,掌握多个角色相同动作的实现方法。 4.通过使用“克隆”控件,感受编程的乐趣。 【教学重点与难点】 重点:认识与理解“克隆”控件。 难点:利用“克隆”控件控制角色变化。 【教学方法与手段】 任务驱动法。 【课时安排】 安排1课时。 【教学准备】 多媒体网络教室、《飞机大战》课件及学件。 【教学过程】

新知传授任务一:绘制飞机角色 师:在这个游戏中共2个角色,分别是“火炮” 和“飞机”。下面我们就根据教材提示绘制游戏角 色。 1.绘制飞机角色 (1)单击,打开“绘图编辑器”,使用椭 圆工具画出飞机造型。 师:除了使用椭圆工具,也可通过画笔、直线、矩形等工具画出飞机造型。 (2)单击“绘制新造型”,画出飞机爆炸后的 造型。 师:可以放大或还原图像,便于观察 或修改细节部分。 2.绘制火炮角色 (1)画出火炮,将中心点设置在火炮下方。

(2)复制造型1,调整火力位置,模拟开火的样式,注意中心点不移动。 师:通过快速点击造型1、造型2看到造型切换的效果。 任务二:编写程序 师:角色制作完毕后,我们该如何设计角色的程序呢?先来回忆一下,两个角色都是如何运转的? 生(预设):火炮间断发射,用鼠标左右键控制炮管方向。飞机从顶部随机位置往下飞,被炮击中爆炸并消失或飞到舞台底部消失。 1.火炮开火 (1)模拟火炮开火。

基于某Unity3D的飞机大战游戏开发

摘要 Unity3D是由Unity Technologies开发,可以让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity的编辑器运行在Windows 和Mac OS X 下,可发布游戏至Windows、Mac、iPhone和Android平台也可以利用Unity web player插件发布网页游戏,支持Mac 和Windows的网页浏览。它的网页播放器也被Mac widgets所支持。 本课题是基于Unity3D的飞机大战游戏开发,利用Unity3D系统和C#语言开发,实现了简单的飞机大战游戏。主要的功能模块如下:提供背景的循环播放模块,提供敌机的孵化器类模块,提供玩家战机的类模块,主界面模块,游戏奖励类模块,包括超级子弹和导弹,游戏控制模块,包括检测子弹与敌机碰撞,检测敌机与玩家战机碰撞木块,游戏的暂停、播放功能,其中玩家战机还添加了一个血条,玩家战机可以被敌机打中四次才死亡,可以让新手更好的试玩游戏,除此以外还为用户提供更加人性化的设计和方便人员的操作流程。 游戏还有很多需要完善和扩充的地方,比如可以做不同的模式,多关卡模式或挑战模式。也可以做成多人模式和小伙伴一起玩,游戏的界面也可以补充的更加完善,包括音乐、设置、帮助和商店等模块。后期还需要更加努力去完善修改自己的游戏 关键词:游戏开发;飞机大战;移动端;单机;碰撞检测;脚本语言

ABSTRACT Unity3D developed by Unity Technologies, allows gamers to easily create such comprehensive three-dimensional video game development tools, games, architectural visualization, real-time three-dimensional animation and other types of multi-platform interactive content, is a fully integrated professional game engine. Unity Editor runs under Windows and Mac OS X, you can publish your game to Windows, Mac, iPhone and Android platform can also use the Unity web player plugin released web games, support for Mac and Windows web browser. Its Web Player Mac widgets are also supported. This paper is based on Unity3D aircraft war game development, utilization Unity3D system and C # language, to achieve a simple airplane war game. The main function modules are as follows: to provide background loop module which provides the aircraft incubator class module offers players fighter class module, the main interface module, the game rewards class modules, including super bullets and missiles, the game control module, comprising detecting bullet collision with the enemy, and the player to detect enemy aircraft collision block, pause the game, the player, in which the player warplanes also added a health bar, the player can be enemy aircraft hit four times before death, allowing novices better demo games, in addition also provides users with the operation process more convenient and user-friendly design staff. Games have a lot to improve and expand the place, for example, can do different mode, multi-level mode or challenge mode. Multiplayer mode and can also be made small partner to play with, the game's interface can also add more sophisticated, including music, Settings, Help, and shops and other modules. Late also need to work harder to revise and improve their game. Keywords:Game Development; Aircraft War; Mobile Terminal; Single; Collision Detection; Scripting Language

初号机战机数据分析及对比 操控性全面介绍

初号机战机数据分析及对比操控性全面介绍全民飞机大战新战机初号机的基础数据、技能和操控性等各方面好不好呢?这些全都需要小伙伴们亲自尝试哦,今天口袋小编就这三方面作出分析和对比,感兴趣的玩家就一起看看详情吧。 1、基础数据 初号机攻击力为1950,比海神高出100点,比机甲高出200点。 血量为1400,比海神高出50点,比机甲高出20点。 基础属性完胜机甲海神 2、技能上: a、损血技毫无悬念的完爆机甲和海神。 b、加分技和机甲海神完全相同。 C、其他技能: 对比机甲,则是6秒回血21和BOSS回血300的对比,这点前面分析过,并比机甲多出一个堕天使之翼。 对比海神,则多了一个非常重要的回血技能,并且堕天使之翼完爆暴风之眼。 不过海神还有一个三叉电戟技能,这也是很多人感觉海神攻击更高的原因。 实际上飘哥在剧情63和经典模式中亲测过,在都不出损血技能的情况下,两架飞机都发挥最大攻击,基本上对等,但结合损血技能的话,初号机强于海神。 3、操控性上: 弹道特点,有人喜欢有人愁。 不过在操控性上比以往战机确有较大变化,输出也并非最近距离才是最佳输出。 另外,初号机的弹道较窄。所以大家还是要自己体会感受,视频和文字只是提点和参考。 综合分析下来,初号机完爆以往的飞机,成为目前最强战机。

如果资金充裕的,建议入手,肯定可以提升1到2关以上。 而资金暂时短缺,且已有机甲或海神的,那就继续观望,等待下一架飞机了。 最新最快全民飞机大战攻略以及资讯,只需要在百度输入【全民飞机大战百度攻略&口袋巴士】就可以看见我们的全民飞机大战精品专区。更多内容请关注百度攻略&口袋巴士全民飞机大战专区。

山东科技大学本科生毕业设计要求(下发学生)

山东科技大学本科生毕业设计(论文)实施意见 (摘自山东科技大学本科生毕业论文工作手册) 毕业设计(论文)是培养学生综合运用所学知识和技能,进行工程技术和科学研究基本训练的主要教学环节,也是对大学生培养的阶段性教学质量综合检验,是学生从学校走向工作岗位的重要过渡环节。为进一步做好毕业设计(论文)工作,加强管理,制定本意见。 1、毕业设计(论文)的要求 (1)全面系统地对学生进行设计方法、实验方法和研究方法的基本训练(不同专业可以有所侧重)。 (2)培养学生综合运用所学知识与技能独立地分析、处理和解决实际问题的能力,包括调查研究、检索资料、文献综述、设计与计算、制订方案、测试设备、模拟设备、模拟处理、数据处理、撰写论文、分析与评价、口头表达、独立工作等能力。 (3)培养学生理论联系实际、实事求是、严谨求实的科学态度和工作作风以及团队精神,提高创新能力。 2、选题原则 (1)毕业设计命题必须符合人才培养目标。在满足教学要求的前提下,所选与生产、科研、实验室建设等紧密结合的实际题目一般应占设计(论文)题目总数的80%以上。 (2)有一定的综合性,知识覆盖面较宽,能使学生受到比较全面的训练。 (3)有一定的工作量,深度、难度适中,使中等程度的学生通过努力能在规定时间内完成。对部分有余力的优秀学生,可根据因材施教原则适当增加内容和提高要求。 (4)原则上每人一题。如数名学生同做一个课题,则应保证每个学生有不同的专题或不同原始数据。严禁照搬照抄以往毕业设计内容。 (5)在选题方式上,为充分调动师生两个方面的积极性,可采用自选和分配相结合的方式,同时报教务处备案。题目确定后以任务书的形式通知学生,以便学生有所准备。 (6)题目一经选定,不得中途随意更换。如确因不可预知的因素需要更换题目时,必须在毕业实习结束前向学院提出申请,经批准后方可改题。 3、开题报告 毕业设计(论文)开题报告是规范管理,培养学生严谨、务实的科研作风的有效途径,是学生从事毕业设计(论文)工作的依据。由学生在选定毕业设计(论文)题目后,与导师协商,讨论题意与整个毕业设计(论文)的工作计划,然后根据课题要求查阅、收集有关资料并编写研究提纲,于进行毕业设计(论文)之前填写,进行开题报告工作,经导师及所在系负责人审定后开始执行。 开题报告中各项内容的撰写应贴合课题,联系实际,实事求是。能反映出缜密全面考虑问题,综合运用所学知识解决处理问题的能力。能达到培养学生勇于探索,严谨推理,认真负责,独立工作的目的。切忌简单敷衍,空话套话。 开题报告排版打印应按照学校下发的《开题报告》表的要求进行,指导教师意见以手写为好。 开题报告毕业设计(论文)答辩委员会对学生答辩资格审查的依据材料之一,开题报告作为毕业设计(论文)的一部分,与毕业设计(论文)一同存档。 4、指导教师 (1)为确保毕业设计质量,各单位要选派讲师以上职称教师担任指导工作,助教或在读研究生可协助指导。 (1)为确保毕业设计质量,指导教师应具有讲师以上职称或硕士以上学历,各学院指

飞机大战实训报告

目录 1. 概述.................................................. 1. 概述 这次实训,目的以VS 为环境,利用MFC,使用C++语言编写一个简单的飞机大战游戏。

实现的主要功能: 1.有开始游戏界面,上下左右键控制飞机自由移动,空格键发射炮弹。 2.设有关卡,每打完一个boss就会过关,每过一关战机炮弹会升级,敌机随机发射子 弹数量增加。 3.战机起始十条命,可以通过过关和吃到道具增加血量。 4.战机子弹打中敌机,敌机就会爆炸,boss血量随关卡升高而增多,打败敌机或者boss 会有分数加成。 5.设有无敌模式和普通模式,无敌模式大招无限,生命无限,战机导弹直接升至最高 等级。 2. 相关技术 碰撞检测 用CRect类的GetRect()函数可以获得当前对象的矩形区域, IntersectRect()并用此函数判断二者是否碰撞。 CObList链表 这个程序使用CObList链表来存储各效果。CobList类似于一个双向链表,POSITION 类型的变量为链表的键。使用POSITION变量,既可以作为链表循环中的循环变量,也可以作为标记某个位置的标签。我们可以通过获得某元素的POSITION来访问它。 本程序中主要用到的函数有:

GetHeadPosition():获取链表首元素的POSITION; AddTail():将新的元素添加到链表最后; GetNext( POSITION& rPosition ):使rPosition指向下一个元素。 设置定时器 SetTimer()函数来设置定时器。 背景滚动 为了让游戏场景更加逼真,游戏节奏更加合理,可以通过让背景滚动来提高游戏的场景效应,实现这一技术时,可以将一张背景图片复制为2张,从上到下连续的拼接在一起,使其不会出现图片的卡顿和瞬移现象。 内存释放技术 这个程序中有大量的地方需要使用内存,如果不及时删除会出现闪图等情况,容易导致程序崩溃,要及时释放内存资源。 3. 总体设计与详细设计 系统模块划分

相关主题
文本预览
相关文档 最新文档