Цель проекта:
· Написать программу популярной игры «Аерохоккей» в среде TurboPascal 6.0,
· совершенствование навыков программирования.
Вложение | Размер |
---|---|
aero.rar | 3.82 КБ |
doklad_igra_aerohokkey.docx | 35.06 КБ |
Муниципальное бюджетное общеобразовательное учреждение
«Средняя общеобразовательная школа №2»
Елабужского муниципального района Республики Татарстан
XVI республиканский конкурс “Юный программист”
Программный продукт
Игра
«АЭРОХОККЕЙ»
Работу выполнил:
ученик 10 класса Б
Крошечкин Дмитрий
Руководитель:
учитель информатики
I квалификационной категории
Панкратова Ольга Викторовна
г. Елабуга, 2012 г.
Оглавление
Цель проекта3
Описание программы 3
Правила работы с программой3
Листинг программы с комментариями4
Листинг модуля Kursor7
Листинг модуля Color8
Технические данные9
Методические рекомендации9
Использованная литература9
Цель проекта:
Описание программы:
Программу запускает исполняемый файл 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-е издание.
"Не жалею, не зову, не плачу…"
Спасибо тебе, дедушка!
Круговорот воды в пакете
Рисуем осень: поле после сбора урожая
Как выглядело бы наше небо, если вместо Луны были планеты Солнечной Системы?