<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Python port example game proposal</title>
		<link>http://www.allegro.cc/forums/view/608775</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 14 Nov 2011 19:50:09 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I played around with the Python port for a while, and decided to write a small game with it. Here&#39;s what I&#39;ve come up with:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="s">""</span><span class="s">"</span>
<span class="number">   2</span><span class="s">    Allegro Python port game example</span>
<span class="number">   3</span><span class="s">    Author: Jeroen De Busser</span>
<span class="number">   4</span><span class="s">"</span><span class="s">""</span>
<span class="number">   5</span>
<span class="number">   6</span>from allegro import <span class="k3">*</span>
<span class="number">   7</span>from <a href="http://www.delorie.com/djgpp/doc/libc/libc_639.html" target="_blank">random</a> import randint
<span class="number">   8</span>import os
<span class="number">   9</span>
<span class="number">  10</span>
<span class="number">  11</span><span class="k1">class</span> Pallet:
<span class="number">  12</span>    def __init__<span class="k2">(</span>self, x, y, h, w, speed, keyup, keydown, color<span class="k2">)</span><span class="k2">:</span>
<span class="number">  13</span>        self.x, self.y, self.h, self.w, self.speed, self.keyup, self.keydown, self.color <span class="k3">=</span> x, y, h, w, speed, keyup, keydown, color
<span class="number">  14</span>        self.moving <span class="k3">=</span> <span class="n">0</span>
<span class="number">  15</span>
<span class="number">  16</span>    def handle_event<span class="k2">(</span>self, ev<span class="k2">)</span><span class="k2">:</span>
<span class="number">  17</span>        <span class="k1">if</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number">  18</span>            <span class="k1">if</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keyup:
<span class="number">  19</span>                self.moving <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span>
<span class="number">  20</span>            elif ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keydown:
<span class="number">  21</span>                self.moving <span class="k3">=</span> <span class="n">1</span>
<span class="number">  22</span>        elif ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP:
<span class="number">  23</span>            <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keyup <span class="k1">and</span> self.moving <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">)</span> <span class="k1">or</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keydown <span class="k1">and</span> self.moving <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k2">:</span>
<span class="number">  24</span>                self.moving <span class="k3">=</span> <span class="n">0</span>
<span class="number">  25</span>    
<span class="number">  26</span>    def update<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  27</span>        self.y <span class="k3">+</span><span class="k3">=</span> self.moving <span class="k3">*</span> self.speed
<span class="number">  28</span>        <span class="k1">if</span> self.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">:</span>
<span class="number">  29</span>            self.y <span class="k3">=</span> <span class="n">0</span>
<span class="number">  30</span>        elif self.y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> self.h:
<span class="number">  31</span>            self.y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> self.h
<span class="number">  32</span>    
<span class="number">  33</span>    def draw<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  34</span>        <span class="p"># Fill</span>
<span class="number">  35</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_rounded_rectangle"><span class="a">al_draw_filled_rounded_rectangle</span></a><span class="k2">(</span>self.x, self.y, self.x <span class="k3">+</span> self.w, self.y <span class="k3">+</span> self.h, <span class="n">6</span>, <span class="n">6</span>, self.color<span class="k2">)</span>
<span class="number">  36</span>        <span class="p"># Highlight</span>
<span class="number">  37</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_rounded_rectangle"><span class="a">al_draw_filled_rounded_rectangle</span></a><span class="k2">(</span>self.x<span class="k3">+</span><span class="n">2</span>, self.y<span class="k3">+</span><span class="n">2</span>, self.x <span class="k3">+</span> self.w<span class="k3">/</span><span class="n">2</span>, self.y <span class="k3">+</span> self.h-5, <span class="n">4</span>, <span class="n">4</span>, <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  38</span>
<span class="number">  39</span>
<span class="number">  40</span><span class="k1">class</span> Ball:
<span class="number">  41</span>    def __init__<span class="k2">(</span>self, x, y, speed, size, pallets, color<span class="k2">)</span><span class="k2">:</span>
<span class="number">  42</span>        self.x, self.y, self.speed, self.size, self.pallets, self.color <span class="k3">=</span> x, y, speed, size, pallets, color
<span class="number">  43</span>        self.xdir <span class="k3">=</span> randint<span class="k2">(</span><span class="n">0</span>,<span class="n">1</span><span class="k2">)</span>
<span class="number">  44</span>        self.ydir <span class="k3">=</span> randint<span class="k2">(</span><span class="n">0</span>,<span class="n">1</span><span class="k2">)</span>
<span class="number">  45</span>
<span class="number">  46</span>    def update<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  47</span>        new_x <span class="k3">=</span> self.x <span class="k3">+</span> <span class="k2">(</span>self.xdir <span class="k3">-</span> <span class="k1">int</span><span class="k2">(</span>self.xdir <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> self.speed
<span class="number">  48</span>        new_y <span class="k3">=</span> self.y <span class="k3">+</span> <span class="k2">(</span><span class="k1">int</span><span class="k2">(</span>self.ydir <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k3">-</span> self.ydir<span class="k2">)</span> <span class="k3">*</span> self.speed
<span class="number">  49</span>        p <span class="k3">=</span> self.pallets<span class="k2">[</span>self.xdir<span class="k2">]</span> #The pallet <span class="k1">this</span> ball is flying to
<span class="number">  50</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>new_x <span class="k3">&lt;</span><span class="k3">=</span> p.x <span class="k3">+</span> p.w <span class="k1">and</span> self.xdir <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k1">or</span> <span class="k2">(</span>new_x <span class="k3">+</span> self.size <span class="k3">&gt;</span><span class="k3">=</span> p.x <span class="k1">and</span> self.xdir <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">and</span> new_y <span class="k3">+</span> self.size <span class="k3">&gt;</span><span class="k3">=</span> p.y <span class="k1">and</span> new_y <span class="k3">&lt;</span><span class="k3">=</span> p.y <span class="k3">+</span> p.h:
<span class="number">  51</span>            <span class="p">#We hit the pallet</span>
<span class="number">  52</span>            self.xdir <span class="k3">=</span> <span class="k2">(</span>self.xdir <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> % <span class="n">2</span>
<span class="number">  53</span>            new_x <span class="k3">=</span> self.x #Reset the x value
<span class="number">  54</span>            self.speed <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span> #Increase the difficulty
<span class="number">  55</span>        <span class="k1">if</span> new_y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k1">or</span> new_y <span class="k3">+</span> self.size <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">:</span>
<span class="number">  56</span>            <span class="p">#We hit a wall</span>
<span class="number">  57</span>            self.ydir <span class="k3">=</span> <span class="k2">(</span>self.ydir <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> % <span class="n">2</span>
<span class="number">  58</span>            new_y <span class="k3">=</span> self.y #Reset the y value
<span class="number">  59</span>        self.x <span class="k3">=</span> new_x
<span class="number">  60</span>        self.y <span class="k3">=</span> new_y
<span class="number">  61</span>
<span class="number">  62</span>    def draw<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  63</span>        <span class="p">#Fill</span>
<span class="number">  64</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span>self.x <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">2</span>, self.y <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">2</span>, self.size<span class="k3">/</span><span class="n">2</span>, self.color<span class="k2">)</span>
<span class="number">  65</span>        <span class="p">#Highlight</span>
<span class="number">  66</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span>self.x <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">4</span>, self.y <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">4</span>, self.size<span class="k3">/</span><span class="n">6</span>, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">8</span>,<span class="n">0</span>.<span class="n">9</span>,<span class="n">0</span>.<span class="n">8</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  67</span>
<span class="number">  68</span>
<span class="number">  69</span>def main<span class="k2">(</span><span class="k2">)</span><span class="k2">:</span>
<span class="number">  70</span>    <span class="p">#Initialisation</span>
<span class="number">  71</span>    <a href="http://www.allegro.cc/manual/al_install_system"><span class="a">al_install_system</span></a><span class="k2">(</span>ALLEGRO_VERSION_INT, None<span class="k2">)</span>
<span class="number">  72</span>    
<span class="number">  73</span>    w, h <span class="k3">=</span> <span class="n">800</span>, <span class="n">600</span>
<span class="number">  74</span>    <span class="p">#Make lines draw smoother</span>
<span class="number">  75</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLE_BUFFERS, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span>
<span class="number">  76</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLES, <span class="n">4</span>, ALLEGRO_SUGGEST<span class="k2">)</span>
<span class="number">  77</span>    display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>w, h<span class="k2">)</span>
<span class="number">  78</span>    
<span class="number">  79</span>    <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number">  80</span>    <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number">  81</span>    <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number">  82</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number">  83</span>
<span class="number">  84</span>    <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"fixed_font.tga"</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span>
<span class="number">  85</span>
<span class="number">  86</span>    finished <span class="k3">=</span> False
<span class="number">  87</span>    need_redraw <span class="k3">=</span> True
<span class="number">  88</span>    FPS <span class="k3">=</span> <span class="n">60</span>
<span class="number">  89</span>    pallet_w, pallet_h, pallet_speed <span class="k3">=</span> <span class="n">20</span>, <span class="n">80</span>, <span class="n">5</span>
<span class="number">  90</span>    ball_size, ball_speed <span class="k3">=</span> <span class="n">30</span>, <span class="n">4</span>
<span class="number">  91</span>    left_player <span class="k3">=</span> Pallet<span class="k2">(</span><span class="n">0</span>,h<span class="k3">/</span><span class="n">2</span><span class="k3">-</span>pallet_h<span class="k3">/</span><span class="n">2</span>,pallet_h,pallet_w,pallet_speed,ALLEGRO_KEY_W,ALLEGRO_KEY_S,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  92</span>    right_player <span class="k3">=</span> Pallet<span class="k2">(</span>w-pallet_w,h<span class="k3">/</span><span class="n">2</span><span class="k3">-</span>pallet_h<span class="k3">/</span><span class="n">2</span>, pallet_h, pallet_w, pallet_speed, ALLEGRO_KEY_UP,ALLEGRO_KEY_DOWN,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  93</span>    ball <span class="k3">=</span> Ball<span class="k2">(</span>w<span class="k3">/</span><span class="n">2</span>,h<span class="k3">/</span><span class="n">2</span>,ball_speed,ball_size,<span class="k2">[</span>left_player,right_player<span class="k2">]</span>,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  94</span>
<span class="number">  95</span>    timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">/</span>FPS<span class="k2">)</span>
<span class="number">  96</span>
<span class="number">  97</span>    queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number">  98</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span>
<span class="number">  99</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 100</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 101</span>
<span class="number"> 102</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 103</span>
<span class="number"> 104</span>    <span class="k1">while</span> True:
<span class="number"> 105</span>        ev <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 106</span>
<span class="number"> 107</span>        <span class="k1">if</span> need_redraw <span class="k1">and</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 108</span>            <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 109</span>            left_player.draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 110</span>            right_player.draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 111</span>            ball.draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 112</span>            <span class="k1">if</span> <span class="k1">not</span> finished:
<span class="number"> 113</span>                <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span>, w<span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"Player 1: use W and S to move, Player 2: use the up and down arrow keys."</span><span class="k2">)</span>
<span class="number"> 114</span>            else:
<span class="number"> 115</span>                <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span>, w<span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"Press R to reset, ESC to exit."</span><span class="k2">)</span>
<span class="number"> 116</span>            <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 117</span>            redraw <span class="k3">=</span> False
<span class="number"> 118</span>        
<span class="number"> 119</span>        <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue,byref<span class="k2">(</span>ev<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 120</span>
<span class="number"> 121</span>        <span class="k1">if</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 122</span>            left_player.update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 123</span>            right_player.update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 124</span>            ball.update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 125</span>            <span class="k1">if</span> ball.x <span class="k3">+</span> ball.size <span class="k3">&lt;</span> <span class="n">0</span> <span class="k1">or</span> ball.x <span class="k3">&gt;</span> w:
<span class="number"> 126</span>                finished <span class="k3">=</span> True
<span class="number"> 127</span>                <a href="http://www.allegro.cc/manual/al_stop_timer"><span class="a">al_stop_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 128</span>            redraw <span class="k3">=</span> True
<span class="number"> 129</span>        elif <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k1">and</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k1">or</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 130</span>            <span class="k1">break</span>
<span class="number"> 131</span>        elif ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k1">and</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_R:
<span class="number"> 132</span>            ball.x <span class="k3">=</span> w<span class="k3">/</span><span class="n">2</span>
<span class="number"> 133</span>            ball.y <span class="k3">=</span> h<span class="k3">/</span><span class="n">2</span>
<span class="number"> 134</span>            ball.speed <span class="k3">=</span> ball_speed
<span class="number"> 135</span>            <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 136</span>            finished <span class="k3">=</span> False
<span class="number"> 137</span>        else:
<span class="number"> 138</span>            left_player.handle_event<span class="k2">(</span>ev<span class="k2">)</span>
<span class="number"> 139</span>            right_player.handle_event<span class="k2">(</span>ev<span class="k2">)</span>
<span class="number"> 140</span>
<span class="number"> 141</span>    <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 142</span>
<span class="number"> 143</span>
<span class="number"> 144</span><span class="k1">if</span> __name__ <span class="k3">=</span><span class="k3">=</span> <span class="s">'__main__'</span><span class="k2">:</span>
<span class="number"> 145</span>    <span class="p">#Only start the game when this file is executed directly.</span>
<span class="number"> 146</span>    al_main<span class="k2">(</span>main<span class="k2">)</span>
</div></div><p>

The only resource it uses is the fixed_font.tga, found in the examples/data folder. Which will also be the only line of code to be fixed if it would ever get in the examples.<br />Do with it what you want ^^
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Wed, 09 Nov 2011 01:53:37 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Screenshot? (Can&#39;t run it from here on my phone.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Wed, 09 Nov 2011 16:40:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><div class="media-player youtube"><div style="margin: 1em 2em; background: url(/images/movie.png); width: 180px; height: 100px; text-align: center;"><a href="http://www.allegro.cc//www.youtube.com/watch?v=HVXr7S7TcFE" target="_blank"><img src="http://www.allegro.cc//djungxnpq2nug.cloudfront.net/image/object/9/a/9a46a8ee0fe88f5db552d5989ee97a58.jpg" border="0" alt="video" title="Click to play video" /></a></div></div></p><p>Sorry for the jerky quality.</p><p>EDIT: I&#39;m currently putting some new stuff in: Upgrades and maybe an AI
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Wed, 09 Nov 2011 23:25:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I translated your code to a new language I&#39;m developing. Well its less of a full language and more of a new syntax for an old language (scheme).</p><p>Theres nothing super exciting here, just wanted to say I did it and it works. Thanks for the code j-gamer!</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#lang honu</span>
<span class="number">   2</span>
<span class="number">   3</span>require prefix allegro_ racket_allegro_5<span class="k2">;</span>
<span class="number">   4</span>
<span class="number">   5</span><span class="k1">class</span> Pallet<span class="k2">(</span>x y height width speed keyup keydown color<span class="k2">)</span><span class="k2">{</span>
<span class="number">   6</span>  var moving <span class="k3">=</span> <span class="n">0</span>
<span class="number">   7</span>  draw<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">   8</span>    allegro_draw_filled_rounded_rectangle<span class="k2">(</span>x, y, x <span class="k3">+</span> width, y <span class="k3">+</span> height, <span class="n">6</span>, <span class="n">6</span>, color<span class="k2">)</span>
<span class="number">   9</span>    allegro_draw_filled_rounded_rectangle<span class="k2">(</span>x<span class="k3">+</span><span class="n">2</span>, y<span class="k3">+</span><span class="n">2</span>, x <span class="k3">+</span> width<span class="k3">/</span><span class="n">2</span>, y <span class="k3">+</span> height-5, <span class="n">4</span>, <span class="n">4</span>, allegro_map_rgba_f<span class="k2">(</span><span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  10</span>  <span class="k2">}</span>
<span class="number">  11</span>
<span class="number">  12</span>  update<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  13</span>    y <span class="k2">:</span><span class="k3">=</span> y <span class="k3">+</span> moving <span class="k3">*</span> speed
<span class="number">  14</span>    <span class="k1">if</span> y <span class="k3">&lt;</span> <span class="n">0</span> then <span class="k2">{</span>
<span class="number">  15</span>      y <span class="k2">:</span><span class="k3">=</span> <span class="n">0</span>
<span class="number">  16</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  17</span>      <span class="n">0</span>
<span class="number">  18</span>    <span class="k2">}</span>
<span class="number">  19</span>    var max <span class="k3">=</span> allegro_get_display_height<span class="k2">(</span>allegro_get_current_display<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> height
<span class="number">  20</span>    <span class="k1">if</span> y <span class="k3">&gt;</span> max then <span class="k2">{</span>
<span class="number">  21</span>      y <span class="k2">:</span><span class="k3">=</span> max
<span class="number">  22</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  23</span>      <span class="n">0</span>
<span class="number">  24</span>    <span class="k2">}</span>
<span class="number">  25</span>  <span class="k2">}</span>
<span class="number">  26</span>
<span class="number">  27</span>  handle_event<span class="k2">(</span>event<span class="k2">)</span><span class="k2">{</span>
<span class="number">  28</span>    match event with
<span class="number">  29</span>    <span class="k2">(</span>allegro_KeyboardEvent type source timestamp display keycode unicode modifiers repeat<span class="k2">)</span><span class="k2">{</span>
<span class="number">  30</span>      <span class="k1">if</span> type <span class="k3">=</span> <span class="s">'KeyDown then {</span>
<span class="number">  31</span><span class="s">        if keycode = keyup then {</span>
<span class="number">  32</span><span class="s">          moving := -1</span>
<span class="number">  33</span><span class="s">        } else {</span>
<span class="number">  34</span><span class="s">          0</span>
<span class="number">  35</span><span class="s">        }</span>
<span class="number">  36</span><span class="s">        if keycode = keydown then {</span>
<span class="number">  37</span><span class="s">          moving := 1</span>
<span class="number">  38</span><span class="s">        } else {</span>
<span class="number">  39</span><span class="s">          0</span>
<span class="number">  40</span><span class="s">        }</span>
<span class="number">  41</span><span class="s">      } else {</span>
<span class="number">  42</span><span class="s">          0</span>
<span class="number">  43</span><span class="s">      }</span>
<span class="number">  44</span><span class="s">      if type = '</span>KeyUp then <span class="k2">{</span>
<span class="number">  45</span>        <span class="k1">if</span> keycode <span class="k3">=</span> keyup <span class="k1">or</span> keycode <span class="k3">=</span> keydown then <span class="k2">{</span>
<span class="number">  46</span>          moving <span class="k2">:</span><span class="k3">=</span> <span class="n">0</span>
<span class="number">  47</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  48</span>          <span class="n">0</span>
<span class="number">  49</span>        <span class="k2">}</span>
<span class="number">  50</span>      <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  51</span>        <span class="n">0</span>
<span class="number">  52</span>      <span class="k2">}</span>
<span class="number">  53</span>    <span class="k2">}</span>
<span class="number">  54</span>  <span class="k2">}</span>
<span class="number">  55</span><span class="k2">}</span>
<span class="number">  56</span>
<span class="number">  57</span><span class="k1">class</span> Ball<span class="k2">(</span>x y speed size pallets color<span class="k2">)</span><span class="k2">{</span>
<span class="number">  58</span>  var xdir <span class="k3">=</span> <span class="n">1</span>
<span class="number">  59</span>  var ydir <span class="k3">=</span> <span class="n">1</span>
<span class="number">  60</span>  draw<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  61</span>    allegro_draw_filled_circle<span class="k2">(</span>x <span class="k3">+</span> size<span class="k3">/</span><span class="n">2</span>, y <span class="k3">+</span> size<span class="k3">/</span><span class="n">2</span>, size<span class="k3">/</span><span class="n">2</span>, color<span class="k2">)</span>
<span class="number">  62</span>    allegro_draw_filled_circle<span class="k2">(</span>x <span class="k3">+</span> size<span class="k3">/</span><span class="n">4</span>, y <span class="k3">+</span> size<span class="k3">/</span><span class="n">4</span>, size<span class="k3">/</span><span class="n">6</span>, allegro_map_rgb_f<span class="k2">(</span><span class="n">0</span>.<span class="n">8</span>,<span class="n">0</span>.<span class="n">9</span>,<span class="n">0</span>.<span class="n">8</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  63</span>  <span class="k2">}</span>
<span class="number">  64</span>
<span class="number">  65</span>  reverseDirection<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  66</span>    xdir <span class="k2">:</span><span class="k3">=</span> <span class="n">1</span> <span class="k3">-</span> xdir
<span class="number">  67</span>  <span class="k2">}</span>
<span class="number">  68</span>
<span class="number">  69</span>  right<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  70</span>    <span class="k1">if</span> xdir <span class="k3">=</span> <span class="n">0</span> then <span class="k2">{</span>
<span class="number">  71</span>      <span class="n">1</span>
<span class="number">  72</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  73</span>      <span class="n">0</span>
<span class="number">  74</span>    <span class="k2">}</span>
<span class="number">  75</span>  <span class="k2">}</span>
<span class="number">  76</span>
<span class="number">  77</span>  up<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  78</span>    <span class="k1">if</span> ydir <span class="k3">=</span> <span class="n">0</span> then <span class="k2">{</span>
<span class="number">  79</span>      <span class="n">1</span>
<span class="number">  80</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number">  81</span>      <span class="n">0</span>
<span class="number">  82</span>    <span class="k2">}</span>
<span class="number">  83</span>  <span class="k2">}</span>
<span class="number">  84</span>
<span class="number">  85</span>  update<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  86</span>    var new_x <span class="k3">=</span> x <span class="k3">+</span> <span class="k2">(</span>xdir <span class="k3">-</span> right<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">*</span> speed
<span class="number">  87</span>    var new_y <span class="k3">=</span> y <span class="k3">+</span> <span class="k2">(</span>up<span class="k2">(</span><span class="k2">)</span> <span class="k3">-</span> ydir<span class="k2">)</span> <span class="k3">*</span> speed
<span class="number">  88</span>    var p <span class="k3">=</span> pallets<span class="k2">[</span>xdir<span class="k2">]</span> #The pallet <span class="k1">this</span> ball is flying to
<span class="number">  89</span>    <span class="n">0</span>
<span class="number">  90</span>
<span class="number">  91</span>    <span class="c">// printf("p.x ~a p.width ~a new_x ~a xdir ~a new_y ~a size ~a p.y ~a p.height ~a\n", p.x, p.width, new_x, xdir, new_y, size, p.y, p.height)</span>
<span class="number">  92</span>    <span class="c">// printf("p.width is ~a\n", p.width)</span>
<span class="number">  93</span>    <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>new_x <span class="k3">&lt;</span><span class="k3">=</span> p.x <span class="k3">+</span> p.width <span class="k1">and</span> xdir <span class="k3">=</span> <span class="n">0</span><span class="k2">)</span> <span class="k1">or</span>
<span class="number">  94</span>        <span class="k2">(</span>new_x <span class="k3">+</span> size <span class="k3">&gt;</span><span class="k3">=</span> p.x <span class="k1">and</span> xdir <span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">and</span>
<span class="number">  95</span>        new_y <span class="k3">+</span> size <span class="k3">&gt;</span><span class="k3">=</span> p.y <span class="k1">and</span> new_y <span class="k3">&lt;</span><span class="k3">=</span> p.y <span class="k3">+</span> p.height then <span class="k2">{</span>
<span class="number">  96</span>
<span class="number">  97</span>        <span class="n">0</span>
<span class="number">  98</span>        <span class="p">#We hit the pallet</span>
<span class="number">  99</span>        xdir <span class="k2">:</span><span class="k3">=</span> <span class="k2">(</span>xdir <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> % <span class="n">2</span>
<span class="number"> 100</span>        new_x <span class="k2">:</span><span class="k3">=</span> x #Reset the x value
<span class="number"> 101</span>        speed <span class="k2">:</span><span class="k3">=</span> speed <span class="k3">+</span> <span class="n">0</span>.<span class="n">3</span> #Increase the difficulty
<span class="number"> 102</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 103</span>      <span class="n">0</span>
<span class="number"> 104</span>    <span class="k2">}</span>
<span class="number"> 105</span>
<span class="number"> 106</span>    <span class="k1">if</span> new_y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k1">or</span> new_y <span class="k3">+</span> size <span class="k3">&gt;</span> allegro_get_display_height<span class="k2">(</span>allegro_get_current_display<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> then <span class="k2">{</span>
<span class="number"> 107</span>        <span class="p">#We hit a wall</span>
<span class="number"> 108</span>        ydir <span class="k2">:</span><span class="k3">=</span> <span class="k2">(</span>ydir <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> % <span class="n">2</span>
<span class="number"> 109</span>        new_y <span class="k2">:</span><span class="k3">=</span> y #Reset the y value
<span class="number"> 110</span>    <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 111</span>      <span class="n">0</span>
<span class="number"> 112</span>    <span class="k2">}</span>
<span class="number"> 113</span>    x <span class="k2">:</span><span class="k3">=</span> new_x
<span class="number"> 114</span>    y <span class="k2">:</span><span class="k3">=</span> new_y
<span class="number"> 115</span>  <span class="k2">}</span>
<span class="number"> 116</span>
<span class="number"> 117</span>  setX<span class="k2">(</span>what<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 118</span>    x <span class="k2">:</span><span class="k3">=</span> what 
<span class="number"> 119</span>  <span class="k2">}</span>
<span class="number"> 120</span><span class="k2">}</span>
<span class="number"> 121</span>
<span class="number"> 122</span>run_main<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number"> 123</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Start main\n"</span><span class="k2">)</span>
<span class="number"> 124</span>  allegro_install_system<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 125</span> 
<span class="number"> 126</span>  var width <span class="k3">=</span> <span class="n">800</span>
<span class="number"> 127</span>  var height <span class="k3">=</span> <span class="n">600</span>
<span class="number"> 128</span>
<span class="number"> 129</span>  <span class="p"># Make lines draw smoother</span>
<span class="number"> 130</span>  <span class="p"># al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST)</span>
<span class="number"> 131</span>  <span class="p"># al_set_new_display_option(ALLEGRO_SAMPLES, 4, ALLEGRO_SUGGEST)</span>
<span class="number"> 132</span>  var display <span class="k3">=</span> allegro_create_display<span class="k2">(</span>width, height<span class="k2">)</span>
<span class="number"> 133</span> 
<span class="number"> 134</span>  allegro_init_primitives_addon<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 135</span>  allegro_install_keyboard<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 136</span>  allegro_init_image_addon<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 137</span>  allegro_init_font_addon<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 138</span>  allegro_init_ttf_addon<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 139</span>
<span class="number"> 140</span>  <span class="p"># var font = al_load_font("fixed_font.tga")</span>
<span class="number"> 141</span>  var <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> allegro_load_font<span class="k2">(</span><span class="s">"arial.ttf"</span>, <span class="n">20</span>, <span class="n">0</span><span class="k2">)</span>
<span class="number"> 142</span>
<span class="number"> 143</span>  var finished <span class="k3">=</span> <span class="k1">false</span>
<span class="number"> 144</span>  var need_redraw <span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 145</span>  var FPS <span class="k3">=</span> <span class="n">30</span>
<span class="number"> 146</span>  var pallet_w <span class="k3">=</span> <span class="n">20</span>
<span class="number"> 147</span>  var pallet_h <span class="k3">=</span> <span class="n">80</span>
<span class="number"> 148</span>  var pallet_speed <span class="k3">=</span> <span class="n">5</span>
<span class="number"> 149</span>  var ball_size <span class="k3">=</span> <span class="n">30</span>
<span class="number"> 150</span>  var ball_speed <span class="k3">=</span> <span class="n">4</span>
<span class="number"> 151</span>  var left_player <span class="k3">=</span> <span class="k1">new</span> Pallet<span class="k2">(</span><span class="n">0</span>, height<span class="k3">/</span><span class="n">2</span><span class="k3">-</span>pallet_h<span class="k3">/</span><span class="n">2</span>, pallet_h, pallet_w, pallet_speed, <span class="s">'W, '</span>S, allegro_map_rgb_f<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 152</span>  var right_player <span class="k3">=</span> <span class="k1">new</span> Pallet<span class="k2">(</span>width-pallet_w, height<span class="k3">/</span><span class="n">2</span><span class="k3">-</span>pallet_h<span class="k3">/</span><span class="n">2</span>, pallet_h, pallet_w, pallet_speed, <span class="s">'Up, '</span>Down, allegro_map_rgb_f<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 153</span>  var ball <span class="k3">=</span> <span class="k1">new</span> Ball<span class="k2">(</span>width<span class="k3">/</span><span class="n">2</span>, height<span class="k3">/</span><span class="n">2</span>, ball_speed, ball_size, <span class="k2">[</span>left_player, right_player<span class="k2">]</span>, allegro_map_rgb_f<span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 154</span>
<span class="number"> 155</span>  var timer <span class="k3">=</span> allegro_create_timer<span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">/</span>FPS<span class="k2">)</span>
<span class="number"> 156</span>
<span class="number"> 157</span>  var queue <span class="k3">=</span> allegro_create_event_queue<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 158</span>  allegro_register_event_source<span class="k2">(</span>queue, allegro_get_timer_event_source<span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 159</span>  allegro_register_event_source<span class="k2">(</span>queue, allegro_get_keyboard_event_source<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 160</span>  allegro_register_event_source<span class="k2">(</span>queue, allegro_get_display_event_source<span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 161</span>
<span class="number"> 162</span>  allegro_start_timer<span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 163</span>
<span class="number"> 164</span>  <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Running!\n"</span><span class="k2">)</span>
<span class="number"> 165</span>
<span class="number"> 166</span>  var done <span class="k3">=</span> <span class="k1">false</span>
<span class="number"> 167</span>  <span class="k1">while</span> <span class="k1">not</span> done <span class="k2">{</span>
<span class="number"> 168</span>     <span class="c">// var now = currentMilliseconds()</span>
<span class="number"> 169</span>     <span class="c">// printf("top ~a\n", currentMilliseconds())</span>
<span class="number"> 170</span>     
<span class="number"> 171</span>        <span class="k1">if</span> need_redraw <span class="k1">and</span> allegro_is_event_queue_empty<span class="k2">(</span>queue<span class="k2">)</span> then <span class="k2">{</span>
<span class="number"> 172</span>            allegro_clear_to_color<span class="k2">(</span>allegro_map_rgb_f<span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 173</span>            left_player-&gt;draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 174</span>            right_player-&gt;draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 175</span>            ball-&gt;draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 176</span>            <span class="k1">if</span> <span class="k1">not</span> finished then <span class="k2">{</span>
<span class="number"> 177</span>                allegro_draw_text<span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, allegro_map_rgb_f<span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span>, width<span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, <span class="s">'AlignCenter, "Player 1: use W and S to move, Player 2: use the up and down arrow keys.")</span>
<span class="number"> 178</span><span class="s">            } else {</span>
<span class="number"> 179</span><span class="s">                allegro_draw_text(font, allegro_map_rgb_f(1,1,1), width/2, 10, '</span>AlignCenter, <span class="s">"Press R to reset, ESC to exit."</span><span class="k2">)</span>
<span class="number"> 180</span>            <span class="k2">}</span>
<span class="number"> 181</span>            allegro_flip_display<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 182</span>            need_redraw <span class="k2">:</span><span class="k3">=</span> <span class="k1">false</span>
<span class="number"> 183</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 184</span>          <span class="n">5</span>
<span class="number"> 185</span>        <span class="k2">}</span>
<span class="number"> 186</span>
<span class="number"> 187</span>    <span class="c">// printf("before ~a\n", currentMilliseconds())</span>
<span class="number"> 188</span>    var event <span class="k3">=</span> allegro_wait_for_event<span class="k2">(</span>queue<span class="k2">)</span>
<span class="number"> 189</span>    <span class="c">// printf("after ~a\n", currentMilliseconds())</span>
<span class="number"> 190</span>
<span class="number"> 191</span>    match event with
<span class="number"> 192</span>      <span class="k2">(</span>allegro_TimerEvent type source timestamp count error<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 193</span>        left_player-&gt;update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 194</span>        right_player-&gt;update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 195</span>        ball-&gt;update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 196</span>        <span class="k1">if</span> ball.x <span class="k3">+</span> ball.size <span class="k3">&lt;</span> <span class="n">0</span> <span class="k1">or</span> ball.x <span class="k3">&gt;</span> width then <span class="k2">{</span>
<span class="number"> 197</span>            ball-&gt;setX<span class="k2">(</span>width <span class="k3">/</span> <span class="n">2</span><span class="k2">)</span>
<span class="number"> 198</span>            ball-&gt;reverseDirection<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 199</span>            <span class="c">// finished := true</span>
<span class="number"> 200</span>            <span class="c">// allegro_stop_timer(timer)</span>
<span class="number"> 201</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 202</span>          <span class="n">0</span>
<span class="number"> 203</span>        <span class="k2">}</span>
<span class="number"> 204</span>        need_redraw <span class="k2">:</span><span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 205</span>      <span class="k2">}</span>
<span class="number"> 206</span>      <span class="k2">(</span>allegro_KeyboardEvent type source timestamp display keycode unicode modifiers repeat<span class="k2">)</span><span class="k2">{</span>
<span class="number"> 207</span>        <span class="c">// printf("Pressed ~a\n", keycode)</span>
<span class="number"> 208</span>        <span class="k1">if</span> type <span class="k3">=</span> <span class="s">'KeyChar and keycode = '</span>Escape then <span class="k2">{</span>
<span class="number"> 209</span>          done <span class="k2">:</span><span class="k3">=</span> <span class="k1">true</span>
<span class="number"> 210</span>        <span class="k2">}</span> <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 211</span>          left_player-&gt;handle_event<span class="k2">(</span>event<span class="k2">)</span>
<span class="number"> 212</span>          right_player-&gt;handle_event<span class="k2">(</span>event<span class="k2">)</span>
<span class="number"> 213</span>        <span class="k2">}</span>
<span class="number"> 214</span>      <span class="k2">}</span>
<span class="number"> 215</span>
<span class="number"> 216</span>    <span class="c">/*</span>
<span class="number"> 217</span><span class="c">    var later = currentMilliseconds()</span>
<span class="number"> 218</span><span class="c">    printf("Took ~ams\n", later - now)</span>
<span class="number"> 219</span><span class="c">    */</span>
<span class="number"> 220</span>  <span class="k2">}</span>
<span class="number"> 221</span>
<span class="number"> 222</span>  allegro_uninstall_system<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 223</span><span class="k2">}</span>
<span class="number"> 224</span>
<span class="number"> 225</span>run_main<span class="k2">(</span><span class="k2">)</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (kazzmir)</author>
		<pubDate>Mon, 14 Nov 2011 13:47:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So do we want this in the official repository? Would it go into the examples or demos folder?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Mon, 14 Nov 2011 16:39:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>How does that work?</p><p>Is it a compiled binary that Python can interface with?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Mark Oates)</author>
		<pubDate>Mon, 14 Nov 2011 17:08:49 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>We could also include the unnamed-new-language-by-kazzmir version and a C version I guess <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /></p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/608775/937347#target">Mark Oates</a> said:</div><div class="quote"><p>How does that work? Is it a compiled binary that Python can interface with?
</p></div></div><p>

You mean how language bindings of Allegro work in general? Then yes.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Mon, 14 Nov 2011 17:58:39 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/608775/937338#target">kazzmir</a> said:</div><div class="quote"><p>Thanks for the code j-gamer!</p></div></div><p>
No problem. I&#39;m adding an AI as well right now. Might come in handy.</p><p>EDIT: It might not be the best way to do this, nor is it compliant with many of the best practices, but this AI works :p
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="s">""</span><span class="s">"</span>
<span class="number">   2</span><span class="s">    Allegro Python port game example</span>
<span class="number">   3</span><span class="s">    Author: Jeroen De Busser</span>
<span class="number">   4</span><span class="s">"</span><span class="s">""</span>
<span class="number">   5</span>import os
<span class="number">   6</span>from allegro import <span class="k3">*</span>
<span class="number">   7</span>from <a href="http://www.delorie.com/djgpp/doc/libc/libc_639.html" target="_blank">random</a> import randint,<a href="http://www.delorie.com/djgpp/doc/libc/libc_639.html" target="_blank">random</a>
<span class="number">   8</span>
<span class="number">   9</span>
<span class="number">  10</span><span class="k1">class</span> Pallet:
<span class="number">  11</span>    def __init__<span class="k2">(</span>self, x, y, w, h, speed, color<span class="k2">)</span><span class="k2">:</span>
<span class="number">  12</span>        self.__initials <span class="k3">=</span> <span class="k2">(</span>x, y, w, h, speed, color, <span class="n">0</span><span class="k2">)</span>
<span class="number">  13</span>        self.reset<span class="k2">(</span><span class="k2">)</span>
<span class="number">  14</span>
<span class="number">  15</span>    def reset<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  16</span>        <span class="s">''</span><span class="s">'Resets this pallet to its starting values '</span><span class="s">''</span>
<span class="number">  17</span>        <span class="k2">(</span>self.x, self.y, self.w, self.h, self.speed, self.color, self.moving<span class="k2">)</span> <span class="k3">=</span> self.__initials
<span class="number">  18</span>
<span class="number">  19</span>    def update<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  20</span>        self.y <span class="k3">+</span><span class="k3">=</span> self.moving <span class="k3">*</span> self.speed
<span class="number">  21</span>        <span class="k1">if</span> self.y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">:</span>
<span class="number">  22</span>            self.y <span class="k3">=</span> <span class="n">0</span>
<span class="number">  23</span>        elif self.y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> self.h:
<span class="number">  24</span>            self.y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> self.h
<span class="number">  25</span>    
<span class="number">  26</span>    def draw<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  27</span>        <span class="p"># Fill</span>
<span class="number">  28</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_rounded_rectangle"><span class="a">al_draw_filled_rounded_rectangle</span></a><span class="k2">(</span>self.x, self.y, self.x <span class="k3">+</span> self.w, self.y <span class="k3">+</span> self.h, <span class="n">6</span>, <span class="n">6</span>, self.color<span class="k2">)</span>
<span class="number">  29</span>        <span class="p"># Highlight</span>
<span class="number">  30</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_rounded_rectangle"><span class="a">al_draw_filled_rounded_rectangle</span></a><span class="k2">(</span>self.x<span class="k3">+</span><span class="n">2</span>, self.y<span class="k3">+</span><span class="n">2</span>, self.x <span class="k3">+</span> self.w<span class="k3">/</span><span class="n">2</span>, self.y <span class="k3">+</span> self.h-5, <span class="n">4</span>, <span class="n">4</span>, <a href="http://www.allegro.cc/manual/al_map_rgba_f"><span class="a">al_map_rgba_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span>,<span class="n">0</span>.<span class="n">2</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  31</span>
<span class="number">  32</span>
<span class="number">  33</span><span class="k1">class</span> Player<span class="k2">(</span>Pallet<span class="k2">)</span><span class="k2">:</span>
<span class="number">  34</span>    def __init__<span class="k2">(</span>self, x, y, h, w, speed, keyup, keydown, color<span class="k2">)</span><span class="k2">:</span>
<span class="number">  35</span>        self.__initials <span class="k3">=</span> <span class="k2">(</span>x, y, h, w, speed, keyup, keydown, color<span class="k2">)</span>
<span class="number">  36</span>        Pallet.__init__<span class="k2">(</span>self, x, y, h, w, speed, color<span class="k2">)</span>
<span class="number">  37</span>        self.keyup, self.keydown <span class="k3">=</span> keyup, keydown
<span class="number">  38</span>    
<span class="number">  39</span>    def handle_event<span class="k2">(</span>self, ev<span class="k2">)</span><span class="k2">:</span>
<span class="number">  40</span>        <span class="k1">if</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number">  41</span>            <span class="k1">if</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keyup:
<span class="number">  42</span>                self.moving <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span>
<span class="number">  43</span>            elif ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keydown:
<span class="number">  44</span>                self.moving <span class="k3">=</span> <span class="n">1</span>
<span class="number">  45</span>        elif ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_UP:
<span class="number">  46</span>            <span class="k1">if</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keyup <span class="k1">and</span> self.moving <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">)</span> <span class="k1">or</span> <span class="k2">(</span>ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> self.keydown <span class="k1">and</span> self.moving <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k2">:</span>
<span class="number">  47</span>                self.moving <span class="k3">=</span> <span class="n">0</span>
<span class="number">  48</span>
<span class="number">  49</span>
<span class="number">  50</span><span class="k1">class</span> AI<span class="k2">(</span>Pallet<span class="k2">)</span><span class="k2">:</span>
<span class="number">  51</span>    def __init__<span class="k2">(</span>self, x, y, w, h, speed, color, difficulty, ball<span class="k2">)</span><span class="k2">:</span>
<span class="number">  52</span>        Pallet.__init__<span class="k2">(</span>self, x, y, w, h, speed, color<span class="k2">)</span>
<span class="number">  53</span>        self.difficulty <span class="k3">=</span> difficulty
<span class="number">  54</span>        self.ball <span class="k3">=</span> ball
<span class="number">  55</span>
<span class="number">  56</span>    def handle_event<span class="k2">(</span>self, ev<span class="k2">)</span><span class="k2">:</span>
<span class="number">  57</span>        <span class="p">#Only fire on a timer event</span>
<span class="number">  58</span>        <span class="k1">if</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER:
<span class="number">  59</span>            <span class="p">#Calculate the target y location according to the difficulty level</span>
<span class="number">  60</span>            <span class="k1">if</span> self.difficulty <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">:</span>
<span class="number">  61</span>                target_y <span class="k3">=</span> self.ball.y <span class="k3">+</span> self.ball.size<span class="k3">/</span><span class="n">2</span>
<span class="number">  62</span>            else:
<span class="number">  63</span>                <span class="p">#Higher difficulty, so we need to precalculate the position of the ball if it is closer than a certain treshold</span>
<span class="number">  64</span>                <span class="k1">if</span> self.ball.xdir <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span> <span class="k1">or</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>self.x <span class="k3">-</span> self.ball.x<span class="k2">)</span> <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k3">*</span><span class="k2">(</span>self.difficulty-1<span class="k2">)</span><span class="k3">/</span>self.difficulty:
<span class="number">  65</span>                    <span class="p">#If the ball is moving away, return to the center of the screen</span>
<span class="number">  66</span>                    target_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="n">2</span>
<span class="number">  67</span>                else:
<span class="number">  68</span>                    <span class="p">#The ball is moving towards this pallet within its FOV.</span>
<span class="number">  69</span>                    <span class="p">#Calculate what the y location of the ball will be when it lands at this pallets x location</span>
<span class="number">  70</span>                    target_y <span class="k3">=</span> self.ball.y <span class="k3">+</span> <span class="k2">(</span>self.x <span class="k3">-</span> self.ball.x<span class="k2">)</span><span class="k3">*</span>self.ball.ydir
<span class="number">  71</span>                    <span class="k1">if</span> target_y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">:</span>
<span class="number">  72</span>                        target_y <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_38.html" target="_blank">abs</a><span class="k2">(</span>target_y<span class="k2">)</span>
<span class="number">  73</span>                    elif target_y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">:</span>
<span class="number">  74</span>                        target_y <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">-</span> target_y % <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number">  75</span>
<span class="number">  76</span>            <span class="p">#Set the movement</span>
<span class="number">  77</span>            <span class="k1">if</span> target_y <span class="k3">&gt;</span> self.y <span class="k3">+</span> self.h<span class="k3">*</span><span class="n">3</span><span class="k3">/</span><span class="n">4</span><span class="k2">:</span>
<span class="number">  78</span>                self.moving <span class="k3">=</span> <span class="n">1</span>
<span class="number">  79</span>            elif target_y <span class="k3">&lt;</span> self.y <span class="k3">+</span> self.h<span class="k3">*</span><span class="n">1</span><span class="k3">/</span><span class="n">4</span><span class="k2">:</span>
<span class="number">  80</span>                self.moving <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span>
<span class="number">  81</span>            else:
<span class="number">  82</span>                self.moving <span class="k3">=</span> <span class="n">0</span>
<span class="number">  83</span>
<span class="number">  84</span>
<span class="number">  85</span><span class="k1">class</span> Ball:
<span class="number">  86</span>    def __init__<span class="k2">(</span>self, x, y, speed, size, pallets, color<span class="k2">)</span><span class="k2">:</span>
<span class="number">  87</span>        self.x, self.y, self.speed, self.size, self.pallets, self.color <span class="k3">=</span> x, y, speed, size, pallets, color
<span class="number">  88</span>        self.xdir <span class="k3">=</span> randint<span class="k2">(</span><span class="n">0</span>,<span class="n">1</span><span class="k2">)</span>
<span class="number">  89</span>        self.xdir <span class="k3">=</span> self.xdir <span class="k3">-</span> <span class="k2">(</span>self.xdir<span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span>
<span class="number">  90</span>        self.ydir <span class="k3">=</span> randint<span class="k2">(</span><span class="n">0</span>,<span class="n">1</span><span class="k2">)</span>
<span class="number">  91</span>        self.ydir <span class="k3">=</span> self.ydir <span class="k3">-</span> <span class="k2">(</span>self.ydir<span class="k3">=</span><span class="k3">=</span><span class="n">0</span><span class="k2">)</span>
<span class="number">  92</span>
<span class="number">  93</span>    def update<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number">  94</span>        new_x <span class="k3">=</span> self.x <span class="k3">+</span> self.xdir <span class="k3">*</span> self.speed
<span class="number">  95</span>        new_y <span class="k3">=</span> self.y <span class="k3">+</span> self.ydir <span class="k3">*</span> self.speed
<span class="number">  96</span>        p <span class="k3">=</span> self.pallets<span class="k2">[</span><span class="k2">(</span>self.xdir<span class="k3">=</span><span class="k3">=</span><span class="n">1</span><span class="k2">)</span><span class="k2">]</span> #The pallet <span class="k1">this</span> ball is flying to
<span class="number">  97</span>        <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>new_x <span class="k3">&lt;</span><span class="k3">=</span> p.x <span class="k3">+</span> p.w <span class="k1">and</span> self.xdir <span class="k3">=</span><span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">)</span> <span class="k1">or</span> <span class="k2">(</span>new_x <span class="k3">+</span> self.size <span class="k3">&gt;</span><span class="k3">=</span> p.x <span class="k1">and</span> self.xdir <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span><span class="k2">)</span> <span class="k1">and</span> new_y <span class="k3">+</span> self.size <span class="k3">&gt;</span><span class="k3">=</span> p.y <span class="k1">and</span> new_y <span class="k3">&lt;</span><span class="k3">=</span> p.y <span class="k3">+</span> p.h:
<span class="number">  98</span>            <span class="p">#We hit the pallet</span>
<span class="number">  99</span>            self.xdir <span class="k3">=</span> <span class="k3">-</span>self.xdir
<span class="number"> 100</span>            self.speed <span class="k3">+</span><span class="k3">=</span> <span class="n">0</span>.<span class="n">1</span>
<span class="number"> 101</span>            self.on_pallet_touch<span class="k2">(</span>p<span class="k2">)</span>
<span class="number"> 102</span>            self.new_x <span class="k3">=</span> self.x
<span class="number"> 103</span>        <span class="k1">if</span> self.x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k1">or</span> self.x <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_display_width"><span class="a">al_get_display_width</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">:</span>
<span class="number"> 104</span>            self.on_screen_exit<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 105</span>        <span class="k1">if</span> new_y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k1">or</span> new_y <span class="k3">+</span> self.size <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_display_height"><span class="a">al_get_display_height</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">:</span>
<span class="number"> 106</span>            <span class="p">#We hit a wall</span>
<span class="number"> 107</span>            self.ydir <span class="k3">=</span> <span class="k3">-</span>self.ydir
<span class="number"> 108</span>            new_y <span class="k3">=</span> self.y #Reset the y value
<span class="number"> 109</span>        self.x <span class="k3">=</span> new_x
<span class="number"> 110</span>        self.y <span class="k3">=</span> new_y
<span class="number"> 111</span>
<span class="number"> 112</span>    def on_pallet_touch<span class="k2">(</span>self, pallet<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 113</span>        <span class="s">""</span><span class="s">"This function should be called on hitting a pallet"</span><span class="s">""</span>
<span class="number"> 114</span>        pass
<span class="number"> 115</span>
<span class="number"> 116</span>    def on_screen_exit<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 117</span>        <span class="s">''</span><span class="s">'This function is called when this ball exits the screen'</span><span class="s">''</span>
<span class="number"> 118</span>        pass
<span class="number"> 119</span>
<span class="number"> 120</span>    def draw<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 121</span>        <span class="p">#Fill</span>
<span class="number"> 122</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span>self.x <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">2</span>, self.y <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">2</span>, self.size<span class="k3">/</span><span class="n">2</span>, self.color<span class="k2">)</span>
<span class="number"> 123</span>        <span class="p">#Highlight</span>
<span class="number"> 124</span>        <a href="http://www.allegro.cc/manual/al_draw_filled_circle"><span class="a">al_draw_filled_circle</span></a><span class="k2">(</span>self.x <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">4</span>, self.y <span class="k3">+</span> self.size<span class="k3">/</span><span class="n">4</span>, self.size<span class="k3">/</span><span class="n">6</span>, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">8</span>,<span class="n">0</span>.<span class="n">9</span>,<span class="n">0</span>.<span class="n">8</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 125</span>
<span class="number"> 126</span>
<span class="number"> 127</span><span class="k1">class</span> Upgrade<span class="k2">(</span>Ball<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 128</span>    def __init__<span class="k2">(</span>self, x, y, speed, pallets, color, effect_function<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 129</span>        Ball.__init__<span class="k2">(</span>self, x, y, speed, <span class="n">10</span>, pallets, color<span class="k2">)</span>
<span class="number"> 130</span>        self.function <span class="k3">=</span> effect_function
<span class="number"> 131</span>        self.touched <span class="k3">=</span> False
<span class="number"> 132</span>
<span class="number"> 133</span>    def on_pallet_touch<span class="k2">(</span>self, pallet<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 134</span>        self.touched <span class="k3">=</span> True
<span class="number"> 135</span>        self.function<span class="k2">(</span>pallet<span class="k2">)</span>
<span class="number"> 136</span>
<span class="number"> 137</span>    def on_screen_exit<span class="k2">(</span>self<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 138</span>        self.touched <span class="k3">=</span> True
<span class="number"> 139</span>
<span class="number"> 140</span>
<span class="number"> 141</span>def main<span class="k2">(</span><span class="k2">)</span><span class="k2">:</span>
<span class="number"> 142</span>    <span class="p">#Initialisation</span>
<span class="number"> 143</span>    difficulty <span class="k3">=</span> <span class="k1">int</span><span class="k2">(</span>input<span class="k2">(</span><span class="s">"What difficulty do you want to play on? Input: 0 for two-player mode, 1-4 for AI difficulty setting.\n"</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 144</span>    <a href="http://www.allegro.cc/manual/al_install_system"><span class="a">al_install_system</span></a><span class="k2">(</span>ALLEGRO_VERSION_INT, None<span class="k2">)</span>
<span class="number"> 145</span>    
<span class="number"> 146</span>    w, h <span class="k3">=</span> <span class="n">800</span>, <span class="n">600</span>
<span class="number"> 147</span>    <span class="p">#Make lines draw smoother</span>
<span class="number"> 148</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLE_BUFFERS, <span class="n">1</span>, ALLEGRO_SUGGEST<span class="k2">)</span>
<span class="number"> 149</span>    <a href="http://www.allegro.cc/manual/al_set_new_display_option"><span class="a">al_set_new_display_option</span></a><span class="k2">(</span>ALLEGRO_SAMPLES, <span class="n">4</span>, ALLEGRO_SUGGEST<span class="k2">)</span>
<span class="number"> 150</span>    display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span>w, h<span class="k2">)</span>
<span class="number"> 151</span>    
<span class="number"> 152</span>    <a href="http://www.allegro.cc/manual/al_init_primitives_addon"><span class="a">al_init_primitives_addon</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 153</span>    <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 154</span>    <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 155</span>    <a href="http://www.allegro.cc/manual/al_init_font_addon"><span class="a">al_init_font_addon</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 156</span>
<span class="number"> 157</span>    <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_font"><span class="a">al_load_font</span></a><span class="k2">(</span><span class="s">"fixed_font.tga"</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span>
<span class="number"> 158</span>
<span class="number"> 159</span>    finished <span class="k3">=</span> False
<span class="number"> 160</span>    need_redraw <span class="k3">=</span> True
<span class="number"> 161</span>    FPS <span class="k3">=</span> <span class="n">60</span>
<span class="number"> 162</span>    pallet_w, pallet_h, pallet_speed <span class="k3">=</span> <span class="n">20</span>, <span class="n">80</span>, <span class="n">5</span>
<span class="number"> 163</span>    ball_size, ball_speed <span class="k3">=</span> <span class="n">30</span>, <span class="n">4</span>.<span class="n">6</span>
<span class="number"> 164</span>    players <span class="k3">=</span> <span class="k2">[</span><span class="k2">]</span>
<span class="number"> 165</span>    players.append<span class="k2">(</span>Player<span class="k2">(</span><span class="n">0</span>,h<span class="k3">/</span><span class="n">2</span><span class="k3">-</span>pallet_h<span class="k3">/</span><span class="n">2</span>,pallet_w,pallet_h,pallet_speed,ALLEGRO_KEY_W,ALLEGRO_KEY_S,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 166</span>    ball <span class="k3">=</span> Ball<span class="k2">(</span>w<span class="k3">/</span><span class="n">2</span>,h<span class="k3">/</span><span class="n">2</span>,ball_speed,ball_size,players,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 167</span>    <span class="k1">if</span> <span class="k1">not</span> difficulty:
<span class="number"> 168</span>        players.append<span class="k2">(</span>Player<span class="k2">(</span>w-pallet_w,h<span class="k3">/</span><span class="n">2</span><span class="k3">-</span>pallet_h<span class="k3">/</span><span class="n">2</span>, pallet_w, pallet_h, pallet_speed, ALLEGRO_KEY_UP,ALLEGRO_KEY_DOWN,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 169</span>    else:
<span class="number"> 170</span>        players.append<span class="k2">(</span>AI<span class="k2">(</span>w-pallet_w,h<span class="k3">/</span><span class="n">2</span><span class="k3">-</span>pallet_h<span class="k3">/</span><span class="n">2</span>, pallet_w, pallet_h, pallet_speed,<a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span><span class="k2">)</span>,difficulty,ball<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 171</span>    
<span class="number"> 172</span>    upgrade_types <span class="k3">=</span> <span class="k2">[</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,lambda pallet:setattr<span class="k2">(</span>pallet,<span class="s">'h'</span>,pallet.h<span class="k3">*</span><span class="n">1</span>.<span class="n">25</span><span class="k2">)</span><span class="k2">)</span>,<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span>,<span class="n">0</span>.<span class="n">0</span><span class="k2">)</span>,lambda pallet:setattr<span class="k2">(</span>pallet,<span class="s">'h'</span>,pallet.h <span class="k3">*</span> <span class="n">0</span>.<span class="n">8</span><span class="k2">)</span><span class="k2">)</span>,<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span>,<span class="n">1</span>.<span class="n">0</span><span class="k2">)</span>,lambda pallet:setattr<span class="k2">(</span>pallet,<span class="s">'speed'</span>,pallet.speed <span class="k3">*</span> <span class="n">1</span>.<span class="n">5</span><span class="k2">)</span><span class="k2">)</span>,<span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">3</span>,<span class="n">0</span>.<span class="n">3</span>,<span class="n">0</span>.<span class="n">3</span><span class="k2">)</span>,lambda pallet:setattr<span class="k2">(</span>pallet,<span class="s">'speed'</span>,pallet.speed <span class="k3">*</span> <span class="n">2</span><span class="k3">/</span><span class="n">3</span><span class="k2">)</span><span class="k2">)</span><span class="k2">]</span>
<span class="number"> 173</span>    upgrade_probability <span class="k3">=</span> <span class="n">0</span>.<span class="n">005</span>
<span class="number"> 174</span>
<span class="number"> 175</span>    timer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_timer"><span class="a">al_create_timer</span></a><span class="k2">(</span><span class="n">1</span>.<span class="n">0</span><span class="k3">/</span>FPS<span class="k2">)</span>
<span class="number"> 176</span>
<span class="number"> 177</span>    queue <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_event_queue"><span class="a">al_create_event_queue</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 178</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_timer_event_source"><span class="a">al_get_timer_event_source</span></a><span class="k2">(</span>timer<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 179</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_keyboard_event_source"><span class="a">al_get_keyboard_event_source</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 180</span>    <a href="http://www.allegro.cc/manual/al_register_event_source"><span class="a">al_register_event_source</span></a><span class="k2">(</span>queue, <a href="http://www.allegro.cc/manual/al_get_display_event_source"><span class="a">al_get_display_event_source</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 181</span>
<span class="number"> 182</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 183</span>
<span class="number"> 184</span>    upgrades <span class="k3">=</span> <span class="k2">[</span><span class="k2">]</span>
<span class="number"> 185</span>
<span class="number"> 186</span>    score <span class="k3">=</span> <span class="k2">[</span><span class="n">0</span>,<span class="n">0</span><span class="k2">]</span>
<span class="number"> 187</span>
<span class="number"> 188</span>    <span class="k1">while</span> True:
<span class="number"> 189</span>        <span class="k1">if</span> need_redraw <span class="k1">and</span> <a href="http://www.allegro.cc/manual/al_is_event_queue_empty"><span class="a">al_is_event_queue_empty</span></a><span class="k2">(</span>queue<span class="k2">)</span><span class="k2">:</span>
<span class="number"> 190</span>            <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 191</span>            <span class="k1">for</span> player in players:
<span class="number"> 192</span>                player.draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 193</span>            ball.draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 194</span>            <span class="k1">for</span> upgrade in upgrades:
<span class="number"> 195</span>                upgrade.draw<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 196</span>            <span class="k1">if</span> <span class="k1">not</span> finished:
<span class="number"> 197</span>                <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span>, w<span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"Player 1: use W and S to move, Player 2: use the up and down arrow keys."</span><span class="k2">)</span>
<span class="number"> 198</span>            else:
<span class="number"> 199</span>                <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span>, w<span class="k3">/</span><span class="n">2</span>, <span class="n">10</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"Press R to reset, ESC to exit."</span><span class="k2">)</span>
<span class="number"> 200</span>            <a href="http://www.allegro.cc/manual/al_draw_text"><span class="a">al_draw_text</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a>, <a href="http://www.allegro.cc/manual/al_map_rgb_f"><span class="a">al_map_rgb_f</span></a><span class="k2">(</span><span class="n">1</span>,<span class="n">1</span>,<span class="n">1</span><span class="k2">)</span>, w<span class="k3">/</span><span class="n">2</span>, h <span class="k3">-</span> <span class="n">20</span>, ALLEGRO_ALIGN_CENTRE, <span class="s">"{0} - {1}"</span>.format<span class="k2">(</span><span class="k3">*</span>score<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 201</span>            <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 202</span>            redraw <span class="k3">=</span> False
<span class="number"> 203</span>        
<span class="number"> 204</span>        ev <span class="k3">=</span> <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 205</span>        <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>queue,byref<span class="k2">(</span>ev<span class="k2">)</span><span class="k2">)</span>
<span class="number"> 206</span>
<span class="number"> 207</span>        <span class="k1">if</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 208</span>            <span class="k1">for</span> player in players:
<span class="number"> 209</span>                player.update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 210</span>            ball.update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 211</span>            <span class="k1">if</span> ball.x <span class="k3">+</span> ball.size <span class="k3">&lt;</span> <span class="n">0</span> <span class="k1">or</span> ball.x <span class="k3">&gt;</span> w:
<span class="number"> 212</span>                finished <span class="k3">=</span> True
<span class="number"> 213</span>                score<span class="k2">[</span>ball.x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">]</span> <span class="k3">+</span><span class="k3">=</span> <span class="n">1</span>
<span class="number"> 214</span>                <a href="http://www.allegro.cc/manual/al_stop_timer"><span class="a">al_stop_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 215</span>            <span class="k1">for</span> upgrade in upgrades:
<span class="number"> 216</span>                upgrade.update<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 217</span>                <span class="k1">if</span> upgrade.touched:
<span class="number"> 218</span>                    upgrades.remove<span class="k2">(</span>upgrade<span class="k2">)</span>
<span class="number"> 219</span>            <span class="k1">if</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_639.html" target="_blank">random</a><span class="k2">(</span><span class="k2">)</span> <span class="k3">&lt;</span> upgrade_probability:
<span class="number"> 220</span>                i <span class="k3">=</span> randint<span class="k2">(</span><span class="n">0</span>,len<span class="k2">(</span>upgrade_types<span class="k2">)</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 221</span>                upgrades.append<span class="k2">(</span>Upgrade<span class="k2">(</span>w<span class="k3">/</span><span class="n">2</span>,h<span class="k3">/</span><span class="n">2</span>,ball_speed,players,upgrade_types<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span><span class="n">0</span><span class="k2">]</span>,upgrade_types<span class="k2">[</span>i<span class="k2">]</span><span class="k2">[</span><span class="n">1</span><span class="k2">]</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 222</span>            redraw <span class="k3">=</span> True
<span class="number"> 223</span>        elif <span class="k2">(</span>ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k1">and</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_ESCAPE<span class="k2">)</span> <span class="k1">or</span> ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 224</span>            <span class="k1">break</span>
<span class="number"> 225</span>        elif ev.type <span class="k3">=</span><span class="k3">=</span> ALLEGRO_EVENT_KEY_DOWN <span class="k1">and</span> ev.keyboard.keycode <span class="k3">=</span><span class="k3">=</span> ALLEGRO_KEY_R:
<span class="number"> 226</span>            ball.x <span class="k3">=</span> w<span class="k3">/</span><span class="n">2</span>
<span class="number"> 227</span>            ball.y <span class="k3">=</span> h<span class="k3">/</span><span class="n">2</span>
<span class="number"> 228</span>            ball.speed <span class="k3">=</span> ball_speed
<span class="number"> 229</span>            upgrades <span class="k3">=</span> <span class="k2">[</span><span class="k2">]</span>
<span class="number"> 230</span>            <span class="k1">for</span> player in players:
<span class="number"> 231</span>                player.reset<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 232</span>            <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>timer<span class="k2">)</span>
<span class="number"> 233</span>            finished <span class="k3">=</span> False
<span class="number"> 234</span>        
<span class="number"> 235</span>        <span class="k1">for</span> player in players:
<span class="number"> 236</span>            player.handle_event<span class="k2">(</span>ev<span class="k2">)</span>
<span class="number"> 237</span>
<span class="number"> 238</span>    <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span>
<span class="number"> 239</span>
<span class="number"> 240</span>
<span class="number"> 241</span><span class="k1">if</span> __name__ <span class="k3">=</span><span class="k3">=</span> <span class="s">'__main__'</span><span class="k2">:</span>
<span class="number"> 242</span>    <span class="p">#Only start the game when this file is executed directly.</span>
<span class="number"> 243</span>    al_main<span class="k2">(</span>main<span class="k2">)</span>
</div></div><p>
Warning: if you input difficulty level 4(or higher, it&#39;s possible), then the ball needs to go as fast as looking like multiple balls on your screen to slip past the AI.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (J-Gamer)</author>
		<pubDate>Mon, 14 Nov 2011 19:50:09 +0000</pubDate>
	</item>
</rss>
