Hello,
I am putting together a simple game using ascii characters and while I have movement, and limiting the area of movement down pat, I became stumped when I thought about putting in buildings and how I would go about coming to a halt when I hit them, rather than going through them. Here is a snippet of code in its simplest form. I am putting a simple building in as the first line of code so it is easier to spot and have numbered the movement lines for simplicity sake:
'building
LOCATE 13, 32: COLOR 4, 0: PRINT STRING$(5, 219)
'movement
100 PX = 7: PY = 22
LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64)
101 K$ = INKEY$
102 K$ = RIGHT$(INKEY$, 1): IF K$ = "" THEN GOTO 102
IF K$ = "2" OR K$ = "P" THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250); : PX = PX + 2: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64)
IF K$ = "8" OR K$ = "H" THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250); : PX = PX - 2: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64)
IF K$ = "4" OR K$ = "K" THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250); : PY = PY - 2: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64)
IF K$ = "6" OR K$ = "M" THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250); : PY = PY + 2: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64)
IF PX > 39 THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250): PX = 39: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64): GOTO 101
IF PX < 7 THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250): PX = 7: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64): GOTO 101
IF PY > 77 THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250): PY = 77: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64): GOTO 101
IF PY < 22 THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250): PY = 22: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64): GOTO 101
IF K$ = CHR$(27) THEN CLS : END
GOSUB 101
What couuld I add to this in order to stop the character from walking through the building? Thank you in advance for any assistance with this.
collision detection
Code: Select all
psuedo: IF playerX < builingX then movechararcter
Last edited by Guest on Wed Nov 02, 2005 8:46 pm, edited 1 time in total.
-
- Veteran
- Posts: 1055
- Joined: Sun Jan 02, 2005 2:11 pm
- Location: At my computer
- Contact:
Basicaly, you set it so when character's X, Y equals the Building's wall X, Y the program stops motion in that direction. Normaly to stop, you reverse the number of steps the character took b4 hitting the wall.
/\ In it's simplist form....
Code: Select all
PlayX = PlayX + 1
IF PlayX = BuildX THEN PlayX = PlayX - 1
-Kevin (aka:Rattra)
(x.t.r.GRAPHICS)
(x.t.r.GRAPHICS)
- {Nathan}
- Veteran
- Posts: 1169
- Joined: Thu Aug 19, 2004 6:08 pm
- Location: The wetlands of central Ohio, USA
- Contact:
Ratt, that works, but I find this to be more efficiant (smaller and faster)
Really, I find that just small things (like defining consts Left = 1, ect) is better so instead of that, I would use this. I know its bigger, but it looks WAY better. QB just needs inline subs...
Code: Select all
IF PlayerX + 1 < TheThingUdontWannaHitX THEN PlayerX = PlayerX + 1
Code: Select all
CONST Left = 1, Right = 2, Up = 3, Down = 4
...
IF Player.X > CollisionThing.X THEN MovePlayer(Left)
SUB MovePlayer(Dir as integer)
'its obvious what goes here! duh...[code]
- matt2jones
- Veteran
- Posts: 80
- Joined: Sat Feb 19, 2005 8:29 am
- Location: elsewhere
- Contact:
You could also use the SCREEN function to check what character is infront of the @, and if it's a wall, don't allow them the @ to move.
It's not good programming practice to do collisions straight from the screen like that, but if you have allot of walls it's easier to manage.
matt
It's not good programming practice to do collisions straight from the screen like that, but if you have allot of walls it's easier to manage.
Code: Select all
IF K$ = "2" OR K$ = "P" and SCREEN(PX+2,PY) <> [i]*WALL*[/i] THEN LOCATE PX, PY, 0: COLOR 8, 0: PRINT CHR$(250); : PX = PX + 2: LOCATE PX, PY, 0: COLOR 7, 0: PRINT CHR$(64)
Do not mistake Apathy for feeling Content.
http://www.disjointed.cjb.net - Short Storys
http://matt2jones.deviantart.com - Random Art
http://www.freewebs.com/matt2jones - WebComic
http://www.disjointed.cjb.net - Short Storys
http://matt2jones.deviantart.com - Random Art
http://www.freewebs.com/matt2jones - WebComic