Разработка алгоритма и программы "Тетриc"

Характеристика "Тетриса" как культовой компьютерной игры, изобретённой в СССР А. Пажитновым. Графический интерфейс операционной системы Windows. Создание и регистрация класса окна. Цикл обработки сообщений. Система координат, основанная на пикселях.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.01.2014
Размер файла 18,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ

Кафедра Информатики

Курсовая работа

по дисциплине: Программирование

Тема: «Разработка алгоритма и программы Тетриc»

Выполнил:

Цечоев А.М.

Проверил:

Любченко В.А

Харьков - 2013

  • Содержание
  • Введение
  • 1. Анализ, постановка задачи и сфера ее применения
  • 2. Краткая характеристика программирования под WIN32
  • 3. Основная часть
  • 4. Руководство пользователя
  • 4.1 Установка программы и запуск программы
  • 4.2 Работа с программой
  • Заключение
  • Список использованной литературы
  • Приложения
  • Введение
  • Тетрис (производное от «тетрамино» и «теннис»), англ. Tetris -- культовая компьютерная игра, изобретённая в СССР Алексеем Пажитновым и представленная общественности 6 июня 1984 года. Идею «Тетриса» ему подсказала купленная им игра в пентамино.
  • Случайные фигурки тетрамино падают сверху в прямоугольный стакан шириной 10 и высотой 20 клеток. В полете, игрок может поворачивать фигурку и двигать её по горизонтали. Также можно «сбрасывать» фигурку, то есть ускорять её падение, когда уже решено, куда фигурка должна упасть. Фигурка летит, пока не наткнётся на другую фигурку либо на дно стакана. Если при этом заполнился горизонтальный ряд из 10 клеток, он пропадает и всё, что выше его, опускается на 1 клетку. Темп игры постепенно увеличивается. Название игры происходит от количества клеток, из которых состоит каждая фигура. Игра заканчивается, когда новая фигурка не может поместиться в стакан. Игрок получает очки за каждую фигурку, поэтому его задача -- заполнять ряды, не заполняя сам стакан как можно дольше, чтобы таким образом получить как можно больше очков.
  • 1. Анализ, постановка задачи и сфера ее применения
  • Windows -- это графический интерфейс, и программы для Windows могут полностью использовать графику на дисплее. Графический интерфейс не только более удобен для восприятия, но он может также обеспечить пользователю высококачественное отображение информации.
  • У программ, написанных для Windows, нет прямого доступа к аппаратной части устройств отображения информации, таких как экран и принтер. Вместо этого Windows включает в себя язык графического программирования, называемый графическим интерфейсом устройства (Graphics Device Interface, GDI), который облегчает создание графики и форматированного текста. Windows абстрагируется от конкретного устройства отображения информации. Программы, написанные для Windows, будут работать с любым типом дисплея, для которого имеется в наличии драйвер Windows. В программе нет необходимости задавать тип используемого в системе оборудования.
  • Задача курсового проекта состоит в разработке игры тетрис. Разработанное приложение должно осуществлять
  • · Непосредственно сам алгоритм игры тетрис;
  • · Скорость падения фигур устанавливается при помощи таймера;
  • · При переходе с уровня на уровень скорость увеличивается;
  • · Легкость в управлении объектами игры;
  • · Запись наилучших результатов в таблицу рейтинга;
  • Применение данного проекта найдёт место в обучении логики и развитии мышления детей разных возрастов. С помощью этого приложения можно в некоторой степени ознакомиться с ЭВМ. Удобный интерфейс поможет управлять алгоритмом игры.
  • 2. Краткая характеристика программирования под WIN32
  • Win Main -- это точка входа в программу. Это аналог стандартной функции main языка С. В любой программе для Windows имеется функция Win Main.
  • Регистрация класса окна.
  • Окно всегда создается на основе класса окна. Класс окна идентифицирует оконную процедуру, которая выполняет процесс обработки сообщений, поступающих окну. Поскольку это важно, повторяем: окно всегда создается на основе класса окна. Класс окна идентифицирует оконную процедуру, которая выполняет процесс обработки сообщений, поступающих окну. На основе одного класса окна можно создать несколько окон. Например, все окна-кнопки в Windows создаются на основе одного и того же класса окна. Класс окна определяет оконную процедуру и некоторые другие характеристики окон, создаваемых на основе этого класса. Когда вы создаете окно, вы определяете дополнительные характеристики окна, уникальные для него. Перед созданием окна для вашей программы необходимо зарегистрировать класс окна путем вызова функции Register Class Ex. Это расширенная (на что указывает окончание названия Ex, т. е. extended -- расширеный) версия функции Register Class из предыдущих версий Windows.
  • Создание окна.
  • Добавление в программу окна диалога - это непростая задача. Она требует внесения изменений в нескольких файлах: шаблон окна диалога помещается в файл описания ресурсов, процедура окна диалога - в файл с исходными кодами программы, а идентификаторы, которые используются в окне диалога, часто вносятся в заголовочный файл программы. Создание окна в данном случае реализуется с помощью функции Create Dialog, которая сразу возвращает описатель окна диалога. Как правило, этот описатель хранится в глобальной переменной.
  • Отображение окна.
  • Окно уже создано внутри Windows. Однако на экране монитора оно еще не появилось. Необходимы еще два вызова. Первый из них:
  • Show Window (hwnd, i Cmd Show);
  • Первым параметром является описатель только что созданного функцией Create Window окна. Вторым параметром является величина i Cmd Show, передаваемая в качестве параметра функции Win Main. Он задает начальный вид окна на экране. Если i Cmd Show имеет значение SW_SHOWNORMAL, на экран выводится обычное окно. Если i Cmd Show имеет значение SW_SHOWMINNOACTIVE, то окно не выводится, а на панели задач появляются его имя и иконка. Функция Show Window выводит окно на экран. Если второй параметр Show Window имеет значение SW_SHOWNORMAL, то фон рабочей области окна закрашивается той кистью, которая задана в классе окна. Вызов функции:
  • Update Window (hwnd);
  • Цикл обработки сообщений.
  • Вызов функции Get Message, с которого начинается цикл обработки сообщений, извлекает сообщение из очереди сообщений:
  • Get Message (&msg, NULL, 0, 0)
  • Этот вызов передает Windows указатель на структуру msg типа MSG. Второй, третий и четвертый параметры, NULL или 0, показывают, что программа получает все сообщения от всех окон, созданных этой программой. Windows заполняет поля структуры сообщений информацией об очередном сообщении из очереди сообщений. В традиционных Windows-программах необходимо самостоятельно создавать и активизировать такой цикл. Он является неотъемлемой частью любого приложения Windows.
  • Каждое получаемое окном сообщение идентифицируется номером, который содержится в параметре iMsg оконной процедуры. В заголовочных файлах Windows определены идентификаторы, начинающиеся с префикса WM ("window message") для каждого типа сообщений. Обычно программисты для Windows используют конструкции switch и case для определения того, какое сообщение получила оконная процедура и то, как его обрабатывать. Если оконная процедура обрабатывает сообщение, то ее возвращаемым значением должен быть 0. Все сообщения, не обрабатываемые оконной процедурой, должны передаваться функции Windows, которая называется Def Window Proc. Значение, возвращаемое функцией Def Window Proc, должно быть возвращаемым значением оконной процедуры.
  • Оконная процедура определяет то, что выводится в рабочую область окна и то, как окну реагировать на пользовательский ввод (функция Wnd Proc)
  • Структура GDI.
  • По умолчанию Windows использует систему координат, основанную на пикселях.
  • Функции Begin Paint и End Paint (хотя технически -- это часть подсистемы USER в Windows) используются в теле обработчика сообщения WM_PAINT для рисования. Некоторые другие функции, относящиеся к работе с контекстом устройства - Get Text Metrics для получения информации о размерах выбранного в контексте устройства шрифта, Text Out для отображения текста в рабочей области. Windows содержит также девять функций, позволяющих вам легко манипулировать со структурами прямоугольника типа RECT (используемые в разработке - Set Rect(), Fill Rect()). Существуют также функции для создания и удаления кистей Create Solid Brush(), Delete Object() и множество других для работы с графикой.
  • 3. Основная часть
  • Программа реализуется по этапам:
  • · Создание окна;
  • · Создание меню игры;
  • · Создание графических объектов;
  • · Создание управляющих элементов;
  • · Генерирование фигур;
  • · Создание функций для осуществления алгоритма;
  • · Осуществление записи очков в таблицу рейтинга;
  • Итак, первые 2 этапа осуществляются стандартным образом: регистрация класса окна и непосредственно его создание происходит в функции Win Main. Меню создается при помощи сообщений WM_COMMAND. При нажатии на любую из кнопок меню, посылается сообщение WM_COMMAND оконной процедуре родительского окна Wnd Proc. Основные сообщения описаны ниже - начать игру (case ID_NEW) и закончить игру (case ID_EXIT)
  • case WM_COMMAND:
  • switch (LOWORD (wParam))
  • {
  • case ID_EXIT:
  • Send Message (hwnd,WM_CLOSE,0,0L);
  • break;
  • case ID_NEW:
  • scores=0;
  • speed=300;
  • endgame=FALSE;
  • oldspeed=speed;
  • Set Timer (hwnd, id Timer = 1, speed, NULL);
  • Set Window Text (hwnd,"Tetris");
  • initscreen();
  • newfigure();
  • Bind (deltax, deltay, 0);
  • break;
  • }
  • return 0;
  • где при запуске новой игры, обнуляются очки scores=0, задается начальная скорость speed=300, устанавливается таймер Set Timer (hwnd, id Timer = 1, speed, NULL), вызываются функции определения рабочей области экрана initscreen(), создания фигуры newfigure(), контроллера игры Bind (deltax, deltay, 0).
  • При ее завершении, посылается сообщение оконной процедуре о закрытии приложения - параметр WM_CLOSE, который в свою очередь является сообщением и содержит функцию End Dialog. На этом принципе и построено меню игры.
  • Создание элементов фигур (их кусочков) - квадратов - осуществляется в сообщении WM_PAINT. С помощью конструкции switch задаётся цветовая гамма квадратов. Затем выполняется прорисовка их в памяти с помощью функции Set Rect() и кисти h Brush:
  • Set Rect (&rect, countx*cx Client,county*cy Client,
  • countx*cx Client+cx Client, county*cy Client+cy Client);
  • h Brush = Create Solid Brush (colorbrick);
  • h Brush = Create Solid Brush (colorbrick);
  • Fill Rect (hdc, &rect, hBrush);
  • Delete Object (h Brush);
  • Один из простейших способов создать интерфейс клавиатуры -- это использовать логику обработки сообщений WM_KEYDOWN в оконной процедуре, где выполняется назначение клавишам функций Bind(), Rotate() и выполнение операторов. Благодаря этому и создано управление тетрисом:
  • case WM_KEYDOWN:
  • switch (LOWORD(wParam))
  • {
  • case VK_ESCAPE:
  • Send Message (hwnd, WM_CLOSE, 0, 0L);
  • break;
  • case VK_LEFT:
  • deltax=deltax-1;
  • Bind (deltax, deltay, 4);
  • break;
  • case VK_RIGHT:
  • deltax=deltax+1;
  • Bind (deltax, deltay, 6);
  • Break;
  • case VK_UP:
  • rotate();
  • Bind (deltax, deltay, 5);
  • break;
  • case VK_DOWN:
  • oldspeed=speed;
  • speed=50;
  • Set Timer (hwnd, id Timer = 1, speed, NULL);
  • break;
  • }
  • return 0;
  • C помощью конструктора switch создаётся генератор фигур (уже собранных) newfigure() по аналогии с сообщениями для определения цветов составляющих (квадратов). Составляющие выстраиваются матричным способом в положения, необходимые для формирования объектов игры.
  • Также создаются функции:
  • Rotate(),Unrotate() - функции поворотов фигуры;
  • Gameover() - функция окончания игры;
  • Delfull() - функция удаления полных строк;
  • Show() - функция выведения созданного процесса на монитор;
  • Bind() - функция алгоритма игры (контроллер).
  • В сообщении WM_COMMAND также происходит запись очков в рейтинговую таблицу, которая выводится диалогом IDD_SCOREDIALOG:
  • case ID_HI:
  • Kill Time (hwnd, 1);
  • Dialog Box (hinst, MAKEINTRESOURCE(IDD_SCOREDIALOG), hwnd, (DLGPROC) Dialog Func);
  • Set Timer (hwnd, id Timer = 1, speed, NULL);
  • break;
  • данные, которые хранятся в файле tetris.dat:
  • case WM_COMMAND:
  • switch (LOWORD(w Param))
  • {
  • case IDOK:
  • for(i=0;i<5;i++)
  • {Send Dlg Item Message (hwnd Dlg,102 +I, WM_GETTEXT, (WPARAM) 25, (LPARAM) name [i]);
  • Send Dlg Item Message (hwnd Dlg, 107+i, WM_GETTEXT, (WPARAM) 10, (LPARAM) score [i]);
  • }
  • f=fopen("tetris.dat","wb");
  • for(i=0;i<5;i++)
  • {
  • Fwrite (name [i], 1, 25, f);
  • Fwrite (score [i], 1, 10, f);
  • }
  • fclose(f);
  • End Dialog (hwnd Dlg, 1);
  • return 1;
  • }
  • break;
  • 4. Руководство пользователя
  • 4.1 Установка программы и запуск программы
  • Для работы с программой необходимо выполнить следующие шаги:
  • · скопировать в какой-либо каталог файл Tetris.exe;
  • · запустить программу
  • 4.2 Работа с программой
  • · Для ознакомления с управлением выберите в меню «Help»;
  • · Для начала игры выберите «New» в меню «File»;
  • · По окончанию игры введите свой ник в появившемся диалоге;
  • · Для просмотра таблицы рекордов выберите «Hi» в меню «File»;

