Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 [n00b]Character/enemy movement synchronization
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Nigrev




PostPosted: Tue Dec 05, 2006 9:38 pm   Post subject: [n00b]Character/enemy movement synchronization

It's pretty hard to find a specific question using the surtshenjin. So I resort to posting.

I'm at a predicament, which most of you pros probably have been through when the almighty said " Evil or Very Mad PROCESSES ARE THE DEVIL h4xx0rz Evil or Very Mad !!!11".

You will see here, with incomplete comments:
code:

%==================
%Movement test program 001
%By:Nigrev
%==================
%importing external modules/setscreen/odd var declaration
import ("BSprite.tu") %external Bacchus Sprites module.  Thnx to Bacchus of Compsci!!!
setscreen ("graphics:800;600, nobuttonbar, offscreenonly,title:movetest")
var background, speedboots, sbhave, sbx, sby, num : int
background := Pic.FileNew ("grass.bmp")
Pic.Draw (background, 1, 1, picMerge)
%================================%
%Creation of the type sprite (Sprt) and composite data of sprite
type Sprt :
    record
        pic, x, y, rlmovesp1, rlmovesp2, udmovesp, movesp : int
    end record
%=================================%
%Creation of paladin
var paladin : Sprt
paladin.x := 100 %intitialize x position at 100
paladin.y := 100 %intitialize y position at 100
paladin.pic := BSprite.New (paladin.x, paladin.y, "pally1.bmp") %initialize sprite picture
paladin.rlmovesp1 := 10 %\
paladin.rlmovesp2 := 5 % > movement speed modifications
paladin.udmovesp := 15 %/
%=================================%
%Creation of the extra sprites
var enemy1 : Sprt
enemy1.x := 500
enemy1.y := 100
enemy1.pic := BSprite.New (enemy1.x, enemy1.y, "summoner2.bmp")
enemy1.movesp := 30
%=================================%
var chars : array char of boolean
sbx := 500
sby := 400
sbhave := 0
speedboots := BSprite.New (sbx, sby, "speedboots.bmp")
View.Update
procedure pallymove
    Input.KeyDown (chars)
    if chars (KEY_UP_ARROW) then
        BSprite.Change ("pally6.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
        end for
        BSprite.Change ("pally6-2.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
        end for
    elsif chars (KEY_DOWN_ARROW) then
        BSprite.Change ("pally5.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
        end for
        BSprite.Change ("pally5-2.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
        end for
    elsif chars (KEY_RIGHT_ARROW) then
        BSprite.Change ("pally3-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
        end for
        BSprite.Change ("pally7-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
        end for
        BSprite.Change ("pally2-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
        end for
        BSprite.Change ("pally7-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
        end for
        BSprite.Change ("pally1-2.bmp", paladin.pic)
        View.Update
    elsif chars (KEY_LEFT_ARROW) then
        BSprite.Change ("pally3.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
        end for
        BSprite.Change ("pally7.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
        end for
        BSprite.Change ("pally2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
        end for
        BSprite.Change ("pally7.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
        end for
        BSprite.Change ("pally1.bmp", paladin.pic)
        View.Update
    end if
    if paladin.x = sbx and paladin.y = sby then
        sbhave := 1
        BSprite.Change ("emptysprite.bmp", speedboots)
    end if
    if sbhave = 1 then
        paladin.udmovesp := 3
        paladin.rlmovesp1 := 2
        paladin.rlmovesp2 := 3
    end if
end pallymove
procedure enemymove1
    if num = 1 then
        for i : 1 .. 20
            enemy1.x += 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
        end for
    end if
    if num = 2 then
        for i : 1 .. 20
            enemy1.x -= 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
        end for
    end if
    if num = 3 then
        for i : 1 .. 20
            enemy1.y += 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
        end for
    end if
    if num = 4 then
        for i : 1 .. 20
            enemy1.y -= 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
        end for
    end if
end enemymove1

loop
    randint (num, 1, 4)
    enemymove1
    pallymove
    if paladin.x >= maxx then
        paladin.x := 0
    elsif paladin.x <= 0 then
        paladin.x := maxx
    end if
    if paladin.y >= maxy then
        paladin.y := 0
    elsif paladin.y <= 0 then
        paladin.y := maxy
    end if
end loop

Monster of a code, innit?
Sorry about the pictures, modify it a bit so you can run it without messing with the movement mechanism.

As you can see, it plays like a damn board game Mad . You gotta wait for the enemy to move before the paladin can go another space Sad . How do you (un)synchronize both the movements without the use of processes, and (hopefully) no palllymove/enemy1move procedure fusion? I need a workaround based on my skill level, unless it is impossible. Then tell me the books to read.

This is for an assignment, so plx no code rewriting. And plx no "LEARN CLASSES, [s]n00b[/s] Evil or Very Mad " or whatnot, because it's due January; I have limited time to learn now (i wish this was not so Crying or Very sad ).
I'm on basically pre-pre-pre-pre-alphastage.

Thnx.
Sponsor
Sponsor
Sponsor
sponsor
ericfourfour




PostPosted: Tue Dec 05, 2006 10:32 pm   Post subject: (No subject)

Don't worry, most people won't recommend classes to someone who has trouble spelling search engine.

What you basically need is a variable that keeps track of each characters movement. Every frame update that variable for each character. You should also disable the character's ability to change directions while it is moving.

Say you want to move 16 pixels at 1 pixel/frame (it will take 16 frames to complete the character's movement). You would create a variable to store the character's movement and a flag that prevents the character from changing directions.

A bit of code to work with.
code:
var movement : array 1 .. amount_of_characters of int %Make this a real if you get good at it.

var max_movement : int %This can be an array if the characters travel different distances

var controls_disabled : array 1 .. amount_of_characters of boolean %Disables the characters controls

var moving : array 1 .. amount_of_characters of boolean %True if the character is moving

loop
    if not controls_disabled (character)
        check controls
            if a moving control was used
                movement (current_character) := 0
                controls_disabled (current_character) := true

     if moving (current_character)
         movement (current_character) += 1
         if movement (current_character) > max_movement
             moving (current_character) := false
             controls_disabled (current_character) := false
end loop
If you look closely you will notice that moving is always the same as controls_disabled so you only really need one.
Nigrev




PostPosted: Thu Dec 07, 2006 9:52 pm   Post subject: (No subject)

This helps how? Disable why? I don't get the code...

The character does not change directions while moving anyway(which one are you talking about?)

So.. okay, i keep track of the movements, then disable the control if it goes to far?

This is what I have so far
code:

%importing external modules/setscreen/odd var declaration
import ("BSprite.tu") %external Bacchus Sprites module.  Thnx to Bacchus of Compsci!!!
setscreen ("graphics:800;600, nobuttonbar, offscreenonly,title:movetest")
var background, speedboots, sbhave, sbx, sby, num : int
background := Pic.FileNew ("grass.bmp")
Pic.Draw (background, 1, 1, picMerge)
%============================
%Some guy on compsci told me to use this, still testing what it does
var movement : array 1 .. 3 of int
var max_movement : int
var disable_controls : array 1 .. 3 of boolean
var moving : array 1 .. 3 of boolean
max_movement := 20
movement (1) := 0
movement (2) := 0
disable_controls(1):=false
%================================%
%Creation of the type sprite (Sprt) and composite data of sprite
type Sprt :
    record
        pic, x, y, rlmovesp1, rlmovesp2, udmovesp, movesp : int
    end record
%=================================%
%Creation of paladin
var paladin : Sprt
paladin.x := 100 %intitialize x position at 100
paladin.y := 100 %intitialize y position at 100
paladin.pic := BSprite.New (paladin.x, paladin.y, "pally1.bmp") %initialize sprite picture
paladin.rlmovesp1 := 10 %\
paladin.rlmovesp2 := 5  % > movement speed modifications
paladin.udmovesp := 15  %/
%=================================%
%Creation of the extra sprites
var enemy1 : Sprt
enemy1.x := 500
enemy1.y := 300
enemy1.pic := BSprite.New (enemy1.x, enemy1.y, "summoner2.bmp")
enemy1.movesp := 30
%=================================%
var chars : array char of boolean
sbx := 500
sby := 400
sbhave := 0
speedboots := BSprite.New (sbx, sby, "speedboots.bmp")
View.Update
procedure pallymove
    Input.KeyDown (chars)
    if chars (KEY_UP_ARROW) then
        moving (1):= true
        BSprite.Change ("pally6.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally6-2.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
            movement (1) += 1
        end for
    elsif chars (KEY_DOWN_ARROW) then
        moving (1):= true
        BSprite.Change ("pally5.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally5-2.bmp", paladin.pic)
        for i : 1 .. 10
            paladin.y := paladin.y - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.udmovesp)
            View.Update
            movement (1) += 1
        end for
    elsif chars (KEY_RIGHT_ARROW) then
        moving (1):= true
        BSprite.Change ("pally3-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally7-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally2-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally7-2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x + 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally1-2.bmp", paladin.pic)
        View.Update
    elsif chars (KEY_LEFT_ARROW) then
        moving (1):= true
        BSprite.Change ("pally3.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally7.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally2.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp1)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally7.bmp", paladin.pic)
        for i : 1 .. 5
            paladin.x := paladin.x - 1
            BSprite.Move (paladin.x, paladin.y, paladin.pic)
            Time.Delay (paladin.rlmovesp2)
            View.Update
            movement (1) += 1
        end for
        BSprite.Change ("pally1.bmp", paladin.pic)
        View.Update
    end if
    moving := false
    if paladin.x = sbx and paladin.y = sby then
        sbhave := 1
        BSprite.Change ("emptysprite.bmp", speedboots)
    end if
    if sbhave = 1 then
        paladin.udmovesp := 3
        paladin.rlmovesp1 := 2
        paladin.rlmovesp2 := 3
    end if
end pallymove
procedure enemymove1
    if num = 1 then
    moving (2):=true   
    for i : 1 .. 20
            enemy1.x += 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
        movement (2) += 1
            end for
    end if
    if num = 2 then
        moving (2):=true
    for i : 1 .. 20
            enemy1.x -= 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
        movement (2) += 1
            end for
    end if
    if num = 3 then
        moving (2):=true
    for i : 1 .. 20
            enemy1.y += 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
            movement (2) += 1
        end for
    end if
    if num = 4 then
        moving (2):=true
    for i : 1 .. 20
            enemy1.y -= 1
            BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
            Time.Delay (enemy1.movesp)
            View.Update
            movement (2) += 1
        end for
    end if
end enemymove1

loop
    randint (num, 1, 4)
    enemymove1
    pallymove
    if paladin.x >= maxx then
        paladin.x := 0
    elsif paladin.x <= 0 then
        paladin.x := maxx
    end if
    if paladin.y >= maxy then
        paladin.y := 0
    elsif paladin.y <= 0 then
        paladin.y := maxy
    end if
end loop
ericfourfour




PostPosted: Thu Dec 07, 2006 10:30 pm   Post subject: (No subject)

This is how you should try to solve this problem. Think of a way that does not require for loops. The way I suggest is to instead of using for loops, update the characters position every iteration of the main loop. This means you will need to keep track of every characters position. The position I'm referring to is the movement that is happening in the for loops.
Nigrev




PostPosted: Fri Dec 08, 2006 10:34 am   Post subject: (No subject)

how do I get my character to go a full 20 pixels if i do not have a for loop?
also, my character changes sprites every 10 or 5 pixels to immitate walking steps. I don't want to move the sprite every ten or five pixels, I want it updated every 1 pixel for smooth animation, that's why i used the for loops.
Nigrev




PostPosted: Fri Dec 08, 2006 2:09 pm   Post subject: (No subject)

This sucks, i can't edit my post. anyway, how is controls_disabled supposed to work? y:=y?
ericfourfour




PostPosted: Fri Dec 08, 2006 8:14 pm   Post subject: (No subject)

Instead of moving them in a for loop move them in the main loop. It requires a bit more logical thinking but is more flexible. If you look at the for loop you will see that you declare a variable that either increases or decreases. Think of the main loop as a giant for loop except you have to make actual variables that increase or decrease for every character. Do you follow me yet?

And don't worry about disabling the character's controls yet. You will understand why you need it when you get the first part working.
Nigrev




PostPosted: Sat Dec 09, 2006 9:25 am   Post subject: (No subject)

i hear ya.

code:

%importing external modules/setscreen/odd var declaration
import ("BSprite.tu") %external Bacchus Sprites module.  Thnx to Bacchus of Compsci!!!
setscreen ("graphics:800;600, nobuttonbar, offscreenonly,title:movetest")
var background, speedboots, sbhave, sbx, sby, num : int
background := Pic.FileNew ("grass.bmp")
Pic.Draw (background, 1, 1, picMerge)
%============================
%Some guy on compsci told me to use this, still testing what it does
var disable_controls : array 1 .. 3 of boolean
var moving : array 1 .. 3 of boolean
disable_controls (1) := false
disable_controls (2) := false
%================================%
%Creation of the type sprite (Sprt) and composite data of sprite
type Sprt :
    record
        pic, x, y, movesp, movement : int
        up, down, left, right : boolean
    end record
%=================================%
%Creation of paladin
var paladin : Sprt
paladin.x := 100 %intitialize x position at 100
paladin.y := 100 %intitialize y position at 100
paladin.pic := BSprite.New (paladin.x, paladin.y, "pally1.bmp") %initialize sprite picture
paladin.movesp := 1
paladin.up := false
paladin.down := false
paladin.right := false
paladin.left := false
paladin.movement := 0
%=================================%
%Creation of the extra sprites
var enemy1 : Sprt
enemy1.x := 500
enemy1.y := 300
enemy1.pic := BSprite.New (enemy1.x, enemy1.y, "summoner2.bmp")
enemy1.movesp := 1
enemy1.movement := 0
randint (num, 1, 4)
%=================================%
var chars : array char of boolean
sbx := 500
sby := 400
sbhave := 0
speedboots := BSprite.New (sbx, sby, "speedboots.bmp")
View.Update
procedure pallymove
    if paladin.up = true then
        if paladin.movement <= 10 then
            BSprite.Change ("pally6.bmp", paladin.pic)
        elsif paladin.movement > 10 then
            BSprite.Change ("pally6-2.bmp", paladin.pic)
        end if
        paladin.y += paladin.movesp
        paladin.movement += paladin.movesp
        BSprite.Move (paladin.x, paladin.y, paladin.pic)
        View.Update
    elsif paladin.down = true then
        if paladin.movement <= 10 then
            BSprite.Change ("pally5.bmp", paladin.pic)
        elsif paladin.movement > 10 then
            BSprite.Change ("pally5-2.bmp", paladin.pic)
        end if
        paladin.y -= paladin.movesp
        BSprite.Move (paladin.x, paladin.y, paladin.pic)
        View.Update
        paladin.movement += paladin.movesp
    elsif paladin.right = true then
        if paladin.movement <= 5 then
            BSprite.Change ("pally3-2.bmp", paladin.pic)
        elsif paladin.movement > 5 and paladin.movement < 11 then
            BSprite.Change ("pally7-2.bmp", paladin.pic)
        elsif paladin.movement > 10 and paladin.movement < 16 then
            BSprite.Change ("pally2-2.bmp", paladin.pic)
        elsif paladin.movement > 15 and paladin.movement < 21 then
            BSprite.Change ("pally7-2.bmp", paladin.pic)
        end if
        paladin.x += paladin.movesp
        BSprite.Move (paladin.x, paladin.y, paladin.pic)
        View.Update
        paladin.movement += paladin.movesp
    elsif paladin.left = true then
        if paladin.movement <= 5 then
            BSprite.Change ("pally3.bmp", paladin.pic)
        elsif paladin.movement > 5 and paladin.movement <= 10 then
            BSprite.Change ("pally7.bmp", paladin.pic)
        elsif paladin.movement > 10 and paladin.movement <= 15 then
            BSprite.Change ("pally2.bmp", paladin.pic)
        elsif paladin.movement > 15 and paladin.movement <= 20 then
            BSprite.Change ("pally7.bmp", paladin.pic)
        end if
        paladin.x := paladin.x - paladin.movesp
        BSprite.Move (paladin.x, paladin.y, paladin.pic)
        View.Update
        paladin.movement += paladin.movesp
        View.Update
    end if
    Input.KeyDown (chars)
    if chars (KEY_UP_ARROW) and disable_controls (1) = false then
        paladin.up := true
        disable_controls (1) := true
    elsif chars (KEY_DOWN_ARROW) and disable_controls (1) = false then
        paladin.down := true
        disable_controls (1) := true
    elsif chars (KEY_RIGHT_ARROW) and disable_controls (1) = false then
        paladin.right := true
        disable_controls (1) := true
    elsif chars (KEY_LEFT_ARROW) and disable_controls (1) = false then
        paladin.left := true
        disable_controls (1) := true
    end if
    if paladin.movement >= 20 then
        disable_controls (1) := false
        paladin.movement := 0
    end if
end pallymove
procedure enemymove1
    if num = 1 and disable_controls (2) = false then
        enemy1.x += enemy1.movesp
        BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
        View.Update
        enemy1.movement += enemy1.movesp
    elsif num = 2 and disable_controls (2) = false then
        enemy1.x -= enemy1.movesp
        BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
        View.Update
        enemy1.movement += enemy1.movesp
    elsif num = 3 and disable_controls (2) = false then
        enemy1.y += 1
        BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
        View.Update
        enemy1.movement += 1
    elsif num = 4 and disable_controls (2) = false then
        enemy1.y -= enemy1.movesp
        BSprite.Move (enemy1.x, enemy1.y, enemy1.pic)
        View.Update
        enemy1.movement += enemy1.movesp
    end if
    if enemy1.movement >= 20 then
        disable_controls (2) := true
        enemy1.movement := 0
    end if
    if enemy1.movement = 0 then
        randint (num, 1, 4)
    end if
end enemymove1

loop
    disable_controls (1) := false
    disable_controls (2) := false
    enemymove1
    pallymove
    if paladin.x >= maxx then
        paladin.x := 0
    elsif paladin.x <= 0 then
        paladin.x := maxx
    end if
    if paladin.y >= maxy then
        paladin.y := 0
    elsif paladin.y <= 0 then
        paladin.y := maxy
    end if
    if paladin.x > (sbx - 20) and paladin.x < (sbx + 20) and paladin.y > (sby - 20) and paladin.y < (sby + 20) then
        sbhave := 1
        BSprite.Change ("emptysprite.bmp", speedboots)
    end if
    if sbhave = 1 then
        paladin.movesp := 2
    end if
end loop


but now if the controllable character is at a standstill, the other sprites move faster than wanted. do i have to put an extra piece of coding in on the players part to give an extra delay when not moving?
Sponsor
Sponsor
Sponsor
sponsor
ericfourfour




PostPosted: Sat Dec 09, 2006 7:07 pm   Post subject: (No subject)

Just one suggestion before you continue. Make it so you only have 1 View.Update, 1 cls (or Draw.FillBox over the screen), and one delay in the program. Make sure those go in the main loop.

The order I always use is:
code:
update variables
draw everything
View.Update
Time.Delay (1000 / fps)
cls


About the characters going faster. With the above implemented into your code all your characters will need is a speed variable which is how many pixels they move per frame.

If you get that implemented then you may want to make the characters speed a real number. That way they can move at a more precise speed. You would need to use the round () function though (it rounds a real number to an integer number).
Nigrev




PostPosted: Sun Dec 10, 2006 5:55 pm   Post subject: (No subject)

i don't use cls, hehe
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 10 Posts ]
Jump to:   


Style:  
Search: