Розробка гри "Lines" в середовищі С++

 

ЗМІСТ


ВСТУП

. ЗАГАЛЬНА ЧАСТИНА

1.1Огляд існуючих рішень

1.2Перспективи застосування

2. СПЕЦІАЛЬНА ЧАСТИНА

.1 Розробка і опис структурної і функціональної схем

.2 Вибір і обґрунтування окремих вузлів

.3 Проектування алгоритму розвязання задачі

. ЧАСТИНА РОЗРОБКИ ПРОГРАМНОГО КОДУ

.1 Опис створеної програми

ВИСНОВОК

ЛІТЕРАТУРА

ДОДАТОК А



ВСТУП


Системне програмування - це вид програмування <#"justify">·можуть працювати у ресурсо-обмеженому середовищі

·максимально раціональні та мають мінімальні затримки за часом виконання

·мають малі бібліотеки періоду виконання <#"justify">1.ЗАГАЛЬНА ЧАСТИНА


.1Огляд існуючих рішень для системи


Мета цієї роботи полягає у створенні програми, що реалізує за допомогою автоматного підходу [2] гру "Lines", правила якої описані нижче. Зовнішній вигляд програми наведено на рисунку - 1.


Рисунок 1- Фрагмент гри


Опишемо правила "класичної" гри "Lines".

. Ігрове поле являє собою квадратну сітку осередків, в яких розташовуються кулі, але не більше одного в кожній з них.

. На кожному ходу в обраних випадковим чином осередках з'являються нові кулі.

. Гравець за допомогою "миші" має перемістити одна з куль у вільну комірку, намагаючись вибудовувати з однакових куль безперервні горизонтальні, вертикальні або діагональні лінії.

. Якщо після переміщення або появи кулі лінія досягне заданої довжини, то все кулі, що входять до неї, видаляються. При цьому гравець набирає певну кількість очок.

. Переміщення кулі з вихідної комірки в "осередок призначення" допускається, якщо існує шлях, що проходить за вільними осередкам, розташованим поруч один з одним по вертикалі або по горизонталі.

. Якщо після переміщення кулі була видалена лінія, то на наступному ходу нові кулі, які повинні були б з'явитися відповідно до п.2, не з'являються.

. Гра закінчується, коли на ігровому полі не залишається вільних комірок - вони всі заповнені кулями.

. Мета гри - набрати якомога більше очок, які запам'ятовуються у відповідній таблиці.

. У грі використовується "шкала цінностей". При цьому кількість очок, які отримує гравець при складанні лінії куль, обчислюється (при n ³ k) за формулою

= n × (n - k 1)

- кількість збудованих в лінію куль,мінімальна кількість видаляються куль,- одержувані очки


. У будь-який момент гри на екран виводиться підказка про кулях, які з'являться на наступному кроці. Ці підказки відображаються на поле у вигляді зменшених зображень куль.

Для розробки програми використав MicrosoftVisualStudio 2010 та бібліотеки NETFramework та мові програмування C#.# (вимовляється сі шарп) - об'єктно-орієнтована мова програмування. Розроблена в 1998-2001 роках групою інженерів під керівництвом Андерса Хейлсберг в компанії Microsoft як мова розробки додатків для платформи Microsoft. NET Framework і згодом була стандартизована як ECMA-334 і ISO/IEC 23270.# відноситься до сім'ї мов з C-подібним синтаксисом, з них його синтаксис найбільш близький до C + + і Java. [3]Visual Studio - лінійка продуктів компанії Майкрософт, що включають інтегроване середовище розробки програмного забезпечення і ряд інших інструментальних засобів. Дані продукти дозволяють розробляти як консольні додатки, так і додатки з графічним інтерфейсом, в тому числі з підтримкою технології Windows Forms, а також веб-сайти, веб-додатки, веб-служби як у рідному, так і в керованому кодах для всіх платформ, підтримуваних Microsoft Windows, Windows Mobile, Windows CE,. NET Framework,. NET Compact Framework і Microsoft Silverlight. [4]Framework - програмна платформа, випущена компанією Microsoft в 2002 році. Основою платформи є виконуюче середовище CommonLanguageRuntime (CLR), здатна виконувати як звичайні програми, так і серверні веб-додатки. NET Framework підтримує створення програм, написаних на різних мовах програмування. [5]

