
-----------------------------------
vertdragon23
Tue Oct 22, 2013 1:22 pm

Assistance Request Vertdragon
-----------------------------------
What is it you are trying to achieve?
Making a pacman game but need some help with a few errors.


What is the problem you are having?



Describe what you have tried to solve this problem
Asked many people.


Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)


import GUI
View.Set ("offscreenonly")
var chars : array char of boolean
var x, y : int
var stateofpac : boolean
var font : int





process
        playmusic
    Music.PlayFile ("intro.mp3")
end playmusic
fork playmusic
x := 120
y := 120
stateofpac := true

procedure game1
    loop
        Input.KeyDown (chars)
        if chars (KEY_RIGHT_ARROW) then
            if stateofpac = true then
                drawfilloval (x, y, 20, 20, yellow)
                x := x + 5
                stateofpac := false
            else
                drawfilloval (x, y, 20, 20, yellow)
                drawfillarc (x, y, 20, 20, 310, 40, black)
                x := x + 5
                stateofpac := true
            end if

        elsif chars (KEY_LEFT_ARROW) then
            if stateofpac = true then
                drawfilloval (x, y, 20, 20, yellow)
                x := x - 5
                stateofpac := false
            else
                drawfilloval (x, y, 20, 20, yellow)
                drawfillarc (x, y, 20, 20, 130, 210, black)
                x := x - 5
                stateofpac := true
            end if

        elsif chars (KEY_DOWN_ARROW) then
            if stateofpac = true then
                drawfilloval (x, y, 20, 20, yellow)
                y := y - 5
                stateofpac := false
            else
                drawfilloval (x, y, 20, 20, yellow)
                drawfillarc (x, y, 20, 20, 230, 310, black)
                y := y - 5
                stateofpac := true
            end if

        elsif chars (KEY_UP_ARROW) then
            if stateofpac = true then
                drawfilloval (x, y, 20, 20, yellow)
                y := y + 5
                stateofpac := false
            else
                drawfilloval (x, y, 20, 20, yellow)
                drawfillarc (x, y, 20, 20, 70, 120, black)
                y := y + 5
                stateofpac := true
            end if
        else
            drawfilloval (x, y, 20, 20, yellow)

        end if

        View.UpdateArea (x - 45, y - 45, x + 45, y + 45)
        drawfilloval (x, y, 45, 45, black)
        delay (50)
    end loop
end game1


procedure leave
    quit
end leave


colorback (black)
cls
font := Font.New ("serif:25")
Draw.Text ("Welcome to Pacman", 180, 250, font, red)
delay (1000)


var game : int := GUI.CreateButton (200, 20, 10, "Start game", game1)
delay (2000)
cls
loop
    exit when GUI.ProcessEvent
end loop

var leave1 : int := GUI.CreateButton (100, 20, 0, "Quit", leave)



Please specify what version of Turing you are using
4.1.1 (latest)

-----------------------------------
Dreadnought
Tue Oct 22, 2013 6:20 pm

Re: Assistance Request Vertdragon
-----------------------------------
When using offscreenonly, you need to call View.Update when you want to update the screen.

How exactly is it "acting weird"?

-----------------------------------
vertdragon23
Wed Oct 23, 2013 5:46 pm

RE:Assistance Request Vertdragon
-----------------------------------
I am going to re code the base and structure of this program as this one is very buggy, the new one is not gonna have a menu because that makes turing glitchy.

-----------------------------------
vertdragon23
Wed Oct 23, 2013 9:11 pm

RE:Assistance Request Vertdragon
-----------------------------------
This is the new code it works, If anyone knows how to make the pacman continue in the direction last clicked, that would be very helpful.





%slightly glitchy background 
colourback (black) 
cls 
process
        playmusic
    Music.PlayFile ("intro.mp3")
end playmusic
fork playmusic
var font : int
        font := Font.New ("serif:25")
var font2 : int
        font2 := Font.New ("serif:20")
Draw.Text ("Welcome To Pacman", 180, 250, font, red)

delay (1000)
cls

/*
locate (1,1)
   var timeRunning : int
        timeRunning := Time.Elapsed
        put "This program has run ", timeRunning, " milliseconds" */
