************************************************* ************************************************* * game.prg 10-10-01 Danny Alvizu * * "ski game" that uses random events to plan a * * course, and user interaction to move a skier * ************************************************* ************************************************* clear clear typeahead set typeahead to 1 ** ski-dude variables ski_dude_x = 40 ski_dude_y = 10 ski_dude_dead = .F. ** global variables nvar_continue = 0 nvar_randnum = "4" nvar_delay = 0 nvar_column = 30 ntemp1 = 0 ntemp2 = 0 ncount = 10000 nvar_rightbound = 60 nvar_char_righbound = 73 nvar_leftbound = 12 nvar_char_leftbound = 12 nscore = 0 * initializes holding rows nvar_row_1 = 0 nvar_row_2 = 0 nvar_row_3 = 0 nvar_row_4 = 0 nvar_row_5 = 0 nvar_row_6 = 0 nvar_row_7 = 0 nvar_row_8 = 0 nvar_row_9 = 0 nvar_row_10 = 0 nvar_row_11 = 0 nvar_row_12 = 0 nvar_row_13 = 0 nvar_row_14 = 0 nvar_row_15 = 0 nvar_row_16 = 0 nvar_row_17 = 0 nvar_row_18 = 0 nvar_row_19 = 0 nvar_row_20 = 0 nvar_row_21 = 0 nvar_row_22 = 0 nvar_row_23 = 0 nvar_row_24 = 0 nvar_row_25 = 0 nvar_row_26 = 0 nvar_row_27 = 0 *** other initialization ** one-time @ 29, 10 say "bottom_border.bmp" bitmap @ 1, 10 say "l-r_border.bmp" bitmap @ 1, 75 say "l-r_border.bmp" bitmap @ 1, 85 say "skilogo.bmp" BITMAP *//////////////////////////////////////* * Show Introduction.. Press any key * *//////////////////////////////////////* @ 10, 30 say "Welcome to Ski Dude" @ 11, 30 say "Made by Danny Alvizu" @ 12, 30 say "(it took 7 months)" wait window @ 5,20 to 13,70 clear @ 10, 30 say "Instructions:" @ 11, 33 say "Right arrow moves right," @ 12, 33 say "Left arrow moves left." @ 13, 33 say "Up arrow ends your game." @ 14, 33 say "You are given a score for each time" @ 15, 33 say "you move down the course WITHOUT" @ 16, 33 say "moving left or right." @ 20, 33 say "Good Luck!" wait window @ 5,20 to 13,70 clear *//////////////////////////////////////* * Begin the Game Loop * *//////////////////////////////////////* do while .not. ski_dude_dead *//////////////////////////////////////* * Where will Course lead? * *//////////////////////////////////////* nvar_randnum = val(str(rand(),10,0)) && gives either a 1.00 or 0.00 if nvar_column = nvar_rightbound .OR. nvar_column = nvar_leftbound ** too far left or right? if nvar_column = nvar_rightbound nvar_column = nvar_column - 1 endif if nvar_column = nvar_leftbound nvar_column = nvar_column + 1 endif else if nvar_randnum = 1 nvar_column = nvar_column + 1 else nvar_column = nvar_column - 1 endif nvar_continue = nvar_continue + 1 endif *//////////////////////////////////////* * Drawing to the screen * *//////////////////////////////////////* * current score @ 1, 14 say "Score: "+str(nscore, 10,0) * the walls! @ 28, nvar_column say "wall.bmp" bitmap @ 28, nvar_column+13 say "wall.bmp" bitmap if nvar_row_27 != 0 @ 27, nvar_row_27 say "wall.bmp" bitmap @ 27, nvar_row_27+13 say "wall.bmp" bitmap endif if nvar_row_26 != 0 @ 26, nvar_row_26 say "wall.bmp" bitmap @ 26, nvar_row_26+13 say "wall.bmp" bitmap endif if nvar_row_25 != 0 @ 25, nvar_row_25 say "wall.bmp" bitmap @ 25, nvar_row_25+13 say "wall.bmp" bitmap endif if nvar_row_24 != 0 @ 24, nvar_row_24 say "wall.bmp" bitmap @ 24, nvar_row_24+13 say "wall.bmp" bitmap endif if nvar_row_23 != 0 @ 23, nvar_row_23 say "wall.bmp" bitmap @ 23, nvar_row_23+13 say "wall.bmp" bitmap endif if nvar_row_22 != 0 @ 22, nvar_row_22 say "wall.bmp" bitmap @ 22, nvar_row_22+13 say "wall.bmp" bitmap endif if nvar_row_21 != 0 @ 21, nvar_row_21 say "wall.bmp" bitmap @ 21, nvar_row_21+13 say "wall.bmp" bitmap endif if nvar_row_20 != 0 @ 20, nvar_row_20 say "wall.bmp" bitmap @ 20, nvar_row_20+13 say "wall.bmp" bitmap endif if nvar_row_19 != 0 @ 19, nvar_row_19 say "wall.bmp" bitmap @ 19, nvar_row_19+13 say "wall.bmp" bitmap endif if nvar_row_18 != 0 @ 18, nvar_row_18 say "wall.bmp" bitmap @ 18, nvar_row_18+13 say "wall.bmp" bitmap endif if nvar_row_17 != 0 @ 17, nvar_row_17 say "wall.bmp" bitmap @ 17, nvar_row_17+13 say "wall.bmp" bitmap endif if nvar_row_16 != 0 @ 16, nvar_row_16 say "wall.bmp" bitmap @ 16, nvar_row_16+13 say "wall.bmp" bitmap endif if nvar_row_15 != 0 @ 15, nvar_row_15 say "wall.bmp" bitmap @ 15, nvar_row_15+13 say "wall.bmp" bitmap endif if nvar_row_14 != 0 @ 14, nvar_row_14 say "wall.bmp" bitmap @ 14, nvar_row_14+13 say "wall.bmp" bitmap endif if nvar_row_13 != 0 @ 13, nvar_row_13 say "wall.bmp" bitmap @ 13, nvar_row_13+13 say "wall.bmp" bitmap endif if nvar_row_12 != 0 @ 12, nvar_row_12 say "wall.bmp" bitmap @ 12, nvar_row_12+13 say "wall.bmp" bitmap endif if nvar_row_11 != 0 @ 11, nvar_row_11 say "wall.bmp" bitmap @ 11, nvar_row_11+13 say "wall.bmp" bitmap endif if nvar_row_10 != 0 @ 10, nvar_row_10 say "wall.bmp" bitmap @ 10, nvar_row_10+13 say "wall.bmp" bitmap endif if nvar_row_9 != 0 @ 9, nvar_row_9 say "wall.bmp" bitmap @ 9, nvar_row_9+13 say "wall.bmp" bitmap endif if nvar_row_8 != 0 @ 8, nvar_row_8 say "wall.bmp" bitmap @ 8, nvar_row_8+13 say "wall.bmp" bitmap endif if nvar_row_7 != 0 @ 7, nvar_row_7 say "wall.bmp" bitmap @ 7, nvar_row_7+13 say "wall.bmp" bitmap endif if nvar_row_6 != 0 @ 6, nvar_row_6 say "wall.bmp" bitmap @ 6, nvar_row_6+13 say "wall.bmp" bitmap endif if nvar_row_5 != 0 @ 5, nvar_row_5 say "wall.bmp" bitmap @ 5, nvar_row_5+13 say "wall.bmp" bitmap endif if nvar_row_4 != 0 @ 4, nvar_row_4 say "wall.bmp" bitmap @ 4, nvar_row_4+13 say "wall.bmp" bitmap endif if nvar_row_3 != 0 @ 3, nvar_row_3 say "wall.bmp" bitmap @ 3, nvar_row_3+13 say "wall.bmp" bitmap endif if nvar_row_2 != 0 @ 2, nvar_row_2 say "wall.bmp" bitmap @ 2, nvar_row_2+13 say "wall.bmp" bitmap endif * the 2,nvar_row_2 say command makes a red blip on the top, * which looks ugly and needs to be erased @ 29, 10 say "bottom_border.bmp" bitmap *//////////////////////////////////////* * Moving previous row to the next * (gotta be a better way) *//////////////////////////////////////* ** very confusing store nvar_row_27 to ntemp1 nvar_row_27 = nvar_column store nvar_row_26 to ntemp2 nvar_row_26 = ntemp1 store nvar_row_25 to ntemp1 nvar_row_25 = ntemp2 store nvar_row_24 to ntemp2 nvar_row_24 = ntemp1 store nvar_row_23 to ntemp1 nvar_row_23 = ntemp2 store nvar_row_22 to ntemp2 nvar_row_22 = ntemp1 store nvar_row_21 to ntemp1 nvar_row_21 = ntemp2 store nvar_row_20 to ntemp2 nvar_row_20 = ntemp1 store nvar_row_19 to ntemp1 nvar_row_19 = ntemp2 store nvar_row_18 to ntemp2 nvar_row_18 = ntemp1 store nvar_row_17 to ntemp1 nvar_row_17 = ntemp2 store nvar_row_16 to ntemp2 nvar_row_16 = ntemp1 store nvar_row_15 to ntemp1 nvar_row_15 = ntemp2 store nvar_row_14 to ntemp2 nvar_row_14 = ntemp1 store nvar_row_13 to ntemp1 nvar_row_13 = ntemp2 store nvar_row_12 to ntemp2 nvar_row_12 = ntemp1 store nvar_row_11 to ntemp1 nvar_row_11 = ntemp2 store nvar_row_10 to ntemp2 nvar_row_10 = ntemp1 store nvar_row_9 to ntemp1 nvar_row_9 = ntemp2 store nvar_row_8 to ntemp2 nvar_row_8 = ntemp1 store nvar_row_7 to ntemp1 nvar_row_7 = ntemp2 store nvar_row_6 to ntemp2 nvar_row_6 = ntemp1 store nvar_row_5 to ntemp1 nvar_row_5 = ntemp2 store nvar_row_4 to ntemp2 nvar_row_4 = ntemp1 store nvar_row_3 to ntemp1 nvar_row_3 = ntemp2 store nvar_row_2 to ntemp2 nvar_row_2 = ntemp1 store nvar_row_1 to ntemp1 * nvar_row_1 = ntemp2 nvar_i = 0 && count timer lpress = .F. && is a key pressed? ** game counter and checks for key press @ ski_dude_y,ski_dude_x say "skidude.bmp" BITMAP clear typeahead && necesary or chrsaw() will return true even if not pressed recently do while nvar_i < ncount nvar_i = nvar_i + 1 if chrsaw() && find if key pressed ** key has been pressed nKey = inkey() if nKey = 4 * right arrow ski_dude_x = ski_dude_x + 1 nvar_i = ncount nscore = nscore - 5 && move score down because of arrow movement endif if nKey = 19 * left arrow ski_dude_x = ski_dude_x - 1 nvar_i = ncount nscore = nscore - 5 endif if nKey = 5 * up arrow pressed, escape sequence start nvar_i = ncount ski_dude_dead = .T. clear endif clear typeahead else * no key press, fall through endif enddo ** end of wait counter ** increase the speed between pauses as time goes on ** (makes it harder by making it faster) ** ncount starts at 10,000 ncount = ncount - 4 ** score counter, increases the scores (nullified above if ski dude moved left or right) nscore = nscore + 5 ** clear the screen (from (2,11)to (28,79)... only parts necesary) @ 2,11 to 29, 75 clear ** end of clear, put ski dude immediately back on @ ski_dude_y,ski_dude_x say "skidude.bmp" BITMAP * see if hit the wall if nvar_row_10 == ski_dude_x .or. nvar_row_10 + 13 == ski_dude_x *mark as dead store .T. to ski_dude_dead clear *give glimpse of dead dude @ ski_dude_y,ski_dude_x say "skidead.bmp" BITMAP nvar_j = 0 do while nvar_j < 80000 nvar_j = nvar_j + 1 && wait counter enddo endif enddo clear @ 3, 5 say "gameover.bmp" bitmap @ 10, 15 say "Your Score: " @ 10, 29 say nscore nvar_k = 0 nvar_l = 0 ** show dead and alive ski dude pictures @ 13, 80 say "skidudelarge.bmp" BITMAP @ 5, 80 say "skideadlarge.bmp" BITMAP @ 5, 100 say "skidudelarge.bmp" BITMAP @ 13, 100 say "skideadlarge.bmp" BITMAP clear typeahead nvar_j = 0 do while nvar_j < 800000 nvar_j = nvar_j + 1 && wait counter enddo clear typeahead wait window clear *//////////////////////////////////////* * Design notes * *//////////////////////////////////////* ** 62 = rightbound for "|| ||", 73 for "x" ** 13 = leftbound ** 29 = bottombound ** 13 = distance between course ** inkey() returns values ** chrsaw() checks to see if key is pressed ** up arrow = 5 ** down arrow = 24 ** right arrow = 4 ** left arrow = 19 ** nvar_row_10 is ski dude default position on y-axis