Для реалізації графічної частини була використана технологія Windows Form, яка має достатній вибір властивостей і методів для реалізації графічного інтерфейсу.


.2 Перспективи застосування

- логічна гра, в якій необхідно очищати ігрове поле від кульок. Поле являє собою квадрат, що складається з клітин. На початку гри на нього виставляється три кульки різних кольорів. Як правило, використовується сім (класично) різних кольорів. За хід гравець може пересунути одну кульку, виділивши його і вказавши його нове місце розташування. При цьому для здійснення ходу необхідно, щоб між початковою і кінцевою клітинами існував шлях з вільних клітин. При вибудовуванні лінії з чотирьох і більше кульок одного кольору (по горизонталі, вертикалі або діагоналі) вона зникає. Після кожного ходу виставляються нові три кульки, але при зникненні лінії цього не відбувається.

Комп'ютерні ігри - це окрема галузь людської діяльності, не менш значуща, ніж живопис, кіно або музика. Більше того, комп'ютерні ігри включають в себе і живопис, і музику, і багато іншого. Історія розвитку комп'ютерних ігор почалася порівняно недавно, але ігри вже досягли певних технологічних висот. Важко сказати яка комп'ютерна гра була першою.

Швидше за все, це була якась логічна або настільна гра, просто перенесена на комп'ютер. Можливо, це була розрахункова гра, начебто посадки ракети на Місяць, але зараз це вже не має особливого значення.



2. СПЕЦІАЛЬНА ЧАСТИНА


.1 Розробка і опис структурної і функціональної схем програмного рішення


Згідно поставлених вимог розробив функціональну схему розвязання задачі.


Рисунок 2 - Функціональна схема


. Це блок, який відповідає за обробку даних в програмі.

. Блок відповідає за вивід результатів на екран. Цей блок виводить головне вікно на екран.

. Блок відповідає за те,щоб при натисканні на кнопки,які знаходяться у вікні додатку,сигнал надходив до блоку обробки даних.


.2 Вибір і обґрунтування окремих вузлів


Виконання програми можна поділити на два рівні:

. На першому рівні проводиться обробка даних в програмі та вивід результатів на екран (головне вікно).

. Проводиться перевірка на наявність ходу та розташування кульок



2.3 Проектування алгоритму розвязання задачі


Рисунок 3 - Алгоритм роботи додатку




3. РОЗРОБКА ПРОГРАМНОГО КОДУ


.1 Опис створеної програми


Для демонстрації готової програми, необхідно запустити Lines.exe. У результаті з`явиться вікно, зображене на малюнку.


Рисунок 4 - Загальний вигляд додатку


На цьому малюнку зображено загальний вигляд гри.

У головному меню гри, міститься два пункти: «Game (грати)» та «Help (допомога)»


Рисунок 5 - Головне меню додатку


В пункті «Game», знаходяться наступні підпункти:

.«New game»(нова гра)

2.Вибір тяжкості гри

.«Custom game»(пристосування гри)

.Таблиця результатів

.«Exit»(вихід)


Рисунок 6 - Функції додатку


Знизу головного меню, знаходиться цифрове табло на якому відображається кількість очок набраних користувачем, та час, з початку гри.


Рисунок 7 - Цифрове табло


Після запуску ігрового процесу на ігровому полі в довільних місцях з'являються шість кульок випадкового кольору. Три з них за розміром збігаються з клітинами ігрового поля. Вони позначають виставлені на ігрове поле кульки. Три інших мають менший розмір і показують місця, в які будуть виставлені кульки відповідного кольору після ходу гравця.



ВИСНОВОК


В ході роботи над курсовим проектом, була розроблена в середовищі С++ гра «Lines». Додаток має графічний інтерфейс та достатньо низькі системні вимоги. У разі перспектив розвитку проекту, можливе додавання музичного супроводу, таблиці рекордів, таймера, налаштування рівня складності, анімації при переміщені та видалені кульок.

Для нормального функціонування програми технічна система повинна задовольняти наступним вимогам: процесор Celeron 266 МГц, оперативна пам`ять 64 Мб, вільне місце на жорсткому диску не менше 1 Мб.