· Выход из программы происходит по нажатию пункта «Exit» меню «File».

Заключение

В процессе курсовой работы были закреплены знания, полученные в лекционном курсе, а также на практических и лабораторных занятиях. Также работа помогла ознакомиться с концепцией и элементами графического интерфейса пользователя (GUI), принципами формирования графики на растровом экране дисплея. Получение практических навыков по составлению, написанию и отладке программ, осуществляющих графический вывод текста, точечной графики.

На примере разработанного приложения была освоена задача GDI - поддержка аппаратно-независимой графики. Приложение служит наглядной иллюстрацией осуществления алгоритма игры тетрис при помощи API функций. Принцип использования WinAPI не зависит от языка программирования, выбранного для осуществления алгоритма, а одинаков для всех абсолютно языков программирования разработанных под операционную систему Windows.

Список литературы

1. Румянцев П.В. «Азбука программирования в Win 32 API» - электронная версия книги.

2. «Win 32 Programmer's Reference» - электронная версия, входящая в состав Borland C++5.0.

3. MSDN Library - January 2004.

тетрис графический операционный компьютерный

Приложение. Исходный текст программы

#include <windows.h>

#include <string.h>

#include <shellapi.h>

#include <stdio.h>

#include "tetrisre.h"

//---------------------------------------------------------------------------------------

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);

