A DEMO to show how to plot XY inside a standard text mode Python
install. MikeTron gave me the idea of making this into a dreadful game.
It is primarily to show, using an INKEY$ idea for keyboard control,
how to plot characters inside a Python shell.

It is assumed that the shell is defaulting at 80 x 24 and Python is 2.6.x
or greater although it may work in earlier versions.

The INKEY$ function is not perfect but works reasonably well considering
Python is not able to do this by default.

I take no credit for this function and the pointer to the original is inside
the code. I do take credit for the plotting method though and shows
that Python can still do things without all the glitz added.

This plotting method is going to be used in a serious project I have in
mind.

# SimpleTron2x.py## Yes I know it is not much of a game but it is intended to show how to# "draw", AND, to use the keyboard to "draw" inside a standard text mode# Python shell.## Written in such a way as to easily understand how it works.## IMPORTANT NOTE!!! This ASSUMES a standard 80 x 24 shell window.## This working idea is copyright, (C)2011, B.Walker, G0LCU.# NOW issued as Public Domain to LXF...## To run at the prompt...# >>> execfile("/full/path/to/SimpleTron2x.py")

# This is a working function; something akin to the BASIC INKEY$ function... # Reference:- http://code.activestate.com/recipes/134892-getch-like-unbuffered-character-reading-from-stdin/ # Many thanks to Danny Yoo for the above code, modified to suit this program... # In THIS FUNCTION some special keys do a "break" similar to the "Esc" key inside the program. # Be aware of this... # An inkey_buffer value of 0, zero, generates a "" character and carries on instead of waiting for # a valid ASCII key press. def inkey(): fd=sys.stdin.fileno() remember_attributes=termios.tcgetattr(fd) tty.setraw(sys.stdin.fileno()) character=sys.stdin.read(inkey_buffer) termios.tcsetattr(fd, termios.TCSADRAIN, remember_attributes) return character

# The welcome screen. print "" print "SimpleTron2x.py. A simple, odd style, Tron(ish) game." print "Another DEMO 2D animation for Linux platforms." print "" print "You control a vehicle leaving a trail behind it." print "" print "It is NOT always moving, and if it crosses any part" print "of the trail or border, (* characters), the game" print "is over. It CAN randomly move further than the key" print "presses so do not assume there is a bug... :)" print "Use the Q and A keys to change the direction to" print "up and down, and O and P for left and right." print "See how long you can survive! Score at the end." print "" character=raw_input("Hit <RETURN/ENTER> to begin... ")

# Store the complete string for future use. gamefile=open("/tmp/TronArray","w+") gamefile.write(screen_array) gamefile.close() # End of game setup...

# Start of game proper, set the initial position. position=(int(random.random()*60)+890) while 1: # Standard clear the terminal window. os.system("clear") print screen_array # Add another * when inkey_buffer=0. inkey_buffer=int(random.random()*2) # Use the INKEY$ function to grab an ASCII key. character=inkey() if character=="a": plot=0 if character=="A": plot=0 if character=="q": plot=1 if character=="Q": plot=1 if character=="o": plot=2 if character=="O": plot=2 if character=="p": plot=3 if character=="P": plot=3 # Esc key to exit the loop... if character==chr(27): break if plot==0: position=position+80 if plot==1: position=position-80 if plot==2: position=position-1 if plot==3: position=position+1 if position>=1759: position=1759 if position<=0: position=0

gamefile=open("/tmp/TronArray","r+") # Check for a * character in the array and...... gamefile.seek(position) if gamefile.read(1)=="*": # ......exit if one exists at that point. gamefile.close() print "Game Over! You scored",score,"\b..." break gamefile.seek(position) gamefile.write("*") # Now get the whole array. gamefile.seek(0) screen_array=gamefile.read(1760) gamefile.close() # End of screen_array update per plot. score=score+1