Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
06.05.2013
Размер:
31.16 Кб
Скачать
// Каркас приложения для Windows'95

#include <windows.h>
#include "resource.h"
#include <math.h>
#include <stdio.h>
#include <string.h>

BOOL CALLBACK DialogProc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
LRESULT CALLBACK WindowFunc2(HWND,UINT,WPARAM,LPARAM);

double F_x(double x_r,double y_r,double T);
double F_y(double x_r,double y_r,double T);
double O_x(double T);
double O_y(double T);
double x_0,y_0,v,T_0,x_r,y_r;
int flag;
char szBMName[]="BMImage";
char szBMName1[]="BMImage1";
char szBMName2[]="BMImage2";
char szBMName3[]="BMImage3";
char szBMName4[]="BMImage4";
char szBMName5[]="BMImage5";
char szBMName6[]="BMImage6";


char szWinName[] = "Мое Окно",szWinName2[]="Мое Окно2";
char x_0d[40];
char y_0d[40];
char v_d[40];
char T_0d[40];
char str_a[40];

DWORD WINAPI ThreadProc(LPVOID lpParameter);
HWND hwnd,hwnd2;
HDC hdc,hdc2;
HDC memdc,memdc2;
HDC hmdc;
PAINTSTRUCT paintstruct;
RECT rect,rect2,rect3;
HBRUSH hbrush;
DWORD Tid;
HANDLE hct;
HANDLE hSem;
HINSTANCE hTI;
HBITMAP hbit,hBitmap,hBitmap1,hBitmap2,hBitmap3,hBitmap4,hBitmap5,hBitmap6;
double x_c=10,y_c=500,T,dT=0.001,x_r,y_r,xr_1,xr_2,yr_1,yr_2,a_last,a_max=0,a,a_x,a_y;
double x_0=0.7;
double y_0=0.1;
double v=1.3;
double t_0=0;

int WINAPI WinMain (HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
{

MSG msg;
WNDCLASS wcl,wc2;
hBitmap = LoadBitmap(hThisInst,szBMName);
hBitmap1 = LoadBitmap(hThisInst,szBMName1);
hBitmap2 = LoadBitmap(hThisInst,szBMName2);
hBitmap3 = LoadBitmap(hThisInst,szBMName3);
hBitmap4 = LoadBitmap(hThisInst,szBMName4);
hBitmap5 = LoadBitmap(hThisInst,szBMName5);
hBitmap6 = LoadBitmap(hThisInst,szBMName6);





// Определить класс окна

wcl.hInstance=hThisInst;
wcl.lpszClassName=szWinName; //имя класса окна
wcl.lpfnWndProc=WindowFunc; //функция окна
wcl.style=0; // стиль по умолчанию
wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); //стандартная иконка
wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
wcl.lpszMenuName= (LPSTR)MYMENU; //NULL; //без меню
wcl.cbClsExtra=0;
wcl.cbWndExtra=0;
// Заполнить окно цветом
wcl.hbrBackground=(HBRUSH) GetStockObject(/*LTGRAY*/BLACK_BRUSH);

if (!RegisterClass (&wcl)) return 0;

// Создать окно
hwnd = CreateWindow(szWinName,"Программа ''Танк и НЛО''",
WS_OVERLAPPEDWINDOW,
/*CW_USEDEFAULT*/70, // горизонтальное положение окна
/*CW_USEDEFAULT*/0, // вертикальное положение окна
/*CW_USEDEFAULT*/430, // ширина окна
/*CW_USEDEFAULT*/530, // высота окна
HWND_DESKTOP,
NULL,
hThisInst,
NULL);

// Показать окно и нарисовать содержимое

ShowWindow(hwnd,nWinMode);
UpdateWindow (hwnd);

///////////////////////////////////////////////////
wc2.hInstance=hThisInst;
wc2.lpszClassName=szWinName2; //имя класса окна
wc2.lpfnWndProc=WindowFunc2; //функция окна
wc2.style=0; // стиль по умолчанию
wc2.hIcon=LoadIcon(/*hThisInst ,MAKEINTRESOURCE(ID_KSICON2)*/NULL,IDI_APPLICATION); //стандартная иконка
wc2.hCursor=LoadCursor(NULL,IDC_ARROW);
wc2.lpszMenuName= NULL; //NULL; //без меню
wc2.cbClsExtra=0;
wc2.cbWndExtra=0;
// Заполнить окно цветом
wc2.hbrBackground=(HBRUSH) GetStockObject(/*LTGRAY*/BLACK_BRUSH);

if (!RegisterClass (&wc2)) return 0;

// Создать окно
hwnd2 = CreateWindow(szWinName2,"График ускорения",
WS_OVERLAPPEDWINDOW,
415, // горизонтальное положение окна
0, // вертикальное положение окна
380,// ширина окна
510,// высота окна
hwnd/*HWND_DESKTOP*/,
NULL,
hThisInst,
NULL);

// Показать окно и нарисовать содержимое

ShowWindow(hwnd2,nWinMode);
UpdateWindow(hwnd2);


//////////////////////////////////////////////////////////////////////////

// Цикл обработки сообщений
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}

