Игра «Пятнашки»

Автор: Пользователь скрыл имя, 13 Декабря 2011 в 17:27, курсовая работа

Описание работы

Цель проекта заключается в том, чтобы создать программу, при помощи которой пользователь сможет проверить свои логические способности, попробовав решить одну из древнейших головоломок «Пятнашки».
Программа должна быть совместима с операционной системой Windows XP, Windows Vista и Windows 7, а так же при разработке программы необходимо использовать функции Win API.

Содержание

Введение...................................................................................................................3
1 Анализ задачи 6
1.1 Цель разработки и функциональное назначение программного продукта 6
1.2 Анализ существующих аналогов продукта 7
2 Требования к программе 8
2.1 Системные требования 8
3 Инструментальные средства для создания программного продукта 10
3.1 Вычислительная система 10
3.2 Среда разработки 13
4 Проектирование 16
4.1 Концептуальный прототип 16
4.2 Описание модулей 18
4.3 Входные данные 20
4.4 Выходные данные 20
4.5 Логика программы 21
5 Тестирование и отладка 22
Заключение 23
Список литературы 24

Работа содержит 1 файл

ПЗ.docx

— 163.26 Кб (Скачать)

      return RegisterClassEx(&wcex);

} 

//   Функция: InitInstance(HANDLE, int)

//   Назначение: Сохраняет дескриптор экземпляра и создает главное окно. В этой функции мы сохраняем дескриптор экземпляра в глобальной переменной и создаем главное окно. 

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

{

   HWND hWnd;

   hInst = hInstance; // Сохраним дескриптор экземпляра в нашей глобальной переменной

   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,

      512, 240, 305, 345, NULL, NULL, hInstance, NULL);

   NewField(Moves); 

   if (!hWnd)

   {

      return FALSE;

   }

   ShowWindow(hWnd, nCmdShow);

   UpdateWindow(hWnd);

   return TRUE;

} 

//прорисовываем:

int OnPaint (HWND hWnd)

{

      HDC hdc;

      PAINTSTRUCT ps;

      int iStartX=50, iStartY=50,

      iSizeX=25, iSizeY=35,

      iSizeFld=5,

      iRow, iCol; 

      RECT rt;

      hdc = BeginPaint(hWnd, &ps); 

      MoveToEx(hdc, 0, 3*Size-1, (LPPOINT) NULL);

      LineTo(hdc, 4*Size, 3*Size-1);

      MoveToEx(hdc, 0, 2*Size-1, (LPPOINT) NULL);

      LineTo(hdc, 4*Size, 2*Size-1);

      MoveToEx(hdc, 0, Size-1, (LPPOINT) NULL);

      LineTo(hdc, 4*Size, Size-1); 

      MoveToEx(hdc, Size-1,0, (LPPOINT) NULL);

      LineTo(hdc, Size-1,4*Size);

      MoveToEx(hdc, 2*Size-1,0, (LPPOINT) NULL);

      LineTo(hdc, 2*Size-1,4*Size);

      MoveToEx(hdc, 3*Size-1,0, (LPPOINT) NULL);

      LineTo(hdc, 3*Size-1,4*Size); 

      for(iRow=0;iRow<Side;iRow++)

            for(iCol=0;iCol<Side;iCol++)

            

                  rt.left=iCol*Size;

                  rt.top=iRow*Size;

                  switch(GameField[iRow][iCol])

                  {

                        case 0: DrawImage(hdc, hBitmapNum0,rt.left,rt.top);

                        break;

                        case 1: DrawImage(hdc, hBitmapNum1,rt.left,rt.top);

                        break;

                        case 2: DrawImage(hdc, hBitmapNum2,rt.left,rt.top);

                        break;

                        case 3: DrawImage(hdc, hBitmapNum3,rt.left,rt.top);

                        break;

                        case 4: DrawImage(hdc, hBitmapNum4,rt.left,rt.top);

                        break;

                        case 5: DrawImage(hdc, hBitmapNum5,rt.left,rt.top);

                        break; 

                        case 6: DrawImage(hdc, hBitmapNum6,rt.left,rt.top);

                        break;

                        case 7: DrawImage(hdc, hBitmapNum7,rt.left,rt.top);

                        break;

                        case 8: DrawImage(hdc, hBitmapNum8,rt.left,rt.top);

                        break;

                        case 9: DrawImage(hdc, hBitmapNum9,rt.left,rt.top);

                        break;

                        case 10: DrawImage(hdc, hBitmapNum10,rt.left,rt.top);

                        break;

                        case 11: DrawImage(hdc, hBitmapNum11,rt.left,rt.top);

                        break;

                        case 12: DrawImage(hdc, hBitmapNum12,rt.left,rt.top);

                        break;

                        case 13: DrawImage(hdc, hBitmapNum13,rt.left,rt.top);

                        break;

                        case 14: DrawImage(hdc, hBitmapNum14,rt.left,rt.top);

                        break;

                        case 15: DrawImage(hdc, hBitmapNum15,rt.left,rt.top);

                        break; 

                  default :DrawImage(hdc, hBitmapNum0,rt.left,rt.top);

                        break;

                  }

            }

            EndPaint(hWnd, &ps);

    return 0;

} 