void initscreen();

void newfigure();

void gameover();

void Bind(int x,int y,int keys);

void delfull();

void unrotate();

void rotate();

void show();

//---------------------------------------------------------------------------------------

static char szAppName[] = "Tetris";

HWND hwnd ,hwndDlg=NULL;

MSG msg ;

WNDCLASSEX wndclass;

HINSTANCE hinst;

static int screen[16][18];

static int oldscreen[16][18];

static int cup[16][18];

static int figure[4][4];

static int oldfigure[4][4];

static int deltax=3 , deltay=0;

static int speed,oldspeed;

static int idTimer = -1;

static int scores;

static char title[25];

static int cxClient, cyClient;

BOOL endgame=FALSE;

//---------------------------------------------------------------------------------------

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

{

wndclass.cbSize = sizeof (wndclass);

wndclass.style = CS_HREDRAW | CS_VREDRAW;

wndclass.lpfnWndProc = WndProc;

wndclass.cbClsExtra = 0;

wndclass.cbWndExtra = DLGWINDOWEXTRA;

wndclass.hInstance = hInstance;

wndclass.hIcon = LoadIcon (hInstance, "Tetris");

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);

wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);

wndclass.lpszMenuName = NULL;

wndclass.lpszClassName = szAppName ;

wndclass.hIconSm = LoadIcon (hInstance, "Tetris");