DeleteDC (memdc);
return msg.wParam;
}

// DWORD WINAPI ThreadProc(LPVOID lpParameter);
// HANDLE hSem;

LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,
WPARAM wParam,LPARAM lParam)
{
HDC hdc;
HBITMAP hbit;
HBRUSH hbrush,hGRush;
DWORD Tid;
static HANDLE hct;
static BITMAP bm;
static ggg;


static int maxX, maxY,T2,dTT=122;
POINT lpPoint;

switch (message)
{

case WM_CREATE:

MessageBox(hwnd, "Добро пожаловать в программу Преследование!!!\nНачать работу?","Приветствие.",MB_OK | MB_ICONQUESTION);
// hSem=CreateSemaphore(NULL,1,1,"mysem");

maxX = GetSystemMetrics (SM_CXSCREEN);
maxY = GetSystemMetrics (SM_CYSCREEN);
hdc = GetDC(hwnd);
memdc = CreateCompatibleDC(hdc);
hbit = CreateCompatibleBitmap (hdc,maxX,maxY);
SelectObject (memdc, hbit);



hbrush = GetStockObject (/*LTGRAY*/BLACK_BRUSH);
SelectObject (memdc, hbrush);

PatBlt (memdc, 0,0, maxX,maxY,PATCOPY);
hGRush = GetStockObject (/*LTGRAY*/BLACK_BRUSH);

SelectObject (memdc, hGRush);
ReleaseDC (hwnd, hdc);

// TextOut(memdc,50,40,"Вывод текста",12);
// hbrush = GetStockObject (WHITE_BRUSH);
// SelectObject (memdc, CreatePen (PS_SOLID,3 /*ширина пера*/
// ,RGB(55,130,220)));
// SelectObject (memdc,hbrush);
// Rectangle(memdc,10,50,700,500); //координаты прямоугольника
// Rectangle(memdc,0,500,700,0);

// MoveToEx(memdc,100,100,NULL);
// SelectObject(memdc,CreatePen(PS_SOLID,1,RGB(255,0,0)));
// LineTo(memdc,200,100);

// MoveToEx(memdc,100,300,NULL);

// hct=CreateThread(NULL,0,ThreadProc,NULL,0,&Tid);

// EnableMenuItem(GetMenu(hwnd),ID_STOP,MF_ENABLED);
// EnableMenuItem(GetMenu(hwnd),ID_START,MF_GRAYED);
// SuspendThread(hct);
break;










case WM_PAINT:

hdc = BeginPaint(hwnd,&paintstruct);
WaitForSingleObject(hSem,INFINITE);
BitBlt (hdc,0, 0, maxX,maxY, memdc,0,0,SRCCOPY);
/* if(flag=1)
{SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(255,0,0)));
Ellipse(memdc,x_r-1,y_r-1,x_r+1,y_r+1); } */
// hdc = GetDC (hwnd);

hmdc=CreateCompatibleDC(hdc);//BooM
SelectObject (hmdc, hBitmap1);
GetObject(hBitmap1,sizeof(bm),(LPSTR) &bm);


BitBlt (hdc,(int)(400*x_r)+11+280, (int)(400-400*y_r)-40, bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);



//PlgBlt(hdc,100,100,


ReleaseSemaphore(hSem,1,NULL);
DeleteDC(hmdc);






/* MoveToEx(memdc,144,100,NULL);
SelectObject(memdc,CreatePen(PS_SOLID,3,RGB(55,130,220)));
LineTo(memdc,155,100);
MoveToEx(memdc,150,100,NULL);
SelectObject(memdc,CreatePen(PS_SOLID,2,RGB(0,0,0)));
LineTo(memdc,150+x,50+y);*/

// SetMapMode(hdc,MM_HIMETRIC);
// SetViewportOrgEx(hdc,10,500,&lpPoint);

// Rectangle(hdc,300,70,500,700);

// Ellipse(hdc,(int)(400*x_r),(int)(400-400*y_r), (int)(400*x_r)+10,(int)(400-400*y_r)+10 ); //Цвет бомбы
ValidateRect(hwnd,NULL);

EndPaint(hwnd,&paintstruct);
break;

case WM_COMMAND:
switch (LOWORD(wParam))
{
case ID_ABOUT:
MessageBox(hwnd, "Моделирование действия ПВО посредством преследования НЛО, движущегося по баллистической траектории, двойным снарядом! ",
"Немного о программе",MB_OK | MB_ICONINFORMATION);
break;

case ID_EXIT:
if (MessageBox(hwnd, "Вы уверены?",
"Выход",MB_YESNO | MB_ICONQUESTION) == IDYES)
DestroyWindow(hwnd);
break;

// case ID_START:
// ResumeThread(hct);
// EnableMenuItem(GetMenu(hwnd),ID_STOP,MF_ENABLED);
// EnableMenuItem(GetMenu(hwnd),ID_START,MF_GRAYED);
// break;

/* case ID_STOP:
SuspendThread(hct);
// EnableMenuItem(GetMenu(hwnd),ID_START,MF_ENABLED);
// EnableMenuItem(GetMenu(hwnd),ID_STOP,MF_GRAYED);
break; */
case ID_DIALOG:
DialogBox(hTI,MAKEINTRESOURCE(IDD_DIALOG2),hwnd,DialogProc);
break;
case ID_AB:
WaitForSingleObject(hSem,INFINITE);
hbrush = GetStockObject (/*LTGRAY*/BLACK_BRUSH);
SelectObject (memdc, hbrush);
PatBlt (memdc, 0,0, maxX,maxY,PATCOPY);
SelectObject (memdc2, hbrush);
PatBlt (memdc2, 0,0, maxX,maxY,PATCOPY);
SelectObject (memdc2, CreatePen(PS_SOLID,1,RGB(0,200,0)));
MoveToEx(memdc2,5,275,NULL);
LineTo(memdc2,5,5);
MoveToEx(memdc2,5,275,NULL);
LineTo(memdc2,370,275);

ReleaseSemaphore(hSem,1,NULL);
InvalidateRect(hwnd,NULL,TRUE);
//InvalidateRect(hwnd2,NULL,TRUE)

}
break;

case WM_DESTROY:
TerminateThread(hct,0);
CloseHandle(hSem);
PostQuitMessage(0);
break;

default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}

///////////////////////////////////
LRESULT CALLBACK WindowFunc2(HWND hwnd2,UINT message,
WPARAM wParam,LPARAM lParam)
{


static int maxX, maxY,ggg;
switch (message)
{

case WM_CREATE:
maxX = GetSystemMetrics (SM_CXSCREEN);
maxY = GetSystemMetrics (SM_CYSCREEN);
hdc2 = GetDC(hwnd2);
memdc2 = CreateCompatibleDC(hdc2);
hbit = CreateCompatibleBitmap (hdc2,maxX,maxY);
SelectObject (memdc2, hbit);
hbrush = GetStockObject (/*LTGRAY*/BLACK_BRUSH);
SelectObject (memdc2, hbrush);
PatBlt (memdc2, 0,0, maxX,maxY,PATCOPY);
ReleaseDC (hwnd2, hdc2);


break;

case WM_PAINT:
hdc2 = BeginPaint(hwnd2,&paintstruct);
WaitForSingleObject(hSem,INFINITE);
BitBlt (hdc2, 0, 0, maxX,maxY, memdc2,0,0,SRCCOPY);
ReleaseSemaphore(hSem,1,NULL);
MoveToEx(memdc2,100,400,NULL);//левая подвеска
LineTo(memdc2,300,400);

MoveToEx(memdc2,300,400,NULL);//левая подвеска
LineTo(memdc2,300,350);
MoveToEx(memdc2,300,350,NULL);//левая подвеска
LineTo(memdc2,100,350);
MoveToEx(memdc2,100,350,NULL);//левая подвеска
LineTo(memdc2,100,400);


EndPaint(hwnd2,&paintstruct);
break;

case WM_COMMAND:
switch (LOWORD(wParam))
{
}
break;

case WM_DESTROY:
CloseHandle(hSem);
PostQuitMessage(0);
break;

default:
return DefWindowProc (hwnd2, message, wParam, lParam);
}
return 0;
}

//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////


DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
double x_c=10,y_c=500,T,dT=0.001,x_r,y_r,xr_1,xr_2,yr_1,yr_2,a_last,a_max=0,a,MAXT=0,a_x,a_y;
double kx_1,kx_2,kx_3,kx_4,ky_1,ky_2,ky_3,ky_4;
static int maxX, maxY,ggg;
static BITMAP bm;

RECT rect,rect2,rect3;

x_r=xr_1=xr_2=x_0;
y_r=yr_1=yr_2=y_0;

WaitForSingleObject(hSem,INFINITE);
SelectObject (memdc, GetStockObject (/*LTGRAY*/BLACK_BRUSH));
SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(0,255,0))); //цвет бомбы




