ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° задания. 
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Win32-прилоТСния Π² срСдС Microsoft Visual Studio

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ срСды программирования MS Visual Studio C++ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Microsoft Foundational Classes (MFC). Void TetrisWnd: OnTimer (UINT nIDEvent) //+ Нам Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ элСмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π»ΠΈ слоТилось 3 элСмСнта Π² Ρ€ΡΠ΄. ΠŸΡ€ΠΈ составлСнии ΠΈΠ· ΠΊΡƒΠ±ΠΈΠΊΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ — Ρ„ΠΈΠ³ΡƒΡ€Π° исчСзаСт, Π±Π°Π»Π»Ρ‹ Π·Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΡΡ‡Ρ‘Ρ‚. Stock = (color… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° задания. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Win32-прилоТСния Π² срСдС Microsoft Visual Studio (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ срСды программирования MS Visual Studio C++ с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Microsoft Foundational Classes (MFC).

НСобходимо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая выполняСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ„ΠΈΠ³ΡƒΡ€ ΠΏΠΎ ΡΠΊΡ€Π°Π½Ρƒ свСрху Π²Π½ΠΈΠ·, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΈΡ… ΠΌΠ΅ΡΡ‚онахоТдСния Π² ΡΠΎΠΎΡ‚вСтствии с Π΄Π΅ΠΉΡΡ‚виями ΠΈΠ³Ρ€Π°ΡŽΡ‰Π΅Π³ΠΎ. Π€ΠΈΠ³ΡƒΡ€Ρ‹ состоят ΠΈΠ· ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Π½Π°Π±ΠΎΡ€ Ρ„ΠΈΠ³ΡƒΡ€ — ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ выпадСния Ρ„ΠΈΠ³ΡƒΡ€ — случайная. Π˜Π³Ρ€ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Π»ΠΈΡΡŒ рядом ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ†Π²Π΅Ρ‚ΠΎΠ². ΠŸΡ€ΠΈ этом образованная ΠΈΠ· ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΈΠ³ΡƒΡ€Π°, Π΄ΠΎΠ»ΠΆΠ½Π° автоматичСски ΠΈΡΡ‡Π΅Π·Π°Ρ‚ΡŒ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ — исполняСмоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ «ΠšΠΎΠ»ΠΎΠ½ΠΊΠΈ».

ОписаниС интСрфСйса

ПослС запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° ΡΠΊΡ€Π°Π½Π΅ появляСтся ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ с Ρ„ΠΈΠ³ΡƒΡ€ΠΎΠΉ.

Рис.

Рис.

Π’Π²Π΅Ρ€Ρ…Ρƒ экрана — ΠΈΠ³Ρ€Π°. Π˜Π³Ρ€Π° содСрТит Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡƒΠ½ΠΊΡ‚Ρ‹:

  • * новая
  • * Π²Ρ‹Ρ…ΠΎΠ΄
ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° задания. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Win32-прилоТСния Π² срСдС Microsoft Visual Studio.

Рис.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈΠ³Ρ€Ρ‹ ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π’Ρ€Π΅Ρ‚ΠΈΠΉ.

Рис.

Рис.

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹ΡˆΠ΅ появляСтся информация ΠΎ ΡΡ‡Ρ‘Ρ‚Π΅.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° задания. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Win32-прилоТСния Π² срСдС Microsoft Visual Studio.
Рис.

Рис.

ΠŸΡ€ΠΈ составлСнии ΠΈΠ· ΠΊΡƒΠ±ΠΈΠΊΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ — Ρ„ΠΈΠ³ΡƒΡ€Π° исчСзаСт, Π±Π°Π»Π»Ρ‹ Π·Π°ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΡΡ‡Ρ‘Ρ‚.

РСализация Π² VS C++.

#include.

#include.

#include.

#include" resource. h" .

#define size 20.

//———————————————-;

// class Shape.

//———————————————-;

class Shape.

{.

public:

bool cells[3][3]; // ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° сохраняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ произвСдСния для ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

void NewShape (); // конструктор создаСт наш ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ.

void ClearShape (bool c[3][3]); // ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ cells[3][3].

};

void Shape: ClearShape (bool c[3][3]).

{.

for (int i = 0; i < 3; i++).

for (int j = 0; j < 3; j++).

c[i][j] = false;

}.

void Shape: NewShape ().

{.

ClearShape (cells);

for (int i = 0; i < 3; i++).

cells[i][0] = true;

}.

class TetrisWnd: public CFrameWnd.