RegisterClassEx (&wndclass);

hwnd = CreateDialog (hInstance, "Tetris", 0, NULL);

ShowWindow (hwnd, iCmdShow);

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

return msg.wParam ;

}

//--------------------------------------------------------------------------------------

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

int countx,county;

HDC hdc;

PAINTSTRUCT ps;

COLORREF colorbrick;

HBRUSH hBrush;

RECT rect;

switch (iMsg)

{

case WM_COMMAND:

switch (LOWORD(wParam))

{

case ID_EXIT:

SendMessage(hwnd,WM_CLOSE,0,0L);

break;

case ID_NEW:

scores=0;

speed=300;

endgame=FALSE;

oldspeed=speed;

SetTimer(hwnd, idTimer = 1, speed, NULL);

SetWindowText(hwnd,"Tetris");

initscreen();

newfigure();

Bind(deltax,deltay,0);

break;

case ID_HI:

KillTimer(hwnd, 1);

DialogBox(hinst, MAKEINTRESOURCE(IDD_SCOREDIALOG), hwnd, (DLGPROC) DialogFunc);

//SetTimer(hwnd, idTimer = 1, speed, NULL);

break;

case ID_HELP:

KillTimer(hwnd, 1);

DialogBox(hinst, MAKEINTRESOURCE(IDD_HELP), hwnd, (DLGPROC) DialogFunc);

//SetTimer(hwnd, idTimer = 1, speed, NULL);

break;

case ID_ABOUT:

KillTimer(hwnd, 1);

ShellAbout(hwnd,"Tetris(designed by Izotov A.S.)","Group: SCS-03-1",NULL);

//SetTimer(hwnd, idTimer = 1, speed, NULL);

break;

}

return 0;

case WM_SIZE:

cxClient=LOWORD (lParam)/10;

cyClient=HIWORD (lParam)/16;

return 0;

case WM_PAINT:

hdc = BeginPaint (hwnd, &ps) ;

for (countx=0;countx<10;countx++)

{

for (county=0;county<16;county++)

{

if(screen[countx][county]!=0)

{

switch(screen[countx][county])

{

case 0:

colorbrick=RGB(0,0,0);

break;

case 1:

colorbrick=RGB(255,0,0);

break;

case 2:

colorbrick=RGB(0,255,0);

break;

case 3:

colorbrick=RGB(0,0,255);

break;

case 4:

colorbrick=RGB(0,255,255);

break;

case 5:

colorbrick=RGB(255,0,255);

break;

case 6:

colorbrick=RGB(255,255,0);

break;

}

SetRect (&rect, countx*cxClient,county*cyClient,

countx*cxClient+cxClient,county*cyClient+cyClient);

hBrush = CreateSolidBrush (colorbrick);

hBrush = CreateSolidBrush (colorbrick);

FillRect (hdc, &rect, hBrush);

DeleteObject (hBrush);

};

}

}

EndPaint (hwnd, &ps);

return 0;

case WM_KEYDOWN:

switch (LOWORD(wParam))

{

case VK_ESCAPE:

SendMessage(hwnd,WM_CLOSE,0,0L);

break;

case VK_LEFT:

deltax=deltax-1;

Bind(deltax,deltay,4);

break;

case VK_RIGHT:

deltax=deltax+1;

Bind(deltax,deltay,6);

break;

case VK_UP:

rotate();

Bind(deltax,deltay,5);

break;

case VK_DOWN:

oldspeed=speed;

speed=50;

SetTimer(hwnd, idTimer = 1, speed, NULL);

break;

}

return 0;

case WM_TIMER:

deltay=deltay+1;

Bind(deltax,deltay,2);

return 0;

case WM_DESTROY:

KillTimer(hwnd, 1);

PostQuitMessage (0);

return 0;

}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;

}

