• Главная
  • Блог
  • Пользователи
  • Форум
  • Литературное творчество
  • Музыкальное творчество
  • Научно-техническое творчество
  • Художественно-прикладное творчество

Игра "Аэрохоккей"

Опубликовано Панкратова Ольга Викторовна вкл 10.01.2016 - 21:44
Панкратова Ольга Викторовна
Автор: 
Крошечкин Дмитрий

Цель проекта:

·        Написать программу популярной игры «Аерохоккей» в среде TurboPascal 6.0,

·        совершенствование навыков программирования.

Скачать:

ВложениеРазмер
Файл aero.rar3.82 КБ
Файл doklad_igra_aerohokkey.docx35.06 КБ

Предварительный просмотр:

Муниципальное бюджетное общеобразовательное учреждение

«Средняя общеобразовательная школа №2»

Елабужского муниципального района Республики Татарстан

XVI республиканский конкурс “Юный программист”

Программный продукт

Игра

«АЭРОХОККЕЙ»

Работу выполнил:

ученик 10 класса Б

Крошечкин Дмитрий

Руководитель:

учитель информатики

I квалификационной категории

Панкратова Ольга Викторовна

г. Елабуга, 2012 г.


Оглавление

Цель проекта3

Описание программы 3

Правила работы с программой3

Листинг программы с комментариями4

Листинг модуля Kursor7

Листинг модуля Color8

Технические данные9

Методические рекомендации9

Использованная литература9


Цель проекта:

  • Написать программу популярной игры «Аерохоккей» в среде TurboPascal 6.0,
  • совершенствование навыков программирования.

Описание программы:

Программу запускает исполняемый файл AERO.EXE. Программа работает в текстовом режиме.

Почему именно «Аерохоккей»?

Игру «Аерохоккей» я выбрал не случайно. Мне было интересно создать программу, в которой играют два игрока и выполняются несколько действий одновременно (перемещение платформ и движение мяча).

При  создании игры пришлось подумать над некоторыми моментами. Например, над движением мяча по игровому полю, закрашиванием поля (пришлось придумать модуль, т.к. в модуле Crt эта функция не была реализована).

Правила работы с программой

Меню игры содержит 4 пункта: «Играть», «Инструкции», «Уровень сложности», «Выход».

Правила игры можно прочитать во вкладке «Инструкции» (Нажатие клавиши 2 в главном меню):

 Игра рассчитана на двух человек. Цель: забить противнику пять голов. Для управления платформами используются клавиши W и S, O и L для Игрока_1 и Игрока_2 соответственно.

В игре имеется выбор уровня сложности (скорость движения мяча, размер платформ). Его можно задать во вкладке  «Уровень сложности» (Нажатие клавиши 3).  

При нажатии клавиши 1 (т.е. «Играть») на экран выводится игровое поле, платформы и мяч, и сразу же начинается сам игровой процесс. Если до начала игры не был задан уровень сложности, то он автоматически становится минимальным (скорость движения мяча минимальна, а размер платформ - максимальный). Внизу отображается счёт.

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

Потом мы снова попадаем в меню.

При нажатии клавиши 4 происходит закрытие приложения.

Листинг программы с комментариями

Uses mycrt,kursor,color;

Var q1,r1,q2,r2,b,xm,ym,dx,dy,p1w,p2w:integer;

a1,a2: array[1..23] of char;

procedure gran; var i,j:integer; {Выводим цветные границы}

begin

for i:=1 to 22 do

for j:=0 to 79 do

     print_color(j,i,$cf0,' '); {Закрашиваем поле белым цветом}

for i:=1 to 22 do

print_color(39,i,$c40,' '); {Линия посреди поля}

for i:=0 to 79 do begin

print_color(i,0,$c10,' ');   {Границы поля}

print_color(i,23,$c10,' ');

end;

for i:=0 to 79 do begin

print_color(i,1,$c40,' ');  {Красные линии}

print_color(i,22,$c40,' ');

end;

for i:=1 to 5 do

print_color(36+i,23,$cf0,' ');

gotoxy(38,23); write(p1w,':',p2w); {Выводим счет}

end;

procedure massiv_player1; var j:integer; {Процедура вывода платформы Игрока_1}

begin

for j:=1 to 23 do a1[j]:=' '; {Всем элементам массива а1 присваиваем пустоту}