SelectObject (memdc2, CreatePen(PS_SOLID,1,RGB(255,255,255)));//цвет осей графика

MoveToEx(memdc2,5,275,NULL);

LineTo(memdc2,5,5);
MoveToEx(memdc2,5,275,NULL);
LineTo(memdc2,370,275);


MoveToEx(memdc2,5,5,NULL);

LineTo(memdc2,1,13);MoveToEx(memdc2,5,275,NULL);
MoveToEx(memdc2,5,5,NULL);

LineTo(memdc2,10,13);MoveToEx(memdc2,5,275,NULL);





MoveToEx(memdc2,370,275,NULL);

LineTo(memdc2,363,271);MoveToEx(memdc2,5,275,NULL);
MoveToEx(memdc2,370,275,NULL);

LineTo(memdc2,363,279);MoveToEx(memdc2,5,275,NULL);


InvalidateRect(hwnd2,NULL,TRUE);

for (T=0;T<1;T+=dT)
{
Sleep(10);
SetPixel(memdc,(int)(400*x_c),(int)(400-400*y_c),RGB(0,0,0));
SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(0,0,0)));

//MoveToEx(memdc,(int)(400*x_c)-5,(int)(400-400*y_c)-5,NULL);
Ellipse(memdc,(int)(400*x_c)-1,(int)(400-400*y_c)-1, (int)(400*x_c)+40,(int)(400-400*y_c)+20 );

