MACHINES WORLD
 Elite
 Карта сайта 


АнтиПосредник - квартиры без посредников

Первая версия игры была разработана студентами Кэмбриджского университета Дэвидом Брэйбеном (David Braben) и Яном Беллом (Ian Bell). Разработка началась в 1982 году, и в 1984 были завершены две версии игры для компьютера BBC Micro: для базового варианта компьютера (на ленте) и для BBC Micro с диском. Версия для ленты умещалась всего в 22 Кб свободной памяти; компьютер с диском имел немного больше памяти, что позволило вместить несколько секретных миссий и больший набор кораблей. Игра была портирована на Acorn Electron и в сентябре 1984 года игра вышла под маркой Acornsoft сразу в трёх вариантах.

Позже были выпущены порты для ZX Spectrum (1985), Commodore 64 (1985), Apple II (1986), Amstrad CPC (1986), Atari ST (1988), Amiga (1988) и MSX (1988).

Существует две официальных версии игры для IBM PC: Elite (CGA-версия, 1987) и Elite Plus (VGA-версия, 1991).

«Elite» для PAL-версии NES вышла в Европе в 1991 году. По-видимому, вариант для NTSC-версии NES не выпускался.

«Elite» стала одной из первых игр, использовавших каркасную трёхмерную графику на домашних компьютерах. Другим нововведением было включение в поставку игры фантастической новеллы Роберта Холдстока (Robert Holdstock) «Тёмное колесо» (The Dark Wheel), вводившей игрока в суть игры. Из новеллы игрок узнаёт о загадочной смерти отца главного героя, о том как герой получает свой корабль, и о затерянной планете Raxxla.

Свободная модель игры и революционная трёхмерная графика послужили причинами огромного успеха игры. По некоторым оценкам, количество проданных копий игры для BBC Micro было сравнимо с количеством самих проданных компьютеров — 150 тысяч, портирования её на все домашние компьютеры того времени и появления множества сиквелов и клонов.

Даже сейчас, спустя 25 лет после выпуска игры, «Elite» часто используется в качестве образца при оценке новых игр этого жанра. Часто можно слышать мнение, что все остальные игры этого жанра подражали «Elite», но так и не смогли его превзойти; хотя это и можно назвать преувеличением, но, в любом случае, «Elite» — один из наиболее оригинальных и успешных космических симуляторов для персональных компьютеров.

Повсеместное использование генератора псевдослучайных последовательностей позволило в столь малых объёмах памяти построить разнообразную вселенную со множеством приключений, что до сих пор заставляет удивляться любителей игры со всего мира. Авторам игры удалось вместить в 22 кб программного кода целую вселенную с 2^48 галактик, в каждой из которых по 256 звездных систем. Так как в игре может присутствовать только 8 галактик, то, соответственно, количество вариаций составляет около 35 триллионов.

      Информация Википедии

Вот обещанный исходник. Он полностью работоспособен, хотя сама игра еще далека до завершения. Но движочек уже летает. Если у кого-то возникают вопросы - пишите, постараюсь ответить.



ModeX=800
ModeY=600
Graphics3D ModeX,ModeY,16,1
SetBuffer BackBuffer()

Const MYCORABL=1,CORABL=2,PLANETA=3,GRUZ=4,RAKETA=5

Global Speed#
Global MyStatus$
Global MyClass$
Global MyName$
Global MyLife#

Type Planets
     Field model
     Field NomerPlanet#
     Field NamePlanet$
     Field PlanetX#
     Field PlanetY#
     Field PlanetZ#
     Field PlanetR#
     Field PlanetTex$
End Type
Type Torgovec
     Field model
     Field NomerTorgovec#
     Field NameCaptain$
     Field TorgovecX#
     Field TorgovecY#
     Field TorgovecZ#
     Field TorgovecNameGruz$
     Field TorgovecKolGruz#
     Field TorgovecKurs#
     Field TorgovecLife#
End Type
Type Rockets
     Field model
     Field NomerRocket#
     Field RocketX#
     Field RocketY#
     Field RocketZ#
     Field Cel#
     Field RocketLife#
     Field RocketPolet$
End Type
Type Cobra
     Field Model
     Field CobraNomer#
     Field CobraLife#
End Type

MyStatus$="Честный гражданин"
MyClass$="Новичок"
MyName$="Хендрикс"
Speed#=0
MyLife#=1000