for j:=q1 to r1 do a1[j]:=#178; {Заполняем массив от q1 до r1 элемента}

for j:=1 to 23 do begin

gotoxy(3,j); write(a1[j]); {Выводим массив в 3 столбец}

end;

end;

procedure massiv_player2; var j:integer; {Процедура вывода платформы Игрока_1}

begin

for j:=1 to 23 do a2[j]:=' '; {Всем элементам массива а2 присваиваем пустоту}

for j:=q2 to r2 do a2[j]:=#178; {Заполняем массив от q2 до r2 элемента}

for j:=1 to 23 do begin

gotoxy(75,j); write(a2[j]); {Выводим массив в 3 столбец}

end;

end;

procedure press; var a:char; {Процедура нажатие}

begin

if keypressed then begin {Если кнопка нажата то}

a:=readkey; {читаем символ из буфера клавиатуры}

if a='w' thenbegin

q1:=q1-1; r1:=r1-1; {если нажата клавиша w то сдвигаем платформу Игрока_1 вверх}

end;

if a='s' then begin  {если нажата клавиша s то сдвигаем платформу Игрока_1 вниз}

     q1:=q1+1; r1:=r1+1;

end;

if a='o' then begin {если нажата клавиша w то сдвигаем платформу Игрока_2 вверх}

q2:=q2-1; r2:=r2-1;

end;

if a='l' then begin

q2:=q2+1; r2:=r2+1; {если нажата клавиша s то сдвигаем платформу Игрока_1 вниз}

end;

end;

end;

procedure win; var i,j:integer; {Процедура Победитель}

begin

clrscr; {Очищаем экран}

for i:=0 to 24 do

for j:=0 to 79 do

print_color(j,i,$c70,' '); {Закрашиваем поле серым цветом}

if xm=1 then print_color(30,11,$c74,' Player 1 Победил!!!')

else

print_color(30,11,$c74,' Player 1 Победил!!!'); {Выводим победителя}

end;

procedure blok; {Процедура Блок}

begin

press; {Процедура Нажатие}

massiv_player1; {Постоянно обновляем массивы}

massiv_player2; {после того как кнопка нажата}

end;

procedure shar; {Процедура Шар}

begin

xm:=40; ym:=12; dy:=1; dx:=1; {Начальное положение и направление мяча}

repeat

blok; {Процедура Блок}

gotoxy(xm,ym); write('O'); {Выводим мяч}

if (xm=4) and (a1[ym]='▓') then  {Меняем направление}

dx:=1;

if (xm=74) and (a2[ym]='▓') then  {если мяч врезается в платформу}

dx:=-1;

case ym of

         1: dy:=1; {Меняем направление, если мяч врезается в стенку}

22: dy:=-1;

end;

if xm=1 then begin

p2w:=p2w+1; exit; {Если мяч забит, то прибавляем к переменной 1}

end;

if xm=78 then begin

p1w:=p1w+1; exit;   {и выходим из процедуры}

end;

delay(b); {С помощью задержки устанавливаем скорость мяча}

gotoxy(xm,ym); write(' '); {Убираем мяч с предыдущего положения}

xm:=xm+dx; ym:=ym+dy; {Изменяем координаты мяча}

until false; {Все это выполняем, пока не забит гол}

end;

procedure game; {Процедура Игра}

begin

clrscr; {Очищаем экран}

gran; {Выводим поле и счет с помощью процедуры gran}

      massiv_player1; {Выводим платформу Игрока_1}

      massiv_player2; {Выводим платформу Игрока_2}

kursor_off; {Выключаем курсор, с помощью процедуры модуля kursor}

shar; {Процедура Шар}

win; {Процедура Победитель}

end;

procedure intstruction; var i,j:integer; {Инструкция}

begin

for i:=0 to 24 do

for j:=0 to 79 do

        print_color(j,i,$c70,' '); {Закрашиваем фон серым цветом}

print_color(20,4,$c70,'Инстукция');

print_color(15,7,$c74,'Игра рассчитана на двух человек.');

print_color(15,8,$c74,'Цель: забить противнику 5 голов.');

print_color(15,9,$c74,'Для управления платформами используются ');

print_color(15,10,$c74,'клавиши W и S, O и L для');

print_color(15,11,$c74,'Игрока_1 и Игрока_2 соответственно.' );

