Форум программистов, компьютерный форум CyberForum.ru

Зависание и/или остановка работы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Почему записываются цифры? http://www.cyberforum.ru/cpp-beginners/thread1006029.html
Почему вместо букв в name записываются цифры? char name; sprintf(name,"%d",Edit2->Text);
C++ Определить наибольшее число среди нечетных элементов последовательности Вводится последовательность целых чисел, 0 – конец последовательности. Определить наибольшее число среди нечетных элементов последовательности. http://www.cyberforum.ru/cpp-beginners/thread1006028.html
Найти количество наборов не являющихся знакочередующимися C++
Дано K наборов ненулевых целых чисел. Признаком завершения каждого набора является число 0. Найти количество наборов не являющихся знакочередующимися.
C++ инкапсуляция массива объектов
Здравствуйте Задание:Написать программу которая содержит класс и инкапсулирует в себе массив объектов..., остальные задания не важны вопрос в том - как инкапсулировать массив объектов, помогите пожалуйста, желательно на примере, ну или хотя бы на пальцах:)
C++ ГСЧ http://www.cyberforum.ru/cpp-beginners/thread1006021.html
А подскажите пожалуйста, как сгенерировать числа от 10 до 1000000 ? и какой тип переменной использовать, long long?
C++ Графика и программирование Недавно дочитал книгу "Философия С++" и половину Страуструпа. И понял, что желаю заниматься графикой и играми в частности. Нашел учебники по OpenGL. Но вопрос такой, что не могу понять вообще как идет взаимодействие с графическими объектами, игровая логика и пр. подробнее

Показать сообщение отдельно
SwanSONG
2 / 2 / 0
Регистрация: 30.01.2013
Сообщений: 36
13.11.2013, 21:02  [ТС]     Зависание и/или остановка работы
Стартер StarSki:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "afxwin.h"
#include "CMainWnd.h"
 
class CMyApp:public CWinApp
{
public:
    CMyApp();
    virtual BOOL InitInstance();
};
 
CMyApp::CMyApp()
{}
 
BOOL CMyApp::InitInstance()
{
    m_pMainWnd=new CMainWnd();
    ASSERT(m_pMainWnd);
    m_pMainWnd->ShowWindow(SW_SHOW);
    m_pMainWnd->UpdateWindow();
    return TRUE;
};
 
CMyApp theApp;

CMainWnd.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#include "afxwin.h"
 
class CMainWnd:public CFrameWnd
{
public:
    CMainWnd();
    afx_msg void OnPaint();
    BOOL CMainWnd::OnEraseBkgnd(CDC *pDC);
 
    void RandomColor(int &tColor1,int &tColor2,int &tColor3);
    void StatOut(int f,CDC *xdc);
    void XSelectColor(int tF,COLORREF *tColo1,COLORREF *tColor2);
 
    //Геометрия
    int gWidth,gDrawHeight;
 
private:
    DECLARE_MESSAGE_MAP();
};

CMainWnd.cpp:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
#include "afxwin.h"
#include "time.h"
#include "math.h"
#include "CMainWnd.h"
#include "CMyPaintDC.h"
#include "XConst.h"
 
#include "CMyList.h"
#include "CMyPoint.h"
#include "CMyFly.h"
#include "CMyPulsar.h"
#include "CMyStar.h"
#include "CMyAim.h"
#include "CMyPlanet.h"
 
CMainWnd::CMainWnd()
{
    Create(NULL,_T("StarSKI"),NULL,rectDefault,NULL,NULL);
    CMainWnd::SetWindowPos(&wndTop,WinPosX,WinPosY,WinSizeX,WinSizeY,SWP_SHOWWINDOW);
}
 
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
    ON_WM_PAINT()
    ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
 
BOOL CMainWnd::OnEraseBkgnd(CDC *pDC)
{
    CBrush backBrush(RGB(6,38,77));
    CBrush *pOldBrush = pDC->SelectObject(&backBrush);
    CRect rect;
    pDC->GetClipBox(&rect);
    pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PATCOPY);
    pDC->SelectObject(pOldBrush);
    return TRUE;
}
 