% y of Pacman's centre 
var y : int := 200
% x of Pacman's centre 
var x : int :=200
% direction Pacman moves 
var dx, dy : int 
%Read More % size of mouth 
var mouth : int := 0

var dir : int := 0 

var key : string (1) 


%Where the game starts 
loop 

    %border 
    drawfillbox (0, 0, 20, 420, green) 
    drawfillbox (20, 420, 620, 380, green) 
    drawfillbox (640, 400, 620, 20, green) 
    drawfillbox (640, 0, 20, 20, green) 
    %Draws pacman 
    drawfillarc (x, y, 18, 18, mouth + dir, -mouth + dir, yellow) 
    delay (10) 
    %Draws pacmans mouth 
    drawfillarc (x, y, 18, 18, mouth + dir, -mouth + dir, black) 
    % If user presses a key 
    if hasch then 
        % Reads the key pressed 
        getch (key) 
        if ord (key) = 205 then 
            if x < maxx-41 then 
                % Pacman will go right, also what makes him not go through 
                dir := 0 
                dx := 8 
                dy := 0 
            else 
                dx := 0 
            end if 
        end if 
        if ord (key) = 200 then 
            if y < 355 then 
                % Pacman will go up, also what makes him not go through
                dir := 90 
                dx := 0 
                dy := 8 
            else 
                dy := 0 
            end if 
        end if 
        if ord (key) = 203 then 
            if x > 41 then 
                % Pacman will go left, also what makes him not go through
                dir := 180 
                dx := -8 
                dy := 0 
            else 
                dx := 0 
            end if 
        end if 
        if ord (key) = 208 then 
            if y > 41 then 
                % Pacman will go down, also what makes him not go through
                dir := 270 
                dx := 0 
                dy := -8 
            else 
                dy := 0 
            end if 
        end if 
        
        % move Pacman's centre depending on 
        x := x + dx 
        % the value of dx and dy 
        y := y + dy 
    end if 
    % change size of the mouth 
    mouth := mouth mod 45 + 1 
    % Draws the walls in the middle
    Draw.FillBox (300, 1, 312, 150, green) 
    Draw.FillBox (300, 255, 312, 490, green) 
end loop

-----------------------------------
Raknarg
Wed Oct 23, 2013 9:28 pm

RE:Assistance Request Vertdragon
-----------------------------------
I don't know if you've tried using this already, but all you need to do is store the direction and just have him constantly going that direction. Rather than have the keys decide his movement, they simply decide the direction

-----------------------------------
vertdragon23
Wed Oct 23, 2013 9:35 pm

RE:Assistance Request Vertdragon
-----------------------------------
Thanks raknarg that makes a little sense but can you please elaborate? Like are you saying that instead of using the ascii codes to move the pacman, I should use (e.g key.down) or getch?

-----------------------------------
Raknarg
Wed Oct 23, 2013 10:34 pm

RE:Assistance Request Vertdragon
-----------------------------------
There's different things you can do. One of my favorites:


setscreen ("offscreenonly")

var x, y : int := 50
var dx, dy : int := 0
var input : string (1)

loop
    if hasch then
        getch (input)

        if input = "d" then
            dx := 1
            dy := 0
        elsif input = "a" then
            dx := -1
            dy := 0
        end if

        if input = "w" then
            dx := 0
            dy := 1
        elsif input = "s" then
            dx := 0
            dy := -1
        end if
    end if

    x += dx
    y += dy

    if x > maxx then
        x := maxx
    elsif x < 0 then
        x := 0
    end if
    if y > maxy then
        y := maxy
    elsif y < 0 then
        y := 0
    end if

    Draw.FillOval (x, y, 10, 10, 12)

    View.Update
    delay (2)
    cls
end loop


hasch is only true when you've entered a key. SO once you enter a key, we look at that key. If it is w a s or d, we set the dx and dy values accordingly. Then, the circles position is changed by dx and dy, and as you can see remembers what direction to go and keep going regardless of input.

-----------------------------------
vertdragon23
Wed Oct 23, 2013 10:43 pm

RE:Assistance Request Vertdragon
-----------------------------------
This assignment is due tomorrow and I've worked all day. If someone could help with pacmans continuous movement in last arrow key clicked, and help me fix the pills, I need it to be like a pill appears on right side, then left, then right, randomly. Help would be greatly appreciated.



