Avatar billede Six Nybegynder
27. oktober 2003 - 13:16 Der er 1 kommentar og
1 løsning

Smide en pakke random i et spil?

hej.

Jeg sidder med min projektopgave. og skal lave et nødhjælps-spil.

der er 4 sprites i alt.

sprite 1 = fly
sprite 2 = pakke
sprite 3 = mand der skal gribe pakke
sprite 4 = Scorefield

flyet flyver horisontalt
pakkerne droppes vertikalt.
manden følger musens locV

jeg har følgende script på flyet.

----------------- SCRIPT ------------------

property pSpeed, stagewidth, mySprite
on beginSprite me
  set mySprite to the spritenum of me
  pSpeed = 10
  set stagewidth to the width of the rect of the stage
end

on exitframe me
  sprite(me.spritenum).locH = sprite(me.spritenum).locH + pSpeed
  if sprite(me.spritenum).locH > 800 Then
    sprite(me.spritenum).locH = -170
  end if
  if sprite(me.spritenum).locH > 0 and the locH of sprite mySprite < stagewidth then
    sendsprite(2,#shoot)
  end if
end

---------------Slut---------------

hvordan får jeg flyet til at smide en pakke random, altså med sendsprite(2,#shoot)istedet for on exitframe me ?
Avatar billede kanding Nybegynder
27. oktober 2003 - 14:01 #1
Et problem med at bruge random er at der er en mulighed for at der aldrig vil blive droppet noget eller omvendt at der bliver droppet hele tiden. Der i ligger tilfældigheden ligesom.

Derfor bliver man nød til for gameplayer's skyld, at kontrollere det lidt. Enten ved at lave en blandet liste af drop og ikke drop fx.:
gRandomList = [0,0,0,0,1,1,1,1]
gTempRandomList = duplicate(gRandomList)
Begge er globale lister

Her kan du jo selv sætte fordelings forholdet af drop og ikke drop.

så kan du i en handler lave dette:

on should_I_drop me
if gTempRandomList.count <= 0 then
gTempRandomList = duplicate(gRandomList)
end if
randomNum = random(gTempRandomList.count)
decission = gTempRandomList[randomNum]
gTempRandomList.deleteAt(randomNum)
return decission
end
Det jeg gør at først sikre mig at der er flere items i liste og hvis ikke starte forfra.
Derefter tager jeg en tilfældig fra listen med en random af listen størrelse
Så sletter jeg den for ikke at vælge den igen.

En anden mulighed er at ihvertilfælde hver 100 gang at droppe og elleras lave en procent vis mulighed for drop:

on should_I_drop me
pCounter = pCounter +1

if pCounter >= 100 then
pCounter = 0
return true
end if
if random(1, 100) > 40 then
return true
end if
return false
end

Med begge kan du istedet for :

if sprite(me.spritenum).locH > 0 and the locH of sprite mySprite < stagewidth then
    sendsprite(2,#shoot)
  end if


kalde

if should_I_drop(me) then
    sendsprite(2,#shoot)
  end if
Avatar billede Six Nybegynder
27. oktober 2003 - 14:14 #2
Jamen, det er helt perfekt. Takker endnu engang :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Capgemini Danmark A/S

AI/Data Engineer

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen