<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
  <title>Linux Format forums</title>
  <link>http://linuxformat.com/forums/index.php</link>
  <description>Help, discussion, magazine feedback and more</description>
  <language>english</language>
  <copyright>(c) Copyright Wed May 22, 2013 12:58 pm by Linux Format forums</copyright>
  <managingEditor>webmaster@linuxformat.com</managingEditor>
  <webMaster>webmaster@linuxformat.com</webMaster>
  <pubDate>Wed May 22, 2013 12:58 pm</pubDate>
  <lastBuildDate>Wed May 22, 2013 12:58 pm</lastBuildDate>
  <docs>http://backend.userland.com/rss</docs>
  <generator>phpBB2 RSS Syndication Mod by Lucas</generator>
  <ttl>1</ttl>

  <image>
    <title>Linux Format forums</title>
    <url></url>
    <link>http://linuxformat.com/forums/</link>
    <description>Help, discussion, magazine feedback and more</description>
  </image>

                                      <item>
                                        <title>Another Python Freebie Based On MikeTron...</title>
                                        <link>http://linuxformat.com/forums/viewtopic.php?p=99636#99636</link>
                                        <description>&lt;br /&gt;
                                      Author: &lt;a href='http://linuxformat.com/forums/profile.php?mode=viewprofile&amp;u=58561'&gt;Bazza&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
                                      Posted: Thu Jun 02, 2011 6:56 pm&lt;br /&gt;&lt;br /&gt;
                                      &lt;br /&gt;&lt;br /&gt;
                                      Hi all...&lt;br /&gt;
&lt;br /&gt;
A DEMO to show how to plot XY inside a standard text mode Python&lt;br /&gt;
install. MikeTron gave me the idea of making this into a dreadful game.&lt;br /&gt;
It is primarily to show, using an INKEY$ idea for keyboard control,&lt;br /&gt;
how to plot characters inside a Python shell.&lt;br /&gt;
&lt;br /&gt;
It is assumed that the shell is defaulting at 80 x 24 and Python is 2.6.x&lt;br /&gt;
or greater although it may work in earlier versions.&lt;br /&gt;
&lt;br /&gt;
The INKEY$ function is not perfect but works reasonably well considering&lt;br /&gt;
Python is not able to do this by default.&lt;br /&gt;
&lt;br /&gt;
I take no credit for this function and the pointer to the original is inside&lt;br /&gt;
the code. I do take credit for the plotting method though and shows&lt;br /&gt;
that Python can still do things without all the glitz added.&lt;br /&gt;
&lt;br /&gt;
This plotting method is going to be used in a serious project I have in&lt;br /&gt;
mind.&lt;br /&gt;
&lt;br /&gt;
Enjoy finding simple solutions to often very difficult problems...&lt;br /&gt;
&lt;br /&gt;
Read the code for more information.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;table width=&quot;90%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;3&quot; border=&quot;0&quot; align=&quot;center&quot;&gt;&lt;tr&gt; 	  &lt;td&gt;&lt;span class=&quot;genmed&quot;&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;	  &lt;td class=&quot;code&quot;&gt;&lt;br /&gt;
# SimpleTron2x.py&lt;br /&gt;
#&lt;br /&gt;
# Yes I know it is not much of a game but it is intended to show how to&lt;br /&gt;
# &amp;quot;draw&amp;quot;, AND, to use the keyboard to &amp;quot;draw&amp;quot; inside a standard text mode&lt;br /&gt;
# Python shell.&lt;br /&gt;
#&lt;br /&gt;
# Written in such a way as to easily understand how it works.&lt;br /&gt;
#&lt;br /&gt;
# IMPORTANT NOTE!!! This ASSUMES a standard 80 x 24 shell window.&lt;br /&gt;
#&lt;br /&gt;
# This working idea is copyright, &amp;#40;C&amp;#41;2011, B.Walker, G0LCU.&lt;br /&gt;
# NOW issued as Public Domain to LXF...&lt;br /&gt;
#&lt;br /&gt;
# To run at the prompt...&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; execfile&amp;#40;&amp;quot;/full/path/to/SimpleTron2x.py&amp;quot;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
def main&amp;#40;&amp;#41;&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;import os&lt;br /&gt;
&amp;nbsp; &amp;nbsp;import sys&lt;br /&gt;
&amp;nbsp; &amp;nbsp;import termios&lt;br /&gt;
&amp;nbsp; &amp;nbsp;import tty&lt;br /&gt;
&amp;nbsp; &amp;nbsp;import random&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# A basic clear screen and cursor removal for program start...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;os.system&amp;#40;&amp;quot;clear&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;os.system&amp;#40;&amp;quot;setterm -cursor off&amp;quot;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Make any variables global just for this DEMO &amp;quot;game&amp;quot;...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global screen_array&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global character&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global line&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global position&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global remember_attributes&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global plot&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global inkey_buffer&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global score&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;screen_array=&amp;quot;*&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;character=&amp;quot;a&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;remember_attributes=&amp;quot;&amp;#40;C&amp;#41;2011, B.Walker, G0LCU.&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;line=1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;position=0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;plot=int&amp;#40;random.random&amp;#40;&amp;#41;*4&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;inkey_buffer=0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;score=0&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# This is a working function; something akin to the BASIC INKEY$ function...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Reference&amp;#58;- http&amp;#58;//code.activestate.com/recipes/134892-getch-like-unbuffered-character-reading-from-stdin/&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Many thanks to Danny Yoo for the above code, modified to suit this program...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# In THIS FUNCTION some special keys do a &amp;quot;break&amp;quot; similar to the &amp;quot;Esc&amp;quot; key inside the program.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Be aware of this...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# An inkey_buffer value of 0, zero, generates a &amp;quot;&amp;quot; character and carries on instead of waiting for&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# a valid ASCII key press.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;def inkey&amp;#40;&amp;#41;&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;fd=sys.stdin.fileno&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;remember_attributes=termios.tcgetattr&amp;#40;fd&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;tty.setraw&amp;#40;sys.stdin.fileno&amp;#40;&amp;#41;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;character=sys.stdin.read&amp;#40;inkey_buffer&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;termios.tcsetattr&amp;#40;fd, termios.TCSADRAIN, remember_attributes&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return character&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# The welcome screen.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;SimpleTron2x.py. A simple, odd style, Tron&amp;#40;ish&amp;#41; game.&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;Another DEMO 2D animation for Linux platforms.&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;You control a vehicle leaving a trail behind it.&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;It is NOT always moving, and if it crosses any part&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;of the trail or border, &amp;#40;* characters&amp;#41;, the game&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;is over. It CAN randomly move further than the key&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;presses so do not assume there is a bug... &amp;#58;&amp;#41;&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;Use the Q and A keys to change the direction to&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;up and down, and O and P for left and right.&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;See how long you can survive! Score at the end.&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;print &amp;quot;&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;character=raw_input&amp;#40;&amp;quot;Hit &amp;lt;RETURN/ENTER&amp;gt; to begin... &amp;quot;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Generate the game window as a single text string.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# This assumes a standard 80x24 terminal text window.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Top line.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;while position&amp;lt;=78&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;screen_array=screen_array+&amp;quot;*&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;position=position+1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Next 20 lines.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;while line&amp;lt;=20&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;position=1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;screen_array=screen_array+&amp;quot;*&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;while position&amp;lt;=78&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;screen_array=screen_array+&amp;quot; &amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;position=position+1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;screen_array=screen_array+&amp;quot;*&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;line=line+1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;screen_array=screen_array+&amp;quot;*&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Bottom line.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;position=0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;while position&amp;lt;=78&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;screen_array=screen_array+&amp;quot;*&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;position=position+1&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Store the complete string for future use.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;gamefile=open&amp;#40;&amp;quot;/tmp/TronArray&amp;quot;,&amp;quot;w+&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;gamefile.write&amp;#40;screen_array&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;gamefile.close&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# End of game setup...&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Start of game proper, set the initial position.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;position=&amp;#40;int&amp;#40;random.random&amp;#40;&amp;#41;*60&amp;#41;+890&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;while 1&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Standard clear the terminal window.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;os.system&amp;#40;&amp;quot;clear&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print screen_array&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Add another * when inkey_buffer=0.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;inkey_buffer=int&amp;#40;random.random&amp;#40;&amp;#41;*2&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Use the INKEY$ function to grab an ASCII key.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;character=inkey&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;a&amp;quot;&amp;#58; plot=0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;A&amp;quot;&amp;#58; plot=0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;q&amp;quot;&amp;#58; plot=1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;Q&amp;quot;&amp;#58; plot=1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;o&amp;quot;&amp;#58; plot=2&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;O&amp;quot;&amp;#58; plot=2&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;p&amp;quot;&amp;#58; plot=3&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==&amp;quot;P&amp;quot;&amp;#58; plot=3&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Esc key to exit the loop...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if character==chr&amp;#40;27&amp;#41;&amp;#58; break&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if plot==0&amp;#58; position=position+80&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if plot==1&amp;#58; position=position-80&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if plot==2&amp;#58; position=position-1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if plot==3&amp;#58; position=position+1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if position&amp;gt;=1759&amp;#58; position=1759&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if position&amp;lt;=0&amp;#58; position=0&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;gamefile=open&amp;#40;&amp;quot;/tmp/TronArray&amp;quot;,&amp;quot;r+&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Check for a * character in the array and......&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;gamefile.seek&amp;#40;position&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if gamefile.read&amp;#40;1&amp;#41;==&amp;quot;*&amp;quot;&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# ......exit if one exists at that point.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;gamefile.close&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print &amp;quot;Game Over! You scored&amp;quot;,score,&amp;quot;\b...&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;break&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;gamefile.seek&amp;#40;position&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;gamefile.write&amp;#40;&amp;quot;*&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Now get the whole array.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;gamefile.seek&amp;#40;0&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;screen_array=gamefile.read&amp;#40;1760&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;gamefile.close&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# End of screen_array update per plot.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;score=score+1&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Reset the cursor, etc...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;os.system&amp;#40;&amp;quot;setterm -cursor on&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;character=raw_input&amp;#40;&amp;quot;Have another game? &amp;#40;Y/N&amp;#41;&amp;#58;- &amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;if character==&amp;quot;y&amp;quot;&amp;#58; main&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;if character==&amp;quot;Y&amp;quot;&amp;#58; main&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;if character==&amp;quot;&amp;quot;&amp;#58; main&amp;#40;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
main&amp;#40;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
# SimpleTron2x.py end of game.&lt;br /&gt;
# Enjoy finding simple solutions to often very difficult questions.&lt;br /&gt;
&lt;/td&gt;	&lt;/tr&gt;&lt;/table&gt;&lt;span class=&quot;postbody&quot;&gt;</description>
                                        <comments>http://linuxformat.com/forums/viewtopic.php?p=99636#99636</comments>
                                        <author>Bazza</author>
                                        <pubDate>Thu Jun 02, 2011 6:56 pm</pubDate>
                                        <guid isPermaLink="true">http://linuxformat.com/forums/viewtopic.php?p=99636#99636</guid>
                                      </item></channel></rss>