MoveToEx(memdc,(int)(400*x_c)+10,(int)(400-400*y_c)-1,NULL);//левая антенна

LineTo(memdc,(int)(400*x_c)+2,(int)(400-400*y_c)-14);

MoveToEx(memdc,(int)(400*x_c)+28,(int)(400-400*y_c)-1,NULL);//правая антенна

LineTo(memdc,(int)(400*x_c)+36,(int)(400-400*y_c)-14);

Ellipse(memdc,(int)(400*x_c)-2,(int)(400-400*y_c)-20, (int)(400*x_c)+7,(int)(400-400*y_c)-11 );//левый шарик
Ellipse(memdc,(int)(400*x_c)+33,(int)(400-400*y_c)-20, (int)(400*x_c)+42,(int)(400-400*y_c)-11 );//правый шарик
MoveToEx(memdc,(int)(400*x_c)+24,(int)(400-400*y_c)+19,NULL);//правая подвеска

LineTo(memdc,(int)(400*x_c)+18,(int)(400-400*y_c)+26);
MoveToEx(memdc,(int)(400*x_c)+12,(int)(400-400*y_c)+19,NULL);//левая подвеска

LineTo(memdc,(int)(400*x_c)+19,(int)(400-400*y_c)+26);





SetPixel(memdc,(int)(400*x_c)+19,(int)(400-400*y_c)+20,RGB(235,86,41));


SetPixel(memdc,(int)(400*x_c)+17,(int)(400-400*y_c)+20,RGB(235,86,41));




//LineTo(memdc,(int)(400*x_c)+5,(int)(400-400*y_c)+5);
x_c=O_x(T);
y_c=O_y(T);
rect.top=0;
rect.left=0;
rect.right=1000;
rect.bottom=1000;


WaitForSingleObject(hSem,INFINITE);

/* x_c=(double)(0+80.*cos(3.14/3.)*T);
y_c=(double)(480-80.*sin(3.14/3.)*T+10.*T*T/2);

rect.top=(long)(y_c+1);
rect.bottom=(long)(y_c-1);
rect.left=(long)(x_c+1);
rect.right=(long)(x_c-1); */

// SetPixel(memdc,(int)x_c,(int)y_c,RGB(0,0,200));

//SetPixel(memdc,(int)(400*x_c),(int)(400-400*y_c),RGB(245,98,59));
SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(73,109,242))); //Цвет НЛО
Ellipse(memdc,(int)(400*x_c)-1,(int)(400-400*y_c)-1, (int)(400*x_c)+40,(int)(400-400*y_c)+20 );
MoveToEx(memdc,(int)(400*x_c)+10,(int)(400-400*y_c)-1,NULL);//левая антенна

LineTo(memdc,(int)(400*x_c)+2,(int)(400-400*y_c)-14);

MoveToEx(memdc,(int)(400*x_c)+28,(int)(400-400*y_c)-1,NULL);//правая антенна