//--------------------------------------------------------------------------------------

HWND hWnd;

void initscreen()

{

int countx,county;

for (countx=0;countx<10;countx++)

{

for (county=0;county<16;county++)

{

cup[countx][county]=0;

}

}

}

//---------------------------------------------------------------------------------------

void newfigure()

{

int i,numfigure;

if(endgame)return;

speed=oldspeed;

SetTimer(hwnd, idTimer = 1, speed, NULL);

for(i = 2;i<9;i++)

{

if(cup[i][3]>0) gameover();

}

deltax = 3;

deltay = 0;

srand(rand()%100);

numfigure = rand ()%6+1;

switch (numfigure)

{

case 1:

figure[0][0] = 0;

figure[1][0] = 0;

figure[2][0] = 0;

figure[3][0] = 0;

figure[0][1] = 0;

figure[1][1] = numfigure;

figure[2][1] = numfigure;

figure[3][1] = 0;

figure[0][2] = 0;

figure[1][2] = 0;

figure[2][2] = numfigure;

figure[3][2] = 0;

figure[0][3] = 0;

figure[1][3] = 0;

figure[2][3] = numfigure;

figure[3][3] = 0;

break;

case 2:

figure[0][0] = 0;

figure[1][0] = 0;

figure[2][0] = 0;

figure[3][0] = 0;

figure[0][1] = 0;

figure[1][1] = numfigure;

figure[2][1] = numfigure;

figure[3][1] = 0;

figure[0][2] = 0;

figure[1][2] = numfigure;

figure[2][2] = 0;

figure[3][2] = 0;

figure[0][3] = 0;

figure[1][3] = numfigure;

figure[2][3] = 0;

figure[3][3] = 0;

break;

case 3:

figure[0][0] = 0;

figure[1][0] = numfigure;

figure[2][0] = 0;

figure[3][0] = 0;

figure[0][1] = 0;

figure[1][1] = numfigure;

figure[2][1] = numfigure;

figure[3][1] = 0;

figure[0][2] = 0;

figure[1][2] = 0;

figure[2][2] = numfigure;

figure[3][2] = 0;

figure[0][3] = 0;

figure[1][3] = 0;

figure[2][3] = 0;

figure[3][3] = 0;

break;

case 4:

figure[0][0] = 0;

figure[1][0] = 0;

figure[2][0] = numfigure;

figure[3][0] = 0;

figure[0][1] = 0;

figure[1][1] = numfigure;

figure[2][1] = numfigure;

figure[3][1] = 0;

figure[0][2] = 0;

figure[1][2] = numfigure;

figure[2][2] = 0;

figure[3][2] = 0;

figure[0][3] = 0;

figure[1][3] = 0;

figure[2][3] = 0;

figure[3][3] = 0;

break;

case 5:

figure[0][0] = 0;

figure[1][0] = 0;

figure[2][0] = 0;

figure[3][0] = 0;

figure[0][1] = 0;

figure[1][1] = numfigure;

figure[2][1] = numfigure;

figure[3][1] = 0;

figure[0][2] = 0;

figure[1][2] = numfigure;

figure[2][2] = numfigure;

figure[3][2] = 0;

figure[0][3] = 0;

figure[1][3] = 0;

figure[2][3] = 0;

figure[3][3] = 0;

break;

case 6:

figure[0][0] = 0;

figure[1][0] = numfigure;

figure[2][0] = 0;

figure[3][0] = 0;

figure[0][1] = 0;

figure[1][1] = numfigure;

figure[2][1] = 0;

figure[3][1] = 0;

figure[0][2] = 0;

figure[1][2] = numfigure;

figure[2][2] = 0;

figure[3][2] = 0;

figure[0][3] = 0;

figure[1][3] = numfigure;

figure[2][3] = 0;

figure[3][3] = 0;

break;

}

scores=scores+numfigure;

wsprintf (title, "%s - %i", szAppName,scores);

SetWindowText(hwnd,title);

}

