Помощь - Поиск - Пользователи - Календарь
Полная версия: Игрушка ПАРАВОЗ
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
dron4ik
Всем привет! Возникла проблемка с компиляцией.. открываю файл main.cpp. Открывается си++(игруха на нем и написана) и не активна кнопка RUN ... нажать на нее не реально... как ее сделать активной???
Программа состоит из main.cpp...main.h...menu1.h....menu1.rc.(как их привязать между собой? а может они и привязаны... я незнаю). Относится ли эта игруха к ООП?

Листинг файла main.cpp

/* в этом файле находятся описания всех функций */

#include <afxwin.h>
#include "main.h"
#include "menu1.h"

CMainWnd::CMainWnd() /*конструктор гл. окна*/
{
wnd.SetRect(0,0,400,355);//устан-ка размеров окна
Create(NULL,"parovoz",WS_DLGFRAME ,wnd,NULL,"MAINMENU");
game=false; /*нет игры*/
color=0; /*нач. цвет поезда*/
ns=0; /*нач. цвет светофора*/
br1[0].CreateSolidBrush(RGB(255,0,0));//создание кистей
br1[1].CreateSolidBrush(RGB(0,255,0));
br1[2].CreateSolidBrush(RGB(0,0,255));

sv[0].CreateSolidBrush(RGB(255,0,0));//создание кистей
sv[1].CreateSolidBrush(RGB(0,255,0));//светофора
sv[2].CreateSolidBrush(RGB(255,255,0));
sv[3].CreateSolidBrush(RGB(128,128,128));

br2.CreateSolidBrush(RGB(1,1,1));/*чёрный цвет*/

for(numball=0;numball<5;numball++)
{//обнуление признаков жизни дыма
live[numball]=0;
}

}

BOOL CApp:: InitInstance()/*ф-ия инициализации окна*/
{
m_pMainWnd=new CMainWnd; /*созд объекта окна*/
m_pMainWnd->ShowWindow(m_nCmdShow); /*показать окно*/
return true; /*удачное завершение*/
}

afx_msg void CMainWnd::OnPaint() /*ф-ия перерисовки*/
{
CPaintDC dc(this); /*созданиее контекста окна*/
dc.SelectObject(&br2); /*выбор кисти для светофора*/
dc.Rectangle(svet); //рисование корп. светофора
dc.Rectangle(noga); //рисование ноги
for(numball=0;numball<5;numball++)
{//рисование дыма
if(live[numball]==1)//если дым активен
{
dc.Ellipse(balls[numball]);
}
}
switch(ns) /*переключение между цветами светофора*/
{
case 0: /*если красный*/
{
dc.SelectObject(sv[0]);
dc.Ellipse(ball1);
dc.SelectObject(sv[3]);
dc.Ellipse(ball2);
dc.Ellipse(ball3);
break;
}
case 1: /*если жёлтый*/
{
dc.SelectObject(sv[2]);
dc.Ellipse(ball2);
dc.SelectObject(sv[3]);
dc.Ellipse(ball1);
dc.Ellipse(ball3);
break;
}
case 2:/*еесли зеленый*/
{
dc.SelectObject(sv[1]);
dc.Ellipse(ball3);
dc.SelectObject(sv[3]);
dc.Ellipse(ball1);
dc.Ellipse(ball2);
break;
}
}
dc.SelectObject(br1[color]); /*рисование паровоза*/
dc.Rectangle(korp); //корпус
dc.SelectObject(&br2);
dc.Rectangle(kr); //труба
dc.Rectangle(kr2); //кабина
dc.Ellipse(kol1); //колеса
dc.Ellipse(kol2);
char *s="выберете меню старт.";//начальная надпись
if(game==0) dc.TextOut(50,100,s,strlen(s));
}

void CMainWnd::OnExit() /*реакция на выход*/
{
SendMessage(WM_CLOSE); /*послать сообщение о закрытии окна*/
}