LineTo(memdc,(int)(400*x_c)+36,(int)(400-400*y_c)-14);
Ellipse(memdc,(int)(400*x_c)-2,(int)(400-400*y_c)-20, (int)(400*x_c)+7,(int)(400-400*y_c)-11 );//левый шарик
Ellipse(memdc,(int)(400*x_c)+33,(int)(400-400*y_c)-20, (int)(400*x_c)+42,(int)(400-400*y_c)-11 );//правый шарик
SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(73,109,242)));
//Arc(memdc,(int)(400*x_c)-1,(int)(400-400*y_c)-1, (int)(400*x_c)+40,(int)(400-400*y_c)+20, (int)(400*x_c)+10,(int)(400-400*y_c)+10, (int)(400*x_c)+30,(int)(400-400*y_c)+10);


MoveToEx(memdc,(int)(400*x_c)+24,(int)(400-400*y_c)+19,NULL);//правая подвеска

LineTo(memdc,(int)(400*x_c)+18,(int)(400-400*y_c)+26);

MoveToEx(memdc,(int)(400*x_c)+12,(int)(400-400*y_c)+19,NULL);//левая подвеска

LineTo(memdc,(int)(400*x_c)+19,(int)(400-400*y_c)+26);

MoveToEx(memdc,(int)(400*x_c),(int)(400-400*y_c)+10,NULL);//левая подвеска

LineTo(memdc,(int)(400*x_c)+39,(int)(400-400*y_c)+10);


Ellipse(memdc,(int)(400*x_c)+23,(int)(400-400*y_c)+2, (int)(400*x_c)+28,(int)(400-400*y_c)+8 );//правый шарик

Ellipse(memdc,(int)(400*x_c)+13,(int)(400-400*y_c)+2, (int)(400*x_c)+18,(int)(400-400*y_c)+8 );//правый шарик




//MoveToEx(memdc,(int)(400*x_c)-5,(int)(400-400*y_c)-5,NULL);

//LineTo(memdc,(int)(400*x_c)+5,(int)(400-400*y_c)+5);


// SetPixel(memdc,(int)(400*x_c)-5,(int)(400-400*y_c)-5,RGB(123,150,200)); //цвет ракеты


InvalidateRect(hwnd, &rect,TRUE);
if(T_0<=T)
{
//x_0=x_r;
//y_0=y_r;
SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(0,0,0)));


Ellipse(memdc,(int)(400*x_r)-1,(int)(400-400*y_r)-1, (int)(400*x_r)+6,(int)(400-400*y_r)+6 ); //Цвет бомбы
Ellipse(memdc,(int)(400*x_r)+9,(int)(400-400*y_r)-3, (int)(400*x_r)+16,(int)(400-400*y_r)+4 ); //Цвет бомбы

//SetPixel(memdc,(int)(400*x_r)+12,(int)(400-400*y_r)+12,RGB(45,23,0));
//SetPixel(memdc,(int)(400*x_r),(int)(400-400*y_r)+12,RGB(45,25,0));


SetPixel(memdc,(int)(400*x_r)+16,(int)(400-400*y_r)+4,RGB(0,106,57));
SetPixel(memdc,(int)(400*x_r)+4,(int)(400-400*y_r)+12,RGB(0,106,57));

xr_2=xr_1;
xr_1=x_r;
yr_2=yr_1;
yr_1=y_r;


// Method Runge-Kutta 4:

kx_1=F_x(x_r,y_r,T)*dT;
ky_1=F_y(x_r,y_r,T)*dT;
kx_2=F_x(x_r+kx_1/2,y_r+ky_1/2,T+dT/2)*dT;
ky_2=F_y(x_r+kx_1/2,y_r+ky_1/2,T+dT/2)*dT;
kx_3=F_x(x_r+kx_2/2,y_r+ky_2/2,T+dT/2)*dT;
ky_3=F_y(x_r+kx_2/2,y_r+ky_2/2,T+dT/2)*dT;
kx_4=F_x(x_r+kx_3/2,y_r+ky_3/2,T+dT/2)*dT;
ky_4=F_y(x_r+kx_3/2,y_r+ky_3/2,T+dT/2)*dT;
x_r=x_r+(kx_1+2*kx_2+2*kx_3+kx_4)/6;
y_r=y_r+(ky_1+2*ky_2+2*ky_3+ky_4)/6;


a_last=a;


a=fabs(v/(dT*0.5*tan(0.5*(3.1415-fabs(atan((y_r-yr_1)/(x_r-xr_1))-atan((yr_1-yr_2)/(xr_1-xr_2)))))));
if (fabs(a-a_last)>a_last)
a=a_last;

a_x=5+350*T;
a_y=275-2.3*a;
rect.top=0;
rect.left=0;
rect.right=1000;
rect.bottom=1000;

rect2.top=0;
rect2.left=0;
rect2.right=1000;
rect2.bottom=1000;
rect3.top=0;
rect3.left=0;
rect3.right=1000;
rect3.bottom=1000;




