• 8377
  • 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
907

Загрузка...

Комментарии

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

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

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

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

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

Мысли вслух. Почему казахи перестали общаться с родственниками и ходить в гости?

Мысли вслух. Почему казахи перестали общаться с родственниками и ходить в гости?

Дастархан в те времена был скромен. Не было понятия «сынау» - осуждения кто как живет, какой в доме ремонт и т.д. Пока взрослые обсуждали задержку заработной платы, мы играли в армию, жмурки, строили городки...
socium_kzo
5 дек. 2016 / 15:19
  • 23110
  • 28
Верховный Суд презентовал комментарий к Гражданскому процессуальному кодексу

Верховный Суд презентовал комментарий к Гражданскому процессуальному кодексу

ГПК содержит 505 статей, многие из которых написаны несколько сложным юридическим языком. Однако теперь понять их можно проще и без обращения к юристу.
RuSnake
6 дек. 2016 / 10:31
  • 10871
  • 0
Японец о Казахстане: «Ваши девушки уж сильно себе набивают цену...»

Японец о Казахстане: «Ваши девушки уж сильно себе набивают цену...»

"Мужчины должны у вас тут права качать, ибо их процент в вашей численности населения уступает проценту женщин". Я машинально начала уверять, что у нас в стране таковых не имеется...
Sapientia
5 дек. 2016 / 10:52
  • 10274
  • 71
Известный европейский фотограф показал истинную красоту казашек

Известный европейский фотограф показал истинную красоту казашек

С 26 по 30 ноября в Алматы гостил известный европейский фотограф Ян Маклайн в рамках реализации совместного проекта с Казахстаном. Подробности не уточняются, однако ходят слухи о том, что этот...
Muchacho55
7 дек. 2016 / 18:29
  • 7664
  • 8
Распил 1 млрд долларов или спасение для Алматы? В 2017-м начнётся строительство БАКАД

Распил 1 млрд долларов или спасение для Алматы? В 2017-м начнётся строительство БАКАД

Конечно, Алматы заслужил эту дорогу. Невзирая на все издержки, которые могут возникнуть. Заслужил и как крупнейший город Казахстана, и как субъект, формирующий своими налогами около четверти всех...
merurg
7 дек. 2016 / 12:35
  • 7069
  • 19
10 причин, по которым я не смогла работать учителем. Не только в зарплате дело, ребята

10 причин, по которым я не смогла работать учителем. Не только в зарплате дело, ребята

Я почти год проработала в школе, и когда уходила оттуда, была самым счастливым человеком в мире. Тот год, честно говоря, я и сейчас вспоминаю с ужасом.
demonica
6 дек. 2016 / 17:21
  • 5663
  • 78
На самом деле дела плохи: казахстанские школьники на 49-м, а не на 12-м месте по математике

На самом деле дела плохи: казахстанские школьники на 49-м, а не на 12-м месте по математике

О том, как масс-медиа раздула миф о казахстанских вундеркидов в розовый воздушный шар, пока его не проколола правда-иголка. Получается, что казахстанские дети не могут применить теорию в практике...
ardakzhurynov
7 дек. 2016 / 0:17
  • 5167
  • 35
Почему Дональд Трамп назвал Казахстан чудом. Президент подтягивается по географии

Почему Дональд Трамп назвал Казахстан чудом. Президент подтягивается по географии

Трамп и не подозревает, что 16 декабря 1991 Казахстан не создал, а восстановил свою национальную государственность. Иначе бы он упомянул не только 25 лет, а больше чем 550 лет казахской истории.
Stehlikova
2 дек. 2016 / 9:02
  • 5270
  • 88
Молчание врачей. Дети ЮКО, заражённые ВИЧ 10-11 лет назад, узнают о диагнозе-приговоре

Молчание врачей. Дети ЮКО, заражённые ВИЧ 10-11 лет назад, узнают о диагнозе-приговоре

Как сообщают новостные издания, в ближайшее время в Южном Казахстане 102 детям в возрасте 11-12 лет сообщат об их страшном диагнозе. Все эти дети были заражены ВИЧ, причём большинство было инфицировано по вине врачей.
openqazaqstan
2 дек. 2016 / 13:57
  • 4567
  • 4