The third (and maybe final? TBD) part of this miniseries will introduce MOVEM5. Unlike stationary trees with no threat in MOVEM4, there are enemies in MOVEM5. The enemies move up and down. In this simple game, there are no weapons, you just have to avoid the enemies as you try to head home. All the enemies are red. Once touch, and it's game over, so be careful.
Once again, you are controlling the π character.
I left in the "quick exit" key, just press the Plus key to exit at any time.
Code:
EXPORT MOVEM5()
BEGIN
// Version 5
// 20140209
// Get home avoid foes (4)
// Set up the screen
RECT();
// Cursor set up  player
// Two sets of coordinates, original (A,B) and updated (C,D) are
// used
LOCAL A,B,C,D;
A:=0;
B:=60;
C:=0;
D:=60;
TEXTOUT_P("π",A,B,2);
// Ememy Setup
LOCAL estr;
LOCAL ey1A,ey2A,ey3A,ey4A;
LOCAL ex1A,ex2A,ex3A,ex4A;
LOCAL ey1B,ey2B,ey3B,ey4B;
// Set delay paramenters
// This is compensate because the HP Prime acts so fast
// In the emulator I have 4000, 3000, 2000, and 1000 for
// d1, d2, d3, and d4, respectively.
LOCAL d1:=200,d2:=150,d3:=100,d4:=50;
// Initialize position of the enemies
ex1A:=80;
ex2A:=RANDINT(11,17)*10;
ex3A:=RANDINT(20,26)*10;
ex4A:=280;
ey1A:=0;
ey2A:=228;
ey3A:=RANDINT(0,19)*12;
ey4A:=RANDINT(0,19)*12;
estr:=CHAR(9991); //enemy
TEXTOUT_P(estr,ex1A,ey1A,2,#FF0000);
TEXTOUT_P(estr,ex2A,ey2A,2,#FF1000);
TEXTOUT_P(estr,ex3A,ey3A,2,#FF2000);
TEXTOUT_P(estr,ex4A,ey4A,2,#FF3000);
// House setup  our goal
LOCAL hx,hy,hstr;
hx:=RANDINT(29,31)*10;
hy:=RANDINT(0,19)*12;
hstr:=CHAR(9820); // castle
TEXTOUT_P(hstr,hx,hy,2,#964B00h);
// Main loop
REPEAT
// Count down the delay timers
d1:=d11;
d2:=d21;
d3:=d31;
d4:=d41;
// Get keystroke from the player
K:=GETKEY;
// Potentially update C and D
IF K==7 AND A>0 THEN
C:=A10; D:=B;
END;
IF K==8 AND A<310 THEN
C:=A+10; D:=B;
END;
IF K==12 AND B<228 THEN
C:=A; D:=B+12;
END;
IF K==2 AND B>0 THEN
C:=A; D:=B12;
END;
// Animate the enemies
// Enemy 1: moves up. Wraps around the screen
IF d1==0 THEN
// refresh delay rate  4000 in the emulator
d1:=200;
// move the enemy
ey1B:=ey1A+12;
IF ey1B>240 THEN
ey1B:=0;
END;
END;
// Draw a blank box of the previous position
RECT_P(ex1A,ey1A,ex1A+10,ex1A+12);
// Draw the enemy at its new location
TEXTOUT_P(estr,ex1A,ey1B,2,#FF0000h);
ey1A:=ey1B;
// Enemy 2  moving down
IF d2==0 THEN
// Delay rate of 3000 is used in the emulator
d2:=150;
ey2B:=ey2A12;
IF ey2B<0 THEN
ey2B:=240;
END;
END;
RECT_P(ex2A,ey2A,ex2A+10,ey2A+12);
TEXTOUT_P(estr,ex2A,ey2B,2,#FF0000h);
ey2A:=ey2B;
// Enemy 3  moving up
IF d3==0 THEN
// Delay rate of 2000 used in the emulator
d3:=100;
ey3B:=ey3A+12;
IF ey3B>240 THEN
ey3B:=0;
END;
END;
RECT_P(ex3A,ey3A,ex3A+10,ex3A+12);
TEXTOUT_P(estr,ex3A,ey3B,2,#FF0000h);
ey3A:=ey3B;
// Enemy 4  moving down
IF d4==0 THEN
// Delay rate of 1000 used in the emulator
d4:=50;
ey4B:=ey4A12;
IF ey4B<0 THEN
ey4B:=240;
END;
END;
RECT_P(ex4A,ey4A,ex4A+10,ey4A+12);
TEXTOUT_P(estr,ex4A,ey4B,2,#FF0000h);
ey4A:=ey4B;
// Did we hit the enemy?
LOCAL collide:=0;
IF (C==ex1A) AND (D==ey1B) THEN
collide:=1
END;
IF (C==ex2A) AND (D==ey2B) THEN
collide:=1
END;
IF (C==ex3A) AND (D==ey3B) THEN
collide:=1
END;
IF (C==ex4A) AND (D==ey4B) THEN
collide:=1
END;
// We hit the enemy  not good
IF collide==1 THEN
MSGBOX("OUCH! :(");
KILL;
END;
// Move the player
RECT_P(A,B,A+10,B+12);
TEXTOUT_P("π",C,D,2);
// Draw Static Objects  The House
TEXTOUT_P(hstr,hx,hy,2,#964B00h);
// Prepare for next keystroke
A:=C; B:=D;
// Arrived home? (or hit the Plus key)
UNTIL K==50 OR (C==hx AND D==hy);
MSGBOX("Home! :)");
END;
Until next time,
Eddie
This blog is property of Edward Shore. 2014
A blog is that is all about mathematics and calculators, two of my passions in life.
Subscribe to:
Post Comments (Atom)
How to Rotate Graphs
How to Rotate Graphs Introduction The key is to use parametric equations in our rotation. Using the rotation angle θ, the rotatio...

Casio fx991EX Classwiz Review Casio FX991EX The next incarnation of the fx991 line of Casio calculators is the fx991 EX. ...

TI36X Pro Review This is a review of the TI36X Pro Calculator by Texas Instruments. History Originally, this was the TI30X Pro that w...

One of the missing features of the TI82/83/84 family is the ability to convert between bases. Here are two programs in TIBasic to help...
Syntax error on LOCAL commands with the firmware 8151.
ReplyDeleteZuhtu,
DeleteI was able to transfer the program and able to run it without problems. Did the error point to any specific LOCAL error? You can send me what you have to ews31415@gmail.com if you wish.
Thanks,
Eddie