sprintf(str_a,"%.3f сек",T*100/62*10);
SetTextColor(memdc,RGB(5,127,231));
SetBkColor(memdc,RGB(0,0,0));
TextOut(memdc,339,51,str_a,strlen(str_a));





SetTextColor(memdc,RGB(5,127,231));
SetBkColor(memdc,RGB(0,0,0));
TextOut(memdc,349,90,"Время",5);



SetPixel(memdc2,(int)(a_x),(int)(a_y),RGB(241,79,0)); //Цвет графика
SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(60,202,110)));
Ellipse(memdc,(int)(400*x_r)-1,(int)(400-400*y_r)-1, (int)(400*x_r)+6,(int)(400-400*y_r)+6 ); //Цвет бомбы

Ellipse(memdc,(int)(400*x_r)+9,(int)(400-400*y_r)-3, (int)(400*x_r)+16,(int)(400-400*y_r)+4 ); //Цвет бомбы


SelectObject (memdc2, CreatePen(PS_DOT,1,RGB(60,202,110)));


MoveToEx(memdc2,5,15,NULL);

LineTo(memdc2,400,15); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,5,35,NULL);

LineTo(memdc2,400,35); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc2,5,55,NULL);

LineTo(memdc2,400,55); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,5,75,NULL);

LineTo(memdc2,400,75); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);
MoveToEx(memdc2,5,95,NULL);

LineTo(memdc2,400,95); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,5,115,NULL);

LineTo(memdc2,400,115); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);



MoveToEx(memdc2,5,135,NULL);

LineTo(memdc2,400,135); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,5,155,NULL);

LineTo(memdc2,400,155); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc2,5,175,NULL);

LineTo(memdc2,400,175); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);












MoveToEx(memdc2,25,15,NULL);

LineTo(memdc2,25,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,45,15,NULL);

LineTo(memdc2,45,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,65,15,NULL);

LineTo(memdc2,65,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,85,15,NULL);

LineTo(memdc2,85,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc2,105,15,NULL);

LineTo(memdc2,105,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,125,15,NULL);

LineTo(memdc2,125,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,145,15,NULL);

LineTo(memdc2,145,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,165,15,NULL);

LineTo(memdc2,165,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);



MoveToEx(memdc2,185,15,NULL);

LineTo(memdc2,185,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,205,15,NULL);

LineTo(memdc2,205,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,225,15,NULL);

LineTo(memdc2,225,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,245,15,NULL);

LineTo(memdc2,245,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,265,15,NULL);

LineTo(memdc2,265,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,285,15,NULL);

LineTo(memdc2,285,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,305,15,NULL);

LineTo(memdc2,305,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,325,15,NULL);

LineTo(memdc2,325,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,345,15,NULL);

LineTo(memdc2,345,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc2,365,15,NULL);

LineTo(memdc2,365,275); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);





















SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(5,127,231)));


MoveToEx(memdc2,5,195,NULL);

LineTo(memdc2,400,195); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);
MoveToEx(memdc2,5,215,NULL);

LineTo(memdc2,400,215); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);

MoveToEx(memdc2,5,235,NULL);

LineTo(memdc2,400,235); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc2,5,255,NULL);

LineTo(memdc2,400,255); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc,0,145,NULL);

LineTo(memdc,600,145); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc,0,149,NULL);

LineTo(memdc,600,149); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc,0,434,NULL);

LineTo(memdc,600,434); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


MoveToEx(memdc,0,438,NULL);

LineTo(memdc,600,438); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);







MoveToEx(memdc,370,30,NULL);

LineTo(memdc,420,60); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);
MoveToEx(memdc,420,60,NULL);

LineTo(memdc,370,90); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);
MoveToEx(memdc,370,90,NULL);

LineTo(memdc,320,60); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);
MoveToEx(memdc,320,60,NULL);

LineTo(memdc,370,30); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);


InvalidateRect(hwnd,&rect,TRUE);
// Ellipse(memdc,(int)(400*x_r),(int)(400-400*y_r), (int)(400*x_r)+10,(int)(400-400*y_r)+10 ); //Цвет бомбы

//SetPixel(memdc,(int)(400*x_r),(int)(400-400*y_r),RGB(156,100,123)); //Цвет бомбы



if(a>a_max )
a_max=a;



// fprintf(temp_pp,"%f\t%f\t%f\t%f\n",x_r,y_r,T,a);

//SetPixel(memdc2,(int)(a_x),(int)(a_y),RGB(255,255,255));



// Ellipse(memdc2,100,110, 10,a ); //Цвет бомбы

}

sprintf(str_a,"а(max)=%.3f =%.3f g",a_max,a_max*tan(3.14/3.)/2);