{.

public:

TetrisWnd ();

void NewShape (); //создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ класса Π½Π°Π²Π΅Ρ€Ρ…Ρƒ ΠΎΠΊΠ½Π° Ρ‚ΠΈΠΏΠ° стартуСт.

COLORREF ShapeColor (int color); // ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ 5 Ρ†Π²Π΅Ρ‚ΠΎΠ² эта функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ rgb Ρ†Π²Π΅Ρ‚ соотвСтствСнно ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π°.

void SetLevel (int); //ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ уровня.

bool CheckLeft (); // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²Π»Π΅Π²ΠΎ.

bool CheckRight (); // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²ΠΏΡ€Π°Π²ΠΎ.

void ShowTitle (); // show the window title.

void CheckForLine (); // провСряСт 3 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ элСмСнты стоят Π² Ρ€ΡΠ΄.

bool IsAtBottom (); // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π΅Ρ‚ Π»ΠΈ Π΄Π½Π°.

void MoveUp (); //сдвигаСт элСмСнты Π²Π²Π΅Ρ€Ρ….

void MoveDown ();//сдвигаСт элСмСнты Π²Π½ΠΈΠ·.

void ClearStock (); // ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ сохранСны Ρ†Π²Π΅Ρ‚Π°.

CRect GetRect (); // Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ стандартной Π½ΡƒΠΆΠ½ΠΎ.

private:

CMenu menu;

Shape shape;

short stock[20][10]; //сохраняСт Ρ†Π²Π΅Ρ‚Π° Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹Ρ… элСмСнтов ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ΅Π½ массив Ρ†Π²Π΅Ρ‚ΠΎΠ².

int curY; //ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

int curX;

bool bGame; //Π² ΠΈΠ³Ρ€Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

int score;

int level;

bool level1;

bool level2;

bool level3;

int color[3]; // сохраняСт Π½ΠΎΠΌΠ΅Ρ€Π° Ρ†Π²Π΅Ρ‚ΠΎΠ².

protected:

protected:

virtual BOOL PreCreateWindow (CREATESTRUCT& cs);

protected:

afx_msg void OnPaint ();

afx_msg void OnTimer (UINT nIDEvent);

afx_msg void OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags);

afx_msg void OnGameNew ();

afx_msg void OnGameExit ();

afx_msg void OnClose ();

afx_msg void OnLevelLevel1();

afx_msg void OnUpdateLevelLevel1(CCmdUI* pCmdUI);

afx_msg void OnLevelLevel2();

afx_msg void OnUpdateLevelLevel2(CCmdUI* pCmdUI);

afx_msg void OnLevelLevel3();

afx_msg void OnUpdateLevelLevel3(CCmdUI* pCmdUI);

afx_msg void OnHelpAbout ();

DECLARE_MESSAGE_MAP ().

};

BEGIN_MESSAGE_MAP (TetrisWnd, CFrameWnd).

ON_WM_PAINT ().

ON_WM_TIMER ().

ON_WM_KEYDOWN ().

ON_COMMAND (ID_GAME_NEW, OnGameNew).

ON_COMMAND (ID_GAME_EXIT, OnGameExit).

ON_WM_CLOSE ().

ON_COMMAND (ID_LEVEL_LEVEL1, OnLevelLevel1).

ON_UPDATE_COMMAND_UI (ID_LEVEL_LEVEL1, OnUpdateLevelLevel1).

ON_COMMAND (ID_LEVEL_LEVEL2, OnLevelLevel2).

ON_UPDATE_COMMAND_UI (ID_LEVEL_LEVEL2, OnUpdateLevelLevel2).

ON_COMMAND (ID_LEVEL_LEVEL3, OnLevelLevel3).

ON_UPDATE_COMMAND_UI (ID_LEVEL_LEVEL3, OnUpdateLevelLevel3).

ON_COMMAND (ID_HELP_ABOUT, OnHelpAbout).

END_MESSAGE_MAP ().

TetrisWnd:TetrisWnd ().

{.

CString s = AfxRegisterWndClass (CS_HREDRAW | CS_VREDRAW,.

AfxGetApp ()->LoadStandardCursor (IDC_ARROW),.

(HBRUSH)GetStockObject (BLACK_BRUSH),.

AfxGetApp ()->LoadIcon (IDI_ICON1));

Create (s, «ΠšΠΎΠ»ΠΎΠ½ΠΊΠΈ»);

menu.LoadMenu (IDR_MENU1);

SetMenu (&menu);

level = 700;

SetLevel (1);

srand (time (0));

ClearStock ();

}.

class MyApp: public CWinApp.

{.

public:

virtual BOOL InitInstance ().

{.

m_pMainWnd = new TetrisWnd;

m_pMainWnd->ShowWindow (SW_SHOWNORMAL);

return TRUE;

}.

};

MyApp app;

