HP Prime for All

English  Русский 
MOVEM games-app screenshot}}
Name MOVEM
Description Simple game where the objective is to collect dollar signs (coins) to unlock the boundary at the top of the screen to allow access to the goal. Trees block your progress. Avoid the purple foes at all times, one touch and it's over! One purple foe jumps around randomly while two fly horizontal.
Author Eddie Shore

Source code (download):

Source code formatted by website engine

EXPORT MOVEM7() BEGIN // Version 7 // 2014-02-16 // Collect 10 coins to unlock the goal // A status screen is added on the bottom // Bottom row is not avialable for play // This version puts it all together: // Coins, trees, and enemies // Game introduction MSGBOX("Collect all 10 $ signs to unlock the goal! Avoid the purple enemies!"); // Clear the screen RECT(); // Cursor set up LOCAL A, B, C, D; A := 150; B := 216; C := 150; D := 216; TEXTOUT_P("π", A, B, 2); // Draw Coins LOCAL costr, L2, L3, cx, cy, I, coins; coins := 10; // counter L2 := RANDINT(10, 0, 31) * 10; // x coin L3 := RANDINT(10, 1, 17) * 12; // y coin costr := CHAR(36); // $ sign FOR I FROM 1 TO 10 DO cx := L2(I); cy := L3(I); TEXTOUT_P(costr, cx, cy, 2, #FF00h); END; // Draw Trees // Trees Setup LOCAL tstr, L0, L1, S, tx, ty, J; S := 10; L0 := RANDINT(S, 0, 31) * 10; // x tree L1 := RANDINT(S, 1, 17) * 12; // y tree tstr := CHAR(8857); // tree // Make sure trees and coins do not // appear in the same place. // If there is a conflict, the coin wins. // Middle FOR I FROM 2 TO S-1 DO FOR J FROM 1 TO 10 DO IF (L0(I) == L2(J)) AND (L1(I) == L3(J)) THEN // Use CONCAT and SUB L0 := CONCAT(SUB(L0, 1, I-1), SUB(L0, I+1, S)); L1 := CONCAT(SUB(L1, 1, I-1), SUB(L1, I+1, S)); // Length of L0 and L1 decrease by 1 S := S-1; END; END; END; // Left Side FOR J FROM 1 TO 10 DO IF (L0(1) == L2(J)) AND (L1(1) == L3(J)) THEN L0 := SUB(L0, 2, S); L1 := SUB(L1, 2, S); S := S-1; END; END; // Right Side FOR J FROM 1 TO 10 DO IF (L0(S) == L2(J)) AND (L1(S) == L3(J)) THEN L0 := SUB(L0, 1, S-1); L1 := SUB(L1, 1, S-1); S := S-1; END; END; // Draw the forest FOR I FROM 1 TO S DO tx := L0(I); ty := L1(I); TEXTOUT_P(tstr, tx, ty, 2, #8000h); END; // Ememy Setup LOCAL estr, d1, d2; LOCAL ey1A, ey2A, ey3A; LOCAL ex1A, ex2A, ex3A; LOCAL ey1B, ey2B, ey3B; LOCAL ex1B, ex2B, ex3B; // Delay d1 := 120; d2 := 20; // Enemy 1 jumps to random places // Enemy 2 flies left to right // Enemy 3 flies right to left ex1A := RANDINT(0, 31) * 10; ey1A := RANDINT(1, 17) * 12; ex2A := −10; ey2A := 96; ex3A := 330; ey3A := 96; estr := CHAR(9991); //enemy TEXTOUT_P(estr, ex1A, ey1A, 2, #6000FFh); TEXTOUT_P(estr, ex2A, ey2A, 2, #8000FFh); TEXTOUT_P(estr, ex3A, ey3A, 2, #8000FFh); // House setup LOCAL hx, hy, hstr; hx := RANDINT(0, 31) * 10; hy := 0; hstr := CHAR(9820); // castle TEXTOUT_P(hstr, hx, hy, 2, #964B00h); // Lock setup LOCAL lock := 1; // Movement REPEAT // Delay Counter d1 := d1-1; d2 := d2-1; // Press an Arrow Key K := GETKEY; IF K == 7 AND A > 0 THEN C := A-10; D := B; END; IF K == 8 AND A < 310 THEN C := A+10; D := B; END; IF K == 12 AND B < 216 THEN C := A; D := B+12; END; IF K == 2 AND B > 0 THEN C := A; D := B-12; END; // Move the Enemies IF d1 == 0 THEN d1 := 120; // Enemy 1 ex1B := RANDINT(0, 31) * 10; ey1B := RANDINT(2, 17) * 12; END; IF d2 == 0 THEN d2 := 20; // Enemy 2 ex2B := ex2A+10; ey2B := ey2A; IF ex2B > 330 THEN ex2B := −10; ey2B := RANDINT(1, 17) * 12; END; // Enemy 3 ex3B := ex3A-10; ey3B := ey3A; IF ex3B < −10 THEN ex3B := 330; ey3B := RANDINT(1, 17) * 12; END; END; // Clear previous enemy spot // Fixed objects will be drawn later RECT_P(ex1A, ey1A, ex1A+10, ey1A+12); RECT_P(ex2A, ey2A, ex2A+10, ey2A+12); RECT_P(ex3A, ey3A, ex3A+10, ey3A+12); // Draw new enemy positions TEXTOUT_P(estr, ex1B, ey1B, 2, #6000FFh); ex1A := ex1B; ey1A := ey1B; TEXTOUT_P(estr, ex2B, ey2B, 2, #8000FFh); ex2A := ex2B; ey2A := ey2B; TEXTOUT_P(estr, ex3B, ey3B, 2, #8000FFh); ex3A := ex3B; ey3A := ey3B; // Bump in the boundary? LOCAL collide := 0; IF D == hy AND lock == 1 THEN collide := 1; // No BREAK command because there is no // FOR loop to break out of END; // Ran into a tree? FOR I FROM 1 TO S DO IF C == L0(I) AND D == L1(I) THEN collide := 1; BREAK; // BREAK needed because we have a FOR loop END; END; IF collide == 1 THEN C := A; D := B; END; // Got hit by the enemy? LOCAL death; IF (C == ex1B) AND (D == ey1B) THEN death := 1; END; IF (C == ex2B) AND (D == ey2B) THEN death := 1; END; IF (C == ex3B) AND (D == ey3B) THEN death := 1; END; IF death == 1 THEN MSGBOX("OUCH! :("); BREAK; END; // Collect the coin? FOR I FROM 1 TO 10 DO IF C == L2(I) AND D == L3(I) THEN L2(I) := -1; L3(I) := -1; // Remove coin from play coins := coins-1; BREAK; END; END; // Are all the coins collected? IF coins == 0 THEN lock := 0 END; // Player RECT_P(A, B, A+10, B+12); TEXTOUT_P("π", C, D, 2); // Draw a boundary IF coins ≠ 0 THEN LINE_P(0, 12, 319, 12, #FF0000h); ELSE // Unlock boundary, all coins collected LINE_P(0, 12, 319, 12, #FF00h); END; // Draw the Goal TEXTOUT_P(hstr, hx, hy, 2, #964B00h); // Draw the Forest FOR I FROM 1 TO S DO tx := L0(I); ty := L1(I); TEXTOUT_P(tstr, tx, ty, 2, #8000h); END; // Draw the Coins FOR I FROM 1 TO 10 DO cx := L2(I); cy := L3(I); // Don't draw at -1 IF L2(I) ≠ −1 AND L3(I) ≠ -1 THEN TEXTOUT_P(costr, cx, cy, 2, #FF00h); END; END; // Draw Status Screen RECT_P(0, 217, 319, 239); TEXTOUT_P("Coins Left: "+ STRING(IP(coins)), 0, 228, 2); IF lock == 1 THEN TEXTOUT_P("LOCKED", 260, 228, 2, #FFh); END; // Prepare for the next move A := C; B := D; // Arrived home? UNTIL K == 50 OR (C == hx AND D == hy); // Exit Conditions // Plus Exit IF K == 50 THEN MSGBOX("Program Terminated."); END; // Home Exit IF C == hx AND D == hy THEN MSGBOX("Home! :) "+CHAR(9829)); // CHAR(9829) produces a heart END; END;

Comments