//---------------------------------------------------------------------------------------

void gameover()

{

char result[30]="You score: ";

KillTimer(hwnd, 1);

endgame=TRUE;

DialogBox(hinst, MAKEINTRESOURCE(IDD_SCOREDIALOG), hwnd, (DLGPROC) DialogFunc);

}

//---------------------------------------------------------------------------------------

void Bind(int x,int y,int keys)

{

int i,j,i1,j1;

for(j=0;j<16;j++)

{

for(i=0;i<10;i++)

{

oldscreen[i][j]= screen[i][j];

}

}

for(j=0;j<16;j++)

{

for(i=0;i<10;i++)

{

screen[i][j]= cup[i][j];

}

}

for(j=0;j<4;j++)

{

for(i=0;i<4;i++)

{

if((figure[i][j]>0)&&((screen[i+x][j+y]>0)||(i+x+1==0)||(j+y==16)||(i+x==10)))

{

switch(keys)

{

case 4:

deltax = deltax + 1;

break;

case 6:

deltax = deltax - 1;

break;

case 2:

for(j1 = 0;j1<4;j1++)

{

for (i1 = 0;i1<4;i1++)

{

if(figure[i1][j1] > 0)

{

cup[i1 + x][j1 + y -1] = figure[i1][j1];

}

}

for (j1=0;j1<16;j1++)

{

for(i1=0;i1<10;i1++)

{

screen[i1][j1] = cup[i1][j1];

}

}

delfull();

newfigure();

break;

case 5:

unrotate();

}

x = deltax;

y = deltay;

}

}

}

for(j=0;j<4;j++)

{

for(i = 0;i<4;i++)

{

if(figure[i][j]>0)

{

screen[i + x][j + y] = figure[i][j];

}

}

}

show();

}

//---------------------------------------------------------------------------------------

void delfull()

{

int i,j,row,col;

BOOL flag;

for(j=0;j<16;j++)

{

flag = TRUE;

for(i=0;i<10;i++)

{

if(cup[i][j]==0) flag=FALSE;

}

if(flag)

{

scores=scores+25;

wsprintf (title, "%s - %i", szAppName,scores) ;

SetWindowText(hwnd,title);

speed=speed-2;

SetTimer(hwnd, idTimer = 1, speed, NULL);

for(row=j;row>1;row--)

{

for(col=0;col<10;col++)

{

cup[col][row] = cup[col][row - 1];

}

}

}

flag = TRUE;

}

}

//---------------------------------------------------------------------------------------

void unrotate()

{

int i,j;

for(j=0;j<4;j++)

{

for(i=0;i<4;i++)

{

figure[i][j] = oldfigure[i][j];

}

}

}

//---------------------------------------------------------------------------------------

void rotate()

{

int i,j;

for(j = 0;j<4;j++)

{

for(i=0;i<4;i++)

{

oldfigure[i][j]=figure[i][j];

}

}

for(j = 0;j<4;j++)

{

for(i=0;i<4;i++)

{

figure[i][j]=oldfigure[3-j][i];

}

}

}

//---------------------------------------------------------------------------------------

void show()

{

HDC hdc;

int countx,county;

COLORREF colorbrick;

HBRUSH hBrush ;

RECT rect ;

hdc = GetDC (hwnd) ;

for (countx=0;countx<10;countx++)

{

for (county=0;county<16;county++)

{

if(screen[countx][county]!=oldscreen[countx][county])

{

switch(screen[countx][county])

{

case 0:

colorbrick=RGB(0,0,0);

break;

case 1:

colorbrick=RGB(255,0,0);

break;

case 2:

colorbrick=RGB(0,255,0);

break;

case 3:

colorbrick=RGB(0,0,255);

break;

case 4:

colorbrick=RGB(0,255,255);

break;

case 5:

colorbrick=RGB(255,0,255);

break;

case 6:

colorbrick=RGB(255,255,0);

break;

break;

}

SetRect (&rect, countx*cxClient,county*cyClient,

countx*cxClient+cxClient,county*cyClient+cyClient);

hBrush = CreateSolidBrush (colorbrick);

FillRect (hdc, &rect, hBrush);

DeleteObject (hBrush);

}

}

}

ReleaseDC (hwnd, hdc);

}

static BOOL CALLBACK DialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)