Програма є вільно розповсюдженою, на відміну від деяких аналогів. Програма не має зайвих функцій, має інтуїтивно зрозумілий інтерфейс. Для роботи не потребує зайвих пристроїв та програм, лише середовище, під яке скомпільовано код.



ЛІТЕРАТУРА


1. Шалыто А.А. SWITCH-технология. Алгоритмизация и программирование задач логического управления. СПб.: Наука, 1998.

2. Системне програмування

. Microsoft Visual Studio

. NET Framework


програма комп'ютерний гра lines


ДОДАТОК А

.cpp:


#include "windows.h"

#include "resource.h"

#include "random.h"

#include <list>

#include <queue>

#include <stack>

#include <strstrea.h>

#define MENU_HEIGHT 45

#define TOP_HEIGHT 46 // Высота табло (где отображаются очки) в

пикселах

#define CELL_SIZE 45 //Размер стороны ячейки в пикселах (они все

квадратные)

#define N1 4 //Количество картинок для появления шарика

#define N2 12 //Количество картинок для прыжка шарика

#define N3 9 //Количество картинок для удаления шарика

#define MAX_MAP_X 20 //Максимальный размер поля по x

#define MAX_MAP_Y 12 //Максимальный размер поля по y

{ int y;color;pre_color;num_pic;}[MAX_MAP_X][MAX_MAP_Y];ball_color;info

{int score;time;name[30];}[3];info null_leader={100,3600,"noname"};y_lines;gametime;gamescore;gametype;max_x; // по xmax_y; // по yapp_balls;del_balls;

#define LOGGING //Включаем логирование

#ifdef LOGGING*log;char* aCell_states[6] =

{"Отсутствие шара",

"Подсказка",

"Появление шара",

"Шар стоит",

"Шар прыгает",

"Удаление шара"};char* aLines_states[5] =

{"Поиск игрового шара",

"Поиск куда послать игровой шар",

"Передвижение игрового шара",

"Удаление линий",

"Появление новых шаров"};

#endifbmp_0,bmp_prestand, bmp_stand, bmp_jump[N2], _explode[N3], bmp_appear[N1], bmp_numbers,_points;*bmp[6];hDC;hCompatibleDC;hWnd;hInst;szTitle[] = "Lines";szWindowClass[] = "LINES";clRect;cell

