proc drawgrid (centfont, namefont : int) for x : 170 .. 530 by 120 drawline (x, 5, x, 485, black) end for for y : 5 .. 485 by 160 drawline (170, y, 530, y, black) end for Font.Draw ("Triple Triad", 210, 230, centfont, black) Font.Draw ("Computer", 13, 500, namefont, red) Font.Draw ("Human", 616, 500, namefont, blue) end drawgrid proc makehands (var ch : string, var filenum, randcard : int, var top, left, right, bottom : array 0 .. *, 1 .. * of int, var namearray : array 0 .. *, 1 .. * of string) var count : boolean := false var boolcard : array 1 .. 28 of boolean for b : 1 .. upper (boolcard) boolcard (b) := true end for for j : 1 .. 2 loop open : filenum, "cards.zip", get count := false randint (randcard, 1, 7) loop exit when eof (filenum) get : filenum, ch : * if (strint (ch (1)) * 10 + strint (ch (2))) = randcard and boolcard (randcard) = true then top (j, 1) := strint (ch (4)) left (j, 1) := strint (ch (5)) right (j, 1) := strint (ch (6)) bottom (j, 1) := strint (ch (7)) namearray (j, 1) := ch (9 .. *) boolcard (randcard) := false count := true end if end loop close : filenum exit when count = true end loop for i : 2 .. 4 loop open : filenum, "cards.zip", get count := false randint (randcard, 8, 21) loop exit when eof (filenum) get : filenum, ch : * if (strint (ch (1)) * 10 + strint (ch (2))) = randcard and boolcard (randcard) = true then top (j, i) := strint (ch (4)) left (j, i) := strint (ch (5)) right (j, i) := strint (ch (6)) bottom (j, i) := strint (ch (7)) namearray (j, i) := ch (9 .. *) boolcard (randcard) := false count := true end if end loop close : filenum exit when count = true end loop end for loop open : filenum, "cards.zip", get count := false randint (randcard, 22, 28) loop exit when eof (filenum) get : filenum, ch : * if (strint (ch (1)) * 10 + strint (ch (2))) = randcard and boolcard (randcard) = true then top (j, 5) := strint (ch (4)) left (j, 5) := strint (ch (5)) right (j, 5) := strint (ch (6)) bottom (j, 5) := strint (ch (7)) namearray (j, 5) := ch (9 .. *) boolcard (randcard) := false count := true end if end loop close : filenum exit when count = true end loop end for end makehands proc cardpicset (var bluearray, redarray : array 0 .. *, 1 .. * of int, namearray : array 0 .. *, 1 .. * of string) for i : 1 .. 2 for j : 1 .. 5 bluearray (i, j) := Pic.FileNew ("pics/" + namearray (i, j) + "blue.bmp") redarray (i, j) := Pic.FileNew ("pics/" + namearray (i, j) + "red.bmp") end for end for end cardpicset proc drawcards (cardback, cardfont : int, bluearray, top, left, right, bottom : array 0 .. *, 1 .. * of int, namearray : array 0 .. *, 1 .. * of string) for decreasing i : 5 .. 1 Pic.Draw (cardback, 20, i * 55, picCopy) end for Pic.Draw (bluearray (2, 4), 544, 2, picCopy) Font.Draw (intstr (top (2, 4)), 556, 142, cardfont, black) Font.Draw (intstr (left (2, 4)) + " " + intstr (right (2, 4)), 548, 132, cardfont, black) Font.Draw (intstr (bottom (2, 4)), 556, 122, cardfont, black) Font.Draw (namearray (2, 4), 575, 142, cardfont, black) Pic.Draw (bluearray (2, 5), 666, 2, picCopy) Font.Draw (intstr (top (2, 5)), 678, 142, cardfont, black) Font.Draw (intstr (left (2, 5)) + " " + intstr (right (2, 5)), 670, 132, cardfont, black) Font.Draw (intstr (bottom (2, 5)), 678, 122, cardfont, black) Font.Draw (namearray (2, 5), 697, 142, cardfont, black) Pic.Draw (bluearray (2, 2), 544, 164, picCopy) Font.Draw (intstr (top (2, 2)), 556, 304, cardfont, black) Font.Draw (intstr (left (2, 2)) + " " + intstr (right (2, 2)), 548, 294, cardfont, black) Font.Draw (intstr (bottom (2, 2)), 556, 284, cardfont, black) Font.Draw (namearray (2, 2), 575, 304, cardfont, black) Pic.Draw (bluearray (2, 3), 666, 164, picCopy) Font.Draw (intstr (top (2, 3)), 678, 304, cardfont, black) Font.Draw (intstr (left (2, 3)) + " " + intstr (right (2, 3)), 670, 294, cardfont, black) Font.Draw (intstr (bottom (2, 3)), 678, 284, cardfont, black) Font.Draw (namearray (2, 3), 697, 304, cardfont, black) Pic.Draw (bluearray (2, 1), 605, 326, picCopy) Font.Draw (intstr (top (2, 1)), 617, 466, cardfont, black) Font.Draw (intstr (left (2, 1)) + " " + intstr (right (2, 1)), 609, 456, cardfont, black) Font.Draw (intstr (bottom (2, 1)), 617, 446, cardfont, black) Font.Draw (namearray (2, 1), 636, 466, cardfont, black) end drawcards proc selectcard (var selectnum, mx, my, mb : int, var cardboolean : array 1 .. * of boolean) mousewhere (mx, my, mb) if mb = 1 and mx >= 544 and mx <= 664 and my >= 2 and my <= 162 and cardboolean (4) = true then loop mousewhere (mx, my, mb) exit when mb = 0 end loop if selectnum = 0 then drawbox (543, 1, 664, 162, yellow) elsif selectnum = 1 then drawbox (604, 325, 725, 486, brown) drawbox (543, 1, 664, 162, yellow) elsif selectnum = 2 then drawbox (543, 163, 664, 324, brown) drawbox (543, 1, 664, 162, yellow) elsif selectnum = 3 then drawbox (665, 163, 786, 324, brown) drawbox (543, 1, 664, 162, yellow) elsif selectnum = 4 then elsif selectnum = 5 then drawbox (665, 1, 786, 162, brown) drawbox (543, 1, 664, 162, yellow) end if selectnum := 4 elsif mb = 1 and mx >= 665 and mx <= 786 and my >= 2 and my <= 162 and cardboolean (5) = true then loop mousewhere (mx, my, mb) exit when mb = 0 end loop if selectnum = 0 then drawbox (665, 1, 786, 162, yellow) elsif selectnum = 1 then drawbox (604, 325, 725, 486, brown) drawbox (665, 1, 786, 162, yellow) elsif selectnum = 2 then drawbox (543, 163, 664, 324, brown) drawbox (665, 1, 786, 162, yellow) elsif selectnum = 3 then drawbox (665, 163, 786, 324, brown) drawbox (665, 1, 786, 162, yellow) elsif selectnum = 4 then drawbox (543, 1, 664, 162, brown) drawbox (665, 1, 786, 162, yellow) elsif selectnum = 5 then end if selectnum := 5 elsif mb = 1 and mx >= 544 and mx <= 664 and my >= 163 and my <= 324 and cardboolean (2) = true then loop mousewhere (mx, my, mb) exit when mb = 0 end loop if selectnum = 0 then drawbox (543, 163, 664, 324, yellow) elsif selectnum = 1 then drawbox (604, 325, 725, 486, brown) drawbox (543, 163, 664, 324, yellow) elsif selectnum = 2 then elsif selectnum = 3 then drawbox (665, 163, 786, 324, brown) drawbox (543, 163, 664, 324, yellow) elsif selectnum = 4 then drawbox (543, 1, 664, 162, brown) drawbox (543, 163, 664, 324, yellow) elsif selectnum = 5 then drawbox (665, 1, 786, 162, brown) drawbox (543, 163, 664, 324, yellow) end if selectnum := 2 elsif mb = 1 and mx >= 665 and mx <= 786 and my >= 163 and my <= 324 and cardboolean (3) = true then loop mousewhere (mx, my, mb) exit when mb = 0 end loop if selectnum = 0 then drawbox (665, 163, 786, 324, yellow) elsif selectnum = 1 then drawbox (604, 325, 725, 486, brown) drawbox (665, 163, 786, 324, yellow) elsif selectnum = 2 then drawbox (543, 163, 664, 324, brown) drawbox (665, 163, 786, 324, yellow) elsif selectnum = 3 then elsif selectnum = 4 then drawbox (543, 1, 664, 162, brown) drawbox (665, 163, 786, 324, yellow) elsif selectnum = 5 then drawbox (665, 1, 786, 162, brown) drawbox (665, 163, 786, 324, yellow) end if selectnum := 3 elsif mb = 1 and mx >= 604 and mx <= 725 and my >= 325 and my <= 486 and cardboolean (1) = true then loop mousewhere (mx, my, mb) exit when mb = 0 end loop if selectnum = 0 then drawbox (604, 325, 725, 486, yellow) elsif selectnum = 1 then elsif selectnum = 2 then drawbox (543, 163, 664, 324, brown) drawbox (604, 325, 725, 486, yellow) elsif selectnum = 3 then drawbox (665, 163, 786, 324, brown) drawbox (604, 325, 725, 486, yellow) elsif selectnum = 4 then drawbox (543, 1, 664, 162, brown) drawbox (604, 325, 725, 486, yellow) elsif selectnum = 5 then drawbox (665, 1, 786, 162, brown) drawbox (604, 325, 725, 486, yellow) end if selectnum := 1 end if end selectcard proc gridcard (var turn : boolean, var mx, my, mb, selectnum, cardfont, cardcount, hscore, cscore : int, var spotstatus : array 0 .. *, 0 .. * of string, namearray : array 0 .. *, 1 .. * of string, top, left, right, bottom, bluearray : array 0 .. *, 1 .. * of int, x, y : array 1 .. * of int, var cardboolean : array 1 .. * of boolean) for a : 1 .. 3 for b : 1 .. 3 mousewhere (mx, my, mb) if mb = 1 and mx > x (a) and mx < x (a + 1) and my < y (b) and my > y (b + 1) and selectnum not= 0 and spotstatus (a, b) = "free50" then loop mousewhere (mx, my, mb) exit when mb = 0 end loop if selectnum = 1 then drawfillbox (604, 325, 725, 486, brown) elsif selectnum = 2 then drawfillbox (543, 163, 664, 324, brown) elsif selectnum = 3 then drawfillbox (665, 163, 786, 324, brown) elsif selectnum = 4 then drawfillbox (543, 1, 664, 162, brown) elsif selectnum = 5 then drawfillbox (665, 1, 786, 162, brown) end if cardboolean (selectnum) := false for i : 1 .. 5 if selectnum = i then Pic.Draw (bluearray (2, i), x (a), y (b + 1), picCopy) Font.Draw (intstr (top (2, i)), x (a) + 12, y (b + 1) + 140, cardfont, black) Font.Draw (intstr (left (2, i)) + " " + intstr (right (2, i)), x (a) + 4, y (b + 1) + 130, cardfont, black) Font.Draw (intstr (bottom (2, i)), x (a) + 12, y (b + 1) + 120, cardfont, black) Font.Draw (namearray (2, i), x (a) + 31, y (b + 1) + 140, cardfont, black) spotstatus (a, b) := "blue" + intstr (selectnum) + "2" selectnum := 0 end if end for View.Update Music.PlayFile ("snap.wav") if spotstatus (a, b + 1) (1 .. 4) = "redd" and bottom (strint (spotstatus (a, b) (6)), strint (spotstatus (a, b) (5))) > top (strint (spotstatus (a, b + 1) (6)), strint (spotstatus (a, b + 1) (5))) then Pic.Draw (bluearray (strint (spotstatus (a, b + 1) (6)), strint (spotstatus (a, b + 1) (5))), x (a), y (b + 2), picCopy) Font.Draw (intstr (top (strint (spotstatus (a, b + 1) (6)), strint (spotstatus (a, b + 1) (5)))), x (a) + 12, y (b + 2) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (a, b + 1) (6)), strint (spotstatus (a, b + 1) (5)))) + " " + intstr (right (strint (spotstatus (a, b + 1) (6)), strint (spotstatus (a, b + 1) (5)))), x (a) + 4, y (b + 2) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (a, b + 1) (6)), strint (spotstatus (a, b + 1) (5)))), x (a) + 12, y (b + 2) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (a, b + 1) (6)), strint (spotstatus (a, b + 1) (5))), x (a) + 31, y (b + 2) + 140, cardfont, black) hscore += 1 cscore -= 1 spotstatus (a, b + 1) := "blue" + spotstatus (a, b + 1) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if if spotstatus (a, b - 1) (1 .. 4) = "redd" and top (strint (spotstatus (a, b) (6)), strint (spotstatus (a, b) (5))) > bottom (strint (spotstatus (a, b - 1) (6)), strint (spotstatus (a, b - 1) (5))) then Pic.Draw (bluearray (strint (spotstatus (a, b - 1) (6)), strint (spotstatus (a, b - 1) (5))), x (a), y (b), picCopy) Font.Draw (intstr (top (strint (spotstatus (a, b - 1) (6)), strint (spotstatus (a, b - 1) (5)))), x (a) + 12, y (b) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (a, b - 1) (6)), strint (spotstatus (a, b - 1) (5)))) + " " + intstr (right (strint (spotstatus (a, b - 1) (6)), strint (spotstatus (a, b - 1) (5)))), x (a) + 4, y (b) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (a, b - 1) (6)), strint (spotstatus (a, b - 1) (5)))), x (a) + 12, y (b) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (a, b - 1) (6)), strint (spotstatus (a, b - 1) (5))), x (a) + 31, y (b) + 140, cardfont, black) hscore += 1 cscore -= 1 spotstatus (a, b - 1) := "blue" + spotstatus (a, b - 1) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if if spotstatus (a + 1, b) (1 .. 4) = "redd" and right (strint (spotstatus (a, b) (6)), strint (spotstatus (a, b) (5))) > left (strint (spotstatus (a + 1, b) (6)), strint (spotstatus (a + 1, b) (5))) then Pic.Draw (bluearray (strint (spotstatus (a + 1, b) (6)), strint (spotstatus (a + 1, b) (5))), x (a + 1), y (b + 1), picCopy) Font.Draw (intstr (top (strint (spotstatus (a + 1, b) (6)), strint (spotstatus (a + 1, b) (5)))), x (a + 1) + 12, y (b + 1) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (a + 1, b) (6)), strint (spotstatus (a + 1, b) (5)))) + " " + intstr (right (strint (spotstatus (a + 1, b) (6)), strint (spotstatus (a + 1, b) (5)))), x (a + 1) + 4, y (b + 1) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (a + 1, b) (6)), strint (spotstatus (a + 1, b) (5)))), x (a + 1) + 12, y (b + 1) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (a + 1, b) (6)), strint (spotstatus (a + 1, b) (5))), x (a + 1) + 31, y (b + 1) + 140, cardfont, black) hscore += 1 cscore -= 1 spotstatus (a + 1, b) := "blue" + spotstatus (a + 1, b) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if if spotstatus (a - 1, b) (1 .. 4) = "redd" and left (strint (spotstatus (a, b) (6)), strint (spotstatus (a, b) (5))) > right (strint (spotstatus (a - 1, b) (6)), strint (spotstatus (a - 1, b) (5))) then Pic.Draw (bluearray (strint (spotstatus (a - 1, b) (6)), strint (spotstatus (a - 1, b) (5))), x (a - 1), y (b + 1), picCopy) Font.Draw (intstr (top (strint (spotstatus (a - 1, b) (6)), strint (spotstatus (a - 1, b) (5)))), x (a - 1) + 12, y (b + 1) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (a - 1, b) (6)), strint (spotstatus (a - 1, b) (5)))) + " " + intstr (right (strint (spotstatus (a - 1, b) (6)), strint (spotstatus (a - 1, b) (5)))), x (a - 1) + 4, y (b + 1) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (a - 1, b) (6)), strint (spotstatus (a - 1, b) (5)))), x (a - 1) + 12, y (b + 1) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (a - 1, b) (6)), strint (spotstatus (a - 1, b) (5))), x (a - 1) + 31, y (b + 1) + 140, cardfont, black) hscore += 1 cscore -= 1 spotstatus (a - 1, b) := "blue" + spotstatus (a - 1, b) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if turn := false cardcount += 1 end if end for end for end gridcard proc aicard (var turn, aibool : boolean, var aicount, cardfont, cardcount, hscore, cscore, diff : int, var spotstatus : array 0 .. *, 0 .. * of string, namearray : array 0 .. *, 1 .. * of string, top, left, right, bottom, redarray : array 0 .. *, 1 .. * of int, x, y : array 1 .. * of int, var ocardboolean : array 1 .. * of boolean) var rx, ry, cselect, intcount, count2 : int := 0 aicount += 1 if aicount = 1 then drawfillbox (20, 380, 140, 435, brown) elsif aicount = 2 then drawfillbox (20, 325, 140, 435, brown) elsif aicount = 3 then drawfillbox (20, 270, 140, 435, brown) elsif aicount = 4 then drawfillbox (20, 215, 140, 435, brown) elsif aicount = 5 then drawfillbox (20, 55, 140, 435, brown) end if View.Update delay (250) if diff <= 11 then loop randint (cselect, 1, 5) if ocardboolean (cselect) = true then ocardboolean (cselect) := false aibool := true end if exit when aibool = true end loop aibool := false loop randint (rx, 1, 3) randint (ry, 1, 3) if spotstatus (rx, ry) = "free50" and ((bottom (1, cselect) > top (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5))) and spotstatus (rx, ry + 1) (1 .. 4) = "blue") or (top (1, cselect) > bottom (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5))) and spotstatus (rx, ry - 1) (1 .. 4) = "blue") or (right (1, cselect) > left (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5))) and spotstatus (rx + 1, ry) (1 .. 4) = "blue") or (left (1, cselect) > right (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5))) and spotstatus (rx - 1, ry) (1 .. 4) = "blue")) or (spotstatus (rx, ry) = "free50" and intcount >= diff) then Pic.Draw (redarray (1, cselect), x (rx), y (ry + 1), picCopy) Font.Draw (intstr (top (1, cselect)), x (rx) + 12, y (ry + 1) + 140, cardfont, black) Font.Draw (intstr (left (1, cselect)) + " " + intstr (right (1, cselect)), x (rx) + 4, y (ry + 1) + 130, cardfont, black) Font.Draw (intstr (bottom (1, cselect)), x (rx) + 12, y (ry + 1) + 120, cardfont, black) Font.Draw (namearray (1, cselect), x (rx) + 31, y (ry + 1) + 140, cardfont, black) spotstatus (rx, ry) := "redd" + intstr (cselect) + "1" aibool := true end if intcount += 1 exit when aibool = true end loop elsif diff >= 12 then loop loop randint (cselect, 1, 5) if ocardboolean (cselect) = true then aibool := true count2 += 1 end if exit when aibool = true end loop aibool := false loop randint (rx, 1, 3) randint (ry, 1, 3) if spotstatus (rx, ry) = "free50" and ((bottom (1, cselect) > top (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5))) and spotstatus (rx, ry + 1) (1 .. 4) = "blue") or (top (1, cselect) > bottom (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5))) and spotstatus (rx, ry - 1) (1 .. 4) = "blue") or (right (1, cselect) > left (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5))) and spotstatus (rx + 1, ry) (1 .. 4) = "blue") or (left (1, cselect) > right (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5))) and spotstatus (rx - 1, ry) (1 .. 4) = "blue")) or (spotstatus (rx, ry) = "free50" and count2 >= 7) then Pic.Draw (redarray (1, cselect), x (rx), y (ry + 1), picCopy) Font.Draw (intstr (top (1, cselect)), x (rx) + 12, y (ry + 1) + 140, cardfont, black) Font.Draw (intstr (left (1, cselect)) + " " + intstr (right (1, cselect)), x (rx) + 4, y (ry + 1) + 130, cardfont, black) Font.Draw (intstr (bottom (1, cselect)), x (rx) + 12, y (ry + 1) + 120, cardfont, black) Font.Draw (namearray (1, cselect), x (rx) + 31, y (ry + 1) + 140, cardfont, black) spotstatus (rx, ry) := "redd" + intstr (cselect) + "1" aibool := true ocardboolean (cselect) := false end if intcount += 1 exit when aibool = true or intcount >= diff end loop exit when aibool = true end loop end if View.Update Music.PlayFile ("snap.wav") if spotstatus (rx, ry + 1) (1 .. 4) = "blue" and bottom (strint (spotstatus (rx, ry) (6)), strint (spotstatus (rx, ry) (5))) > top (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5))) then Pic.Draw (redarray (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5))), x (rx), y (ry + 2), picCopy) Font.Draw (intstr (top (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5)))), x (rx) + 12, y (ry + 2) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5)))) + " " + intstr (right (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5)))), x (rx) + 4, y (ry + 2) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5)))), x (rx) + 12, y (ry + 2) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (rx, ry + 1) (6)), strint (spotstatus (rx, ry + 1) (5))), x (rx) + 31, y (ry + 2) + 140, cardfont, black) hscore -= 1 cscore += 1 spotstatus (rx, ry + 1) := "redd" + spotstatus (rx, ry + 1) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if if spotstatus (rx, ry - 1) (1 .. 4) = "blue" and top (strint (spotstatus (rx, ry) (6)), strint (spotstatus (rx, ry) (5))) > bottom (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5))) then Pic.Draw (redarray (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5))), x (rx), y (ry), picCopy) Font.Draw (intstr (top (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5)))), x (rx) + 12, y (ry) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5)))) + " " + intstr (right (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5)))), x (rx) + 4, y (ry) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5)))), x (rx) + 12, y (ry) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (rx, ry - 1) (6)), strint (spotstatus (rx, ry - 1) (5))), x (rx) + 31, y (ry) + 140, cardfont, black) hscore -= 1 cscore += 1 spotstatus (rx, ry - 1) := "redd" + spotstatus (rx, ry - 1) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if if spotstatus (rx + 1, ry) (1 .. 4) = "blue" and right (strint (spotstatus (rx, ry) (6)), strint (spotstatus (rx, ry) (5))) > left (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5))) then Pic.Draw (redarray (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5))), x (rx + 1), y (ry + 1), picCopy) Font.Draw (intstr (top (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5)))), x (rx + 1) + 12, y (ry + 1) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5)))) + " " + intstr (right (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5)))), x (rx + 1) + 4, y (ry + 1) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5)))), x (rx + 1) + 12, y (ry + 1) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (rx + 1, ry) (6)), strint (spotstatus (rx + 1, ry) (5))), x (rx + 1) + 31, y (ry + 1) + 140, cardfont, black) hscore -= 1 cscore += 1 spotstatus (rx + 1, ry) := "redd" + spotstatus (rx + 1, ry) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if if spotstatus (rx - 1, ry) (1 .. 4) = "blue" and left (strint (spotstatus (rx, ry) (6)), strint (spotstatus (rx, ry) (5))) > right (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5))) then Pic.Draw (redarray (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5))), x (rx - 1), y (ry + 1), picCopy) Font.Draw (intstr (top (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5)))), x (rx - 1) + 12, y (ry + 1) + 140, cardfont, black) Font.Draw (intstr (left (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5)))) + " " + intstr (right (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5)))), x (rx - 1) + 4, y (ry + 1) + 130, cardfont, black) Font.Draw (intstr (bottom (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5)))), x (rx - 1) + 12, y (ry + 1) + 120, cardfont, black) Font.Draw (namearray (strint (spotstatus (rx - 1, ry) (6)), strint (spotstatus (rx - 1, ry) (5))), x (rx - 1) + 31, y (ry + 1) + 140, cardfont, black) hscore -= 1 cscore += 1 spotstatus (rx - 1, ry) := "redd" + spotstatus (rx - 1, ry) (5 .. 6) View.Update Music.PlayFile ("swish.wav") end if cardcount += 1 aibool := false turn := true end aicard proc scoredisplay (cscore, hscore, centfont : int) drawfillbox (20, 535, 100, 580, brown) drawfillbox (600, 535, 800, 580, brown) Font.Draw (intstr (cscore), 70, 540, centfont, red) Font.Draw (intstr (hscore), 655, 540, centfont, blue) end scoredisplay proc initproc (var randcard, aicount, hscore, cscore, selectnum, cardcount : int, var cardboolean, ocardboolean : array 1 .. * of boolean, var turn, aibool : boolean, var spotstatus : array 0 .. *, 0 .. * of string, var top, left, right, bottom : array 0 .. *, 1 .. * of int) randint (randcard, 1, 2) if randcard = 1 then turn := true elsif randcard = 2 then turn := false end if for i : 1 .. 5 cardboolean (i) := true ocardboolean (i) := true top (0, i) := 9 left (0, i) := 9 right (0, i) := 9 bottom (0, i) := 9 end for for i : 0 .. 4 for j : 0 .. 4 spotstatus (i, j) := "free50" end for end for aibool := true aicount := 0 hscore := 5 cscore := 5 selectnum := 0 cardcount := 0 end initproc proc splash (var splashpic, mx, my, mb, diff : int) Pic.Draw (splashpic, 0, 0, picCopy) loop mousewhere (mx, my, mb) if mb = 1 and mx >= 100 and mx <= 250 and my >= 100 and my <= 175 then diff := 3 elsif mb = 1 and mx >= 325 and mx <= 475 and my >= 100 and my <= 175 then diff := 10 elsif mb = 1 and mx >= 550 and mx <= 700 and my >= 100 and my <= 175 then diff := 20 elsif mb = 1 and mx >= 265 and mx <= 356 and my >= 4 and my <= 41 then Music.PlayFileStop Music.PlayFileLoop ("powerrangers.mp3") elsif mb = 1 and mx >= 376 and mx <= 467 and my >= 4 and my <= 41 then Music.PlayFileStop Music.PlayFileLoop ("lostinspace.mp3") elsif mb = 1 and mx >= 484 and mx <= 575 and my >= 4 and my <= 41 then Music.PlayFileStop Music.PlayFileLoop ("endlesschallenge.mp3") elsif mb = 1 and mx >= 594 and mx <= 643 and my >= 4 and my <= 41 then Music.PlayFileStop end if exit when diff not= 0 end loop loop mousewhere (mx, my, mb) exit when mb = 0 end loop end splash process music (mx, my, mb, cardfont : int) Font.Draw ("Music: Song 1 Song 2 Song 3 Off", 205, 584, cardfont, black) if mb = 1 and mx >= 269 and mx <= 319 and my >= 580 and my <= 597 then Music.PlayFileStop Music.PlayFileLoop ("powerrangers.mp3") elsif mb = 1 and mx >= 339 and mx <= 390 and my >= 580 and my <= 597 then Music.PlayFileStop Music.PlayFileLoop ("lostinspace.mp3") elsif mb = 1 and mx >= 408 and mx <= 460 and my >= 580 and my <= 597 then Music.PlayFileStop Music.PlayFileLoop ("endlesschallenge.mp3") elsif mb = 1 and mx >= 478 and mx <= 502 and my >= 580 and my <= 597 then Music.PlayFileStop end if end music %%%%%%%%%%%%%%%%%%% View.Set ("graphics:800,600") View.Set ("offscreenonly") var mx, my, mb : int var centfont : int := Font.New ("arial black:33") var cardfont : int := Font.New ("arial:12") var namefont : int := Font.New ("arial black:20") var cardback : int := Pic.FileNew ("pics/cardback.bmp") var splashpic : int := Pic.FileNew ("pics/splash.jpg") var arrowfalse : int := Pic.FileNew ("pics/arrowfalse.bmp") var arrowtrue : int := Pic.FileNew ("pics/arrowtrue.bmp") var filenum : int var ch : string var turn : boolean var randcard : int var aicount : int var aibool : boolean var top, left, right, bottom, bluearray, redarray : array 0 .. 2, 1 .. 5 of int var namearray : array 0 .. 2, 1 .. 5 of string var cardboolean, ocardboolean : array 1 .. 5 of boolean var selectnum, cardcount : int var hscore, cscore : int var diff : int := 0 var spotstatus : array 0 .. 4, 0 .. 4 of string var x : array 1 .. 4 of int := init (170, 290, 410, 530) var y : array 1 .. 4 of int := init (485, 325, 165, 5) %%%%%%%%%%%%%%%%%%%% randomize splash (splashpic, mx, my, mb, diff) loop initproc (randcard, aicount, hscore, cscore, selectnum, cardcount, cardboolean, ocardboolean, turn, aibool, spotstatus, top, left, right, bottom) makehands (ch, filenum, randcard, top, left, right, bottom, namearray) cardpicset (bluearray, redarray, namearray) cls drawfill (1, 1, brown, brown) drawgrid (centfont, namefont) drawcards (cardback, cardfont, bluearray, top, left, right, bottom, namearray) loop fork music (mx, my, mb, cardfont) scoredisplay (cscore, hscore, centfont) if turn = true and cardcount not= 9 then selectcard (selectnum, mx, my, mb, cardboolean) gridcard (turn, mx, my, mb, selectnum, cardfont, cardcount, hscore, cscore, spotstatus, namearray, top, left, right, bottom, bluearray, x, y, cardboolean) Pic.Draw (arrowfalse, 300, 500, picCopy) else Pic.Draw (arrowtrue, 300, 500, picCopy) aicard (turn, aibool, aicount, cardfont, cardcount, hscore, cscore, diff, spotstatus, namearray, top, left, right, bottom, redarray, x, y, ocardboolean) end if View.Update exit when cardcount = 9 end loop scoredisplay (cscore, hscore, centfont) drawfillbox (300, 500, 404, 575, brown) View.Update delay (250) if hscore > cscore then Font.Draw ("You Win!", 250, 520, centfont, yellow) elsif hscore = cscore then Font.Draw ("Tie Game", 250, 520, centfont, yellow) elsif hscore < cscore then Font.Draw ("You Lose", 250, 520, centfont, yellow) end if View.Update delay (2000) end loop