Разработка игры "Гонка на время с препятствиями"

Разработка объектно-ориентированной программы на языке С++, которая реализирует инкапсуляцию, наследование и полиморфизм. Выделение компонентов - абстрактных единиц, выполняющих определенный набор действий. Реализация основного алгоритма функционирования.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.