{public:posx; // Позиция ячейки на поле (слева направо от 0)posy; // Позиция ячейки на поле (сверху вниз от 0)operator ==(const cell & b) const

{return (b.posx == posx && b.posy == posy);}operator !=(const cell & b) const

{return (!(*this == b));}& State() const

{return map[posx][posy].y;}& Color() const

{return map[posx][posy].color;}& PreColor() const

{return map[posx][posy].pre_color;}& NumPic() const

{return map[posx][posy].num_pic;}ACell(int e) const

{int &y=State();

#ifdef LOGGINGy_old = y;

#endif(y)

{case 0:(e==1) {z0(); y=3;}(e==2 && x0()) {z4(); y=1;}if (e==2) {z1(); y=1;};1:(e==1) {z2(); y=3;}(e==3) y=2;;2:(e==3 && x1()) {z6(); y=3;}if (e==3) {z5();};3:(e==0 && x0() ) {z4(); y=1;}if (e==0) {z3(); y=0;}(e==4) y=5;(e==5) y=4;;4:(e==0) {z6();z3(); y=0;}(e==6) {z6(); y=3;}(e==5 && x2()) {z6();}if (e==5) {z5();};5:(e==4 && x3() && x0()) {z6();z4(); y=1;}if (e==4 && x3()) {z6();z3(); y=0;}if (e==4) {z5();};}

#ifdef LOGGING(y!=y_old)

{char s[30];_t t;(&t);(s,30,"%X", gmtime(&t));(log,"[%s] => Ячейка (%d,%d) из состояния %s перешла в

состояние

%s.\n",s,posx+1,posy+1,aCell_states[y_old],aCell_states[y]);}

#endif();}DrawState() const

{SelectObject(hCompatibleDC, bmp[State()][NumPic()]);(hDC,posx*CELL_SIZE, TOP_HEIGHT+posy*CELL_SIZE, _SIZE+1, CELL_SIZE+1,, Color()*CELL_SIZE, 0, SRCCOPY);}:x0() const

{return PreColor()!=-1;}x1() const

{return (NumPic()==N1-1);}x2() const

{return (NumPic()==N2-1);}x3() const

{return (NumPic()==N3-1);}z0() const

{Color()=ball_color;}z1() const

{Color()=random(7);}z2() const

{PreColor()=Color();Color()=ball_color;}z3() const

{Color()=0;}z4() const

{Color()=PreColor();PreColor()=-1;}z5() const

{++NumPic();}z6() const

{NumPic()=0;}};ball;click_ball;::list<cell> appear_list;::list<cell> explode_list;::stack<cell> path;::list<cell>::iterator itr;ALines(int);z0();z1_1();z1_2();z1_3();z2_1();z2_2();z2_3();z2_4();z3_1();z3_2();z4_1();z4_2();xk0();xk1();xk2();x0();x1();x2();x3();x4();x5();FindEmptyCell(cell &);GenerateAppearList();CheckAppearList();FindPath(const cell &, const cell &);CheckLines(const cell &);Valid(const cell &);GameOver();NewGame();DrawTime();DrawScore();DrawTop();CheckCustomParameters();GetInfo();WriteInfo();MyRegisterClass(HINSTANCE);InitInstance(HINSTANCE,int);CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);CALLBACK About(HWND, UINT, WPARAM, LPARAM);CALLBACK Custom(HWND, UINT, WPARAM, LPARAM);CALLBACK BestResults(HWND, UINT, WPARAM, );CALLBACK GetName(HWND, UINT, WPARAM, LPARAM);APIENTRY WinMain(HINSTANCE hInstance,hPrevInstance,lpCmdLine,nCmdShow)

{MSG msg;hAccelTable;();=hInstance;(hInstance);(!InitInstance (hInstance,nCmdShow))

{return FALSE;}= LoadAccelerators(hInstance, (LPCTSTR)IDC_LINES);(GetMessage(&msg, NULL, 0, 0))

{if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))

{TranslateMessage(&msg);(&msg);}}msg.wParam;}MyRegisterClass(HINSTANCE hInstance)

{WNDCLASSEX wcex;.cbSize = sizeof(WNDCLASSEX);.style = CS_HREDRAW | CS_VREDRAW;.lpfnWndProc = (WNDPROC)WndProc;.cbClsExtra = 0;.cbWndExtra = 0;.hInstance = hInstance;.hIcon = LoadIcon(hInst, (LPCTSTR)IDI_LINES);.hCursor = LoadCursor(NULL, IDC_ARROW);.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);.lpszMenuName = (LPCSTR)IDC_LINES;.lpszClassName = szWindowClass;.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);RegisterClassEx(&wcex);}InitInstance(HINSTANCE hInstance, int nCmdShow)

