<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pzwiki.wdka.nl/mw-mediadesign/index.php?action=history&amp;feed=atom&amp;title=HeadlineZapper</id>
	<title>HeadlineZapper - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pzwiki.wdka.nl/mw-mediadesign/index.php?action=history&amp;feed=atom&amp;title=HeadlineZapper"/>
	<link rel="alternate" type="text/html" href="https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=HeadlineZapper&amp;action=history"/>
	<updated>2026-08-05T06:54:40Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=HeadlineZapper&amp;diff=556&amp;oldid=prev</id>
		<title>Michael Murtaugh at 11:15, 21 May 2008</title>
		<link rel="alternate" type="text/html" href="https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=HeadlineZapper&amp;diff=556&amp;oldid=prev"/>
		<updated>2008-05-21T11:15:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:15, 21 May 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= [[HeadlineZapper]] =&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A sample [[PyGame]] application based on the model of a simple [[Finite State Machines|Finite State Machine]] to produce an &amp;quot;RSS-feed reader meets 1980's shoot 'em up&amp;quot; (in 160 lines of code).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A sample [[PyGame]] application based on the model of a simple [[Finite State Machines|Finite State Machine]] to produce an &amp;quot;RSS-feed reader meets 1980's shoot 'em up&amp;quot; (in 160 lines of code).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l97&quot;&gt;Line 97:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 95:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== State Machine ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== State Machine ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;attachment&lt;/del&gt;:&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;headlinezapper_fsm&lt;/del&gt;.png&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Image&lt;/ins&gt;:&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Headlinezapper_fsm&lt;/ins&gt;.png&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Final Code ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Final Code ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Michael Murtaugh</name></author>
	</entry>
	<entry>
		<id>https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=HeadlineZapper&amp;diff=555&amp;oldid=prev</id>
		<title>Michael Murtaugh at 11:13, 21 May 2008</title>
		<link rel="alternate" type="text/html" href="https://pzwiki.wdka.nl/mw-mediadesign/index.php?title=HeadlineZapper&amp;diff=555&amp;oldid=prev"/>
		<updated>2008-05-21T11:13:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= [[HeadlineZapper]] =&lt;br /&gt;
&lt;br /&gt;
A sample [[PyGame]] application based on the model of a simple [[Finite State Machines|Finite State Machine]] to produce an &amp;quot;RSS-feed reader meets 1980's shoot 'em up&amp;quot; (in 160 lines of code).&lt;br /&gt;
&lt;br /&gt;
see also: [[OneLoopDrumMachine]]&lt;br /&gt;
&lt;br /&gt;
from: [[2008_301|Tech Day 3.01]] [[2008_301|Tech Day 3.02]]&lt;br /&gt;
&lt;br /&gt;
== Game Concept ==&lt;br /&gt;
&lt;br /&gt;
Headlines are read from an RSS feed and presented word for word to the player.&lt;br /&gt;
Every now and then a random &amp;quot;noise&amp;quot; word is displayed.&lt;br /&gt;
&lt;br /&gt;
The goal of the game is to correctly &amp;quot;zap&amp;quot; the noise words.&lt;br /&gt;
&lt;br /&gt;
So actually there are three score &amp;quot;events&amp;quot; in the game:&lt;br /&gt;
* If a player presses the &amp;quot;zap&amp;quot; button while a noise word is displayed, their score goes up.&lt;br /&gt;
* If a player presses the &amp;quot;zap&amp;quot; button while a normal word is displayed, their score goes down.&lt;br /&gt;
* If a player does not zap a noise word, the score should go down.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
attachment:basque_thumb.png attachment:green_thumb.png&lt;br /&gt;
attachment:tomato_thumb.png&lt;br /&gt;
&lt;br /&gt;
== Code ==&lt;br /&gt;
&lt;br /&gt;
attachment:headlinezapper_start.zip&lt;br /&gt;
&lt;br /&gt;
attachment:headlinezapper_final.zip&lt;br /&gt;
&lt;br /&gt;
== Starting ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1 ===&lt;br /&gt;
&lt;br /&gt;
To start, we might want to read headlines from a feed, and display the words one by one.&lt;br /&gt;
&lt;br /&gt;
You may want to refer to: [[PythonFeedparser]]&lt;br /&gt;
&lt;br /&gt;
In the simplest case we want to translate from the feedparser feed object ultimately to a flat list of word images that [[PyGame]] can use to draw.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
words = []&lt;br /&gt;
...&lt;br /&gt;
words.append(...)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
words = []&lt;br /&gt;
for e in feed.entries:&lt;br /&gt;
	for w in e.title.split():&lt;br /&gt;
		words.append(w)&lt;br /&gt;
print words&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can prepare each word to be drawn to the screen, so we create a &amp;quot;parallel list&amp;quot; of &amp;quot;wordimages&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
wordimages = []&lt;br /&gt;
for w in words:&lt;br /&gt;
	wordimages.append(font.render(w, True, (255, 255, 255)))&lt;br /&gt;