print_color(15,13,$c74,'Для продолжения нажмите ENTER');

gotoxy(12,15);

end;

procedure options; vari,j: integer; u:char; {МенюНастройки}

begin

for i:=0 to 24 do

for j:=0 to 79 do

print_color(j,i,$c70,' '); {Закрашиваем фон серым цветом}

print_color(15,7,$c74,'Выберите уровень сложности от 1 до 3(Размер платформ)');

      u:=readkey; {Читаем символ из буфера клавиатуры}

case u of  {и в соответствии с символом устанавливаем размеры платформ}

'1': begin q1:=9; r1:=15; q2:=q1; r2:=r1;  end;

        '2': begin q1:=10; r1:=14; q2:=q1; r2:=r1; end;

        '3': begin q1:=11; r1:=13; q2:=q1; r2:=r1; end

else options;

end;

print_color(15,8,$c74,'Выберите уровень сложности от 1 до 3(Скорость мяча)');

      u:=readkey; {Читаем символ из буфера клавиатуры}

case u of  {и в соответсвиии с символом устанавливаем скорость мяча.}

'1': b:=17;

        '2': b:=15;

        '3': b:=13;

end;

end;

procedure game_menu; var i,j: integer; a:char; {Игровое меню}

begin

for i:=0 to 24 do

for j:=0 to 79 do

print_color(j,i,$c70,' '); {Закрашиваем фон меню серым цветом}

print_color(20,4,$c70,'АЕРОХОККЕЙ');

print_color(15,7,$c74,'1) Играть');   {а также выводим все его}

print_color(15,9,$c74,'2) Инструкции');  {составляющие}

print_color(15,11,$c74,'3) Уровень сложности');

print_color(15,13,$c74,'4) Выход');

gotoxy(15,15);

       a:=readkey; {Читаем символ из буфера клавиатуры}

case a of  {Далее в соответствии с символом...}

'1': begin while (p1w<>5) or (p1w<>5) do game; readln;

        p1w:=0; p2w:=0; game_menu; end;

      '2': begin intstruction; readln; game_menu; end;

      '3': begin options; game_menu; end;

'4': halt

else game_menu; {Если нажата не та клавиша запускаем Игровое меню заново}

end;

end;

begin

  q1:=9; r1:=15; q2:=q1; r2:=r1; {Изначально размер платформ максимальный}

  b:=19;  {Изначально скорость мяча минимальна}

  p1w:=0; p2w:=0; {Обнуляем счет}

game_menu; {Игровое меню}

readln; {Задержка}

end.

Листинг модуля Kursor

Unit kursor;

interface

procedure kursor_on;

procedure kursor_off;

implementation

procedure kursor_off; assembler;

asm

mov ah,1

mov cx,2020h

int 10h

end;

procedure kursor_On; assembler;

asm

mov ah,1

mov cx,0607h

int 10h

end;

end.


Листинг модуля Color

unit color;

interface

uses mycrt;

const ad=$b800;

procedure print_color(x,y,a:word; s:string);

implementation

procedure print_color(x,y,a:word; s:string); var m,i:word;

begin

m:=160*y+2*x;

for i:=1 to length(s) do begin

mem[ad:m+2*i-2]:=ord(s[i]);

mem[ad:m+2*i-1]:=a;

end;

end;

end.


Технические данные

Программа представляет собой независимый исполняемый файл AERO.exe размером 6,18 КБ (исходный код 6,69 Кб) и может быть запущена на любом компьютере с операционной системой Windows (кроме 64-х разрядной). Никаких других вспомогательных файлов программе не требуется.

Методические рекомендации

Данная работа наглядно демонстрирует реализацию игрового кода в среде Turbo Pascal 6.0. Листинг программы содержит подробные комментарии. Программа может быть использована при изучении раздела программирования на уроках информатики, а так же для самостоятельного изучения кода программы школьниками.

Использованная литература:

Немнюгин С.А.

TurboPascal. Программирование на языке высокого уровня: Учебник для вузов. 2-е издание.


Поделиться:

"Не жалею, не зову, не плачу…"

Спасибо тебе, дедушка!

Круговорот воды в пакете

Рисуем осень: поле после сбора урожая

Как выглядело бы наше небо, если вместо Луны были планеты Солнечной Системы?