{hWnd = CreateWindow(szWindowClass, szTitle,_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBO,// WS_OVERLAPPEDWINDOW,_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, );(!hWnd)

{return FALSE;}(hWnd, nCmdShow);(hWnd);TRUE;}CALLBACK WndProc(HWND hWnd, UINT message, wParam, LPARAM lParam)

{static PAINTSTRUCT ps;RECT Rect;HMENU hMenu;HKEY hKey;cell l;int temp;FILE *f;(message)

{case WM_CREATE:();[0] = &bmp_0;[1] = &bmp_prestand;[2] = &bmp_appear[0];[3] = &bmp_stand;[4] = &bmp_jump[0];[5] = &bmp_explode[0];_0 = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_0));_prestand = (hInst,MAKEINTRESOURCE(IDB_PRESTAND));_appear[0] = (hInst,MAKEINTRESOURCE(IDB_APPEAR_1));_appear[1] = (hInst,MAKEINTRESOURCE(IDB_APPEAR_2));_appear[2] = (hInst,MAKEINTRESOURCE(IDB_APPEAR_3));_appear[3] = (hInst,MAKEINTRESOURCE(IDB_APPEAR_4));_stand = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_STAND));_jump[0] = (hInst,MAKEINTRESOURCE(IDB_JUMP_3));_jump[1] = (hInst,MAKEINTRESOURCE(IDB_JUMP_2));_jump[2] = (hInst,MAKEINTRESOURCE(IDB_JUMP_1));_jump[3] = (hInst,MAKEINTRESOURCE(IDB_JUMP_2));_jump[4] = (hInst,MAKEINTRESOURCE(IDB_JUMP_3));_jump[5] = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_STAND));_jump[6] = (hInst,MAKEINTRESOURCE(IDB_JUMP_4));_jump[7] = (hInst,MAKEINTRESOURCE(IDB_JUMP_5));_jump[8] = (hInst,MAKEINTRESOURCE(IDB_JUMP_6));_jump[9] = (hInst,MAKEINTRESOURCE(IDB_JUMP_5));_jump[10] = (hInst,MAKEINTRESOURCE(IDB_JUMP_4));_jump[11] = (hInst,MAKEINTRESOURCE(IDB_STAND));_explode[0] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_1));_explode[1] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_2));_explode[2] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_3));_explode[3] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_4));_explode[4] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_5));_explode[5] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_6));_explode[6] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_7));_explode[7] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_8));_explode[8] = (hInst,MAKEINTRESOURCE(IDB_EXPLODE_9));_numbers = (hInst,MAKEINTRESOURCE(IDB_NUMBERS));_points = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_POINTS));= GetDC(hWnd);= CreateCompatibleDC(hDC);

#ifdef LOGGING= fopen("lines.log","wt");

#endif();= GetSubMenu(GetMenu(hWnd),0);(hMenu, gametype+IDM_EASY, MF_CHECKED);(hWnd,&Rect);(hWnd,Rect.left,Rect.top,CELL_SIZE*max_x+7,TOP_HEIG+CELL_SIZE*max_y+MENU_, TRUE);();(hWnd,0,1000,NULL);;WM_LBUTTONDOWN:_ball.posx = LOWORD(lParam)/CELL_SIZE;_ball.posy = (HIWORD(lParam)-TOP_HEIGHT)/45;(0);;WM_TIMER:(LOWORD(wParam))

{case 0:++;();;1:(1);;};WM_COMMAND:(LOWORD(wParam))

{case IDM_EASY:_x=9;_y=6;_balls = 2;_balls = 4;;IDM_NORMAL:_x=9;_y=9;_balls = 3;_balls = 5;;IDM_HARD:_x=20;_y=12;_balls = 10;_balls = 4;;IDM_CUSTOM:(hInst, (LPCTSTR)IDD_CUSTOMBOX, hWnd,

(DLGPROC)Custom);();;}(LOWORD(wParam))

{case IDM_ABOUT:(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd,

(DLGPROC)About);;IDM_EXIT:(hWnd);;IDM_EASY:IDM_NORMAL:IDM_HARD:IDM_CUSTOM:(hMenu, gametype+IDM_EASY, MF_UNCHECKED);(hMenu,LOWORD(wParam), MF_CHECKED);=LOWORD(wParam)-IDM_EASY;(hWnd,&Rect);(hWnd,Rect.left,Rect.top,CELL_SIZE*max_x+7,TOP_HEIG+CELL_SIZE*max_+MENU_HEIGHT, TRUE);IDM_NEW:();(hWnd,NULL,FALSE);;IDM_BESTRESULTS:(hInst, (LPCTSTR)IDD_BESTRESULTSBOX, hWnd,

(DLGPROC)BestResults);;:DefWindowProc(hWnd, message, wParam, lParam);};WM_PAINT:(hWnd, &ps);();(l.posx=0;l.posx<max_x;l.posx++)(l.posy=0;l.posy<max_y;l.posy++).DrawState();(hWnd, &ps);;

#ifdef LOGGING(log);

#endif(0);;:DefWindowProc(hWnd, message, wParam, lParam);}0;}CALLBACK About(HWND hDlg, UINT message, WPARAM , LPARAM lParam)