BOOL TetrisWnd: PreCreateWindow (CREATESTRUCT& cs).

{.

cs.style &= ~WS_MAXIMIZEBOX;

cs.style &= ~WS_THICKFRAME;

cs.cx = 220; //Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠΊΠ½Π°.

cs.cy = 460;

return CFrameWnd: PreCreateWindow (cs);

}.

void TetrisWnd: MoveUp ().

{.

int c = color[0];

color[0] = color[1];

color[1] = color[2];

color[2] = c;

}.

void TetrisWnd: MoveDown ().

{.

int c = color[2];

color[2] = color[1];

color[1] = color[0];

color[0] = c;

}.

void TetrisWnd: OnPaint () //пСрСрисовки элСмСнтов самая главная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°.

{.

CPaintDC dc (this);

CBrush brush;

for (int i = 0; i < 3; i++) //рисуСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠΉ элСмСнт Π² ΡΠΎΠΎΡ‚вСтствии с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ.

{.

brush.CreateSolidBrush (ShapeColor (color[i]));

dc.SelectObject (&brush);

for (int j = 0; j < 3; j++).

{.

if (shape.cells[i][j] == true).

dc.Rectangle (curX + j*size, curY + i*size, curX + (j + 1)*size, curY + (i + 1)*size);

}.

brush.DeleteObject ();

}.

for (int i = 0; i < 20; i++) ///Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ stock [i] [j] сохраняСтся всС элСмСнты Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ.

{.

for (int j = 0; j < 10; j++).

{.

if (stock[i][j] ≠ -1).

{.

brush.CreateSolidBrush (ShapeColor (stock[i][j]));

dc.SelectObject (&brush);

dc.Rectangle (j*size, i*size, (j + 1)*size, (i + 1)*size);

brush.DeleteObject ();

}.

}.

}.

}.

CRect TetrisWnd: GetRect ().

{.

CRect r;

r.left = curX — size;

r.right = curX + size * 5;

r.top = curY — size;

r.bottom = curY + size * 5;

return r;

}.

void TetrisWnd: OnTimer (UINT nIDEvent) //+ Нам Π½ΡƒΠΆΠ½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ элСмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π»ΠΈ слоТилось 3 элСмСнта Π² Ρ€ΡΠ΄.

{.

CPaintDC dc (this);

CBrush brush;

if (nIDEvent == 1 && bGame == true).

{.

if (IsAtBottom ()) //Ссли элСмСнт остановился.

{.

for (int i = 0; i < 3; i++).

for (int j = 0; j < 3; j++).

{.

if (shape.cells[i][j] == true).

stock[curY / size + i][curX / 20 + j] = (color[i]); //сохраняСм Π΅Π³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π² ΠΌΠ°ΡΡΠΈΠ² Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΅ΡΡ‚ΡŒ stock Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ Π΅Π³ΠΎ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ.

}.

NewShape (); //созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

if (IsAtBottom ()).

{.

bGame = false;

}.

InvalidateRect (GetRect ());

CheckForLine (); //провСряСм Π² 3 Π² Ρ€ΡΠ΄ Π½Π΅ ΡΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ.

return;

}.

curY += 20;

InvalidateRect (GetRect ());

}.

else if (bGame == false).

{.

KillTimer (1);

CString s;

s.Format («%d», score);

MessageBox («Π’Ρ‹ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Π»ΠΈ ! Π’Π°Ρˆ счСт: «+ s);

}.

CFrameWnd:OnTimer (nIDEvent);

}.

void TetrisWnd: OnKeyDown (UINT nChar, UINT nRepCnt, UINT nFlags).

{.

switch (nChar).

{.

case VK_CONTROL:

case VK_UP: MoveUp (); break;

case VK_LEFT: if (CheckLeft ()) return; curX -= 20; break;

case VK_RIGHT: if (CheckRight ()) return; curX += 20; break;

case VK_DOWN: MoveDown (); break;

case VK_SPACE: KillTimer (1); SetTimer (1, 20, NULL); break;

}.

InvalidateRect (GetRect ());

CFrameWnd:OnKeyDown (nChar, nRepCnt, nFlags);

}.

void TetrisWnd: OnGameNew ().

{.

ClearStock ();

score = 0;

bGame = true;

SetLevel (1);

NewShape ();

ShowTitle ();

Invalidate ();

}.

void TetrisWnd: ClearStock ().

{.

for (int i = 0; i < 20; i++).

for (int j = 0; j < 10; j++).

stock[i][j] = -1;

}.

bool TetrisWnd: IsAtBottom ().