%slightly glitchy background 
colourback (black) 
cls 
process
        playmusic
    Music.PlayFile ("intro.mp3")
end playmusic
fork playmusic
var font : int
        font := Font.New ("serif:25")
var font2 : int
        font2 := Font.New ("serif:13")
Draw.Text ("Welcome To Pacman", 180, 250, font, red)
Draw.Text ("To win the game, collect 10 pills without dying of boredom", 130, 200, font2, red)

delay (1000)
cls

/*
locate (1,1)
   var timeRunning : int
        timeRunning := Time.Elapsed
        put "This program has run ", timeRunning, " milliseconds" */
% y of Pacman's centre 
var y : int := 200
% x of Pacman's centre 
var x : int :=200
% direction Pacman moves 
var dx, dy : int 
 % size of mouth 
var mouth : int := 0

var dir : int := 0 

var key : string (1) 
var pill_x : int := 600 
var pill_y : int := 350 
var pill_x1 : int := 250
var pill_y1 : int := 350 
var pill_x2 : int := 500
var pill_y2 : int := 100


%Where the game starts 
loop 

    %border 
    drawfillbox (0, 0, 20, 420, green) 
    drawfillbox (20, 420, 620, 380, green) 
    drawfillbox (640, 400, 620, 20, green) 
    drawfillbox (640, 0, 20, 20, green) 
    %Draws pacman 
    drawfillarc (x, y, 18, 18, mouth + dir, -mouth + dir, yellow) 
    delay (10) 
    %Draws pacmans mouth 
    drawfillarc (x, y, 18, 18, mouth + dir, -mouth + dir, black) 
    % If user presses a key 
    if hasch then 
        % Reads the key pressed 
        getch (key) 
        if ord (key) = 205 then 
            if x < maxx-41 then 
                % Pacman will go right, also what makes him not go through 
                dir := 0 
                dx := 8 
                dy := 0 
            else 
                dx := 0 
            end if 
        end if 
        if ord (key) = 200 then 
            if y < 355 then 
                % Pacman will go up, also what makes him not go through
                dir := 90 
                dx := 0 
                dy := 8 
            else 
                dy := 0 
            end if 
        end if 
        if ord (key) = 203 then 
            if x > 41 then 
                % Pacman will go left, also what makes him not go through
                dir := 180 
                dx := -8 
                dy := 0 
            else 
                dx := 0 
            end if 
        end if 
        if ord (key) = 208 then 
            if y > 41 then 
                % Pacman will go down, also what makes him not go through
                dir := 270 
                dx := 0 
                dy := -8 
            else 
                dy := 0 
            end if 
        end if 
        
        % move Pacman's centre depending on 
        x := x + dx 
        % the value of dx and dy 
        y := y + dy 
    end if 
    % change size of the mouth 
    mouth := mouth mod 45 + 1 
    % Middle walls
    Draw.FillBox (300, 1, 312, 150, green) 
    Draw.FillBox (300, 255, 312, 490, green) 
 
     % Draws the pill 
     
    Draw.FillOval (pill_x, pill_y, 4, 4, blue) 
    if Math.Distance (x, y, pill_x, pill_y) < 20 then 
        pill_x := 0 
        pill_y := 0 
   
   if pill_x=0 or pill_y=0 then 
    Draw.FillOval (pill_x1, pill_y1, 4, 4, blue) 
    if Math.Distance (x, y, pill_x1 ,pill_y1) < 20 then 
        pill_x1 := 0 
        pill_y1 := 0 
        delay (500)
 if pill_x1=0 or pill_y1=0 then      
         Draw.FillOval (pill_x2, pill_y2, 20, 20, blue) 
    if Math.Distance (x, y, pill_x2 ,pill_y2) < 20 then 
        pill_x2 := 0 
        pill_y2 := 0 
   
   end if

end if
    end if
     end if


    mouth := mouth mod 45 + 1       % change size of the mouth
    drawfillarc (x, y, 20, 20, mouth + dir, -mouth + dir, yellow)
    delay (5)
    drawfillarc (x, y, 20, 20, mouth + dir, -mouth + dir, black)
    x := x + dx                     % move Pacman's centre depending on
    y := y + dy                     
end if
end loop