&lt;br /&gt;
wordindex = 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AND INSIDE THE LOOP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
	# DRAW THE SCREEN&lt;br /&gt;
	screen.fill((0, 0, 0))&lt;br /&gt;
	screen.blit(wordimages[wordindex], (0, 0))&lt;br /&gt;
	pygame.display.flip()&lt;br /&gt;
&lt;br /&gt;
	# ADJUST THE WORDINDEX&lt;br /&gt;
	wordindex += 1&lt;br /&gt;
	if wordindex &amp;amp;gt;= len(words):&lt;br /&gt;
		wordindex = 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
FPS = 30&lt;br /&gt;
SECONDS_PER_WORD = 1.0&lt;br /&gt;
&lt;br /&gt;
frames_per_word = SECONDS_PER_WORD * FPS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
	framecount += 1&lt;br /&gt;
	if (framecount &amp;amp;gt;= frames_per_word):&lt;br /&gt;
		framecount = 0&lt;br /&gt;
		# ADJUST THE WORDINDEX&lt;br /&gt;
		wordindex += 1&lt;br /&gt;
		if wordindex &amp;amp;gt;= len(words):&lt;br /&gt;
			wordindex = 0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== State Machine ===&lt;br /&gt;
&lt;br /&gt;
attachment:headlinezapper_fsm.png&lt;br /&gt;
&lt;br /&gt;
=== Final Code ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import pygame&lt;br /&gt;
from pygame.locals import *&lt;br /&gt;
import sys&lt;br /&gt;
import feedparser&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
pygame.init()&lt;br /&gt;
pygame.font.init() # we need fonts&lt;br /&gt;
pygame.mixer.init() # we need sound&lt;br /&gt;
&lt;br /&gt;
fontpath = &amp;quot;/var/lib/defoma/fontconfig.d/D/[[DejaVu]]-Sans-[[ExtraLight]].ttf&amp;quot;&lt;br /&gt;
url = &amp;quot;http://www.eitb24.com/rss/rss-eitb24-home-en.xml&amp;quot;&lt;br /&gt;
if len(sys.argv) &amp;amp;gt;= 2:&lt;br /&gt;
	url = sys.argv[1]&lt;br /&gt;
size = width, height = 640, 480&lt;br /&gt;
FPS = 30&lt;br /&gt;
SECONDS_PER_WORD = 1.0&lt;br /&gt;
&lt;br /&gt;
frames_per_word = SECONDS_PER_WORD * FPS&lt;br /&gt;
screen = pygame.display.set_mode(size)&lt;br /&gt;
clock = pygame.time.Clock()&lt;br /&gt;
&lt;br /&gt;
feed = feedparser.parse(url)&lt;br /&gt;
sweepdown = pygame.mixer.Sound(&amp;quot;sweep_down_long.wav&amp;quot;)&lt;br /&gt;
mleep = pygame.mixer.Sound(&amp;quot;mleep3.wav&amp;quot;)&lt;br /&gt;
beat1 = pygame.mixer.Sound(&amp;quot;low1.wav&amp;quot;)&lt;br /&gt;
beat2 = pygame.mixer.Sound(&amp;quot;low2.wav&amp;quot;)&lt;br /&gt;
font = pygame.font.Font(fontpath, 36)&lt;br /&gt;
score_font = pygame.font.Font(fontpath, 272)&lt;br /&gt;
&lt;br /&gt;
words = []&lt;br /&gt;
entries = feed.entries[:]&lt;br /&gt;
random.shuffle(entries)&lt;br /&gt;
for e in entries:&lt;br /&gt;
	for w in e.title.split():&lt;br /&gt;
		words.append(w)&lt;br /&gt;
&lt;br /&gt;
wordimages = []&lt;br /&gt;
for w in words:&lt;br /&gt;
	wordimages.append(font.render(w, True, (255, 255, 255)))&lt;br /&gt;
&lt;br /&gt;
wordindex = 0&lt;br /&gt;
framecount = 0&lt;br /&gt;
score = 0&lt;br /&gt;
&lt;br /&gt;
noisewords = &amp;quot;tomato pumpkin cherry Apple Kiwi \&amp;quot;kumquat Banana watermelon Canteloupe CHERRY&amp;quot;.split()&lt;br /&gt;
noisewordimages = []&lt;br /&gt;
for w in noisewords:&lt;br /&gt;
	noisewordimages.append(font.render(w, True, (255, 255, 255)))&lt;br /&gt;
