Hello Everyone,
I'm working on my Sorry game and ran into a problem that I can't figure out. I have put it a side and have been working on other parts of the game. But, even when the rest of the game is complete, I will still have this issue. So, I decided to see if some can figure why the code doesn't work correctly.
I have striped down the code to make it easier to follow. If anyone is familiar with the Sorry board, there a 4 large circles on the board know as the START area where their pieces are placed at the start of the game. The game is setup for 4 players and you will see 4 playing pieces in each START area. Player 1 is blue, player 2 is green, player 3 is red and player 4 is gold.
To start a piece onto the board, each player left clicks the mouse pointer inside their START area and a piece moves from the START area and moves to the square next to their START area.
The problem I'm having is when selecting the Player variable to 1 or 3, the piece moves just fine. But, when selecting 2 or 4, they won't work. I'll present the code and step you through the main areas.
_TITLE "Sorry! Board Game by Donald L. Foster Jr. 2020"
SCREEN _NEWIMAGE(1035, 735, 256)
_PALETTECOLOR 1, _RGB32(20, 255, 255) ' Board Background
_PALETTECOLOR 2, _RGB32(255, 80, 80) ' Lt Red
_PALETTECOLOR 3, _RGB32(255, 189, 51) ' Lt Yellow
_PALETTECOLOR 4, _RGB32(6, 180, 0) ' Lt Green
_PALETTECOLOR 5, _RGB32(0, 144, 183) ' Lt Blue
_PALETTECOLOR 6, _RGB32(205, 60, 60) ' Dk Red
_PALETTECOLOR 7, _RGB32(215, 149, 11) ' DK Yellow
_PALETTECOLOR 8, _RGB32(0, 150, 0) ' Dk Green
_PALETTECOLOR 9, _RGB32(0, 114, 153) ' Dk Blue
_PALETTECOLOR 10, _RGB32(10, 10, 10) ' Lt Black
_PALETTECOLOR 11, _RGB32(5, 5, 5)
_PALETTECOLOR 12, _RGB32(0, 84, 123) ' Blue Piece
_PALETTECOLOR 13, _RGB32(0, 120, 0) ' Green Piece
_PALETTECOLOR 14, _RGB32(175, 30, 30) ' Red Piece
_PALETTECOLOR 16, _RGB32(185, 129, 1) ' Yellow Piece
_PALETTECOLOR 17, _RGB32(2, 2, 2)
_PALETTECOLOR 18, _RGB32(133, 105, 139) ' Background
_PALETTECOLOR 19, _RGB32(111, 111, 111) ' Highlight Piece
RANDOMIZE TIMER
DIM BoardX(60), BoardY(60), BoardPlayer(60), Back(60), BoardPiece(60), BoardSpace(80), BoardPlay(60), Forward(80), Backward(80)
DIM CardEach(12), CardSorted(12), CardDeck(45), CardLines(12), Card$(12), CardText$(12, 5)
DIM P11(1373), P12(1373), P13(1373), P14(1373), P21(1373), P22(1373), P23(1373), P24(1373), P31(1373), P32(1373), P33(1373), P34(1373), P41(1373), P42(1373), P43(1373), P44(1373), Temp(1373)
DIM Box(1373)
FOR Z = 1 TO 60: BoardPlayer(Z) = 0: NEXT
FOR Z = 1 TO 4: FOR Y = 1 TO 4: AtStart(Z, Y) = 1: NEXT: NEXT
Start(1) = 4: Start(2) = 4: Start(3) = 0: Start(4) = 0: Home(1) = 0: Home(2) = 0: Home(3) = 0: Home(4) = 0
StartAreaX(1) = 616: StartAreaY(1) = 216: StartAreaX(2) = 117: StartAreaY(2) = 517: StartAreaX(3) = 216: StartAreaY(3) = 117: StartAreaX(4) = 517: StartAreaY(4) = 616
HomeAreaX(1) = 415: HomeAreaY(1) = 130: HomeAreaX(2) = 320: HomeAreaY(2) = 603: HomeAreaX(3) = 130: HomeAreaY(3) = 320: HomeAreaX(4) = 603: HomeAreaY(4) = 415
BoardStart(1) = 20: BoardStart(2) = 50: BoardStart(3) = 5: BoardStart(4) = 35
BoardHome(1) = 18: BoardHome(2) = 48: BoardHome(3) = 3: BoardHome(4) = 33
CardEach(0) = 4: CardEach(1) = 4: CardEach(2) = 4: CardEach(3) = 4: CardEach(4) = 4: CardEach(5) = 5: CardEach(6) = 4: CardEach(7) = 4: CardEach(8) = 4: CardEach(9) = 4: CardEach(10) = 4
CardLines(0) = 1: CardLines(1) = 3: CardLines(2) = 1: CardLines(3) = 1: CardLines(4) = 1: CardLines(5) = 3: CardLines(6) = 3: CardLines(7) = 3: CardLines(8) = 3: CardLines(9) = 1: CardLines(10) = 5
Card$(0) = "3": Card$(1) = "10": Card$(2) = "5": Card$(3) = "4": Card$(4) = "12": Card$(5) = "1": Card$(6) = "11": Card$(7) = "7": Card$(8) = "2": Card$(9) = "8": Card$(10) = "SORRY!"
CardText$(0, 1) = " Move forward 3. "
CardText$(1, 1) = " Move forward 10 or ": CardText$(1, 2) = " ": CardText$(1, 3) = " move backward 1. "
CardText$(2, 1) = " Move forward 5. "
CardText$(3, 1) = " Move backward 4. "
CardText$(4, 1) = " Move forward 12. "
CardText$(5, 1) = " Move from Start ": CardText$(5, 2) = " ": CardText$(5, 3) = " or move forward 1. "
CardText$(6, 1) = " Move forward 11 ": CardText$(6, 2) = " or change places ": CardText$(6, 3) = " with an opponent. "
CardText$(7, 1) = " Move forward 7 ": CardText$(7, 2) = " or split between ": CardText$(7, 3) = " two pawns. "
CardText$(8, 1) = " Move from Start ": CardText$(8, 2) = " or move forward 2. ": CardText$(8, 3) = " DRAW AGAIN. "
CardText$(9, 1) = " Move forward 8. "
CardText$(10, 1) = "Move from Start and": CardText$(10, 2) = " switch places ": CardText$(10, 3) = " with an opponent, ": CardText$(10, 4) = " who you bump ": CardText$(10, 5) = " back to Start. "
' Get Start Pawn X, Y Positions
FOR Z = 1 TO 4
X1 = StartAreaX(Z): X2 = StartAreaY(Z)
StartX(Z, 1) = X1 - 19: StartY(Z, 1) = X2 - 19
StartX(Z, 2) = X1 + 19: StartY(Z, 2) = X2 - 19
StartX(Z, 3) = X1 - 19: StartY(Z, 3) = X2 + 19
StartX(Z, 4) = X1 + 19: StartY(Z, 4) = X2 + 19
NEXT
' Get Home Pawn X, Y Positions
FOR Z = 1 TO 4
X1 = HomeAreaX(Z): X2 = HomeAreaY(Z)
HomeX(Z, 1) = X1 - 19: HomeY(Z, 1) = X2 - 19
HomeX(Z, 2) = X1 + 19: HomeY(Z, 2) = X2 - 19
HomeX(Z, 3) = X1 - 19: HomeY(Z, 3) = X2 + 19
HomeX(Z, 4) = X1 + 19: HomeY(Z, 4) = X2 + 19
NEXT
CLS , 18
' Draw Board
LINE (0, 0)-(735, 735), 1, BF
X1 = 44: X2 = 689
FOR Z = 1 TO 15
LINE (X1 - 22, 22)-(X1 + 22, 66), 0, BF: LINE (X1 - 20, 24)-(X1 + 20, 64), 15, BF
LINE (667, X1 - 22)-(711, X1 + 22), 0, BF: LINE (669, X1 - 20)-(709, X1 + 20), 15, BF
LINE (X2 - 22, 667)-(X2 + 22, 711), 0, BF: LINE (X2 - 20, 669)-(X2 + 20, 709), 15, BF
LINE (22, X2 - 22)-(66, X2 + 22), 0, BF: LINE (24, X2 - 20)-(64, X2 + 20), 15, BF
BoardX(Z) = X1: BoardY(Z) = 44
BoardX(15 + Z) = 689: BoardY(15 + Z) = X1
BoardX(30 + Z) = X2: BoardY(30 + Z) = 689
BoardX(45 + Z) = 44: BoardY(45 + Z) = X2
X1 = X1 + 43: X2 = X2 - 43
NEXT
' Draw Border
PSET (5, 5), 0: DRAW "D12R12U12L12BF3P3,0BH3BR17C0R690D12L690U12BF3P2,0BH3BR707C0D12L12U12R12BG3P4,0BE3BD17C0D690L12U690R12BG3P5,0"
DRAW "BE3BD707C0L12U12R12D12BH3P2,0BF3BL17C0L690U12R690D12BH3P3,0BF3BL707C0U12R12D12L12BE3P5,0BG3BU17C0U690R12D690L12BE3P4,0"
' Draw Red Slides
LINE (BoardX(2) - 10, BoardY(2) - 10)-(BoardX(2) + 120, BoardY(2) + 10), 2, BF: LINE (BoardX(2) - 10, BoardY(2) - 10)-(BoardX(2) + 120, BoardY(2) + 10), 0, B
CIRCLE (BoardX(5), BoardY(5)), 16, 10: PAINT (BoardX(5), BoardY(5)), 6, 10: PSET (BoardX(2) + 6, BoardY(2)), 10: DRAW "H21D43E21BL3P6,10"
PSET (BoardX(6), BoardY(6)), 0: DRAW "H9D18E9BL3P6,0"
LINE (BoardX(10) - 10, BoardY(10) - 10)-(BoardX(10) + 165, BoardY(10) + 10), 2, BF: LINE (BoardX(10) - 10, BoardY(10) - 10)-(BoardX(10) + 165, BoardY(10) + 10), 0, B
CIRCLE (BoardX(14), BoardY(14)), 16, 10: PAINT (BoardX(14), BoardY(14)), 6, 10: PSET (BoardX(10) + 6, BoardY(10)), 10: DRAW "H21D43E21BL3P6,10"
' Draw Blue Slides
LINE (BoardX(17) - 10, BoardY(17) - 10)-(BoardX(17) + 10, BoardY(17) + 120), 5, BF: LINE (BoardX(17) - 10, BoardY(17) - 10)-(BoardX(17) + 10, BoardY(17) + 120), 0, B
CIRCLE (BoardX(20), BoardY(20)), 16, 10: PAINT (BoardX(20), BoardY(20)), 9, 10: PSET (BoardX(17), BoardY(17) + 6), 10: DRAW "E21L43F21BU3P9,10"
PSET (BoardX(21), BoardY(21)), 0: DRAW "E9L18F9BU3P9,0"
LINE (BoardX(25) - 10, BoardY(25) - 10)-(BoardX(25) + 10, BoardY(25) + 165), 5, BF: LINE (BoardX(25) - 10, BoardY(25) - 10)-(BoardX(25) + 10, BoardY(25) + 165), 0, B
CIRCLE (BoardX(29), BoardY(29)), 16, 10: PAINT (BoardX(29), BoardY(29)), 9, 10: PSET (BoardX(25), BoardY(25) + 6), 10: DRAW "E21L43F21BU3P9,10"
' Draw Yellow Slides
LINE (BoardX(32) + 10, BoardY(32) - 10)-(BoardX(32) - 120, BoardY(32) + 10), 3, BF: LINE (BoardX(32) + 10, BoardY(32) - 10)-(BoardX(32) - 120, BoardY(32) + 10), 0, B
CIRCLE (BoardX(35), BoardY(35)), 16, 10: PAINT (BoardX(35), BoardY(35)), 7, 10: PSET (BoardX(32) - 6, BoardY(32)), 10: DRAW "E21D43H21BR3P7,10"
PSET (BoardX(36), BoardY(36)), 0: DRAW "E9D18H9BR3P7,0"
LINE (BoardX(40) + 10, BoardY(40) - 10)-(BoardX(40) - 165, BoardY(40) + 10), 3, BF: LINE (BoardX(40) + 10, BoardY(40) - 10)-(BoardX(40) - 165, BoardY(40) + 10), 0, B
CIRCLE (BoardX(44), BoardY(44)), 16, 10: PAINT (BoardX(44), BoardY(44)), 7, 10: PSET (BoardX(40) - 6, BoardY(40)), 10: DRAW "E21D43H21BR3P7,10"
' Draw Green Slides
LINE (BoardX(47) - 10, BoardY(47) + 10)-(BoardX(47) + 10, BoardY(47) - 120), 4, BF: LINE (BoardX(47) - 10, BoardY(47) + 10)-(BoardX(47) + 10, BoardY(47) - 120), 0, B
CIRCLE (BoardX(50), BoardY(50)), 16, 10: PAINT (BoardX(50), BoardY(50)), 8, 10: PSET (BoardX(47), BoardY(47) - 6), 10: DRAW "F21L43E21BD3P8,10"
PSET (BoardX(51), BoardY(51)), 0: DRAW "F9L18E9BD3P8,0"
LINE (BoardX(55) - 10, BoardY(55) + 10)-(BoardX(55) + 10, BoardY(55) - 165), 4, BF: LINE (BoardX(55) - 10, BoardY(55) + 10)-(BoardX(55) + 10, BoardY(55) - 165), 0, B
CIRCLE (BoardX(59), BoardY(59)), 16, 10: PAINT (BoardX(59), BoardY(59)), 8, 10: PSET (BoardX(55), BoardY(55) - 6), 10: DRAW "F21L43E21BD3P8,10"
' Draw Red Arrow to Safe Zone
PSET (BoardX(3) - 20, BoardY(3) + 21), 15: DRAW "R41D1L41BL1" + "C10U12R42D2ND10G21H21D1F21E21U2ND12BL21BD15P15,10"
PSET (BoardX(3) - 37, BoardY(3) - 5), 11: DRAW "NR30F5G5R32D10L7F12E12L7U10"
CIRCLE (BoardX(3) - 5, BoardY(3) + 5), 10, 11, 0, 1.6: PAINT (BoardX(3) - 15, BoardY(3)), 6, 11
' Draw Blue Arrow to Safe Zone
PSET (BoardX(18) - 10, BoardY(18) - 21), 10: DRAW "D42NL12L2H21E21R2NL12L3G21F21BU10P15,10"
PSET (BoardX(18) + 5, BoardY(18) - 37), 11: DRAW "ND30G5H5D32L10U7G12F12U7R10"
CIRCLE (BoardX(18) - 5, BoardY(18) - 5), 10, 11, 4.5, .4: PAINT (BoardX(18), BoardY(18) - 18), 9, 11
' Draw Yellow Arrow to Safe Zone
PSET (BoardX(33) + 21, BoardY(33) - 10), 10: DRAW "L42NU12U2E21F21D2NU12U3H21G21BR10P15,10"
PSET (BoardX(33) + 37, BoardY(33) + 5), 11: DRAW "NL30H5E5L32U10R7H12G12R7D10"
CIRCLE (BoardX(33) + 5, BoardY(33) - 5), 10, 11, 3.0, 4.8: PAINT (BoardX(33) + 18, BoardY(33)), 7, 11
' Draw Green Arrow to Safe Zone
PSET (BoardX(48) + 10, BoardY(48) - 21), 10: DRAW "D42NR12R2E21H21L2NR12R3F21G21BU10P15,10"
PSET (BoardX(48) - 5, BoardY(48) + 37), 11: DRAW "NU30E5F5U32R10D7E12H12D7L10"
CIRCLE (BoardX(48) + 5, BoardY(48) + 5), 10, 11, 1.5, 3.4: PAINT (BoardX(48), BoardY(48) + 18), 8, 11
' Draw Red Home
CIRCLE (130, 320), 50, 15: PAINT (130, 320), 6, 15: CIRCLE (130, 320), 35, 2: PAINT (130, 320), 2
' Draw Blue Home
CIRCLE (415, 130), 50, 15: PAINT (415, 130), 9, 15: CIRCLE (415, 130), 35, 5: PAINT (415, 130), 5
' Draw Yellow Home
CIRCLE (603, 415), 50, 15: PAINT (603, 415), 7, 15: CIRCLE (603, 415), 35, 3: PAINT (603, 415), 3
' Draw Green Home
CIRCLE (320, 603), 50, 15: PAINT (320, 603), 8, 15: CIRCLE (320, 603), 35, 4: PAINT (320, 603), 4
' Draw Red Safe Zone
PSET (130, 87), 10: DRAW "BL21BU21D204F21E21U204BG10P2,10"
X = 87: FOR Z = 1 TO 4: PSET (109, X - 21), 0: DRAW "D42R42U42R1D43L44U44": SafeZoneX(3, Z) = 130: SafeZoneY(3, Z) = X: X = X + 43: NEXT
PSET (109, 238), 0: DRAW "D33F21E21U33R1D34G22H22U34": SafeZoneX(3, 5) = 130: SafeZoneY(3, 5) = 259
' Draw Blue Safe Zone
PSET (646, 130), 10: DRAW "BU21BR21L204G21F21R204BH10P5,10"
X = 646: FOR Z = 1 TO 4: PSET (X + 21, 109), 0: DRAW "L42D42R42D1L43U44R44": SafeZoneX(1, Z) = X: SafeZoneY(1, Z) = 130: X = X - 43: NEXT
PSET (495, 109), 0: DRAW "L33G21F21R33D1L34H22E22R34": SafeZoneX(1, 5) = 474: SafeZoneY(1, 5) = 130
' Draw Yellow Safe Zone
PSET (603, 646), 10: DRAW "BR21UBD21U204H21G21D204BE10P3,10"
X = 646: FOR Z = 1 TO 4: PSET (624, X + 21), 0: DRAW "U42L42D42L1U43R44D44": SafeZoneX(4, Z) = 603: SafeZoneY(4, Z) = X: X = X - 43: NEXT
PSET (624, 495), 0: DRAW "U33H21G21D33L1U34E22F22D34": SafeZoneX(4, 5) = 603: SafeZoneY(4, 5) = 474
' Draw Green Safe Zone
PSET (87, 603), 10: DRAW "BL21BU21R204F21G21L204BE10P4,10"
X = 87: FOR Z = 1 TO 4: PSET (X - 21, 624), 0: DRAW "R42U42L42U1R43D44L44": SafeZoneX(2, Z) = X: SafeZoneY(2, Z) = 603: X = X + 43: NEXT
PSET (238, 624), 0: DRAW "R33E21H21L33U1R34F22G22L34": SafeZoneX(2, 5) = 474: SafeZoneY(2, 5) = 603
' Draw Red Start
CIRCLE (216, 117), 50, 15: PAINT (216, 117), 6, 15: CIRCLE (216, 117), 35, 2: PAINT (216, 117), 2
PSET (216, 86), 0: DRAW "F9L18E9BD3P6,0"
' Draw Blue Start
CIRCLE (616, 216), 50, 15: PAINT (616, 216), 9, 15: CIRCLE (616, 216), 35, 5: PAINT (616, 216), 5
PSET (647, 216), 0: DRAW "H9D18E9BL3P9,0"
' Draw Yellow Start
CIRCLE (517, 616), 50, 15: PAINT (517, 616), 7, 15: CIRCLE (517, 616), 35, 3: PAINT (517, 616), 3
PSET (517, 647), 0: DRAW "E9L18F9BU3P7,0"
' Draw Green Start
CIRCLE (117, 517), 50, 15: PAINT (117, 517), 8, 15: CIRCLE (117, 517), 35, 4: PAINT (117, 517), 4
PSET (86, 517), 0: DRAW "E9D18H9BR3P8,0"
Players = 4
' Place Pawns on Start
FOR Z = 1 TO 4
X1 = Z: X5 = 1
X2 = 1: X3 = StartX(1, Z): X4 = StartY(1, Z): GOSUB GetPut: GOSUB DrawPiece
X2 = 2: X3 = StartX(2, Z): X4 = StartY(2, Z): GOSUB GetPut: GOSUB DrawPiece
IF Players > 2 THEN X2 = 3: X3 = StartX(3, Z): X4 = StartY(3, Z): Start(3) = 4: GOSUB GetPut: GOSUB DrawPiece
IF Players = 4 THEN X2 = 4: X3 = StartX(4, Z): X4 = StartY(4, Z): Start(4) = 4: GOSUB GetPut: GOSUB DrawPiece
NEXT
Player = 1
StartGame:
' Draw Player Indicator
X2 = Player: X3 = 885: X4 = 70: GOSUB DrawPiece
COLOR 0, 18: LOCATE 7, 107: PRINT "Player:"; Player;
' Get Next Pawn in Start area
IF AtStart(Player, 1) = 1 THEN NextStart = 1 ELSE IF AtStart(Player, 2) = 1 THEN NextStart = 2 ELSE IF AtStart(Player, 3) = 1 THEN NextStart = 3 ELSE IF AtStart(Player, 4) = 1 THEN NextStart = 4 ELSE NextStart = 0
Card = CardDeck(CardsLeft)
Card = 5
' Draw plying card
X1 = 2: X2 = Card: GOSUB DrawCard
' Check for Playable moves
X = 0: GOSUB Playable
' Get Player Input
GetInput1:
DO WHILE _MOUSEINPUT
IF CanStart = 1 THEN
LOCATE 15, 105: PRINT "CanStart ="; CanStart;
IF _MOUSEX > StartAreaX(Player) - 45 AND _MOUSEX < StartAreaX(Player) + 45 AND _MOUSEX > StartAreaY(Player) - 45 AND _MOUSEY < StartAreaY(Player) + 45 THEN StartSelected = 1 ELSE StartSelected = 0
LOCATE 18, 102: PRINT "StartSelected ="; StartSelected;
IF StartSelected = 1 AND _MOUSEBUTTON(1) = -1 THEN
GOSUB ButtonRelease: StartPawn = 0: Space = BoardStart(Player)
IF BoardPlayer(Space) > 0 THEN GOSUB BumpPiece
X1 = NextStart: X2 = Player: X3 = StartX(Player, NextStart): X4 = StartY(Player, NextStart): X5 = 2: X6 = 18: GOSUB GetPut
AtStart(Player, NextStart) = 0: BoardPlayer(Space) = Player: BoardPiece(Space) = NextStart
X3 = BoardX(Space): X4 = BoardY(Space): GOSUB DrawPiece: GOTO MakeMove
END IF
END IF
LOOP
GOTO GetInput1
MakeMove:
SLEEP
DrawText:
COLOR 15, 0: LOCATE 1, 100: PRINT Text$;
Length = 8 * LEN(Text$)
FOR Height = 0 TO 17
FOR Width = 0 TO Length
IF POINT(791 + Width, Height) = 15 THEN PColor = 0 ELSE PColor = 1
SELECT CASE Rotation
CASE 1
IF PColor = 0 THEN LINE (X1 + Width * Size, Y1 + Height * Size)-(X1 + Width * Size + Size, Y1 + Height * Size + Size), 0, BF
CASE 2
IF PColor = 0 THEN LINE (X1 - Height * Size, Y1 + Width * Size)-(X1 - Height * Size - Size, Y1 + Width * Size + Size), 0, BF
CASE 3
IF PColor = 0 THEN LINE (X1 - Width * Size, Y1 - Height * Size)-(X1 - Width * Size - Size, Y1 - Height * Size - Size), 0, BF
CASE 4
IF PColor = 0 THEN LINE (X1 + Height * Size, Y1 - Width * Size)-(X1 + Height * Size + Size, Y1 - Width * Size - Size), 0, BF
END SELECT
NEXT
NEXT
COLOR 0, 18: LOCATE 1, 100: PRINT STRING$(15, 32);
RETURN
DrawCard:
IF X1 = 1 THEN
CIRCLE (805, 145), 15, 0, 1.5, 3.1: CIRCLE (970, 145), 15, 0, 0, 1.6: CIRCLE (805, 355), 15, 0, 3.0, 4.75: CIRCLE (970, 355), 15, 0, 4.5, 0
LINE (805, 130)-(970, 130), 0: LINE (790, 145)-(790, 355), 0: LINE (985, 145)-(985, 355), 0: LINE (805, 370)-(970, 370), 0: PAINT (805, 145), 15, 0
Text$ = "SORRY!": Size = 4: X1 = 912: Y1 = 152: Rotation = 2: GOSUB DrawText
END IF
IF X1 = 2 THEN
CIRCLE (805, 415), 15, 0, 1.5, 3.1: CIRCLE (970, 415), 15, 0, 0, 1.6: CIRCLE (805, 625), 15, 0, 3.0, 4.75: CIRCLE (970, 625), 15, 0, 4.5, 0
LINE (805, 400)-(970, 400), 0: LINE (790, 415)-(790, 625), 0: LINE (985, 415)-(985, 625), 0: LINE (805, 640)-(970, 640), 0: PAINT (805, 415), 15, 0
SELECT CASE X2
CASE 1, 5, 6, 7, 8
StartText = 32
CASE 0, 2, 3, 4, 9
StartText = 33
CASE ELSE
StartText = 31
END SELECT
FOR Z1 = 1 TO CardLines(X2)
COLOR 0, 15: LOCATE StartText + Z1 - 1, 102: PRINT CardText$(X2, Z1);
NEXT
Text$ = Card$(X2): Size = 3: X1 = 812: Y1 = 420: Rotation = 1: GOSUB DrawText
Text$ = Card$(X2): Size = 3: X1 = 963: Y1 = 620: Rotation = 3: GOSUB DrawText
END IF
RETURN
Playable:
FOR Z = 1 TO 60: BoardSpace(Z) = 0: NEXT
SELECT CASE Card
CASE 0
' Card - Move Pawn 3 Spaces Forward
CASE 1
' Card - Move Pawn 10 Spaces Forward or 1 Space Backward
CASE 2
' Card - Move Pawn 5 Spaces Forward
CASE 3
' Card - Move Pawn 4 Spaces Backward
CASE 4
' Card - Move Pawn 12 Spaces Forward
CASE 5
' Card - Start Pawn or Move 1 Space Forward
Forard = 0: CanStart = 0
IF Start(Player) > 0 AND BoardStart(Player) <> Player THEN X = 1: CanStart = 1
IF CanStart = 1 THEN COLOR 0, 18: LOCATE 42, 101: PRINT "Select your START area";: LOCATE 43, 97: PRINT "to move your pawn to the board";
CASE 6
' Card - Move Pawn 11 Spaces Forward or Swap With opponent
CASE 7
' Card - Move 1 or 2 Pawns 7 Spaces Forward
CASE 8
' Card - Start Pawn or Move Pawn 2 Spaces Forward
CanStart = 0: Forward = 0
IF Start(Player) > 0 AND BoardStart(Player) <> Player THEN X = 1: CanStart = 1
IF CanStart = 1 THEN COLOR 0, 18: LOCATE 42, 101: PRINT "Select your START area";: LOCATE 43, 97: PRINT "to move your pawn to the board";
CASE 9
' Card - Move Pawn 8 Spaces Forward
CASE 10
' Card - Sorry!
END SELECT
RETURN
GetPut:
SELECT CASE X2
CASE 1
SELECT CASE X1
CASE 1
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P11() ELSE PUT (X3 - X6, X4 - X6), P11(), PSET
CASE 2
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P12() ELSE PUT (X3 - X6, X4 - X6), P12(), PSET
CASE 3
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P13() ELSE PUT (X3 - X6, X4 - X6), P13(), PSET
CASE 4
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P14() ELSE PUT (X3 - X6, X4 - X6), P14(), PSET
END SELECT
CASE 2
SELECT CASE X1
CASE 1
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P21() ELSE PUT (X3 - X6, X4 - X6), P21(), PSET
CASE 2
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P22() ELSE PUT (X3 - X6, X4 - X6), P22(), PSET
CASE 3
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P23() ELSE PUT (X3 - X6, X4 - X6), P23(), PSET
CASE 4
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P24() ELSE PUT (X3 - X6, X4 - X6), P24(), PSET
END SELECT
CASE 3
SELECT CASE X1
CASE 1
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P31() ELSE PUT (X3 - X6, X4 - X6), P31(), PSET
CASE 2
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P32() ELSE PUT (X3 - X6, X4 - X6), P32(), PSET
CASE 3
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P33() ELSE PUT (X3 - X6, X4 - X6), P33(), PSET
CASE 4
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P34() ELSE PUT (X3 - X6, X4 - X6), P34(), PSET
END SELECT
CASE 4
SELECT CASE X1
CASE 1
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P41() ELSE PUT (X3 - X6, X4 - X6), P41(), PSET
CASE 2
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P42() ELSE PUT (X3 - X6, X4 - X6), P42(), PSET
CASE 3
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P43() ELSE PUT (X3 - X6, X4 - X6), P43(), PSET
CASE 4
IF X5 = 1 THEN GET (X3 - 18, X4 - 18)-(X3 + 18, X4 + 18), P44() ELSE PUT (X3 - X6, X4 - X6), P44(), PSET
END SELECT
END SELECT
RETURN
ButtonRelease:
DO WHILE _MOUSEINPUT
IF _MOUSEBUTTON(1) = 0 THEN RETURN
LOOP
GOTO ButtonRelease
DrawPiece:
SELECT CASE X2
CASE 1
CIRCLE (X3, X4), 18, 17: PAINT (X3, X4), 12, 17: CIRCLE (X3, X4), 12, 9: PAINT (X3, X4), 9: CIRCLE (X3, X4), 6, 5: PAINT (X3, X4), 5
CASE 2
CIRCLE (X3, X4), 18, 17: PAINT (X3, X4), 13, 17: CIRCLE (X3, X4), 12, 8: PAINT (X3, X4), 8: CIRCLE (X3, X4), 6, 4: PAINT (X3, X4), 4
CASE 3
CIRCLE (X3, X4), 18, 17: PAINT (X3, X4), 14, 17: CIRCLE (X3, X4), 12, 6: PAINT (X3, X4), 6: CIRCLE (X3, X4), 6, 2: PAINT (X3, X4), 2
CASE 4
CIRCLE (X3, X4), 18, 17: PAINT (X3, X4), 16, 17: CIRCLE (X3, X4), 12, 7: PAINT (X3, X4), 7: CIRCLE (X3, X4), 6, 3: PAINT (X3, X4), 3
END SELECT
RETURN
BumpPiece:
RETURN
On line 38, we are setting up the X, Y locations of the center of each player's START area circle for Players 1 to 4.
On lines 68 to 74, a loop is setup to assign the X, Y locations of the center of each of the 4 pieces that are placed in each player's START area with the variable Z representing Player 1 to 4.
On line 210, we set the variable Players = 4 so the game knows to setup pieces at all 4 START areas.
On lines 215 to 221, a loop is setup to place 4 pieces on each player's START area. The variable Z is set for each piece that is placed in each START area. Notice that for Player's 3 and 4, the games checks to see the number of player before placing those pieces. Where as, players 1 and 2 are automatically placed. The game will normally ask for number of players 2 to 4. The number of players is no importance to the problem.
One line 225, we set the variable Player = 1 as to indicate player 1 will be taking their turn.
On line 240, we set the variable Card = 5. This is the card # assigned to Start a piece or move 1 space forward. Card # 8 can also be used. It Starts a piece or move 2 spaces forward. No other are functional in this code, but the cards are displayed. Cards are from 0 to 10.
On line 250, we call a subroutine to check if that card is playable. When Cards 5 or 8 pass the test, variable CanStart = 1.
On line 255, we setup the DO WHILE _MOUSEINPUT loop to scan the board for moves.
On line 258, the variable CanStart is tested and passes. You can see on line 261, I PRINT the value of variable CanStart on the right side of the screen for proof.
On line 264 is where the problem shows up. The START area circle has a radius of 50 pixels. I'm checking the mouse X, Y location to see if it's inside the StartAreaX and StartAreaY square that is 91 X 91 for the current Player. if the test passes, the variable StartSelected = 1 ELSE StartSelected =0.
On line 267, I PRINT the value of variable StartSelected on the right side of the screen for proof. When the variable Player = 1 or 3 and you're hovering the mouse pointer inside that players START area, StartSelect changes to 1 and goes back to 0 as you leave. But, for Player 2 or 4, StartSelect stays at 0.
Clicking the left mouse button while inside player's 1 and 3 START area will move a piece to it's position on the board. You can change the variable Player on line 255 to represent each player and run the code.
So, why is player's 2 and 4 areas, green and gold, not working?
Thanks, Donald