Type in Game: PONG! (or, something close)

WP_20160911_21_48_56_Pro (3)Today's type in game for HB Tiny Basic is a PONG! variant.  I cannot take full credit for this one, I found the original on a Japanese educational site devoted to teaching microcontroller programming, using Half-Byte's Tiny Basic(!) (a variation of it, anyway) and for basic electronics.  The original was written in a variant of HB Tiny Basic and also used a 10k potentiometer for the controller.  I fixed a couple of bugs, got it to work with Nunchuk AND squeezed into a somewhat smaller memory footprint.

The game has a little bit of intelligence, it does a decent job of trying to guess where the ball will go, but, it is not perfect and it is possible to win the game.  There are some nice uses of the language, such as trying to include something like an OR statement when figuring out where the ball is going and takes advantage of an undocumented 'feature' of LINE: if you specify '2' as the 'color' parameter, it simply inverses the pixels in the line.  This eliminates the need for multiple statements to draw and erase the paddles.  Quite clever.

Gameplay is super simple: the computer ALWAYS serves, the score goes to nine and stops. You are always on the right. You use the thumb stick up and down to control your paddle.

Weird things are likely to happen, it is not perfect and there's no more room for improvement (challenge?)

Anyway, have fun!

10 CLS:A=0:B=0:W=48:H=32
30 BOX 0,0,W,H,1
40 U=H/2-3:V=U
50 LINE W-5,U,W-5,U+5,2:LINE 4,V,4,V+5,2
60 CURSOR 8,1:? A:IF A=9 STOP
70 CURSOR 3,1:? B:IF B=9 STOP
80 D=1:E=1:IF (U+V)&1 E=-1
90 X=5:Y=V+3:SET X,Y
100 C=50
110 IF C>0 C=C-1:GOTO 240
130 X=X+D
140 IF X=0 A=A+1:GOTO 60
150 IF X=W B=B+1:GOTO 60
160 IF X=W-6 IF Y>=U IF Y<=U+6 D=-D:TONE 440,100
170 IF X=5 IF Y>=V IF Y<=V+6 D=-D:TONE 440,100
180 Y=Y+E
190 IF Y=1 E=-E
200 IF Y=H-1 E=-E
210 IF X=W-6 IF Y=U IF E=1 E=-1
220 IF X=W-6 IF Y=U+5 IF E=-1 E=1
230 SET X,Y
240 LINE W-5,U,W-5,U+5,2
250 U=H-2-PAD(1)/8
260 IF U<0 U=0
270 IF U>H-6 U=H-6
280 LINE W-5,U,W-5,U+5,2:LINE 4,V,4,V+5,2
300 IF D=1 GOTO 370
310 IF X>=28 GOTO 370
320 IF X=27 IF A<=B GOTO 370
330 IF E=1 Q=Y+X-4:IF Q>=H Q=32-H
340 IF E=0 Q=Y-X+4:IF Q<0 Q=-Q
350 IF Q<V+3 IF V>1 V=V-1
360 IF Q>V+3 IF V<25 V=V+1
370 LINE 4,V,4,V+5,2
400 DELAY 20:GOTO 110


HB Tiny Basic Type in Game: Hurkle

For those of you who are old enough to know and remember the TRS-80, Cromemco or Altair will remember the game of Hurkle.

WP_20160908_23_16_10_Pro (2)A Hurkle is a legendary beast that, even today, remains highly elusive creature.  So elusive, in fact, that few have seen a Hurkle and lived to tell about it.  Of course, you, our intrepid adventurer, are different.  For, you, you have HALF-BYTE'S Tiny Basic and an Arduino or compatible microcontroller at your disposal.  An arsenal worthy of such of hunt.

Our Hurkle adventure takes place on a 10 by 10 grid.  You have to find the creature by deducing its where abouts on the 10 by 10 grid. Unfortunately for you, you will have from five to twenty moves in which to find the creature. Each time your adventure begins, your time is recalculated. This makes the level of difficulty even higher. You will, of course, through the use of the microcontroller, be told which direction you must travel.  Your grid follows a North-South, East-West pattern.  The X axis is West to East and Y axis is North to South. 

