'=========================================================================== ' Subject: CRAZY GAME OF SNAKES & LADDERS Date: 01-13-97 (01:13) ' Author: Jim Emptage Code: QB, QBasic, PDS ' Origin: 75504.2526@compuserve.com Packet: GAMES.ABC '=========================================================================== ' just a bit of madness from Jim Emptage of Rouge Valley Software ' a crazy game of snakes and ladders ' you do not actually play the game ..... just kind of bet on the winner ' still, it does contain a cute dice roller and some neat paint ideas ' NOT TO BE USED FOR GAMBLING ' if passed around, leave these comments in: thanks ' 75504.2526@compuserve.com DECLARE SUB ENDER () DECLARE SUB jumper1 () DECLARE SUB jumper2 () DECLARE SUB updown () DECLARE SUB movemen () DECLARE SUB roll () DECLARE SUB dilocate () DEFINT A-Z DECLARE SUB mouse (m0%, m1%, m2%, m3%) DECLARE SUB hidemouse () DECLARE SUB showmouse () DECLARE SUB getmxy (mx%, my%) DECLARE SUB setmxy (mx%, my%) DECLARE SUB mborders (x%, y%, h%, v%) DECLARE FUNCTION mbtn% () COMMON SHARED dr1%, dr2%, dix1, diy1, dix2, diy2, p1x, p1y, p2x, p2y, player, phit COMMON SHARED t1x, t1y, t2x, t2y, www 99 CLEAR RESTORE DIM SHARED pic1(5, 5) AS INTEGER DIM SHARED pic2(5, 5) AS INTEGER ON ERROR GOTO errs CLS SCREEN 13 n = 15 xmin = 10 xmax = 310 ymin = 10 ymax = 170 FOR mx = xmin TO xmax STEP n FOR my = ymin TO ymax STEP n px = mx - (mx MOD n) py = my - (my MOD n) IF px > xmin - 1 AND py > ymin - 1 AND px < xmax + 1 AND py < ymax + 1 THEN LINE (px, py)-(px + n, py + n), 220, B END IF NEXT NEXT LINE (280, 180)-(300, 180), 1 LINE (280, 188)-(300, 188), 4 FOR mx = 15 TO 315 FOR my = 15 TO 165 IF POINT(mx, my) = 0 THEN clr = 17 + (ABS(mx - 160) + ABS(my - 100)) MOD 10 IF clr < 22 THEN clr = (27 - clr) + 17 PSET (mx, my), clr ELSE clr = 17 + ABS(((mx MOD 17) - (my MOD 37)) MOD 13) IF clr < 22 THEN clr = (30 - clr) + 17 PSET (mx, my), clr END IF NEXT NEXT t1x = 20 * 15 t1y = 10 * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 pic1(mx, my) = POINT(t1x + 5 + mx, t1y + 1 + my) NEXT NEXT t2x = 20 * 15 t2y = 10 * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 pic2(mx, my) = POINT(t2x + 5 + mx, t2y + 9 + my) NEXT NEXT COLOR 1 LOCATE 23, 30 PRINT "ladder"; COLOR 4 LOCATE 24, 30 PRINT "snake"; TYPE squares x1 AS INTEGER y1 AS INTEGER x2 AS INTEGER y2 AS INTEGER END TYPE DIM SHARED sam(23) AS squares FOR m = 1 TO 23 READ sam(m).x1: READ sam(m).y1: READ sam(m).x2: READ sam(m).y2: IF m < 13 THEN CIRCLE (sam(m).x1 * 15 + 7, sam(m).y1 * 15 + 7), 3, 1 PAINT (sam(m).x1 * 15 + 7, sam(m).y1 * 15 + 7), 1, 1 CIRCLE (sam(m).x2 * 15 + 7, sam(m).y2 * 15 + 7), 3, 1 PAINT (sam(m).x2 * 15 + 7, sam(m).y2 * 15 + 7), 1, 1 LINE (sam(m).x1 * 15 + 7, sam(m).y1 * 15 + 7)-(sam(m).x2 * 15 + 7, sam(m).y2 * 15 + 7), 1 END IF IF m >= 13 THEN CIRCLE (sam(m).x1 * 15 + 7, sam(m).y1 * 15 + 7), 3, 4 PAINT (sam(m).x1 * 15 + 7, sam(m).y1 * 15 + 7), 4, 4 CIRCLE (sam(m).x2 * 15 + 7, sam(m).y2 * 15 + 7), 3, 4 PAINT (sam(m).x2 * 15 + 7, sam(m).y2 * 15 + 7), 4, 4 LINE (sam(m).x1 * 15 + 7, sam(m).y1 * 15 + 7)-(sam(m).x2 * 15 + 7, sam(m).y2 * 15 + 7), 4 END IF NEXT xmin = 10 xmax = 310 ymin = 10 ymax = 170 COLOR 40 LOCATE 1, 30 PRINT "R-V-S "; COLOR 50 PRINT "1997"; COLOR 90 LOCATE 1, 1 PRINT " ANY KEY TO START "; WHILE INKEY$ <> "" WEND DO LOOP WHILE INKEY$ = "" COLOR 0 LOCATE 1, 1 PRINT " "; CALL dilocate LINE (20 * 15 + 5, 10 * 15 + 1)-(20 * 15 + 10, 10 * 15 + 6), 14, BF LINE (20 * 15 + 5, 10 * 15 + 9)-(20 * 15 + 10, 10 * 15 + 14), 13, BF p1x = 20 p1y = 10 p2x = 20 p2y = 10 DO CALL movemen IF www = 1 THEN EXIT DO LOOP LOCATE 25, 1 COLOR 100 PRINT " PRESS 1-AGAIN 2-QUIT"; DO C$ = INPUT$(1) IF C$ = "2" THEN CALL ENDER IF C$ = "1" THEN GOTO 99 LOOP ladders: DATA 17,10,16,9 DATA 11,10,13,8 DATA 7,10,10,6 DATA 4,9,1,7 DATA 15,9,17,7 DATA 4,8,2,6 DATA 6,7,5,3 DATA 15,7,13,4 DATA 1,5,2,4 DATA 9,5,12,2 DATA 16,5,18,3 DATA 2,3,4,2 snakes: DATA 2,1,15,10 DATA 8,1,8,3 DATA 17,1,16,6 DATA 20,2,20,4 DATA 10,2,13,7 DATA 13,3,20,7 DATA 8,4,3,6 DATA 13,5,5,9 DATA 2,7,1,10 DATA 18,8,19,10 DATA 19,5,14,8 100 END errs: CLS SCREEN 0 WIDTH 80, 25 COLOR 7 PRINT "error of unknown type ...." PRINT "are files s&l.grh and s&l4.exe (or bas) both present?" PRINT "all files in the current dos directory?" PRINT PRINT "press any key ... to exit" WHILE INKEY$ <> "" WEND DO LOOP WHILE INKEY$ = "" RESUME 100 SUB dilocate PSET (15, 166) DRAW "s60dbr" dix1 = POINT(0) diy1 = POINT(1) DRAW "c4blud2r2u2l2" PSET (47, 166) DRAW "s60dbr" dix2 = POINT(0) diy2 = POINT(1) DRAW "c4blud2r2u2l2" END SUB SUB ENDER CLS SCREEN 0 WIDTH 80, 25 COLOR 7 LOCATE 5, 1 PRINT "Rouge Valley Software" PRINT "1997" PRINT "75504.2526@compuserve.com" PRINT "" PRINT "Programmed in Qbasic: a great hobby!" PRINT "" PRINT "Press Any Key ..." WHILE INKEY$ <> "" WEND DO LOOP WHILE INKEY$ = "" END END SUB SUB jumper1 FOR mx = 0 TO 5 FOR my = 0 TO 5 PSET (t1x + 5 + mx, t1y + 1 + my), pic1(mx, my) NEXT NEXT t1x = p1x * 15 t1y = p1y * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 pic1(mx, my) = POINT(t1x + 5 + mx, t1y + 1 + my) PSET (t1x + 5 + mx, t1y + 1 + my), 14 NEXT NEXT phit = 0 END SUB SUB jumper2 FOR mx = 0 TO 5 FOR my = 0 TO 5 PSET (t2x + 5 + mx, t2y + 9 + my), pic2(mx, my) NEXT NEXT t2x = p2x * 15 t2y = p2y * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 pic2(mx, my) = POINT(t2x + 5 + mx, t2y + 9 + my) PSET (t2x + 5 + mx, t2y + 9 + my), 13 NEXT NEXT phit = 0 END SUB SUB movemen IF chxx = 0 THEN t1x = p1x * 15 t1y = p1y * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 PSET (t1x + 5 + mx, t1y + 1 + my), pic1(mx, my) NEXT NEXT END IF SOUND 40, 1 LOCATE 24, 20 COLOR 14 PRINT "Player 1"; CALL roll 'IF p1x = 20 AND p1y = 10 THEN LINE (20 * 15 + 5, 10 * 15 + 1)-(20 * 15 + 10, 10 * 15 + 6), 0, BF drt1 = dr1% + dr2% FOR mover = 0 TO drt1 t1x = p1x * 15 t1y = p1y * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 pic1(mx, my) = POINT(t1x + 5 + mx, t1y + 1 + my) PSET (t1x + 5 + mx, t1y + 1 + my), 14 NEXT NEXT IF p1y = 1 AND p1x = 1 THEN LOCATE 1, 1 COLOR 14 PRINT "Winner Player 1" www = 1 EXIT SUB END IF WHILE INKEY$ <> "" WEND SLEEP 1 IF mover = drt1 THEN GOTO 2 FOR mx = 0 TO 5 FOR my = 0 TO 5 PSET (t1x + 5 + mx, t1y + 1 + my), pic1(mx, my) NEXT NEXT p1x = p1x - 1 2 IF p1x = 0 THEN p1x = 20 p1y = p1y - 1 END IF NEXT mover player = 1 CALL updown IF phit = 1 THEN CALL jumper1 IF chxx = 0 THEN t2x = p2x * 15 t2y = p2y * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 PSET (t2x + 5 + mx, t2y + 9 + my), pic2(mx, my) NEXT NEXT END IF 'IF p2x = 20 AND p2y = 10 THEN LINE (20 * 15 + 5, 10 * 15 + 9)-(20 * 15 + 10, 10 * 15 + 14), 0, BF SOUND 40, 1 LOCATE 24, 20 COLOR 13 PRINT "Player 2"; CALL roll drt2 = dr1% + dr2% FOR mover = 0 TO drt2 t2x = p2x * 15 t2y = p2y * 15 FOR mx = 0 TO 5 FOR my = 0 TO 5 pic2(mx, my) = POINT(t2x + 5 + mx, t2y + 9 + my) PSET (t2x + 5 + mx, t2y + 9 + my), 13 NEXT NEXT IF p2y = 1 AND p2x = 1 THEN LOCATE 1, 1 COLOR 13 PRINT "Winner Player 2" www = 1 EXIT SUB END IF WHILE INKEY$ <> "" WEND SLEEP 1 IF mover = drt2 THEN GOTO 3 FOR mx = 0 TO 5 FOR my = 0 TO 5 PSET (t2x + 5 + mx, t2y + 9 + my), pic2(mx, my) NEXT NEXT p2x = p2x - 1 3 IF p2x = 0 THEN p2x = 20 p2y = p2y - 1 END IF NEXT mover chxx = 1 player = 2 CALL updown IF phit = 1 THEN CALL jumper2 END SUB SUB roll FOR zzz = 1 TO 5 RANDOMIZE TIMER dr1% = CINT(1 + (RND * 5)) dr2% = CINT(1 + (RND * 5)) LINE (dix1 - 11, diy1 - 11)-(dix1 + 11, diy1 + 11), 0, BF LINE (dix2 - 11, diy2 - 11)-(dix2 + 11, diy2 + 11), 0, BF SELECT CASE dr1% CASE 1 CIRCLE (dix1, diy1), 3, 4 CASE 2 CIRCLE (dix1, diy1 + 8), 3, 4 CIRCLE (dix1, diy1 - 8), 3, 4 CASE 3 CIRCLE (dix1, diy1), 3, 4 CIRCLE (dix1 - 8, diy1 - 8), 3, 4 CIRCLE (dix1 + 8, diy1 + 8), 3, 4 CASE 4 CIRCLE (dix1 - 8, diy1 - 8), 3, 4 CIRCLE (dix1 + 8, diy1 + 8), 3, 4 CIRCLE (dix1 - 8, diy1 + 8), 3, 4 CIRCLE (dix1 + 8, diy1 - 8), 3, 4 CASE 5 CIRCLE (dix1 - 8, diy1 - 8), 3, 4 CIRCLE (dix1 + 8, diy1 + 8), 3, 4 CIRCLE (dix1 - 8, diy1 + 8), 3, 4 CIRCLE (dix1 + 8, diy1 - 8), 3, 4 CIRCLE (dix1, diy1), 3, 4 CASE 6 CIRCLE (dix1 - 8, diy1 - 8), 3, 4 CIRCLE (dix1 + 8, diy1 + 8), 3, 4 CIRCLE (dix1 - 8, diy1 + 8), 3, 4 CIRCLE (dix1 + 8, diy1 - 8), 3, 4 CIRCLE (dix1 - 8, diy1), 3, 4 CIRCLE (dix1 + 8, diy1), 3, 4 END SELECT PAINT (dix1 - 11, diy1 - 11), 7, 4 SELECT CASE dr2% CASE 1 CIRCLE (dix2, diy2), 3, 4 CASE 2 CIRCLE (dix2, diy2 + 8), 3, 4 CIRCLE (dix2, diy2 - 8), 3, 4 CASE 3 CIRCLE (dix2, diy2), 3, 4 CIRCLE (dix2 - 8, diy2 - 8), 3, 4 CIRCLE (dix2 + 8, diy2 + 8), 3, 4 CASE 4 CIRCLE (dix2 - 8, diy2 - 8), 3, 4 CIRCLE (dix2 + 8, diy2 + 8), 3, 4 CIRCLE (dix2 - 8, diy2 + 8), 3, 4 CIRCLE (dix2 + 8, diy2 - 8), 3, 4 CASE 5 CIRCLE (dix2 - 8, diy2 - 8), 3, 4 CIRCLE (dix2 + 8, diy2 + 8), 3, 4 CIRCLE (dix2 - 8, diy2 + 8), 3, 4 CIRCLE (dix2 + 8, diy2 - 8), 3, 4 CIRCLE (dix2, diy2), 3, 4 CASE 6 CIRCLE (dix2 - 8, diy2 - 8), 3, 4 CIRCLE (dix2 + 8, diy2 + 8), 3, 4 CIRCLE (dix2 - 8, diy2 + 8), 3, 4 CIRCLE (dix2 + 8, diy2 - 8), 3, 4 CIRCLE (dix2 - 8, diy2), 3, 4 CIRCLE (dix2 + 8, diy2), 3, 4 END SELECT PAINT (dix2 - 11, diy2 - 11), 7, 4 SOUND 40, 1 NEXT END SUB SUB updown phit = 0 FOR nn = 1 TO 23 IF player = 1 THEN IF sam(nn).x1 = p1x AND sam(nn).y1 = p1y THEN p1x = sam(nn).x2 p1y = sam(nn).y2 phit = 1 END IF END IF IF player = 2 THEN IF sam(nn).x1 = p2x AND sam(nn).y1 = p2y THEN p2x = sam(nn).x2 p2y = sam(nn).y2 phit = 1 END IF END IF NEXT nn END SUB