#include "stdafx.h" #include "tv3dcpp.h" #include #include #include #include #include #include #include "Funkce.h" using namespace std; // bool FullSc=true; bool ZmenRoz=true; float Over=0.95f; float RychlostDOWN=0.2f; float RychlostDOWN2=0.08f; int RychlostRotace=4; int PocetKroku=20;//u rozmíchání float Vzdalenost=50; int RychlostPohybu=1; float Rozestup=0; int Velikost=4; int Startovni=-1,Cilova=0; _bstr_t Pth,Nzv; _bstr_t Slozky[3][100]; TTimer TCAS; int RotA=0, RotB=0; int RozliseniX=1024, RozliseniY=768; struct krchl { int Barvy[6]; }; krchl Krychle[27]; ITVMesh Kostky[27]; _TVCollisionResultPtr KMys; ITVMesh MMenu,MM2,MM3,BB,Poh0,Spk; //ITVMesh Poh1,Poh2,Poh3,Poh4; long BP0;int MenuI1,GM; long BP1, BP2,BP3,BP4, PP1, PP2,PP0,PP5; long PPP[10]; int Pozice[3][3][3]; float Timer=0.0;bool TRun=false; float Polomer = Velikost*2+Rozestup, Polomer2 = Polomer*sqrt(2); float Vzdalenost2=Polomer*3; float UhelRotace=0; int Rotuje=0, RotujiciPrvky[9], SmerRotace=1; krchl RotaceBarev[6]; // ITVEngine pEngine; ITVInputEngine pInput; ITVScene pScene; ITVScreen2DImmediate pScreen2D; ITVScreen2DText pText; ITVGlobals pGlobals; ITVCamera Kamera; /*ITVLightEngine pLight; ITVMaterialFactory pMaterial;*/ // long MysX,MysY,MysScroll; short MysB1,MysB2,MysB3; CONST_TV_KEY KZkratky[25]; float p180 = float(0.017453292519943295769236907684886); float p90=float(1.5707963267948966192313216916398); float p270=p90*3; float p2=float(6.283185307179586476925286766559); float U1=p90-1.01f,U2=0.5f; int PuvodniBarvy[]={1,2,0,0,5,0, 1,2,0,0,0,0, 1,2,3,0,0,0, 1,0,0,0,5,0, 1,0,0,0,0,0, 1,0,3,0,0,0, 1,0,0,4,5,0, 1,0,0,4,0,0, 1,0,3,4,0,0, // - postřední patro 0,2,0,0,5,0, 0,2,0,0,0,0, 0,2,3,0,0,0, 0,0,0,0,5,0, 0,0,0,0,0,0, 0,0,3,0,0,0, 0,0,0,4,5,0, 0,0,0,4,0,0, 0,0,3,4,0,0, // - poslední patro 0,2,0,0,5,6, 0,2,0,0,0,6, 0,2,3,0,0,6, 0,0,0,0,5,6, 0,0,0,0,0,6, 0,0,3,0,0,6, 0,0,0,4,5,6, 0,0,0,4,0,6, 0,0,3,4,0,6}; // void render();void render2(int Vybrany);void render3(int Vybrany,int Kat,int Od,int Max); void Pohyb(); void NovaHra(int Zpusob); void PrebudujKrychli(int Index); void TiskMatice(); void TocHorni(int Patro, float Uhel); void NactiHorni(int Patro); void TocBocni(int Patro, float Uhel); void NactiBocni(int Patro); void TocPredni(int Patro, float Uhel); void NactiPredni(int Patro); void RotujBarvy(int Typ, int Index); void Rozmichat(int Pocet,int Typ); int Menu(int XXX); int Nacitani(int Typ); void UlozitHru(_bstr_t Nazev); void NacistHru(_bstr_t Nazev,int Typ); void Abeceda(void); void PridejDo(_bstr_t X,int Y); void KontrolaMysi(void); void ZobrazMys(bool X); void GetName(void);float roundf(float x); float ZAO(float X,int Sm); void NactiNastaveni(void); void UlozNastaveni(void); void NactiKlavesoveZkratky(void); void NactiNavod(_bstr_t Nazev); void RotujCelouKostky(int Typ); LRESULT CALLBACK WndProc(HWND wpHWnd, UINT msg, WPARAM wParam, LPARAM lParam); // /*******************************************************************/ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { { char A[256], B[256]; HMODULE Module = (HMODULE)hInstance; GetModuleFileName(Module,A,255); AppPath(A,B); Pth=_bstr_t(B);Pth+="Data"; } NactiNastaveni(); NactiKlavesoveZkratky(); if(FullSc)MysX=(WS_POPUP | WS_VISIBLE);else MysX=(WS_OVERLAPPEDWINDOW); if(ZmenRoz) { DEVMODE dmSettings; memset(&dmSettings,0,sizeof(dmSettings)); dmSettings.dmSize = sizeof( dmSettings ); dmSettings.dmPelsWidth= RozliseniX ; dmSettings.dmPelsHeight= RozliseniY; dmSettings.dmBitsPerPel= 32; dmSettings.dmFields= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL; ChangeDisplaySettings(&dmSettings,CDS_FULLSCREEN); } HWND WindowHandle; WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, "Rubikova kostka 3D", NULL }; RegisterClassEx(&wc); WindowHandle = CreateWindow("Rubikova kostka 3D","Rubikova kostka 3D",MysX, 0, 0, RozliseniX, RozliseniY , GetDesktopWindow(), NULL, wc.hInstance, NULL ); if (WindowHandle == NULL){return false;} ShowWindow (WindowHandle, 1); UpdateWindow (WindowHandle); SetFocus (WindowHandle); ShowCursor (FALSE); CoInitialize(NULL); if(!FullSc)MessageBox(WindowHandle, "V tomto režimu dochází k posunu prvků v menu.\nPro správnou funkčnost zvolte FullScreen: Ano", "Upozornění!", MB_OK); //START pEngine = CreateTVEngine(); double Gamma = 0.0; MSG msg; pEngine->Init3DWindowedMode ((long)WindowHandle, true); pEngine->put_DisplayFPS(tvtrue); pEngine->SetAngleSystem(TV_ANGLE_DEGREE); pEngine->SetSearchDirectory(Pth); pEngine->SetShadowMandatory(true); pInput=CreateTVInputEngine(); pScene=CreateTVScene(); pGlobals=CreateTVGlobals(); Kamera=CreateTVCamera(); Kamera->SetViewFrustum(62,200,0.01f); KMys=CreateTVCollisionResult(); /*pLight=CreateTVLightEngine(); pMaterial=CreateTVMaterialFactory(); pMaterial->CreateLightMaterial(0.2f,0.2f,0.2f,1,1,"MA1"); D3DVECTOR V3A; V3A.x=0;V3A.y=20;V3A.z=0; pLight->CreateQuickPointLight(&V3A,1,1,1,20,"SV1",0.1f);*/ pScene->LoadTexture("B1.dat",-1,-1,"B1"); pScene->LoadTexture("B2.dat",-1,-1,"B2"); pScene->LoadTexture("B3.dat",-1,-1,"B3"); pScene->LoadTexture("B4.dat",-1,-1,"B4"); pScene->LoadTexture("B5.dat",-1,-1,"B5"); pScene->LoadTexture("B6.dat",-1,-1,"B6"); pScene->LoadTexture("B0.dat",-1,-1,"B0"); pScene->LoadTexture("M2.dat",-1,-1,"PM"); pScene->LoadTexture("M3.dat",-1,-1,"O1"); pScene->LoadTexture("M4.dat",-1,-1,"O2"); pScene->LoadTexture("M0.dat",-1,-1,"Hve"); pScene->LoadTexture("O1.dat",-1,-1,"Sip"); { krchl Aaa={1,5,2,3,4,6}, Aab={1,3,4,5,2,6}, Aac={2,6,3,1,5,4}, Aad={4,1,3,6,5,2}, Aae={3,2,6,4,1,5}, Aaf={5,2,1,4,6,3}; RotaceBarev[0]=Aaa; RotaceBarev[1]=Aab; RotaceBarev[2]=Aac; RotaceBarev[3]=Aad, RotaceBarev[4]=Aae, RotaceBarev[5]=Aaf; } MMenu=pScene->CreateMeshBuilder("Menu1"); MMenu->AddWall(pGlobals->GetTex("PM"),-20,120,20,120,30,-15,-1,-1,tvtrue,tvfalse); MM2=pScene->CreateMeshBuilder("MM2"); MM3=pScene->CreateMeshBuilder("MM3"); { long GT=pGlobals->GetTex("O1"), GT2=pGlobals->GetTex("O2"); MM2->AddWall(GT,0,0,0.6f,0,10.67f,0,-1,-1,tvtrue,tvfalse); MM2->AddWall(GT2,-5,0.1f,0,0.1f,0.5f,7.73f,-1,-1,tvtrue,tvfalse); MM2->AddWall(GT2,-5,0.1f,0,0.1f,0.5f,2.5f,-1,-1,tvtrue,tvfalse); MM3->AddWall(GT,7.02f,0,7.62f,0,10.67f,0,-1,-1,tvtrue,tvfalse); MM3->AddWall(GT2,7.60f,0.1f,35,0.1f,0.5f,7.73f,-1,-1,tvtrue,tvfalse); MM3->AddWall(GT2,7.60f,0.1f,35,0.1f,0.5f,2.5f,-1,-1,tvtrue,tvfalse); } MM2->SetPosition(-11.8f,-4.95f,119); MM3->SetPosition(-11.8f,-4.95f,119); pScreen2D=CreateTVScreen2DImmediate(); pText=CreateTVScreen2DText(); char Z='A'; for(int i=0;i<=26;i++) { Kostky[i]=pScene->CreateMeshBuilder("M"+Z); //Kostky[i]->SetMaterial(pGlobals->GetMat("MA1"),0); //Kostky[i]->EnableSphereMapping(true,0,0); Z++; } Poh0=pScene->CreateMeshBuilder("Ploh0"); Poh0->AddWall(pGlobals->GetTex("Hve"),-45,100,45,100,60,-30,-1,-1,tvtrue,tvfalse); Spk=pScene->CreateMeshBuilder("Spk"); Spk->AddWall(pGlobals->GetTex("Sip"),0,-4,0,4,8,-4,-1,-1,tvtrue,tvfalse); Spk->SetRotation(180,0,300); //Spk->CreateBox(4,4,4,tvfalse); //Spk->SetPosition(24,0,0); //BARVY BP0=pGlobals->RGBA(0.07f,0.16f,0.2f,0.5f); BP1=pGlobals->RGBA(0.07f,0.2f,0.27f,0.4f); BP3=pGlobals->RGBA(0.07f,0.2f,0.27f,0.6f); BP4=pGlobals->RGBA(0.07f,0.2f,0.27f,0.75f); BP2=pGlobals->RGBA(29.0/256,72.0/256,80.0/256,1); PP1=-3552823; PP5=pGlobals->RGBA(0.7f,0.7f,0.7f,0.7f); for(int i0=0;i0<=9;i0++){PPP[i0]= pGlobals->RGBA(0.4f,0.4f,0.4f,1-float(i0)/20);} NovaHra(0); ZobrazMys(true); //Menu(); //Nacitani(1); //return 0; //LOOP while( msg.message!=WM_QUIT) {if(PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE )){TranslateMessage( &msg ); DispatchMessage( &msg );} else { render(); switch (Rotuje) { case 1:TocHorni(Polomer,UhelRotace);break; case 2:TocHorni(0,UhelRotace);break; case 3:TocHorni(-Polomer,UhelRotace);break; case 6:TocBocni(Polomer,UhelRotace);break; case 5:TocBocni(0,UhelRotace);break; case 4:TocBocni(-Polomer,UhelRotace);break; case 9:TocPredni(Polomer,UhelRotace);break; case 8:TocPredni(0,UhelRotace);break; case 7:TocPredni(-Polomer,UhelRotace);break; } Pohyb(); if(Rotuje==0)KontrolaMysi(); } } //KONEC UlozNastaveni(); KMys=NULL; pScene->DestroyAllMeshes(); pScene->Release(); pScene=NULL; pInput->Release (); pInput = NULL; pEngine->Release (); pEngine = NULL; CoUninitialize(); return 0; } /*******************************************************************/ void render() { pEngine->Clear(false); pScene->RenderAllMeshes(tvfalse); pEngine->RenderToScreen (); } /*******************************************************************/ void render2(int Vybrany) { int i; pEngine->Clear(false); pScene->RenderAllMeshes(tvfalse); pScreen2D->SETTINGS_SetClamping(tvfalse); pScreen2D->ACTION_Begin2D(); pScreen2D->DRAW_FilledBox(137,192,350,549,BP1,BP1,BP1,BP1); pScreen2D->DRAW_Box(137,193,350,549,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(136,192,351,550,BP2,BP2,BP2,BP2); pScreen2D->DRAW_FilledBox(0,711,450,768,BP0,BP0,BP0,BP0); for(i=1;i<=56;i++)pScreen2D->DRAW_Line(450,i+711,551+i,769+i,BP0,BP0); pScreen2D->DRAW_Line(0,710,450,710,BP2,BP2); pScreen2D->DRAW_Line(0,711,450,711,BP2,BP2); pScreen2D->DRAW_Line(450,711,551,769,BP2,BP2); pScreen2D->DRAW_Line(450,710,550,768,BP2,BP2); if(MenuI1==7) { pScreen2D->DRAW_FilledBox(351,280,890,480,BP3,BP3,BP3,BP3); pScreen2D->DRAW_Box(350,280,890,480,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(351,281,889,479,BP2,BP2,BP2,BP2); }else if(MenuI1==6) { pScreen2D->DRAW_FilledBox(351,150,900,576,BP3,BP3,BP3,BP3); pScreen2D->DRAW_Box(351,150,900,576,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(350,149,901,577,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Line(367,204,885,204,PP1,PP1); }else if(MenuI1==5) { pScreen2D->DRAW_Line(367,239,834,239,PP1,PP1); pScreen2D->DRAW_FilledBox(351,185,850,545,BP3,BP3,BP3,BP3); pScreen2D->DRAW_Box(351,185,851,546,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(350,186,850,545,BP2,BP2,BP2,BP2); }else if(MenuI1==1 || MenuI1==111) { pScreen2D->DRAW_FilledBox(351,241,816,413,BP3,BP3,BP3,BP3); pScreen2D->DRAW_Box(351,241,816,413,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(350,240,817,414,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Line(367,289,800,289,PP1,PP1); if(MenuI1==111) { pScreen2D->DRAW_FilledBox(351,415,816,515,BP4,BP4,BP4,BP4); pScreen2D->DRAW_Box(351,413,816,515,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(350,414,817,516,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Line(367,462,800,462,PP1,PP1); } }else if(MenuI1==3) { pScreen2D->DRAW_FilledBox(351,241,815,368,BP3,BP3,BP3,BP3); pScreen2D->DRAW_Box(351,241,816,369,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(350,240,817,370,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Line(367,289,800,289,PP1,PP1); pScreen2D->DRAW_FilledBox(360,330,808,361,BP0,BP0,BP0,BP0); pScreen2D->DRAW_Box(360,330,808,361,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(361,331,807,360,BP2,BP2,BP2,BP2); }else if(MenuI1==4) { pScreen2D->DRAW_FilledBox(351,100,900,640,BP3,BP3,BP3,BP3); pScreen2D->DRAW_Box(351,100,900,640,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(350,99,901,641,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Line(367,149,885,149,PP1,PP1); } pScreen2D->ACTION_End2D(); pText->ACTION_BeginText(); for(i=1;i<=7;i++) { PP0=Vybrany==i?PP2:PP1; if(Vybrany>=11 && Vybrany<=20 && i==1)PP0=PP2; else if(Vybrany>=41 && i==4)PP0=PP2; switch(i) { case 1: pText->NormalFont_DrawText("Nová hra",150,200,PP0,"P1");break; case 2: pText->NormalFont_DrawText("Nahrát",150,250,PP0,"P1");break; case 3: pText->NormalFont_DrawText("Uložit",150,300,PP0,"P1");break; case 4: pText->NormalFont_DrawText("Nastavení",150,350,PP0,"P1");break; case 5: pText->NormalFont_DrawText("Informace",150,400,PP0,"P1");break; case 6: pText->NormalFont_DrawText("Ovládání",150,450,PP0,"P1");break; case 7: pText->NormalFont_DrawText("Ukončit",150,500,PP0,"P1");break; } } pText->TextureFont_DrawText("Rubikova kostka 3D v. 5",24,720,PP5,"P2"); if(MenuI1==7) { pText->NormalFont_DrawText("Ukončit Rubikovu kostku 3D?",376,295,PP1,"P1"); pText->NormalFont_DrawText("E - mail: dvorkaman@centrum.cz",360,453,PP1,"P4"); pText->NormalFont_DrawText("pokračujte klávesou Enter...",456,376,PP1,"P3"); }else if(MenuI1==6) { pText->NormalFont_DrawText("Ovládání hry:",376,165,PP1,"P1"); pText->NormalFont_DrawText("Šipky - rotace kamery",365,215,PP1,"P5"); pText->NormalFont_DrawText("Numpad(2, 4, 6, 8) - rotace celé kostky",365,240,PP1,"P5"); pText->NormalFont_DrawText("F8 - Menu -> Uložit",365,265,PP1,"P5"); pText->NormalFont_DrawText("F9 - Menu -> Načíst",365,290,PP1,"P5"); pText->NormalFont_DrawText("Escape - Menu, návrat",365,315,PP1,"P5"); pText->NormalFont_DrawText("Myš - rotace kamery, rotace celé kostky",365,340,PP1,"P5"); pText->NormalFont_DrawText(" otočení strany kostky",370,365,PP1,"P5"); pText->NormalFont_DrawText("Seznam všech ovládacích kláves naleznete",365,400,PP1,"P5"); pText->NormalFont_DrawText(" v souboru Readme.txt",365,425,PP1,"P5"); pText->NormalFont_DrawText("Nastavení vlastních ovládacích kláves viz.",365,460,PP1,"P5"); pText->NormalFont_DrawText(" položka Nastavení...",365,485,PP1,"P5"); pText->NormalFont_DrawText("Stiskem klávesy Enter zobrazíte soubor Readme",365,540,PP1,"P5"); }else if(MenuI1==5) { pText->NormalFont_DrawText("Informace o hre:",376,200,PP1,"P1"); pText->NormalFont_DrawText("ˇ",596,200,PP1,"P1"); pText->NormalFont_DrawText("Rubikova kostka 3D",376,250,PP1,"P5"); pText->NormalFont_DrawText("Verze hry: 5 (rok 2007)",376,280,PP1,"P5"); pText->NormalFont_DrawText("-- DWAPI programming --",376,320,PP1,"P5"); pText->NormalFont_DrawText("Naprogramoval: Jan Dvorak",376,360,PP1,"P5"); pText->NormalFont_DrawText("E - mail: dvorkaman@centrum.cz",376,390,PP1,"P5"); pText->NormalFont_DrawText("Vytvoreno v programovacím jazyce C++",376,430,PP1,"P5"); pText->NormalFont_DrawText("ˇ",434,430,PP1,"P5"); pText->NormalFont_DrawText("Použitý 3D engine: True Vision 3D",376,460,PP1,"P5"); pText->NormalFont_DrawText("Doufám, že se Vám tato hra bude líbit...",376,510,PP1,"P4"); }else if(MenuI1==1 || MenuI1==111) { pText->NormalFont_DrawText("Vyberte typ nové hry:",376,250,PP1,"P1"); for(i=11;i<=12;i++) { PP0=Vybrany==i?PP2:PP1; switch(i) { case 11: pText->NormalFont_DrawText("Složená kostka",385,308,PP0,"P1");break; case 12: pText->NormalFont_DrawText("Rozmíchat kostku",385,358,PP0,"P1");break; } } if(MenuI1==111) { pText->NormalFont_DrawText("Počet kroku:",376,423,PP1,"P1"); pText->NormalFont_DrawText("°",560,422,PP1,"P11"); _bstr_t o3=(_variant_t)(long)PocetKroku ; pText->NormalFont_DrawText(o3,600,427,PP1,"P11"); pText->NormalFont_DrawText("pokračujte klávesou Enter...",376,473,PP1,"P3"); } }else if(MenuI1==3) { pText->NormalFont_DrawText("Uložit hru:",376,250,PP1,"P1"); pText->NormalFont_DrawText("Zadejte název hry:",360,295,PP1,"P3"); pText->NormalFont_DrawText(Nzv,366,332,PP1,"P5"); }else if(MenuI1==4) { pText->NormalFont_DrawText("Nastavení:",376,110,PP1,"P1"); pText->NormalFont_DrawText("Rychlost animace:",376,160,PP1,"P11"); pText->NormalFont_DrawText("Rychlost pohybu:",376,200,PP1,"P11"); pText->NormalFont_DrawText("Vzdálenost od krychle:",376,240,PP1,"P11"); pText->NormalFont_DrawText("Počet kroku - rozmíchat:",376,280,PP1,"P11"); pText->NormalFont_DrawText("Zvýraznení vybrané krychle:",376,320,PP1,"P11"); pText->NormalFont_DrawText("°",536,280,PP1,"P11"); pText->NormalFont_DrawText("ˇ",490,320,PP1,"P11"); pText->NormalFont_DrawText("Odezva klávesnice - menu:",376,360,PP1,"P11"); pText->NormalFont_DrawText("Odezva kláves. - hodnoty:",376,400,PP1,"P11"); pText->NormalFont_DrawText("Rozlišení 1024x768:",376,440,PP1,"P11"); pText->NormalFont_DrawText("Fullscreen:",376,480,PP1,"P11"); pText->NormalFont_DrawText("Klávesové zkratky:",376,540,PP1,"P11"); pText->NormalFont_DrawText("(odezvy jsou v sekundách, zvýraznení je scale kostky) ",376,600,PP1,"P4"); pText->NormalFont_DrawText("ˇ",664,600,PP1,"P4"); for(i=41;i<=50;i++) { PP0=Vybrany==i?PP2:PP1; float Q; switch(i) { case 41:Q=RychlostRotace;break; case 42:Q=RychlostPohybu;break; case 43:Q=(int)Vzdalenost;break; case 44:Q=PocetKroku;break; case 45:Q=Over;break; case 46:Q=RychlostDOWN;break; case 47:Q=RychlostDOWN2;break; } Nzv=_bstr_t((_variant_t)(float)Q); if(i==48)Nzv=ZmenRoz?_bstr_t("Ano"):_bstr_t("Ne"); if(i==49)Nzv=FullSc?_bstr_t("Ano"):_bstr_t("Ne"); switch(i) { case 41: pText->NormalFont_DrawText(Nzv,780,160,PP0,"P1");break; case 42: pText->NormalFont_DrawText(Nzv,780,200,PP0,"P1");break; case 43: pText->NormalFont_DrawText(Nzv,780,240,PP0,"P1");break; case 44: pText->NormalFont_DrawText(Nzv,780,280,PP0,"P1");break; case 45: pText->NormalFont_DrawText(Nzv,780,320,PP0,"P1");break; case 46: pText->NormalFont_DrawText(Nzv,780,360,PP0,"P1");break; case 47: pText->NormalFont_DrawText(Nzv,780,400,PP0,"P1");break; case 48: pText->NormalFont_DrawText(Nzv,780,440,PP0,"P1");break; case 49: pText->NormalFont_DrawText(Nzv,780,480,PP0,"P1");break; case 50: pText->NormalFont_DrawText("editovat...",700,532,PP0,"P1");break; } } } pText->ACTION_EndText(); pEngine->RenderToScreen (); } /*******************************************************************/ void render3(int Vybrany,int Kat,int Od,int Max) { int i;float o; pEngine->Clear(false); pScene->RenderAllMeshes(tvfalse); pScreen2D->ACTION_Begin2D(); pScreen2D->DRAW_FilledBox(137,40,887,682,BP1,BP1,BP1,BP1); pScreen2D->DRAW_Box(137,40,887,684,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(136,39,888,685,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Line(153,87,871,87,PP1,PP1); pScreen2D->DRAW_FilledBox(151,101,873,140,BP0,BP0,BP0,BP0); pScreen2D->DRAW_Box(150,100,874,141,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(151,101,873,140,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(150,154,874,669,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(151,155,873,668,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Line(840,155,840,668,BP2,BP2); pScreen2D->DRAW_Line(841,155,841,668,BP2,BP2); pScreen2D->DRAW_Line(841,187,873,187,BP2,BP2); pScreen2D->DRAW_Line(841,188,873,188,BP2,BP2); pScreen2D->DRAW_Line(841,636,873,636,BP2,BP2); pScreen2D->DRAW_Line(841,635,873,635,BP2,BP2); //posuvník for(i=10;i>=0;i--) { pScreen2D->DRAW_Line(857-i,167+i,857+i,167+i,PP1,PP1); pScreen2D->DRAW_Line(857-i,657-i,857+i,657-i,PP1,PP1); } o=(85-Max)*1.0f; if(Max<=0)i=629;else i=629-Max*o+Od*o; pScreen2D->DRAW_FilledBox(849,196+Od*o,865,i-2,BP0,BP0,BP0,BP0); pScreen2D->DRAW_Box(847,194+Od*o,867,i,PP1,PP1,PP1,PP1); pScreen2D->DRAW_Box(848,195+Od*o,866,i-1,PP1,PP1,PP1,PP1); //rám výběru pScreen2D->DRAW_FilledBox(157,160+(Vybrany-Od)*28,835,186+(Vybrany-Od)*28,BP0,BP0,BP0,BP0); pScreen2D->DRAW_Box(156,159+(Vybrany-Od)*28,836,187+(Vybrany-Od)*28,BP2,BP2,BP2,BP2); pScreen2D->DRAW_Box(157,160+(Vybrany-Od)*28,835,186+(Vybrany-Od)*28,BP2,BP2,BP2,BP2); //rubikova kostka v. 5 pScreen2D->DRAW_FilledBox(0,711,450,768,BP0,BP0,BP0,BP0); for(i=1;i<=56;i++)pScreen2D->DRAW_Line(450,i+711,551+i,769+i,BP0,BP0); pScreen2D->DRAW_Line(0,710,450,710,BP2,BP2); pScreen2D->DRAW_Line(0,711,450,711,BP2,BP2); pScreen2D->DRAW_Line(450,711,551,769,BP2,BP2); pScreen2D->DRAW_Line(450,710,550,768,BP2,BP2); pScreen2D->ACTION_End2D(); pText->ACTION_BeginText(); pText->TextureFont_DrawText("Rubikova kostka 3D v. 5",24,720,PP5,"P2"); pText->NormalFont_DrawText("Načíst hru -",153,48,PP1,"P1"); pText->NormalFont_DrawText("/",551,48,PP1,"P1"); pText->NormalFont_DrawText("/",662,48,PP1,"P1"); for(i=0;i<=2;i++) { PP0=Kat==i?PP2:PP1; switch(i) { case 0: pText->NormalFont_DrawText("uložené hry",351,48,PP0,"P1");break; case 1: pText->NormalFont_DrawText("triky",576,48,PP0,"P1");break; case 2: pText->NormalFont_DrawText("návody",685,48,PP0,"P1");break; } } //výpi for(i=Od;i<=Od+17;i++) { PP0=Kat==i?PP2:PP1; Nzv=Slozky[Kat][i]; if(Nzv.operator !=(_bstr_t("<>")))pText->NormalFont_DrawText(Nzv,162,160+(i-Od)*28,PP1,"P5"); } pText->NormalFont_DrawText(Slozky[Kat][Vybrany],162,102,PP1,"P11"); pText->ACTION_EndText(); pEngine->RenderToScreen(); } /*******************************************************************/ void Pohyb() { int i; if(TCAS.TBezi){TCAS.Stav();} if((!TCAS.TBezi) && Rotuje==0) { GM=0; if(pInput->IsKeyPressed(TV_KEY_ESCAPE))GM=1; if(pInput->IsKeyPressed(TV_KEY_F8))GM=2;//načíst if(pInput->IsKeyPressed(TV_KEY_F9))GM=3;//uložit if(pInput->IsKeyPressed(TV_KEY_F1))GM=4;//informace o hře if(pInput->IsKeyPressed(TV_KEY_F2))GM=8;//ovládání hry if(pInput->IsKeyPressed(TV_KEY_ALT_LEFT) || pInput->IsKeyPressed(TV_KEY_ALT_RIGHT)) { if(pInput->IsKeyPressed(TV_KEY_X))GM=5;//ukončit ALT+X if(pInput->IsKeyPressed(TV_KEY_N))GM=6;//nová hra ALT+N } if(pInput->IsKeyPressed(TV_KEY_F4))GM=7;//nastavení if(GM!=0) { ZobrazMys(false); i=Menu(GM); ZobrazMys(true); pText->Fonts_DeleteAllFonts(); switch(i) { case 1: NovaHra(0);break; case 2: Rozmichat(PocetKroku,-1);break; } if(i!=-1){TCAS.Spustit(RychlostDOWN);goto Pres;} } } //zkratky ze souboru Zkratky.cfg if(pInput->IsKeyPressed(KZkratky[2]))if(Vzdalenost>(Polomer2+4*(Velikost+Rozestup)))Vzdalenost-=pEngine->TimeElapsed()/100*RychlostPohybu; if(pInput->IsKeyPressed(KZkratky[3]))if(Vzdalenost<95)Vzdalenost+=pEngine->TimeElapsed()/100*RychlostPohybu; if((Rotuje==0) && (!TCAS.TBezi)) for(i=0;i<=24;i++) { if(KZkratky[i]!=0)if(pInput->IsKeyPressed(KZkratky[i])) { switch(i) { case 0: NovaHra(0);break; case 1: Rozmichat(1,-1);break; //- 2 3 jsou výše case 4: UlozitHru("QuickSave");break; case 5: NacistHru("QuickSave",1);break; case 6: SmerRotace=1;NactiBocni(1);Rotuje=4;break; case 7: SmerRotace=-1;NactiBocni(1);Rotuje=4;break; case 8: SmerRotace=1;NactiBocni(2);Rotuje=5;break; case 9: SmerRotace=-1;NactiBocni(2);Rotuje=5;break; case 10: SmerRotace=1;NactiBocni(3);Rotuje=6;break; case 11: SmerRotace=-1;NactiBocni(3);Rotuje=6;break; case 12: SmerRotace=1;NactiHorni(1);Rotuje=1;break; case 13: SmerRotace=-1;NactiHorni(1);Rotuje=1;break; case 14: SmerRotace=1;NactiHorni(2);Rotuje=2;break; case 15: SmerRotace=-1;NactiHorni(2);Rotuje=2;break; case 16: SmerRotace=1;NactiHorni(3);Rotuje=3;break; case 17: SmerRotace=-1;NactiHorni(3);Rotuje=3;break; case 18: SmerRotace=1;NactiPredni(1);Rotuje=7;break; case 19: SmerRotace=-1;NactiPredni(1);Rotuje=7;break; case 20: SmerRotace=1;NactiPredni(2);Rotuje=8;break; case 21: SmerRotace=-1;NactiPredni(2);Rotuje=8;break; case 22: SmerRotace=1;NactiPredni(3);Rotuje=9;break; case 23: SmerRotace=-1;NactiPredni(3);Rotuje=9;break; case 24: PostQuitMessage(0);break; } TCAS.Spustit(RychlostDOWN); } } //-->Zkratky ze souory Zkratky.cgf>> if(pInput->IsKeyPressed(TV_KEY_NUMPAD4))RotujCelouKostky(-3); if(pInput->IsKeyPressed(TV_KEY_NUMPAD6))RotujCelouKostky(3); if(pInput->IsKeyPressed(TV_KEY_NUMPAD2))RotujCelouKostky(-2); if(pInput->IsKeyPressed(TV_KEY_NUMPAD8))RotujCelouKostky(2); if(pInput->IsKeyPressed(TV_KEY_RIGHT)) { if(U1>(-p90+1))U1-=pEngine->TimeElapsed()/1500*RychlostPohybu;else U1=(-p90+1); } if(pInput->IsKeyPressed(TV_KEY_LEFT)) { if(U1<(p90-1))U1+=pEngine->TimeElapsed()/1500*RychlostPohybu;else U1=(p90-1); } if(pInput->IsKeyPressed(TV_KEY_UP)) { if(U2<(p90-0.4f))U2+=pEngine->TimeElapsed()/1500*RychlostPohybu;else U2=(p90-0.4f); } if(pInput->IsKeyPressed(TV_KEY_DOWN)) { if(U2>(-p90+0.4f))U2-=pEngine->TimeElapsed()/1500*RychlostPohybu;else U2=(-p90+0.4f); } Pres: Kamera->SetCamera(Vzdalenost*cosf(U2)*cosf(U1),Vzdalenost*sinf(U2),Vzdalenost*cosf(U2)*sinf(U1),0,0,0); Spk->SetPosition(Vzdalenost2*cosf(U1+p90),0,Vzdalenost2*sinf(U1+p90)); } /*******************************************************************/ void NovaHra(int Zpusob) { Rotuje=0;UhelRotace=0; //rozmístění RotA=0;RotB=0; int A=2*Velikost,B=Rozestup; int X=-A-B, Y=A+B, Zz=X, Z,O,P=0; for(Z=0;Z<=26;Z++) { if(Zpusob==0) { for(O=0;O<=5;O++) { Krychle[Z].Barvy[O]=PuvodniBarvy[P]; P++; } } PrebudujKrychli(Z); Kostky[Z]->SetPosition(X,Y,Zz); X+=(A+B); if (X>A+B) { X=-A-B; Zz+=(A+B); if (Zz>A+B) { Zz=-A-B; Y-=(A+B); } } } //Původní poloha: Zz=0; for(Y=0;Y<=2;Y++) for(Z=0;Z<=2;Z++) for(X=0;X<=2;X++) { Zz++; Pozice[X][Z][Y]=Zz; } // } /*******************************************************************/ void PrebudujKrychli(int Index) { _bstr_t Tex; int A=Velikost; int Z; Kostky[Index]->ResetMesh(); for(int i=1;i<=6;i++) { Z=Krychle[Index].Barvy[i-1]; switch (Z) { case 0:Tex=_bstr_t("B0");break; case 1:Tex=_bstr_t("B1");break; case 2:Tex=_bstr_t("B2");break; case 3:Tex=_bstr_t("B3");break; case 4:Tex=_bstr_t("B4");break; case 5:Tex=_bstr_t("B5");break; case 6:Tex=_bstr_t("B6");break; } switch (i) { case 3: Kostky[Index]->AddWall(pGlobals->GetTex(Tex), A,-A, A, A,2*A,-A,-1,-1,tvtrue,tvfalse);break;//prava case 5: Kostky[Index]->AddWall(pGlobals->GetTex(Tex),-A,-A,-A, A,2*A,-A,-1,-1,tvtrue,tvfalse);break;//leva case 2: Kostky[Index]->AddWall(pGlobals->GetTex(Tex),-A,-A, A,-A,2*A,-A,-1,-1,tvtrue,tvfalse);break;//predni case 4: Kostky[Index]->AddWall(pGlobals->GetTex(Tex),-A, A, A, A,2*A,-A,-1,-1,tvtrue,tvfalse);break;//zadni case 1:Kostky[Index]->AddFloor(pGlobals->GetTex(Tex),-A,-A, A, A, A,-1,-1,tvtrue,tvfalse);break;//horni case 6:Kostky[Index]->AddFloor(pGlobals->GetTex(Tex),-A,-A, A, A,-A,-1,-1,tvtrue,tvfalse);break;//spodni } } } /*******************************************************************/ void TiskMatice() { ofstream Zapis("Matice.txt"); for(int Y=0;Y<=2;Y++) { for(int Z=0;Z<=2;Z++) { for(int X=0;X<=2;X++) { Zapis<90){Uhel=90;} if(Uhel<-90){Uhel=-90;} Kostky[RotujiciPrvky[5]]->SetPosition(Polomer*cosf(Uhel*p180),Patro,Polomer*sinf(Uhel*p180)); Kostky[RotujiciPrvky[1]]->SetPosition(Polomer*cosf((Uhel-90)*p180),Patro,Polomer*sinf((Uhel-90)*p180)); Kostky[RotujiciPrvky[7]]->SetPosition(Polomer*cosf((Uhel+90)*p180),Patro,Polomer*sinf((Uhel+90)*p180)); Kostky[RotujiciPrvky[3]]->SetPosition(Polomer*cosf((Uhel+180)*p180),Patro,Polomer*sinf((Uhel+180)*p180)); Kostky[RotujiciPrvky[2]]->SetPosition(Polomer2*cosf((Uhel-45)*p180),Patro,Polomer2*sinf((Uhel-45)*p180)); Kostky[RotujiciPrvky[8]]->SetPosition(Polomer2*cosf((Uhel+45)*p180),Patro,Polomer2*sinf((Uhel+45)*p180)); Kostky[RotujiciPrvky[6]]->SetPosition(Polomer2*cosf((Uhel-225)*p180),Patro,Polomer2*sinf((Uhel-225)*p180)); Kostky[RotujiciPrvky[0]]->SetPosition(Polomer2*cosf((Uhel+225)*p180),Patro,Polomer2*sinf((Uhel+225)*p180)); for (int i=0;i<=8;i++) {Kostky[RotujiciPrvky[i]]->SetRotation(0,-Uhel,0);} if(abs(UhelRotace)<90){UhelRotace+=SmerRotace*RychlostRotace*pEngine->TimeElapsed()/50;} else { //Změny pořadí prvků Rotuje=0; UhelRotace=0; int o,p; for(o=0;o<=8;o++) { p=RotujiciPrvky[o]; Kostky[p]->SetRotation(0,0,0); if (SmerRotace==1){RotujBarvy(0,p);} else {RotujBarvy(1,p);} PrebudujKrychli(p); } int Pom[3][3]; int ii,oo,uu; if(Patro==Polomer){oo=0;} else if(Patro==0){oo=1;} else {oo=2;} for(ii=0;ii<=2;ii++) { for(uu=0;uu<=2;uu++) { Pom[ii][uu]=Pozice[ii][uu][oo]; } } for(ii=0;ii<=2;ii++) { for(uu=0;uu<=2;uu++) { if(SmerRotace==1){Pozice[uu][ii][oo]=Pom[ii][2-uu];} else{Pozice[uu][ii][oo]=Pom[2-ii][uu];} } } } } void NactiHorni(int Patro) { int i=0; for(int Z=0;Z<=2;Z++) for(int X=0;X<=2;X++) { RotujiciPrvky[i]=Pozice[X][Z][Patro-1]-1; i++; } } /*******************************************************************/ void NactiBocni(int Patro) { int i=0; for(int Z=0;Z<=2;Z++) for(int Y=0;Y<=2;Y++) { RotujiciPrvky[i]=Pozice[Patro-1][Y][Z]-1; //!!! opačně, jen kvůli lepší orientaci i++; } } void TocBocni(int Patro, float Uhel) { if(Uhel>90){Uhel=90;} if(Uhel<-90){Uhel=-90;} Kostky[RotujiciPrvky[1]]->SetPosition(Patro,Polomer*cosf((Uhel-0)*p180),Polomer*sinf((Uhel-0)*p180)); Kostky[RotujiciPrvky[3]]->SetPosition(Patro,Polomer*cosf((Uhel-90)*p180),Polomer*sinf((Uhel-90)*p180)); Kostky[RotujiciPrvky[5]]->SetPosition(Patro,Polomer*cosf((Uhel+90)*p180),Polomer*sinf((Uhel+90)*p180)); Kostky[RotujiciPrvky[7]]->SetPosition(Patro,Polomer*cosf((Uhel+180)*p180),Polomer*sinf((Uhel+180)*p180)); Kostky[RotujiciPrvky[0]]->SetPosition(Patro,Polomer2*cosf((Uhel-45)*p180),Polomer2*sinf((Uhel-45)*p180)); Kostky[RotujiciPrvky[2]]->SetPosition(Patro,Polomer2*cosf((Uhel+45)*p180),Polomer2*sinf((Uhel+45)*p180)); Kostky[RotujiciPrvky[8]]->SetPosition(Patro,Polomer2*cosf((Uhel-225)*p180),Polomer2*sinf((Uhel-225)*p180)); Kostky[RotujiciPrvky[6]]->SetPosition(Patro,Polomer2*cosf((Uhel+225)*p180),Polomer2*sinf((Uhel+225)*p180)); for (int i=0;i<=8;i++) {Kostky[RotujiciPrvky[i]]->SetRotation(Uhel,0,0);} if(abs(UhelRotace)<90){UhelRotace+=SmerRotace*RychlostRotace*pEngine->TimeElapsed()/50;} else { Rotuje=0; UhelRotace=0; int o,p; for(o=0;o<=8;o++) { p=RotujiciPrvky[o]; Kostky[p]->SetRotation(0,0,0); if (SmerRotace==1){RotujBarvy(2,p);} else {RotujBarvy(3,p);} PrebudujKrychli(p); } int Pom[3][3]; int ii,oo,uu; if(Patro==Polomer){oo=2;} else if(Patro==0){oo=1;} else {oo=0;} for(ii=0;ii<=2;ii++) { for(uu=0;uu<=2;uu++) { Pom[ii][uu]=Pozice[oo][uu][ii]; } } for(ii=0;ii<=2;ii++) { for(uu=0;uu<=2;uu++) { if(SmerRotace==-1){Pozice[oo][ii][uu]=Pom[ii][2-uu];} else{Pozice[oo][ii][uu]=Pom[2-ii][uu];} } } } } /*******************************************************************/ void NactiPredni(int Patro) { int i=0; for(int X=0;X<=2;X++) for(int Y=0;Y<=2;Y++) { RotujiciPrvky[i]=Pozice[Y][Patro-1][X]-1;//opět opačně i++; } } void TocPredni(int Patro, float Uhel) { if(Uhel>90){Uhel=90;} if(Uhel<-90){Uhel=-90;} Kostky[RotujiciPrvky[1]]->SetPosition(Polomer*cosf((Uhel+90)*p180),Polomer*sinf((Uhel+90)*p180),Patro); Kostky[RotujiciPrvky[3]]->SetPosition(Polomer*cosf((Uhel+180)*p180),Polomer*sinf((Uhel+180)*p180),Patro); Kostky[RotujiciPrvky[5]]->SetPosition(Polomer*cosf((Uhel+0)*p180),Polomer*sinf((Uhel+0)*p180),Patro); Kostky[RotujiciPrvky[7]]->SetPosition(Polomer*cosf((Uhel-90)*p180),Polomer*sinf((Uhel-90)*p180),Patro); Kostky[RotujiciPrvky[0]]->SetPosition(Polomer2*cosf((Uhel+135)*p180),Polomer2*sinf((Uhel+135)*p180),Patro); Kostky[RotujiciPrvky[2]]->SetPosition(Polomer2*cosf((Uhel+45)*p180),Polomer2*sinf((Uhel+45)*p180),Patro); Kostky[RotujiciPrvky[6]]->SetPosition(Polomer2*cosf((Uhel-135)*p180),Polomer2*sinf((Uhel-135)*p180),Patro); Kostky[RotujiciPrvky[8]]->SetPosition(Polomer2*cosf((Uhel-45)*p180),Polomer2*sinf((Uhel-45)*p180),Patro); for (int i=0;i<=8;i++) {Kostky[RotujiciPrvky[i]]->SetRotation(0,0,Uhel);} if(abs(UhelRotace)<90){UhelRotace+=SmerRotace*RychlostRotace*pEngine->TimeElapsed()/50;} else { Rotuje=0; UhelRotace=0; int o,p; for(o=0;o<=8;o++) { p=RotujiciPrvky[o]; Kostky[p]->SetRotation(0,0,0); if (SmerRotace==1){RotujBarvy(4,p);} else {RotujBarvy(5,p);} PrebudujKrychli(p); } int Pom[3][3]; int ii,oo,uu; if(Patro==Polomer){oo=2;} else if(Patro==0){oo=1;} else {oo=0;} for(ii=0;ii<=2;ii++) { for(uu=0;uu<=2;uu++) { Pom[uu][ii]=Pozice[ii][oo][uu]; } } for(ii=0;ii<=2;ii++) { for(uu=0;uu<=2;uu++) { if(SmerRotace==1){Pozice[ii][oo][uu]=Pom[ii][2-uu];} else{Pozice[ii][oo][uu]=Pom[2-ii][uu];} } } } } /*******************************************************************/ void RotujBarvy(int Typ, int Index) { krchl T=Krychle[Index]; krchl A; int o; for(int i=0;i<=5;i++) { o=RotaceBarev[Typ].Barvy[i]; A.Barvy[i]= T.Barvy[o-1]; } Krychle[Index]=A; } /*******************************************************************/ int Menu(int XXX) { MM3->SetPosition(-11.8f,-4.95f,119); pText->NormalFont_Create("P1","Galaxy BT",28,false,false,false); pText->NormalFont_Create("P11","Galaxy BT",24,false,false,false); pText->NormalFont_Create("P3","Galaxy BT",20,false,true,false); pText->NormalFont_Create("P4","Galaxy BT",14,false,false,false); pText->TextureFont_Create("P2","Galaxy BT",28,false,false,false,true); pText->NormalFont_Create("P5","Galaxy BT",18,false,false,false); Kamera->SetCamera(0,0,100,0,0,101); MenuI1=0; int Volba=0; int Ret; int Vybrany,In=0,Smer=1; int VybMenu=0;bool Anim=false; float PX=-11.8f,PDO=0;int SmerAn=1,JakaAnimace=0; Vybrany=1; TTimer CAS,BRV; CAS.Spustit(RychlostDOWN); BRV.Spustit(0.1f); switch(XXX) { case 2: Vybrany=2;Anim=true; VybMenu=Vybrany; JakaAnimace=2;SmerAn=-1; PX=4.2f; break; case 3: Vybrany=3;Anim=true; VybMenu=Vybrany; JakaAnimace=3;SmerAn=-1; PX=2.09f; GetName();MenuI1=VybMenu; break; case 4: Vybrany=5;Anim=true; VybMenu=Vybrany; JakaAnimace=5;SmerAn=-1; PX=3.1f;MenuI1=VybMenu; break; case 5: Vybrany=7;Anim=true; VybMenu=Vybrany; JakaAnimace=7;SmerAn=-1; PX=4.23f;MenuI1=VybMenu; break; case 6: Vybrany=11;Anim=true; VybMenu=1; JakaAnimace=1;SmerAn=-1; PX=2.09f;MenuI1=VybMenu; break; case 7: Vybrany=41;Anim=true; VybMenu=4; JakaAnimace=4;SmerAn=-1; PX=4.6f;MenuI1=VybMenu; break; case 8: Vybrany=6;Anim=true; VybMenu=Vybrany; JakaAnimace=6;SmerAn=-1; PX=4.58f;MenuI1=VybMenu; break; } while(Volba!=-1) { CAS.Stav(); BRV.Stav(); if(Anim) //animace posunu menu { PX+=SmerAn*pEngine->TimeElapsed()/70; switch(JakaAnimace) { case -1: if(PX>=7.6f && SmerAn==1) { PX=7.6f;SmerAn=-1; MenuI1=0; }else if(PX<=-11.8f && SmerAn==-1) { PX=-11.8f;Anim=false; } break; case 1: if(PX>=7.62f && SmerAn==1) { PX=7.62f;SmerAn=-1; MenuI1=VybMenu; }else if(PX<=2.09f && SmerAn==-1) { PX=2.09f;Anim=false; } break; case 2: if(PX>=7.62f && SmerAn==1) { PX=7.62f;SmerAn=-1; MenuI1=VybMenu; }else if(PX<=4.2f && SmerAn==-1) { PX=4.2f; MM3->SetPosition(PX,-4.95f,119); Volba=Nacitani(1); if(Volba==-1)return 22; MM3->SetPosition(-11.8f,-4.95f,119); SmerAn=1;JakaAnimace=-1; CAS.Spustit(0.5f); Vybrany=2;VybMenu=0; } break; case 3: if(PX>=7.62f && SmerAn==1) { PX=7.62f;SmerAn=-1; GetName(); MenuI1=VybMenu; }else if(PX<=2.09f && SmerAn==-1) { PX=2.09f;Anim=false; } break; case 4: if(PX>=7.62f && SmerAn==1) { PX=7.62f;SmerAn=-1; MenuI1=VybMenu; }else if(PX<=4.6f && SmerAn==-1) { PX=4.6f;Anim=false; } break; case 5: if(PX>=7.6f && SmerAn==1) { PX=7.6f;SmerAn=-1; MenuI1=VybMenu; }else if(PX<=3.1f && SmerAn==-1) { PX=3.1f;Anim=false; } break; case 6: if(PX>=7.6f && SmerAn==1) { PX=7.6f;SmerAn=-1; MenuI1=VybMenu; }else if(PX<=4.58f && SmerAn==-1) { PX=4.58f;Anim=false; } break; case 7: if(PX>=7.6f && SmerAn==1) { PX=7.6f;SmerAn=-1; MenuI1=VybMenu; }else if(PX<=4.23f && SmerAn==-1) { PX=4.23f;Anim=false; } break; } MM3->SetPosition(PX,-4.95f,119); } if(!BRV.TBezi)//Timer - blikání vybrané položky { In+=Smer; if(In==0 || In==9) { Smer=-Smer; BRV.Spustit(0.3f); } else BRV.Spustit(0.1f); } //klávesy// if (!CAS.TBezi && !Anim) //Timer - opakování stisku kláves { if(VybMenu==3) { if(pInput->IsKeyPressed(TV_KEY_DELETE)) { Nzv=_bstr_t("_"); CAS.Spustit(RychlostDOWN); } if(pInput->IsKeyPressed(TV_KEY_BACKSPACE) && (Nzv.length()>=2)) { string A=Nzv; A=A.substr(0,A.length()-1); Nzv=A.data(); CAS.Spustit(RychlostDOWN); } _bstr_t XX=Nzv; Abeceda(); if(pInput->IsKeyPressed(CONST_TV_KEY(28))) { UlozitHru(Nzv); return-1; } if(XX.operator !=(Nzv))CAS.Spustit(RychlostDOWN); } if(pInput->IsKeyPressed(TV_KEY_ESCAPE)) { switch(VybMenu) { case 0:return 0;break; case 1:Vybrany=1; case 6:case 5:case 3: case 7:JakaAnimace=-1;SmerAn=1;VybMenu=0;Anim=true;break; case 111:VybMenu=1;Vybrany=12;MenuI1=1;CAS.Spustit(RychlostDOWN);break; case 4:Vybrany=4;JakaAnimace=-1;SmerAn=1;VybMenu=0;Anim=true;break; } } //if(pInput->IsKeyPressed(TV_KEY_Q)){Volba=-1;Ret=-1;PostQuitMessage(0);} if(pInput->IsKeyPressed(TV_KEY_DOWN)) { switch(VybMenu) { case 0:Vybrany++; if(Vybrany==8)Vybrany=1; CAS.Spustit(RychlostDOWN); break; case 1:Vybrany++; if(Vybrany==13)Vybrany=11; CAS.Spustit(RychlostDOWN); break; case 4:Vybrany++; if(Vybrany==51)Vybrany=41; CAS.Spustit(RychlostDOWN); break; } } if(pInput->IsKeyPressed(TV_KEY_UP)) { switch(VybMenu) { case 0: Vybrany--; if(Vybrany==0)Vybrany=7; CAS.Spustit(RychlostDOWN); break; case 1:Vybrany--; if(Vybrany==10)Vybrany=12; CAS.Spustit(RychlostDOWN); break; case 4:Vybrany--; if(Vybrany==40)Vybrany=50; CAS.Spustit(RychlostDOWN); break; } } if(pInput->IsKeyPressed(TV_KEY_RIGHT)) { switch(VybMenu) { case 111: if(PocetKroku<200)PocetKroku++; CAS.Spustit(RychlostDOWN2); break; case 4: switch(Vybrany) { case 41:if(RychlostRotace<15)RychlostRotace++;break; case 42:if(RychlostPohybu<10)RychlostPohybu++;break; case 43:if(Vzdalenost<95)Vzdalenost++;break; case 44:if(PocetKroku<200)PocetKroku++;break; case 45:if(Over<0.99f)Over=ZAO(Over,1);break; case 46:if(RychlostDOWN<0.75f)RychlostDOWN=ZAO(RychlostDOWN,1);break; case 47:if(RychlostDOWN2<0.75f)RychlostDOWN2=ZAO(RychlostDOWN2,1);break; case 48:ZmenRoz=ZmenRoz?false:true;break; case 49:FullSc=FullSc?false:true;break; } CAS.Spustit(RychlostDOWN2);break; } } if(pInput->IsKeyPressed(TV_KEY_LEFT)) { switch(VybMenu) { case 111: if(PocetKroku>1)PocetKroku--; CAS.Spustit(RychlostDOWN2); break; case 4: switch(Vybrany) { case 41:if(RychlostRotace>1)RychlostRotace--;break; case 42:if(RychlostPohybu>1)RychlostPohybu--;break; case 43:if(Vzdalenost>(Polomer2+4*(Velikost+Rozestup)))Vzdalenost--;break; case 44:if(PocetKroku>1)PocetKroku--;break; case 45:if(Over>0.8f)Over=ZAO(Over,-1);break; case 46:if(RychlostDOWN>0.05f)RychlostDOWN=ZAO(RychlostDOWN,-1);break; case 47:if(RychlostDOWN2>0.05f)RychlostDOWN2=ZAO(RychlostDOWN2,-1);break; case 48:ZmenRoz=ZmenRoz?false:true;break; case 49:FullSc=FullSc?false:true;break; } CAS.Spustit(RychlostDOWN2);break; } } if(pInput->IsKeyPressed(CONST_TV_KEY(28)) || pInput->IsKeyPressed(TV_KEY_SPACE)) { switch(VybMenu) { case 0: VybMenu=Vybrany;Anim=true; SmerAn=1;JakaAnimace=Vybrany; if(Vybrany==1)Vybrany=11; else if(Vybrany==4)Vybrany=41; break; case 1: if(Vybrany==11)return 1; else {VybMenu=111;MenuI1=111;break;} case 7: Volba=-1;Ret=-1;PostQuitMessage(0);break; case 6:system("notepad "+Pth+"\\..\\Readme.txt");break; case 111: return 2;break; case 4:if(Vybrany==49)system("notepad "+Pth+"\\Zkratky.cfg") ;break; } CAS.Spustit(RychlostDOWN); } } // // PP2=PPP[In]; render2(Vybrany); } return Ret; } /*******************************************************************/ void Rozmichat(int Pocet,int Typ) { _Cisla Nah; int C1; for(int c2=1;c2<=Pocet;c2++) { if(Typ==-1)C1=Nah.NahodneCislo(17);else C1=Typ; switch(C1) { case 0: SmerRotace=1;NactiHorni(1);Rotuje=1;break; case 1: SmerRotace=1;NactiHorni(2);Rotuje=2;break; case 2: SmerRotace=1;NactiHorni(3);Rotuje=3;break; case 3: SmerRotace=-1;NactiHorni(1);Rotuje=1;break; case 4: SmerRotace=-1;NactiHorni(2);Rotuje=2;break; case 5: SmerRotace=-1;NactiHorni(3);Rotuje=3;break; case 6: SmerRotace=1;NactiBocni(1);Rotuje=4;break; case 7: SmerRotace=1;NactiBocni(2);Rotuje=5;break; case 8: SmerRotace=1;NactiBocni(3);Rotuje=6;break; case 9: SmerRotace=-1;NactiBocni(1);Rotuje=4;break; case 10: SmerRotace=-1;NactiBocni(2);Rotuje=5;break; case 11: SmerRotace=-1;NactiBocni(3);Rotuje=6;break; case 12: SmerRotace=1;NactiPredni(1);Rotuje=7;break; case 13: SmerRotace=1;NactiPredni(2);Rotuje=8;break; case 14: SmerRotace=1;NactiPredni(3);Rotuje=9;break; case 15: SmerRotace=-1;NactiPredni(1);Rotuje=7;break; case 16: SmerRotace=-1;NactiPredni(2);Rotuje=8;break; case 17: SmerRotace=-1;NactiPredni(3);Rotuje=9;break; } if(SmerRotace==1) UhelRotace=90; else UhelRotace=-90; switch(Rotuje) { case 1:TocHorni(Polomer,UhelRotace);break; case 2:TocHorni(0,UhelRotace);break; case 3:TocHorni(-Polomer,UhelRotace);break; case 6:TocBocni(Polomer,UhelRotace);break; case 5:TocBocni(0,UhelRotace);break; case 4:TocBocni(-Polomer,UhelRotace);break; case 9:TocPredni(Polomer,UhelRotace);break; case 8:TocPredni(0,UhelRotace);break; case 7:TocPredni(-Polomer,UhelRotace);break; } } //FOR--> } /*******************************************************************/ int Nacitani(int Typ) { //Načtení souborů WIN32_FIND_DATA Najdi; HANDLE Clen= INVALID_HANDLE_VALUE; int i,o; string A; for(i=0;i<=99;i++) { Slozky[0][i]=_bstr_t("<>"); Slozky[1][i]=_bstr_t("<>"); Slozky[2][i]=_bstr_t("<>"); } char Cesta1[MAX_PATH]; char Cesta2[MAX_PATH]; char Cesta3[MAX_PATH]; string C1=Pth+""; o=C1.length(); for(i=0;i<=MAX_PATH-1;i++) { if(i<=o)Cesta1[i]=C1[i]; else Cesta1[i]=' '; if(i<=o)Cesta2[i]=C1[i]; else Cesta2[i]=' '; if(i<=o)Cesta3[i]=C1[i]; else Cesta3[i]=' '; } int PCesta1=0,PCesta2=0,PCesta3=0; strncat(Cesta1,"\\Save\\*.svg",11); strncat(Cesta2,"\\Triky\\*.sva",12); strncat(Cesta3,"\\Navody\\*.txt",13); //- Složka SAVE Clen=FindFirstFile(Cesta1,&Najdi); if(Clen!=INVALID_HANDLE_VALUE) { do { if(!(Najdi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && PCesta1<99) { A=Najdi.cFileName; i=(int)A.length(); A=A.substr(0,i-4); Slozky[0][PCesta1]=A.data(); PCesta1++; } }while (FindNextFile(Clen,&Najdi)); } FindClose(&Najdi); //- Složka TRIKY Clen=FindFirstFile(Cesta2,&Najdi); if(Clen!=INVALID_HANDLE_VALUE) { do { if(!(Najdi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && PCesta2<99) { A=Najdi.cFileName; i=(int)A.length(); A=A.substr(0,i-4); Slozky[1][PCesta2]=A.data(); PCesta2++; } }while (FindNextFile(Clen,&Najdi)); } FindClose(&Najdi); // //- Složka Navody Clen=FindFirstFile(Cesta3,&Najdi); if(Clen!=INVALID_HANDLE_VALUE) { do { if(!(Najdi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && PCesta3<99) { A=Najdi.cFileName; i=(int)A.length(); A=A.substr(0,i-4); Slozky[2][PCesta3]=A.data(); PCesta3++; } }while (FindNextFile(Clen,&Najdi)); } FindClose(&Najdi); // int Zpet=0; int Vyber=0;int Kategorie=0,In2=0,Smer2=1,Od=0; TTimer CAS2,BRV2; CAS2.Spustit(RychlostDOWN); BRV2.Spustit(0.3f); while(Zpet!=-1) { if(!BRV2.TBezi)//Timer - blikání vybrané položky { In2+=Smer2; if(In2==0 || In2==9) { Smer2=-Smer2; BRV2.Spustit(0.3f); } else BRV2.Spustit(0.1f); }else BRV2.Stav(); //klávesy if(CAS2.TBezi)CAS2.Stav();else { if(Kategorie==0)i=PCesta1;else if(Kategorie==1)i=PCesta2;else i=PCesta3; if(pInput->IsKeyPressed(TV_KEY_ESCAPE))return 0; //if(pInput->IsKeyPressed(TV_KEY_Q))return -1; if(pInput->IsKeyPressed(TV_KEY_RIGHT)) { Kategorie++; if(Kategorie==3)Kategorie=0; Vyber=0;Od=0; CAS2.Spustit(RychlostDOWN); } if(pInput->IsKeyPressed(TV_KEY_LEFT)) { Kategorie--; if(Kategorie==-1)Kategorie=2; Vyber=0;Od=0; CAS2.Spustit(RychlostDOWN); } if(pInput->IsKeyPressed(TV_KEY_DOWN)) { if(Vyber17)Od=Vyber-17; CAS2.Spustit(RychlostDOWN2); } if(pInput->IsKeyPressed(TV_KEY_UP)) { if(Vyber==Od && Od>0)Od--; if(Vyber>0)Vyber--; CAS2.Spustit(RychlostDOWN2); } if(pInput->IsKeyPressed(CONST_TV_KEY(28)) || pInput->IsKeyPressed(TV_KEY_SPACE)) { _bstr_t Cst=Slozky[Kategorie][Vyber]; if(Kategorie!=2)NacistHru(Cst,Kategorie+1);else NactiNavod(Cst); return-1; } } // PP2=PPP[In2]; if(Kategorie==0)i=PCesta1;else i=PCesta2; render3(Vyber,Kategorie,Od,i-18); } return-1; } /*******************************************************************/ void UlozitHru(_bstr_t Nazev) { _bstr_t C1(Pth+"\\Save\\" +Nazev+".svg"); int a,b,c,d; ofstream Soubor(C1); for(c=0;c<=2;c++) { for(b=0;b<=2;b++) { for(a=0;a<=2;a++) { for(d=0;d<=5;d++) { Soubor<>Z; switch(Z) { case 'F':i=14;break; case 'f':i=17;break; case 'B':i=15;break; case 'b':i=12;break; case 'T':i=13;break; case 't':i=16;break; case 'r':i=6;break; case 'R':i=9;break; case 'l':i=11;break; case 'L':i=8;break; case 's':i=7;break; case 'S':i=10;break; case 'u':i=0;break; case 'U':i=3;break; case 'd':i=5;break; case 'D':i=2;break; case 'm':i=1;break; case 'M':i=4;break; default:i=-1; } if(i!=-1)Rozmichat(1,i); }while(!Soubor.eof()); Soubor.close(); } /*******************************************************************/ void NacistHru(_bstr_t Nazev,int Typ) { _bstr_t C1; if(Typ==1)C1=_bstr_t(Pth+"\\Save\\" +Nazev+".svg"); else C1=_bstr_t(Pth+"\\Triky\\" +Nazev+".sva"); int a,d; char Z; ifstream Soubor(C1); for(a=0;a<=26;a++) { for(d=0;d<=5;d++) { Soubor>>Z; Krychle[a].Barvy[d]=Z-48; Z=Z; } } Soubor.close(); NovaHra(1); } /*******************************************************************/ void Abeceda(void) { int Sh; if(pInput->IsKeyPressed(CONST_TV_KEY(54)) || pInput->IsKeyPressed(CONST_TV_KEY(42)))Sh=1; else Sh=0; if(pInput->IsKeyPressed(CONST_TV_KEY(53)))PridejDo("-",Sh+1); if(pInput->IsKeyPressed(CONST_TV_KEY(74)))PridejDo("-",-1); if(pInput->IsKeyPressed(CONST_TV_KEY(52)))PridejDo(".",Sh+3); if(pInput->IsKeyPressed(TV_KEY_SPACE))PridejDo(" ",-1); if(pInput->IsKeyPressed(TV_KEY_A))PridejDo("A",Sh); if(pInput->IsKeyPressed(TV_KEY_B))PridejDo("B",Sh); if(pInput->IsKeyPressed(TV_KEY_C))PridejDo("C",Sh); if(pInput->IsKeyPressed(TV_KEY_D))PridejDo("D",Sh); if(pInput->IsKeyPressed(TV_KEY_E))PridejDo("E",Sh); if(pInput->IsKeyPressed(TV_KEY_F))PridejDo("F",Sh); if(pInput->IsKeyPressed(TV_KEY_G))PridejDo("G",Sh); if(pInput->IsKeyPressed(TV_KEY_H))PridejDo("H",Sh); if(pInput->IsKeyPressed(TV_KEY_I))PridejDo("I",Sh); if(pInput->IsKeyPressed(TV_KEY_J))PridejDo("J",Sh); if(pInput->IsKeyPressed(TV_KEY_K))PridejDo("K",Sh); if(pInput->IsKeyPressed(TV_KEY_L))PridejDo("L",Sh); if(pInput->IsKeyPressed(TV_KEY_M))PridejDo("M",Sh); if(pInput->IsKeyPressed(TV_KEY_N))PridejDo("N",Sh); if(pInput->IsKeyPressed(TV_KEY_O))PridejDo("O",Sh); if(pInput->IsKeyPressed(TV_KEY_P))PridejDo("P",Sh); if(pInput->IsKeyPressed(TV_KEY_Q))PridejDo("Q",Sh); if(pInput->IsKeyPressed(TV_KEY_R))PridejDo("R",Sh); if(pInput->IsKeyPressed(TV_KEY_S))PridejDo("S",Sh); if(pInput->IsKeyPressed(TV_KEY_T))PridejDo("T",Sh); if(pInput->IsKeyPressed(TV_KEY_U))PridejDo("U",Sh); if(pInput->IsKeyPressed(TV_KEY_V))PridejDo("V",Sh); if(pInput->IsKeyPressed(TV_KEY_W))PridejDo("W",Sh); if(pInput->IsKeyPressed(TV_KEY_X))PridejDo("X",Sh); if(pInput->IsKeyPressed(TV_KEY_Y))PridejDo("Z",Sh); if(pInput->IsKeyPressed(TV_KEY_Z))PridejDo("Y",Sh); if(pInput->IsKeyPressed(TV_KEY_NUMPAD0))PridejDo("0",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD1))PridejDo("1",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD2))PridejDo("2",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD3))PridejDo("3",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD4))PridejDo("4",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD5))PridejDo("5",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD6))PridejDo("6",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD7))PridejDo("7",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD8))PridejDo("8",-1); if(pInput->IsKeyPressed(TV_KEY_NUMPAD9))PridejDo("9",-1); } /*******************************************************************/ void PridejDo(_bstr_t X,int Y) { if(Y==0) { string A=X; char B=A[0]; B+=32; A[0]=B; X=A.data(); }else if(Y==2)X=_bstr_t("_"); else if(Y==4)X=_bstr_t(":"); Nzv.operator +=(X); } /*******************************************************************/ void KontrolaMysi(void) { short i; pInput->GetMouseState(&MysX,&MysY,&MysB1,&MysB2,&MysB3,&PP0); if(MysB1==128 && MysB2==128)//Rotace celé ksotky { if(MysX<-6)RotujCelouKostky(-3); if(MysX>6)RotujCelouKostky(3); if(MysY>6)RotujCelouKostky(-2); if(MysY<-6)RotujCelouKostky(2); return; }// if(MysB2==128)//Rotace v krajině - jako šipky { if(MysX<0) { U1-=(float)MysX/900*RychlostPohybu; if(U1>=(p90-1)) U1=(p90-1); }else{ U1-=(float)MysX/900*RychlostPohybu; if(U1<=(-p90+1))U1=(-p90+1); } if(MysY<0) { if(U2>(-p90+0.4f))U2+=(float)MysY/900*RychlostPohybu;else U2=(-p90+0.4f); }else{ if(U2<(p90-0.4f))U2+=(float)MysY/900*RychlostPohybu;else U2=(p90-0.4f); } return; }// pInput->GetAbsMouseState(&MysX,&MysY,&MysB1,&MysB2,&MysB3); KMys=pScene->MousePicking(MysX,MysY,TV_COLLIDE_MESH,TV_TESTTYPE_BOUNDINGBOX); VARIANT_BOOL AA=KMys->IsCollision(); for(i=0;i<=26;i++)if(i!=Startovni-1)Kostky[i]->ScaleMesh(1,1,1); if(AA=1 && KMys->GetCollisionObjectType() == TV_COLLIDE_MESH) { BB=KMys->GetCollisionMesh(); i=BB->GetMeshIndex()-3; if((i % 2)==0 && (i>=1) && (i<=27))BB->ScaleMesh(Over,Over,Over);; }else Startovni=-1; if(MysB1==128) { if(Startovni==-1 && (i % 2)==0)Startovni=i; else if(Startovni!=i && (i % 2)==0) { //Točíme??? Cilova=i; int Typ=-1,Sm=0,Pocet=0; int a,b,c,d,e; int SA,SB,CA,CB; for(e=1;e<=3;e++) { CA=-1;SA=-1; for(a=0;a<=2;a++) { for(b=0;b<=2;b++) { for(c=0;c<=2;c++) { switch(e) { case 1:d=Pozice[c][b][a];break; case 2:d=Pozice[c][a][b];break; case 3:d=Pozice[a][c][b];break; } if(d==Startovni) { if(Typ==-1)Typ=a+10*e;else if(Typ!=(a+10*e))Pocet=10; SA=c;SB=b; } else if(d==Cilova) { if(Typ==-1)Typ=a+10*e;else if(Typ!=(a+10*e))Pocet=10; CA=c;CB=b; } } } } if(CA!=-1 && CB!=-1 && Pocet==0) { if ((CA-SA)==0 || (CB-SB)==0) { if((Typ % 10)==1)break; }else break; } if(e!=3){Typ=-1;Pocet=0;}; } //Točení if(Pocet==0) { if(SA==1 && SB==0)Sm=CA==0?-1:1; else if(SA==0 && SB==1)Sm=CB==0?1:-1; else if(SA==1 && SB==2)Sm=CA==0?1:-1; else if(SA==2 && SB==1)Sm=CB==0?-1:1; else if(SA==0 && SB==0)Sm=CB==0?1:-1; else if(SA==2 && SB==0)Sm=CA==0?-1:1; else if(SA==0 && SB==2)Sm=CA==0?1:-1; else if(SA==2 && SB==2)Sm=CB==0?-1:1; if(Sm!=0) { SmerRotace=Sm;Startovni=-1; //Horní if(Typ>=10 && Typ<=12) { NactiHorni(Typ-9);Rotuje=Typ-9; } //Přední else if(Typ>=20 && Typ<=22) { SmerRotace=-SmerRotace; NactiPredni(Typ-19);Rotuje=Typ-13; } //Boční else if(Typ>=30 && Typ<=32) { NactiBocni(Typ-29);Rotuje=Typ-26; } } } } }else Startovni=-1; } /*******************************************************************/ void ZobrazMys(bool X) { if(X)pScene->LoadCursor("M1.dat",TV_COLORKEY_BLACK,24,24); else pScene->LoadCursor("M0.dat",TV_COLORKEY_BLACK,2,2); } /*******************************************************************/ void GetName() { char Datum[9];_strdate(Datum); char Cas[9];_strtime(Cas); Nzv=_bstr_t("_"); Nzv.operator += (Datum); Nzv.operator += (" - "); Nzv.operator += (Cas); Nzv.operator += (" - Bez názvu"); } /*******************************************************************/ float ZAO(float X,int Sm) { float A=X+(float)Sm*(0.01f); A=ceilf(A*100)/100; if(A==X)A=A+(float)Sm*(0.01f); return A; } /*******************************************************************/ void NactiNastaveni(void) { _bstr_t B=Pth; string A=ConvertBSTRToString(B.operator +=("\\Config.cfg")); char Nazev[255]; for(int i=0;iTimeElapsed()/50*RychlostRotace; render(); } UUhel=Sm*90; for(i=0;i<=2;i++) { switch(i) { case 0:for(o=0;o<=8;o++)RotujiciPrvky[o]=RPrvky1[o];break; case 1:for(o=0;o<=8;o++)RotujiciPrvky[o]=RPrvky2[o];break; case 2:for(o=0;o<=8;o++)RotujiciPrvky[o]=RPrvky3[o];break; } UhelRotace=UUhel; Ptr=Polomer*(i-1); switch(Tp) { case 1:TocBocni(Ptr,UUhel);break; case 2:TocPredni(Ptr,UUhel);break; case 3:TocHorni(Ptr,UUhel);break; } } render(); } /*******************************************************************/ LRESULT CALLBACK WndProc(HWND wpHWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: { PostQuitMessage(0); return 0; } break; default:break; } return DefWindowProc(wpHWnd, msg, wParam, lParam); }