Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методические указания по выполнению курсового проекта (игра).pdf
Скачиваний:
29
Добавлен:
10.08.2019
Размер:
189.76 Кб
Скачать

vk.com/club152685050

31.Компьютерная реализация карточной игры «Покер».

32.Компьютерная реализация карточной игры «1000».

33.Компьютерная реализация карточной игры «Дурак».

34.Компьютерная реализация карточного пасьянса «Девятка».

35.Компьютерная реализация карточной игры «Блэк Джек».

Полезные функции для консольных приложений

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

Генерация случайных чисел

#include <cstdlib> #include <cmath> #include <ctime>

int rand_int(int a, int b)

{

return rand() % (b-a) + a;

}

double rand_double(double a, double b)

{

return double(rand()) / RAND_MAX * (b-a) + a;

}

int main()

{

// сбросить датчик псевдослучайных чисел srand(time(NULL));

...

}

Переместить курсор в заданную позицию

#include <windows.h>

void MoveCursor(int x, int y)

{

// Координаты COORD pos; pos.X = x; pos.Y = y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}

6

vk.com/club152685050

Установить видимость курсора

#include <windows.h>

void SetCursorVisibility(bool isVisible)

{

CONSOLE_CURSOR_INFO ci; ci.bVisible = isVisible; ci.dwSize = 1;

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &ci);

}

Очистить экран

#include <cstdlib> void ClearScreen()

{

// Вариант 1. system("cls");

}

или более предпочтительней:

#include <windows.h> void ClearScreen()

{

// Вариант 2.

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); if (hStdOut == INVALID_HANDLE_VALUE)

return;

/* Get the number of cells in the current buffer */ CONSOLE_SCREEN_BUFFER_INFO csbi;

if (!GetConsoleScreenBufferInfo(hStdOut, &csbi)) return;

DWORD cellCount = csbi.dwSize.X *csbi.dwSize.Y;

/* Fill the entire buffer with spaces */ DWORD count;

COORD homeCoords = {0, 0};

if (!FillConsoleOutputCharacter(hStdOut, (TCHAR) ' ', cellCount, homeCoords, &count))

return;

/* Fill the entire buffer with the current colors and attributes */ if (!FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, cellCount,

homeCoords, &count)) return;

/* Move the cursor home */ SetConsoleCursorPosition(hStdOut, homeCoords);

}

7

vk.com/club152685050

Была ли нажата клавиша

Функция _kbhit возвращает ненулевое значение, если была нажата какая-либо клавиша. В противном случае возвращает ноль.

#include <conio.h> int _kbhit();

Какая клавиша была нажата

Функция _getch возвращает ASCII-код нажатой клавиши. Если клавиша не была нажата, то производится ожидания нажатия. Некоторые клавиши (такие как стрелки, HOME, DELETE, PageUp, PageDown и т.д.) имеют расширенный код, который занимает два байта вместо одного. В этом случае, функция _getch возвращает значение 0 или 224 (0xE0 в шестнадцатеричной системе счисления) в качестве первого байта, и повторный вызов функции _getch возвращает второй байт.

#include <conio.h> int _getch();

Пример:

// Какая-нибудь клавиша нажата? if (_kbhit())

{

//Получить её код unsigned char c = _getch();

//Если это функциональная клавиша ...

if (c == 0 || c == 0xE0)

{

// то получить расширенный код c = _getch();

switch (c)

{

case 72:

cout << "Нажата клавиша ВВЕРХ " << endl; break;

case 80:

cout << "Нажата клавиша ВНИЗ " << endl; break;

case 75:

cout << "Нажата клавиша ВЛЕВО " << endl; break;

case 77:

cout << "Нажата клавиша ВПРАВО " << endl; break;

case 83: // Клавиша DEL ClearScreen(); break;

default:

8