---
title: "«Крестики-нолики». Меню и звук."
description: "Привет всем! В прошлый раз мы сделали рабочую версию игры OXO («Крестики-нолики»). Сегодня мы добави..."
author: "Raphael"
published: "2013-05-13T03:01:05+00:00"
modified: "2013-10-06T23:47:46+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/krestiki-noliki-menyu-i-zvuk-350215"
markdown_url: "https://yvision.kz/post/krestiki-noliki-menyu-i-zvuk-350215/markdown"
site_name: "Yvision.kz"
---

# «Крестики-нолики». Меню и звук.

> Привет всем! В прошлый раз мы сделали рабочую версию игры OXO («Крестики-нолики»). Сегодня мы добави...

Привет всем! В [прошлый раз](http://yvision.kz/post/345075) мы сделали рабочую версию игры OXO («Крестики-нолики»). Сегодня мы добавим к ней стандартное меню (1 игрок, 2 игрока, выход) и звуковое оформление. Со звука, пожалуй, и начнем.

Управление звуковым устройством компьютера (в данном случае системным динамиком; если вы используете DosBox, то он будет эмулировать звук системного динамика через любое звуковое устройство) осуществляется последовательностью следующих операторов:

Sound(F) - включение звука с частотой тона F (измеряется в герцах);
Delay(N) - задержка выполнения программы на N миллисекунд;
NoSound - выключение звука.

Для программирования мелодии удобно применять известную формулу расчета частоты звука:

F=Round(440*Exp(Ln(2)*(No-(10-Nn)/12))),
где No - номер октавы  -4<= No <=4;  для основной октавы No=0;
Nn - номер ноты   1 - До,   2 - До#,   3 - Ре,  и т. д.  12 - Cи;
при сквозной нумерации нот принять для No<0 - Nn<1,  для No>0 - Nn>12.

![«Крестики-нолики». Меню и звук.](http://storage.yvision.kz/images/user/raphael/f8m0UFN0htQ6R4Sv16TO0BM5p2nuJR.png)

Диапазон применимых в музыке звуков разбит на 9 октав, каждая из которых имеет своё название. Список октав и частоты нот в них вы можете посмотреть в [википедии](http://ru.wikipedia.org/wiki/%D0%9E%D0%BA%D1%82%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0). Приведем несколько расчетов частоты звука. Например, нам нужна нота До из контроктавы, Ре из первой октавы и Ми из пятой.

![«Крестики-нолики». Меню и звук.](http://storage.yvision.kz/images/user/raphael/LMQFg29Yx57euu89si7BtOdbFUN1zW.png)

Код проигрыша этих нот:

 

- #include

- int main() {

- sound(32.703); delay(300); nosound();delay(300);
- sound(293.665); delay(300); nosound();delay(300);
- sound(5274); delay(300); nosound();}

Вот нечто похожее на фрагмент из «Собачьего вальса»:
- sound(293.7);delay(200);nosound();delay(0);
- sound(261.7);delay(200);nosound();delay(0);
- sound(174.6);delay(200);nosound();delay(150);
- sound(349.2);delay(200);nosound();delay(100);
- sound(349.2);delay(200);nosound();delay(150);
- sound(293.7);delay(200);nosound();delay(0);
- sound(261.7);delay(200);nosound();delay(0);
- sound(174.6);delay(200);nosound();delay(150);
- sound(349.2);delay(200);nosound();delay(100);
- sound(349.2);delay(200);nosound();delay(100);
- sound(293.7);delay(200);nosound();delay(0);
- sound(261.7);delay(200);nosound();delay(0);
- sound(174.6);delay(200);nosound();delay(150);
- sound(349.2);delay(200);nosound();delay(150);
- sound(220);delay(200);nosound();delay(150);
- sound(349.2);delay(200);nosound();delay(100);
- sound(349.2);delay(200);nosound();delay(200);
- sound(293.7);delay(200);nosound();delay(0);
- sound(261.7);delay(200);nosound();delay(0);
- sound(130);delay(150);nosound();delay(200);
- sound(349.2);delay(150);nosound();delay(200);
- sound(349.2);delay(150);nosound();delay(200);
- sound(293.7);delay(200);nosound();delay(0);
- sound(261.7);delay(200);nosound();delay(0);
- sound(130);delay(200);nosound();delay(200);
- sound(349.2);delay(150);nosound();delay(200);
- sound(349.2);delay(150);nosound();delay(200);
- sound(293.7);delay(200);nosound();delay(0);
- sound(261.7);delay(200);nosound();delay(150);
- sound(146);delay(200);nosound();delay(150);
- sound(349.2);delay(200);nosound();delay(200);
- sound(164.8);delay(200);nosound();delay(150);
- sound(349.2);delay(200);nosound();delay(200);
- sound(174.6);delay(200);nosound();delay(150);
- sound(349.2);delay(200);nosound();delay(200);
- sound(349.2);delay(200);nosound();delay(200);

При желании можно сделать «музыкальный инструмент», т.е. чтобы при нажатии клавиши издавался звук. Но проблема будет в том, что нельзя заставить динамик проигрывать две и более нот одновременно. Теперь добавим к нашей игре меню.

![«Крестики-нолики». Меню и звук.](http://storage.yvision.kz/images/user/raphael/qpbX20edAg39jLFu10xHOJd0S4i0M9.png)

Для начала пересохраним то, что мы с делали в прошлый раз, с расширением *.h. Подключим этот файл к нашей новой работе:

- #include "oxo.h"

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

Далее опишем функции, которые нам понадобятся:
- void check2(int x, int y)

- {

- bar(x,y,x+10,y+5);//выводим закрашенный квадратик, с помощью которого мы будем перемещаться по нашему меню

- }

- void step2(int y)//функция выполнения задач, в зависимости от выбранного пункта меню

- {

- if(y==129) closegraph();//если нажат выход, то закрываем программу

- if(y==114){start=1;main2();}//иначе запускаем главную функцию из заголовочного файла «oxo.h», т.е. саму игру

- }

- void menu(int x,int y){//вывод самого меню

- settextjustify(CENTER_TEXT, CENTER_TEXT);//устанавливаем отображение текста по центру

- settextstyle(DEFAULT_FONT,HORIZ_DIR,10);//настраиваем стили текста

- setcolor(2);//цвет

- outtextxy(x,y-25,"OXO");//надпись

- settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
- setcolor(6);
- outtextxy(x,y+30,"1 player");//пункты меню

- outtextxy(x,y+45,"2 players");
- outtextxy(x,y+60,"Exit");
- setfillstyle(1,7);//задаём стиль заполнения нашего указателя в меню

- }

И как подобает игровому меню, добавим какую-нибудь короткую мелодию при его появлении:
- a[0]=330; a[1]=80; a[2]=330;
- a[3]=140; a[4]=430; a[5]=100;
- a[6]=410; a[7]=160; a[8]=490;
- a[9]=160; a[10]=450; a[11]=200;
- a[12]=490; a[13]=220;
- delay(1000);
- for(i=0;i<14;i++){

- sound(a[i]);delay(200);}

- delay(200);
- nosound();

Этот код должен быть прописан в главной функции – int main(void). Все исходные материалы, а также exe-шник вы можете скачать [здесь](http://download.files.namba.net/files/47274992).

Как вы, возможно, заметили, у нас работает только два пункта меню – выход и 2 players. И если рядом нет друга, и играть с самим с собой уже наскучило

![«Крестики-нолики». Меню и звук.](http://storage.yvision.kz/images/user/raphael/fdqCAcjj4Sxp79jTz1A5jzw9AFHG5t.png)

, то на помощь придет Искусственный Интеллект. Продолжение следует…

---

Source: [https://yvision.kz/post/krestiki-noliki-menyu-i-zvuk-350215](https://yvision.kz/post/krestiki-noliki-menyu-i-zvuk-350215)