{.

for (int i = 0; i < 3; i++).

{.

for (int j = 0; j < 3; j++).

{.

if (shape.cells[i][j] == true).

{.

if ((curY / 20 + i) >= 19 || stock[curY / 20 + i + 1][curX / 20 + j] ≠ -1).

return true;

}.

}.

}.

return false;

}.

void TetrisWnd: CheckForLine ().

{.

int i, j, k, c = 0;

bool flag;

for (i = 0; i < 20; i++).

{.

flag = false;

for (j = 0; j < 8; j++).

if (stock[i][j] == stock[i][j + 1] && stock[i][j + 1] == stock[i][j + 2] && stock[i][j] ≠ -1 && stock[i][j + 1] ≠ -1 && stock[i][j + 2] ≠ -1) flag = true;

if (flag == true && j ≠ 0).

{.

c++;

score++;

ShowTitle ();

for (k = i; k>0; k—).

{.

for (j = 0; j < 10; j++).

{.

stock[k][j] = stock[k — 1][j];

}.

}.

}.

}.

for (k = 0; k < c; k++).

for (j = 0; j < 10; j++).

stock[k][j] = -1;

for (j = 0; j < 10; j++).

for (i = 0; i < 20; i++).

{.

if (stock[i][j] == stock[i + 1][j] && stock[i + 1][j] == stock[i + 2][j] && stock[i][j] ≠ -1 && stock[i + 1][j] ≠ -1 && stock[i + 2][j] ≠ -1).

{.

for (k = 0; k < 20; k++).

stock[k][j] = -1;

}.

}.

Invalidate ();

}.

void TetrisWnd: ShowTitle () //Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

{.

CString title;

title.Format («ΠšΠΎΠ»ΠΎΠ½ΠΊΠΈ: %d», score);

SetWindowText (title);

}.

bool TetrisWnd: CheckRight ().

{.

for (int i = 0; i < 3; i++).

{.

for (int j = 0; j < 3; j++).

{.

if (shape.cells[i][j] == true).

{.

if ((curX / size + j) >= 9 || stock[curY / size + i][curX / size + j + 1] ≠ -1).

return true;

}.

}.

}.

return false;

}.

bool TetrisWnd: CheckLeft ().

{.

for (int i = 0; i < 3; i++).

{.

for (int j = 0; j < 3; j++).

{.

if (shape.cells[i][j] == true).

{.

if ((curX / size + j) <= 0 || stock[curY / size + i][curX / size + j — 1] ≠ -1).

return true;

}.

}.

}.

return false;

}.

//систСмныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

void TetrisWnd: OnGameExit ().

{.

OnClose ();

}.

void TetrisWnd: OnClose ().

{.

KillTimer (1);

CFrameWnd:OnClose ();

}.

void TetrisWnd: OnLevelLevel1().

{.

SetLevel (1);

}.

void TetrisWnd: OnUpdateLevelLevel1(CCmdUI* pCmdUI).

{.

pCmdUI->SetCheck (level1);

}.

void TetrisWnd: OnLevelLevel2().

{.

SetLevel (2);

}.

void TetrisWnd: OnUpdateLevelLevel2(CCmdUI* pCmdUI).

{.

pCmdUI->SetCheck (level2);

}.

void TetrisWnd: OnLevelLevel3().

{.

SetLevel (3);

}.

void TetrisWnd: OnUpdateLevelLevel3(CCmdUI* pCmdUI).

{.

pCmdUI->SetCheck (level3);

}.

void TetrisWnd: SetLevel (int lev).

{.

level1 = level2 = level3 = false;

switch (lev).

{.

case 1: level = 700; level1 = true; break;

case 2: level = 500; level2 = true; break;

case 3: level = 300; level3 = true; break;

}.

}.

void TetrisWnd: OnHelpAbout ().

{.

CDialog dlg (IDD_ABOUT);

dlg.DoModal ();

}.

COLORREF TetrisWnd: ShapeColor (int color)//Ρ†Π²Π΅Ρ‚Π° Π² ΡΠΎΠΎΡ‚вСтствии с Π½ΠΎΠΌΠ΅Ρ€Π°.

{.

switch (color).

{.

case 0: return RGB (255, 0, 0);

case 1: return RGB (0, 0, 255);

case 2: return RGB (0, 255, 0);

case 3: return RGB (8, 232, 222);

case 4: return RGB (112, 41, 99);

}.

return RGB (255, 255, 255);

}.

void TetrisWnd: NewShape ().

{.

KillTimer (1);

SetTimer (1, level, NULL);

curY = 0;

curX = 60;

shape.NewShape ();

for (int i = 0; i < 2; i++).

color[i] = (rand () %4);

do.

{.

color[2] = (rand () % 4);

} while (color[2] == color[1]);

}.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