Pacman's mouth
Author |
Message |
Insectoid
|
Posted: Mon May 05, 2008 6:48 pm Post subject: Pacman's mouth |
|
|
I used the search engine and got nothing.
I am making a pacman program which I am going to use for my final project (My paint program is for comp. engineering)
Today I finished making packman move around and not bump into things, as well as pointing him in a different direction.
I would like to know how to make pacman's mouth open and close. How can I make his mouth move without interupting the rest of my program? I could use and fork a process, but that is not the smartest idea...
p.s.- All my images were drawn in turing! (except the map)
p.p.s.- The map sucks because I did it quickly to get the main algorithm to work.
Description: |
|
Download |
Filename: |
PacMan.zip |
Filesize: |
28.63 KB |
Downloaded: |
245 Time(s) |
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
cavetroll
|
Posted: Mon May 05, 2008 7:41 pm Post subject: Re: Pacman's mouth |
|
|
Here is an example of a very ineloquent way of solving this problem. I'm not as familiar with the Sprite module as I could be.
Turing: |
var x : int := 339 % pacman's X coordinate
var y : int := 396 % pacman's Y coordinate
var chars : array char of boolean %Input.KeyDown variable
var pacman : int %sprite name
%MY ADDITION---------------------------------------
const PAC_TIME := 25
var mouth_open : boolean := false
var mouth_count : int := 0
%-------------------------------------------------------
var map : int %the map. looks crappy.
var pacmanpic1 : int % pacman mouth open right
var pacmanpic2 : int % pacman mouth open up
var pacmanpic3 : int % pacman mouth open left
var pacmanpic4 : int %pacman mouth open down
var mouthclosed : int % pacman mouth closed
setscreen ("offscreenonly")
setscreen ("graphics: 679, 729")
map := Pic.FileNew ("Map1.bmp")
pacmanpic1 := Pic.FileNew ("pacman1.bmp") %various sprite things
Pic.SetTransparentColor (pacmanpic1, white)
pacmanpic2 := Pic.FileNew ("pacman2.bmp")
Pic.SetTransparentColor (pacmanpic2, white)
pacmanpic3 := Pic.FileNew ("pacman3.bmp")
Pic.SetTransparentColor (pacmanpic3, white)
pacmanpic4 := Pic.FileNew ("pacman4.bmp")
Pic.SetTransparentColor (pacmanpic4, white)
pacman := Sprite.New (pacmanpic1 )
mouthclosed := Pic.FileNew ("pacmanmouthclosed.bmp")
Sprite.SetPosition (pacman, x, y, true) %more various sprite things
Sprite.SetHeight (pacman, 2)
Sprite.Show (pacman )
Pic.Draw (map, 1, 1, picCopy) %Draw the map
%move pacman
loop
Input.KeyDown (chars )
if chars (KEY_UP_ARROW) and whatdotcolor (x, y + 10) = white then
mouth_count + = 1
y := y + 1
if mouth_open = true then
Sprite.Animate (pacman, pacmanpic2, x, y, true)
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := false
end if
else
Sprite.Animate (pacman, mouthclosed, x, y, true)
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := true
end if
end if
end if
if chars (KEY_DOWN_ARROW) and whatdotcolor (x, y - 10) = white then
y := y - 1
mouth_count + = 1
if mouth_open = true then
Sprite.Animate (pacman, pacmanpic4, x, y, true)
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := false
end if
else
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := true
end if
Sprite.Animate (pacman, mouthclosed, x, y, true)
end if
end if
if chars (KEY_RIGHT_ARROW) and whatdotcolor (x + 10, y ) = white then
x := x + 1
mouth_count + = 1
if mouth_open = true then
Sprite.Animate (pacman, pacmanpic1, x, y, true)
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := false
end if
else
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := true
end if
Sprite.Animate (pacman, mouthclosed, x, y, true)
end if
end if
if chars (KEY_LEFT_ARROW) and whatdotcolor (x - 10, y ) = white then
mouth_count + = 1
x := x - 1
if mouth_open = true then
Sprite.Animate (pacman, pacmanpic3, x, y, true)
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := false
end if
else
if mouth_count > PAC_TIME then
mouth_count := 0
mouth_open := true
end if
Sprite.Animate (pacman, mouthclosed, x, y, true)
end if
end if
View.Update %get rid of flash
delay (6)
end loop
|
Anything using the variables surrounded by the comments "MY ADDITION---------------------------------------" is my addition
Basically it counts the number of frames that each picture has moved for and flips it accordingly. You can modify the speed of animation by changing the constant PAC_TIME.
Please note: This is not an ideal solution nor a recommended one. It is simply an example of how it can be done, not how it should be done. As for how it should be done, I'm not really sure.
|
|
|
|
|
|
Insectoid
|
Posted: Mon May 05, 2008 8:01 pm Post subject: RE:Pacman\'s mouth |
|
|
I guess variable += 1 is the same as variable := variable + 1 ?
I get how you are doing it, and will find this very useful un my later programs.
Thanks.
|
|
|
|
|
|
cavetroll
|
Posted: Mon May 05, 2008 8:15 pm Post subject: Re: RE:Pacman\'s mouth |
|
|
insectoid @ Mon May 05, 2008 8:01 pm wrote: I guess variable += 1 is the same as variable := variable + 1 ?
Ya they are the same. You can also use the following (If not more):
code: |
var a : real := 2
put a, " : NO CHANGE"
a*=2 %Times 2
put a, " : *= 2"
a += 2 %Plus 2
put a, " : += 2"
a -= 2 %Minus 2
put a, " : -= 2"
a /= 2 %Divided by 2
put a, " : /= 2"
a**= 2 %Exponent 2
put a, " : **= 2"
|
|
|
|
|
|
|
isaiahk9
|
|
|
|
|
|
|