• 9083
  • 4
  • 1
Нравится блог?
Подписывайтесь!

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

Привет всем! В прошлый раз мы сделали рабочую версию игры 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.

Диапазон применимых в музыке звуков разбит на 9 октав, каждая из которых имеет своё название. Список октав и частоты нот в них вы можете посмотреть в википедии. Приведем несколько расчетов частоты звука. Например, нам нужна нота До из контроктавы, Ре из первой октавы и Ми из пятой.

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

 
  1. #include <dos.h>
  2. int main() {
  3. sound(32.703); delay(300); nosound();delay(300);
  4. sound(293.665); delay(300); nosound();delay(300);
  5. sound(5274); delay(300); nosound();}

Вот нечто похожее на фрагмент из «Собачьего вальса»:

  1. sound(293.7);delay(200);nosound();delay(0);
  2. sound(261.7);delay(200);nosound();delay(0);
  3. sound(174.6);delay(200);nosound();delay(150);
  4. sound(349.2);delay(200);nosound();delay(100);
  5. sound(349.2);delay(200);nosound();delay(150);
  6. sound(293.7);delay(200);nosound();delay(0);
  7. sound(261.7);delay(200);nosound();delay(0);
  8. sound(174.6);delay(200);nosound();delay(150);
  9. sound(349.2);delay(200);nosound();delay(100);
  10. sound(349.2);delay(200);nosound();delay(100);
  11. sound(293.7);delay(200);nosound();delay(0);
  12. sound(261.7);delay(200);nosound();delay(0);
  13. sound(174.6);delay(200);nosound();delay(150);
  14. sound(349.2);delay(200);nosound();delay(150);
  15. sound(220);delay(200);nosound();delay(150);
  16. sound(349.2);delay(200);nosound();delay(100);
  17. sound(349.2);delay(200);nosound();delay(200);
  18. sound(293.7);delay(200);nosound();delay(0);
  19. sound(261.7);delay(200);nosound();delay(0);
  20. sound(130);delay(150);nosound();delay(200);
  21. sound(349.2);delay(150);nosound();delay(200);
  22. sound(349.2);delay(150);nosound();delay(200);
  23. sound(293.7);delay(200);nosound();delay(0);
  24. sound(261.7);delay(200);nosound();delay(0);
  25. sound(130);delay(200);nosound();delay(200);
  26. sound(349.2);delay(150);nosound();delay(200);
  27. sound(349.2);delay(150);nosound();delay(200);
  28. sound(293.7);delay(200);nosound();delay(0);
  29. sound(261.7);delay(200);nosound();delay(150);
  30. sound(146);delay(200);nosound();delay(150);
  31. sound(349.2);delay(200);nosound();delay(200);
  32. sound(164.8);delay(200);nosound();delay(150);
  33. sound(349.2);delay(200);nosound();delay(200);
  34. sound(174.6);delay(200);nosound();delay(150);
  35. sound(349.2);delay(200);nosound();delay(200);
  36. sound(349.2);delay(200);nosound();delay(200);

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

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

  1. #include "oxo.h"

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

Далее опишем функции, которые нам понадобятся:

  1. void check2(int x, int y)
  2. {
  3. bar(x,y,x+10,y+5);//выводим закрашенный квадратик, с помощью которого мы будем перемещаться по нашему меню
  4. }
  5. void step2(int y)//функция выполнения задач, в зависимости от выбранного пункта меню
  6. {
  7. if(y==129) closegraph();//если нажат выход, то закрываем программу
  8. if(y==114){start=1;main2();}//иначе запускаем главную функцию из заголовочного файла «oxo.h», т.е. саму игру
  9. }
  10. void menu(int x,int y){//вывод самого меню
  11. settextjustify(CENTER_TEXT, CENTER_TEXT);//устанавливаем отображение текста по центру
  12. settextstyle(DEFAULT_FONT,HORIZ_DIR,10);//настраиваем стили текста
  13. setcolor(2);//цвет
  14. outtextxy(x,y-25,"OXO");//надпись
  15. settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
  16. setcolor(6);
  17. outtextxy(x,y+30,"1 player");//пункты меню
  18. outtextxy(x,y+45,"2 players");
  19. outtextxy(x,y+60,"Exit");
  20. setfillstyle(1,7);//задаём стиль заполнения нашего указателя в меню
  21. }

И как подобает игровому меню, добавим какую-нибудь короткую мелодию при его появлении:

  1. a[0]=330; a[1]=80; a[2]=330;
  2. a[3]=140; a[4]=430; a[5]=100;
  3. a[6]=410; a[7]=160; a[8]=490;
  4. a[9]=160; a[10]=450; a[11]=200;
  5. a[12]=490; a[13]=220;
  6. delay(1000);
  7. for(i=0;i<14;i++){
  8. sound(a[i]);delay(200);}
  9. delay(200);
  10. nosound();