afx_msg void CMainWnd::OnTimer( UINT nIDEvent )
{/*обработчик таймера*/
if(game) /*если находимся в игре*/
{
if(nIDEvent==2)//запуск дыма
{
for(numball=0;numball<5;numball++)
{//если дым не активен, активизировать
if(live[numball]==0)
{
live[numball]=1;
balls[numball].SetRect(korp.left+35,kr.top-10,kr.right-5,korp.top);
break;
}
}
}
for(numball=0;numball<5;numball++)
{//сохранить предыдущ. положение дыма
temp.CopyRect(balls[numball]);
if(live[numball]==1)//если дым активен
{
balls[numball].OffsetRect(1,-6);//сместить дым
balls[numball].top--; //изменить размеры
balls[numball].right++;
InvalidateRect(temp); //перерисовать
InvalidateRect(balls[numball]);
if(balls[numball].top<=0) live[numball]=0;//убить
}
}
if( (korp.right<=svet.left)||(korp.left>=svet.left+3)||(move==1))
{ /*если не около светофора или зеленый цвет*/

if(korp.left<400)/*если не стена*/
{
temp.CopyRect(korp); /*сохранить предыдущие координаты*/
//сместить всю машину
korp.OffsetRect(3,0);
InvalidateRect(temp);
InvalidateRect(korp);
temp.CopyRect(kol1);
kol1.OffsetRect(3,0);
InvalidateRect(temp);
InvalidateRect(kol1);

temp.CopyRect(kol2);
kol2.OffsetRect(3,0);
InvalidateRect(temp);
InvalidateRect(kol2);

temp.CopyRect(kr);
kr.OffsetRect(3,0);
InvalidateRect(temp);
InvalidateRect(kr);
temp.CopyRect(kr2);
if(kr2.top==270)
{
kr2.top=275;
}
else kr2.top=270;
kr2.OffsetRect(3,0);
InvalidateRect(temp);
InvalidateRect(kr2);
}
else/*возврат в левую стенку*/
{
korp.SetRect(0,288,50,300);
kr.SetRect(30,280,40,288);
kr2.SetRect(10,270,25,288);
kol1.SetRect(5,295,15,305);
kol2.SetRect(35,295,45,305);
ns=1;
move=0;
InvalidateRect(ball1);
InvalidateRect(ball2);
InvalidateRect(ball3);
}
}

}

}

afx_msg void CMainWnd::OnRed()
{/*реакция на выбор красного цвета*/
color=0;
}
afx_msg void CMainWnd::OnGreen()
{/*выбор зеленого цвета*/
color=1;
}
afx_msg void CMainWnd::OnBlue()
{
color=2;
}


afx_msg void CMainWnd::OnBegin()
{
game=true;
color=0;
move=0;
svet.SetRect(200,100,240,230);
noga.SetRect(210,230,230,250);
ball1.SetRect(210,110,230,140);
ball2.SetRect(210,150,230,180);
ball3.SetRect(210,190,230,220);
korp.SetRect(0,288,50,300);
kr.SetRect(30,280,40,288);
kr2.SetRect(10,270,25,288);
kol1.SetRect(5,295,15,305);
kol2.SetRect(35,295,45,305);
SetTimer(1,100,NULL);
SetTimer(2,1000,NULL);
InvalidateRect(NULL);
}



BEGIN_MESSAGE_MAP(CMainWnd,CFrameWnd)
ON_COMMAND(IDM_EXIT,OnExit)
ON_COMMAND(IDM_BEGIN,OnBegin)
ON_COMMAND(IDM_RED,OnRed)
ON_COMMAND(IDM_GREEN,OnGreen)
ON_COMMAND(IDM_BLUE,OnBlue)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_CHAR()
END_MESSAGE_MAP()

afx_msg void CMainWnd::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )
{
if(game)
{
switch(nChar)
{
case 234:
{
ns=0;
break;
}
case 231:
{ns=2;
move=1;
break;
}
case 230:
{ns=1;
}
}
InvalidateRect(ball1);
InvalidateRect(ball2);
InvalidateRect(ball3);

}
}

CApp app;




Листинг файла main.h

class CMainWnd: public CFrameWnd	/*класс окна*/
{
public:
CRect wnd; /*размер окна*/
CRect kol1,kol2,korp,kr,temp; /*прямоугольники*/
CRect svet,ball1,ball2,ball3;/*прямоугольники*/
CBrush br1[3],br2; /*кисти*/
CBrush sv[4]; /*цвета светофора*/
CRect noga; /*нога светофора*/
CRect balls[5]; /*шарики дыма*/
CRect kr2; //кабина
int numball; //номер дыма
int live[5]; //признак жизни дыма
bool game; /*признак игры или вне игры*/
int color; /*номер цвета паровоза*/
int ns; /*номер увета светофора*/
int move; /*флаг движения паровоза*/
CMainWnd(); /*конструктор главного. окна*/
afx_msg void OnRed(); /*пунуты меню цвета*/
afx_msg void OnGreen();
afx_msg void OnBlue();
afx_msg void OnPaint(); /*ф-ия перерисовки*/
afx_msg void OnTimer( UINT nIDEvent ); /*обраб-чик таймера*/
afx_msg void OnExit();//выход
afx_msg void OnBegin();//перестартовать
afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );
DECLARE_MESSAGE_MAP()//карта сообщений
};

