
-----------------------------------
sakibur001
Thu Dec 15, 2016 6:47 pm

How to make an object not go outside of the size of your screen?
-----------------------------------
What is it you are trying to achieve?
I want my box in the program to not go outside of the screen.


What is the problem you are having?
It moves when you click arrow keys but it goes outside of the screen if you keep moving. I want the program to not make the box go outside of the screen.

Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
%Declaration section
var startpointx, startpointy : int := 0
var endpointx, endpointy : int := 50
var key : string (1)

%set screen mode and size
setscreen ("graphics:400;400")
setscreen ("noecho")
setscreen ("nocursor")
setscreen ("offscreenonly")

procedure display
    drawfillbox (startpointx, startpointy, endpointx, endpointy, white)
    drawfillbox (startpointx + 1, startpointy + 1, endpointx - 1, endpointy - 1, blue)
    getch (key)
    if key = chr (200) then
        startpointy := startpointy + 1
        endpointy := endpointy + 1
    elsif key = chr (208) then
        startpointy := startpointy - 1
        endpointy := endpointy - 1
    elsif key = chr (205) then
        startpointx := startpointx + 1
        endpointx := endpointx + 1
    else
        if key = chr (203) then
            startpointx := startpointx - 1
            endpointx := endpointx - 1
        end if
    end if
    View.Update
end display

%Main Program
loop
    display
    exit when key = chr (27)
end loop








Please specify what version of Turing you are using


-----------------------------------
Gaming Lyfe
Fri Dec 16, 2016 6:57 pm

RE:How to make an object not go outside of the size of your screen?
-----------------------------------
Here is a solution. Think about the code:

if  startpointx> maxx then 
     startpointx:= maxx 
elsif startpointx < 0 then 
    startpointx := 0 
end if 

if startpointy> maxy then 
    startpointy := maxy 
elsif startpointy < 0 then 
    startpointy := 0 
end if 

This code will allow you to find if the coordinate of the corner is greater than the maximum x or y value of the window, and if it is, it sets the coordinate at the max x or y value, not allowing it to go over. If you can do this for all the four corners, you can disallow the square to exit the window.

-----------------------------------
sakibur001
Fri Dec 16, 2016 7:43 pm

Re: RE:How to make an object not go outside of the size of your screen?
-----------------------------------
Here is a solution. Think about the code:

if  startpointx> maxx then 
     startpointx:= maxx 
elsif startpointx < 0 then 
    startpointx := 0 
end if 

if startpointy> maxy then 
    startpointy := maxy 
elsif startpointy < 0 then 
    startpointy := 0 
end if 

This code will allow you to find if the coordinate of the corner is greater than the maximum x or y value of the window, and if it is, it sets the coordinate at the max x or y value, not allowing it to go over. If you can do this for all the four corners, you can disallow the square to exit the window.

so like this
  if startpointy > maxy then
        startpointy := maxy
    elsif startpointy < 0 then
        startpointy := 0
    end if

    if endpointx > maxx then
        endpointx := maxx
    elsif endpointx < 0 then
        endpointx := 0
    end if

    if endpointy > maxy then
        endpointy := maxx
    elsif endpointy < 0 then
        endpointy := 0
    end if

i tried that it doesnt work, what it does is it erases the part of the box that goes outside of the screen, maybe i put it in the wrong place?

-----------------------------------
TWizard
Sat Jan 07, 2017 12:09 pm

Re: How to make an object not go outside of the size of your screen?
-----------------------------------
You'll need to check each side one at a time, you'll need all the coordinates 
I'll give you a good basis on which you should be able to get past this issue.

[code]
/*
you need to do is check if the player + radius(or minus depending where the player is), has gone outside your screen.

In this case, i'v created a procedure for this. you set the minimum and maximum values of your screen.

checking

top
if playerX + radius > max_boarder_MAXx then
set it to max_boarder minus radius %we add the radius and check if the player is greater because moving towards the top is moving positive in number
end it

bottom
if playerX - radius < max_boarder_MINx then
set it to max_boarder plus radius %we subtract the radius and check if the player is lesser because moving towards the bottom is moving negative in number
end it

left
if playerY - radius < max_boarder_MINy then
set it to max_boarder plus radius %we subtract the radius and check if the player is lesser because moving towards the left is moving negative in number
end it

right
if playerY + radius > max_boarder_MAXy then
set it to max_boarder minus radius %we add the radius and check if the player is greater because moving towards the right is moving positive in number
end it
*/


%firstly you'll need to have your players x and y
var player_x, player_y : int %required

%next you'll need your player radius
var player_rsum : int %required and must be the radius of the players circle

procedure boudary(boudary_min_x, boudary_min_y, boudary_max_x, boudary_max_y : int)
    if player_x > boudary_max_x - player_rsum then
	player_x := boudary_max_x - player_rsum;
    end if
    if player_x < boudary_min_x + player_rsum then
	player_x := boudary_min_x + player_rsum;
    end if
    if player_y > boudary_max_y - player_rsum then
	player_y := boudary_max_y - player_rsum;
    end if
    if player_y < boudary_min_y + player_rsum then
	player_y := boudary_min_y + player_rsum;
    end if
end boudary
[/code]

I hope this helps You may want to figure out how to change this into a function and return a value if a player as hit a particular wall, and re-position him back to where he should be. This is beneficial because you then dont need to use global variables. You should also ways look into using functions instead of procedures.