noisewordindex = None&lt;br /&gt;
&lt;br /&gt;
REGULAR = 0&lt;br /&gt;
NOISE = 1&lt;br /&gt;
LOSE = 2&lt;br /&gt;
WIN = 3&lt;br /&gt;
state = 0&lt;br /&gt;
&lt;br /&gt;
(beatframes, beatcount, framesperbeat) = (0, 0, 40)&lt;br /&gt;
&lt;br /&gt;
while 1:&lt;br /&gt;
	# HANDLE EVENTS&lt;br /&gt;
	for event in pygame.event.get():&lt;br /&gt;
		if event.type == pygame.QUIT or \&lt;br /&gt;
		  (event.type == KEYDOWN and event.key == K_ESCAPE):&lt;br /&gt;
			sys.exit()&lt;br /&gt;
		if event.type == KEYDOWN:&lt;br /&gt;
			if event.key == K_f:&lt;br /&gt;
				pygame.display.toggle_fullscreen()&lt;br /&gt;
				&lt;br /&gt;
			if event.key == K_SPACE:&lt;br /&gt;
				if (state == LOSE or state == WIN):&lt;br /&gt;
					pass&lt;br /&gt;
				elif (state == REGULAR):&lt;br /&gt;
					# LOSE, you zapped a normal word!&lt;br /&gt;
					sweepdown.play()&lt;br /&gt;
					state = LOSE&lt;br /&gt;
				else:&lt;br /&gt;
					# WIN, you zapped a noise word&lt;br /&gt;
					mleep.play()&lt;br /&gt;
					state = WIN	&lt;br /&gt;
				&lt;br /&gt;
	########&lt;br /&gt;
	### DRAW THE SCREEN&lt;br /&gt;
	&lt;br /&gt;
	if (state == LOSE):&lt;br /&gt;
		screen.fill((255, 0, 0))&lt;br /&gt;
	elif (state == WIN):&lt;br /&gt;
		screen.fill((0, 255, 0))&lt;br /&gt;
	else:&lt;br /&gt;
		screen.fill((0, 0, 0))&lt;br /&gt;
	&lt;br /&gt;
	# UPDATE / DRAW SCORE&lt;br /&gt;
	score_color = (128, 128, 128)&lt;br /&gt;
	if state == WIN:&lt;br /&gt;
		score_color = (128, 255, 128)&lt;br /&gt;
		score += 1&lt;br /&gt;
	elif state == LOSE:&lt;br /&gt;
		score_color = (255, 128, 128)&lt;br /&gt;
		score -= 1&lt;br /&gt;
		&lt;br /&gt;
	score_surf = score_font.render(str(score), True, score_color)&lt;br /&gt;
	screen.blit(score_surf, (50, 200))&lt;br /&gt;
	&lt;br /&gt;
	if (noisewordindex == None):&lt;br /&gt;
		screen.blit(wordimages[wordindex], (100, 100))&lt;br /&gt;
	else:&lt;br /&gt;
		screen.blit(noisewordimages[noisewordindex], (100, 100))&lt;br /&gt;
	pygame.display.flip()&lt;br /&gt;
&lt;br /&gt;
	beatframes -= 1&lt;br /&gt;
	if beatframes &amp;amp;lt;= 0:&lt;br /&gt;
		beatcount += 1&lt;br /&gt;
		beatframes = framesperbeat&lt;br /&gt;
		if (beatcount % 2):&lt;br /&gt;
			beat1.play()&lt;br /&gt;
		else:&lt;br /&gt;
			beat2.play()&lt;br /&gt;
		&lt;br /&gt;
		framesperbeat -= 0.5 # 0.15&lt;br /&gt;
		frames_per_word -= 0.25 # 0.15&lt;br /&gt;
&lt;br /&gt;
	# ADJUST THE STATE&lt;br /&gt;
	framecount += 1&lt;br /&gt;
	# set the &amp;quot;idle&amp;quot; time depending on state (longer for win and lose)&lt;br /&gt;
	if (state == WIN or state == LOSE):&lt;br /&gt;
		fc = 90&lt;br /&gt;
	else:&lt;br /&gt;
		fc = frames_per_word&lt;br /&gt;
			&lt;br /&gt;
	if (framecount &amp;amp;gt;= fc):&lt;br /&gt;
		framecount = 0&lt;br /&gt;
		# NEXT WORD&lt;br /&gt;
		if (state == NOISE):&lt;br /&gt;
			# GO TO LOSE!&lt;br /&gt;
			state = LOSE&lt;br /&gt;
			sweepdown.play()&lt;br /&gt;
		elif (state == LOSE or state == WIN):&lt;br /&gt;
			noisewordindex = None&lt;br /&gt;
			state = REGULAR&lt;br /&gt;
		else:			&lt;br /&gt;
			if random.randint(0, 8) == 0:&lt;br /&gt;
				# GO TO NOISE STATE&lt;br /&gt;
				state = NOISE&lt;br /&gt;
				noisewordindex = random.randint(0, len(noisewords)-1)&lt;br /&gt;
			else:&lt;br /&gt;
				# STAY IN REGULAR STATE&lt;br /&gt;
				wordindex += 1&lt;br /&gt;
				if wordindex &amp;amp;gt;= len(words):&lt;br /&gt;
					wordindex = 0&lt;br /&gt;
&lt;br /&gt;
	# MANAGE TIMING (ensures we don't go too fast)&lt;br /&gt;
	clock.tick(FPS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
&lt;br /&gt;
* [[TrueType]]&lt;br /&gt;
* [[PythonFeedparser]]&lt;/div&gt;</summary>
		<author><name>Michael Murtaugh</name></author>
	</entry>
</feed>