This simple game is rather difficult to play.  Sure, there is a way to cheat, but I'll let you figure that out. And, once you do, you should just type NEW and move on to something else.

This game was originally published by the People's Computer Company in Menlo Park California. I have adapted it from the Big Book of Computer Games, published in the early 1970's.

NOTE: I had originally posted a version of the game, as part of a sample code page. The listing was broken and the game did not work correctly, as published.  This one does.  Apologies for that.

Below is the HB Tiny Basic listing.

10  CLS: ?"HURKLE"
99  # Converted to TINY BASIC by George Gray
110 N=RND(10)+5
120 G=10
210 ?
220 ? "A hurkle is hiding on a ",G," by ",G," grid."
230 A = RND(G)
240 B = RND(G)
310 FOR K=1 TO N
320 ? "Guess #",K
330 ?"X=";: INPUT X
335 ?"Y=";: INPUT Y
340 IF ABS(X-A)+ABS(Y-B)=0 GOTO 500
350 # ? INFO
360 GOSUB 610
380 NEXT K
420 ? "Sorry, that's ",N," guesses."
430 ? "The hurkle is at ",A,",",B
450 ? "Let's play again. Hurkle is hiding."
470 GOTO 285
500 ? "You found him in ",K," guesses!"
530 FOR I=1 TO 10
532 TONE 1000,75
534 NEXT I
540 GOTO 440
610 ? "Go ";
620 IF Y=B GOTO 670
630 IF Y<B GOTO 660
640 ? "South "
650 GOTO 670
660 ? "North "
670 IF X=A GOTO 720
680 IF X<A GOTO 710
690 ? "West "
700 GOTO 720
710 ? "East "
720 ?""


Mario and iPhone 7...Pokemon and Apple Watch

Apple had its September press event to announce Apple Watch, Series 2, iOS 10 and iPhone 7.  But, perhaps the biggest thing announced at the event was a game.

Early on in the event, Tim Cook said that there were over 500,000 games in the app store, but that one had been missing. Rather, one character had been missing...MARIO. And, with that, he introduced Shigeru Miyamoto, the creator of Mario.

Mr. Miyamoto explained the new game while a demo was being played on the big screen.  This Mario game looks and sounds like a Wii U game, but is controlled via touch on the iPhone or iPad.  You use a single finger to control Mario's jumps...the longer you hold your finger down, the higher he jumps. 

While the game looked great, the game play is like a neutered Super Mario Brothers 2D side scroller. Neutered in that it appeared that Mario only goes in one direction in single hand play.  The goal is to collect as many coins as you can and raise the end of level flag, before the time runs out. 

More importantly, the game will NOT be a 'freemium' game in the traditional sense. You only pay one time, there are no in game purchases.  There's no having to wait two hours for your lives to replenish.  It is a nice change from the current game mobile game model.

Now, for the other announcements, and I'm not going into detail as it has already been covered else where.

Apple Watch 2 will be out in September and will be faster and more responsive.  Oh, and Pokemon GO! is coming to the Apple Watch.  With some health monitoring additions, this looks pretty decent.

iPhone 7, though, is what I am more excited to talk about. 

Now, before I go on, let me say that I am still not an Apple fan and I LOVE my Windows Mobile 10 phone(s). 

So, what has me excited about the iPhone 7?  Well, even though it isn't a huge, earth shattering advance in mobile technology, the camera, faster processor and MICROSOFT have me excited for the new iPhone. 

The iPhone 7 will feature a new image sub system, new API's and better optics. In addition, iPhone 7Plus, the phablet edition, will feature TWO 12 mp cameras in addition to the front camera.  The new image processor enables the phone to record in 4K video as well.

Here are some of the nice new photo related features, from Apple:

  • New Apple-designed Image Signal Processor, which processes over 100 billion operations on a single photo in as little as 25 milliseconds, resulting in incredible photos and videos;
  • New 7-megapixel FaceTime HD camera with wide color capture, advanced pixel technology and auto image stabilization for even better selfies; and
  • New Quad-LED True Tone flash that is 50 percent brighter than iPhone 6s including an innovative sensor that detects the flickering in lights and compensates for it in videos and photos.

