Re: Tyhmät kysymykset
Posted: Fri Jan 09, 2009 6:07 pm
Miten saan suoritettua tiedostosta luetun komennon?
Tai voisiko joku tehdä semmosen?
Tai voisiko joku tehdä semmosen?
Game Making Should Be Easy...
https://www.coolbasic.com/phpBB3/
Code: Select all
***komennot.txt***
OpenToEdit
WriteByte
CloseFile
Code: Select all
If ObjectsOverlap (iVihu\obj, heebo) Then
Health = Health-1
If Health = 0 Then MakeError "Oudot hihhulit tappoivat sinut!"
EndIf
Code: Select all
Type VIHUT
Field obj
EndType
Type AMMUKSET
Field obj
EndType
FrameLimit 40
vihu=LoadObject("Media\guy.bmp", 72)
ShowObject vihu,OFF
ammus=LoadObject("media\bullet.bmp")
ShowObject ammus,OFF
heebo=LoadObject("media\soldier.bmp", 72)
AddText "Nuolista kääntyypi, Space ampuu!"
Konekivaarintehot=1 'vielä aavistuksen turha
Kills=0 'kuin myös
Health=2000
Repeat
'Update Tuning
If LeftKey() Then TurnObject heebo,5
If RightKey() Then TurnObject heebo,-5
If UpKey() Then MoveObject heebo, 3
If DownKey() Then MoveObject heebo, -2
If KeyDown(cbkeyspace) And reload < 1 Then
uusAmmus.AMMUKSET= New(AMMUKSET)
uusAmmus\obj=CloneObject(ammus)
CloneObjectPosition uusAmmus\obj, heebo
CloneObjectOrientation uusAmmus\obj, heebo
MoveObject uusAmmus\obj, 24
reload=8
EndIf
If vihutimer = 0 Then
uusVihu.VIHUT= New(VIHUT)
uusVihu\obj=CloneObject(vihu)
PositionObject uusVihu\obj, Rnd (0,640), Rnd(0,480)
vihutimer = 15
EndIf
'Update bullwts
For iAmmus.AMMUKSET= Each AMMUKSET
MoveObject iAmmus\obj,6
i=i+1
Next iAmmus
'Update vihulliset
For iVihu.VIHUT= Each VIHUT ' update vihullaiset
PointObject iVihu\obj, heebo
MoveObject iVihu\obj, 2
If ObjectsOverlap (iVihu\obj, heebo) Then
Health = Health-1
If Health = 0 Then MakeError "Oudot hihhulit tappoivat sinut!"
EndIf
If ObjectsOverlap (iVihu\obj, iAmmus\obj) Then
DeleteObject iAmmus\obj
DeleteObject iVihu\obj
EndIf
Next iVihu
For iVihu.VIHUT = Each VIHUT
For iAmmus.AMMUKSET = Each Ammukset
If ObjectsOverlap(iVihu,iAmmus) Then
DeleteObject iVihu\obj
DeleteObject iAmmus\obj
Delete iVihu
Delete iAmmus
EndIf
Next iAmmus
Next iVihu
If reload>0 Then reload=reload-Konekivaarintehot
If vihutimer>0 Then vihutimer=vihutimer-1
DrawScreen
Forever
Viilataan pilkkua: Coolbasicilla ei voi tehdä kääntäjää, tulkin korkeintaan. Kääntäjä ehkä DLL:llä mutta se kai oli kiellettyä Zeron mukaan (ainakin jos on samat komennot kuin CB:ssä)Jani wrote:Ja sitten lisää sinne uuden rivin ja kääntäjän pitäisi osata suorittaa se...
Code: Select all
exit: End
Code: Select all
...koodia
select {komento}
case "End"
End
endselect
Code: Select all
Select joku
Case 5
jotain
EndSelect
Tästä saat tällaisen täyttämättömän neliön. Ei ollut mitään tekemistä niin koodasin nopsasti.Jani wrote:Minä taas...
Onko mahdollista laittaa laatikko vinoon?
Jos ei, niin voisiko joku tehdä semmoisen funktion?
Code: Select all
Repeat
i#+1
RotBox(200,150,20,i)
DrawScreen
Forever
Function RotBox(XPosition,YPosition,Range,angle)
Line XPosition+Sin(angle)*Range, YPosition+Cos(angle)*Range,XPosition+Sin(WrapAngle(angle)-90)*Range, YPosition+Cos(WrapAngle(angle)-90)*Range
Line XPosition+Sin(WrapAngle(angle)-90)*Range, YPosition+Cos(WrapAngle(angle)-90)*Range,XPosition+Sin(WrapAngle(angle)-180)*Range, YPosition+Cos(WrapAngle(angle)-180)*Range
Line XPosition+Sin(WrapAngle(angle)-180)*Range, YPosition+Cos(WrapAngle(angle)-180)*Range,XPosition+Sin(WrapAngle(angle)+90)*Range, YPosition+Cos(WrapAngle(angle)+90)*Range
Line XPosition+Sin(WrapAngle(angle)+90)*Range, YPosition+Cos(WrapAngle(angle)+90)*Range,XPosition+Sin(angle)*Range, YPosition+Cos(angle)*Range
End Function
Code: Select all
Type VIHUT
Field obj
EndType
Type AMMUKSET
Field obj
EndType
FrameLimit 40
vihu=LoadObject("Media\guy.bmp", 72)
ShowObject vihu,OFF
ammus=LoadObject("media\bullet.bmp")
ShowObject ammus,OFF
heebo=LoadObject("media\soldier.bmp", 72)
AddText "Nuolista kääntyypi, Space ampuu!"
Konekivaarintehot=1 'vielä aavistuksen turha
Kills=0 'kuin myös
Health=2000
Repeat
'Update Tuning
If LeftKey() Then TurnObject heebo,5
If RightKey() Then TurnObject heebo,-5
If UpKey() Then MoveObject heebo, 3
If DownKey() Then MoveObject heebo, -2
If KeyDown(cbkeyspace) And reload < 1 Then
uusAmmus.AMMUKSET= New(AMMUKSET)
uusAmmus\obj=CloneObject(ammus)
CloneObjectPosition uusAmmus\obj, heebo
CloneObjectOrientation uusAmmus\obj, heebo
MoveObject uusAmmus\obj, 24
reload=8
EndIf
If vihutimer = 0 Then
uusVihu.VIHUT= New(VIHUT)
uusVihu\obj=CloneObject(vihu)
PositionObject uusVihu\obj, Rnd (0,640), Rnd(0,480)
vihutimer = 15
EndIf
'Update bullwts
For iAmmus.AMMUKSET= Each AMMUKSET
MoveObject iAmmus\obj,6
i=i+1
Next iAmmus
'Update vihulliset
For iVihu.VIHUT= Each VIHUT ' update vihullaiset
PointObject iVihu\obj, heebo
MoveObject iVihu\obj, 2
If ObjectsOverlap (iVihu\obj, heebo) Then
Health = Health-1
If Health = 0 Then MakeError "Oudot hihhulit tappoivat sinut!"
EndIf
Next iVihu
For iVihu.VIHUT = Each VIHUT
tuhoa=OFF
For iAmmus.AMMUKSET = Each Ammukset
If ObjectsOverlap(iVihu\obj,iAmmus\obj) Then
DeleteObject iAmmus\obj
Delete iAmmus
tuhoa=ON
EndIf
Next iAmmus
If tuhoa Then
Delete iVihu
DeleteObject iVihu\obj
EndIf
Next iVihu
If reload>0 Then reload=reload-Konekivaarintehot
If vihutimer>0 Then vihutimer=vihutimer-1
DrawScreen
Forever
Miksi viesti tuli kahdesti?
Code: Select all
Dim AMMUS_ELOSSA(100)
Dim AMMUS_OBJ(100)
FrameLimit 40
Color cbOrange
Box 20,20,360,260,OFF
mappi=LoadObject ("Media\level.bmp")
ukko=LoadObject("Media\soldier.bmp",72)
pati=LoadObject("Media\bullet.bmp")
ShowObject pati,OFF
AddText "Nuolista ohjaa, CTRL=ampuu"
Repeat
Dim botit(8, 4)
botteja = 8
Const masterbotti = 0
Const objekti = 0
Const energia = 1
Const hengissä = 2
Const ampuuko = 3
Const reload_botti = 4
botit(masterbotti, objekti) = LoadObject("soldier.bmp", 360)
ShowObject botit(masterbotti, objekti), OFF
For kloonattava = 1 To 8
botit(kloonattava, objekti) = CloneObject(botit(masterbotti, objekti))
botit(kloonattava, energia) = Rand(10, 20)
botit(kloonattava, hengissä) = 1
botit(kloonattava, ampuuko) = 1
botit(kloonattava, reload_botti) = 0
Next kloonattava
PositionObject botit(1, objekti), -465,865
PositionObject botit(2, objekti), 110,1120
PositionObject botit(3, objekti), -50,1120
PositionObject botit(4, objekti), 465,865
PositionObject botit(5, objekti), 465,705
PositionObject botit(6, objekti), 400,130
PositionObject botit(7, objekti), 400,480
PositionObject botit(8, objekti), 400,-130
dead_master = LoadObject("dead.bmp")
ShowObject dead_master, OFF
Dim dead_tekstuurit(7)
For kloonattava = 0 To 7
dead_tekstuurit(kloonattava) = CloneObject(dead_master)
ShowObject dead_tekstuurit(kloonattava), OFF
Next kloonattava
'Ohjaa ukkoa NUOLILLA
If LeftKey() Then TurnObject ukko,5
If RightKey() Then TurnObject ukko,-5
If UpKey() Then MoveObject ukko,2
If DownKey() Then MoveObject ukko,-2
If KeyDown(cbKeyRControl) And reload=0 Then
Gosub LisääAmmus
EndIf
'päivitä aseen lataaminen
If reload>0 Then reload=reload-1
GoSub PäivitäAmmukset
DrawGame
If KeyDown(cbKeyRControl) And reload=0 Then
Gosub LisääAmmus
EndIf
'päivitä aseen lataaminen
If reload>0 Then reload=reload-1
CloneCameraPosition ukko
DrawGame
Gosub PäivitäAmmukset
DrawScreen
Until EscapeKey()
End
'----------------------------------------------
LisääAmmus:
For i=1 To 100
If AMMUS_ELOSSA(i)=OFF Then
AMMUS_ELOSSA(i)=ON
AMMUS_OBJ(i)=CloneObject(pati)
CloneObjectPosition AMMUS_OBJ(i),ukko
CloneObjectOrientation AMMUS_OBJ(i),ukko
reload=5
'
Exit
EndIf
Next i
Return
'-----------------------------------------------
PäivitäAmmukset:
For i=1 To 100
If AMMUS_ELOSSA(i) Then
MoveObject AMMUS_OBJ(i),6
'ammus ylittää rajan -> tuhoa se
'vapauta paikka tyhjäksi
AMMUS_ELOSSA(i)=OFF
EndIf
Next i
Return 'palaa takaisin pääsilmukkaan
Code: Select all
botit(masterbotti, objekti) = LoadObject("soldier.bmp", 360)
Code: Select all
botit(masterbotti, objekti) = LoadObject("Media\soldier.bmp", 360)
Code: Select all
SCREEN 800,600
car = LoadObject("Media\car2.bmp",90)
guy = LoadObject("Media\pacman.bmp")
'guy = LoadObject("Media\car.bmp")
PositionObject car,100,100
Const MoveSpeed=4
Const TurnSpeed=2
Repeat
MoveObject car,(KeyDown(cbkeyW)+UpKey())*MoveSpeed-(KeyDown(cbkeyS)+DownKey())*MoveSpeed
TurnObject car,(KeyDown(cbkeyA)-RightKey())*TurnSpeed-(KeyDown(cbkeyD)-LeftKey())*TurnSpeed
osuu=HitPossible(car,guy,400)
DrawGame
If osuu>0 Then Text 10,30,"Osuu" Else Text 10,30,"Ei osu"
Text 10,10,"FPS: "+FPS()
Text 10,50,"Etäisyys: "+osuu
Text 10,100,"pix: "+GetPixel(MouseX(),MouseY())
DrawScreen
Forever
Function HitPossible(obj1,obj2,MaxDistance)
SX1#=ObjectSizeX(obj2)/2
SY1#=ObjectSizeY(obj2)/2
x1#=ObjectX(obj1)+ScreenWidth()/2
y1#=-ObjectY(obj1)+ScreenHeight()/2
x2#=ObjectX(obj2)+ScreenWidth()/2
y2#=-ObjectY(obj2)+ScreenHeight()/2
angle1#=ObjectAngle(obj1)
'Lock SCREEN()
For a=0 To MaxDistance-1
CX#=x1#+Cos(angle1#)*a
CY#=y1#-Sin(angle1#)*a
If CY#<=SY1#+y2# And CY#>=-SY1#+y2# And CX#<=x2#+SX1# And CX#>=x2#-SX1# Then 'laatikko tarkastus
If GetPixel(cx,cy) <> -16777216 Then Return a ' väri tarkistus
EndIf
Dot cx#,cy#
Next a
'Unlock
EndFunction
Code: Select all
If ObjectsOverlap(object1, object2, 3) Then Print "Zomgz! Pikselintarkka törmäys!"
Menee vähän säädoksi ainakin minun mielestäni, jos joudut testailemaan useaa pistettä tuolla tavalla. Ideana on, että tuo functio kertoo osuuko objekti, jos jatkaa samaan suuntaan liikettä.. Laatikkokosketuksella toimii ihan hyvin, mutta tuo pikselintarkka ei toimi.temu92 wrote:Mikset käytä ObjectsOverlapia? Tuo on vaikka kuinka paljon vaikeammin tehty kun sillä se onnistuisi seuraavasti:
Code: Select all
If ObjectsOverlap(object1, object2, 3) Then Print "Zomgz! Pikselintarkka törmäys!"