KolPlanets#=5
KolVidTovar#=14
KolTorgovec#=15
KolRockets#=4
KolCobra#=1

Dim TovarNamePlanet$(KolPlanets#,KolVidTovar#,1)
Dim TovarVesTovar#(KolPlanets#,KolVidTovar#,1)
Dim TovarCenaTovar#(KolPlanets#,KolVidTovar#,1)
PanelTovar$="False"
FlagRezimZahvCeli$="False"

Gosub LoadSoundAndMusic
Gosub Init
Gosub InitSpace
Gosub CreateTorgovec
Gosub CreateRockets
Gosub CreateCobra

While Not KeyHit(1)
      Gosub KeyDwn
      Gosub LiveSpace
      Gosub MozgTorgovec
      MoveEntity camera,0,0,speed#

UpdateWorld
RenderWorld
      Gosub Panel
      Gosub PoletRocket
      If FlagRezimZahvCeli$="ЦЕЛЬ ЗАХВАЧЕНА" Then Gosub ZahvatCel
      Pictentity=CameraPick(camera,400,300)
      If PickedEntity() Then Gosub MonitorPlanet
      If KeyDown(29) Then
         Color Rnd(1,255),Rnd(1,255),Rnd(1,255)
         Line ModeX,ModeY-100,ModeX/2,ModeY/2
         If ChannelPlaying(chnLaser) Then
         Else
            PlaySound(LaserWave)
         EndIf
         For t.Torgovec=Each Torgovec
             If PickedEntity()=t\model Then
                t\TorgovecLife#=t\TorgovecLife#-5
             EndIf
         Next
      EndIf
Flip
Wend

End

.LoadSoundAndMusic
VzrivKorabl=LoadSound("Sound\boom.wav")
RocketWave1=LoadSound("Sound\alarm.wav")
RocketWave2=LoadSound("Sound\alien.wav")
LaserWave=LoadSound("Sound\arrow.wav")
StartRocketWave=LoadSound("Sound\bomb.wav")
Return

.CreateCobra
 For i=1 To KolCobra#
     c.Cobra=New Cobra
     c\model=LoadMesh("Models\cobra.x")
     c\CobraNomer#=i
     PositionEntity c\model,0,0,150
     EntityPickMode c\model,2
     c\CobraLife#=1000
     EntityType c\model,CORABL
 Next
Return

.PoletRocket
 For r.Rockets=Each Rockets
     If r\RocketPolet$="True" Then
        For t.Torgovec=Each Torgovec
             If t\NomerTorgovec#=r\Cel# Then
                PointEntity r\model,t\model
                r\RocketLife#=r\RocketLife#-0.5
                MoveEntity r\Model,0,0,1.5
                If MeshesIntersect(r\model,t\model) Then
                   t\TorgovecLife#=t\TorgovecLife#-1000
                   r\RocketLife#=0
                EndIf
                If r\RocketLife#<1 Then
                   r\Cel#=0
                   PositionEntity r\Model,EntityX(camera),EntityY(camera),EntityZ(camera)
                   r\RocketLife#=1000
                EndIf
             EndIf
        Next
        For c.Cobra=Each Cobra
             If c\CobraNomer#=r\Cel# Then
                PointEntity r\model,c\model
                r\RocketLife#=r\RocketLife#-0.5
                MoveEntity r\Model,0,0,1.5
                If MeshesIntersect(r\model,c\model) Then
                   c\CobraLife#=c\CobraLife#-1000
                   r\RocketLife#=0
                EndIf
                If r\RocketLife#<1 Then
                   r\Cel#=0
                   PositionEntity r\Model,EntityX(camera),EntityY(camera),EntityZ(camera)
                   r\RocketLife#=1000
                EndIf
             EndIf
        Next
     Else
        PointEntity r\model,pricel
        PositionEntity r\Model,EntityX(camera),EntityY(camera),EntityZ(camera)
     EndIf
 Next
Return

.ZahvatCel
 If ChannelPlaying(chnWave) Then
 Else
    chnWave=PlaySound(RocketWave2)
 EndIf
 Color 220,0,0
 Text 200,485,"ЦЕЛЬ ЗАХВАЧЕНА И СОПРОВОЖДАЕТСЯ"
Return

.Init
 SetFont LoadFont("Arial Cyr",12,True)
 camera=CreateCamera()
 EntityType camera,MYCORABL
 CameraRange camera,1,100000
 svet=CreateLight()
 pricel=CreateCube(camera)
        ScaleEntity pricel,0.04,0.04,0.04
        PositionEntity pricel,0,0,5
        EntityColor pricel,255,255,255
Return

.KeyDwn
 If KeyDown(200) Then TurnEntity camera,1,0,0
 If KeyDown(208) Then TurnEntity camera,-1,0,0
 If KeyDown(203) Then TurnEntity camera,0,0,1
 If KeyDown(205) Then TurnEntity camera,0,0,-1
 If KeyHit(57) Then
    If FlagRezimZahvCeli$="ЦЕЛЬ ЗАХВАЧЕНА"
       For r.Rockets=Each Rockets
            If r\Cel#<>0 Then
               If r\RocketPolet$="False" Then
                  r\RocketPolet$="True"
                  FlagRezimZahvCeli$="False"
                  KolRockets#=KolRockets#-1
                  If ChannelPlaying(chnStartRocket) Then
                  Else
                     chnStartRocket=PlaySound(StartRocketWave)
                  EndIf
               EndIf
            EndIf
       Next
    EndIf
 EndIf
 If KeyHit(20) Then
    If PanelTovar$="True" Then
       PanelTovar$="False"
    Else
       PanelTovar$="True"
    EndIf
 EndIf
 If KeyHit(19) Then
    chnWave=PlaySound(RocketWave1)
    If KolRockets#>0 Then
       If FlagRezimZahvCeli$="True" Then
          FlagRezimZahvCeli$="False"
       Else
          FlagRezimZahvCeli$="True"
       EndIf
    Else
       Color 220,0,0
       Text 200,485,"РАКЕТНЫЕ ШАХТЫ ПУСТЫ"
    EndIf
 EndIf
 If KeyDown(30) Then Speed#=Speed#+0.01
 If KeyDown(44) Then Speed#=Speed#-0.01
 If Speed#<0 Then Speed#=0
 If Speed#>1 Then Speed#=1
Return

.Panel
 Color 10,90,130
 Rect 0,0,800,20
 Color 255,255,255
 Text 5,3,"КАПИТАН "+MyName$
 Color 245,230,80
 Rect 0,500,800,100
 Color 30,110,50
 Rect 1,501,798,98
 Color 245,230,80
 Rect 140,500,1,100
 Color 10,90,130
 Rect 1,501,139,98
 Color 0,0,0
 Text 5,500,"Информационная панель"
 Color 140,240,240
 Text 5,510,"Официальный статус:"
 Color 255,255,255
 Text 5,520,MyStatus$
 Color 140,240,240
 Text 5,530,"Класс пилота:"
 Color 255,255,255
 Text 5,540,MyClass$

 Color 140,240,240
 Text 740,500,"Скорость"
 Color 245,230,80
 Rect 740,512,Speed#*45,10
 Color 140,240,240
 Text 740,525,"Ракеты:"
 Color 255,255,255
 Text 785,525,Int(KolRockets#)
 If FlagRezimZahvCeli$="True" Then
    Color 140,240,240
    Text 1,485,"Режим сопровождения цели активен"
 EndIf
Return

.InitSpace
 Restore DataPlanets
 For i=1 To KolPlanets#
     p.Planets=New Planets
     p\model=CreateSphere(16)
     p\NomerPlanet#=i
     Read p\NamePlanet$, p\PlanetX#, p\PlanetY#, p\PlanetZ#, p\PlanetR#, p\PlanetTex$
     PositionEntity p\model, p\PlanetX#, p\PlanetY#, p\PlanetZ#
     ScaleEntity p\model, p\PlanetR#, p\PlanetR#, p\PlanetR#
     EntityTexture p\model, LoadTexture(p\PlanetTex$)
     EntityPickMode p\model,2
     EntityType p\model,PLANETA
     DisoSputnik1=CreateSphere(16,p\model)
                  PositionEntity DisoSputnik1,-1,-1,-1
                  ScaleEntity DisoSputnik1,0.1,0.1,0.1
                  EntityTexture DisoSputnik1,LoadTexture("Textures\moon.bmp")
                  EntityType DisoSputnik1,PLANETA
 Next
 For i=1 To KolPlanets#
     Restore DataTovar
     For z=1 To KolVidTovar#
         Read TovarNamePlanet$(i,z,1), TovarVesTovar#(i,z,1), TovarCenaTovar#(i,z,1)
     Next
 Next
Return

.LiveSpace
 For p.Planets=Each Planets
     TurnEntity p\model,0.01,0.01,0.01
 Next
Return

.MonitorPlanet
 For p.Planets=Each Planets
     If PickedEntity()=p\model Then
        Color 140,240,240
        Text 145,500,"ПЛАНЕТА"
        Color 255,255,255
        Text 145,510,p\NamePlanet
        If PanelTovar$="True" Then Gosub PanelTovarVisible
     EndIf
 Next
 For t.Torgovec=Each Torgovec
     If PickedEntity()=t\model Then
        Color 140,240,240
        Text 145,500,"ТОРГОВЕЦ"
        Color 255,255,255
        Text 145,510,t\TorgovecNameGruz$
        If FlagRezimZahvCeli$="True" Then
           Color 220,0,0
           Text 200,485,"ЦЕЛЬ ЗАХВАЧЕНА"
           FlagRezimZahvCeli$="ЦЕЛЬ ЗАХВАЧЕНА"
           For r.Rockets=Each Rockets
               If r\NomerRocket#=Int(5-KolRockets#) Then r\Cel#=t\NomerTorgovec#
           Next
        EndIf
     EndIf
 Next
 For c.Cobra=Each Cobra
     If PickedEntity()=c\model Then
        Color 140,240,240
        Text 145,500,"КОБРА"
        If FlagRezimZahvCeli$="True" Then
           Color 220,0,0
           Text 200,485,"ЦЕЛЬ ЗАХВАЧЕНА"
           FlagRezimZahvCeli$="ЦЕЛЬ ЗАХВАЧЕНА"
           For r.Rockets=Each Rockets
               If r\NomerRocket#=Int(5-KolRockets#) Then r\Cel#=c\CobraNomer#
           Next
        EndIf
     EndIf
 Next
Return

.PanelTovarVisible
 Color 160,220,260
 Rect 0,0,335,300
 Color 10,90,130
 Rect 1,1,333,298
 Color 160,220,260
 Text 5,2,"НАИМЕНОВАНИЕ"
 Text 160,2,"КОЛИЧЕСТВО"
 Text 250,2,"СТОИМОСТЬ"
 For z=1 To KolVidTovar#
     Color 255,255,255
     Text 5,(z*15)+10,TovarNamePlanet$(p\NomerPlanet#,z,1)
     Text 180,(z*15)+10,TovarVesTovar#(p\NomerPlanet#,z,1)
     Text 270,(z*15)+10,TovarCenaTovar#(p\NomerPlanet#,z,1)
     Color 160,220,260
     Rect 5,(z*15)+25,330,1
 Next
Return

.CreateTorgovec
 For i=1 To KolTorgovec#
     t.Torgovec=New Torgovec
     t\model=LoadMesh("Models\torgovec.x")
     t\NomerTorgovec#=i
     PositionEntity t\model,Rnd(-1500,1500),Rnd(-1500,1500),Rnd(-1500,1500)
     EntityPickMode t\model,2
     t\TorgovecKurs#=Int(Rnd(1,KolPlanets#))
     t\TorgovecLife#=1000
     EntityType t\model,CORABL
 Next
Return

.CreateRockets
 For i=1 To KolRockets#
     r.Rockets=New Rockets
     r\model=LoadMesh("Models\missile.x")
     PositionEntity r\model,EntityX(camera),EntityY(camera),EntityZ(camera)
     r\Cel#=0
     r\NomerRocket#=i
     r\RocketLife#=1000
     r\RocketPolet$="False"
 Next
Return

.MozgTorgovec
 For t.Torgovec=Each Torgovec
     If t\TorgovecLife#<1 Then
        t\TorgovecLife#=1000
        chnWave=PlaySound(VzrivKorabl)
        PositionEntity t\Model,950000,950000,950000
     EndIf
     For p.Planets=Each Planets
         If p\NomerPlanet#=t\TorgovecKurs# Then
            If t\TorgovecLife#<1000 Then
               t\TorgovecLife#=t\TorgovecLife#+0.05
               TurnEntity t\model,Sin(EntityX(t\model))/4,Sin(EntityY(t\model))/4,Sin(EntityZ(t\model))/4
            Else
               PointEntity t\model,p\model
            EndIf
            If EntityX(t\model)>EntityX(p\model)-10 And EntityX(t\model)<EntityX(p\model)+10 Then
               If EntityY(t\model)>EntityY(p\model)-10 And EntityY(t\model)<EntityY(p\model)+10 Then
                  If EntityZ(t\model)>EntityZ(p\model)-10 And EntityZ(t\model)<EntityZ(p\model)+10 Then
                     Gosub TorgovecMagazin
                  EndIf
               EndIf
            EndIf
         EndIf
     Next
     MoveEntity t\model,0,0,0.9
 Next
Return

.TorgovecMagazin
 Restore DataTovar
 For i1=1 To KolVidTovar#
     Read Tov$,Tov1#,Tov2#
     If t\TorgovecNameGruz$=Tov$ Then z1=i1
 Next
 TovarVesTovar#(p\NomerPlanet#,z1,1)=Int(TovarVesTovar#(p\NomerPlanet#,z1,1))+1
 If TovarCenaTovar#(p\NomerPlanet#,z1,1)>1 Then TovarCenaTovar#(p\NomerPlanet#,z1,1)=TovarCenaTovar#(p\NomerPlanet#,z1,1)-0.1
 z1=Int(Rnd(1,KolVidTovar#))
 Restore DataTovar
 For i1=1 To z1
     Read t\TorgovecNameGruz$, t\TorgovecKolGruz#, Tov2#
 Next
 If TovarVesTovar#(p\NomerPlanet#,z1,1)>0 Then TovarVesTovar#(p\NomerPlanet#,z1,1)=Int(TovarVesTovar#(p\NomerPlanet#,z1,1))-1
 TovarCenaTovar#(p\NomerPlanet#,z1,1)=TovarCenaTovar#(p\NomerPlanet#,z1,1)+0.1
 t\TorgovecKolGruz#=Int(Rnd(1,10))
 t\TorgovecKurs#=Int(Rnd(1,KolPlanets#))
Return

.DataPlanets
 Data "Дисо",1600,1600,1600,400,"Textures\earth.jpg"
 Data "Лэйв",3600,1600,0,400,"Textures\earthcloudmap.jpg"
 Data "Центирон",7600,1600,15500,700,"Textures\jupiter.jpg"
 Data "Элия",0,16000,15500,300,"Textures\mars.jpg"
 Data "Протан",1200,500,23000,450,"Textures\deimosbump.jpg"

.DataTovar
 Data "Продукты питания",60,3.5
 Data "Алкогольные изделия",120,16.90
 Data "Текстиль",200,7.55  Data "Лекарственные препараты",51,12.4
 Data "Наркотические вещества",40,32.2
 Data "Строительные материалы",35,7.2
 Data "Черные металлы",77,8.0
 Data "Цветные металлы",44,17.0
 Data "Компьютеры",65,28.0
 Data "Машины",68,41.8
 Data "Предметы искусства",58,71.0
 Data "Ювелирные изделия",33,52.1
 Data "Оружие",43,32.3

Далее создаем папку "Models" и в нее кладем модели кораблей.
cobra.x
missile.x
torgovec.x

В папку "Sound" кладем звуки.
alarm.wav
alien.wav
arrow.wav
bomb.wav
boom.wav
starwars.mid

В папку "Textures" кладем соответственно текстуры.
moon.bmp
earth.jpg
earthcloudmap.jpg
jupiter.jpg
mars.jpg
deimosbump.jpg

Теперь пробуем запустить. У меня все работает без единого сбоя. Если какая-то из ссылок не работает, то Вы можете подставить свои модели и звуки, предварительно переименовав файлы либо внеся изменения в текст программы. Но в любом случае очень прошу сообщить о неработающей ссылке на мыло: machineworld@ya.ru

Помощь можно оказать, перечислив любую сумму на любой из кошельков WebMoney:
Z193190354379
U120840414982
R186326509716

или на Яндекс.Кошелек
41001169245110



Парашютный Портал Донбасса "eXtreme Way"

Рейтинг@Mail.ru

Яндекс.Метрика


Со мной можно связаться по адресу:  MachineWorld@ya.ru

WebDesign by Machine'2014
E-mail: MachineWorld@ya.ru