Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Для придания объёма (это надо было ещё вначале сделать) я добавил в create_world() создание и ротацию света:
light=CreateLight()
RotateEntity light,90,0,0
;инициализация графики
Graphics3D 800,600,32
SetBuffer BackBuffer()
Global user
Global camera
Const G#=1
Const USERT=1;for user
Const TERRT=2;for terrain
Const SHOTT=3;for shot
Const BOTT=4;for bot
Global pricel=LoadImage("pricel.bmp")
Global shot_sprite=LoadSprite("sprite.bmp")
Type shot
Field entity
Field dist#
End Type
Type bot
Field entity
End Type
;создание игрока
Function create_user(x#=0,y#=10,z#=0)
MidHandle pricel
MaskImage pricel,255,255,255
user=CreateSphere()
k#=3
ScaleEntity user,k#,k#,k#
EntityRadius user,k#
camera=CreateCamera(user)
CameraRange camera,0.1,100
PositionEntity user,x#,y#,z#
EntityType user,USERT
End Function
;обновление игрока
Function update_user()
V#=0.5
u#=70;предельный угол
TurnEntity camera,MouseYSpeed(),0,0
TurnEntity user,0,-MouseXSpeed(),0
If KeyDown(203)=1 Then MoveEntity user,-V#,0,0
If KeyDown(205)=1 Then MoveEntity user,V#,0,0
If KeyDown(200)=1 Then MoveEntity user,0,0,+V#
If KeyDown(208)=1 Then MoveEntity user,0,0,-V#
MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
If Abs(EntityPitch#(camera))>u# RotateEntity camera,u#*Sgn(EntityPitch#(camera)),0,0
If MouseHit(1) create_shot(EntityX(user),EntityY(user),EntityZ(user),EntityPitch(camera),EntityYaw(user),0)
;физика
TranslateEntity user,0,-G#,0
End Function
Function create_Shot(x#,y#,z#,pitch#,yaw#,roll#)
s.shot=New shot
s\entity=CopyEntity(shot_sprite)
EntityType s\entity,SHOTT
PositionEntity s\entity,x#,y#,z#,1
RotateEntity s\entity,pitch#,yaw#,roll#,1
Return True
End Function
Function update_shot()
vs#=1
max_dist#=1000
For a.shot=Each shot
MoveEntity a\entity,0,0,vs#
a\dist#=a\dist#+vs#
bot_h=EntityCollided(a\entity,BOTT)
If a\dist#>max_dist#
FreeEntity a\entity
Delete a
ElseIf EntityCollided(a\entity,TERRT) < > 0
FreeEntity a\entity
Delete a
ElseIf bot_h < > 0
FreeEntity a\entity
Delete a
For q.bot=Each bot
If q\entity=bot_h
FreeEntity bot_h
Delete q
create_bot(EntityX(user)+Rnd(-100,100),2,EntityZ(user)+Rnd(-100,100))
Exit
EndIf
Next
EndIf
Next
End Function
Function create_bot(x#,y#,z#)
b.bot=New bot
b\entity=CreateSphere()
EntityType b\entity,BOTT
PositionEntity b\entity,x#,y#,z#
Return True
End Function
Function update_bot()
v#=0.3
For a.bot=Each bot
PointEntity a\entity,user
MoveEntity a\entity,0,0,v#
Next
End Function
;создание игрового мира
Function create_world()
light=CreateLight()
RotateEntity light,90,0,0
HideEntity shot_sprite
terrain=CreatePlane()
tertex=LoadTexture("terrain1.jpg")
ScaleTexture tertex,10,10
EntityTexture terrain,tertex
FreeTexture tertex
EntityType terrain,TERRT
create_user()
c_bot=Input("input Amount")
For i=1 To c_bot
create_bot(Rnd(-100,100),2,Rnd(-100,100))
Next
Collisions USERT,TERRT,2,3
Collisions SHOTT,TERRT,2,1
Collisions BOTT,TERRT,2,3
Collisions BOTT,USERT,2,3
Collisions BOTT,BOTT,2,3
Collisions USERT,BOTT,2,3
Collisions SHOTT,BOTT,2,1
End Function
;функции закончились
;--------------------------------
create_world()
;MAIN LOOP
While Not KeyHit(1)=1
update_user()
update_shot()
update_bot()
UpdateWorld()
RenderWorld()
DrawImage pricel,MouseX(),MouseY()
Flip
Wend
;----------------------------
End
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|