Разработка игры "Гонка на время с препятствиями"
Разработка объектно-ориентированной программы на языке С++, которая реализирует инкапсуляцию, наследование и полиморфизм. Выделение компонентов - абстрактных единиц, выполняющих определенный набор действий. Реализация основного алгоритма функционирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 24.11.2010 |
Размер файла | 273,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
int tickCount= (MAX_SPEED_TIME * MAX_SPEED)/( (player->getUserCar())->getSpeed() *TICK_PERIOD );
//int tickCount = MAX_SPEED - (player->getUserCar())->getSpeed() + 1 ;
//aaee?eia tickCount- a ia?aoiie caa-oe io nei?inoe iaoeiu
//?ai iaiuoa cia?aiea tickCount,oai ?aua ...
if( (currentTick % tickCount ) == 0 )
{
currentTick = 1;
//...aucuaaai iaoia, eieoe?o?uee aae?aiea iaoeiu
road->listDown();
(player->getUserCar())->changeFuelLev(-1);
}
else
currentTick++;
}
//i?iaa?yai,ia oeieoe?iaaea ee iaoeia?
finished= road->isFinished();
//i?iaa?yai,ia iia?a?aaia ee iaoeia?
carBroken= (player->getUserCar())->isDestroyed();
//i?iaa?yai,ia eii?eeinu ee o iaoeiu oiieeai?
carEmpty= (player->getUserCar())->isEmpty();
//i?iaa?yai, ia eii?eeinu ee ioaaaaiiia iieuciaaoae? a?aiy?
timeElapsed = road->isRaceTimeElapsed( player->getTimeInGame() );
}
/*-------------------------------------------------------------
- Eeann CRace. Iaoia onKeyDown
- ooieoey,iienuaaao ?aaeoe? ea?u ia ia?aoey ii?aaaeaiiuo
- eeaaeo ia eeaaeaoo?a
-------------------------------------------------------------*/
void CRace::onKeyDown(UINT keyCode)
{
switch(keyCode)
{
case VK_UP:
if (!paused)
(player->getUserCar())->changeSpeed(+1);
break;
case VK_LEFT:
if (!paused)
(player->getUserCar())->move(-GRIDX,0,1);
break;
case VK_RIGHT:
if (!paused)
(player->getUserCar())->move(+GRIDX,0,1);
break;
case VK_DOWN:
if (!paused)
(player->getUserCar())->changeSpeed(-1);
break;
case 80: // ia?aoa eeaaeoa "P" - i?einoaiiaeou aiieo
paused = !paused;
break;
case 69: // ia?aoa eeaaeoa "E" - ioiaieou aiieo
canceled = !canceled;
break;
}
}
/*-------------------------------------------------------------
- Eeann CRace. Iaoia showElements
-------------------------------------------------------------*/
void CRace::showElements(CDC* pDC)
{
road->showRoad(pDC); //ioia?a?aai ai?iao n ai?. iauaeoaie
(player->getUserCar())->show(pDC); //ioia?a?aai aiii?io? iaoeio
}
/*------------------------------------------------------------
- Eeann CRace.
- aano?oeoi?, inaiai?aaao iaiyou, auaaeaiio? aeiaie?anee
- i?e ?ecie iauaeoa
-------------------------------------------------------------*/
CRace::~CRace()
{
delete road;
}
/***************************************************
*
* Oaee: frace_defs.h
* Iienaiea:
* niaa??eo iienaiea eniieucoaiuo iae?inia
*
******************************************************/
#ifndef _FRACE_DEFS_H_
#define _FRACE_DEFS_H_
#define MAX_SPEED_TIME 110 // a?aiy a ieeeenaeoiaao, niioaaonoao?uaa iaeneiaeuiie nei?inoe
#define TICK_PERIOD 55// ia?eia oaeia?a
#define MAX_ROAD_OBJECTS 200 // iaeneiaeuiia ?enei ai?i?iuo iauaeoia
#define GRIDX 20
#define GRIDY 20
#define MAX_SPEED 15
#define MAX_FUEL_LEV 100
#define MAX_DAMAGE_LEVEL 20
#endif _FRACE_DEFS_H_
/////////////////////////////////////////////////////////////////////////////
// fraceView.h : interface of the CFraceView class
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(AFX_FRACEVIEW_H__642C03C7_B90A_4844_BE71_772641CA58DF__INCLUDED_)
#define AFX_FRACEVIEW_H__642C03C7_B90A_4844_BE71_772641CA58DF__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// my header files include
#include "roadObj.h"
#include "road.h"
#include "user.h"
#include "race.h"
#include "RegisterDlg.h"
class CFraceView : public CView
{
protected: // create from serialization only
CFraceView();
DECLARE_DYNCREATE(CFraceView)
// Attributes
public:
CFraceDoc* GetDocument();
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFraceView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
//}}AFX_VIRTUAL
// ----------- IAOE IAUAEOU ----------------------
PCUser user; // Iieuciaaoaeu
CRace race; // Ea?a
CRegisterDlg regDlg; // Диалоговое окно регистрации
// Implementation
public:
virtual ~CFraceView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// Generated message map functions
protected:
//{{AFX_MSG(CFraceView)
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnStart();
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#ifndef _DEBUG // debug version in fraceView.cpp
inline CFraceDoc* CFraceView::GetDocument()
{ return (CFraceDoc*)m_pDocument; }
#endif
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_FRACEVIEW_H__642C03C7_B90A_4844_BE71_772641CA58DF__INCLUDED_)
/////////////////////////////////////////////////////////////////////////////
// fraceView.cpp : implementation of the CFraceView class
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "frace.h"
#include "fraceDoc.h"
#include "fraceView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int gameTimerID;
/////////////////////////////////////////////////////////////////////////////
// CFraceView
IMPLEMENT_DYNCREATE(CFraceView, CView)
BEGIN_MESSAGE_MAP(CFraceView, CView)
//{{AFX_MSG_MAP(CFraceView)
ON_WM_TIMER()
ON_COMMAND(ID_START, OnStart)
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CFraceView construction/destruction
CFraceView::CFraceView()
{
// TODO: add construction code here
}
CFraceView::~CFraceView()
{
delete user; // удаление объекта Пользователь, созданного динамически
}
BOOL CFraceView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CFraceView drawing
void CFraceView::OnDraw(CDC* pDC)
{
CFraceDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (race.isStarted())
{
race.showElements(pDC);
// вывод имени игрока
TextOut(*pDC,300,20,"Имя игрока:",11);
TextOut(*pDC,415,20,user->getName(),(user->getName()).GetLength());
// вывод времени игрока
TextOut(*pDC,300,40,"Время в гонке:",14);
TextOut(*pDC,415,40,user->getTimeStr(),(user->getTimeStr()).GetLength());
// вывод макисмально допустимого времени трассы
TextOut(*pDC,300,60,"Предел времени:",15);
TextOut(*pDC,415,60,race.getMaxRaceTimeStr(),(race.getMaxRaceTimeStr()).GetLength());
// вывод текущих параметров машины игрока
TextOut(*pDC,300,80,"Скорость:",9);
TextOut(*pDC,415,80,(user->getUserCar())->getSpeedStr(),((user->getUserCar())->getSpeedStr()).GetLength());
TextOut(*pDC,300,100,"Повреждения:",12);
TextOut(*pDC,415,100,(user->getUserCar())->getDamageStr(),((user->getUserCar())->getDamageStr()).GetLength());
TextOut(*pDC,300,120,"Топливо:",8);
TextOut(*pDC,415,120,(user->getUserCar())->getFuelStr(),((user->getUserCar())->getFuelStr()).GetLength());
}
}
/////////////////////////////////////////////////////////////////////////////
// CFraceView diagnostics
#ifdef _DEBUG
void CFraceView::AssertValid() const
{
CView::AssertValid();
}
void CFraceView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CFraceDoc* CFraceView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CFraceDoc)));
return (CFraceDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CFraceView message handlers
void CFraceView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
// проверка не завершилась ли по каким-либо причинам Гонка ?
if ( (!race.isFinished()) && (!race.isCanceled()) &&
(!race.isTimeElapsed()) && (!race.isCarBroken()) && (!race.isCarEmpty()) )
{
if ( !race.isPaused() ) // если гонка не приостановлена
{
race.onSysTick(); // переодические действия Управляющего объекта
user->onSysTick(TICK_PERIOD); // переодические действия Пользователя
}
}
else // Гонка закончена! Надо проинформировать пользователя о характере его результатов!
{
KillTimer(gameTimerID); // останавливаем таймер - больше никаких движений. Пользователю остается
// лишь закрыть окно приложения
if(race.isFinished())
MessageBox("Примите поздравления! Вы удачно финишировали");
if(race.isCanceled())
MessageBox("Гонка отменена! Вы боитесь скорости?");
if(race.isTimeElapsed())
MessageBox("Время вышло! Вы слишком медленны");
if(race.isCarBroken())
MessageBox("Машина сломалась! будьте осторожнее в следующий раз!");
if(race.isCarEmpty())
MessageBox("У машины закончилось топливо! Следите за его уровнем в следующий раз!");
}
CView::OnTimer(nIDEvent); // вызов стандартного обработчика
CFraceView::Invalidate(); // перерисовываем окно
}
void CFraceView::OnStart()
{
// TODO: Add your command handler code here
if((!race.isStarted())) // если игра уже не стартовала
{
// показываем диалог регистрации игрока
int nRet = regDlg.DoModal();
if ( nRet == IDOK)
{
if( regDlg.m_McLaren == 0)
user = new CUser(regDlg.m_UserName,0);
if( regDlg.m_Williams == 0)
user = new CUser(regDlg.m_UserName,1);
if( regDlg.m_Ferrari == 0)
user = new CUser(regDlg.m_UserName,2);
race.registerPlayer(user); // регистрируем игрока в Управляющем объекте
race.start(); // запускаем игру
SetTimer(gameTimerID,TICK_PERIOD,NULL); // запускаем таймер
}
else
{
MessageBox(" Перед тем, как начать игру, вы ДОЛЖНЫ зарегестрироваться");
}
}
}
void CFraceView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
race.onKeyDown(nChar); // вызываем обработку нажатия клавиш объектом ИГРА
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
Размещено на Allbest.ru
Подобные документы
Введение в объектно-ориентированное программирование. Постановка задачи. Описание алгоритма решения в псевдокоде (команды в виде текста на русском языке). Исходный текст программы на С. Тестирование программы. Модификация программы. Полиморфизм.
курсовая работа [294,0 K], добавлен 08.09.2008Разработка объектно-ориентированной модели информационной подсистемы учета студентов университета во время экзаменационной сессии с помощью программы Rational Rose 2000, с использованием языка UML. Порядок генерации программного кода на языке С++.
курсовая работа [689,9 K], добавлен 21.06.2011Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.
курсовая работа [821,5 K], добавлен 13.02.2012Разработка объектно-ориентированной модели животного, которая объясняется построением модели игры Terrarium. Модель построена на базе концепций объектно-ориентированного программирования. Разработка компонента, моделирующего поведение животного.
курсовая работа [23,2 K], добавлен 30.11.2008Разработка и реализация компьютерной игры "Змейка" с помощью языка программирования Pascal и модуля CRT. Составление общего алгоритма программы, выделение ее функциональных частей. Разработка тестовых примеров. Использование типизированных файлов.
курсовая работа [2,1 M], добавлен 23.02.2011Что такое класс в объектно-ориентированном программировании. Какую структуру имеет модуль в С++. Какими средствами осуществляется консольный ввод данных в языке Си, С++. Инкапсуляция, полиморфизм, наследование. Использование библиотеки "
".
контрольная работа [1,9 M], добавлен 13.11.2016Разработка объектно-ориентированной подсистемы складского учета для фирмы "КавказЮгАвто". Краткая характеристика предметной области. Построение диаграмм размещения, прецедентов, последовательности, компонентов и классов. Генерация программного кода C++.
курсовая работа [6,6 M], добавлен 26.06.2011Принципы и алгоритмы обработки прерываний. Набор действий по реализации этапов обработки прерываний микропроцессора. Разработка структуры и алгоритма резидентной программы. Реализация программы на языке Ассемблер, методы её отладки и тестирования.
курсовая работа [348,7 K], добавлен 22.12.2014Изучение принципов объектно-ориентированного программирования. Понятие класса в Delphi, в основе которых лежат три фундаментальные принципы - инкапсуляция, наследование и полиморфизм. Разработка классов транспортных средств и структур классов (кошки).
курсовая работа [29,7 K], добавлен 29.10.2011Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.
курсовая работа [1,0 M], добавлен 26.12.2013