Iapple-iphone7plus-zoomn addition to the photo features, Microsoft's entire suite of apps that are on the iPhone mean that I can continue using my Microsoft services and apps with my Windows 10 desktop just as seamlessly as I can, now, with my Windows Mobile phone.

There are other things, like the subtle changes to iOS and to the phone chassis itself.

There are things I don't like, such as the removal of the headphone jack, inability to upgrade storage via SD card, no way to project the phone to another screen (at least, I haven't seen this) and the lack of home screen tiles...a feature I've really grown to love on my Windows Mobile phone.  In fact, the lack of live tiles is almost a deal breaker for me. Almost.

For now, I am on the verge of mothballing my Windows Mobile phone and going Apple again.  I'm going to have play with one for a bit.   But, today's announcements look encouraging.  Of course, if I wait a year, I may like iPhone 8 more...


We finally made ‘the trip’…to Cedar Point

WP_20160824_17_37_05_ProMy oldest son, Chase, is a theme park junkie.  He always has been.  Like myself. Like my father. It was prevalent on his mother’s side as well. She loved them, so did her father.  For the first few years of Chase’s life, we only went to Busch Gardens, in Williamsburg, Virginia.  When he got old enough to start riding the kiddie rides, we began getting season passes to Kings Dominion, a theme park just north of Richmond, Virginia.  Chase always had a fascination with rollercoasters, playing the game ‘Rollercoaster Tycoon’ on our computer. It was an impetus behind his desire to learn to read.

Once he actually rode one, though, he became obsessed with the rollercoaster. His first one was the Barnstormer, 4EC3E5D0-4C3E-47C8-9BA0-B64E95AB6678 (1)which was—oddly enough—at Disney World in Florida. From that point on…and once he could read…he started learning all he could about the various rollercoasters in Kings Dominion and Busch Gardens.  Riding each one with him, as was able to ride them, was such a thrill.  Not only for the ride itself, but seeing his reaction.  The sheer joy he got from riding them.  The sense of accomplishment when he could, finally, ride that ‘big boy’ coaster or the one that had tallest inversion or this or that.  It was just as much fun for me seeing his reaction as it was for him to ride them.

Indeed, when he was able to ride the Hypersonic XLC at Kings Dominion, you could not smack that smile from his face.  See, this thing was a launch coaster, went straight up and straight down. The whole ride was done in just seconds. It looked menacing.  His sense of accomplishment was off the charts.  This particular rollercoaster, though, did not become a favorite. The next time he rode it, it gave him a really bad headache.  I felt horrible for that.  The rollercoaster was dismantled shortly after that anyway. But, that first ride…I don’t think I have ever seen that much enthusiasm, joy and wonder from him.  It was awesome.   He hasn’t been that way since. Oh, sure, there were times where he came close, but nothing has really matched that … until recently.

WP_20160824_18_33_30_ProBefore I share that, though, lets continue with his journey into rollercoaster enthusiasm excess.

Every vacation we had was planned around some kind of amusement or theme park trip.  Be it to the great land of of Orlando, Myrtle Beach South Carolina, or where ever, there was an amusement park close by.  We hit parks like Disney World, Carowinds in Charlotte, the two in Virginia, Six Flags America, small ones like Family Kingdom, the Pavillion and Hard Rock Park (all in Myrtle Beach) and Trimpers and Jolly Roger in Ocean City, Maryland.  Recently, we made it to Dorney Park in Pennsylvania, but that was just a day trip. There was one park, though, that remained elusive.

All through his young life, Chase would read all he could and watch all he could about rollercoasters.  He read about the tallest, the fastest, the longest, etc.  One park kept showing up with all of these wonderful machines:  Cedar Point in Sandusky, Ohio. 

He desperately wanted to go.  For years, my late wife and I had planned to take Chase.  We even got as far, about ten years ago, as reserving a room near Sandusky.  Unfortunately, life kept getting in the way and we never made that trip.