SetTextColor(memdc2,RGB(234,149,2));
SetBkColor(memdc2,RGB(0,0,0));
TextOut(memdc2,120,280,"График зависимости a от t",25);


SetTextColor(memdc2,RGB(234,149,2));
SetBkColor(memdc2,RGB(0,0,0));
TextOut(memdc2,102,365,str_a,strlen(str_a));


ReleaseSemaphore(hSem,1,NULL);
InvalidateRect(hwnd,&rect2,NULL);
InvalidateRect(hwnd,&rect,NULL);
InvalidateRect(hwnd2,&rect3,NULL);

UpdateWindow(hwnd);





// SetPixel(memdc,i,j,RGB(255,0,0));
// ReleaseSemaphore(hSem,1,NULL);

// SelectObject (memdc, CreatePen (PS_SOLID,2 ,RGB(255,0,0)));
// hbrush = GetStockObject (WHITE_BRUSH);
// SelectObject (memdc,hbrush);
// PatBlt (memdc,0,500,700,0,PATCOPY);

// MoveToEx(memdc,0,500,NULL);
// SelectObject(memdc,CreatePen(PS_SOLID,3,RGB(255,0,0)));
// LineTo(memdc,x_c,y_c);
/* MoveToEx(memdc,150,100,NULL);
SelectObject(memdc,CreatePen(PS_SOLID,2,RGB(0,0,0)));
LineTo(memdc,150+x,50+y);
Ellipse(memdc,150+x-3,50+y-3,150+x+3,50+y+3); */

// ReleaseSemaphore(hSem,1,NULL);

/* rect.top=97;
rect.bottom=240;
rect.left=20;
rect.right=500;
InvalidateRect(hwnd,&rect,TRUE);
rect.top=500;
rect.bottom=0;
rect.left=0;
rect.right=700;
UpdateWindow(hwnd); */

// InvalidateRect(hwnd,&rect,TRUE);
// UpdateWindow(hwnd);







if(sqrt(pow((x_c-x_r),2)+pow((y_c-y_r),2))<=v*dT)
{
sprintf(str_a,"%.3f",a_max);
SetTextColor(memdc2,RGB(234,149,2));
SetBkColor(memdc2,RGB(0,0,0));
TextOut(memdc2,(int)(8),(int)(276-2.3*a_max),str_a,strlen(str_a));

SelectObject (memdc2, CreatePen(PS_SOLID,1,RGB(241,79,0))); //Цвет НЛО

MoveToEx(memdc2,(int)(5),(int)(275-2.3*a_max),NULL);

LineTo(memdc2,(int)(13),(int)(275-2.3*a_max)); //BitBlt (hdc,10, 210, bm.bmWidth,bm.bmHeight, hdc,0,0,SRCCOPY);






hdc = GetDC (hwnd);//Взрыв

hmdc=CreateCompatibleDC(hdc);//BooM
SelectObject (hmdc, hBitmap);
GetObject(hBitmap,sizeof(bm),(LPSTR) &bm);


BitBlt (hdc,(int)(400*x_r)-23, (int)(400-400*y_r)-25, bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);
DeleteDC(hmdc);


// SetTextColor(hdc,RGB(18,168,22));
// SetBkColor(hdc,RGB(0,0,0));
// TextOut(hdc,10,30,"Миссия выполнена: НЛО ликвидировано!" ,36);
hdc = GetDC (hwnd);

hmdc=CreateCompatibleDC(hdc);//Военный говорит
SelectObject (hmdc, hBitmap3);
GetObject(hBitmap3,sizeof(bm),(LPSTR) &bm);
BitBlt (hdc,10, 30, bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);

DeleteDC(hmdc);



hdc = GetDC (hwnd);
hmdc=CreateCompatibleDC(hdc);//Речь военного
SelectObject (hmdc, hBitmap5);
GetObject(hBitmap5,sizeof(bm),(LPSTR) &bm);


BitBlt (hdc,90, 30, bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);
DeleteDC(hmdc);

// MessageBox(hwnd, "НЛО ликвидировано","Цель сбита",MB_OK | MB_ICONINFORMATION);
// WaitForSingleObject(hSem,INFINITE);
// TextOut(memdc2,10,10,str_a,strlen(str_a));

// SelectObject (memdc, CreatePen(PS_SOLID,1,RGB(255,0,0)));
// Ellipse(memdc,x_r-1,y_r-1,x_r+1,y_r+1);
// flag=1;
//ReleaseSemaphore(hSem,1,NULL);
// fclose(temp_pp);
InvalidateRect(hwnd2,NULL,TRUE);
/* EnableMenuItem(GetMenu(hwnd),ID_DIAL,MF_ENABLED);
UpdateWindow(hwnd);
*/

return 0;

}

}
hdc = GetDC (hwnd);

