Скачать 276.54 Kb.
|
SiegeSiegeLogoVGASpr SiegeSpr LogoScreenRefrace VGA13H Buttons 3.1 Описание назначения модулей. S i e g e – основная программа, вызывающая на выполнение программные модули. Модуль S i e g e S p r - модуль, содержащий игровые объекты (картинки). Модуль V G A S p r – модуль для рисования спрайтов. Модуль L o g o s c r e e n –заставка курсовой работы. Модуль S i e g e L o g o – модуль, содержащий меню, инструкцию, предысторию. Модуль B u t t o n s – модуль, позволяющий осуществлять нажатие и отпускание клавиши, информацию о состоянии клавиш в реальном времени и об отпущенных клавишах. Модуль R e t r a c e – модуль,позволяющий осуществлять синхронизацию вывода в видеопамять. Модуль V G A 1 3 H - модуль для работы с графикой. ЗАКЛЮЧЕНИЕ Таким образом, представляемая компьютерная игра относится к классу комбинаторных игр, поскольку может быть использована как в качестве развивающей внимание, реакцию, психомоторные навыки (способности) игры, так и для приятного времяпрепровождения и отдыха. При создании компьютерной игры мы старались сделать её по возможности красочнее, интереснее и увлекательнее. Мы бы порекомендовали эту игру для детей школьного возраста, однако, показав ее врозлым, она заинтересовала и их. Поэтому нам кажется,что она вполне пригодна и для более взрослой аудитории. СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
Марусева И.В. 1997. 7. Коубс Р. и Влейминк И. Интерфейс (36-40) 1991. 8. Ла Мот А. Секреты программирования игр (7-10) 1995. 9. Фридланд А.Я. Информатика. Толковый словарь основных терминов. (57-62) М. 1998. 10. 350 игр для IBM PC, Дж. Дворак, «Пергамент» - Санкт -Петербург, 1994 . 11. Turbo Pascal 7. 0, Фаронов В.В. /Изд. «Нолидж», 1999. ПРИЛОЖЕНИЕ: Program Siege; Uses LogoScreen, DOS, VGA13h, VGASpr, Retrace, Buttons, SiegeLogo, SiegeS pr; Type EnemyType = record X,Y,D,S,A:Integer; Falling:Boolean; Free:Boolean; end; Const MaxEnemies = 50; ComboStr:Array [0..5] of String[20] = ('Looser!!!', '', '2 hit combo', 'Eat this!', 'Ough! 4 mans at once', 'Aaaaaaaaamazing!!!'); Var ManX,StoneY,StoneX,EnemyDelay,EnemyLimit:Integer; Enemies:Array [1..MaxEnemies] of EnemyType; Score,Level,Kills,Combo:Word; Timer:Longint; GameOver:Boolean; {==================================================================} Const ca:Word = 0; cc:String[20] = ''; Procedure ComboString(s:String); begin if s<>'' then begin cc:=s; ca:=10; end; if ca>0 then begin DrawString(Base2,160-Byte(cc[0])*4,90,cc); Dec(ca); end; end; Procedure NextLevel; forward; {==================================================================} Procedure InitEnemies; Var i:Byte; begin for i:=1 to MaxEnemies do Enemies[i].Free:=true; end; Procedure DrawEnemies; Var i:Byte; begin for i:=1 to MaxEnemies do With Enemies[i] do if not Free then DrawTSpr(Base2,X,Y,EnemyHgt,EnemyWdt,@EnemySpr[A]); end; Procedure MoveEnemies; Var i:Byte; begin for i:=1 to MaxEnemies do With Enemies[i] do if not Free then begin if Falling then begin Y:=Y+10; if Y>199 then begin Free:=true; if Kills=(Level+1)*20 then NextLevel; end; if D=0 then begin Inc(A); if A>2 then A:=1; D:=2; end else Dec(D); end else if D=0 then begin Y:=Y-5; if Y<40 then GameOver:=true; Inc(A); if A>2 then A:=1; D:=S; end else Dec(D); end else if (EnemyLimit>0) and (EnemyDelay=0) then begin X:=Random(38)*8; Y:=200; D:=0; S:=(10-Level); A:=1; EnemyDelay:=(13-Level)*2+1; Falling:=false; Free:=false; Dec(EnemyLimit); end; Dec(EnemyDelay); end; {==================================================================} Procedure DrawScreen; Var x,y:Integer; s:String[80]; tmp:String[6]; begin Bar(Base2,0,0,319,9,8); FillBase(Base2,3200,9600,$03030303); for y:=0 to 15 do for x:=0 to 31 do DrawOSpr(Base2,x*10,40+y*10,BrickHgt,BrickWdt,@BrickSpr); s:='ю ~SIEGE~ ю Level:'; Str(Level,tmp); While Byte(tmp[0])<2 do tmp:='ъ'+tmp; s:=s+tmp+' ю Score:'; Str(Score,tmp); While Byte(tmp[0])<5 do tmp:='ъ'+tmp; s:=s+tmp+' ю'; DrawString(Base2,1,1,s); end; {==================================================================} Procedure DrawMan; begin if StoneY=0 then begin DrawTSpr(Base2,ManX*8,20,ManHgt,ManWdt,@ManSpr[2]); DrawTSpr(Base2,ManX*8+4,17,StoneHgt,StoneWdt,@StoneSpr); end else begin DrawTSpr(Base2,ManX*8,20,ManHgt,ManWdt,@ManSpr[1]); DrawTSpr(Base2,StoneX,StoneY,StoneHgt,StoneWdt,@StoneSpr); Inc(StoneY,10); if StoneY>199 then begin StoneY:=0; if Combo<7 then ComboString(ComboStr[Combo]) else ComboString('Kiiler!!!'); Combo:=0; end; end; end; {==================================================================} Procedure CheckCollisions; Var i:Byte; begin if StoneY>0 then for i:=1 to MaxEnemies do With Enemies[i] do if not Free and not Falling then begin if ((StoneX+8>X) and (StoneX ((StoneY+8>Y) and (StoneY begin Falling:=true; D:=0; Inc(Score); Inc(Kills); Inc(Combo); end; end; end; {==================================================================} Procedure NextLevel; Var i:Byte; begin Timer:=MemL[Seg0040:$006C]; Inc(Level); for i:=1 to 30 do begin ClearBase(Base2); DrawScreen; DrawTSpr(Base2,ManX*8,20,ManHgt,ManWdt,@ManSpr[1+Byte(i and 1=1)]); DrawString(Base2,132,80,'Level '+Char($30+Level)); WaitRetraceMode; CopyBase(Base2,Base1); While Timer=MemL[Seg0040:$006C] do; Timer:=MemL[Seg0040:$006C]; end; EnemyLimit:=(1+Level)*20; EnemyDelay:=0; Kills:=0; ca:=0; end; Procedure GameOverProc; Var i:Byte; begin ClearBase(Base2); DrawScreen; DrawString(Base2,124,80,'Game Over'); WaitRetraceMode; CopyBase(Base2,Base1); Timer:=MemL[Seg0040:$006C]; for i:=1 to 30 do begin While Timer=MemL[Seg0040:$006C] do; Timer:=MemL[Seg0040:$006C]; end; end; {==================================================================} Procedure Init; begin if not DetectVGA then begin Writeln('Необходим VGA совместимый видеоадаптер.'#7); Halt(1); end; SetGraphMode; InitButtons; Randomize; ManX:=19; Timer:=MemL[Seg0040:$006C]; EnemyLimit:=(Level+1)*20; GetIntVec($43, Pointer(Font)); end; Procedure Game; begin InitEnemies; Level:=0; Score:=0; Kills:=0; Combo:=0; EnemyLimit:=(Level+1)*20; GameOver:=false; Repeat ClearBase(Base2); DrawScreen; DrawEnemies; DrawMan; ComboString(''); MoveEnemies; CheckCollisions; if Key[keyLeft] then if ManX>0 then Dec(ManX); if Key[keyRight] then if ManX<38 then Inc(ManX); if Key[keySpace] then if StoneY=0 then begin StoneX:=(ManX*8)+4; StoneY:=24; end; WaitRetraceMode; CopyBase(Base2,Base1); While Timer=MemL[Seg0040:$006C] do; Timer:=MemL[Seg0040:$006C]; Until Key[keyEsc] or (Level>=10) or GameOver; if GameOver then GameOverProc; end; Procedure Done; begin DoneButtons; SetTextMode; DoneVirtualPage; end; {==================================================================} Var choice:Byte; begin Init; Repeat choice:=Logo; Case choice of 1:Game; 2:Info; 3:Story; end; Until choice=4; Done; end. UNIT Buttons; INTERFACE Uses DOS; Const keyESC = 1; keyF1 = 59; keyF2 = 60; keyF3 = 61; keyF4 = 62; keyF5 = 63; keyF6 = 64; keyF7 = 65; keyF8 = 66; keyF9 = 67; keyF10 = 68; keyF11 = 87; keyF12 = 88; keyScrollLock = 70; keyTilde = 41; key1 = 2; key2 = 3; key3 = 4; key4 = 5; key5 = 6; key6 = 7; key7 = 8; key8 = 9; key9 = 10; key0 = 11; keyUnderline = 12; keyEquality = 13; keyBackspace = 14; keyTab = 15; keyQ = 16; keyW = 17; keyE = 18; keyR = 19; keyT = 20; keyY = 21; keyU = 22; keyI = 23; keyO = 24; keyP = 25; keyIndex = 26; keyBackIndex = 27; keyEnter = 28; keyCapsLock = 58; keyA = 30; keyS = 31; keyD = 32; keyF = 33; keyG = 34; keyH = 35; keyJ = 36; keyK = 37; keyL = 38; keyDoublePeriod = 39; keyApostroph = 40; keyLShift = 42; keyBackSlash = 43; keyZ = 44; keyX = 45; keyC = 46; keyV = 47; keyB = 48; keyN = 49; keyM = 50; keyComma = 51; keyPeriod = 52; keySlash = 53; keyRShift = 54; keyCtrl = 29; keyAlt = 56; keySpace = 57; keyNumLock = 69; keyMultiply = 55; keyMinus = 74; keyPlus = 78; keyDelete = 83; keyHome = 71; keyUp = 72; keyPgUp = 73; keyLeft = 75; keyFive = 76; keyRight = 77; keyEnd = 79; keyDown = 80; keyPgDn = 81; keyInsert = 82; KeyPressed:Boolean = FALSE; Var Key :Array [1..128] of Boolean; WasPressed:Array [1..128] of Boolean; Const CheckWarmReboot:Boolean = TRUE; WarmRebootFlag :Boolean = FALSE; Procedure InitButtons; Procedure DoneButtons; Function ButtonsInited:Boolean; Function IsKeypressed:Boolean; Function Pressed(Index:Byte):Boolean; Procedure ClearKeys; IMPLEMENTATION Const Init:Boolean=FALSE; Var OldKbdHandler:Pointer; Procedure Int9; INTERRUPT; Var ScanCode,Tmp:Byte; begin ScanCode:=Port[$60]; if ScanCode and 128=0 then begin Key[ScanCode]:=TRUE; KeyPressed:=TRUE; end else begin ScanCode:=ScanCode xor 128; Key[ScanCode]:=FALSE; WasPressed[ScanCode]:=TRUE; KeyPressed:=FALSE; end; if CheckWarmReboot and (ScanCode=keyDelete) then begin Tmp:=Mem[Seg0040:$0017]; if Tmp and 12=12 then begin Tmp:=Tmp xor 21; WarmRebootFlag:=TRUE; end; Mem[Seg0040:$0017]:=Tmp; end; asm in al,61h or al,82h out 61h,al and al,7Fh out 61h,al mov al,20h out 20h,al end; end; Procedure InitButtons; begin if not Init then begin GetIntVec($9,OldKbdHandler); SetIntVec($9,@Int9); FillChar(Key,SizeOf(Key),FALSE); FillChar(WasPressed,SizeOf(WasPressed),FALSE); CheckWarmReboot:=TRUE; WarmRebootFlag:=FALSE; Init:=TRUE; end; end; Procedure DoneButtons; begin if Init then begin SetIntVec($9,OldKbdHandler); WarmRebootFlag:=FALSE; Init:=FALSE; end; end; Function ButtonsInited; begin ButtonsInited:=Init; end; Function IsKeypressed; Var i:Byte; f:Boolean; begin f:=false; i:=1; While (i<=128) and not f do begin f:=Key[i]; Inc(i); end; IsKeypressed:=f; end; Function Pressed; begin if WasPressed[Index] then begin WasPressed[Index]:=FALSE; Pressed:=TRUE; end else Pressed:=FALSE; end; Procedure ClearKeys; begin FillChar(Key,SizeOf(Key),false); FillChar(WasPressed,SizeOf(WasPressed),false); end; END.38>7>5>2>40> |
Курсовая работа по информатике тема работы: Выбор тормоза механизма передвижения башенного крана | Курсовая работа на тему : Формирование рынка ценных бумаг в Украине Курсовая работа содержит 38 листов, 2 рисунка, 2 таблицы и было использовано 11 источников | ||
Курсовая работа Курсовая работа оформляется в виде электронного файла и прикрепляется к своей странице в системе мониторинга нир. Распечатывать работу... | Курсовая работа по дисциплине Электромагнитная совместимость систем... Курсовая работа состоит из 20 с, в которых содержаться: 3 рисунка, 3 таблицы, 6 формул и 4 ссылки на литературу | ||
Курсовая работа по дисциплине «Предпринимательское право» Курсовая работа имеет целью систематизацию, закрепление и расширение теоретических знаний, углубленное изучение и решение студентом... | Курсовой работы. Составитель: доцент Корляков А. С. Екатеринбург... Курсовая работа самостоятельная работа студента, выполняемая в соответствии с типовой программой учебного процесса по подготовке... | ||
Рекомендации к оформлению курсовой и дипломной работы по истории искусства. Курсовая работа Курсовая работа задание, которое выполняется студентами в определённый срок и по определённым требованиям. Защита курсовых работ... | Курсовая работа по информатике на тему: «Эффективность поиска в Интернете... Целью данной работы является оценка эффективности поисковых стратегий в информационно-поисковых системах (ипс) | ||
Курсовая работа является обязательным видом итогового контроля по... Курсовая работа – это первый этап в самостоятельном теоретическом осмыслении материала, накопленного в ходе обучения в университете,... | Курсовая работа на тему «Открытый урок» Данная курсовая работа выполнена для того, чтобы учителя русского языка и литературы могли использовать разработанные мною уроки... | ||
Курсовая работа учебно-методическое пособие для студентов, обучающихся... Курсовая работа: Учебно-методическое пособие / Автор составитель Е. М. Крупеня. М.: 30 с | Курсовая работа учебно-методическое пособие для студентов, обучающихся... Курсовая работа: Учебно-методическое пособие / Автор составитель Е. М. Крупеня. М.: 30 с | ||
Методические указания к написанию курсовых работ курсовая работа Курсовая работа является важнейшим элементом самостоятельной работы студентов. Основной целью курсовой работы является создание и... | Курсовая работа Разработка проекта аис на примере муз «Городская больница» Курсовая работа является одним из видов учебных занятий и выполняется в соответствии с учебным планом специальности. При написании... | ||
Курсовая работа Формирование понятия «плазма» Реферат, курсовая Методика формирования понятия Плазма в школьном курсе физики. Скачать | Содержание учебного материала, лабораторные работы и практические... Содержание учебного материала, лабораторные работы и практические занятия, самостоятельная работа обучающихся, курсовая работа (проект)... |