{switch (message)

{case WM_INITDIALOG:TRUE;WM_COMMAND:(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{EndDialog(hDlg, LOWORD(wParam));TRUE;};}CALLBACK BestResults(HWND hDlg, UINT message, wParam, LPARAM lParam)

{static char szVal[50];int i, h ,m1,m2,s1,s2;(message)

{case WM_INITDIALOG:(i=0;i<3;i++)

{h=leaders[i].time;=h%60; h/=60;=s2%10; s2/=10;=h%60; h/=60;=m2%10; m2/=10;(szVal,sizeof(szVal)) << leaders[i].name<< ends;;(hDlg, IDC_EDIT1+i, WM_SETTEXT,

(WPARAM)0,(LPARAM)szVal);(szVal,sizeof(szVal))<< leaders[i].score<<"

"<<h<<':'<<m2<<m1<<':'<<s2<<s1<< ends;(hDlg, IDC_EDIT4+i, WM_SETTEXT,

(WPARAM)0,(LPARAM)szVal);}TRUE;WM_COMMAND:(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{EndDialog(hDlg, LOWORD(wParam));TRUE;};}FALSE;}CALLBACK GetName(HWND hDlg, UINT message, wParam, LPARAM lParam)

{static char szVal[30];(message)

{case WM_INITDIALOG:TRUE;WM_COMMAND:(LOWORD(wParam) == IDOK)

{SendDlgItemMessage(hDlg, IDC_EDIT1, WM_GETTEXT,

(WPARAM)sizeof(szVal),

(LPARAM)szVal);(leaders[gametype].name,sizeof(leaders[gametype].name)) <<<< ends;}(LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

{EndDialog(hDlg, LOWORD(wParam));TRUE;};}FALSE;}ALines(int e)

{int y_old = y_lines;(y_lines)

{return (click_ball.State()==0 || click_ball.State()==1);}xk1()

{return (click_ball.State()==3);}xk2()

{return (click_ball.State()==4);}x0()

{return FindPath(ball,click_ball);}x1()

{return path.empty();}x2()

{return CheckLines(ball);}x3()

{itr=explode_list.begin();(itr->State()==0);//N3}x4()

{itr=appear_list.begin();(itr->State()==3);//N1}FindPath(const cell &from, const cell &in){{pred;mark;}[MAX_MAP_X][MAX_MAP_Y];k,l;::queue<cell> q;(int i=0;i<max_x;i++)(int j=0;j<max_y;j++)[i][j].mark = 0;[from.posx][from.posy].mark=1;.push(from);(!q.empty()){=q.front();(int i=0;i<4;i++){=k;(i){0:.posx--;;1:.posx++;;2:.posy--;;3:.posy++;;}(Valid(l) && !v[l.posx][l.posy].mark){[l.posx][l.posy].mark=1;[l.posx][l.posy].pred=k;.push(l);(l==in){{.push(l);= v[l.posx][l.posy].pred;

} while (l!=from);true;}

}}.pop();}false;}CheckAppearList(){tmp;=appear_list.begin();(itr!=appear_list.end()){(itr->State()==3){=itr->PreColor();>PreColor()=-1;(*itr);>PreColor()=tmp;

(*itr).ACell(2);}

++itr;}}GenerateAppearList(){_list.clear();l;(int i=0;i<app_balls;i++)(FindEmptyCell(l)){_list.push_back(l);.ACell(2);}return;}FindEmptyCell(cell &in){l;.posx=random(max_x);.posy=random(max_y);(l.State()==0){=l;true;}(int i=0;i<max_x*max_y;i++){(l.posx!=max_x-1) l.posx++;if (l.posy!=max_y-1) {l.posy++;l.posx=0;}{l.posx=0;l.posy=0;};(l.State()==0){=l;true;}}();false;}Valid(const cell &in){(in.posx >= 0) && (in.posx < max_x) && (in.posy >= 0) && (in.posy

< max_y) &&

(in.State() == 0 || in.State() == 1);}NewGame(){(int i=0;i<max_x;i++)(int j=0;j<max_y;j++){[i][j].y=0;[i][j].color=0;[i][j].pre_color=-1;[i][j].num_pic=0;}_lines =0;= 0;= 0;

#ifdef LOGGINGs[30];_t t;(&t);(s,30,"%X", gmtime(&t));(log,"[%s] Новая игра\n",s);

#endif(hWnd,0,1000,NULL);l;(i=0;i<del_balls;i++){(l);_color=random(7);.ACell(1);}();}GameOver(){(hWnd,0);

#ifdef LOGGINGs[30];_t t;(&t);(s,30,"%X", gmtime(&t));(log,"[%s] Конец игры\n",s);

#endif(gametype<3){(leaders[gametype].score<gamescore ||

(leaders[gametype].score==gamescore &&[gametype].time>gametime)){(hInst, (LPCTSTR)IDD_GETNAMEBOX, hWnd,

(DLGPROC)GetName);[gametype].score=gamescore;[gametype].time=gametime;}DialogBox(hInst, (LPCTSTR)IDD_BESTRESULTSBOX, hWnd,

(DLGPROC)BestResults);

} else MessageBox(hWnd,"Your custom game is over...",

"Condolences",MB_OK);();(hWnd,NULL,FALSE);}DrawTime(){(hCompatibleDC, bmp_numbers);h=gametime;s2=h%60; h/=60;s1=s2%10; s2/=10;m2=h%60; h/=60;m1=m2%10; m2/=10;(hDC,max_x*CELL_SIZE-

,5,20,37,hCompatibleDC,s1*19,0,SRCCOPY);(hDC,max_x*CELL_SIZE-

,5,20,37,hCompatibleDC,s2*19,0,SRCCOPY);(hDC,max_x*CELL_SIZE-

,5,20,37,hCompatibleDC,m1*19,0,SRCCOPY);(hDC,max_x*CELL_SIZE-

,5,20,37,hCompatibleDC,m2*19,0,SRCCOPY);(hDC,max_x*CELL_SIZE-

,5,20,37,hCompatibleDC,h*19,0,SRCCOPY);(hCompatibleDC, bmp_points);(hDC,max_x*CELL_SIZE-56,

,5,37,hCompatibleDC,0,0,SRCCOPY);(hDC,max_x*CELL_SIZE-104,

,5,37,hCompatibleDC,0,0,SRCCOPY);}DrawScore(){(hCompatibleDC, bmp_numbers);t=gamescore;(int i=0; i<5; i++){(hDC,100-21*i,5, 20, 37, hCompatibleDC, (t%10)*19, 0, SRCCOPY);/=10;}}DrawTop(){(hDC,0, 0, 46*max_x, 46, BLACKNESS);();();}CheckCustomParameters(){(max_x<6) max_x=6;(max_x>20) max_x=20;(max_y<2) max_y=2;(max_y>12) max_y=12;(del_balls<2) del_balls=2;(del_balls>(max_x>max_y?max_x:max_y)) del_balls =

(max_x>max_y?max_x:max_y);(app_balls+del_balls > max_x*max_y){_balls=max_x*max_y-del_balls;}}GetInfo(){*in;(in = fopen("leaders.dat","rb")){(&gametype,sizeof(int),1,in);(&max_x,sizeof(int),1,in);(&max_y,sizeof(int),1,in);(&app_balls,sizeof(int),1,in);(&del_balls,sizeof(int),1,in);(int i=0;i<3;i++)(&leaders[i],sizeof(info),1,in);(in);}{=0;_x=9;max_y=9;_balls=3;del_balls=5;(int i=0;i<3;i++)[i]=null_leader;}}WriteInfo(){*out;(out = fopen("leaders.dat","wb")){(&gametype,sizeof(int),1,out);(&max_x,sizeof(int),1,out);(&max_y,sizeof(int),1,out);(&app_balls,sizeof(int),1,out);(&del_balls,sizeof(int),1,out);(int i=0;i<3;i++)(&leaders[i],sizeof(info),1,out);(out);}}


ЗМІСТ ВСТУП . ЗАГАЛЬНА ЧАСТИНА 1.1Огляд існуючих рішень 1.2Перспективи застосування 2. СПЕЦІАЛЬНА ЧАСТИНА .1 Розробка і опис структурної і

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