// Рисуем картинки

int DrawImage(HDC hdc, HBITMAP hBitmap, int x, int y)

{

      BITMAP bm;

      HDC hdcMem=CreateCompatibleDC (hdc);

      HBITMAP hbmOld=(HBITMAP) SelectObject (hdcMem, (HBITMAP)hBitmap);

      GetObject (hBitmap, sizeof(bm), &bm);

      BitBlt (hdc,x,y,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCCOPY);

      SelectObject (hdcMem, hbmOld);

      DeleteDC(hdcMem);

      return 0;

} 

//  Функция: WndProc(HWND, unsigned, WORD, LONG)

//  Назначение:  Обрабатываем сообщения для главного окна.

//  WM_COMMAND - команды меню приложения

//  WM_PAINT - прорисовка главного окна

//  WM_DESTROY - выход из программы 

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

{

      int wmId, wmEvent;

      Congr(hWnd);

      switch (message)

      {

            case WM_COMMAND:

                  wmId    = LOWORD(wParam);

                  wmEvent = HIWORD(wParam);

                  // Выбор пункта меню:

                  switch (wmId)

                  {

                        case IDM_ABOUT:

                           DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);

                           break; 

                        case IDM_EXIT:

                           DestroyWindow(hWnd);

                           break;

                        default:

                           return DefWindowProc(hWnd, message, wParam, lParam);

                  }

                  break; 

            case WM_PAINT:

                  switch (wParam)

                  {

                  case 1:

                        {

                              InvalidateRect(hWnd,NULL,FALSE);

                              UpdateWindow(hWnd);

                              break;

                        }

                  case 0:

                  default:

                        {

                              OnPaint(hWnd);

                              break;

                        }

                  } 

                  break;

            case WM_KEYDOWN:

                  { 

                        switch(wParam)

                        { 

                  case 38://Up

                  if (iHeroRow != 0)

                  {

                        GameField[iHeroRow][iHeroCol] = GameField[iHeroRow - 1][iHeroCol];

                        GameField[iHeroRow - 1][iHeroCol] = 0; 

                        iHeroRow--;

                  }

                  break; 

                  case 40://Down

                  if (iHeroRow < 3)

                  {

                        GameField[iHeroRow][iHeroCol] = GameField[iHeroRow + 1][iHeroCol];

                        GameField[iHeroRow + 1][iHeroCol] = 0; 

                        iHeroRow++;

                  }

                  break; 

                  case 37://Left

                  if (iHeroCol != 0)

                  {

                        GameField[iHeroRow][iHeroCol] = GameField[iHeroRow][iHeroCol-1];

                        GameField[iHeroRow][iHeroCol-1] = 0; 

                        iHeroCol--;

                  }

Информация о работе Игра «Пятнашки»