hmdc=CreateCompatibleDC(hdc);//BooM
SelectObject (hmdc, hBitmap2);
GetObject(hBitmap2,sizeof(bm),(LPSTR) &bm);


// BitBlt (hdc,(int)(400*x_r), (int)(400-400*y_r), bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);

BitBlt (hdc,290, 360, bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);

// SetTextColor(hdc,RGB(254,42,14));
// SetBkColor(hdc,RGB(0,0,0));
// TextOut(hdc,10,30,"Миссия провалена: Танк поврежден!" ,33);
DeleteDC(hmdc);
hdc = GetDC (hwnd);

hmdc=CreateCompatibleDC(hdc);//Военный говорит
SelectObject (hmdc, hBitmap4);
GetObject(hBitmap4,sizeof(bm),(LPSTR) &bm);
BitBlt (hdc,10, 30, bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);
DeleteDC(hmdc);
hdc = GetDC (hwnd);
hmdc=CreateCompatibleDC(hdc);//Речь военного
SelectObject (hmdc, hBitmap6);
GetObject(hBitmap6,sizeof(bm),(LPSTR) &bm);


BitBlt (hdc,90, 30, bm.bmWidth,bm.bmHeight, hmdc,0,0,SRCCOPY);

DeleteDC(hmdc);










//MessageBox(hwnd, "Цель не сбита", "Цель не сбита",MB_OK | MB_ICONINFORMATION);
// WaitForSingleObject(hSem,INFINITE);
TextOut(memdc2,10,10,str_a,strlen(str_a));
// ReleaseSemaphore(hSem,1,NULL);
// fclose(temp_pp);
InvalidateRect(hwnd2,NULL,TRUE);
return 0;


}


BOOL CALLBACK DialogProc(HWND hDlg,UINT uMsg,WPARAM wParam, LPARAM lParam)
{

switch (uMsg)
{
case WM_INITDIALOG:
sprintf(x_0d,"%5.2f",x_0);
SetDlgItemText(hDlg,IDC_EDIT1,x_0d);
sprintf(y_0d,"%5.2f",y_0);
SetDlgItemText(hDlg,IDC_EDIT2,y_0d);
sprintf(v_d,"%5.2f",v);
SetDlgItemText(hDlg,IDC_EDIT3,v_d);
sprintf(T_0d,"%5.2f",T_0);
SetDlgItemText(hDlg,IDC_EDIT4,T_0d);
return TRUE;

case WM_COMMAND:
switch (LOWORD (wParam))
{

case IDOK:
GetDlgItemText(hDlg,IDC_EDIT1,x_0d,40);
GetDlgItemText(hDlg,IDC_EDIT2,y_0d,40);
GetDlgItemText(hDlg,IDC_EDIT3,v_d,40);
GetDlgItemText(hDlg,IDC_EDIT4,T_0d,40);
// a==GetPrivateProfileInt("parameters","KeyA",NULL,".\\p201nt.ini");
// b==GetPrivateProfileInt("parameters","KeyB",NULL,".\\p201nt.ini");
x_0=(float)atof(x_0d);
y_0=(float)atof(y_0d);
v=(float)atof(v_d);
T_0=(float)atof(T_0d);

hct = CreateThread(NULL,0,ThreadProc,NULL,0,&Tid);

EndDialog(hDlg,TRUE);
return TRUE;

/* if ((dedit*23>46) && (dedit*23<230) && (dedit1*23>46) && (dedit1*23<230))
{ EndDialog(hDlg,TRUE);
return TRUE;}
else MessageBox(hDlg,"Значения вне интервала [2,10].Вы не сможите увидить фигуру полностью.",NULL,MB_OK);*/



case IDCANCEL:
EndDialog(hDlg,TRUE);
return TRUE;

}


}
return FALSE;
}



double O_x(double T)
{
double O;
O=T;

return O;
}

double O_y(double T)
{
double O;
O=tan(3.14/3.)*(T-T*T);

return O;
}

double F_x(double x_r,double y_r,double T)
{
double O,z;
z=sqrt(pow((O_x(T)-x_r),2)+pow((O_y(T)-y_r),2));
O=(O_x(T)-x_r)*v/z;

return O;
}

double F_y(double x_r,double y_r,double T)
{
double O,z;
z=sqrt(pow((O_x(T)-x_r),2)+pow((O_y(T)-y_r),2));
O=(O_y(T)-y_r)*v/z;

return O;
}




/////////////////////////////////////////////////////////
/////////////////////////////////////////////////












Соседние файлы в папке My Program