void CMainWnd::OnPaint()
{
    int i,f=-1;
    int t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14;
    CString t15;
 
    int fPoint=0,fFly=1,fPlanet=0,fStar=1,fPulsar=1,fAim=0;
    CString tString;
    CString tName[7]={"Aim","Mercury","Venus","Earth","Mars","Jupiter","Saturn"};
 
    CMyPaintDC dc(this);
 
    //Получение реальных размеров
    RECT ZX1,ZX2;
    GetWindowRect(&ZX1); //Размеры всего окна
    GetClientRect(&ZX2); //Размеры рабочей области
        
    gDrawHeight=ZX2.bottom-gStatHeight-gBorder;
    gWidth=ZX2.right;
 
    CMyList *pList;
    pList=new CMyList();
 
    srand(time(NULL));
 
    //[0]Обычные звезды (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iR(8),int iG(9),int iB(10))
    if(fPoint==0)
    {
        t0=0;t1=0;
        for(i=0;i<zStar;i++)
        {
            t2=7;//t2=rand()%5;
            t3=gWidth;
            t4=gDrawHeight;
            t5=rand()%200;
            t6=rand()%gWidth;
            t7=rand()%gDrawHeight;
            RandomColor(t8,t9,t10);
 
            pList->AddList(new CMyPoint(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10));
        }
    }
 
    //[1]Разлетающиеся звезды (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iR(8),int iG(9),int iB(10))
    if(fFly==0)
    {
        t0=1;t2=7;
        for(i=0;i<zFlyStar;i++)
        {
            t3=gWidth;
            t4=gDrawHeight;
            t5=rand()%350;
            t6=rand()%200+gWidth/2-100;
            t7=rand()%200+gDrawHeight/2-100;
            RandomColor(t8,t9,t10);
            if((t6>=gWidth/2)&&(t7<gDrawHeight/2))
                t1=1;
            if((t6>=gWidth/2)&&(t7>=gDrawHeight/2))
                t1=2;
            if((t6<gWidth/2)&&(t7>=gDrawHeight/2))
                t1=3;
            if((t6<gWidth/2)&&(t7<gDrawHeight/2))
                t1=4;
 
            pList->AddList(new CMyFly(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10));
        }
    }
 
    //[2]Планеты (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iRadius1(8),int iRadius2(9),int iF(10),int iA(11),int iR(12),int iG(13), int iB(14),CString iName(15)):
    if(fPlanet==0)
    {
        f=1;
        t0=2;
        t1=0;
        t2=0;
        t3=gWidth;
        t4=gDrawHeight;
        t5=0;
        t6=gWidth/2;
        t7=gDrawHeight/2;
        t9=zPlanetRadius;
        for(i=0;i<zPlanet;i++)
        {
            t8=60+60*i;
            t10=f;f*=-1;
            t11=110+60*i;
            RandomColor(t12,t13,t14);
            t15=tName[i+1];
            pList->AddList(new CMyPlanet(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15));
        }
    }
    
    //[3]Большие звезды (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iF(8),int iA(9),int iRadius(10),int iR(11),int iG(12), int iB(13))
    if(fStar==0)
        for(i=0;i<zBigStar;i++)
        {
            t0=3;
            t1=0;
            t2=7;
            t3=gWidth-30;
            t4=gDrawHeight-30;
            t5=rand()%200;
            t6=rand()%(gWidth-30);
            t7=rand()%(gDrawHeight-30);
            t8=rand()%3-1;
            t9=rand()%360;
            t10=rand()%15+1;
            RandomColor(t11,t12,t13);
 
            pList->AddList(new CMyStar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        }
    
    //[4]Пульсары (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int iLimit(5),int ix(6),int iy(7),int iA(8),int iF(9),int iNum(10),int iR(11),int iG(12), int iB(13))
    if(fPulsar==0)
    {
        t0=4;
        t1=0;
        t2=7;
        t3=gWidth;
        t4=gDrawHeight;
        t5=0;
        t8=0;
        
        t6=gWidth/2;t7=gDrawHeight/2;t8=0;t9=0;t10=10;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=gWidth/2;t7=gDrawHeight/2;t8=0;t9=0;t10=14;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
 
        t6=zPulsarDist;t7=zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=zPulsarDist;t7=zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
 
        t6=gWidth-zPulsarDist;t7=zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=gWidth-zPulsarDist;t7=zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
 
        t6=zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
                        
        t6=gWidth-zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
        t6=gWidth-zPulsarDist;t7=gDrawHeight-zPulsarDist;t8=0;t9=-1;t10=rand()%10+7;RandomColor(t11,t12,t13);
        pList->AddList(new CMyPulsar(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13));
    }
 
    //[5]Прицел (int iType(0),int iPos(1),int iColor(2),int iMaxX(3),int iMaxY(4),int ilimit(5),int ix(6),int iy(7),int iAngel(8),int iRadius(9),int iR(10),int iG(11),int iB(12))
    if(fAim==0)
    {
        t0=5;
        t1=rand()%3+1;
        t2=0;
        t3=gWidth;
        t4=gDrawHeight;
        t5=0;
        t6=gWidth/2;
        t7=gDrawHeight/2;
        t8=0;
        t9=70;
        t10=70;
        t11=70;
        t12=70;
        
        pList->AddList(new CMyAim(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12));
    }
    
    pList->SearchTarget();
 
    StatOut(0,&dc);
    i=0;
    while(i<5000)
    {
        pList->MoveAll(&dc);
        StatOut(1,&dc);
        i++;
    }
}
void CMainWnd::RandomColor(int &tColor1,int &tColor2,int &tColor3)
{
    tColor1=rand()%255;
    tColor2=rand()%255;
    tColor3=rand()%255;
}
 
void CMainWnd::StatOut(int f,CDC *xdc)
{
    COLORREF tColor1,tColor2;
    CBrush bStatBox(cStatBrush);
    CPen pStatBox(PS_SOLID,1,cStatPen);
 
    int i,tInt=gDrawHeight+35;
    CString tString;
 
    if(f==0)
    {
        //Сохраняем цвета
        CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
        CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
                
        //Рамка статистики
        xdc->SelectObject(pStatBox);
        xdc->SelectObject(bStatBox);
        xdc->Rectangle(gBorder,gDrawHeight,gWidth-gBorder,gDrawHeight+gStatHeight);
 
        //Линия под названиями планет
        xdc->MoveTo(150,gDrawHeight+30);
        xdc->LineTo(gWidth-gBorder*2,gDrawHeight+30);
 
        //Шапка (слева)
        xdc->TextOut(gBorder*2,tInt,"Position X:");tInt+=gDistText;
        xdc->TextOut(gBorder*2,tInt,"Position Y:");tInt+=gDistText;
        xdc->TextOut(gBorder*2,tInt,"Distance to aim:");tInt+=gDistText;
        xdc->TextOut(gBorder*2,tInt,"Hit count:");tInt+=gDistText;
 
        //Шапка (верх)
        tInt=gDrawHeight+10;
        for(i=0;i<zPlanet;i++)
            xdc->TextOut(150+160*i,tInt,TargetPos[i+1].sName);
        
        //Восстанавливаем цвета
        xdc->SelectObject(pOldPen);
        xdc->SelectObject(pOldBrush);
    }
    if(f==1)
    {
        //Сохраняем цвета
        CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
        CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
        COLORREF xTextColor=xdc->GetTextColor();
        COLORREF xBkColor=xdc->GetBkColor();
 
        //Внутрення плашка
        xdc->Rectangle(150-gBorder,gDrawHeight+30,gWidth-gBorder*2,gDrawHeight+gStatHeight-gBorder);
        
        //Статитиска (цифры)
        for(i=0;i<zPlanet;i++)
        {
            XSelectColor(TargetPos[i+1].fX,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sPosX);
            xdc->TextOut(150+160*(i),tInt,tString);
 
            XSelectColor(TargetPos[i+1].fY,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sPosY);
            xdc->TextOut(150+160*(i),tInt+gDistText,tString);
 
            XSelectColor(TargetPos[i+1].fDist,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sDist);
            xdc->TextOut(150+160*(i),tInt+2*gDistText,tString);
 
            XSelectColor(TargetPos[i+1].fAim,&tColor1,&tColor2);
            xdc->SetTextColor(tColor1);xdc->SetBkColor(tColor2);
            tString.Format(_T("%d"),TargetPos[i+1].sHitCount);
            xdc->TextOut(150+160*(i),tInt+3*gDistText,tString);
        }
 
        //Восстанавливаем цвета
        xdc->SelectObject(pOldPen);
        xdc->SelectObject(pOldBrush);
        xdc->SetTextColor(xTextColor);
        xdc->SetBkColor(xBkColor);
    }
}
 
void CMainWnd::XSelectColor(int tF,COLORREF *tColor1,COLORREF *tColor2)
{
    if(tF==0)
    {
        *tColor1=cMiddleValue;
        *tColor2=cBackTextInActive;
    }
    if(tF==1)
    {
        *tColor1=cLowValue;
        *tColor2=cBackTextActive;
    }
    if(tF==2)
    {
        *tColor1=cHighValue;
        *tColor2=cBackTextActive;
    }
}

CMyList.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma once
#include "CMyPoint.h"
#include "CMyAim.h"
#include "CMyPlanet.h"
 
struct SMyNode
{
    SMyNode *pNext;
    CMyPoint *pObj;
};
 
class CMyList
{
public:
    CMyList(void);
    ~CMyList(void);
 
    void AddList(CMyPoint *pNObject);
    void ShowAll(CDC *xdc);
    void MoveAll(CDC *xdc);
    void SearchTarget();
    void MaxMin(int *ptr);
    void ZSort(int *tArray,int *tMax,int *tMin);
 
    SMyNode *pHead,*pCurr,*pTemp;
 
    CMyPoint *ptrPoint;
    CMyPlanet *ptrPlanet;
    CMyAim *ptrAim;
};

CMyList.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
#include "afxwin.h"
#include "math.h"
#include "CMyList.h"
#include "CMyAim.h"
#include "XConst.h"
//#include "XStruct.h"
 
CMyList::CMyList(void)
{
    pHead=NULL;
}
 
CMyList::~CMyList()
{
    while(pHead!=NULL)
    {
        pTemp->pNext;
        delete pHead->pObj;
        delete pHead;
        pHead=pTemp;
    }
}
 
void CMyList::AddList(CMyPoint *pNObject)
{
    if(pHead==NULL)
    {
        pHead=new SMyNode;
        pHead->pNext=NULL;
        pHead->pObj=pNObject;
    }
    else
    {
        pCurr=pHead;
        while(pCurr->pNext!=NULL)
            pCurr=pCurr->pNext;
        pCurr->pNext=new SMyNode;
        pCurr=pCurr->pNext;
        pCurr->pNext=NULL;
        pCurr->pObj=pNObject;
    }
}
 
void CMyList::ShowAll(CDC *xdc)
{
    pCurr=pHead;
    while(pCurr!=pHead)
    {
        pCurr->pObj->Show(xdc);
        pCurr=pCurr->pNext;
    }
}
 
void CMyList::SearchTarget()
{
    int i=1;
    
    pCurr=pHead;
    while(pCurr!=NULL)
    {
        if(pCurr->pObj->idType==5)
            TargetPos[0].ptr=pCurr->pObj;
 
        if(pCurr->pObj->idType==2)
        {
            TargetPos[i].ptr=pCurr->pObj;
            ptrPlanet=dynamic_cast<CMyPlanet*>(TargetPos[i].ptr);
            TargetPos[i].sName=ptrPlanet->vName;
            i++;
        }
        pCurr=pCurr->pNext;
    }
}
 
void CMyList::MoveAll(CDC *xdc)
{
    int idType,idPos,idColor;
    int t1=0,t2=0,t3=0,t4=0,t5=0;
    int tInt,i=1;
    int tArray[4][6];
    
    pCurr=pHead;
    while(pCurr!=NULL)
    {
        ptrPoint=pCurr->pObj;
 
        idType=pCurr->pObj->idType;
        idPos=pCurr->pObj->idPos;
        idColor=pCurr->pObj->idColor;
 
        //обработка позиции
        if(idPos==0)
        {
            t1=0;t2=0;
        }
        if(idPos==1)
        {
            t1=1;t2=-1;
        }
        if(idPos==2)
        {
            t1=1;t2=1;
        }
        if(idPos==3)
        {
        t1=-1;t2=1;
        }
        if(idPos==4)
        {
            t1=-1;t2=-1;
        }
 
        //обработка цвета
        if(idColor==0)
        {
            t3=0;t4=0;t5=0;
        }
        if(idColor==1)
        {
            t3=1;t4=0;t5=0;
        }
        if(idColor==2)
        {
            t3=0;t4=1;t5=0;
        }
        if(idColor==3)
        {
            t3=0;t4=0;t5=1;
        }
        if(idColor==4)
        {
            t3=1;t4=1;t5=0;
        }
        if(idColor==5)
        {
            t3=0;t4=1;t5=1;
        }
        if(idColor==6)
        {
            t3=1;t4=0;t5=1;
        }
        if(idColor==7)
        {
            t3=1;t4=1;t5=1;
        }
 
        pCurr->pObj->Move(t1,t2,t3,t4,t5,xdc);
 
        //Обработка целей
        if(ptrPoint->idType==5)
        {
            ptrAim=dynamic_cast<CMyAim*>(ptrPoint);
            TargetPos[0].sPosX=ptrPoint->vx;
            TargetPos[0].sPosY=ptrPoint->vy;
        }
        if(ptrPoint->idType==2)
        {
            ptrPlanet=dynamic_cast<CMyPlanet*>(ptrPoint);
            TargetPos[i].sPosX=ptrPlanet->PosPlanetX;tArray[0][i-1]=TargetPos[i].sPosX;
            TargetPos[i].sPosY=ptrPlanet->PosPlanetY;tArray[1][i-1]=TargetPos[i].sPosY;
            i++;
        }
        
        pCurr=pCurr->pNext;
    }
    
    t1=TargetPos[0].sPosX;
    t2=TargetPos[0].sPosY;
    
    for(i=1;i<=zPlanet;i++)
    {
        t3=TargetPos[i].sPosX;
        t4=TargetPos[i].sPosY;
        tInt=static_cast<int>(sqrt((double)(abs((t3-t1)*(t3-t1)+(t4-t2)*(t4-t2)))));
        if(tInt<=zPlanetRadius)
            TargetPos[i].sDist=0;
        if(tInt>zPlanetRadius)
            TargetPos[i].sDist=tInt-zPlanetRadius;
        
        tArray[2][i-1]=TargetPos[i].sDist;
    }
 
    for(i=1;i<=zPlanet;i++)
    {
        if((TargetPos[i].sDist==0)&&(TargetPos[i].f==0))
        {
            TargetPos[i].sHitCount++;
            TargetPos[i].f=1;
 
            ptrPlanet=dynamic_cast<CMyPlanet*>(TargetPos[i].ptr);
            t1=rand()%255;
            t2=rand()%255;
            t3=rand()%255;
 
            ptrPlanet->xF*=-1;
            ptrPlanet->vR=t1;
            ptrPlanet->vG=t2;
            ptrPlanet->vB=t3;
        }
        if(TargetPos[i].sDist>zPlanetRadius)
            TargetPos[i].f=0;
        tArray[3][i-1]=TargetPos[i].sHitCount;
    }
    
    for(i=1;i<zPlanet+1;i++)
    {
        TargetPos[i].fDist=0;
        TargetPos[i].fX=0;
        TargetPos[i].fY=0;
        TargetPos[i].fAim=0;
    }
    MaxMin(&tArray[0][0]);
}
 
void CMyList::MaxMin(int *ptr)
{
    int i,j,m=3,n=6;
    int tMax,tMin;
    int *tLine = new int[n];
 
    for(i=0;i<=m;i++)
    {
        for(j=0;j<n;j++)
            tLine[j]=*(ptr+i*n+j);
        tMax=0;tMin=0;
        ZSort(tLine,&tMax,&tMin);
 
        for(j=0;j<n;j++)
        {
            if((tLine[j]==tMax)&&(i==0))
                TargetPos[j+1].fX=2;
            if((tLine[j]==tMax)&&(i==1))
                TargetPos[j+1].fY=2;
            if((tLine[j]==tMax)&&(i==2))
                TargetPos[j+1].fDist=2;
            if((tLine[j]==tMax)&&(i==3))
                TargetPos[j+1].fAim=2;
            
            if((tLine[j]==tMin)&&(i==0))
                TargetPos[j+1].fX=1;
            if((tLine[j]==tMin)&&(i==1))
                TargetPos[j+1].fY=1;
            if((tLine[j]==tMin)&&(i==2))
                TargetPos[j+1].fDist=1;
            if((tLine[j]==tMin)&&(i==3))
                TargetPos[j+1].fAim=1;
        }
    }
}
 
void CMyList::ZSort(int *tLine,int *zMax,int *zMin)
{
    int i;
 
    *zMax=tLine[0];
    *zMin=tLine[0];
    for(i=1;i<zPlanet;i++)
    {
        if(tLine[i]>*zMax)
            *zMax=tLine[i];
        if(tLine[i]<*zMin)
            *zMin=tLine[i];
    }
}

И примеры классов с графикой
CMyPoint.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#pragma once
 
#include "afxwin.h"
 
class CMyPoint
{
public:
    CMyPoint(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iR,int iG,int iB);
    ~CMyPoint();
 
    virtual void Show(CDC *xdc);
    virtual void Hide(CDC *xdc);
    virtual void xSetPrivate(void);
 
    void xSetCommon(int dx,int dy,int dR,int dG,int dB);
    void Move(int dx,int dy,int dR,int dG,int dB,CDC *xdc); 
 
    CDC *xdc;
 
    int idType,idPos,idColor;
    int vSizeX,vSizeY;
    int vLimit,vCount;
    int vx,vy;
    int vR,vG,vB;
};

CMyPoint.cpp:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "afxwin.h"
 
#include "CMyPoint.h"
#include "CMyPoint.h"
#include "XConst.h"
 
CMyPoint::CMyPoint(int iiType,int iiPos,int iiColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iR,int iG,int iB)
{
    idType=iiType;
    idPos=iiPos;
    idColor=iiColor;
    vSizeX=iMaxX;
    vSizeY=iMaxY;
 
    vLimit=iLimit;
    vCount=0;
    vx=ix;
    vy=iy;
    vR=iR;
    vG=iG;
    vB=iB;
}
 
CMyPoint::~CMyPoint()
{}
 
void CMyPoint::Show(CDC *xdc)
{
    xdc->SetPixel(vx,vy,RGB(vR,vG,vB));
}
 
void CMyPoint::Hide(CDC *xdc)
{
    xdc->SetPixel(vx,vy,cSpace);
}
 
void CMyPoint::xSetCommon(int dx,int dy,int dR,int dG,int dB)
{
    vx+=dx;
    vy+=dy;
    vR+=dR;
    vG+=dG;
    vB+=dB;
}
 
void CMyPoint::xSetPrivate()
{
    vCount++;
    if(vCount>=vLimit)
    {
        vCount=0;
        vx=rand()%vSizeX;
        vy=rand()%vSizeY;
        vLimit=rand()%600;
    }
}
 
void CMyPoint::Move(int dx,int dy,int dR,int dG,int dB, CDC *xdc)
{
    Hide(xdc);
    xSetCommon(dx,dy,dR,dG,dB);
    xSetPrivate();
    Show(xdc);
}

CMyAim.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#pragma once
#include "cmypoint.h"
 
class CMyAim:public CMyPoint
{
public:
    CMyAim(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iAngel,int iRadius,int iR,int iG,int iB);
    ~CMyAim(void);
 
    virtual void Show(CDC *xdc);
    virtual void Hide(CDC *xdc);
    virtual void xSetPrivate(void);
 
    virtual double xSetX(int zA,int zR);
    virtual double xSetY(int zA,int zR);
 
    CPen *pPen1,*pPen2,*pPen3;
    CBrush *pBrush;
 
//  int tLimitX,tLimitY;
    int vRadius;
    //,tCount;
    int vAngel;
    int tX,tY;
};

CMyAim.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "afxwin.h"
#include "math.h"
#include "CMyPoint.h"
#include "CMyAim.h"
#include "XConst.h"
 
CMyAim::CMyAim(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iAngel,int iRadius,int iR,int iG,int iB):CMyPoint(iType,iPos,iColor,iMaxX,iMaxY,iLimit,ix,iy,iR,iG,iB)
{
    vAngel=iAngel;
    vRadius=iRadius;
}
 
CMyAim::~CMyAim(void)
{
}
 
void CMyAim::Show(CDC *xdc)
{
    int i;
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
 
    xdc->SelectStockObject(NULL_BRUSH);
    CPen tPen1(PS_DOT,1,RGB(vR,vG,vB));
    CPen tPen2(PS_SOLID,1,cAimOut);
    CPen tPen3(PS_SOLID,1,cAimIn);
 
    //2 круга
    xdc->SelectObject(tPen2);
    xdc->Ellipse(vx-vRadius,vy-vRadius,vx+vRadius,vy+vRadius);
    xdc->SelectObject(tPen3);
    xdc->Ellipse(vx-10,vy-10,vx+10,vy+10);
 
    //статичные линии на весь экран
    xdc->SelectObject(tPen1);
    xdc->MoveTo(0,vy);xdc->LineTo(vx-vRadius-5,vy);
    xdc->MoveTo(vx+vRadius+5,vy);xdc->LineTo(vSizeX,vy);
    xdc->MoveTo(vx,0);xdc->LineTo(vx,vy-vRadius-5);
    xdc->MoveTo(vx,vy+vRadius+5);xdc->LineTo(vx,vSizeY);
 
    //крутящийся внутренний прицел
    xdc->SelectObject(tPen3);
    for(i=0;i<4;i++)
    {
        tX=static_cast<int>(xSetX(vAngel+90*i,vRadius));
        tY=static_cast<int>(xSetY(vAngel+90*i,vRadius));
        xdc->MoveTo(vx,vy);xdc->LineTo(tX,tY);
    }
 
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyAim::Hide(CDC *xdc)
{
    int i;
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
 
    xdc->SelectStockObject(NULL_BRUSH);
 
    CPen tPen(PS_SOLID,1,RGB(6,38,77));
    xdc->SelectObject(tPen);
 
    xdc->Ellipse(vx-vRadius,vy-vRadius,vx+vRadius,vy+vRadius);
    xdc->Ellipse(vx-10,vy-10,vx+10,vy+10);
 
    xdc->MoveTo(0,vy);xdc->LineTo(vx-vRadius-5,vy);
    xdc->MoveTo(vx+vRadius+5,vy);xdc->LineTo(vSizeX,vy);
    xdc->MoveTo(vx,0);xdc->LineTo(vx,vy-vRadius-5);
    xdc->MoveTo(vx,vy+vRadius+5);xdc->LineTo(vx,vSizeY);
 
    for(i=0;i<4;i++)
    {
        tX=static_cast<int>(xSetX(vAngel+90*i,vRadius));
        tY=static_cast<int>(xSetY(vAngel+90*i,vRadius));
        xdc->MoveTo(vx,vy);xdc->LineTo(tX,tY);
    }
 
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyAim::xSetPrivate(void)
{
    vAngel++;
    if((vy-vRadius<=0)&&(idPos==1))
        idPos=2;
    if((vy-vRadius<=0)&&(idPos==4))
        idPos=3;
    if((vx+vRadius>=vSizeX)&&(idPos==2))
        idPos=3;
    if((vx+vRadius>=vSizeX)&&(idPos==1))
        idPos=4;
    if((vy+vRadius>=vSizeY)&&(idPos==3))
        idPos=4;
    if((vy+vRadius>=vSizeY)&&(idPos==2))
        idPos=1;
    if((vx-vRadius<=0)&&(idPos==4))
        idPos=1;
    if((vx-vRadius<=0)&&(idPos==3))
        idPos=2;
}
 
double CMyAim::xSetX(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vx+cos(temp)*xRadius);
}
 
double CMyAim::xSetY(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vy+sin(temp)*xRadius);
}

CMyPlanet.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma once
#include "cmypoint.h"
 
class CMyPlanet:public CMyPoint
{
public:
    CMyPlanet(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iRadius1,int iRadius2,int iF,int iA,int iR,int iG, int iB,CString iName);
    ~CMyPlanet();
 
    virtual void Show(CDC *xdc);
    virtual void Hide(CDC *xdc);
    virtual void xSetPrivate(void);
 
    double xSetX(int zA,int zR);
    double xSetY(int zA,int zR);
 
    int xA,xF;
    int PosPlanetX,PosPlanetY;
    int vRadius1,vRadius2;
    CString vName;
};

CMyPlanet.cpp:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include "math.h"
 
#include "CMyPlanet.h"
#include "CMyPoint.h"
#include "XConst.h"
 
CMyPlanet::CMyPlanet(int iType,int iPos,int iColor,int iMaxX,int iMaxY,int iLimit,int ix,int iy,int iRadius1,int iRadius2,int iF,int iA,int iR,int iG, int iB,CString iName):
    CMyPoint(iType,iPos,iColor,iMaxX,iMaxY,iLimit,ix,iy,iR,iG,iB)
{
    xF=iF;
    xA=iA;
    vRadius1=iRadius1;
    vRadius2=iRadius2;
    vName=iName;
}
 
CMyPlanet::~CMyPlanet()
{}
 
void CMyPlanet::Show(CDC *xdc)
{
    //Сохраняем цвета, кисть и карандаш
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
 
    //Делаем новые
    CBrush bPlanet(RGB(vR,vG,vB));
    CPen pOrbit(PS_DASH,1,cPlanetOrbit);
    CPen pPlanet(PS_SOLID,2,cPlanetBorder);
 
    //FFF
    CPen *CT=new CPen(PS_DASH,1,cPlanetOrbit);
    
    //координаты центра планеты
    PosPlanetX=static_cast<int>(xSetX(xA,vRadius1));
    PosPlanetY=static_cast<int>(xSetY(xA,vRadius1));
        
    xdc->SelectStockObject(NULL_BRUSH);
 
    //Рисуем орбиту планеты
    xdc->SelectObject(pOrbit);
    xdc->Ellipse(vx-vRadius1,vy-vRadius1,vx+vRadius1,vy+vRadius1);
 
    //Рисуем планету
    xdc->SelectObject(pPlanet);
    xdc->SelectObject(bPlanet);
    xdc->Ellipse(PosPlanetX-vRadius2,PosPlanetY-vRadius2,PosPlanetX+vRadius2,PosPlanetY+vRadius2);
 
    //Название планеты
    xdc->SetBkColor(cMainTextBack);
    xdc->SetTextColor(cMainTextFront);
    xdc->TextOut(PosPlanetX,PosPlanetY,vName);
        
    //Восстанавливаем цвета, кисть и карандаш
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyPlanet::Hide(CDC *xdc)
{
    
    //Сохраняем цвета, кисть и карандаш
    CPen xPen,*pOldPen=xdc->SelectObject(&xPen);
    CBrush xBrush, *pOldBrush=xdc->SelectObject(&xBrush);
    
    //Делаем новые
    CPen pErase(PS_SOLID,2,cSpace);
    CBrush bErase(cSpace);
 
    //Стираем планеты
    xdc->SelectObject(pErase);
    xdc->SelectObject(bErase);
    xdc->Ellipse(PosPlanetX-vRadius2,PosPlanetY-vRadius2,PosPlanetX+vRadius2,PosPlanetY+vRadius2);
 
    //Стираем название планеты
    xdc->SetTextColor(cSpace);
    xdc->SetBkColor(cSpace);
    xdc->TextOut(PosPlanetX,PosPlanetY,vName);
 
    //Восстанавливаем цвета, кисть и карандаш
    xdc->SelectObject(pOldPen);
    xdc->SelectObject(pOldBrush);
}
 
void CMyPlanet::xSetPrivate()
{
    xA+=xF;
}
 
double CMyPlanet::xSetX(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vx+cos(temp)*xRadius);
}
 
double CMyPlanet::xSetY(int xGradus,int xRadius)
{
    double temp=xGradus*3.1415926535/180;
    return (vy+sin(temp)*xRadius);
}


P.S. Простите за простыни кода и стиль написания. Я новичок

Добавлено через 14 минут
XStruct.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pragma once
#include "afxwin.h"
#include "CMyPoint.h"
 
struct MyStruct
{
    int sPosX;
    int sPosY;
    int sDist;
    int sHitCount;
    int f;
    int fX,fY,fDist,fAim;
    CString sName;
 
    CMyPoint *ptr;
};


XConst.h:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "afxwin.h"
#include "XStruct.h"
 
/*
extern struct FF
{
    int zPosX;
    int zPosY;
    int zDistance;
    int zHitCount;
    CString zName;
} f_f;
*/
 
extern MyStruct TargetPos[7];
 
extern int zStar,zBigStar,zFlyStar,zPlanet;
 
extern int zPlanetRadius;
extern int zPulsarDist;
 
extern int WinPosX,WinPosY,WinSizeX,WinSizeY;
 
extern int gDrawHeight,gStatHeight,gWidth;
extern int gBorder;
extern int gDistText;
 
extern COLORREF cSpace,cStatPen,cStatBrush;
extern COLORREF cHighValue,cMiddleValue,cLowValue;
extern COLORREF cBackTextActive,cBackTextInActive;
extern COLORREF cMainTextFront,cMainTextBack;
extern COLORREF cAimOut,cAimIn;
extern COLORREF cPlanetOrbit,cPlanetBorder;


XConst.cpp:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include "XConst.h"
#include "XStruct.h"
 
//Максимум объектов
int zStar=1000;
int zFlyStar=400;
int zBigStar=50;
int zPlanet=6;
 
//Объекты
int zPlanetRadius=25;
int zPulsarDist=80;
 
 
MyStruct TargetPos[7];
 
//Геометрия основного окна
int WinPosX=150;
int WinPosY=150;
int WinSizeX=1100;
int WinSizeY=1000;
 
int gStatHeight=110;
int gDrawHeight=0;
int gWidth=0;
int gBorder=5;
 
int gDistText=17;
 
COLORREF cSpace=RGB(6,38,77);
 
COLORREF cStatPen=RGB(178,34,34);
COLORREF cStatBrush=RGB(26,58,97);
 
COLORREF cBackTextInActive=RGB(20,20,20);
COLORREF cBackTextActive=RGB(160,160,160);
COLORREF cHighValue=RGB(255,0,0);
COLORREF cMiddleValue=RGB(255,255,255);
COLORREF cLowValue=RGB(0,255,0);
 
COLORREF cMainTextFront=(RGB(0,0,0));
COLORREF cMainTextBack=(RGB(255,255,255));
 
COLORREF cAimOut=RGB(255,255,0);
COLORREF cAimIn=RGB(255,0,0);
 
COLORREF cPlanetOrbit=RGB(70,70,70);
COLORREF cPlanetBorder=RGB(155,0,155);


Добавлено через 20 часов 20 минут
Главный "таракан" нашелся. Ошибка была в блоке CMyPlanet.cpp в 32 строчке
C++
1
CPen *CT=new CPen(PS_DASH,1,cPlanetOrbit);
Был New, а вот delete потерялось. Исправил, все стало удовлетворительно.
 
Текущее время: 22:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru