collision detection
Posted: Wed Nov 02, 2005 5:45 pm
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.
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.