МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОСИЙСКОЙ ФЕДЕРАЦИИ
Таганрогский государственный радиотехнический университет
Кафедра вычислительной техники
_____________________________________________________________________
Дистанционное обучение
2000 – 2001 учебный год
КУРСОВАЯ РАБОТА
по курсу
ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ
Студента группы ВД – 49
Каретина Флориана Викторовича
Задание выполнил ________________ _____________________
подпись студента дата выполнения задания
Задание проверил ________________ _____________________
оценка
подпись преподавателя
_______________________
дата проверки задания
Рецензия преподавателя
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
______________________________________________________________________
??
ОГЛАВЛЕНИЕ
1. Постановка задачи 3 стр.
2. Входные данные 3 стр.
3. Выходные данные 3 стр.
4. Текст программы 4 стр.
1. Постановка задачи.
Необходимо разработать игровую программу «Арканоид». Дощечки для
отбивания шарика надо разместить слева и справа. Правая дощечка должна
управляться клавишами «A» и «Z» (вверх и вниз соответственно), а правая
дощечка должна управляться клавишами «L» и «
Текст программы
program Game_Tenis;
uses DOS, Crt2, Graph;
var
CK, StopRun, Up1, Down1, Up2, Down2, Auto1, Auto2 :Boolean;
R1, R2, oR1, oR2, BX, BY, oBX, oBY, Step :Integer;
kX, kY, rBX, rBY :Real;
MissCount1, MissCount2 :Word;
OldInt9: procedure;
{_______________________________________________________________________
_____}
{работа с клавиатурой по превываниям}
procedure UserInt9; interrupt;
begin
case Port[$60] of
$81: StopRun:=True; {Esc - выход}
$1E: begin CK:=True; Up1:=True; end; {вверх первая дощечка}
$9E: begin CK:=True; Up1:=False; end;
$2C: begin CK:=True; Down1:=True; end; {вниз первая дощечка}
$AC: begin CK:=True; Down1:=False; end;
$25: begin CK:=True; Up2:=True; end; {вверх вторая дощечка}
$A5: begin CK:=True; Up2:=False; end;
$32: begin CK:=True; Down2:=True; end; {вниз вторая дощечка}
$B2: begin CK:=True; Down2:=False; end;
$02: Auto1:=not Auto1; {включение/выключение авто-режима}
{для игрока 1}
$03: Auto2:=not Auto2; {включение/выключение авто-режима}
{для игрока 2}
end;
Inline ($E4/$61/$8A/$E0/$0C/$80/ {вставка в машинных кодах}
$E6/$61/$86/$E0/$E6/$61/ {для правильной работы}
$B0/$20/$E6/$20); {обработчика прерывания}
end;
{-----------------------------------------------------------------------
-----}
{процедура установки пользовательского прерывания}
procedure SetUserInt;
begin
GetIntVec($09,@OldInt9); {сохранение старого вектора}
SetIntVec($09,Addr(UserInt9)); {установка нового}
end;
{-----------------------------------------------------------------------
-----}
{восстановление старого вектора}
procedure SetOldInt;
begin
SetIntVec($09,@OldInt9);
end;
{-----------------------------------------------------------------------
-----}
{процедура инициализации графического режима}
procedure InitScreen;
var
GrMode, GrDriver :Integer;
GrPath :String;
begin
GrDriver:=VGA;
GrMode:=VGAHi;
GrPath:='E:\pl\bp\bgi';
InitGraph(GrDriver, GrMode, GrPath);
SetTextStyle(2, 0, 6);
end;
{-----------------------------------------------------------------------
-----}
{процедура обновления количества очков игроков}
procedure RefrCount;
var
s1 :String;
begin
SetFillStyle(1,0);
Bar(610, 230, 639, 250);
Str(MissCount1, s1);
OutTextXY(614,232, s1);
Bar(0, 0, 29, 479);
Str(MissCount2, s1);
OutTextXY(5,232, s1);
Bar(0, 230, 29, 250);
Str(MissCount2, s1);
OutTextXY(4,232, s1);
Bar(610, 0, 639, 479);
Str(MissCount1, s1);
OutTextXY(615,232, s1);
end;
{-----------------------------------------------------------------------
-----}
procedure Game;
var
t1 :Integer;
ChC :Boolean;
begin
{прорисовка игрового поля}
SetColor(12);
Rectangle(30,0, 609, 479);
SetFillStyle(1, 1);
Bar(31,1, 608, 478);
{первоначальная установка переменых}
kX:=0.8;
kY:=0.3;
Step:=10;
rBX:=320;
rBY:=240;
oBX:=320;
oBY:=240;
R1:=240;
R2:=240;
oR1:=240;
oR2:=240;
repeat
{если нажата клавиша вверх и не нажата клавиша вниз}
{для игрока 1}
if Up1 and not Down1 then
begin {перемещение дощечки вверх}
R1:=R1-10;
if R1430 then R1:=430;{не пропускать ниже положенной}
SetColor(1); {координаты}
Line(50, oR1-48, 50, oR1+48);
SetColor(11);
Line(50, R1-48, 50, R1+48);
oR1:=R1;
end;
{если нажата клавиша вверх и не нажата клавиша вниз}
{для игрока 2}
if Up2 and not Down2 then
begin {перемещение дощечки вверх}
R2:=R2-10;
if R2430 then R2:=430;{не пропускать ниже положенной}
SetColor(1); {координаты}
Line(590, oR2-48, 590, oR2+48);
SetColor(10);
Line(590, R2-48, 590, R2+48);
oR2:=R2;
end;
{если включен автоматический режим для игрока 1}
if Auto1 then
begin {автоматическое перемещение дощечки}
R1:=BY;
if R1430 then R1:=430;{не пропускать ниже положенной}
{координаты}
SetColor(1);
Line(50, oR1-48, 50, oR1+48);
oR1:=R1;
end;
SetColor(11);
Line(50, R1-48, 50, R1+48);
{если включен автоматический режим для игрока 2}
if Auto2 then
begin {автоматическое перемещение дощечки}
R2:=BY;
if R2430 then R2:=430;{не пропускать ниже положенной}
{координаты}
SetColor(1);
Line(590, oR2-48, 590, oR2+48);
oR2:=R2;
end;
{перерисовка полета шарика}
SetColor(10);
Line(590, R2-48, 590, R2+48);
SetColor(12);
Rectangle(30,0, 609,479);
SetFillStyle(1, 1);
SetColor(1);
FillEllipse(oBX, oBY, 10, 10);
rBX:=rBX+kX*Step;
rBY:=rBY+kY*Step;
BX:=Round(rBX);
BY:=Round(rBY);
SetFillStyle(1, 15);
SetColor(7);
Fi?????????????
{если дощечка не попала}
if ChC then
begin
ChC:=False;
RefrCount; {обновить очки игроков}
end;
{столкновение шарика с дощечкой слева}
if (BX(R1-55)) and (BY580) and (BY>(R2-55)) and (BY600) then
begin
rBX:=60;
rBY:=R1;
kX:=-Abs(kX);
Sound(700);
Delay(500);
NoSound;
Inc(MissCount2);
ChC:=True;
end;
{удар шарика об верхнюю или нижнюю стенку}
if (BY470) then kY:=-kY;
oBX:=BX;
oBY:=BY;
Delay(10);
until StopRun; {выход если нажата клавиша Esc}
end;
{=======================================================================
=====}
begin
InitScreen; {инициализация графического режима}
SetUserInt; {установка пользовательского прерывания}
Game; {непосредственно вызов игры}
SetOldInt; {восстановления старого вектора прерывания}
CloseGraph; {закрытие графического режима}
end.
PAGE
PAGE 3
Нашли опечатку? Выделите и нажмите CTRL+Enter