Этот код должен быть прописан в главной функции – int main(void). Все исходные материалы, а также exe-шник вы можете скачать здесь.

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

13 мая 2013, 15:01
1048

Загрузка...
Loading...

Комментарии

Верните RVVA !!!!!! Крутая графа у нее. Почему вы забросили ее?!
Я не имею отношения к RVVA. Этим занимались Nuligine - nuligine.yvision.kz

Оставьте свой комментарий

Спасибо за открытие блога в Yvision.kz! Чтобы убедиться в отсутствии спама, все комментарии новых пользователей проходят премодерацию. Соблюдение правил нашей блог-платформы ускорит ваш переход в категорию надежных пользователей, не нуждающихся в премодерации. Обязательно прочтите наши правила по указанной ссылке: Правила

Также можно нажать Ctrl+Enter

Популярные посты

До каких пор чиновники будут игнорировать защиту детей?

До каких пор чиновники будут игнорировать защиту детей?

До каких пор Уполномоченный по правам ребенка, как институт во всем мире стоящий на страже жизни и прав детей, в нашей стране будет выполнять представительские функции?
AliyaSadyrbaeva
25 июля 2017 / 18:27
  • 11193
  • 10
Зачем эмигрировать в Россию? Лично я никогда не понимал этой странной мечты

Зачем эмигрировать в Россию? Лично я никогда не понимал этой странной мечты

Некоторые мои знакомые, мечтают уехать в Россию и побыстрее получить гражданство. Кому мы там сдались? Есть замечательная поговорка: "Где родился - там и пригодился".
Washington
25 июля 2017 / 12:15
Что происходит в казахстанской правоохранительной системе под видом борьбы с коррупцией

Что происходит в казахстанской правоохранительной системе под видом борьбы с коррупцией

За день до своей гибели прямо около памятника жертвам политических репрессий 1937-го Жампозов сказал жене, что он – жертва точно таких же репрессий.
openqazaqstan
24 июля 2017 / 10:18
  • 3534
  • 12
Ненавязчивый сервис Родины. Почему казахстанцы не очень-то спешат на Алаколь и в Баянаул

Ненавязчивый сервис Родины. Почему казахстанцы не очень-то спешат на Алаколь и в Баянаул

Как Кыргызстан смог превратить в «игрушку» побережье Иссык-Куля? Сервис там – на любой статус и кошелёк, и цены выгоднее Алаколя или Балхаша раза в два-три, и дороги шикарные, народ гостеприимный.....
openqazaqstan
сегодня / 11:54
  • 3318
  • 15
Если вам отвечают на казахском языке – ситуация с точки зрения законодательства

Если вам отвечают на казахском языке – ситуация с точки зрения законодательства

Я своим постом не собираюсь критиковать кого-либо, что люди знают или не знают казахский или русский язык. Я выражаю своё мнение с точки зрения законодательства о языках.
Advokot
25 июля 2017 / 13:50
  • 3585
  • 31
Мужчины Люксембурга и Казахстана: «У нас они уже в 35 добиваются статуса»

Мужчины Люксембурга и Казахстана: «У нас они уже в 35 добиваются статуса»

Что касается парней, так это вообще отдельная тема. Они для меня загадка. Уже год пытаюсь понять ход их мыслей. Для нас, казахов, немного сложно понять, почему человек в 35-36 лет, до сих пор не нашел смысла жизни.
AASh
24 июля 2017 / 15:19
  • 2496
  • 25
СказQAZ о королеве ночного города. Казалось, ничто не могло прошибить её оборону

СказQAZ о королеве ночного города. Казалось, ничто не могло прошибить её оборону

- Ты задолбала быть такой прекрасной!.. Пьяный в доску романтик еле держался на ногах. Девушка, сидящая за столом, даже не удостоила его взглядом. Охранники нежно вытолкали его из заведения.
Aks_Ras
26 июля 2017 / 12:09
  • 1718
  • 3
Хан Ордасы – ставка Жангир-хана. Здесь была открыта первая в Казахстане типография

Хан Ордасы – ставка Жангир-хана. Здесь была открыта первая в Казахстане типография

Ханская ставка Жангир-хана в селе Хан Ордасы Бокейординского района Западно-Казахстанской области - это одно из самых интересных исторических мест Казахстана.
theYakov
26 июля 2017 / 5:34
  • 1698
  • 6
Жангалинский район. Здесь были выведены эдильбаевские овцы и кушумские лошади

Жангалинский район. Здесь были выведены эдильбаевские овцы и кушумские лошади

В Жангалинском районе повезло посетить бывший легендарный совхоз "Бирлик", где были выведены известные на весь СССР рекордсмены - баран весом 167 кг и овцематка весом 128 кг.
theYakov
25 июля 2017 / 13:14
  • 1652
  • 5