class CApp: public CWinApp
{
public:
BOOL InitInstance();
};



Листинг файла menu1.h

#define 	IDM_BEGIN	100
#define IDM_RED 101
#define IDM_GREEN 102
#define IDM_BLUE 103
#define IDM_EXIT 104




Листинг файла menu1.rc

#include <afxres.h>
#include "menu1.h"

MAINMENU MENU DISCARDABLE
BEGIN
POPUP "GAME"
BEGIN
POPUP "COLOR"
BEGIN
MENUITEM "RED", IDM_RED
MENUITEM "GREEN", IDM_GREEN
MENUITEM "BLUE", IDM_BLUE
END
MENUITEM SEPARATOR
MENUITEM "START", IDM_BEGIN
MENUITEM "EXIT", IDM_EXIT
END
END


Добавлено через 8 мин.
вот исходники посмотри пожалуйста что не так?
volvo
Ну, во-первых, вопрос: чем ты открываешь это все? Компилятор какой? Это будет работать только после компиляции в Visual C++.

Цитата
Относится ли эта игруха к ООП?
Естественно, это ж MFC...

Цитата
как их привязать между собой? а может они и привязаны... я незнаю
Ну, вот и посмотри, если все правильно связано, слева должно быть окно "Solution Explorer", в котором должны быть перечислены все файлы, входящие в проект, и HeaderFiles (H-файлы), и SourcesFiles (CPP-файлы), и ResourceFiles (где должен быть твой RC-файл). Тогда можно скомпилировать проект: Build -> Build Solution, и только после этого можно будет запустить проект.
dron4ik
ОК) щас попробую)

Добавлено через 5 мин.
Цитата
Ну, вот и посмотри, если все правильно связано, слева должно быть окно "Solution Explorer", в котором должны быть перечислены все файлы, входящие в проект, и HeaderFiles (H-файлы), и SourcesFiles (CPP-файлы), и ResourceFiles (где должен быть твой RC-файл). Тогда можно скомпилировать проект: Build -> Build Solution, и только после этого можно будет запустить проект.



Странно.. нет там такого..а как их связать у меня есть каждый отдельный файл..
dron4ik
открываю я это все Borlan C++ Builder 6.
volvo
Цитата
открываю я это все Borlan C++ Builder 6.
Я тебе что первым постом написал? Это MFC-шное приложение (Microsoft Foundation Classes), для того, чтоб его откомпилировать надо Visual C++. С Билдером тебе здесь делать нечего.

У тебя только CPP/H/RC файлы? Файла SLN нет?
dron4ik
файла SLN нету.
dron4ik
Скачал я VIsual c++ 6.0 а дальше какой файл открывать main.срр ??
volvo
У тебя нет того файла который надо открывать (sln)... Какую версию скачал? Полную или бесплатную (Express Edition) с сайта MS? Если качал бесплатную - закачивай назад, она тебе не поможет, в ней нет поддержки MFC, нужна только полная версия.

Если же у тебя полная версия - то придется создавать новый проект самостоятельно, добавлять к нему все файлы, которые у тебя есть, и кроме всего прочего еще и добавлять компоненты на форму и связывать их между собой...

Ты игрушку эту где взял вообще?
dron4ik
<...> отсюда скачал visual c++.

А игру паровоз скачал с какого то сайта...

а долго это все связывать?
volvo
Я не спрашивал, откуда ты качал ломаную версию. Ссылка удалена. Еще раз повторится - пеняй на себя...

Цитата
а долго это все связывать?
Если умеешь - нет... Но если умеешь - то вся эта "игра" пишется с нуля за 10 минут максимум, ничего там сложного нет.
dron4ik
Подскажите пожалуйста как создавать новый проект самостоятельно, добавлять к нему все файлы, которые у меня есть, и кроме всего прочего еще и добавлять компоненты на форму и связывать их между собой)
dron4ik
Подскажите кто нибудь плизз......
dron4ik
вообщем проект решил сам создать... при нажатии на кнопку Build выходит такая ошибка


msvcrtd.lib(crtexe.obj) : error LNK2001: unresolved external symbol _main----че это????


вот скрин...
dron4ik
Хех... разобрался все сделал.. работает!!!!. А как мне теперь его сделать exe файлом весь этот проект?
dron4ik
Кстати а кто знает как на эту прогу построить схему взаимодействия двух разных объектов СВЕТОФОР И ПАРОВОЗ?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.