In 2010, Chase’s mom passed away.  Early that year, before she became ill, we had talked about going in 2011.  As her health declined, so did our plans, once again. I took Chase and his cousin on a sort of rollercoaster ‘tour’ that summer, but Sandusky wasn’t in the cards.

Two years ago, Chase got his drivers license and decided to go to work.  He fulfilled one of his lifetime dreams and worked as a ‘scare actor’ at Kings Dominion.  He is really good at it too and is doing it again for the third year.  WP_20160824_18_06_23_Pro

Chase and I had talked about going to Sandusky last year, but, as was always the case, it just did not work out.  But, as he always has, Chase did something I never expected.

He gave me one of the best Christmas presents ever:  a rollercoaster tour that was to include Sandusky.  We started out by going to Carowinds, a place special to us both for reason I won’t go into now.  Sentiment aside, it really is a nice park and, if you get there, ride the Fury 325…one of the best rollercoasters ever.

As summer went on, we kept hitting this snag or that and our trips were delayed or altered quite a bit. Our trip to Dorney Park was to be a two day trip, but turned out to be a day trip…quite a drive to ride a handful of coasters, but the time we spent in the car was well worth it.

So, getting back to the sense of awe and joy he had with the Hypersonic…well, he showed it once more when we actually pulled into the parking lot.  I felt it too.  After about twelve years of trying, we finally made it. Walking through that turnstile, seeing the old Carousel and, looking to our left, the bus used for the Hallow weekends and seeing the Raptor…well, seeing the look on his face…was priceless. Even at 19, that sense of wonder shone through his very adult face.  My eight year old boy from 2005 was with me once more.  We were both quite, walking around, taking it in.  The park was not busy and we were able to ride one of the coaster he had only dreamt of riding just a few years ago…the Raptor. 

The next day, we spent walking around, riding the coasters, taking photos (that was me) and not believing we were actually there. Fortunately, the park was not busy and we were able to walk on to most of the coasters.  Millenium Force has to be one of the smoothest rides ever. Exciting, fast, TALL…this was THE coaster he wanted to ride. Of all the coasters anywhere, this was the one he had talked about the most, since he had first seen an on ride video.  Getting to ride it, for the first time with him, that was special.

We spent that day, not really saying much, but bonding and have a great time.  The place is massive and we have to go again. But, any other visit there will not be the same or as special as this one.  Sure, it will be great to have my other two sons and my wife with me (I was lucky to have another wife who also loves the parks, she’s pretty awesome) but this visit, well…after so much anticipation…well, it was just special.

WP_20160826_12_38_25_ProPerhaps the most ironic thing was that it ended up with Chase taking ME instead of me taking him.  And that’s pretty damn cool.


More type in goodness…Half-Byte Tiny Basic type in game, Zapp the Moon Man, take 2

zappthemoonmanRelease three of Half-Byte Tiny Basic ate up about eight more bytes of memory than the previous release, so there are now 938 bytes free for user code to reside.  My last version of Zapp the Moon Man—previously unpublished—featured the Moon man’s ability to move down the screen and attack as well as the user’s ability to move the cannon back and forth.  Sadly, for this release, I’ve had to remove the downward mobility of the Moon Man, but I have left in the user’s ability to move and also made the ‘hit box’ better, resulting in a somewhat easier game play.

This game shows off just how versatile Tiny Basic can be, how speedy the ATMega 328 is and how quickly Tiny Basic can interpret your code.

At any one time in the game, both your cannon and the Moon Man can be moving as well as the torpedo you are shooting at the moon man.  Three objects to track on the screen. In interpreted BASIC. Running on a microcontroller that was meant for turning relays on and off, not playing video games. And, it does it rather smoothly.  The jerkiness that is there is there by design, to mimmick those games from the 1970’s.

The game is pretty primitive. It resembles Space Invaders, but there is only one ‘invader’, the Moon Man, and there are no protective shields…heck, the Moon Man does not even shoot at you…yet.  It does feature some primitive, character based, animated graphics.  The Moon Man sort of looks like a Space Invader. As it moves back and forth, its antennae move and its ‘feet’ swivel side to side.  You use a Wii Nunchuck’s thumb stick to move and the Z button to fire your torpedo. The game keeps a score…10 points for every Moon Man you destroy.  You hear a launch tone when you fire and, when you hit a Moon Man, you see a little explosion like effect. And…that’s it.  Simple and not earth shattering (that will be in a future update.)