{

FILE *f;

char name[5][25];

char score[5][10];

int maxscore[5];

int i;

switch (msg) {

case WM_INITDIALOG:

f=fopen("tetris.dat","rb");

if(f==NULL)break;

for(i=0;i<5;i++)

{

fread(name[i],1,25,f);

fread(score[i],1,10,f);

maxscore[i]=atoi(score[i]);

}

fclose(f);

for(i=0;i<5;i++)

{

if(scores>maxscore[i]&&endgame)

{

itoa(scores,score[i],10);

SendDlgItemMessage(hwndDlg,102+i,EM_SETREADONLY,(WPARAM)FALSE,(LPARAM)0);

i=5;

scores=0;

}

}

for(i=0;i<5;i++)

{

SendDlgItemMessage(hwndDlg,102+i,WM_SETTEXT,(WPARAM)0,(LPARAM)name[i]);

SendDlgItemMessage(hwndDlg,107+i,WM_SETTEXT,(WPARAM)0,(LPARAM)score[i]);

}

return TRUE;

case WM_COMMAND:

switch (LOWORD(wParam))

{

case IDOK:

for(i=0;i<5;i++)

{

SendDlgItemMessage(hwndDlg,102+i,WM_GETTEXT,(WPARAM)25,(LPARAM)name[i]);

SendDlgItemMessage(hwndDlg,107+i,WM_GETTEXT,(WPARAM)10,(LPARAM)score[i]);

}

f=fopen("tetris.dat","wb");

for(i=0;i<5;i++)

{

fwrite(name[i],1,25,f);

fwrite(score[i],1,10,f);

}

fclose(f);

EndDialog(hwndDlg,1);

return 1;

}

break;

case WM_CLOSE:

EndDialog(hwndDlg,0);

return TRUE;

}

return FALSE;

}

Размещено на Allbest.ru

...