So, with out any further delay…(One note: when typing in the code, do not put in extra spaces.  Use one space between the line number and the code, and one space before line numbers in things like GOTO or GOSUB.  The listing below inserted additional spacing, you can ignore it.)

100 CLS:ECHO 0
110 A=0:B=0:O=75
120 X=10:Y=10:Z=5:F=0:D=1:S=0
140 LINE 0,48,80,48,1
150 GOSUB 700
160 GOSUB 900
170 P=PAD(3):Q=PAD(0)
180 IF P=1 F=1:TONE 200,100
190 IF F=1 GOSUB 1000
192 IF Q>200 GOSUB 600
194 IF Q<100 GOSUB 600
200 A=A+D
210 IF A>15 D=-1
220 IF A<3 D=1
230 GOSUB 1200
290 GOTO 140
600 CURSOR X,Y:?"  ";
610 IF Q>200 I=1
620 IF Q<200 I=-1
630 X=X+I
640 IF X<2 X=2
650 IF X>17 X=17
660 GOSUB 900
900 CURSOR X,Y:?CHR(150);
1000 CURSOR X,Z:?"|";:DELAY 20:CURSOR X,Z:?" ";:DELAY 20
1050 Z=Z-1
1060 IF Z=0 IF A=X Z=5: GOTO 1100
1070 IF Z=0 IF A=X+1 Z=5: GOTO 1100
1080 IF Z=0 Z=5:F=0
1110 ?"***";:DELAY 180:CURSOR A,B:?"XXX";:DELAY 170:CURSOR A,B:?"   ";:A=0:B=0:F=0
1190 S=S+10
1200 CURSOR 0,5:?"SCORE:",S;


If you come up with any improvements, optimization, etc., please let us know.

Oh, one big caveat…as it does use up all but 15 bytes of RAM, your keyboard buffer is limited to 15 bytes…Tiny Basic does not set aside a dedicate memory for keyboard input. It dwindles as you use up memory.  So, keep in mind that you may have to delete a long line and split it up—which will use at least three bytes plus the content of the line.

UPDATE:  Since this was posted, I have made a few improvements to the game AND saved even more RAM, about 90 bytes total.  Among the improvements: a random speed for the moon man, the ability of the moon man to descend on you can lose the game.

The updated code is below.

100 CLS
110 A=0:B=0:O=RND(100)
120 X=10:Y=8:Z=5:F=0:D=1:S=0
140 LINE 0,48,80,48,1
150 GOSUB 700
160 GOSUB 900
170 P=PAD(3):Q=PAD(0)
180 IF P=1 F=1:TONE 200,100
190 IF F=1 GOSUB 1000
192 IF Q>200 I=1:GOSUB 600
194 IF Q<100 I=-1:GOSUB 600
200 A=A+D
210 IF A>16 D=-1:B=B+1:if b>=Y CLS:?"You lose!":Delay 3000:goto 100
220 IF A<1 D=1
230 GOSUB 1200
290 GOTO 140
600 CURSOR X,Y:?"  ";:X=X+I
640 IF X<2 X=2
650 IF X>17 X=17
660 GOSUB 900
900 CURSOR X,Y:?CHR(150);
1000 CURSOR X,Z:?"|";:DELAY 20:CURSOR X,Z:?" ";:DELAY 20
1010 Z=Z-1
1060 IF X=A IF Z=B GOTO 1100
1070 IF X=A+1 IF Z=B GOTO 1100
1080 IF Z=0 Z=5:F=0
1110 ?"***";:DELAY 180:CURSOR A,B:?"XXX";:DELAY 170:CURSOR A,B:?"   ";:A=0:B=0:F=0
1120 Z=5
1190 S=S+10:O=RND(100)
1200 CURSOR 0,5:?"SCORE:",S;