Подобные документы

  • История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа [168,1 K], добавлен 27.09.2013

  • Назначение, состав и виды операционной системы, ее управленческие функции. Порядок загрузки ОС. Назначение графического интерфейса Windows, характеристика его объектов и операций, проводимых с ними. Средства и система настройки программного продукта.

    контрольная работа [25,1 K], добавлен 27.11.2010

  • Изучение технических возможностей операционной системы Windows XP – ОС семейства Windows NT корпорации Microsoft. Особенности интегрированного программного обеспечения. Дополнительные аплеты в панели управления Windows. Графический интерфейс пользователя.

    презентация [7,4 M], добавлен 23.05.2010

  • Windows XP - универсальная операционная система семейства Windows NT, ее модификации. Средства, включенные в состав ОС как стандартные компоненты. Системные требования ОС к аппаратным ресурсам. Графический интерфейс пользователя и командной строки.

    контрольная работа [22,2 K], добавлен 19.12.2011

  • Программа операционной системы. Перемещение и копирование объектов. Окна Windows, операционное меню, настройка свойств папки, вызов справки Windows. Работа с дисками, папками и файлами, с приложениями и документами. Стандартные программы Windows.

    контрольная работа [21,9 K], добавлен 29.01.2011

  • Элементы интерфейса Windows NT. Средства взаимодействия пользователей с системой. Выполнение настройки компьютера. Ярлыки на рабочем столе. Типа окон: приложений, документов и диалоговые окна. Интерфейс администратора сети. Понятие web-браузера.

    презентация [8,8 K], добавлен 23.10.2013

  • Доступ пользователей сети к электронным сообщениям, хранящимся на сервере. Описание программы, аутентификация простая, APOP и AUTH-аутентификация. Реализация функций, руководство пользователя, алгоритмы функционирования программы, графический интерфейс.

    курсовая работа [1,1 M], добавлен 13.11.2009

  • Совместное функционирование всех устройств компьютера и доступ к его ресурсам. Понятие и функции графической операционной системы Windows. Справочная служба Windows. Управление файловой системой. Технология "Plug and Play". Графический интерфейс Windows.

    контрольная работа [22,2 K], добавлен 22.01.2011

  • Описание области применения операционной системы (ОС) Windows 7, ее основные характеристики и причины для сбоев в работе. Выбор программного обеспечения и алгоритма для диагностики и восстановления ОС. Расчет экономических затрат на реализацию проекта.

    дипломная работа [2,3 M], добавлен 10.04.2017

  • Поля редактирования. Каркасное приложение для Win32. Определение класса окна и регистрация его в системе. Считывание значения из поля редактирования. Цикл обработки сообщения. Числовой формат. Схема алгоритма. Вывод результата работы программы на экран.

    практическая работа [290,9 K], добавлен 11.10.2008

  • Прикладные программы и утилиты. Простейшие функции операционной системы. История разработки корпорацией Microsoft Corporation графической операционной оболочки Windows. Версия семейства сетевых ОС Windows NT (Millennium Edition, 2000, XP, Vista, Seven)

    презентация [965,2 K], добавлен 12.10.2013

  • Описание сновных достоинств операционной системы Windows. Удобный графический интерфейс, высокая надежность работы, поддержка широкого спектра современных устройств, богатые возможности персонализации настроек и глубокая интеграция с Интернетом.

    реферат [103,4 K], добавлен 21.10.2009

  • Работа с объектами операционной системы Windows: основные понятия и горячие клавиши. Создание и редактирование файлов и папок. Скриншоты и графический редактор Paint. Редактирование простейших текстовых документов в Блокноте. Работа с калькулятором.

    лабораторная работа [16,6 K], добавлен 30.11.2010

  • Средства разработки развивающих и обучающих игр и используемой программы. Среда выполнения и Dalvik. Разработка приложения для платформы Android. Графический интерфейс и обработка касаний экрана. Разработка экранов приложения и их взаимодействия.

    дипломная работа [2,1 M], добавлен 18.01.2016

  • Характеристика операционной системы. История развития Windows. Сравнительная характеристика версий Windows. Элементы и инструменты Windows XP. Прикладные программы в Windows XP. Работа настольных и портативных компьютеров под управлением Windows.

    доклад [19,1 K], добавлен 16.10.2011

  • Создание класса прямоугольников со сторонами, параллельными осям координат. Основные требования к программе. Описание классов и диаграмма их взаимодействия. Интерфейс пользователя и руководство по эксплуатации программы. Блок-схемы разработанных методов.

    курсовая работа [622,8 K], добавлен 18.03.2011

  • Виды операционных систем. Графический пользовательский интерфейс операционной системы Linux и Mac OS. Функции устройства управления окнами (windows manager). Программа управления файлами, драйвера, модуль управления памятью - основные компоненты ядра.

    презентация [1,8 M], добавлен 14.10.2013

  • История развития Windows: покупка лицензии на ОВОS, выпуск версии МS-DOS 1.0, графической оболочки Microsoft Windows 1.0 и поддержка расширенной памяти. Графический пользовательский интерфейс (GUI) и комбинация DOS-Windows. Windows NT и поздние версии.

    реферат [25,1 K], добавлен 13.01.2010

  • Использование операционных систем Microsoft Windows. Разработка операционной системы Windows 1.0. Возможности и характеристика последующих версий. Выпуск пользовательских операционных систем компании, доработки и нововведения, версии Windows XP и Vista.

    реферат [23,3 K], добавлен 10.01.2012

  • Операционная система MS-DOS: история и характеристика. Обзор стандартных программ операционной системы Windows. Способы запуска программ. Служебные приложения Windows и их назначение: диспетчер задач, проверка, очистка, дефрагментация и архивация диска.

    реферат [221,4 K], добавлен 06.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.