game programming with python, lua, and ruby (2003)

457
!! " #! $ %&$’"$ % % ( ) * $$ +, $ &- + ($ %$ ($""- +, $ ./01- 0* $$" 2"(3 ($"" .4 5 2"(3 ($"" 033’ 2"(3 ($"" / 2’ "$" ($"" +& (’(3 ($"" , 2"(3 ($"" ) 2"(3 ($"" .$ ) 2"(3 ($"" % ) 2 ) "$" $$" $ $$" ( $$" / 6$ $ %$’ *7 .4 5 $8 (8 $ / ($"" 9 $ ) $8 (8 $ / 2 + 4 6$ $ %$’ *7 +0 "$" ’ $ .4 5 $" ’ $ $ *7 $ "" $ ($"" .$" 4 : $) $ $ % 4 : ’ &$ 18 )$8 $ 4 6$ $ %$’

Upload: buho-nano

Post on 24-Oct-2014

226 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Game Programming With Python, Lua, And Ruby (2003)

� ��

����

��� ��� ��

��������������� ���� ��������������������

��������� ��������

��������������������������������������

��������� �����! �!���"����#!��

������

���� ����� ����$����� � % &$�'���"��$������� � %��������%��������� � (������)���������������*���������� � �$���� ���$����� ��� � +���,���$���������&-����� ��� � +���(���$�%$������(�$"�"�-����� ��� � +���,���$�����.��/01-����� � �����0�*����$���� �$"�2�"��(�3���(�$"�"������� ��� � .��4�����5��2�"��(�3���(�$"�"��03��3��'����� ��� � 2�"��(�3���(�$"�"��/��������� ��� � 2�'����"�����$"�(�$"�"���+��&����� ��� � (�'�(�3���(�$"�"������� ��� � �����,��2�"��(�3���(�$"�"������� ��� � ����������)�2�"��(�3���(�$"�"������� ��� � .�$���)�2�"��(�3���(�$"�"������� ��� � %�����)�2��������)���� ��������"�����$"����� ��� � �$���� �$"������$����� ��� ��$���� �$"�(������ ��� ��$���� �$"�/������� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� ��� �.��4�����5�������$8�(�8��$��/���(�$"�"��9����������� ��� ���$�� �� �����������������)������$8�(�8��$��/������� ��� �2�����+��������4�������� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� ������+0������"�����$"�'���������$����� ��� �.��4�����5������$"���������'���������$����� ��� ������$�*7� ����������� ��� ������$����""�������� ��� ������$�(�$"�"����� �������� ��� �.�����$"������4���:�����$���)� ���$������$����� ��� �%����4���:��'�����&�$�������� ��� �1�����8����)����$ �8��$���4�������� ��� ������������ ��� �6�����$���$��%$�'����

Page 2: Game Programming With Python, Lua, And Ruby (2003)

� ��

���� ��� �*7�� ��������� ��� �.��4����#5������$"��4� �)� �'���������$���������� ��� �������"����(����������� ��� ������$���4�� ������ ��� ���$���$������$����� ��� ����'��&�$"��$������$����� ��� �����$"����%�����"���������� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� ��� �.��4�����5�����������$�����.���$�������� ��� �*$"�$������� ��� ���4�� ������ ��� �.����� ������������� ��� �����$�������$����� ��� ������������ ��� �6�����$��$��%$�'������� ��� �*7�� ��������� ������2/**������"�����$"�'����(������ ��� �.��4����;5�����"�����$"�'����(������ ��� �(��*7� ��������$�����""�������� ��� �(�$"�"����� �������� ��� �1�����8����)����$ �8��$���4�������� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� ��� �.��4����!5������$"��4� �)� �'����������$�(������ ��� �(���(����� ��� ���3�����%�(����(��������� ��� �����(��.�%������� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� ��� �.��4����<5������(������.���$�������� ��� �����*$"�$������� ��� ���4�� ������ ��� �����������������3������� ��� �����$��(������ ��� ������������ ��� �*7�� ��������� �����90:/������"�����$"�'����/������� ��� �.��4���� 5������$"���������'����/������� ��� ����""�������� ��� �(�$"�"����� �������� ��� �1�����8����)����$ �8��$���4�������� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� ��� �.��4������5������$"���������'����/������������ ��� �9=/���

Page 3: Game Programming With Python, Lua, And Ruby (2003)

� #�

���� ��� �/����$��04�$(����� ��� �/����$����(����� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� ��� �.��4������5������/�������.���$�������� ��� �/����$������*$"�$������� ��� �/����$����4�� ������ ��� �/����$����������� ��� �����$��/������� ��� ������������ ��� �6�����$���$��%$�'�������� ��� �*7�� ��������� �����9�>*�������+��4�:4����� ��� �.��4������5��:��$"������$8�/����$��(���$���3���4��$����� ��� �2�"��(�3���(�$"�"����$�������3���4��$��.� ������� ��� �*7��$��$"������$8�(�8��$��/������� ��� ������$�3�����(��>�����/������� ��� ������������ ��� �*7�� ��������� ��� �%44�$��7�%5��2��������)�.��4�������"�����$"����� ��� �%44�$��7��5��1��������9���������� ��� �%�.����� ��� �%������� ��� �%9�0/����� ��� �.����� ��� �.??����� ��� �.��������� ��� �*�))������� ��� �90/�/%������ ��� ��:�0 ��3������ ��� �@�3������ ��� �� �$����� ��� �1��������� ��� ���� ������� ��� ���������� ��� ��2������ ��� ������"����� ��� �������� ����� ��� ���������&����� ��� ��A��&����������

Page 4: Game Programming With Python, Lua, And Ruby (2003)

� ��

����� ���

��������&�������� ��������2�������$�����$��8������'����""����"����4��������$�����������������������������������������������������������

Page 5: Game Programming With Python, Lua, And Ruby (2003)

� ;�

������������ �

��'������&��������$&8��$�$���4� �)� ������8�����)����'�$"��$��3������%$��B�(�1������$���������))�����������������C��4� �����������������*��������8�1��D��E��$�D8��$��*�������1�$�� ��5���'�����������&��������$&����4�����������������@��$��$��$��E����$�1�4��5�

��'�$��������$&����4���$��8�E������$���$��@����8�)������$"�����44����3���3������������5����$&����������������������$����$����������$����3��8����'��������������������)��������������)�����C%��78�/����"�8����3�8����4��$��8�1���(�8������8��� &8�������8��$����4���C)����������$ ���"���$�5�

��'�$�������4� ���������$&������3�$"��$��'�$���)��'�)�����$�)���4���$"�4�'�������'����$"�������'�$"���$��"��&� �������$"8��$��)������$"����&�$��'��$���'������4����3��������&�)�����$�����$������&��))� �8�)���������4�$"��$�������$"��$������� ����������$����5���7��������,�������"����$"�������$5��

���������������������������������

Page 6: Game Programming With Python, Lua, And Ruby (2003)

� !�

�����������������

��������� �������������$�4��)�����$������$3��3����$����� ��4�����$������)�������4������3�$��������$�� ���$����'��&��)��������"����)�'���� ��4�$������A���������$�/����$�8�+����$"��$5�2���������$���)�����$ ���������$��'������)����������������$���������$��$3��3����$���3������4�$���� ��"����4��F� ����$����������3���4��$��4��F� ��5�2�� ���$������3����$����������'����'��������'�$���)��'�)�8����$8�������)��� ���8��'������8���3�����"���)���8��$������� ����$������$�'�����)����)"��5��

�����������������������������������������

Page 7: Game Programming With Python, Lua, And Ruby (2003)

� <�

��������������������� �������

������3���4��$��������� ������)�3���4�� ���$�����4���� �4����)������C�4������������ ���$����$"8���3�$ ���4���� ��������$"8���������$�4���4���"�$�'�����C�$������4�� ������ �$�������$���.������4�'���$"�������3�����$5�%���������������8��74�����$�����$�'����� ��4��$"���$"�"���������4� �$�����������"����3�����4� ����)�"���������"�$��)������ �$3�$��$ ������$���������$� ������5������$"��� �$�"����4��"�����������$&��)��������$"�������������'����$"���"�����$�.G.??5������$"�$����������'�����$��$�.G.??8����"����C$����$"��5������,���������)���������"��������� �$����������������7 ���3����'����� ��4��$"���$"�"��5�

�$�����4���8�� ��4��$"���$"�"���'���� �����������������3���3��'��&�������4��)�����.G.??� ��4������$�� �����3������)�����4���4�� �����5���������3�� ��$"��8��$����������3���4��������)� ���'������$������)�4���$������ ��4��$"���$"�"����������$�������"����5���������4����������������$8�(�8��$��/��5�*� ���)���������$"�"���������3�$��"����$�������3�$��"��8�����$���)������ �$��������F��5��������"�����$"�'���������$8�(�8��$��/�����&�������$��������$�����������)��� ����$"�"�8���"���"���$"���������$"�����$��'��&$�������$���))���$"��������������7��4�����)�"����$"��� ����$"�"��4��$���$$�$"��$���$���)� ����������"�����$���������$"�"��8�� �����.G.??5�

+�����������"�����$"�'���������$8�(�8��$��/��8����'�$,���4�$���������)����������$�$"�������3�$����������C�$�����8���,���"���F��������$)�������$����$���5������� ����������3������$�$��������3��'��)��� ����$"�"���$��"�������4��$���$$�$"�������$����4���������$��� ���)����������4�4����� ��4��$"���$"�"��������C�����$8�(�8��$��/��5�

��$ �����8�

%$��B�(�1�����

�������*�������

�������������

Page 8: Game Programming With Python, Lua, And Ruby (2003)

� �

������������

��������&����$������ ������� �3����"����4��"�����$"��$���������))���$��� ��4��$"���$"�"����$���������4�������� ���$�5������$8�(�8��$��/�������'�$���)����$"�"������������3�������'��������������))� ��$�8�)��7����8�� ������8��$��'�����$��"������4��"������$���������5�

9�����������������$���������������$"�"�����3�����$�"����� ��� ���)���������4��F� ��8������$8�(�8��$��/������������"�����)�����&�$"�"����5��������� �3���8��$�)� �8�'���������3������� �����"�5�.��$ ���������,3��4�������� ��4����"�������������D����$���)���������$"�"������$"���3���4��$�5�H��������� ���$����'��&�$"�����"��"������3���������'��������"$���'����(�8����4����$"��$���"��4�� ���$"�$��4������4����$������$8������$"��$��$���$������������3���4���'����/��5�

������������������������������������

Page 9: Game Programming With Python, Lua, And Ruby (2003)

� ���

������������

��������&����$������ ������� �3����"����4��"�����$"��$���������))���$��� ��4��$"���$"�"����$���������4�������� ���$�5������$8�(�8��$��/�������'�$���)����$"�"������������3�������'��������������))� ��$�8�)��7����8�� ������8��$��'�����$��"������4��"������$���������5�

9�����������������$���������������$"�"�����3�����$�"����� ��� ���)���������4��F� ��8������$8�(�8��$��/������������"�����)�����&�$"�"����5��������� �3���8��$�)� �8�'���������3������� �����"�5�.��$ ���������,3��4�������� ��4����"�������������D����$���)���������$"�"������$"���3���4��$�5�H��������� ���$����'��&�$"�����"��"������3���������'��������"$���'����(�8����4����$"��$���"��4�� ���$"�$��4������4����$������$8������$"��$��$���$������������3���4���'����/��5�

������������������������������������

Page 10: Game Programming With Python, Lua, And Ruby (2003)

� ���

������������� ������������

���"�����$"���$"�"�����A�����������)���� �4��$���������$5�������� ����3���������'$������)�)�������4� �)� ����$�5������������3��$�A��'�����)���$���$"�����8��������� ����8���)���$ ���� ��$����8��$�� ����$��)��'5�%$��$���$��������������������� ����3���������'$�����"$�4������4��5��������A�����$���������I+���'�����$��$��'�$���������$���$�'�4��"�����$"���$"�"�8��������$��������$�'�4��"�����$"���$"�"��-I�

+���8�)������)����8���������������"����3�����$"�"�������"�����������$"�4�� ����������$�4��"�����$"5�9������������4���8���������� ���$�������"$��8�'������ ��$���8��$��3����&�$�����$�'�4��"�������5����4��������8����������$�������5����������)��7������$��4�'��)�8�������)�����������"��4��F� ����$�� ����������7�� ����5�

�� �$�8��3������$"�"�����������'$�����$"����$��'��&$�����5������� ����$�����������&�����$"���)�'�����$��"������3���4��$���� �����������'��$���������$��$��4�����������������3�������������5��$��$���������3���4��$���$3���$��$�8�4���������������3����$���"�$�����'����$�����$������������$"�"��)�����4���� ����F������ ����$5�������������))� ����$��������',��F������&���)�����4��"����������"����'���'����&$�'�$"��$����$������'����$"�"���'���5�

9�$����8���������������$"�"��������������3�����������5�1 ���)�'�����������$�)�����$��'��������44�� ������������������5������������$"�"����������$8����������������$�7���$��'����������4� &�45������ ��4�$������$�$"� �3���3�$��������"�$�����'��&�"����������������3�$��"�8��$���)�����$�"���74����$ �����'����"����������4��$��'�������� �$�����$���$�'���$"�"���$�����8����4������������$"�'��������$���"�3�$���$������'���������������&$�'5�

�����������������������

Page 11: Game Programming With Python, Lua, And Ruby (2003)

� ���

��� ������ ������� !��

����.������� �����'������������&��������"$��������$ ��������� �����'��$��$��������$������� ��$���$$�$"�����+�$��'���4�����$"�������5�0$�����.������������ �� ����)��������)��������4�����$��4��"�����'�����$��$��������&5�������������4��������$���)���������"�$�D������ ��4���5��

����.������� �$���$��������)�'����$� �����������$�����������$8�/��8����(���$�����������5��������)�'��������������4��������$�����))���$��)������C�������$�)�����8���/���)�����8��$����(��)�����5�

%�����$�����.��������3������4�$���� �������������$�������������������������������)���������� �� �������4�����������7��4�����$���������&5��������$ ����������$+�$8���������8������ ������$8��%+�8����*7�8���"���8���04�$(8���DD��8�/����(8�(���(8��$��.��$���5��

����������������������������������

Page 12: Game Programming With Python, Lua, And Ruby (2003)

� ���

������������� ���������������������������

+�� �����������)�����4�����)���������&J��$������4���8��,�������$���� �$"���"����3�����$"�"����$�� �3���$"�������)�������4��������)������5��,����$���� �������$8�(�8��$��/��8�����,�����3������"������������)�������������4������)��������&5������0$�������"�$�����$���� ���$������������$"�"��,�)������8���$��78��$��������������8����'���������������� ��������$��4���$�����$�����"���$"��$�����5�!�

������������������������������������������

Page 13: Game Programming With Python, Lua, And Ruby (2003)

� �#�

����������������� ����������! �� ����

%���4��"������������4���'��"���8��$������ ��4��������������� ����5�

CC:$&$�'$8�A��������1� �����1�$ ���$�����6������$����"��

+�������������-����������� ����� �3��8��$��'����3����3�����������������"�����5���������.��4�������)��������"�����$"�'���������$8�(�8��$��/��5��$������ ��4�����,������ ��������4� �)� �4�����$�� �$���)�4��"�����$"�'������������"����3���� ��4��$"���$"�"���K�)�����74���$�$"�'��������"����3���� ��4��$"���$"�"����8��)� ����L8����3���$���������4��4��������$���������8��$�����$�'��4�4����� ��4����'�����������$"��)�������)�������F���4��F� �����������$"�"����������4�$������)��5�

�������������������������������������

Page 14: Game Programming With Python, Lua, And Ruby (2003)

� ���

"����#�$����������� ��

�$�������"�$$�$"8���4��"�������$���������&$�'��3������$"�����������$���$���'��&�$"���)����4� �)� � ��4�����$����������4��"������5���������&�A�����������)�&$�'���"���$���))���5����$8�)����'����$�����4��"�����$"��$�����8��$����������"��5����������'��������� ���������$���)�&$�'���"���)������$���$���'��&�$"���)����� ��4������4��"�������$���������'�����4��"�����K����� ���������������$ �4������$L5��)����4���8������ �$ �4�� ������&�������������$��)���������4��"���8��$������4��"���������)� ������������������4��$�5�%��� �$�������)����'��������)������$����)�4��"����� �������4����$�����$���)����������$"�"�8����$�4��"�������� ��������$������A� &��5��������������3�$���������������"����3�����$"�"��5�

2�"����3�����$"�"���'���� ������������&��4��"�����$"�������8���������,����"����3���4��"�����$"���$"�"�����3������������3��3���)����������4���� ���������&��90/�/%���$������ ���5�H����3��������"����3�����$"�"��8�������"����3���� ��4��$"���$"�"��8�������"����3����4�$���� ��� ��4��$"���$"�"��8�������"����3����4�$���� ����F� ������$����� ��4��$"���$"�"��8��$������3������"����3����4�$���� ����F� ������$����� ��4��$"���$"�"���K���8�������������>2(0�00�(�L5����� ��)���������5����4����������$"8��)��$��DD'����)������$����8������������������)���'�����3����������$"�"��5�%$��� &����'����&������4�$��������74���$�$"�'��5�

��)������� �����������4��F� ��'������ �����$���$"�"�8��4�$������������$������������8�����������&�����'�8��$�� �� &��$���������$"�"�,�� ���$���5�1����"������$"�"���'��������������3�������"���$��3����� ��3����������C�������8��)��������3����)��)�������������44���������'��������$ ���$���)���������� �4������)�"����$"�����F�����$�5������ ��4�����$������$�7���4�$���������)���������'�$"���'������$8�(�8��$��/����44���������'������$"���)�F�����$��4��)�����$�����$����'������� ���$��������3��"��'$��$�4�'����$��4����$ ���$��� �$�������5��

�0�*�

04�$���� ����)�'����

�������� ���)�$����$��)��4�$���� ����)�'���������)�'����������������� ����������4�$���4��$��3��'������������5�%$��$�� �$����&�$��������������)��4�$���� ����)�'�������������'����'��&�5�

04�$���� ����)�'������&�������"�$�����'��������:$������������"�3��$��$�5��$������ ;���$��!��8�����:5�5'���)$��$"����������)������������ ��4����������'������������ ���������$���$��8��$�������� ��3�����$ ���"���� ��$�����������3���4��� �$���"��������� ����)� ������������������� ��4��$"5�% ����� ������� ����8��$ ���$"����������1��8�:.(%8����&����8��$�����$)���8��$�������� ��4������������ �������� ��4�$������&����1��$��=���7���"�$���3���4�$"��� �$���"����)��� ��4������$���4�����$"������������ ���$� ����'������ �������5�0���)��������3���$�� �������������� �������$�������$���.�G��5�0����������8���&��*�� �8�����8��$��(�$78�)����'��5�

04�$���� �������$���$� ������������$�I)���5I�04�$���� �� �������������)���������'$����8�3��'8��$������)�8����������4�$���� ����)�'������� �4���"������$��4��������������������)��� �$��5�0)��$����������������� ���$���$�������5�9����$���$ �8���$���4�$���� ���� �$������A����������)�����)� ����$����������������� �� ���8�����

Page 15: Game Programming With Python, Lua, And Ruby (2003)

� �;�

����)� ����$��$��������������������������4��� �������"�5���������$��������4�$���� ������D����$��$�4��3���8� ����� ������)�'������3���4��$���$3��3��������� ����5�0)� ����8���$"� ����� ������)�'����������$3��3�����)�'������ �$�����$����� &�$"� �4�����$����"�5�

���������������������������������������������

Page 16: Game Programming With Python, Lua, And Ruby (2003)

� �!�

"�����������������������%�

(��,���"$����+��������$��07)�����$��4����$�����������'������$"�"�����4�����)����������������������� ���$� ���5�(�$"�"���4���������$��78��$����$��7���)�$������������8�����$"���$�8������� �����)�������������)� ���$� ����$5�

��������&����'�����$��$�*$"����8�����$"�"��������������)������������%���� �$���������$������*$"����8�'�� ���3��3���)��������*�����1����$8�1�����8��$��0���*$"�������$"�"��5��������������$���$����$"����� ����������)������)�*$"����� �$������� �������"������ 8�(���$8��$�����&8��3�$������)�$��$"��������$���$�&����K����9�"����5�L5��

&����'('(������)�������� �����*�$����������)� ���$��������� ��

�)������� ��4��"�����$"���$"�"����� &������������� �8���,���)�$����������� ��4����8�������������������.�:�8���3���$��$���$����� ��$����$"�"�������������7� ������� ���5��$���$����8�����������$��������$���"����� ��4�������������������$�����$��$���))�������5��������������������$�4������������$G�))������������ ������$�����$������4����$�����$��$��$�������� �$������)��4������$� ������$�����������5������4������$� �����$�� �����'�� ���4������$���������� ���������8�'������������������� ������������������� ����$5������4������$����� ��������$������'���8��$������������������ ��������$������'����5������4�� �������&���������$"���&���������5�5��3�$������4������$� ������$�����������$��������5�8���4��"������� �$��$�����$������$��� ���$���$�4�����$����)��������

������������������

+��$��'('(�,��)$��!�������������-�� ��� ����

����������� .������ *�$���+����$� ���

04������$�� ���������� ���$��I����K=LI�

%�������(� ����$�� ���������� ���$��I�� ����$���I��$�����.�:�

Page 17: Game Programming With Python, Lua, And Ruby (2003)

� �<�

�������$��� ���$��'���������=��$����� ����$���5�%����� �$����"�$�8�������3��������������'����������'��5�%�4��"�������$�������������4� ������ ���)�����&��4���� &��)�'�� ������������ ����$����������$"��������������M�4��"������������)��$����������4������$���3��'����$"�����'��$"����������5�

���"�����$"���$"�"����74������������4������$���$�������������������"������3����)���"� ����$�������'���3���.�:� ���5�������������$������$������������������'��� ��4�����$����4����$���� ���$� ����'������ ���������$������������������������$"����'��$�*$"������$��.�:���$���5�+������4��"�����$"���$"�"�8���4����$� �$�4��"����'����� ���$���� ��4����'������&���$��������4����)����������4��"����� ���4�$�'��������3�$"�����4��&����� ��4���,����$"�"�5�

.�:�����$������3�����$�)��� �$�����4�� ����$"�$��5�0)��$���)����������������4�� ��������� �$�����4�� �����8�����.�:�4��)�����������)��� ��4���,�� �� �����$�5�.�:������$���������$����������4��$���� �� ���������8������������������$�����$"��� ��4� ���������� ��4�� �����5�.�:����4� ����� �$������)��$�%�������� �(�"� �:$���K%(:L������4��)�������"� ����4������$���$����.�$�����:$���������7��� ����$��� ���$��)������������$���� ������$���7� ��������5�

�������������������������������

Page 18: Game Programming With Python, Lua, And Ruby (2003)

� � �

������#�$���������

*� ��.�:����������'$�$�A���� ��$����$"�"�8�'�� �� �$�������)���$����$�������$��5�1� ��$����$"�"���������������$����4�����3�8��'�����$"����������$������4��������$���������������&��$�3�������5��������� ��$����$"�"���������'���3�����$"�"��5�(�'���3�����$"�"��� ���������)�� �������$$���'��&�$"���)��� ��4�����$������������������)�������������� ��$������$������$"�"��5�

���������4����$�$���7��4����)�����'���3�����$"�"�������������5�%����������$"�"������$�����4���"�������$��� ��$����$"�"���$�� �$�������)�$���� ��$��� ���$��)������4� �)� � ��4������ ���� ���5�%��������������������� �������$���������������$��� ���$�8��$����������$,��� ��4�����������)����4���)�������4���)���5�

�$���������8��� ��$����$"�"�� ����$���������4�� �������$���$� � ����$����$����$������$�������5�%$�����������4��"�������$���&��� �����)� �$3����$"������$���$� ��$��� �����4�$��$"��� ��$����$"�"����$���5��$���������8���4��"������� �$���������������� �����������)�������������5���������������4��"����'��������"$�������������� ���������������� ��$�������������$����&��������������$����3����4�����3��'������� �������5������8���������������4��"�����$"���������3���)�����"���$��4��)����$ ����3� �����3���8�'������7� ���$��4�����$�� ������D�������������4����$�����$�����$"���3���4��$�� ����5�

�$�����������������)�"����8����������'����������$����8��$�� ����$�"����4���)�����'����1���0�8�%44��8��$������%�����<��5�������"����4��"�����"��'��$���D�8�4��"��������)�$����������������'���4������4�������� ���$"8��$����� ����"��'�4��"������� �����74�$�$��������������))� ���������$���$8��$�������$"��$�����""�$"�������� ����������$���������))� ��5�

%)���������������$"�"��� ���� ��4�������$"�"�����&��.8�.0�0(8��$��90/�/%�5�+������ ��4�������$"�"�8�����4��"�������'��������� �� ���8��$�����$��� ��4�������&���������� �� �����$�����$�����������$����� ��$����$"�"��)�����4���� ���� ��4���5�+������ ��4�������������'��&8�����4��"������� �$��"$����������)������� ��$����4�$��$���������8��$��'������"���� ��4���������4��"����'�����$�����������)�������'������������5�

.��$�4���� �������������������"��� ����4��"�����$"�4������������������$"�� ���)�'����4��"��������)�$����))� ����$���������5�.������$�3������D�������������)�)$ ���$�8����)�������)����������4��"�������� ����������)$ ���$�������'�����'������ �������5����������������"�����3���4��$���������$����"��'�$"�4�����)���3���4��$�������5������"����� ��������)�.�K�$����������L8���&��������$��=�+�$"5�

���������

Page 19: Game Programming With Python, Lua, And Ruby (2003)

� ���

+�������"����#�$���������

������������"����3��8��$���4�����8��$��� ��4��$"��������������������� �$ �4�����4� ��'��$���� ��������4��"�����$"8��$��������)��$� ����� �$)���$5�03�������$�7��)�'�4�"����,����74���$��� ������5���������$���$C���������������A�D� ���$"�4J�

2�"����3�����$"�"�����������"$���'��������$���3����$"�"���)�����4��"��������$���$�5����������������������)������������4�����������$������$"�"����$�������)��$�3�����4� �)� ��$�)� �5��%��.������"�����7��4����)�����"����3�����$"�"�M����'�������"$���)���)����������4��"�����������������$�$"�����5�.0�0(��$��90/�/%������������"�����7��4���5�.0�0(�'�������"$���)������$����4�������8��$��90/�/%��)������3�$"�� ��$��)� ��$����������� ���4�������5�

�0�*�

�����$����������������)��������������I>����2�"��(�3���(�$"�"�I�K>2((L5������������44�������$���������� ��������� �������$"�"�������)�����4���4������4�$"5��'��)�������������44���������4������>2((��)�����������$�������"����3�����$"�"��������$��� ���4����$���$��$���� ��3���$3���$��$�����������'����������&�� ��$"���'��������3�$"����"������"�������$���������$&��� ��4�������4�5�

�$��� ���$���$���"����3�����$"�"��� �����������������3���������$"�"�8���&�$"���"����3�����$"�"���� ����������������$��$��������$���������'���3����A�3���$��5�����4��"������������$���$���������3�����������&$�'���"���)������$���$���'��&�$"��)����� ��4�����$����������4��"�����$��� ���$�5�*� ���$��� ���$��$���"����3�������A�3���$�������3������� ��$�� �����$��� ���$����������$������������ ��4���������$���4������������$������������$����� ��$�� ���5�

-� ��)�� ���#���������)$�����������

%���"����3����$���4��������$"�"�����$�����������4��"������,��'�����$� �������4�������4�����$����8����'��$�����4��"�������� �������$$�$"5�%���"����3��� ��4�������$"�"�����$���������4��"������,��'�����$� ������)��������4��"��������$8���4�� ����$�������� ������ ��4���$"5������ ��$"�������'�����$� �����$����$��7� �����������F� �� ��������� �$����$�����$������4��"�����$��� ��4���5�

1�$�������$�4��"�����$"���$"�"�������'��������3���������������$���4�������$�� ��4����8����$����������4���� ������$"�"��������������������$��������������5�%+E8�����8��$�������$������7��4�����)��$���4������4��"�����$"���$"�"��5��%��.8�.0�0(8�.8��$��90/�/%�������7��4�����)� ��4�����4��"�����$"���$"�"��5��

+��$���4��"������� ��4����8����� ��4�������&���������� �� ����)������$��"�$���������F� �� ����'����������)����5�������F� �� ����������$�'��44�����"���������$"�����$&�$"�4�� �������4��� ���$�� �����7� �����5������4�� �������������������$�9�"����5�5�

&����'(/(�+���)��������0����)$��������������� ������1��� ��$��0$�����)������

Page 20: Game Programming With Python, Lua, And Ruby (2003)

� ���

+��$� ��4���$"������'����4����)���$"�"��8���� �$���������&���'��"�$�����D����$�5�����)��������������$���4������4��"���������������� �����'������$������� ��4����� �$���4�����K�����"������� ����4�� �����)� ��4���$"�������&��A�����������)���������'���L5������� �$�����������$���4��������$"�"������������)��7���������$��������$� ��4�������$"�"����� ��������� �$��$���� ��'���������7� ���$��$3���$��$�5��$�������'����8��$����������"��$�)��7�������8�����������'���'$5��

,��) ����������

� ��4��$"��������������������$��������� ��4��$"��)��� ��4���8��&�$�����$�� ����'���)����'����� ��4�����4��)������4���5�%�� ��4��$"���$"�"���������"����3�����$"�"������������������ ��4�$�$����$�����4����)�$�����)�'������ ���� ���5�� ��4��$"���$"�"��8����������� ������"�����$"�"��8���������"$���)���� ��4��$"������4������$��)��� ��4���5���������4������$�������'������� �$��������� ��4��$"���������$�������3�����&��� ������$$�$"�������� ��� &4�8���7��4�� ����$"8��$$�$"����3����������A������ �����.��4�� ����$"8�����������$"���)�'���������5������$8�(�8��$��/������� �$��������� ��4��$"���$"�"����$��$��)��������$�����8��������%��8�%+E8�@�3�� ��4�8�����8��$��>�� ��4�5�

����� ��4��$"���$"�"��)�����������������4�$���'$5�>2((���$"�"����$ ��������3��������4����)�:��=������� ����$����$���$���4������8��$���3�$���$"�"�����&��%+E8�����8��$��(��4� �$���� �����)�������� ��4��$"���$"�"��5�:$)���$�����8����������$��$�3��������� �4������)�$����$��)�'������4���� ��4��$"���$"�"��� ��������8�����������������3��������)�����)����'�$"�)���������

•� ����������$���4��������$"�"��5�•� �����4������������4�����$��75�•� >���������������$��� 8�������������� �$�� ���������$"�����$�����8���4�$��$"��$�

'�����4������$�������$"�4��)�������$�����5�

Page 21: Game Programming With Python, Lua, And Ruby (2003)

� ���

•� >������������� �������'��$���)���$ ��8�����44�����������$"����� ����������������������$�������$"� ��4��������5��$���$��������������������3��������������$��������3���'��$�$� ������5������4�� ����������������� �������������$��$"5�

•� �����4���������"����3�������$"���$�4�����$�)������5�.�$ ���$����$��$������ ��$"�����������$���������$"�"�5�

•� ��������$���4�������4��$����5�•� ����4��"������������$�����$��������������� ����$M�������$"�"����$��������

������� ����5�•� ����"�� ���� ���$�K���������)�$����������L������$������������ ����5�•� ������$"�"������$���� ��3���$�� �$�"�3��)����� &�'������$$�$"8��)��$�4��$��$"�

���������8������&��8��$��4�������5�•� ���� ���������������$���4���$���7��)�����5�•� ��� �������$���4�����$"���������$��4�$��$ ���7����8��$������ ���� �$�'��&��$�

��$����))���$���$3���$��$��5�•� ��������4��)��������"���)� ����$� ����$���� �������������D��8��������4��8�

����74������$�5�.����$� ����$��������)��$�������$5��

�0�*�

����� �����3�������$��� �������4���(�$"�"���

�����4� �)� �����������'�� ������������"�$�D����$���4��"������� ������������4��������5�����������$�� ������� �4��$����3����������������"$��$��������)���4���������8� ��������4��������5��$�4�� �� �8���'�3��8�����������$���������$����'����4���������������� ��$����$��� 5�

����� �������4�����$"�"���$����4����)�$�����4���)���4�� ����)�����8��$��3����� �$��$�����3���$��)�7�����4��5������ ����������������������� ��������4����)���������$"�����4��5�.??��$��@�3�������7��4�����)������ �������4����������5�

��$��� ���������������������� ����$���$��� ��$"�����5�������������������� ����������$������4����������5�%"��$8�����&�����������)��7��������3������4���5���$��� ����������������������'������$"��$��������$������������ ��������$8�������������)��������� ���8�������������$��$�������4����)�$��3������������ �� &�)����))����3��)��'��"��$�������5�*7��4�����)���$��� �������4������������$ ����(��48�@�3�� ��4�8��.(8��$�������"5�

•� �������$������������������$������������$�����$�'���$��8�����������$�'�������� ���$�����4$ �����$5�

•� ����������4����D���)���4��"��������))� ��$ ������44��������4��"�����))� ��$ �5�

•� ����������4����D���)�����7����$�4�����$8������)������$"8���������44�� ����$�8��$�G��������$"�"��4�� ��������$���)� ��5�

•� .��4�$�$����)�)����"$� ���8�� ����������� ����$��8���������$"�"�����������8����.018� �$����������������I"���I��������� ��4��8��$��������$"�"��4��3������$���)� �������7���$��� ��4�$�$��5������4�� ������� �������7��$��������5�

•� ��������� �$������������4���4������4�$"���$"�"�5�

Page 22: Game Programming With Python, Lua, And Ruby (2003)

� ���

+���������0�"����#�$���������

���� �����)���)�'��������������$��������������������&����������8����"8�����)�8��$�����$���$��� ��������5��$���$������������$��4���8�����4��"�����$"�)�����'������ ������������ ��$�5����"�����$"�'�����$���$��� �$������������'�����$3���$��$�8��$�����$"����&�������������8�����)� ����$8��$��4�����������'���$,�������4����$�5�

2�"����3�����$"�"����7������ �������$�����������4����$�5�0)��$�����������)� ��4�����$������))� ��$ ��'����"����������������)���� ������3�$"���$����$������5����� ���������)�����4��F� ����$"�����"����3�����$"�"����"�����������������������������$�@�3���$��)�3�������������������$�.??5�

���������������""����4�������'������'���3��� ���������������4��$"���������))���$���� ���� �����K4���)����L� �$����4��������� 5��)���� ��.��))�)�����������$����� ��4�������$�����������8�������4������� ���$ �4������)�4����$"��������))���$���� ���� ���5��$������8���'���3��� ����������������'�����$�)����� ���4� �)� �4���)���5�

2�"����3�����$"�"��8��$�������������$�8�����3����4�������8��$���$����$"��$����������$���������$���4��������� ��4�����)�������$�'�4���)���C���$����$"�$����$"�������5�.��4������$��������������������C���������$��� �$������������5�2��$���������""�$"��$���$�'�4���)���8���4� �������$�����'���3�����$"�"����&����������8� �$����������&��'��&�5����������$���3�����������))5�

%$��������"���$�)����)���"����3�����$"�"����������������5�2�"����3��� ���� �$���� ��)�����$��������� ��4�$�$����������������������8����'�����������������"�$�D���$�����$"��$���)����4��F� ��5�� ������������4������������ ������$��)�)�������$���$)������ �������������5�1������"����3�����$"�"�����3��4���� ������"���������������)���4���$"���"������"��4�� ��������$���)� ��5�

2�"������3�����$"�"�����3����������$����������'������$��4��������$��)�'��������� ���������8�4� �������$��78��$�������3�����$�5������ �$���&�����������������'������$�����$���$5��������&��������$"8����""�$"8��$������)��$"��$�����������&5�1������4����$���8������&��������$"������������8������$�)���������"����$�3���'������)���)�'������3���4��$�5�

��)�����$���� �� �����������"����������������5�1�$����"����3�����$"�"��)���������3�������$�������$"�������))� ���)�4��� �$"�������� ��8��"�)���� ���5��

��&�8�)����$���$ �8��))����3���$�5�%��))����������3� �������� �������������������5��))����3���$��� ��'��$������$���3��)��'�����))������"�3�$"�����������������$���� �$���$���5�%����4����7��4����������"�$�4���4������� ��4�������+������5�����4��"�������'�����3���4��������"�$��74� ���������������"�$�$�����'����$��������������$���"��� ���� �������$"��$��"�3��������))��������������������"�$�������$�"���4� ���$������������������"��� ���� ����5�������$���������� �������� ��������$"��$��'��������!� ���� ��������������"�$5��)������))����$���$4����"�$���3�$,�����$��4� �)� ���������"$��������$����� ���� ���8�������)�'����'����)���5�+����8���� ��������'������������������������'��������������'�������������������"�$�4���4�5�

.*/��K����.��4����*���"�$ ��/��4�$�������L���4��������������F�������)��"���$���74����������������$���)�'����K��F���������$�$"������"�����<��4�� �$�L����� ��������

Page 23: Game Programming With Python, Lua, And Ruby (2003)

� �#�

���4����))����3���$�5��������4���)��74��������3���� ����$��� ������$����� ���$"�4��$������$��"����"�� ���� ����� �$������3�����""���$��������4��$���$���4����5�2�"����3�����$"�"���$����������&�� �����)����������&��������� �����)�������4��"������5���&�$"��'���������$���4�� �����)���$���$"�4��$����8�������� �������$���$"�"����"�� ���� ���$8��$������"$�$"������������ ����$��)�3�������������$�������&��������))� ������ �����))����3���$�5�

1��)�3������)�������)���"����3�����$"�"��������������������������������$C�������8��$�)� �8����������������)��$� �$��������)$5�2�"����3�����$"�"�������4���� ������������)����44�� ����$���$�'�� ���

•� �������$�)� �������� �$$� ���7����$"� ��4�$�$��5�•� %�:�������A����5�•� %������)�����$"���$�4�����$������A����5�•� H���74� �������44�� ����$,��)$ ���$������3��3����4�������� ��$"��A� &����3���

����5�

Page 24: Game Programming With Python, Lua, And Ruby (2003)

� ���

������0�"����#�$���������

2�'���"����3��� �$�����$"�"��"��8��$��'������������4���$�����4������������ ������'��������-��$���������&8�� ��$ ��)� ���$� ��4����� ���$� ����'���������� ����$������$��$�����������$���$"�"�5�0��� ��$ ��)� ���$��������������������"������3�������$"�"����8��������������������� ���$� ���8�����������5��$��������)���������$,������ ���5�

������""����4�������'������"����3�����$"�"�����������������������'������$���������'���3��� �$���4����5������������"�3���$����&���������$���4����'��$������4�����)���3���4��$���$�������))� ��$ ���)���4��"���5�.�����4�����))� ��$���� ��������4��"���������$����������)�������'���3�������� ����$�"���$�������$�5�

��$ ����������$,������4������$���������$������'���3�������� ����$�"���$���������3��8���"����3�����$"�"�������$���"�����)����$"�$����$"�������N��3���4��"�������&����3� �����3�������&��$���8�����������������$���$�'�� �����$������"��� �$������3�����'���3������&�8���&������������� ����$5�(� &��)��4�����������&��������4��������������� ��4�����$������$��$��3���44�� ����$�8���&�������������������������� ������$����"��������)����� ��� �5��$�4���� ���8�����'���3�����$"�"����������������������������44�� ����$��)���

•� ���$����������4����$�� ��4��7���"������������������� ����5�•� ���$����������$�4��������"�����������5�•� *7� ���$��4������� ���� ��5�•� ����)$ ���$������'������)�$����$��'����$��� ��$"�5�

����4�����$�� �$���)���"����3�����$"�"���������"���"������$��������5�5�

+��$��'(/(�"����#�$����������������������

����� ����

��3������$������� (�����))� ��$�����$"� ��4�����$�����

��������������$��4���)������ �4� �)� �4���)��������$,������))� ��$��������D���

1����������$�������������� .�$�����������DD��$"�����"��$������)�����������

*�������������8�'����8��$�����$���$�� (�����)������ �$������3��� ������"�$�D����$�

%�����$�"���$���)���$���"�4��$��)�������

(������'���3��� �$������)������ ���

*�����������$�� ������$��4��"�������� ������'����$�,��������J�

�0�*�

2�"����3�����$"�"������� ���� �D���������)��$�)����������� &��)��4�������$��$����$"�����5����&��4��$���$������������������ �$���� ��4������������� ��4����5������ �$���&��

Page 25: Game Programming With Python, Lua, And Ruby (2003)

� �;�

������ ��)���������$���$"�"�����&������8�%+E8������������3���5�%���8������,���� ��$����������������������)���������$�������4���� �������)��������� <��5�

Page 26: Game Programming With Python, Lua, And Ruby (2003)

� �!�

��.��0�"� �����0�, ��� ��������������

�$����� ;�����)�'������3���4��$��'�$������"����$������)�"��'�$"�4��$�5���3���4��$��� ��������)��$���$�)�������$��4���� ���$�8� �����'����� ����"�������$�4��F� ���8��$���)��$������$����)�'����4��� ��'���$�������������""�5����4�����"�$���������D���������)�'������3���4��$��'����7����������))� ��8��$�������)��&����"�$���������� ����3���4��$�����������)������$�'�)������������'���� ���������4��3��5�0���)������������ �� �������� �$ �4���)���� �����4��"�����$"5�

��� �����4��"�����$"��������������)�4��"�����$"�����"$���������4���&�����"��4��"���������������������$�������4���� ���������0�F� ��0���$�������"�����$"5���� �����4��"���������������������������$����4���"��4����������3������4���'$��44��� ���$��)��'5�9�"����5������������������ �����4��"�����$"�"��4���$�'�� ������ �� ������4����$��������$"��$���$��$"�4��$��8������A�������4����$��4��"������� &�8��$�����������$�����4����$�����$ ���5�

&����'(2(����$$�� �� ����0�����)$��� ��� �����$������

�0�*�

0�F� ��0���$�������"�����$"�

0�F� ��0���$�������"�����$"�K���00�L����� ������������"$����������"���������)�$���4��"������$��������)���F� ��5�0�F� ��������$������������ ����$�������������K����L��$������3����K�������L5��$�4���00�8�4��"���������������)���F� �������� ���$� ����'������ ��������������3���������&�5�����������4��������))���$������"$����$�4�� ��������$"�"���K�������$�������)����00�L8�'�����������$��4�� ������������4������5�

:$)���$�����8�������������������"�����$��������7� ����'����)�������������A��������A���)����4��"�����$"���$"�"�����I��F� ������$���8I����"�3�$"�����)�$���3����� ��4���$��)��$�00����$"�"�������))� ��5���������$����8�����)�����00����$"�"����� �$��������������������;!8�'�����00��)�������'������������)�$���'������������&5�00������������&�

Page 27: Game Programming With Python, Lua, And Ruby (2003)

� �<�

�))��$���������� <���'����.??C�������"���� �������'���'���������������&��:��8�'�� ��'���������$"��$�4�4������5�00��)�������'�������$������������3�������$"�"��8�� ���������8�%��8��%��.8�(��48��$����� ��8��$����3�����$�'���$"�"������������� �������00�����������"��'������3���4��8���&��@�3���$��*�))��5�

�������$����������$����� �����4��"�����$"���������3�����$�� �$A��5�%�� ��4����8��� �$���"�8��$����)�'������3����3�$ ��8�4��"�������3���� �������"����$���������))� ������'������$�����$���$5���� �����4��"�����$"�����&����'$� ��4��7�4��"������$������4������&�5����������)���������������)������&�������� ��4��7���������� ���������4��8����$��������&�$��������������&�$���'$�)�����5�+��$��������&�����������$�"�����������)� �$���$����$���������$��������8����$��������&� �$����4��"������5�

��� �����4��"�����$"�"�3������������$������)���������3���$��8�0�F� ��0���$�������"�����$"����$"��$���)������������4����$���$��5�%�$������)���$"�"����$������ <�����"�$����4� &�4�00��)������5��$�� <!�%44��� �����������$"�"�� ������2�4�����&8��������� ��4��2�4�� ������� &�5������4����4�����������������)�������$�� <<8���������4�4������"������3�����$"�"������� ����$���4�4������4� ����)�.8��*�8�%+E8��$��.�2�K����9�"����5#L5�

&����'(3(�+�����)� ��������$�#�$�$������0��$�� ����

Page 28: Game Programming With Python, Lua, And Ruby (2003)

� � �

-� ��������� ����

�����$��������"����3��8��$���4��������$"�"�����"�$������$��$����)���4������4�$"��������$��7��$���$���$"�"��)���.��44�� ����$�5�������$"�"����� �$���������������$��$���� ��3�8���F� ������$����� ��4��$"���$"�"�5����'�������"$�����������"������������8�����*$"�����&��'�����)��A�$����'�������������$"�"������4$ �����$8��$������)�'�����$�� �� ��� �$��� ���$�����$���������$"�"���K����� ��������� �������$��7L5������$,�����������������$����$�9�"����5�5�

&����'(4(�+����� ����$������0��$�� ����

�����$������$�'$�)�����������)�'������4� �8������������4� �������������4��"�����������$��5�������$"�"����&����������)�)�������)����%�.8�����$"�"������"$���'������"�$$�����$���$�8���������$������"�������"�$$�$"���$"�"�5������$��44�����������3���4��$���)���'������$"���)��44�� ����$�8�)�������4�����7��4�� ����$"����+++����'��������"�����K���'��'���������������L5�

�� ����&�� �����

�����$�'�����3���4����������3�$�/�����������������$���/����� ���$�������)���1�������� ���$��.��4����� ��$ ��K�����'����&$�'$����.+�L��$�������������$��5������$���� �4���"����8����������� �� ��������4�$���� ���$��)�������3�������5�%$�����8�������$"�"�����$������)���������>��������1�$��������$,��9���$"�.�� �5�

�����$,��)��������"���"�����$ �����

•� %����������$������������8��$���)������$,��"������������$"���5�������&��)����������������3����4���������$�� �����4���)���� ��4��������$�:��=8�+�$��'�8��$��1� �$����5������������� �$���$��������$��������K'�����$��$�.L������4��3����� ��������������)$ ���$������K)����$���$ �8�)�����G0L������'����$������������$� ���������������"����3�����$"�"�5����$����������������$ ����)����8�����$"�8�����8��������8��� &���8�.�8�2���8��$��9��5�

•� �44����)����$��$���� ��3��������$�'�� ����� �$��$�����������)�����������$�����"������������$"�"�8�����'�$"��$���� ��3�������$"��$�����""�$"��)��$�44�����)� ���5�

•� %$��7��$��3��"��4�� ��4� &�"�5�•� ������3����4�������8�'�����$���4�������)���������4�����$"��������5�•� �44����)���00���$�����)�����)�����4����$������$ �8� ������8�$����4� ��8�

������8���F� ��8��7 �4���$�8��$�������K�$����L���$��$"5�

Page 29: Game Programming With Python, Lua, And Ruby (2003)

� ���

•� �44����)���)$ ���$����$����� �����4��"�����$"������������'�������00�5�•� ��� �$�������������� ��4��$"���$"�"����� �$���� ��4������������� ����)���

�����$"����"���44�� ����$�5�•� >������"����3�����$��� ��������4��5�•� ��$��� ���4�� �� &�$"5�•� %������ �"����"�� ���� ���$5�•� /$���4�� �� &�$"5�•� ��������������$��"������'����.8�.??8�.018�% ��3�=8�.0/�%8��$��@�3�5�

Page 30: Game Programming With Python, Lua, And Ruby (2003)

� ���

-� �����������

(������������ �����$���4������"�����$"�"��'�����7��$����������$�� �������4�������)�����5�(����� �$����������"��'��"����$��'�������"$���)����7��$��$"��44�� ����$�5�����4���� �������������������&8�����8���� ��8��$��%9�0/8����������������$�9�"����5;5�(����� �$���������$��7 ����$����$"�"��)�����4���4������4�$"��$��� ��4��$"��$�������4����$�����$�.5�

&����'(5(�+�������$������0��$�� ����

����&�� �����

(��'�����3���4��������.��)8����� ��4����"��4�� ���� �$���"��"��4����������$��)� ���.������ �:$�3��������)�/������@�$������$����D��5���������� ��������'������3���4�$"�������$"�"���$�� #��$ �����+���������.����8�/���������������� ��8��$��(�D�2�$��A�����9�"������5�������$"�"��A���)��������4�$���� �����������$����$�����4��� ������$8��$���� "��)����������� �4���"��5�(�����$�����$��$�����"���5�

(��)��������"���"�����$ �����

•� %����4������ �����&����$��75�•� ��������$��� �������4��5�•� %������ ����������$�"���$���$��"����"�� ���� ���$8�•� ��'��)���������� ��4���$� �$��� �����&������ ����3��������5�•� 00���� ��$������ ����� ��������$���$������$ �5�•� :���� �$����������4�� �$��� ����5�•� 9����� &��)����7��$��$"��������$�$"��)�������$"�"���$�$ �$3�$���$���'���5�•� ����4��"��������� ��4������$�������� �����$�����$��$���4�����8��������$"���

3�������� ��$�5�

Page 31: Game Programming With Python, Lua, And Ruby (2003)

� ���

-� ������������

/������ �$����������4��8������$8���F� ������$������$"�"�5�9�"����5!����'����'�/��� ����$��������$����)���������&��$��*�))��5�����4����������4�����$��7��$�4��������������$��%����$����� �$��������3������������8������������$���$����8��$�� ���$8�'�����$�����)�'��4� ������$�� �� ����������$�5�/��������"����4���������$���$���$�:��=8�1�78�+�$��'�8��0�8�0�=8��$��%��"��4���)����5�

&����'(6(�+��������$������0��$�� ����

�����&�� �����

/���'��� ����������H&������1���������$�� �5�������$"�"������4�$���� �8��$������������ �3�����$���������(�������� ��� �$��5�1��D8�����������))� ���$������&$�'$8�&$�'������$8����������$,����&������� �������'��$,��4���00�5�2��'�$������"�$�$��00��� ��4��$"���$"�"�������'���������������$��'����5�/��,��$���8���'�3��8��������&��))��$�������$�����$������)������ �����"�,����������$�5�

/���)��������"���"�����$ �����

•� ����00�5�*3���������)�������$�/�������$���F� �8��3�$����� ���4��5�����������$��/���)$ ���$�8��$���������� �����K�3����)$ ���$������������L5�:$�)���� ����G��4�������� ��8����� ������8��$������������������� ������3������$"5����������������$�����$"����$������$ �5�

•� ��$��� ������$"5�•� *7 �4���$���$���$"5�•� %������ �"����"�� ���� ���$5�

Page 32: Game Programming With Python, Lua, And Ruby (2003)

� ���

,�������

H��������$�'�)����4������ ��)����������� ����$"�����"����3�����$"�"�8��$�����4��������&$�'��$�"�������/��8������$8��$��(������������� ���)��$�������$"� �$3�������$�������� ��� �))�������5�H����"��������������$������)�'�4���� ��������)��� ����$"�"���$����3���$�������)���'��� �������������K �� &����������"�)������������$�9�"����5#����4����������������$�4���4� ��3�L5�H����������)�$������$������$��'������� ��4��$"���$"�"�8��$���4�����8��$�� ��4�����������)�������"���$�������$�7���� ���$5��)���� �$������4���)� ��������00���$���4�$���� �8�"�3��������)��$�%��$����3���$����.��4�����5�

��4����$��4��$���)��������� ��4�����

•� (�$"�"���4�����������$��7��������)�$������������8�����$"���$�8��$����� �����)�������������)� ���$� ����$5�

•� %��� ��4�����.�:����3���$��$���$����� ��$����$"�"�������������7� ������� ���5�

•� %���������$��������$���"����� ��4�������������������$�����$��$���))�������5��������������������$�4������������$G�))������������ ������$���$���� �����4����$�����$8�$�������� �$�����$"��)��'��4�� ����)��$)�������$���4������$� ������$�����������5�

•� %����������$"�"������$�����4���"�������$��� ��$����$"�"���$�� �$�������)�$���� ��$��� ���$��)����4� �)� � ��4������ ���� ���5�

•� 2�"����3�����$"�"���� ��������$�����������'��$�4��"���������$����'���3��� ��4�����$��� ���$���$�� �����������������3����������$���$"�"�8���&�$"������� ����������������$����$���������'���3����A�3���$��5�

•� �$���4��������$"�"������$������ �������4�������4����$"��$����5�•� .��4�������$"�"������$������ ������)������4��"��������$��$���4�� ���� ������

��4���$"��������$��'�����$� �����$������$������7� ����������$���������� ���5�•� %�� ��4��$"���$"�"���������"����3�����$"�"������"$���)���I� ��4��$"I�����

�4������$��)��� ��4���5�•� 2�"����3�����$"�"�����3�����$�����8���'���3�����$"�"�����3�� ��4��������5�

���������������

Page 33: Game Programming With Python, Lua, And Ruby (2003)

� �#�

7��� ����������������

'8� 6��+���'������'�$�����4��"������"�����$������$8�/��8����������)�.����)�����-�

�8� %���4���������3����������$�����)���"����8����������)��������'��'$��)���4���� ����"�����$"�$��� ����$��$�����)�'�4�� ��5�1�$�� ��4�$�����4��������������&��)�������"������3���4��$���$�����"����3�����$"�"�8��$�����$����3�����4��$���.�������������)����4� �)� 8�4�� ��������""�$"�"��4�� �5������$��$��/���'��������"$���'�����������$�8�����������$���������3���'��������7��$��$"��������3����$�.�����$����������$"�"�5�(�������)���� �������'����.8��$�� �$������'��&�'���������)������A����������5�

/8� 6��+������4����)�"�����������������3���4���'������������$"�"��-�

�8� %�������$��������$������$"�$������$����$������)��������������'������&$�'$�)�������'�$"� ��4�$���������������$��A� &��� ������"��4�� ������� �8�1������&��'�����8��$�� �����$��$�������"�������&�������'����'�$$�$"��������)����2��$"��5����������������"�������$����)�'���F��������$�4� ����.�����4�8������$�3������'����)��� ��4����"��4�� ��4��� ���$5�(���������$��������$��� �����)�"���� ��4�$����)������� �����$���������$������ ��4��$"��"�$������$����$������)�4�4����"������$�4���)�������$"�$"�)������$�����������.���������=��75����������(���������)���"����� ��4��$"8��$��$�������"�����$"�$����������3��5�/������������"��$�$"��$�4�4������8��$����$���)��������"���"����4��F� ��������������$���3���4��$�5�:$������ �$���8�/���'�����"�����������������$�����4�4����00����$"�"�8��$��� ���)�������3���4��$���������������$��$��$���4�������3����$���$����44�� ����$�5�/������ �4����8���'�3��8��)�����������������)�"������3���4��$������������$�����$��������)�'��7������������$"�"��4�� ���$����$������&�����$�����������5�

28� 6��+�������������������)�$��4��F� ���'���������$��$��(�����$�'����/��-�

�8� %��/������F������4��3���3����������������'����$"�"��8��7 �4�������������&��)���3���4��$���$���� ��$�����$������44�$�$"��$�@�4�$5�/����$��������� ����������������$"�"������ �������4�4�������$������$��$�@�4�$8�'�� ������3���$���������"��'�$"�$������)�/������&������������3���������$�@�4�$���5�

�������������

Page 34: Game Programming With Python, Lua, And Ruby (2003)

� ���

*1�������

'8� %$�'�������)����'�$"�����������9������

%5� 2�"����3�����$"�"���������))� ������4��������������� ���� ����5��5� 2�"����3�����$"�"������� ��������"����3����� ������������������

���$���$"�"��5��.5� ���"�����$"���$"�"����������$������$��������5��5� ������""����4�������'������'���3�����$"�"���������4��$"���������

��))���$��4���)����5�

/8� 9�����$��������$&���$�����)����'�$"���$��$ ����

%5� %� ��4����4��"��������� �$3����������������$"�"������� ��$����$"�"����� �������K$L�OOOOO5�

�5� %� ��4����4��"������������$������� �������$"�����4��"����OOOOO���� �������$��$���4�����5�

.5� %$��7��4����)�����"����3�����$"�"���������������$8�/��8����(����OOOO�K"�3������������'���7��4���L5�

28� +������������$�����$"�"��������� ��4���� �$�$������$������ ���-�

38� ���"�$������������4��"�����$"���$"�"�5�1�&����������)���$�������3��)����������������4��)� ��4��"�����$"���$"�"��'����4������5�

48� ��� �����������))���$ ������'��$���"����3��8��$���4�����8��$��� ��4��$"���$"�"��)�������K��'��$������������'�����A�D� ���$"�4LJ�

��������������������

Page 35: Game Programming With Python, Lua, And Ruby (2003)

� �;�

��������"��#$����%����%����&��$��������'������ �

������������)������$"�"�����$��������������)����'����5�

CC(�'�"�+���"�$����$�

����� ��4�������3�������$��$���� ���$���� ����$�)��������)������$8�(�8��$��/��5����$���� ����� ����$"�"���$�.��4�����8��$���$������ ��4�����,������"��$"��$�����������������)�������$"�"��5�

�����������'�����$�"�����)������� ��4���5�����)�����������"�3�������)�$�����$�)�������$�$"���'���������������$"�"������ �3���$"���)�'�)��������������3���$� ����$5������� �$����F� ��3��)�������� ��4������������������� ���$"5�

��������F� ��3������������$��������$��� ���$��'����$������ ��4���5�����)������� ���$� �3������)�'��)����� ����$������4��"�����$"� ����$���������$"�"�����3���$� ����$5������� �$���� ���$�'��&���������"����I2�����+����I����4����$��� ����$"�"�5�

�������������������������������

Page 36: Game Programming With Python, Lua, And Ruby (2003)

� �!�

,�� �� ��$�,�$�� ����0��� �������������������

0$��"�������$���������$�$"�����������$"�"�������$ ����������3���� ��$"�)���������������� �����'���� ����$������$��5�%���4��"�����$"���$"�"�����3���������������)������8��$����������������$"�"����$�4���� ���������������$���������4���������$�������5��������&������4�������������������������$�$"� �3�8��������4��&5������$8�(�8��$��/�������������)����'�$"�4���� ��������4����$��4��"�����$"������$����

•� .����$����$�� ����$��$"�•� 1�����$����"����� �)$ ���$��•� >���������•� (������$������$"��•� ���"������� ����

������ ������������ ��

%��������$�4��"�����$"���$"�"�������'�4��"������������$����� ����$����$��������� ���5�.����$��������7����������4����$�8�$����$����������4��)�����$���'���$��������'����� ���������������4��4�������$������� ��$"��������$���$8�������������$��3����������$��4�$��$��4��"��������'���$����������&���������� �����"��$���������4��$���$�����)�������������'�����������������$"��������)���$��7����$"�4��"���5��

1������$"�"��������3����������)�����4�$����"$�K�L��������"$�������$����$�� ����$�5�

H��'����)�$��������������������$������'����$�%+E8�����8��2�8��$��.8�����������4����$����)����8��$�����������$��$��/��5�2��������$��7��4����)� ����$��$"��$������$��$��/����

������� ������������������������������������������������������������������������������������� �������������������!"���������� ���������������#������$���������������������������������"��

(����������3�����'$� ����$������"$�������'����������$�����'�K��L5�2��������$��7��4����

%�&�''������������������������������������''��������������������������������������������� �����������������''�!"���������� �������������''�#������$������������������������������

!� �������$������&��� ����

+��$���� �������"�����'$������8����� ��4��������4��&�$"�����$"�"���)�����$����5���,��$����4����8����$8����������������8�)$ ���$�8��$���4����������$����������������� ���������

��$"�"��5�H�� �$�4������� ����$&��$�)$ ���$����&������K(L8������ ��K'L8�����4���

K)L8��$����3����K*L����$"��3��������$���������'����4��"�����$"���$"�"�����������$"5�

Page 37: Game Programming With Python, Lua, And Ruby (2003)

� �<�

%$������ ����$���������'��$������$8�(�8��$��/��������$"�4���$�������+,����������4�� ���$ �M������ �������"�������)���"��� �������"����5�9����$���$ �8������$�'����������� �����7��4���'���������))���$����4�$��$"��$������������)��4������$����?�P��Q�=5�

�)����4��)���������4������$��)������)�������"��8�=�'�����A��� 8�����)����������)������"��������)�8�=�'�����A���!5������$8�(�8��$��/���K���$"�'������$����������$"�"��L����4���$�����������4� �)�������������$�'�� �� ��4�����$�����������4��)�������)����'��������3�����������$�������������)��4������$�5��)����$����������4� �)��������������4�����)��������$"��$�����)����'�$"��7��4��8���� �$����4���$����������$����������4�� ����$8�)�� �$"���������4�� ����$������� ��4������)���������������$��

�(�+�-).�,��/�0�

����$������������)��$�����'����������4��"�����$"���� ��������4��)���� ��4�����$���$�������&���� ����$�����$"�����4��"����)��'5�:$������$��$"���'����4�����$���3������ ��4�����$������� � �����&����)����$��4��"���������� ��4����� ��$����5��� �����������������)��$����8���$����))���$����4����)� ��4�����$����3�����$���3���4��5�

.��$��������

%���������� ��$�$��������"���������$3�$����������$���"������$�����$�$����$��� �$���5�������$�%�"������$��������'��3�����������$��9�����K������������������ �������'��3�������"� L5�������������))� ����������$ ������ �� &���&�'����������$���"����8������,���7���������������� �������� ����$��$����"� �������'������5�

������$��74������$���)��$��$3��3�� ��4�����$��4��������������4��3��������������)��������5�04��������� ������A���KQL8���������$�KRL8��$��"����������$�KSL����������&�)���������������)�������$,���&�4�������"��� ���������� ������5������� �$��� ���������� ����$��$����)���������$����$"�"����������5������$8�(�8��$��/������������������� ��4�����$��������8�������������$��������5�5�

.��4�����$��4������������$���������������)�����74������$������� �$�����3�����������������9����5�9����7��4����

��1�-�'�23��������������2���4�-�'�23�����������5&%#2���/�-�'�23�����������5&%#2�

�������������$���������&�� ��4�����$���$�"��4�5�%�4��"��������$���������&8�I���4������ ���� �����$���$�*�)�%�����+�D���-I�

��������/�+2� �&6�7�8���,�

��4� ��� ��4�����$�������"� ������ ��������"� ���%��8���"� ����$ ���3��0/8��$����"� ����0�5�(�"� ���%������$"�'������"� ���0/������������ ����$�� �$�����$������������$��5�(���$�������$��������&��4����� �$��� ������4���)�������������������$"� ����$�*$"�����'����8��������������"����3�����$"�"��8��$ ���$"�*�))��8�%��8�

Page 38: Game Programming With Python, Lua, And Ruby (2003)

� � �

��������&8�(��48��$������5�H�� �$�����"$������"� ���%��8�0/8��$���0�������$"�����

����$��'��������8���8��$�����8����4� ��3���5�

/�����&��������"�������))���$�� ������$��)����'�� �$3�$���$8���$"����������4��"�����$"������������������4�4����.�)������K.8�.??8��$��.TL������������"$����%��8�0/8��$���0���UU8�VV8��$��J5���������))���$ ������������������������$��������5�5�

������"� � �$��� ���%��8�0/8��$���0������$������������'����������$������$��9��������)�������4����$�� ��4��7�4��"����5������� �$��� ����������������� ������������$��4�������5�

������$��4�������������3���������))���$����'��$��$� ����$����$�'������ ���4������5�9�������%����4������8����� ����$����$��)��'������3�������������$����M����������� ����$����$���3���������9����8����������������$��������5�5�

+��$��/(/(�.��$��������

)��� ����� *#�$�� ���

����%�������� *3��������������

����%���9������ *3����������9�����

9�����%�������� *3����������9�����

9�����%���9������ *3����������9�����

9�������0/��4������8������$"�����$���)�����3�����������8����$������74������$��3�������������8�������'$��$��������5�5�

+��$��/(2(�.��$���� ��

)��� ����� *#�$�� ���

����0/������ *3��������������

����0/�9������ *3��������������

9�����0/������ *3��������������

9�����0/�9������ *3����������9�����

�����0���4���������� ���������� ��4����$������4������5������3���������������3���8�������'$��$��������5#5�

+��$��/(3(�.��$����� +�

)��� ����� *#�$�� ���

�0������� *3����������9�����

Page 39: Game Programming With Python, Lua, And Ruby (2003)

� #��

+��$��/(3(�.��$����� +�

)��� ����� *#�$�� ���

�0��9������ *3��������������

0$ �����$������$��������$���"� 8� ��4�����$��4�������8��$����"� ������ ����8���� �$� ������3���� ��4��7��� ����$������8���&��������

������ �������"�������3����������� �������5&%#2�+++�(-,)9,�/��,�����++9):,�;/�+<):,,�������5�������"�������3����������� ����������2�++�(�,�/�9,����++9):,�/�=������++9*=,�/�-)>9,,����++9�*9,�/���,�

+��$��/('(��������!� ��&��� �������� �������������������

&��� ���� �� ������������������������� ��������������

%���� ?�� ?�� ?�

����� ��� ��� ��� ��

1���4���� P�� P�� P�

��3����� G�� G�� G�

*A���K����"$��$�L�� Q�� Q�� Q�

*A������� QQ�� QQ�� QQ�

(�������$�� R�� R�� R�

����������$�� S�� S�� S�

(�"� ����0���������*A������� $���� $���� J�

(�"� ���%���� �$��� �$��� UU�

(�"� ���0/�� ���� ���� VV�

�A����/����� �A���� �A���� �A���

*74�$�$��� �74�� �74�� �74�

%�������>����� ����� ����� ����

���� ���$�� ��$�� ��$�� ��$�

.���$�� ���� ���� ���

��$"�$��� ��$�� ��$�� ��$�

(�"�������� ��"�� ��"�� ��"�

��$ ���G/�$��� ��$��� ��$��� ��$��

9������ )������ )������ )�����

.����$"�� ����� ����� ����

��'���� PP�� W�� PP�

Page 40: Game Programming With Python, Lua, And Ruby (2003)

� #��

9����$���

.��4������$�� ��4����4��"�������$�4���������5�>���������������������)���������$�� ��4�������4��"������"���$���������������$�4����5�>�������������������"�3�$�$���������������4��"���� �$�����"$�3��������������$����)������������������������ ����5���4� �������3�����������������3�����)����4� �)� �"�3�$���4����&����

•� %$��$��"������'�����$�����•� %���������)�� ���$���$�����•� %� ���� �����������$"�����������)��$���4������•� %�����$"������ ���� ���$��)���������

1�$����$"�"���$�������&$�'��$���3�$ ��'������4����3��������'��������$��������������������44��4�������5���$ �� ��4���������)�$�����$�������8������������)��$���3�������))���$��$���� �������"$����$�8���4�$��$"�4�$���'���"���$����� �$�"��'������'������$�����$�������������4����$�����$���$���5�

0��������$"�"������������)��7������$������$"�'����3��������M��������� ��������$��� ���4�$"8��������$���$����$�.��4�����8��$������� ����$���"����3�����$"�"��)�����5�*3�$�'������$��� ���4�$"8������4��"���������� �����3�����������������������)�������4��"��������)� �$3�$���$5������ �$������$���������)�������$"�4���$�����$�����$��� ����$"����������4��)�������3�������5���4� ���3����������4���������������$����� �������$��������5�5�

+��$��/(4(�+�)��$�9����$��+�)����

9����$�� �)��� �����) ���

������$�� 2������$����������9�����

9������ %�$�����'�������� �����4��$��K)�����$"��� �����4��$�L�

�$��"���� %�'�����$�����

����� ���3����

����$"�� 0���������A�$ ���)� ���� �����

*� ����$"�"�,��3����������4����$����'�����������������74���$����$��������������$����������4� ��3���� ���$���$���������&8����������������)�'� ����$����������'������$���$�����5�

9����$���$ �8�$���3����������������D�����������$������(���$��/��8�'����������$�

������������"$����$�����5�����������$����������������������)������$���������$���$��5��

����������������"���?����������� ������� �����3���������������0�/�������� ��%�&������������"���?����������� ������� �����3����������$�����%���0�/�����

Page 41: Game Programming With Python, Lua, And Ruby (2003)

� #��

%��� �$���7��4����)������������'����3����������������������$��$��/���������������

3���������������"��������3�����)���3�������5�

������� ����������������������������3��������������������������3������ �?�?�/�=�������������"��$��?�������������������������������?>3�����������������"��$��?��������������������$��@������>�����+?>3����,�

�0�*�

.%:��0��

1�$��4�4������$"�"��C)����$���$ ��.8�.??8��$������C��������D����K�L����������$�)����5���������$���$� ������������� �����$�2�"��(�3���(�$�5�9����$���$ �8��$�/��8�

�$����$"�$�������"$��������������� ��������������� ����������$�����������$���$��8��3�$�����$������5�������'�� ��������������� &�� �$3�����)������������$"�"��5�

%����"�����������$������'���8������$8�(�8��$��/�����))�����"$�)� �$�����$���'��������$����3����������$����4��5�������� ��)����'����"�������))���$��4�����"�������� ��������))���$ ����$������� ���3��5���������))���$ ���'������ �����44���$�����������3���$����� ����$"�"���$����� ��4����������)����'5�

�� ������, ����

(����������������"��4����$"����"�����5������������������ ���������"$��������&����)���������)�������4��"������5�%������������4�������'��)�3����������������������$��5������ �$���� ��4�����$�����8��������8�����3�$� �$��� ���� �����������8�������8�����3�$�������

�����5�(��������� ��������$������$��$��/��������$"���� &����AB��

������� ���������������������������������������������$�����������"������C����������������$���D���������������������������������E�������/�A��-�.�=�9�:�<�F�G���B�

H�� �$��������(���������$��� ����$"�"����� �$ ���$������������"�������

������� ����������$���� �������������������������������$�������/�A��-�.�=�9B�����$�/�A:�<�F�G���B����H���������������"������������������������������/������(����$�

Page 42: Game Programming With Python, Lua, And Ruby (2003)

� #��

��$ ��$���������$"�"�����3������ ���44����)�������$"�8��$���)������������3�$"�)��������������"����3���4��"���������)��$��$F������������$�����$"���$���$"5������$������������� ����$� ����$���)���'��&�$"�'��������$"�8��������������$�"���$���)�����$"�������������$������������ ����5�

%�����$"��������� �����F�����������)� ���� ����5����"���(�8������$8����/�������� �"$�D��������$"�3�������8���� �$�4�� ��������'��$���$"���4���$������8���&������

�����%�&��� ������������%����������$�����������"��8�����������������"�I2������������"����D�������������"���J�����I�

H�� �$��������������)$ ���$�������&������$"� ��4�����$���$������$��$��/��8�F���

��&����� �$�'���������5�9����$���$ �8�����(���"$� �$��������)�������$"� �$ ���$����$�'���������$����/��8���&������

������� ����������$�������������"��I ���I��I���I��I�����I������"��/�I ���I������"$�/�I���I������"��/�I�����I������"��/������"�(�����"$(�����"��

H��'����)�$��������A������K//L��$��$����A������K;/L������)��$�������� ��4������))���$������$"�����'�����

������� ����!���������������I2����I�K���5������"����������������! ����������/�I�����I��������������������������������! ����������;/�I�����I���������������������������D�

�������

%��������������������������5�������������������)��������$"�����������������)������8���������&��4���� &��)������������$���))���$��'���5�%��������"�$�D���������)������������$���� ��$��78��$��7��������4�'��)��������$�4��"�����$"5��

%����"���� ���)���������$"�"�����$������������$�����������'��8��������3������'������))���$���44��� ����)���������5�/���������������$�������������8���8����� �����4��&�$"8�(�������$�����3��������$���������$������������)��������'������������� ����5������$����������'$�3�����$��)�������� ��������A�$ ��5�

Page 43: Game Programming With Python, Lua, And Ruby (2003)

� ##�

���4����������))���$ ��8���������$"�"�����$������������$���������'���5�%$��7��4������

������������������� ����$�5�/���������������4���$�������������'����$�����������

�����8�(���������������������������8��$�������$�������������������������5����������������&���������$����4�����"����������$"�"��8���� �$��� ���� �$)��$"��$����))� ������'��������"��'��$��'�� ��$"����'��$������)��A�$���5�

�������, ��� ����

%���4��"�����$"���$"�"�����3�������������)���� �������)��'��������5�1����4��"���������������� ���������������������$�9�"����5�5����������������������������$�������������������������"�$$�$"��)���4��"���8����$�3��������������� �����8��$�����$����������� ������� &�8�'�� ����������� ������4��"�����������$��5�

&����/('(��� �)��$�)������� ��� ����

���"�����������$���4��3�������� �$������)���4��"���5������������� ������� ����$������8��7� ��$"���))���$���� ���$����4�$��$"�4�$������$4��"�3�$5�9�"����5������������������ �����4��"�����$"�"��4���$�'�� �������3������4����$��������$"��$���$��$"�4��$��8������A�������4����$��4��"������� &�8��$�����������$����4����$������� ����$�������������$�����4��"���������'������$������)��'���'$��$���)��'�����$ ���5�

&����/(/(���� ��� �����)������0$������ �

Page 44: Game Programming With Python, Lua, And Ruby (2003)

� #��

���"�����������$��� �����$��� �4����)���))���$��)����5����)����$���������&8��,3����������������4����������$��5����4����������$��������������74������$�������4��)�����4� �)� �� ���$�5���������������� ��4�$����� ��4��7��������$��������"�$������� �$������)���������$��$����$���)� �����$�������$���74������$�5�

�������$�������� �$�����'�� ���� ���$���)� ���������������7� �������� ������ �$������������$���K��4����JL��$�� �$������)���)�'����� ���4��5��

•� ��������� ��$�, � ���� �(�.�$���������������$�����"� �����A�$ �8��$�� ��������7� �����$�������)���������������,����������$�������� ��)���5�

•� ���� ���$���� ��$�, � ���� �(�%� �$�����$���������������&������� ����$��$�'�� ����� &��)� ��������������7� ���5�

•� - ��� #����� ��$�, � ���� �(���� &���)� ������������7� ������������$��$ ���$����4�5�

��������� ��$�, � ���� ��

(�$���� �$������������$�����������������$����3���)���4���)�4��"������� ���5��$���$���� �$����8� ����$��������7� �����$�����A�$����8��������8���$������$$��5�������������A���������$$�$"��$����$�����������8���&������

#��������"��������L�������������L������-�����L������.�2������"����

Page 45: Game Programming With Python, Lua, And Ruby (2003)

� #;�

��$ ��*$"������4��&�$"����$����������� ��)�������������$"�)������)�������"����$��)����������4���'$8���������� �$3�$���$�����������$���$���� �$����5�

���� ���$���� ��$�, � ���� ��

�������$������������ �$�������� �$�����$��������)��$���)�������������)G������������$��5�

���� ����$���� ��$��������������$��'�� ����$��������� &���)� ������"��������"���$����$8���4�$��$"��$�����)��'��)�����4��"���5����"��������"�$����������������������$ ��������$�������� ���$�������������4�$��$���$������$4�5��

����� � ����$���������)�$�����$��)����� �$�����$����������$��5�� � �� &�����4� �)����

�$�����$�)��������3���5��)����� �$�����$�������8����$�� ��7� ������ ������� &������)����'�5��)����� �$�����$����$������8����� ������� &�����&�44��5�

� �+����������������������,�+�����������������,�

9�"����5����4� �������)��'��)���4��"����"��$"�����"���$�� ��������$�5�����)��'�"��������"�����������$�����$ �8�'�� ���7� �������� ������� &�K�����A���L��)����� �$�����$����������� �$��$�����������$��$"��3����)����� �$�����$����)����5�

&����/(2(����������1��)$���0���)������0$���� ������������� � ���� �

�����$������ �)��� ����$��)��'��$�����)����'�$"�'����

�������2?�������� ������ ���������������D��"������������ �0�$���"�"������������G������������� �0�4�G��

Page 46: Game Programming With Python, Lua, And Ruby (2003)

� #!�

���������������������

/����$��(�������������8��������$����� ����$���������"$���������$���)��$�� ���� ���5�

�� ��%�&�� �0�4�G�������������������

��������� ����$������$������ ����$� �$�����$�������� �$�)����'��$�� ��������$�5�

+��$��$�� ��������$������$����3�����)�)����8����� ������� &���������������7� ���5�

����� ���������)��&��$�����4��"���8�'����������������� ���� &���������������� &����

�7� ���5�+��$���$"�������$��� ���"�������$������$8�/��8����(�8�����"�$�������$��7����&���������$"���&������)����'�$"���

� �+����������������������,������������������������+��������������������,�

�������������)�� ��$��������������$�������'�� ���������&���� ����$���������$�3�������������$4�5�+��$�����4��"����)��'������'��4���������7� ���$� ��� ��8�������&$�'$��$�

��� �����4��"�����$"���������������� ���$5������ *������������$�����������������$�9�"����5#5�

&����/(3(�+��� �)������0$����0������������� � ���� (�+���0�$������� ��������������� ���1��� ���$��%���0������

Page 47: Game Programming With Python, Lua, And Ruby (2003)

� #<�

%����������� ���$� �$����������$"��� ���������������$����'��)��&�����������4��"����

�$���&�5��)����$�������4��"����)�������4���4����8���� �$������������ � ����$���$�

/��8���������� � ����$��(�8����������� � ����$���$������$8������)�'�� �������A�3���$�5�

H�� �$��������4������� *��� ��������$����$�����'���� �������$����$"�����$"��)�

�$�����$��)���'�� ����� �� &5�2�'�3��8��$����$��������������$�� �$�)����'��$�� 5�������$��7�)����������������$������&����&������)����'�$"��

� �+����� ����������������������,�+���������� ��������"����$���D�����,����� *����� *��� �+�����������������������������,�+��������������������"����$���D��?������,����� *����� *��� �+����������������������������,�+�������������������"����$���D�����,������+����� ������$���D� ������������,�

%��'��"������4����$����� ����$"�"�8��� ��'���������������3�������'$������$ ��)��3��8��$�������'������"�$�����44������))���$�5�H�� �$�������'���))���$���$�����)����'�$"� ���8�

'�� �����4�����������4� ������� *��� *����� �)��'��$��� ����$"�"�5�9�"����5�������

���'������4� ������� *��� *����� �4��"������� ���5�

&����/(4(�, ��� �����0���)������$$�� �� ����$ )$�������������������

Page 48: Game Programming With Python, Lua, And Ruby (2003)

� # �

��������2?������� ���� �!���������! �0�4�G����������������M����M���� �0�1�G����������������M������������M�2���E���������������M����M�%�&���2?������� ������ �!��%���� �?4G�������$���D��N����� �?1G�������$���D$O�A�����$���D�B������� ��

Page 49: Game Programming With Python, Lua, And Ruby (2003)

� ���

��2?������� ����� ������$��� �?�4�G��������������������$���D�� ��������� �?�1�G��������������������$���D$� ������������������$���D�� ���������

- ��� #����� ��$�, � ���� ��

���"�����$"���$"�"���������3����)� �������������'��� ���$���)� ������������4�����8������������5���������$����4���������� ��4���,��"������������$"��5�������������3�����3�������$���)� �$��� ���������������������������4��"������� &�M����������� ����$��� ���������4�5�

+���0������)�

���� ������4����4����������������� ����$����4��$�4��"�����$"5������&�����)�'���4������ �$�����$������7� ����$����&����$�����)����'�$"�"�$�������� �����

���+�������"���� �������?��������,�+�?����������������$���D,�

9�"����5;����'��������� �����4��"����)��'��)��� ������45����� ������������������'��4��"�����$"���� &�������)������������ ����������7� �������4�����)��������4��74������$8��$�������� �$������������ &�������������4��7� ���5�

&����/(5(�+���0$����0�������$��)�

Page 50: Game Programming With Python, Lua, And Ruby (2003)

� ���

%����"����������$� ����$������$������'��$�4��"�����$"8��$����������$� ��� �$��� ���7�����)����� ���)���������$"�"��8��� �����������'$�4� ���������5�

�����$,�� ������4������� �$�����$������$"������������$����'���$��������������4���"�3�$� ������� &5����� �$��������$ ����$������ ����������$��)��������4�$�������� �$������� ���������$���)�������$"���$���������4���� ��4����5�

����� �����������������"��+�0�,E���������$���D������������� ���������������������������������������������� �������"E�������� �����������������"��+����,E���������$���D�

(�,�� ����������$��'��&���$����������4��$ �4���'�����������'��)����8��$��)���

$�������$���$��)���������5�����$���� ��� ������4���������)����'�$"���$��7��

%�&� ��������I/I��?���I�I��?�-�AI�I��?�.B����$���D�����

����)������74������$�K�?��L�������� �$���8������� �$��K�?�-L����������$"�8��$������������

K�?�.L�����������4�K�������4����������� ����������4��)����)��������L5������)���8��� ������4��$�(�������'�����$������ &����������'�������&��������$"���&������)����'�$"��

%�&� ��������/�������������$���D�����

/���������$�A��'����)������$"�'���� ������4�8��$�������������$�"�$����5�/���������$������)�4����)�$��� �������'����������$������������4��3������������$�)$ ���$�����5�������������3�����'�������� ��4�������������������������$����4��$�/����

�� ����>�����������������$���D�����

0��

�� ���>����+��,������������$���D�����

/�������������� ��4������� ��*��� �$��� ��'����������������� �����

�� �� ���������>>�����������$���D�

Page 51: Game Programming With Python, Lua, And Ruby (2003)

� ���

����

�$����������$�����������������������&��������

�� ���/��������������������(/�������������?��� ���1�.���������$���D�$���D�� ���4�=�����

+�����$�����)�

%��� �$�� ����$����4����&$�'$�����������������4�K����������&$�'$����������*������

���4L5�%����������4����$���������������&��4����� ���$��)� ���� �$��$������$$�$"�'������� �����$� �$�����$�������5�����)��'��)���������4�������'$��$�9�"����5!5�

&����/(6(���0$������ � �� �$$�� �� ����� �)��$�����$��)�

�������������4���&����$�����"�$�������� �����)��

�����+����������������������,������������+�?�����������$���D,�

*� ����$"�"�8��"��$8����������'$�$�$ ��8�����������������4����&��)���������������$��� �5�

Page 52: Game Programming With Python, Lua, And Ruby (2003)

� ���

�����$,�����������4��������������$�� ���������� ������4��

�����0�/�����������0�1����E���������$���D�

�����������������7��4���� �����7� �����$�3����$��$"����4�$�������'�������$ ������7�'��������5�

(�,���������������������$�� �����������$,�8����'�������������$��)�4���$�������)�������

�$�� ���$��$�������������$��)��$������

%�&�������+�04����,����$���D�����

/��,��������������������������$�� �����������$,����

�� ��������0�1�������������$���D�����

!���$$�������,�$�� ���

%��������������"����������&8����'����)�$��������$�����������������������'��$�������$"�"��5��$��������$���� ����$��$"8���������� �8������8�3��������8��$��4��"������� ���8�������������$������)���������"$�)� �$��������������5�������)���������'����4��$���������������&�4��"������8��$�����������,������ �3����$������'$5�%�)�'��)������������"$�)� �$���$�������������������$�������� ���$5��������5;���������)�'���� ����$���� ����$����������3����������������������$����5�

+��$��/(5(�,�$��$�����������������

&��� ���� �� ����

���������

����

���������

�����

��������

% ��������G'������ �A�B�� �A�B�� �A�B�

/$������3������$�� �3���� �������"�� �3���

�4�� ����$�������K����$"���4���L��

)�� �������� )�

�� ������ ���� ����� ����� ��������� ����

>����� 3� 3�� 3�

Page 53: Game Programming With Python, Lua, And Ruby (2003)

� �#�

*����0����������� ����

E$�'�$"�'������� ����$����$���$��������4����$��)���$������$��$"�4��"����)��'5�0$����$���)� ��������������3�����������$���)�������$�8�'��$�������$�����$�����5������$���)�����$������������$���$��$�I*$���)���$�I� ����$��� ������� ���$�KL��������� ���$�KML5������$��$��/������������������� ���$������������$��$���)���$�� ����$������$�����������$�M��$�(���������� ���$�����4���$��5��$������$��$��/������ �$���������4�������$��$���)���$�� ���� ����K���������$L5�

���#������� ��������� ��������������������������������������������������������P���������������������������������� �����P�

����&�$"�4�����$�������)���)�������$�����������$"��$�����$�������"���$��������$�7����$�5������/����$�������$�������������X�K�� &'���������L������"$�)����������� ����$��"�����$��������$�7����$�5�

������� ����#������� �����"���Q�����?������������� �������������������������������������������P��������������"����������������?������Q�&�������������

��, ��� ����

��$ ���� ���)���������$"�"��������F� ������$��������������"���8��$����������������������$���������������"���8����)����'������������4�����������������F� ������$���� �$��� ��5�����������4� ����������)��������$��$��/��8�'����� ����$���)�����������$3� ����$8� ������� �������$8��$��� �4���������$�� ��5��$�)� �8���������$3� ����$�K�$��� �4�L�������3������ �"$�D�������� ����)���00��3�����$���

�$C���>������+���������,�

%����� �$����8�����>��4�������������������)�$��� �4�����'����������� �������� ���5����� ����$�� ������������������������"$������ ������$��������$"�"��5�

&��� �����$$��

%�����������$"�"�����3���������� ����$���)���)$ ���$� ����8�������4� �����$��7����$"��

�������+����������,�

�$�/��8���� �$� ������)$ ���$�'�������$��4����������F������$���$"�����

��������

Page 54: Game Programming With Python, Lua, And Ruby (2003)

� ���

�$�(���$�������$8���������������4� �)�����������������$��4����������'����4���$��������

�������+,�

���� ����$�������������������/����$�������$��������&�����)$ ���$� �$�����)��'��$������$���3���5�

������������������������������������������

Page 55: Game Programming With Python, Lua, And Ruby (2003)

� �;�

"�$$�����$��,��)$���

��'��������,3�����$��$�44�����$�����������4�����)� ���8���,�������������&����'������)����)$ ���$�$"�4��"�������&����&���$��� ����$"�"�5�

���"�����$"��$��� ����$"�"������74���$����$���4����$��� ���)�����)����'�$"��� ���$�8������$,����� �$ ��$����)����� �������4��������)����'���44�����)����"$5���������F��������4������'���������44�����5��

+����� ����*�#������ �

�����$�������������$���$������)���))���$���$3���$��$����$�� �$����4��"�������3��� ����$����$�8�� ��4�8�������""��5�������� ���$�'�������4�����$�����������$��$�������������$��'��������$�������������))���$���4���$���3��������'��$����$�������������'$��$��'����� ���5�

-�� �$$���� ����

��������&,��.��/01� �����'�������������� ��3���$������+�$��'���$��������)��������$�>�����$��5�5��K����������$�0 �������)�����LM���� �$�)�$��������$����������$�)�����5�H�� �$��������'$����������$��$���������)�����$������)���������))���$��4���)�����)�������������$5��"�+�������������4�GG'''5�����$5��"G��'$����5�

%���)������'����$"8������$��5�����4�������3��������)���������$5��"��$�+�$��'�5�������4������������$ ������$�����.�8�����������4�����$���������&�'����'�����$�'����>�����$��5��5�

���4��������� �� &�$"��$����������$��5�5�5�7��)������ ������$�����.��$����X�H�20��'�����$�����+�$��'���$�������5������$���������$����)�����������"��)��'���M�F��� �� &�0E��$�����'�$��'�������4�4�4�K����9�"����5<L5�

&����/(:(�+������������ ����-�� �$$������� ���

Page 56: Game Programming With Python, Lua, And Ruby (2003)

� �!�

�)���,�������$������$"�)�����:��=�4���)���8���,���$�������4��)����������"�������4��)���

$D�44�$"����������� ��3���$���$������$"�K"��8��8���8�>*��� �"���8���D�8��$����D��

�������L5�H��'����'�$�����4��)���������� ���$��������5�

�)���,�������$������$"������$��$���1� �$����8����'����'�$������������1� �����$���9��5��$�)����)���0��<5;������"���C�7 �4��)���0��=5�9���0��=8����'����'�$���������������$����������� ��3�5��)���������$$�$"�1� �0��=���5����������8������$�� ���������4���$�����4���)���8��$�����'�$,��$��������$���������������5������$�)�������1� �$�����������$���$�������$��$��4�$��$��4��"�������$�����@� &�@�$��$5�H�� �$�)�$��4�� ����)�����)�'�������1� ��4�����$"����������$��������$)�������$��������+�������������4�GG'''5 '�5$�GYF� &G�� 4����$5����5�

�)���������$$�$"�/���2����$��'�$�����"��������/�1���� ����$�������)���$"��������8�����������3��������)������������������$��)���������$5��"5�@���"���������+��������$�� �� &����������'$�����4�"�5�

�)��������� ������������3�����$��)������$����������$��5�5�8��������������>�����$��5�������"���5������$�'�$������"����)�'���"$�)� �$�� ��$"���)����>�����$������>�����$��8��$���)���������3�����$������������$��5�8����������3����������$$�$"����� �������4�����$���������&5�

���������$���$"�"����� �4���"����������� ���$"�1��������� ��.�$�����$�%��������5�2�'�3��8�������)���������8� �4�8�����)�8��$�������������$�����0���K04�$���� ���$������3�L� ����)���5�H�� �$�)�$���� �4���)������� �$����$�� �4���"����$����������$�)�������$������ ��4�$��$"�.�8��$���"��$��$�����(� �$����)�����5��

�0�*�

.%:��0��

Page 57: Game Programming With Python, Lua, And Ruby (2003)

� �<�

�$����� ����4��4����������$�����7����)����������$��������4�����������"����$���"���������������$"��4�$���� ����)�'���5�( &���8������4�$���� �� ���$�������)������'�� �)��������$����� ����4��4�������'8��$���� �$���������� ���$"�����'�������$������$����������������5��������������&������ ������'�����$ ��4�����$"��4�$���� �� �����$��� ����� �����$���3���������������$��������&�$���"�����������������&��������$���4��3�$������������ ��4�$��)������$"������3�������$���))� ��3������� �5��)������3�� �$ ��$�����A�����$����������� �$��8�����������$"��$���4�$���� ����)�'�����$�����F����$���4����8�����������$����&��$��74���5�

������ ����� ����-� ��)�� ���

%)������,3���$�������������$��$���+�$��'���� ��$�8����������$��$���4���������

� ��������3����������� ����$�5����4����������)����'�$"��

�5� 04�$�������������$5�

�5� ���� ��/$5�

�5� ��4��4����$��$������0E8����������������$�9�"����5 5�

&����/(;(��������<���� ��0�������������0���� �������� ��$�������� ����

H��'����"����� ����$��'�$��'���������&����&��9�"����5�������$"��

&����/('=(�+����� ����� ��)�� ������ ���������������

Page 58: Game Programming With Python, Lua, And Ruby (2003)

� � �

��������->->-�1�.<������=�-��-���<E�-E.=4�AR#L�.-�$���1!����4B�������.-������M����M��M������"��M��M�������M����M�������M� ���������� ���������444�

�0�*�

.%:��0��

���������$��$���������������$�"����)������������������ ��$��4����3�������������������� �$��$����������$���$������)�������� ����$����$������$�'����������)��������������8���������$������������$���������������$�����4���� ����4���)���5��)���� �$$���"��������$������$ ��)�������� ����$����$�8����������3�������������4����3���������������)�������4����$����������$�K ����$����$�L��$�������������������������4��"����)����������$"�$���������$��5�5�

0$���:��=�������8����������$��$���4����������������$�����������G��G�� ��G��$G4����$8�����)� �����'����������$���4��������3�������$��$���������$��4���$���)��4������5�H��'����$�������4��G��G�� ��G��$��$�����:��=������,������ ��4���������&�����4�����������������

�����$���4�����������4�$"����� ����$���������������������5�

���������$��$���4������� �������4�����������'������&����:��=������C����������$���7� ���� ����$����$���� ��3���5������$���4������ �$��������� ������'������)���$������"��$�����'������)����������$������$4�5��

���������$���������������$���4�����5�H�� �$�����������7� ��$"�3�������$����$������&��

������M�����������M����9)95������$���4���������"�����)��������$"���� �����$�)$ ���$�5������$���� ��3�����4���������3������)�5���4������)����'�$"���������$���4�����,��4���4���

444������+����,�

H��'������ ��3���$)�������$��$���������� ����$�8�������$��78��$�����4�����)��������K���������������$�9�"����5��L5�

&����/(''(��� ������� ��)�� ������������� ������ �����$ ���������$������>�� �

Page 59: Game Programming With Python, Lua, And Ruby (2003)

� ;��

�$����������8�'�� ����� �������$���� ��3������8���� �$���4���$�������$� ����$���$�����'����'��&�F�������)������4������)������� ��4��K'������)�'���))���$ ��L5��)������4���� ����$�����������$����3�����)�����������K�7 �4������"$��$��L8������$���4������'����4��$������������������� ����5���������"�����)����74�����$��$"��$��)��������$"����4� �)� ���$"�"��)������'��$����$�������"���������$��7���"��5������$���4��������$,��3�������4)�8���'�3��8�'��$���� �����������"���� ���$���)� �������� ����4��"����8�'�� �����'����'�$�����'������$�����$��7� �������$ �5�

+���������$���4���������A����"������8����"�8�����$$�$"�����"������ �����$�44�����$���������7��4������,���)�$���$�����$�7��)�'� ��4����5�H�� �$���������$��$����$��������������4���� ���������$�)�����8������� �$�'����������8�����4�����$�� �����$�4�����)�������$"��� ���$��$�����$�������������$������� ������� &�K���������������$�9�"����5��L��

&����/('/(�+����� ����� ��)�� �����)����� ������ ���0#��$����������))� �

����7��������$,���$���4�����8�����.����Z��$�+�$��'���$�����$�4���������*$����&��8�����$�:��=8�����.�����5�

�0�*�

Page 60: Game Programming With Python, Lua, And Ruby (2003)

� ;��

����

+��$���� ��4��)����������8�������������������)�����������������$������ ��4���$���$����

�$����$���� ��3��������)���'����5�H�� �$������������4����$"�����'��K�����������)���I�$���� ��3�IL���"��$���������� ��4�5�

�0�*�

����

+��$������������$��$���� ��3���8���� �$��������$����� ����$�������7� ����3��������������$���4����������������5�H�� �$�����������������$"������$3���$��$��3��������

����#�&������������$�����)���)���� �$���$�$"����� ����$���K�����������������������54��)����)�������$�:��=L5������)��������$���������$��$���� ��3��������$�8�$���'��$������$������� ����$���)������� ��4�5�

���� ���� �����������&$���

H�� �$�������$������$�4��"�����)������)���5����������7��$���$�)����������$�4��"�������54�5���� ������$�'������$�4��"����)���8�F���)����4�����)�3��������7��������8���4���$���)�'� ����$��8��$����3������4��"��������������$"�54�5�9����$���$ �8��$�+�$��'�8��4�$�4�����4����$����4���$��

������M�������7����;M�

�$����3������)������������54�5�H�� �$����$���3������)����������&8��4�$�4����� ����$����$�8����'�����������54�8��$���$���8�������'$��$�9�"����5��5�

&����/('2(����� ����)������0$�����������������

H�� �$� �����������$�4��"����)������$��������4�����$"���������F������������8��7 �4��������$�������7��$3���$��$��K:��=����(�$7L8����'����$��������$ ��������$�����������4��)��� ��)���������4��$������'����������$�����$���������$�����������8���&��������

Page 61: Game Programming With Python, Lua, And Ruby (2003)

� ;��

�;*���*�����*$��*�������

�������&�������)�������� �����7� �����8���&���$��������������� ��4�5�

�� ������?"�$$�����$�?�

%������$�I2�����+����I����&����&��������

�;*���*$��*�����������������������2%%S����S�>�������������"����������������������"�M�����M�>���!�� �����������������������������������������������������������������������������������">��������������������+�,�E����������������M�����;MP�

1�����)������� ��4����������4��)� ����$��5������$��"$�������$��������������'��������T�������8���� ������ �$�4�� �������� ����$����$��$������$�������� �� ���5������$���7 �4���$���������K�$�����'����)�$�����������������)�'��7 �4���$���$������$L��������3����

)�������$���)� �����$���������4��5������;*���*$��*������� ����$������������4����������������$�4��"����)�������������'��$������ ��4������$8����� ��4����&$�'��'����������$��������5��������$������4���$����$�+�$��'�8�������$����������A�����'��$��$$�$"��$���:��=��$3���$��$�8��$������������$ ���������5�

9����'�$"�����4�����$������ ����$�����������������������45��������$������8�I���'����3���)����'���$ �5I����$�����4��$���$��� ���$�)����'�5����� �����������4��$����$������))���8������������$'����5�+������4� ���$������$�� ���������3�����4�4���M����4�� �������

������ ����$��'����$�����F����� ���$��)��������������45�%����$��� ���������� ���$���������$���)��������$�5����� ���$�8������,3������$��8�������������$�����������$�5�

�������� �� ���� �$����)�$���$�����X.2%��*/��)�������$������ ��4�$��$"�.�5��)�����$�����4��"���8����'��������I2����JI�4��$������������ ���$5�

����?"�$$�����$�?�

9��� ��4�����$8����,������'����2�����)����.�'�������&���&�5�������������$����))���$��'�������"���.����4��$��������$"8������4� ����������))�������&����&������)����'�$"��

����������������2%%SLS�>��������������"����������������������"�M�����;M>���!�� �����!�����������������>����$���������������������������������������������������������������������������������">������������������������1�����>�4������+,�N��� ��+PP,�

Page 62: Game Programming With Python, Lua, And Ruby (2003)

� ;��

������N���������������� �+M�����;Q�M,P�������O�O�

���� ����$��������������������$������$8���������������� ����$������ �$��������������

4��"�������3������))���$�5�9����8�.�����$,����3����������$�������)$ ���$8�������$���������4�����������������������5������5�����������)������$������$4���$��0�4�5�������������������$������$�� �����'���������.� ��4�����8�������'������������"$�)� �$�����$��������� ��4�������$���5�

�� �$�8��3����.�4��"����$�������������������$�8���4�� ��)����������$�4��"����4�� �����

�$��$5���������$�����������+,���������� ��������)������� �$�4�� �����$��)�����5����$� ���������A�""������ &����[\5�.�������� &���������4��������� &���$���� ���$��)�

���5�+����3�������$���������������� &���������A�""������ &���5�

���$� ������������4�K�$������ ������ ������4L8�'�� �����3������������4�4������������

�����$,�����������4M�������$��7���8��)� ����8���))���$�5�%"��$8��A�""������ &��������

$������������ &����))�'��������$"��'����$����� ������45�

9�$����8�'��"����������� 8��� ����$��)�������������5���������������4��$����$4���������� ���$5����� ���������������$"�����������'��$����������4���$�������KL��$������A������$����&��II5����������������������� ���$�KML������)����'�������$���)����������$�8��������$"�

�$� ����$�'���������$5�����Q������ �������$��� �4����A�$ ������� ���������$�'���$���$ ������I2����JI����4��$���5�

����&������$"����$��� ����������'����.�������������)�'��7�������4���

•� %�������������� �$�'��&�'��������$"�����������4�����5�

•� �������������������+,5�•� ��� &����[\�������4������ ������� &�5�

%�������&����������$��75�%$��������� ���$8����� ���$8�4���$������8���� &��8������8����4�$����"$�'�����������$���4��"���������5������$,�� ��������)�'���������� ���$��7�$������� ������������"$����'�$�����������$"������'���������������'������$������5�

+�������*�#������ �

�������������$��(���������������������������������"��'��"��� �$)�"�����$���$"�"��)����$��4��"���������$������$�5�������'�����$��$� ���$�.8�'�� �����$������(����� �� ������������4��)���������� ����$��������)�%����.��$��.??5���$ ��������� ���$���������(���$����������&���$,�������&��$�.8���'�$,���4�$���������)������"��$"��3����$��.� ���5��)����'�$����4�������$�����.���$"�"�8����""����4� &�$"�4������&��$�.M������������$��������� ������)���5��

(�������4����$������������'$��������5���,��4������$��7��$���$���$"�"�8��$������������$��I���$I����4��)������'$5�(��$��������)$ ���$�����������'����$�������� ���$�8���&��.� ���������.�4��"���5����������������4��"����������$3�&���(�� ���8��������$��'������(��3��������8��$������$5�(�� �$����������7��$�������.��$��.�)$ ���$�5�+�,������&���������

Page 63: Game Programming With Python, Lua, And Ruby (2003)

� ;#�

����$�$"�(���$��.�K�$��(�,��.�%��L��$�����$�7�� ��4���8��$��'�,����7���$���7��$��$"�(�8������$8��$��/����$�.��4������5�

��������)�.��$���������&����� ������4�������$)��A�$�5��$�)� �8��������� �������4�����$������ ��4�����������$�)�$���$�����(���$���4���������$�5��)���� ����� ������������$"��$�.����������$,����&����$��8���$,��"���$��3��M�F�����3���$5�*3�$�����8����� ����'����� ����������'�����$��4��'���5�

���������(���������'����$����������$"�"�8��$�������������������$"�"�����.5�(�� �$����������������$�8�������)���A� &�"���4��"����������7��4�� ����$"���������5����������$����$��4��F� �����$�������������3�����$��������� �����������(��4��3����5�9�$����8������������44�� ����$����������(��������������5��������44����$�������3�������4��"���� �����$�.����$��$�(�8��$������� �������$���)� ����������(����$"�"��'����$�.5�

�$������ ��4���8�������������)������7��4��������4���(���$�� �$�����$�'��������(���$���4�����5�:��$"�(��'����$����������$"�"���������������� �3�����������$�����$�7�� ��4���8�'�������"�����'$������$"�(���$���"����4��"�����$"��$3���$��$�8��$��������$�.��4������8�'������,������ ����7��$��$"��$���������$"���"����3�����$"�"��5�

-�� �$$������

(�����)������)�'���8��$�������� �$�������$ ������$�����.��)������K$����(�L����$"�'��������$� �������4� &�"���)��������$"��$���$������$"�(���5�5�������$ �������"�$��� ����5"D�)��������$"�(��)����� ��� ���$������4���)������$���$�5�4��K/�������� &�"��1�$�"��L�)���(�$7�/���2��5�H�� �$������(��)����������� ���$��$��:��=�)��3����� ��$��'��������4��3�������&��)����5�

�$���������������(��)����������� ���$���+�$��'���� ��$�8����$��������3���4��$���$3���$��$����&��>�����.??�;5�����.�"'�$8����� &����)�����8�����4�� ��4�����'�$����7� ��������$����$�����������$ ������$�����(�+�$��5D�4�)���5��$�������)����������$"�(��)����� ��� �8�����D�4�)����'����4��3��������5�7���7� ������������������4�����(���$���4�����5�

�0�*�

.%:��0��

����4�� �$)�"������5�7���$���� 5�7����$��������������� �������$&��8����'��$���3���4�$"������4��F� ������'����'�$�����4�� ��������'����$�������$�)�������)�����)���(����� ������5����������������$ �������������������4�� ����$�����(������)������������������� �$���$&�'�����$���$�����5����������� ��$�����$��$��$������$"�(��������4�GG'''5��5��"�

(���5��'�������������$�%4��������5������$�'�)��������$��5���$ �����

•� .�����$���K ����������3��������������$"L�•� 9�����7� ���� �4�$"�K��4�� ���43����L�•� 1����������K��4�� �����"���$����"��������L�•� �44����)�������G�)�����������$��•� +��&��������

Page 64: Game Programming With Python, Lua, And Ruby (2003)

� ;��

•� ��'�%�����������•� ��'���������$���$"��� �$�A���

�������"�$���(����$"�"��K>�����$��5�L�'���)�����4��� �������������$�� #5�+����� &����$8�������$"�"��'���)����)���� ����� ���8���� ����� ������ �$��������������$�"�������5�2�'�3��8�$�� ����� ����$�"�������$���3���� ����8��$���$�9���� �8�'����>�����$��5�8������� �$����4�$���4���� ����� ������5�9�������������� �$��3�����$��)�(�8� �� &�'��������(�������4�"��������4�GG'''5��5��"5�

0��'������ "��)�������4�GG'''5�� "��)54 ����5��G5�

(��'�������"$�������$��$��$����$"�����)�������75������3�����������������������)�����4���$�3�$�����.M����F���$�����$�%����.� ��4�������� ��4������5�(���������$�$����$����$��������$�����+�$��'��4���)����8����������$�:��=8�(�$78��������8��$0�8�%�=8�:(�/�=8��$���/�=8�$��������$���$���7����48�0�G�8���$������������$8�1� �8���0�8�1���0�8�0�� 8�0�=8�*�0.8��$����������0�5�+��'J�%"��$8��������$��������$�%����.� ��4�������������(���$�����"�3�$�4���)���5�

+�������-� ��)�� ���

�������$����$���$���4������K��5�7���$�+�$��'���� ��$��L������ �����'����(������7����������)�8��������$���$��$���� ��3������5�+��$�)�����48������$���4���������4���������(��3�����$�$������$�� �4���"���$��� �����������4��)�����'�$��'8����$"�'������"����������$�KSL�������������4���4��K����9�"����5�#L5�

&����/('3(� )���� �������� ����$����� ��)�� ���

�$������$���4�����8��� �� ����$������������4���7� �����������������)�������4���������*$����&��8��$���������$����� �$����������������'�����(�� �$&�K������$�(�� �$&���$�F��������L5�����(���$���4���������)�����������8��$���)����$��������$��������4�����$���K)����7��4��8�'��$� �����$"���)$ ���$L8�����(���$���4����������$,���7� �����"����'��M��$�����8����'���������'��"����������$��������8��$�� ���$"�����������$���4���������'����$"�)����������$������)$ ���$���)�����7� ��$"�K����9�"����5��L5�

&����/('4(�+�����$ )$��$���0��� ����� �������� ��)�� ���

Page 65: Game Programming With Python, Lua, And Ruby (2003)

� ;;�

1�����)����� ����$����$�����4�����$������ ��4���� �$�����$��$������$���4�����8�'�� ������$��7 ����$�������)���"����$"���)����)���(�5����""�������&��4������$���4�������4�$��$�������������4��� ����������"�����$"��$��������&5�

���� �������������&$���

%��������8�(�����$����������4����$����3��������������$"�"�5���������� �����(��'������

���S����� ����$���$�����$� ���������'���������S������ ����$�5�%�$����)�(�������������$���)�����������$"�'����$����������4��"�����$����� �������� �$&5�+��$�����������7� ������(�� �$&8����� �$&����4�� ��4������$������� ����)�����3�������� ��$�8��$�����$������������$��������7� �����$�����A�$����������5������(�� �$&�������������$"8�4����4����&�$"� ��$"����������"�������$3���$��$��K�����4��������)�������� �$&��$��L8��$�����$�����$���K����9�"����5�;L5�

&����/('5(����������)$���� ���#�� �������� �$������

�0�*�

Page 66: Game Programming With Python, Lua, And Ruby (2003)

� ;!�

���������3�������� ��$��K>1L�'��� ��$�������$�1� ���������������� ����������$������$3���$��$��)�������������$"�@�3����$"�"�5�%�>1�� �������$��$���)� �����'��$��� ��4�������$���� �����$���$��4�����$"�������5�

(���������$�����"$�������$��7��$���$���$"�"�������� �$����������������$�����$����$"�"�����'���5�����(���$���4������K$�������5�7�L� �$���� ������3��� ����$����$������7� ���(��)�����K&$�'$����������5����7��$���$L��$��� �4�����$������)���"��$��8�������'$��$��������5!5��

+��$��/(6(�����-� ��)�� ��������������������� ��

������ �� ���)����

'�� *7� ���������������)����

'�������� *7� ��������$"������

' � ����� /�A�����)����

'��� *$������$���� ��3��������)�����$$�$"�� ��4��

'3�� ���$�������3�����$��$)�������$�

''�� ���4����$���$"��4���$��

�)�����(���$���4���������"�3�$�$����"��$��8��������3������� �����'8�����������'3�'��'��$�����$�����������$��5�

.�$&���)�(�� �$���������4�� ��4������$�������$����)����'����(� 5�7�8�'�� �����������$ ������$�����'�$����7� ������5�(� 5�7�������(������ ���� ��4����8��$���������������� ��4���������(����� �� �����$������� ���5��������&������ ��4�������$������������$���������$������������&�������$�� ��)�����5�������������� �������������8����F��� �����������)����'���� ��4���$"��$�����$���������'�������'�$������$�'�)����������K'������5����7��$���$L��$��'����������� �)����K5��L���5�

%���>�?��'��R� ���>��$�R� ���>����

����'������$���4���$����)����(� 8�'�� �����$��I��4�����)���5I�9�����)���������)�(� ��4���$�8������������5<5�

+��$��/(:(������ ) ����

) ���� ���)����

'��� ���� ���������$"��)����� ��4��������� ����)���(�,��3�������� ��$��

'��M ���M�� 0�4�����)���8��$�������)�������)������ 5���

'��� (����)�����������$���"�$�������$����4��)����

'��� ���)�����$��"������������)�4�� ��4����� �$&��

Page 67: Game Programming With Python, Lua, And Ruby (2003)

� ;<�

+��$��/(:(������ ) ����

) ���� ���)����

'3�� ���$��3�����$��$)�������$�

�0�*�

%��(��'���'�����$��$�%����.8����$�����������4� ����'��&�'��$��������$"�(���$�����.??��44�� ����$�����������I$������$"��$"I������.??�4��)����5�H������4�� ��

�?�����MLM����$�������$ ����$��)�(�����������$���.??��44�� ����$��

�?�����MLMN�����������M���>�M�O�

(������$���)��� ��������������� ��� ������� ��3��8��� ����������4��8� ���$�%����.5�

�����4��$������&��������?����� ����$��$� ������M�'��������8����'����"�����$&�������5�

������?"�$$�����$�?�

(�����A������))���$�����$������������'����$"�"���4����$�����$���������&5�(�����4����������$��7��$���$���$"�"�8��$��(�� ����������������������'����$�������5�H�,���)�$��(��������$"��$�����.8������$8��$��/���� ��4��8����$"�'����������������C� ��$"���� ����'����$� ���5��$���4��� �3���"���)���'����4��"����'����(����� �3������$��� ���$����)���������&8��$��'����)����'�����F����$��7��4������'�����$�,���44�����5�+��������$������$��$"��������(��I2�����+����I�4��"����'����$���������7����'����$��$��������$"�"�,�� �$��� �8�'����$"���I2�����+����I�4��"�����$�(������3�$����������$�����4�������$��$������$����.��

''�''��2%%S%�&S�>����''���������"����������������������"�M�����M�>�''�!������������������"�$������"��������������������������>�''�������M�����������Q�M�

���� �������(�,�� ����$���������))���$�M�������������&�������'���������K��L��$�������)���4�$��KTL���"$5�%����$��� �����������4��$����$�������)������������7� ������&������.�3�����$�2����O.O�5 44����3�8��7 �4���$������ ���������������$���$���������4��������������)�������

������ ����$�8��$����)�'��)������������8�$�������������� ���$���$��4���$������8�������)����5�

+��������*�#������ �

/����������������������7���4���4�����$"���������K� �����:��=8�(�$78��$��9������L��$�����'�����$��$�����.�4��"�����$"���$"�"�5�%����"��/������ ��)��������

Page 68: Game Programming With Python, Lua, And Ruby (2003)

� ; �

�$�:��=8�(�$78��0�8�����3������+�$��'��)��3���8�1� �$����8��$��$������)�������4���)����8���,����������������$���������7��$3���$��$��'��������'������$5�

/����$�+�$��'��$�������)�'��������$����������$���������������������������$3���$��$�5��������������$ ������(�$7���&���$3���$��$��)���+�$��'�� ������ �"'�$8��� ���� ���$��)�+�$��'���������)������$������������ ��������$"'8��$�������@�����������)�'����������K�F"44L5���� ��4�����3�����$���)�/���'�����������������$ ����� �$����)�$���������/���.�$�����+������8�'�� ������������/���I�$�� �� &I��$��������)���+�$��'��������4�GG'''5��� �$����5 ���

�����������3�����$���)������ ���� ���$��)������� �$����)�$������������'$����4� ��3��+�����������'�����

•� ����(����4�GG'''5 �"'�$5 ��G5�•� ���(����4�GG'''5��$"'5��"G5�•� �>))(����4�GG'''5�������5 ��G5�

�����+�$��'���$�� �� &��$���������$����������$ ������$�����.�������� ��4�$������������&8��$�� �$����)�$���$�����/���)�������X/:�H�

-�� �$$�������

�����������3�����$��)�/��8��5<5������)������'����$"8� �$������'$�������)��������/�����$"�"����"�$�D����$�+�������������4�GG'''5������$"5��"5��

��3���4���� �$��������&����4��&����������� ����������������� ����$5�/���>�����$��5<5�����������$���������&,��.���$�����X/:�H�)�����5�

+�$��'������� �$����4�����������$�� �� &��$���������7� ����������$������/����$��������� ��$��M�F��������� �� &��$�����<����5�7������$�����/������4�+�D���5�H��������3����������������� ��4�����)���'����5�

���4��)����$������$"�/����$�������7��$3���$��$��'����3���8���4�$��$"��$�����4���)�����$��������$��$���7��$���$��������� ���������$&�$"������$�������������$�5�����)����'�$"� �$��$�������4��'�����))� ��)��������)��&�8���'�3����

�5� �� �������4��������������'����4��3���"���)����$������$"�$�'�4��"����5�

�5� /$�������� ���"�$������ �$)�"��5�

�5� /$�>*��� �"�������"�$������ �$)�"5���$��������&�)���5�

#5� /$���D�5�

�5� /$���D���������5�

+��������-� ��)�� ���

/��� �$���������$���� ��3����'���������$���4�����8� ���������8������ ������$�����'����

��5�9���:��=��� ��$������$��������������G��������@�� �%! ��$3���$��$��3���������$��

Page 69: Game Programming With Python, Lua, And Ruby (2003)

� !��

��&����������� ���$&�����������5���)�����$�����4�����$3���$��$�5����$���� �$���4���$�������� ���������$���� ��3��/��������5�

0$�+�$��'�8�������������$�������������)�����$�����4��"����)���,������ ����8��$������/������������� ������������"��������������$�$�������"�����K����9�"����5�!L5����� �������4�����$������ ��4���� �$�����$�'���������$���� ��3��/��������5�

&����/('6(��������� ��������� ��)�� ���0���� ���������������

%�4��"���� �������3��8�'�� ������$ ������$��������4���G���� ������)�����/�������������$8�����'���������$�����74������$���$��3��'�������3����5�

���� ��������������&$���

/���4��"����)������$3���������$��'�����$�5����7��$���$5������ �$���� ��������$�����4������3������$��������������)���7��������5������&�����$"���3�$�������8�/��� ������$�����'������$�)��������)���� ��4��$"� ����������� ��*8�'�� �������� �$��������������7��������5�� ��*�����)�������)��������$"��$���$$�$"���$��&�$����)�4��"�����K����9�"����5�<L8��$�����$������$���������$��7��)�����������$"��)���))���$�� ��4������$"�"��8��$ ���$"������$8�(�8��$��/��5�

&����/(':(�+���,�+*��� ����������00� ��%���$�����0��������� �1(�

Page 70: Game Programming With Python, Lua, And Ruby (2003)

� !��

*1��� �������

/��������)�K�������8�/��5�7�L�������$������$��$����� ����$����$�8�'���������,������:��=����������+�$��'�� ����$������0�5��������� ���$��7�)����$$�$"�/���������)����'���

��$����������R����"���#��������"�������

���$"��� ������)����� ����$����$�8�/���� �4�����$������)�)$� ����$����$���4���$�8�����'�� ���M���������������$����$��������5 5�

/��� �����'������/���+�$��'���7� ������ ���������'5�7�������'�����$��$���+�$��'���$3���$��$��'��������$ ��$"����0�����+�$��'�� ����$����$��'�$��'8��������+�$��'��4���)����'����$���������3��5���)��������� ������'���������7� ������)�����$ ��$"5�

/������4�����������������$��$���4��������$"�"���������$��7��$���$5�0$���7�������� ����$����������)�$��/����$������3����� ��$����&����+������3���'�������������������$��$���4��������$"�"������$�.����� ������+���)������$�� ��&���5�/��� �$�������������������$���2�1(��� ��$��8��$������ ����$�����)�������$"�"�5��

+��$��/(;(������������������,� ������

������ �� ���)����

'���"���� �4� �)���������$4���� ������4�������K]GL�����$�� ����$�����

'��� ��$���$������4���������

'��� .�� &��������$��7��)������ ��4���$�����$��7����'�������7� ��$"�

'T��� �4� �)��������E%�@��K@�4�$���� ���� ���L� ��������

Page 71: Game Programming With Python, Lua, And Ruby (2003)

� !��

+��$��/(;(������������������,� ������

������ �� ���)����

'��� ��$���$����"������

''��$�"�� ��$���$����"������

'��� :��������4� �)����� ��4��)�������� ����$����$��

'5�� :��������4� �)�������$4��)�������4�������

'��� ���$�������������)��������� ����$���4���$��

''������ ���$�������������)��������� ����$���4���$��

'!�� �4� �)�����$�4�� ������������

'��� *$������������� ���$���$��$"�4�� ����$"�

'��� :��������$�����4�����������$�����$������"�3�$�� ��4��K���4�$"L�

'��� ��������U�����4��$�������3�����)�3��������@S������ ���$���)��������4�

'��� .�����/�������������"�3�$�)������$"���J�����

'��� *$������������'�� ��4����$"�)����'�� ����

'#�� 9�� ���/��������������&����$3���$��$��3��������������� ��)���� ��4��

'��� 9�� ������$����4�� �� &����������$����$��������"�3�$���3���

'3�� *$������3������������

''3��$����� *$������3������������

''3�������� ���$�������/���3�����$�

'��� *$������3������������'������4��$��$"�����3�����$������"�����������"�$$�$"��

'?A���������B��

������/������������� ��4���������������$��������"���$���'�� ���������"�3�$����� �����K�)�4��3����L���)�����7� ��$"���� ��4��

'0�� .�����/�������'�� �������"�3�$����� �����

'��� ��$���$� ��4��������"������

''����$�"�� ��$���$� ��4��������"������

��������� ����$����)���"�������������3��/������� ������'����.�����$��7��$���$5�����/����$���4�������������������8��$��������4����������������������$�����/����$���4�������$���.���������� ���5�@�����&��(�8�/���������)���.�%��8�'�� ���,��� �3����$�.��4������8��$���������7��$������$����$���'����.����'������������$"�"��M��,������ ������$"�������$�.��4������5�

�������?"�$$�����$�?�

%�I2�����+����I�4��"�����$�/������&����������&�������$,���

�;*���*$��*��$��

Page 72: Game Programming With Python, Lua, And Ruby (2003)

� !��

����������������2%%S�� �S�>��$������������"����������������������"�M�����M�>���!�� �������������������������$����������������������������">�������������������M�����;M�

/��,�� ��������7����������������$����$�������7��4��5�%�������$������ ����$����$���������4��$��$"�'����������$�����)��$�����4�8��4� �$"8���� &���8��������� ���$�5�>���� ���$8������� ��4�����4������������� ��4����'�����/�������$�����$8��$��$����$�8����������'���������5�

��������������������������������������

Page 73: Game Programming With Python, Lua, And Ruby (2003)

� !#�

,�������

�,3�� �3�����A�����������$������������ ��4���5���)���������3���$����������4� �)� ��'���������$��$�����$�7�� ��4���8����������������$"�"����������$8���,���'�$�������������������)��������'����������$���"� ��$��"�$�����4��"����)��'��$����� ����'���� �$�����$����$���������3�� �$����� �$��� ��5���4����$��4��$���)��������� ��4�����

•� �����$8�(�8��$��/�����"�$�D����$��&��4�� ��3���������)�4��F� ������������4�������7��$��3�5�

•� 1�����$����"�����������$�����3���������������$��� ����$"�"�5�•� ������$��4�������8�������$� ��4�����$�8� �$�����$��� �$������������$��8��$��

�������3�� �$������������$��� �$��������������� �$���������)��'��)���4��"���5�•� (����8�����$"�8��$����$������)������� ����$����������&��$��������$������$���

��������'����$��� ����$"�"�5�•� ��4����$��$"�I2�����+����I��$������$�����'����$�.���&����������$����)� ����

�$������������������$��$���)�������������������$"�"��5�

���������������������������������

Page 74: Game Programming With Python, Lua, And Ruby (2003)

� !��

7��� ����������������

'8� 6��+������������������4��F� ����$������$��$��(�����$�/��-�

�8� %��/������4�������������������))� ����)�������������$"�"������)�$���3���$ ���)��$�����"�����$�����5���������4������������������$"�"����������K�"��$8�����������$�/�����3���4��$������$�@�4�$���L��$��������� �������4����������$����������$"�/��������)���4��F� ���'��������+�����+����+��8�=1(��$��"�����$8���7��4�� ����$"8��$��"�$������ ��4��$"5����������$,�����$�/�����$,��������)���"������3���4��$�M�A�������� �$�����8�������'���������������5�

/8� 6������������&$�'���'����4��"����I2�����+����I8�'��$������"������'�����"��4�� ���$��"����-�

�8� %��H�,���������'����$"�� ��������$���4��� �����$�����3����$�7�� ��4���5�

����������������������������������

Page 75: Game Programming With Python, Lua, And Ruby (2003)

� !;�

*1�������

'8� ��� �����������))���$ �����'��$��� �$�����$��� �$������������$���$���$��������3�� �$������������$�5�

/8� ������$���"� ������$����'��3����5�+�� ���'��3�������������-�

28� +�� ������*� ���� ����K����� 8����� 8��$����� L�"����'����'�� ����$"�"��K�����$8�(�8��$��/��L-�

38� +��$�4��$��$"������4����������$��K��&��I2�����+����IL8��$���)�����������

��$"�"���$������������������� ����$���$�������)��������� ����$�5�+�� ���$�������-�

������������������������������������

Page 76: Game Programming With Python, Lua, And Ruby (2003)

� !!�

���������������������������������

����$�7�������� ��4�����������������������$5������4�����)��������&��������'�����$��3��3��'��)����������$���$"�"���$��������$��78����$���3����$�����7���$�� ����$�����������������)���'����$"�"������$������$8��$ ���$"���"�����$����04�$(5�9�$����8���)�'������'����������$�"����4��F� ��������7���$��5��

Page 77: Game Programming With Python, Lua, And Ruby (2003)

� !<�

��������(��)������������������#$�����

(������$"����$�������

CC>��"���K!��� ��.L8�/���$�4���8�I%�$���I�K���$������$�������,�����$�&�������$��$�����"����5L�

(��,��F�4���"����$���4��"�����$"�'���������$5��,���������'�����$��$���� ���$������)�'���)���������$�����$�"�3��������4������3��3��'��)����������$���$"�"�5�

Page 78: Game Programming With Python, Lua, And Ruby (2003)

� ! �

�� ����*1��� ��$���

H�� �$��7� ���54��)������$ �������$�����$���������$������� ��$�8�������������$,����&�����������$�"����4��"�����$�3��������4�������5�H��������$������� �$3��������� ��4����$������$������7� ������)���'����3���4���)�������'�$������$��$5�( &���8�������������)�'������ ���)���� ��4�����$"�F�������5�

���%����� ���������

+��$��������������4�������$������$����������������8������$� ��4�������������3�$�� �����$�������� ���8��$��$����������8�4�������8� �����������'���3�����$������$"�"��)���5����������� ��������������'��������54� ��))�78�������)��������$� ��4����8��$�������)�������4� ���54�5�

�����$,��54� �)����� �����4�$����"��������((��K��$��� ���������������������L������$�.5�/�"����54��������� �$����������$��� ����8����8�������� ��4����������$� ���������"������$�������$��$���4��������� ��������$�����'��$�����)���������4�����5�

��� ��4���$"�� ��4�������$��'�������4����4������$�4��"����������$���������4������$��������5�H�� �$���$���D����4��"���,�������4�����������&�$"�������� �� �������&�4���$����� �������'����������$�'������3��� �������'����$"�54� �)����5�

H�� �$���������4������$�4��"��������54� �)���������������$����54��� ��4��5���$ ��54� �)�����������$���8������ �$$�������$����� ��4��8��������� �$������$��������������$��$���4�����M����4�����������$�����)�����54� �)��������$�7�����������$������$8���&��������

������������>����

�$����������������� ��4����������$�)����)�������������$��$���4�����8���4����������������

)$ ���$�)����4�O ��4�����$���$������������� ����$�8���&��������

������S������������������������������+M������S��S�������>��M,�

&���@��

9���D���������������������&��������$�� ��4��)������$����$��������$����������4� &�"����$���.�)����5�0��"�$�����9���D��'�����������$��'���������4������$���� �8����������$�'����������)$ �8������"�����'��������������3���������$�>�����$��5��)����� &'����� ��4���������5����� ��4������ ��4�������9���D��"�$�����������'���������$�4��"����������4�'������������� �� �����$�4���$�3��'��$��'��������$"�54� �)����5�������$�)�������9���D�������������� �$����4������$�����'��5 �)������$������&�)�����$�������)������54�8��$����� �$���&�������$��$������$�4���)�������������$�����3�������$��$�������5�������'$�������������9���D������$,��'��&�'�����$��������'�����&�$�����$��������+�$��'��:��5�

Page 79: Game Programming With Python, Lua, And Ruby (2003)

� <��

�� #�, � ��

% ��3������������ ��4�$�������)� �����$��44������4�$���� �5���� ���������3���4��$��4� &�"���)�����)�'������3���4�����$��4��3���������� ���)�������8������$8��$���2����3���4��$�5�% ��3������� ���$���������������$�����������$� ������% ��3������$5����������44����� �����$"������$�/�1�K/���2����� &�"��1�$�"���L��$��������8�+�$��'�� ��4������$��������8��$����>�����������5�*����*�4�"��$�)��������$5����������3� ���K���������)���8��������$��L������3���������������% ��3������������$�+������8�������4�GG'''5� ��3������5 ��G������$�G���"������G�����$54��75�

)�/�1��

����4���7���7��$���$�����$��4�$���� �������������� �$3����������$�� ��4����$����7� ������+�$��'��4��"����5�������)�'������� �4���"���������������2������������)������������������8��$����,���)�$���� �4��'���������� �$����$������ ��4�$��$"�.��$���������$G4���7�5�

�����7��$���$����������$������3���4��$����������74�$������ �$��������$ ���������������������$������$�� ��4����$���+�$��'�������&�����3� ��M�����������$�������� ��������$������)�4�4���������$��44�� ����$�8�� �����'7�����$8��&�$���8��$��4�"����K��,���"������&$�'��������44�� ����$����������������$�����$�7�� ��4���L5�

4���7����������������K�����$�����������$�:��������L��7��$���$8��$����������$�����'��&������"�+���������&�������$�4��"������������������K����������������+�������������4�GG'''54����$5��"G�� G ���$�G����GL5������������������$� �������)���4���7�����'��&��$������������$ ������$����������$�)�������$���������&,��.�5�

Page 80: Game Programming With Python, Lua, And Ruby (2003)

� <��

�� ������������

�����$� �����'������������$�4���K�����$����""��L��������������)�$����$��$���� ��3����� �� �������""���)��������$�4��"����5����������$����""����44�������$������)���)��4��"�����$"�)$ ���$�8�� ���������&4��$�������$"8���� &�)������$�4� ���$8���� �� ���������$"8��$������$8����$)���$�������������""����������$�K������� ����L�4�������� ��$�����$������'�$��'�$"�3�����$�������K'��L���� �$��������������4������3�5��

��$ ����� ����3������""�$"����� ���$���4����$��4�����)�4��"�����$"8���)�'���4��3���$�����3�����$��������������7����$"������$����""��5��'��4�4����)���������$����""�������� ����$������5�����)�������������$+�$8����������$�)���+�$��'���7��$���$5�:$)���$����������$����$���$�+�$��'�5������� �$���������2%��K2��$"���%������$���������$L����""�����3���4������2��$"��5�

�� ������

�����$+�$�����������$����""����$���$���*�������$���$�+�$��'�5�>�����$��)��������$��5���$���5�������$ ������$������ ��4�$��$"�.��$���������$G���""���5������$+�$������ ���$"��������$�����+�$��'�����""����$�����$�'��$ ������$����������������$���)������$�K)����$���$ �8��$�% ��3������,��% ��3������$L5������$+�$�������:���$3���$��$��K����9�"����5�L���� �$����������$�3��� ����$����$�5�

&����2('(� )������� ��0� ����� �������������

�����$+�$�������� �������'��44���)�������19.�K1� ����)��9�$�����$�.����L����������5������$+�$���� �4���"��������1��&�2����$��������)�������������$��������������������$"���������� �$���K)�$���$����������(� �$����)�������$�����������$G���""���G�����$+�$�)�������$�����.�L�� ��4�$����������$���5�

Page 81: Game Programming With Python, Lua, And Ruby (2003)

� <��

+��� )���,������"����������

2%�� �$����)�$�����$"��������4�$���� ����� �)��"��4��F� ���K���4�GG��4���""��5��� �)��"�5$��GL��$��������������$��������$�(�������$��������� �(� �$����K��� �$������������ �$����$���������$�����.���$�����(� �$����)�����L5�����2%�����""��� �$�����$���������8�'�� ����&�������$��������������)����� ��4����"�����$��������$3���$��$�5�����"���� �$��$��$�)���� ���$��$��$���� ��$��'��������� �$���� ��$�� �$����"������������5��

����2%�����""���>�����$��5������$ ������$�����.�8�$�������������$G���""���G2%��)�����5�2%��'��������'�������������������������""���'������3����� �$�����"������3���4��$���$����3���4��$���$�����1� �$����8���� ���$��������$���$����$�+�$��'��������$��������������'����>�����.??5����4��3�������)�'�)��������������$����������$����""��� �$$��8�� �������)���� ���$�������$��������������$"5��������""��������'���44�� ����$�5�����)��������������������$����*8��$�������� �$�������������������""�$"�����5�����)������44�� ����$��$��'����3��������$�� ��4��������$"����""����$�����$� ���$� ��������������*�3�����$��'��&��� &��5�

�0�*�

.�$��������$,����3��&��������8��� �8��������4�����$�����8����������)���������$����""�����$,�����"�����'��$����$������������ �$�������4��"�����'�����$��$������$5����������$���)����������$��2��$"�����3���4�������2%�����""��������������""�$"�)��������)��������4���)�����$������'�����������"��$��� ��)�� ��4�����$3���$��$�5�

�0�*�

0$������� ��4�,��2�������

��)����2��$"���*$������$��$�����������$8�����������$��$���$��������$������.:11�K� ��4��.������$�:�������)���1�$�� �1�$���$L5�1�$�� �1�$���$�'�����4��F� �����"�$�����$����( ��9��������8��$���.:11�'������� ������ ��4��$"���$"�"���$��"�����$"�$�����������3���4�1�$�� �1�$���$5�

�.:11�'��� ����������%�� �+���$�����$��/�$��������'��$������'��&���)���( ��9���5�+��$��������������)�$����2��$"����$��.�3���"�*$������$��$���$������� �)� ������'���8�������"���'���������.:118�'�� ������$�'� ��4�$����������� �������3��������))���$��"����8��$ ���$"�2��$"��,�����"�$���4�4����9������9���8��������8��$����F�������� ������$,��������5�

�.:11,�����������$���� �������������� ��$"��)�������� �����������)���8��$������������������� ��4�$���'�� �����3��������$"�.??��$�������$�)���"������3���4��$�5�����)�����"�������� ��4����'���������$�'����� &�����2� &��5���������(�"� 8�%�8���$8��$��� �����7� �������)��� &�����2� &���'�������������$8�'�� �� �������$�.??��������)������3��"��4�� ���$����$��'��$�$� ������5�

Page 82: Game Programming With Python, Lua, And Ruby (2003)

� <��

�� �����������, ��� ����

��'��������� �$��$�������$���$������$��$���3��������)�'���8���,����������"������������$�����$�������$"�"�������)5�������� ���$�"�����3��������$,����4��8� ��������$�)��������� ��4���,���� ���$��$�������$�����4�8��$��������$���� �����)�'�$�'� �$ �4��5�

�� �������� �� ���

%�������3�����$�)��������4��3����2�����+����J��7��4���8������$�����$,��$�����������)�4$ �����$5��$�4���� ���8������$�����$,������������� ���$�KML�������&������$���)���$�5�:$��&��.8�����8������$������)���������$"�"��8������$���)�����$������ ���������&���'������$�'��$�8��������)����'�$"������ ��4����� ����$���$������$��

������M�����M�

.������� &�������$�� ������$������$�����$��$�����$�)����'�$"����������$���$��$"��$��� ���$8�)����7��4����

� ������//�������������E������������$���D�� ����������E������������$���D�� ������

����$"��������'������4� �������� ���������$���������$"����4�������������������))� ������������"����3���'��$��'�� ��$"���������$�)�����$��������$"�"�5�

�0�*�

.%:��0��

:��=8�+�$��'�8��$������1� �$�����04�����$"��������������3����))���$�� �$3�$���$��)�����'���������$������$����$���7��)����5����������$�$)���$����)�������)������4���)����4��"�����$"8��$����$ �������$����������$�������$��������$��78����������$�� ��4���'�����$��$���7��������������$���'��&��$���))���$��4���)����5�����1� �$�����3�����$��)������$��� �$����)�7��������4������M����$�'� �� &����$���$��$"��'��$�����4�$����)�����$����F����������$���4���)���������5�����������4�����������)�$�����'�������)����������������������$���)���$�� ���� �����)�����))���$��4���)����5�.��4���$"�� ��4����������� ������)����4���)������44�$"�����$������4��������'��&���$�5�

�������+�)���

�����$��$ ���������$�)���)�������$��������4���K�����������5�LM���������� ����$��������)��������������4�������$�����8�����$"�8������8��� ���$�����8��$���4���5������������)��������3���8������"��������������3�������))���$��$�������4��8���4�$��$"�4�$����� ��4��7�����$����$"����)�����$����������$�����������������5�����$"���������4�����'���)��������5�(���������"��4����������������� ��4�������)�$����������������5��� ���$�������$���4����������3�$ ���3����������4������������������������������$�� ��4������������������$���������$"�"��5���������4���������3��������$��4������$�8��$���������3��������$�������������������)�����$���$"�����5�

Page 83: Game Programming With Python, Lua, And Ruby (2003)

� <#�

+��$��2('(�.�$ �-���� ������ ��+�)���

������ �� ��"�$��

������?�� .��4��7�$������K�����������5�L�

������ �� ���$����

����� 9����

������ 9�����$"�4��$��$�����K�����������5�L�

��?��������+�?,�� 2�7��� �����$�����

����� �$��"���K�����������5�L�

������ (����

���"�� (�$"��$��"���K�����������5�L�

�$C����� �������F� ��

�����+�,�� 0 ����$�����K�����������5�L�

����� ����$"�

������� �4���

��������� :$� ��������$"�

��������

�����$�������3��������� �$���� ���4��M������������������$��������5�5�

+��$��2(/(��� ����.�����������+�)���

+�)��� *1��)$��

����"���� ��

���"�����"���� �������%�

������"�������� �>��

������?�� �>�C�>��

������� �����

��?���������� �?�����

�$��"����������������� ����$������������ �$��� ���$������ ��4����������.,����$"��$��"��5�(�$"��$��"����������D��$���������$��"�����$���������&�������$��$��$"�(5�9�����$"�4��$��������$��"���������$������)�����$"��� �����4��$���$�������A�3���$�����.,����������4�5�0 ����$��������'����������'�������8��$����7��� ������$��"������'������"�$�'�������7��$������$5��

������� �$��������"$���F�����&�����'�����$�����"��� �������"����������4��������

Page 84: Game Programming With Python, Lua, And Ruby (2003)

� <��

0�/�9�

�������� �������4��������K?8��8�P8�G8�PP8�^8��$������$L8�'�� ��'������������$�.��4�����8� �$���������$��������$�������������� �����$��5�

��R�D��?��J�������-�������:�?�/�+-):,���R�D�����J�������-��������������� �:���/�+-�))�:,���������

�����$���'������$�����'$�'��$�'��&�$"�'�����$��"���8��������)������3���������������'������'����"�����$�����������)�����$"�4��$��3����5���� ��$"���3������)�����$"�4��$������8����4���4�� �������� ������$��$���)������A����$,��$����������'����8���&������

�������������J������?�/�+�*-�,�������?�������������"��������� ������"���������/�+�>�*-�,���������

�$��������$������������ �������4�������8� ��4�����$��4��������KS8�R8�JQ8�QQ8�Q8�SQ8��$��RQL��$����"� ����4��������K�$�8���8�$��L� �$��������'�������� �������$������$5��������4�������� �$������ ��4��������$"���$�������5�

�0�*�

������$ ����$8����I��$��$"���'$8I����$"��$��"�����3����$�����$���)���������� ����$�������$"���� &��)���$�'��������������$5�

�����$� �����'������������$�����������������4��)�����������)����� ��4��7� �$���$��)$ ���$�5���������� ����$� �$���$���������������$��������5�5�

+��$��2(2(��������&��� ����0����� ��

&��� ��A���� �� � �����) ���

���� ������������� ��� �$���$���44��7���������A�������5�#�

��� ����������)�����$��������"�������K�$L��44��7���������A�������5!�

����� 9�$���������'�����$��7�'����������� �$������$"�K��"��$�L��44������$�����)�����

�����$������������������$��������������F���)��������$"�'������$����$�����5�%�)�'�

�)���������� ����$��������)$ ���$��������������$��������5#5�

Page 85: Game Programming With Python, Lua, And Ruby (2003)

� <;�

+��$��2(3(��������� �����&��� ����

&��� ���������) ���

������ ������������$����$�����"�$������M���)���������������� ���$�������

�������� /���$������$�7����$����$����������)�����$"�4��$��$��������'��$����$���5�

��������� /���$������$����$��������'��$��'��"�3�$��$��"����

��� ����� /���$������$����$��������'��$��'��"�3�$�)�����$"�4��$��$������

�������� /�$������ ��������$������$��)���������4� �)�������������4���

, ����

H������"$��������$"���$������$����4�� �$"������'����$�A�����K�������$"����$��������A�������������'��L��

������M�����M�I�����I�

����$"�������8���3�����8�����$"���)� ���� ����5�0 ����$��������'����'�$�����4��$�����4� ���� ���� ���8���&����A���8��$�������$�� �4���������������$����� &����������$��� �4�� ���� ���5�����)����'�$"���$���

������MQM�����QMM�

4��$�������'�����������$�A����5�%�)�'������������)������� �4����A�$ ������������������$��������5�5�

+��$��2(4(��� ����*���)��,�B�������

,�B������� &��� ���

Q��� ���$�����$�'��$��

Q��� 2���D�$��������

Q$�� ����������������� ���� ������4���

Q��� ����������4�

QQ�� ���$������� &������

Q��� ���$����� �����"������$�

(�&��'����3��������8���� �$���$�4���������$"��'�����4�������5�9����$���$ �8���� �$� �$ ���$��������$"��'��������?��4��������

��������������������D�����������"������������I��I(ID����I�

Page 86: Game Programming With Python, Lua, And Ruby (2003)

� <!�

%$����$"�����$����'����������������� �����������$�'��$�8�Q�8��44�$���������5��)������$,��'�$����$�'��$���44�$���8����$����4��������� �������������$���)�������$��'����

�����������������$��K������$���'��&���$�$�$��$���� ��3������L��

����������������������������������������������������������������M!�C������������ ��M��������M��D���� ��M��������M��������D�M�

�� ��

(�����'�����$���� ����$�����.��4�����5��$������$8��������������4���"��4������� �$������)���$ ����$����������$����5�H������4��������'����$���� &����_`��$�������5��$��"����$��7��������������������5�����)����'�$"� �����$�44��� ��������������'�����'���$�����8�

�$���������$"�M5���M8��$���$���������$"�ML�������M8��$�����$�4��$����$�������

�����/�AM5���M��ML�������MB�����������A�B�

�$������$8�������������$������)��$���$�� �)$ ���$�8�����������8����������'������������4��)�����4������$���$�������F� ��)���'�� �������������)�$��5�.����$��������������������������$��������5;5�

+��$��2(5(���������� �!� ��������� ����

)��� ���� ��� � ������

�����/����"�+,�� .��������������

����>������+,�� %�����$������$����������$���)����������

����>������+����?���������,�� �$�������$������$���������?�

����>����+,�� ���������������

��������AEB�� ������������� ������� ���$��)��������

����>��3����+,�� /�3���������������

����>�����+,�� /���$������$������)������$����$������

����>�?����+����-,�� �$����������-���������$���)������

����>����3�+,�� /���3����$������$��)�������������

��8�)����$���$ �8���� �$��������������������4��������$"��������������������

����>�������+M������M,������������

Page 87: Game Programming With Python, Lua, And Ruby (2003)

� <<�

0����� �$���� ��4������������$"��� ���$5��������'�$�����4��$��F�������)���������"��

������ �$�������)�����������������5�@����������)����'�$"��

����������A�E-B�

(����� �$� �$���$��$��$������)�������3��������8��3�$�����$"���$��$�����8��$��������������8���� �$$��� �$���$��4�������$�����������5�0$ �� ������8������� �$����� ���������$���8��$���$���$�����$�������� �$����� ������'��������3��������$����5�H�� �$������

��)���$ �����������������$�������������$"�U�����������)���$ ��$����5�

��������������������������������������������������E�����������A'�B�

H�� �$����������������� ��4���������74���$����$�.��4���������4��)������"� ��$������5�

�������$�������4��$�����������������'� �5�@������������

����������(�����

(����� �$��������� ��4����5��$��� ������&��������

A���-��.��=B�4�A���-��.��9B�

����)�����3������)��� ����������� ��4����5��)�����������A��8�����$�7���'��3��������� ��4����5��)��������'�������A��8�����$�7��3��������� ��4����5������ �$��$���$��������3�����$��$�����$����A����������3�����$����������M��)������)������������$��� ������������A��8����$����������������A��5�

�0�*�

.%:��0��

.���� ������$�������$"�� ��F�����&�������$����$�������8��$�� �$������$�4�������$���$���)����������'���8������� �$$�����4�� ���$��3����������$����$��������$�����$"���&����� �$�'����������5�

�)����$����������������3�������A�$ ���)�$�����8�����������$�)$ ���$����"�+,�����7����������)�5����"�$������������� �$���$�$"���������� �4��"������$�8�)����$���$ ���

�������������������"����������$�����������"��G������������������������������������/���"�+��,�������������

������4������������������"������������$������$����8��������4� �)������))���$���$ ����$���

������ �������"����������"����������$����9'G��������-�����-/���"�+9����,�

Page 88: Game Programming With Python, Lua, And Ruby (2003)

� < �

����������-������� �������"��������������������������C�����$��9�� �����������"��9����������"�������������.�����./���"�+���9���9,�����������.������� �������"������������������������������"���3�����$��������=/���"�+'���'9���'9,�����������=�

+�)$���

�����$��������������� ���� ���������4��5��4��������������������������$�����������������������8��7 �4��������������������"$��������4���$��������$�������)���� &�����

�������/�+����$���,�

H����$,��� ������$����4���$���������� ���������4��8���������� �$�����������"��)������$ ����������

�������/����$����

H�� �$� �������$���4����4������$����$ ���$"��$����$"��$�4���$��������

�������/�+,�

����������������3�����$��)������4��8� ����������$"����$8�������$��������$��3�����

#��"�������/����

+�����������$���������������A�$ ����)�������������8��4����K��� �$3�$���$L�����$�����������������������A�$ ����)��$)�������$���������$,��$� ����������������5�9����7��4��8�'�����������������������������������������)�$�����8����4���'��������������)�����������$���4���� ��������$�C$���8��������8�4��$��$����8�����$����8��$������$C�����$��$����A�$ �5�

���'������&����4��������4� �����$����))���$�-�+���8�)����$�����$"8��4���� �$����$�������$��$���$�������

������/+��-�.,������-/+=��9��:,������.�/��������������-������������.�

+��$�����$���������������$���$��4��$����������.��������4������

++���-��.,��+=��9��:,,>�

Page 89: Game Programming With Python, Lua, And Ruby (2003)

� ��

�0�*�

����

9��� �$3�$��$ �8���������������+,�)$ ���$������ �$3������$������������$������4��5�H��

�$������4��)���������44�������4������$8���$"���������+,�)$ ���$���� �$3�������4������������5�

H�� �$�������'������$� �$��$��������� &����$����"�$�D�������4������"�����5������$"��4������"�������$������'��8������ ������4� &�$"8� �$�4��3���������������)������$"����&���'������$���$�����������$�.5�

����������$��������$�������$"�)�����8� ����������4�������"$��$��8��$��4���5��

0����/������

�����$�����"$��=��$��H���))���$��3����8�����$������������$���)� ���5�1���4�������"$��$��� �$����3������)���$��A������������3��5�

�� �������

�����$���������������� ����������������������������������M����������� �������� ���$�������$�������$��7����������"$���&�����$�������)�������� �$���� �����5�0)��$� ���������� ����3��������������������$���������$"�"��8��� ���$���������� ��������$������$��$�� �����������'�����������8��7 �4����������������������� �������$��7�������� �$������)���$ ������ �����4�$��$"�&���5�%$��7��4����)��������"��������4��$������ ����8�'������� ������4��$��$�����K3���L� �$������)���$ ��������4����$,��$����K&��L5�

�� ���$��������������"$�����'���� ������� ����$�������)���� &���5�����&������������$��7�����������'����$����� ���$���������������4���8�������'�������������4����"�������)��$5�H�� �$� �������$���4������� ������$����������'������ ��������4����4���8��7 �4������������4�� ������4���$�������'���� ������� ��8���&������

������������/�NO�

H������"$�&�����$��3������$������� ���$������$"� ���$���$�� ����8���&������

D���E�3������D���E�3������D���E�3�����

���)����$���$ �8��$�����4��$��$��������� ������7��4����

����������/�NMH��M�E�999�-�-��M%�����M�E�999-.�:��M �����M�E�999GFGGO�

Page 90: Game Programming With Python, Lua, And Ruby (2003)

� ��

���$���� �$�� �����4� �)� ��$��7������4�� �$"�����&����$������ &���5��)���'�$���������)���$ �����$��,��4��$��$������������$8�����)����'�$"��$�44���'�����������F����$��"�3�������� < ��

����������A �����B�

�)������������4�������$����8��� ���� ��$"��������$�'�3������&��������

���������A �����B�/�999FF<-�

�� ���$��������3����$������)����$����������������� ������'��������M�������������������$��������5!5�

+��$��2(6(���������� ������!� ��������� �����

)��� ���� ��� � ������

�����+,�� �������������������$����� ���$����

"��+,�� /���$��&���3����

���SD��+,�� /���$�����)�&�������$��� ���$���8��������

D���+,�� /���$����������)�&����)������ ���$����

������+����������-,��03�������������� ���$����'����3�����)������ ���$�����8�������$��$�'�&����

3�����+,�� /���$����������)�3�����

-��� 0����

���$��)��������������$������$����$����3��������8��������8�)$ ���$�8����������5����$��)���������������'������$�$�$���� � ���� ���8��$����������� ������$����3�8��������� �$� �$���$��������8�$�����8��$��$���� �����KOL5��

�������������������$�)���)�'����������$������3���)��������� ����$��5����������������������'��

�����

��� ��

������

�?������

�?���

��������

Page 91: Game Programming With Python, Lua, And Ruby (2003)

� ��

����

�����

"��$����

� �

��������

����

����

���$����

����

����������

����$���D��

������������

���������������

�������� �

��������

������

%���� �$3�$���$�K���$���$� ��������������L8����$��)������������"�$�'�����'��$���� �����

KOOL���3���4� �������$�$"����������������������$��������5�9����$���$ �8�����SS����SS����$��)�����������"$�����)��������4� ����$��5�

�����$,��3�����������������������4��8��$����� �$�����"$��$����4���)�������������$"���

3�������5���8���� �$�����"$�����3��������?���$���� �3���8��$�����$���$����$���������$����������4��"�����$������"$����������$"��

0/����������?�0/MR�����D��M�������?�

�0�*�

���������D�$"�����������$,��3��������$��������� ������$����3���������������$���)���������� ����$������&���$�'���������������$"�"���))���)���5�

Page 92: Game Programming With Python, Lua, And Ruby (2003)

� ��

��� ��$�, ��� �����

����3���� ����$�� 8���� 8��$��������������$������'���4��$�.��4�����5����������������$������$���� �$�����4��"����)��'��$����&���� ����$���

� �?�//�E���������������M���M���� �?�//�-E���������������M�3��M�����E�������M��D����M�

� � �$�������������'����������$��74������$���$�� ��4�����$��4����������� �$�����'�� ����� &���)� �����7� ��5�:$��&��'�����������������$"�"��8���,������������4���$����������$,�� ����$������������4��������� &���$������$8���� ���$�8�����8��$��$�'��$������5�

� ���4-�E���������������M������"���������������M������E���������������M����������"���������������M�

���)��

H����'���'������$,�� ������4���������$�.��4�����5� ������)������3��������8��$��'��&��'���������8��4���8��$���� ���$�����5�

���?��������E�������?�

����)����'�$"��7��4������� ���������4�����"������$�������N ��$�����$�4��$���������

���?�������"�+�����,�E���������������?�

�����������7��4��� �$������'�����$�'���������������4��

?�/���������?�1/����E������������������+?,���������?�(/���

��������� �����'����$���)�����)��������4�����7�����3�����$���D��������$�5�

%�$������)� �$3�$��$������� ����7����)������'���������$� ������4�M���,���"������������$"�������)������'����5�9����$���$ �8������$�'�����$�����"���� ��������$�������$"����������$������"$���������3��������'����3�����������$� ���������$��7��

Page 93: Game Programming With Python, Lua, And Ruby (2003)

� #�

���0����M�����ME���!����������������������������������������� ��������"�������0�

H�� �$������)�'������'���.��������$����$� ����$�����������4���$���������� �$�����

��������$�8��$ ���$"�����$���D��������$�8�'�� ������&������)����� ���$�� ������������

���48��$����������������������$�8�'�� ��F�4���������$�7����������$��)������45�H�� �$�

�������������������4��$������ ����������'�����7� ����)�����������4����)�$������K�$�����

�����)� ������4�L����'��$����������� �$�����$��� �����)�����K�$����� �����)����������4�L5�

?�/���������?�1/����E���������� �?�//�--E������������������������$���D������� ���������������������������������$���D������������������+?,���������� �?�1/��E������������������������C��������������?�������!������������������������������������������?�(/���������������E�������������������������������������?�1/���$������� ���������������������$���D�

�0�*�

.%:��0��

��,���� ����$������&�8�'��$�)�����4����$"�'�������4�8���� ��������$�3����$��$"����4�������� &������$��4��"���� �$����5�9����$���$ �8�����)����'�$"� ����'����$�3����$ �$������ �$�����$�����7����$��'���������)�����7� ���)���3����

��������//��E������������M2�����������>M�

!���$���

�����$�����������$�������5�+������������$����������'��$��������$���� ��)����$�������)$ ���$����������$��$��������� ��)���8���� �$����4�����4��������)$ ���$5������������������������)���3���4��$��'�����$���)��)$ ���$������"����������"�������$��"��4����$�)�����K ������������L��$�����$���4�������$���������$�����5�9����$���$ �8����,����������

��� ��)����1�9���54����������)��)$ ���$� ��������� ���5��)����'�$������������

��� ����)$ ���$��$��$������� ��4�8����F�������$�������� ����$���$�����$� ��������)$ ���$8���&�������

�������R�5����R�5���>��� ���+,�

Page 94: Game Programming With Python, Lua, And Ruby (2003)

� ��

9����$���$ �8� ��������)���� ���������41����54��'��������)����'�$"�)�����$����

�� ����+�,E���������������M�����M��� ����+�,E���������������M7����M�

�����)������)�$����'��)$ ���$�������)�����)$ ���$�4��$���I2����I��$�������� �$���$��4��$���I+����I5������������'��)$ ���$�8���4���������������$����$������4��"�������

��$"������������ ����$�8��$�����$����4��� ��������8���&������

�����������R�����>�������R�����>���+�,�����R�����>���+�,�

����+�,�����$ ������������ ������ ��)$ ���$�������&���$��$����"��$�5�

H�� �$������������+,����4��$���������)$ ���$���)��$���4�����������5�������'����

�$ ����'����3����������$��������$���������)�'�������$��$���K$������SS���SS8�

SS ���SS8�SS����SS8��$��SS$����'���SSL5�

1�����������4��"�����$"��� �����4���� ��������)���$�"����4��"�����$"5�(��,��

���������&��������� ����)$ ���$8����������������$�����4��)����$ ��'��$�����$���$���"������ ���������&����������)��$��$���"��4�� ��� ��������������������)� ��4��7�����5�

H�� �$�)�7���� ����������4�����'����$"�����$� �������)$ ���$���$����4�$"��$�1�9���54�����.??� ����K����$��������$"�"����&����������L��$�����$���"������$"�����)$ ���$��'�������������������$���5��������"�$��������$�� ��4������$,���3�$���3����� ��$"�M����F���$�'� ���������$�'8�4�����8�)������.??� ���5�1��������&�����4�����������4������4�������$�����"�����$������$�)������$�����$��� ����������$��4�� ����$������8�������4� ����D���4��"�����$"���$"�"��5�

�����$����������"������ ���$��)��������������$���������)��������������$8��$����)�'��)����� ����$��������$���������������$��������5<5�

+��$��2(:(�������$��C����.�$ �-��!���$���

!���$��� �����) ���

����� ���� ���������$��4��"����)$ ���$��

��"3�� (�����)� ����$���������4��������������$���4������

������8������8��$��������� ���� ����$�������4�8����$������$4�8��$�����$�����������

�?���� *7��������4��"����"�� �)����

������ ����4����������$����&��������)�$��������������4����

Page 95: Game Programming With Python, Lua, And Ruby (2003)

� ;�

��������

�����$����4��'������$������)�"����8�'������ ��$�������������5�������)���������������������4��3�������)������$,��� �� ����������)��7�������5��������������������� �$���$����"��'�$"8�����������'�$����� �� &�������������$�����������)���$ ������'���)���������&�$"��$��$����F���4��F� ����

���4�GG'''54����$5��"G�� G ���$�G���G���5�����

Page 96: Game Programming With Python, Lua, And Ruby (2003)

� !�

���� ����,�)$��C����-� ��0�������� ����

�����������'�����4���)$ ���$���$������$�)���"����$"�&���������$4��)�������������

���S�������$�������5��������S������)$ ���$����������������������)������'�5������&����$����"��$���$��'����������$������&��������4���4��)��������������4���������$"5�+����3��������4���������$�����$������������$"���

0�/����S�����+�M2��������������E�M�,�������0�

������'��&��F�����&�����S�������7 �4�������������4��)�������������'����$�������� ���������$��$���4���������3������������'����3��������4����$8��$�������)� �$3����$"��$��$�������$�������$"�5�

0/�����+M2���������$��E�M,�������0�

������'�������$&�������3������$"�������������$��$��������������������)�$����8�����)����

�$�����$�������$"������$"������8������$�'���� �$ �����������������$"���4����$�����$����5�

(��,������������'�����������$"������������ ��4��7C�������)� ��������� �� ����������

������)����� ��$"��5���������8�������4���$�����'���$4����$����$�����$����������������$����������4�����������������

����������"������������������������� ���������"���������M������"��S���"���S�M����"���/������+M���������������������"���� �����������"��EM,�������/������+M������������������������� �����������"��EM,�������M&���M����"��)������

H�� �$�)�$�������4��"���8� ������/� ��$"��O���"���O�8��$�����.��4������)�������$�����.�5�+��$�����$���8�����4���������4���������������� �$������$�9�"����5�5�

&����2(/(��� ������$��$� ��� ���������0������ ��$�����������������)� �

Page 97: Game Programming With Python, Lua, And Ruby (2003)

� <�

2������������������4��$�� ���$�'�����������

����������"������������������������J�������/�������/���������M2�������$����������EM�������M2�����V����J���>M���������;/��E���������������IL�������#��EI���������������/������+I��$��K�I,�������������/�����(���������I������#���/I�����

��������4���&����$�$������)�����������$��&��4������$"������$������������A����'������6��$���5�H�,����������������$����$"�$�'�����M���,���F�����7�$"��'��)$ ���$��)�������� ��4������"�����5�H�� �$������)�$������� �������4����$�����.�����%������$O�54�5�

Page 98: Game Programming With Python, Lua, And Ruby (2003)

� �

��,�)$���C-�� ��+%� ���

����:��%����44��3�����������$������$�)�������&�����������)�����������)��&���$�:��=���$�8��.(�K������)��������.����$��(�$"�"�L5��&�$&����������������������$�� ����$������$�'�$��'��$���)� ����$������3�����$��)��.(5�9��&��)��������'�����.(X�&��$�:��=�'����)�$��������&�$�������3����)�������5�%����"��������������"����������7��$��3�� �3���"���$�.��4����#8��,���"�3��������������������)���:�������'�����$��$������$�����+�$��'���$3���$��$�����'���������44�����5�

�0�*�

0�����:��4� &�"������������&�$���������3��������)������'���������$5�9����$���$ �8�����.����+���4� &�"���������'����4�4���5�2�'�3��8��&�$&�������������$������$�� ��������44����$���$��������'������ �������$�4� &�"�8������,��"�$�����������)�����"��4�� ��������)��&����� �3���$"������$�����$������5�

:����$������$����������)����:�� ��4�$�$��5��$�+�$��'�8������� ��4�$�$������� ������+�$��'����"���8����'��"����)��������5�������'��"����������������$��������5 5�

+��$��2(;(�+%� ������ ����)���� ��

���)���� �� &��� ���

������� .�������������$���������""�����$��3�$��'��$� �� &���

L��3���� ���4�������7��������"���

L���D$������� .���������������$� �� &�����$�

2������ .�����������$�������� �4���&���������$4��

5������ .����������������$"�'�$��',����"��

%�$���� ���4�������7������������)��� ��4�$�$���

%���$�?�� .���������������)��4���$��

R����� .�������������4������� ���$����4����

R���$������� .���������4�4�4����4�����'$���������$�

�����$������� .�����������$"����4���$�����$�

#������ .��������������������� �$� ������)��������$"��

#�����$���� .���������� ��������)��������� ��4�$�$���

��?��� .�������������4�����$����7������� �4��������$4��

+��$���$"��&�$���8���������������4����$"��������������$�����$� �����$"���)���������������������)����������� ��4�$�$����

5�����D������������)��������/�5����+,�

Page 99: Game Programming With Python, Lua, And Ruby (2003)

� ����

�)�����$������3������ ��4�8����)���������$,���$���� ��3������8����'���������$���4����&�$����'�$��'���7��44���8�������'$��$�9�"����5�5��

&����2(2(�+%� ���)�������������) ��0�������� �

(��,�����������4����������$����A�������$��������'��"��5�H��'����$���������������$������ �����$��$��$���� ��3���$3���$��$�M����'������3������ ������ ��������)����'������54���7��$���$��$���$����3��� ����$����$�8��0��4���4�8������������� �� &�$"���5�9�����)���$ �8����� ��4������� ��4�� �$����)�$���$�����.��4������)�������$�����.�5�

��������������8����$�������)����������������D�������5��������D�������������������������$��������D���$���$)��$ ���)���"�3�$� ��4�$�$����

������>���D+,�

%)������)���$ �$"��������D�������8���� �$���������%�$�����������$���4� �)��������7��

+I�����IL��$��4�� ���$��K��L��$�����4���$��������

%�$��+����������?�/I�����I,>���D+����/��,�

9�$����8��������������$���$"����� ������������8��4� �)��$"�������7��KI2?��IL8�����

����$����������$�'�����7� ���K>J���L8��$�����$����������������D��������'��������

4�� ����������$�K ��RL��

�����+����������?�/I2?��I���������/������>J���,>���D+����/ ��R,�

0$����������4��������������������������������������������3�$�����45�����)��� �����$�4�)����'���$��4��� ����������$"������������������$�9�"����5#��

Page 100: Game Programming With Python, Lua, And Ruby (2003)

� ����

&����2(3(�+%� ��������?"�$$�?�� �����$� $����������)$�1���� �

� �����D�������������)��������/�5����+,�������>���D+,�%�$��+����������?�/I�����I,>���D+����/��,� �����+����������?�/I2?��I���������/������>J���,>���D+����/ ��R,�������>��������+,�

��� �����������4��������$���)� ������D�$"��&�$���8����'����$���������&����3�$��"���)�

�&�$���,��2����� ��4�$�$�5�2�����'��&��F�����&�����S�������$��'������&��'������������4����$��$������$�����)��������*$����&������4������5�%����4���*$������7� �$8��������$"���

��$������D�����S�����8��4� �)����$����)�������'��"����$����������D���'�������4������5�

%���$"��������$�����3��������������+,� ����$���$��D�����S������'����"�3������$��$�����$�����'�$��'���� ������������4���$��8�������'$��$�9�"����5��K����� �������4���

���������$�����.������D�����S�����S->��L5�

&����2(4(����� ���+%� ������ ��$������������ �����1�0��� �)��� ��

�2����+�����/�M��?��M,>���D+�?�����/��2#�� ����/� ��,�

Page 101: Game Programming With Python, Lua, And Ruby (2003)

� ����

!����������0�������������,)����

�$������$8��3������$"�����$���F� �8��$��������F� ����������� ������$���$��� ��������K����� �������������4L5��� ����������F� ���������)���$ �� �$���8������$,����3�����'����������)����$"��������������)M����������$���)�����"�������$�)�����)�����"����3�����$"�"�5�����)���,���'����$"���"���8���4� ��������"�����������������4�������$�����%���� �$����8����������3�����'��������������������� ����$��$���������)��"��$��5�

+������������$$�� ���

����)�������������"����"�� ���� ���$5���������$����8���"���,����""����4����������'������������� &�������"�������4��������"����4�� �������$�������������� &�������� ��4���C�������8�����������&�5�+��$���3��������"��������)�� �4���������������8����$����������3����'�������$"�)�����)����������5���������� �$������8���'�3��8��)���3�������������)���$ �$"���$������)���F� ��C�������7���$������F� �������&��4�����3��������)�������$"��������5�����'����� ����� �$��������'��$���F� ��%������)���$ �$"���F� �����$��3� ��3����8��$�'�� �� ����$���������F� �� �$�����������5���$ �������$�������� �������)���$ �� �$����� ����F� �8��������$,����"��$��4������5������$,��"����"�� ���� ����'�����'��4�����"��������F� ����3�$�������$�� ���$������45�2�'�3��8������$,�� ���� ����'����$���������� �����4� &�4���)���$ ������$'�$������F� ������$ ������)����5�9������������������)���$ ������$������F� ����$�����3�$"�$����)������4�$� ���� ��������������&������ �5�%�������8���������� ����$���4��"����������������������������$�������������$����$"���$�����5�

%$������4���$�����4�������'����������� �"����"�� ���� ���$��������������4��"������8������3��D���� �$������3���'��$����� ���� �����$�5��)����� ���� ������ ���������$�'������$���4����$����3��������$"���3������A�$ ������ ���$"8�������$"��$�$�������$��$���"��4�� ���A�$ �8�����"���� ���������)��'��������)���������� ���������'����5�0$��������$������������������4���������������������$,��"����"�� ���� ����'���������"��������$$�$"��$�����$��74�� ����� �������'��$����'�$����5�

% ���������$,��"����"�� ���� ����'��������"��K������)�������"��.���� ���$L������5������$,��"����"�� ���� ������� �4������)���4����$"��$���'���$��$��� ��������F� ����������������� ������������K�����)��������� ����������.� ������� ���L������'���$����F� ��������� ���$������� &�$"5���������������K�$��������L�������������$��������5��5�

+��$��2('=(�������$��C�������&��� ����

&��� ���� ���)����

�������+,�� �������)���������� ���� ���$�

����$��+,�� ��$��������� �"����"�� ���� ���$��))�

"��S��$�"+,�� �������"�)��"��

"��S�$C������ /���$����������)�������F� ������� ���� ���������� &�$"�

"��S�� �������� /���$����������)���F� ����������)��������������F� ���

"��S����������� /���$�� ���$�� ���� ���$�����������

"��$�"��� +����������$�4�� ��� � �� �"����"��'����)�$���D����

Page 102: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��2('=(�������$��C�������&��� ����

&��� ���� ���)����

���$��+,�� ��$��������� �"����"�� ���� ���$��$�

�����$���+,�� /���$�������)�������� �"����"�� ���� ���$�����$�

���S��$�"+,�� ��������"�)��"��

���S����������� ��������� ���� ���$�����������

��3����� �$���$������������4��3�����)������'�������S��$�"+,8�������'$��$��������5��5��

+��$��2(''(��������������� �� ��

���� �� �� C���

62 �WS#�&�#�� ���$���������� �����$"� ���� ���$�

62 �WSL%%2L�& %2�� ���$���$)�������$��$��$�� ���� ��������F� ���)�$��

62 �WS�L%%2L�& %2�����$���$)�������$��)��$��$ ���� ��������F� ���)�$��

62 �WS!#�&L2#�� ���$���$)�������$�������$���$ ����F� ���)�$��

62 �WS H2L�#�� ���$���$)�������$��������F� ������������$��$���$ ����F� ���)�$��

62 �WS#&X2&%%�� +��$������)��"�������8�����$��� ��������F� ���)�$��'��������44�$�������"����"������������$����$"�)�����

62 �WS%2&T�� ���$���$)�������$�����������&�$"�4��"����

H�� �$������������ ����$�����)�� ���������3���$���F� ��)����������5�2�'�3��8�

���������)�$���D��M��)�����������$��$���F� �8�����"����"�� ���� ���� �$�$����$"���4����'�����������F� �8��$����������� �$����5��������������&$�'�'��������������$"5�

�0�*�

.%:��0��

�����$,�� � �� �"����"�� ���� �������$�'�����)������$��5�8��$������" �%���'����������$�>�����$��5�5�*�������3�����$���)������$�'����$���������4�������'�����"����"�� ���� ���$���� �$ ��$��5�

�0�*�

����

��������DS��������)$ ���$����'���������$��������������� ������� ���$�4��������

��� &���)�����������3�����$�����"$����5������)�����4�������������$���R��S62%8�����

Page 103: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

�4� ���������������F� �������������� ����$��$"���'�����������$5�2�'�3��8��)�������$,��

)��������'����.����������������4�� ����$���������������$�"���$���$����������3��8����������4��������������))��$�)�� ����� �����$"�������5�

���$��$$��� ����

%$������ �$ ��$8�4���� ������'���� �$�����8����&��4�$"������$������������ ����$� �$���$��5�:��$"���������������"����"�� ���� ���� ���������� �$� ���������$�����'��4��$��$������4��������� ��$�,���3��������3������������5�������� &��������������������$��$��������'$�����������$�5�

( &���8���)�'�$�'��$��4 ���$"�)��������7�����$������$���������4����'�������������5�������� 8��$��74�����$����)���������������>��������1���$"�D�3��$�>�����$��5�8�����$���)������5�������� �������4� ����D�����F� ������ ����������� ����������D���.,��

������+,�K������)�������������� ����$L�)$ ���$����"������"��4������)���������$�����$�)��������������A�����)����������)����������4����5���$ ��������� �����4���$����$�>�����$��5���$���5�8����$��������$ �����$��4���$�������� �$)�"���� ��4��K�$�����)�����)�

''����'��������L��$���������������5������$�>�����$��5�������"�����$��������������)���5�

������� �'��&�������3���$"����������A������$�����D�� �������K����9�"����5;L5������� ���������$"��)������"��������;��������$�������4� �����"����������4���5�1��������A���������'����$�#&�4�����������������A����5�������� ����� ������$�������� �������A�����)����������)���������� �������'����$�4����5�+��$������� ���$"�������� �������� ������8�

���� ������� �$���� ��4�������)�����K��$"� ���+,L��������������� &��$������������4� ��3��4����5�+��$�����4�����������4��8�������������������������� &��$��������������������"�5�

&����2(5(�����$$�����$����� ����������B��� ��

�0�*�

Page 104: Game Programming With Python, Lua, And Ruby (2003)

� ����

.%:��0��

������� �������$�����������$�4���$�8������������74�������)���$&$�'$��"��'��$�����'����.��7��$���$�5���������3�������������$��� ��$����4����������$"�������� �'���������$,��.�%��5�:���'���� ����$5�

��������������� 8��$�>�����$��5�������$�������4�� ���������4��3����%���)��������$"�'������������$������$�'�)$ ���$�8������$������1��8�)������� ���$"����������������������4�8��$�������$������0�F� ��)������� ���$"���������4� �)� �����)�����F� ��5�

���0������������,)����

�)����'����������$� ���������� ��4��7�$���� ���'��&��$�����$� ��4��������������������������$��'����.??8����'�����������44��$���5�����4���$�������������������$���������'�����$"�"�5��$������$8��3����3����������)���$ ���������������������&48��$���������3����)$ ���$� ���5������ �$$��� ��4����'����.??8��$�'�� �������� ����$���)�3����������$��)$ ���$�������� �������� ��4��������5�

2�'�3��8�����������$������$�����������$����$�����������)���"����4��"�����$"M����F������$������������3������������44��4�������5�9����$���$ �8��)�����������$"�����$"���$�4�����$�����'��&�$"�'������4�8������$������ ���������)���������$�.??5����������$�����$"���$�4�����$�)$ ���$������� ������'�����$��$���4����D����$�.8��$��������)���$ �� �$������F� ��������)��������$��3�����������)���������$"� �4��$"������ �$�� ��'��������.??�����$"� ����5�

%$�8��������$���$�����)���8��3�$��)������$,�����$&����������'���������4���"�$� �������$����� ���$� �����$������$8��������'�$�����'���������%�� �����$��"�������4��$������$��$��4������4������ �������$����� ���$5����$8��)������$ ����&�$"8���� �$�'��������� �������$����� ���$��$�.??��$���74���������������$5������'������&�� ���$"�� ��)������)�����5�

���������$���� ���������� �$�����������4��)����������)�)$ ���$�5��)����������

)$ ���$� ������R�5����������������$�R�R�����8�����)$ ���$� �$������4�������$���$�'�� ��4��������������$��$���4�������$�����$�4��)���������$$�$"��

�������R�R��������� ���>���+IR�5�������+,I,�

�����$,����� ����������4��$������������)���������)$ ���$� ������$���� ��)$ ���$� ���,��

�7� ���$�����5������$������4�������������)������������������� �$�������������� �������7� ���$��)������$�� ��4��5�

H�,���)�$������������)��&��'������"���"��$�����$"������$��$�"�����)����4��������������������������$��$�������5�2����������)�'�4��)����$ ����4�����'��4�4����� ��4�����$�����&��4��$���$��)��������$"�'�����4�����������

•� �����$�������$������)����""�$"�������������)�����$ ����&�$"5��)����"������������$"�����8���� �$��������"�����)����)���'��������$"���������'��$���"�3�$�4��"���5�

Page 105: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

•� ��� ���)��'��$���$"����4�8���$ ������4�����������$�� �$���������� �������������"�5��������� ����������������3�����������)����4��'��$�3���4��������K� �����8��������� ���������������3�������)��������4�������L5�����$�������$���$�������$����F� ����$������)����4�M����$"���� �$� ������$�� �4�����$���������$��������)�'��&�)�������"����"�� ���� ���5�

•� :�����)���$ ����$�������)�� ����3�����'��$� ����$"�3����8�$���������3���������3���������5�

•� %3����4����$"���$"���"��$�����������)$ ���$���$��������$��5�E��4�������������$�����4��5�

•� %3���������$"����'����$"�)�������$�������$�5�/����������$������))����$�����5�•� .�� &������������)$�������������)���������$"���)$ ���$8��$���$�4���� ���8�4���

���������$���$����'���������$�����������$5�H���$�'���'�����$�)$ ���$����4�����������'������$�����3�����$����� ���$�����������$���$"�)�����)�'������5�

•� ���� ���������$���$����.��4��������$���������&��$������$���'�����7��$�������$��$�.5�

•� :�������'���'�� ��'��$� ��4���$"���������$��������� ����K�����������)������� ��4������4����D�$"�����L�

•� :�����������)�����4������)$ ���$���$�������)���$"�����)���$���5�%"��$8������4� ������ ���)��'��$����������$"����&�����)���$������$������)������45�

•� .??�4��"������������������F�&��������4����D�$"������� ���������&�$"�3��������$������������5��$������$����������� ������'��&8���$ �������$����&��4�3������������$��������$����5�

•� %3�������������4��'���������4� �$���5��$������������"�+,����?���"�+,5�����

�����$����"�+,��4����������)������ �������� ������ �$��� �������A�$ ����F� ���3���'�� ������������5�

•� %3�������3������)�������� �4���3��������5�(� ������ �4���3�������������������)�����5�

9�$����8�&��4��$���$��������4����D�$"� ���� �$���&���������)�������$���))�����$����$,����'����'�������5�%���8��4����D�$"����� ���������8���""���4�������8�� �������&�$"� �����������������$���$8������������7��$�8�����""���5�0$����)���� ��4������$$�$"��$�������)������������8�����)����� ������������$��4�����������A�����$�8�������3�$"���)�'��� �$����))��)����'�����������3���4��$������5�

Page 106: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

,�������

��)���������3���$��������$�7�� ��4���8���&����������������$��$�������� ���� �����$��

�������� �$��$������$���� ��3���$3���$��$�5�H��������)����4������ ��)��'���� ���

���4�8����������4�8��$��� �������������$��5�H���������������3�������� ��$ �����4�&�����$��'�����&�$���������8��$�����������&$�'�'���������$,��"����"�� ���� ��������5�

��4����$��4��$���)��������� ��4�����

•� ����8� ���$�8��$��$�'��$�����������������)��������$�4$ �����$5�•� �����$,������� ����$��������4�������$�����8�����$"�8������8��4���8��$��

�� ���$�����5�•� 1������ �$�����������4����)$ ���$��)����)�������)���5�•� ����"�� ���� ���$��$����������4� ��� �$������$�"����$������$��)�$� ������5�

Page 107: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

7��� ����������������

'8� 6���,3����������������� ��������)������$��$��������'���������3��'�����$�����������$��4����$"�4������$��7� ���$5�+������$,���������$���$�������-�

�8� %������� ��4���������A� &8�'����'�$���$���� ���$�������������$���$"�"���$�����$������$���������$������$ ���3��"���5����������3�$�/������$��%$���'����&����3��'�����$���)�'�"������$��$������ �����$���$ ����&�$"8������$�4��)����$ �8��$����������4� �5����������$�*������+���4�"�������"����4�� ��������������&�$"��$���������4� M���,��������4�GG'''54����$5��"G�� G������G5�

/8� 6������������������������$�"��4�� �����$�F����&�$���-�

�8� %��%��������5����������� �3������$�����$�7�� ��4���8����$"�'������ ���������&����������)�$�����)��&�$���5�

28� 6��+������������ -�����������$���3���$��)$ ���$������)�����$��������$-�

�8� %�������$��������3�����������������'��&�'������� ��$����$���))� ��5��� �3�������1�� &������������$�.��4����#5�

Page 108: Game Programming With Python, Lua, And Ruby (2003)

� �� �

*1�������

'8� (��������4���$��������$���4���������� &����)�������"$��$��5�+��������� ���$��������-�

/8� (�����'���� �4����A�$ ��5�

28� ������$���$���������������$��'�����������5�

38� +����������4����7��4����)��� ������45�

48� ��)�$��I'��"��5I�

58� (�����$��4��������� ���$������ �������'���'$���4��"����'��$�����'����$��$���������$8�������45�

68� +�������4��"�����������&�������$4���'������$"���$���'���$��"�����$�����$����4���������5�

Page 109: Game Programming With Python, Lua, And Ruby (2003)

� ����

��������*��)��������������������#$�����)��� �

a ��4�����������������$�����3������ �$ �4����)����'��&���������'�����$��$�� ����� ���� ��3���$�����$�����"�$���$������"�$�� ������$��'�����3��4��3���������������������'��&�5�

CC/������2�'���$��$�����1�$��������$�"��45�

��'��������,3�� ��4������.��4�����,��A� &��������8���,����������F�4��$�����)�'��4� �)� ����������������$������������$��� ��4���$�� ����"��������'�5������ ��4����"������������'���������$,����"�������������$����3����4� �)� ������$���"��4�� �8�$��'��&�$"8��$����$��)���"����4��"�����$"5�

Page 110: Game Programming With Python, Lua, And Ruby (2003)

� ����

+����������������

��"��������������$�'��44���)����������4������� �1�����(�����K��(L5���"����)� �����$����$"�$"�����'������)�"��4�� ���$��"����4��"�����$"����4��"���������$��$�������$���))� ��$��'��5�

��4� ����8���"����4��F� ������������8����4��8��'������$���$������������"��"����5��$�.��4�����8��,���"�3������� ��������&������)�'��7����$"���"����������"�����$"�$��8��$ ���$"���DD��8���1������&���$"�$�M������ �8����'������$���$����������� ��$"�$�M��$��%��1�$"�8��� �����������$�����������$������$��$"�$�5�

-�� �$$��������

��������&,��.�� �����'������ �4���)���"�����$�����X�H�20�X�H%1*�)�����5������������ �$��3�����$�� �$����)�$���$��$��������4�GG'''54�"���5��"G��'$����5�����5�

����+�$��'����$�����$���������$�����.������3�����$��)��������$��5���$���5�8������������1� �5����)���������1� �3�����$���$����3�����$�)�������1� �0�=8��$������/�1���$�����������$��$ �����)�������/���2����4�����$"�������5���"����� ������ �����'��������������� �$���$�����$�����:��=�����������$�8��$�� �$����������� �����������$���$���������������4�������$�"��5�

0$�+�$��'�8�������$�����$��������'����������� ������$��������"�����$����������$� ���������4�$��$ ���5�%����"��+�$��'���� ��$�����$�4� &�"�8����$"�'�������4���"������$�����4��� ���8�����3�����������������"��������4�"��������4�GG'''54�"���5��"5�

��"�����������A������$��������$���4� &�"�8� ��������������� ������$�4� &�"�8��$���������������)�'��)���������&����$��A� &��������������5������4� &�"�� �$����)�$���$����������$��� ���$��)������ ��4�$��$"�.�5�%�����������8����� ���������)������ ������$�����'��&�$"��

�0�*�

��(�

��(���� �$���������$������$���3��������� ��=���4� �������$�(�$7��� ��$��5�%���������������$��"��4�� ���������8���(�4��3�������'���3���� ��������� ��4���,��3����8���$�8�&�������8�����8��$��F����� &5�

��(�������������$���� ���������3���������$�����3�����$��)�1� ����)�,������ ��=�%��8�������"���))���$ �����$"��������(�����4�$���� �8��44���������4����4�����$"���������K�$ ���$"�(�$78�1� 8��������8�9������8��$��+�$��'�L8��$�������$�%�����$��$"������������$"�"��8��$ ���$"������$5�

��(����'�����$��$�.��$���3��������$���������:�(�������$��������� �(� �$��5�����(�$��$"�8�'���'��&���)��������(�&����)�'�����$�����DD�����$������$��$�8��������"�$�������$����(5�2��"�������������'����"����4��"�����$"��$� ����"�����4����$"���1� �$�����"���� ������1����������������(�$7�4���)���5�

Page 111: Game Programming With Python, Lua, And Ruby (2003)

� ����

����'���'��&�$"��$���+�$��'��4�����)���1� �$�������������4��"���� ������*7� �����$��)�"������������� �������'��������$"�����7��� �������������,��"��4�� �8���$�8��$�� �$���������$���)� �� ������������$�������4���)����5�(�����$�� !����'�$��4��� �'������(�����$��4�$���� ��4��F� �8��$����$ �����$���(��������$��� �$��$���5�

�$��$��3�$�)������3�����$� ����������� 5��)����$��������$��������������� �4� &�"�8��������5�7��)���+�$��'������������5"7�)�������7��$3���$��$��5������ ���������������$�����$�0����� �$���F�����&�������$������)8��$���������������3���4��$�� �$����)�$��������4�GG��� �)��"�5$��G4��F� ��G$�4�5�

����1� �0��=������$ ����������$��5�8���"����5��K�� &���)���1� �L8���04�$(8��$������� 5�����������������������"���$��������'�����(�� ��4�����������$�4���0��=��$��4����0��=8��$�������4����$��������)�������1� ������������)�7�������)����������������4��$$���)���'��$������$��5�������������5�

�0�*�

.%:��0��

���$��������))������$��������4� &�"���$�1� �0��=5���))���'������$ ����������)��������"���)���$����5�

��"������������������$���������:�(�(8��� �$���>�����$��5�5�����9�"���#5��)�����������)���"�����$���������$5��

&����3('(�-�� �$$��������

C���������

��"���������)����)������������������$8��������'������)� ��4����"������$��"��4�� ������)��$�$)��"�3�$"������"�$$���5���"��������������))����� ���� ����)��������� &��)�

Page 112: Game Programming With Python, Lua, And Ruby (2003)

� ����

�� ��$�����$5�������� &��)��� ��$�����$���������$��$�'���3���4����������'�������"��������"����4� &�"�8����&�$"�)����$)�������$5�2�'�3��8��)�������'�������"������4� &�"�8����'����)�$���$��3��'�����$"�$������)� ����������������4��)������$��78���&�$"�����4� &�"������� �$)��$"5�����&������������$"�'������"���������������D���������� �$������"����������'����F�����)�'�)$ ���$�8��$��������������$�3���$������������$���)����� ������5�

-�)�� ��������

����)��������4���'�������$"���"�����)��������������$��$����������������4����������"�����$���������������$������)�����3���4��$���$������� ���5��������)����'�$"��

������������������������"���� ������"���>��������������)�

E��4��$���$������������$� ������� ������$����3�8����)��������$8���"�����$��4�"������������������))���$�� �������5�%����"���� �4�����D����"�����$���������&,����7�8�'��$�

��4����$"����������8���"����$������������$�������'�� �����������5�

9�������4������)�'�$�$���"����������5�H�,��������������$�����������������$�����$�7��)�'��7��4����)��� �����$"�4���)�����$��4�$��$��)������$��4����5����$���4������"���������)5�+��$���"���������4�����8��������$,��� ��������4���������)�������"����������8�

�������������4���$��5�0$���)�������������8� ������������8� �$���$�����������)���"����

'���� ����$�������)$ ���$����&��������$��J�����$�������������� ����"������

$����4� �5�9�������4 ���$"��7��4���������������������'��������$ �������������������)$ ���$��'��������3�����������'���5��

�0�*�

����

������"���� ������4������������� ���$�����44���������������)��������$�� �������������D�����"���5�������� �� ���������$�"��������"���8������������$������)����������)������������5�������4����������������$������)���)�� �����$�44���C�3������$"�)����3������))� ������ ����$�"������"�������C�$�� �$����)�$��������4�GG'''54�"���5��"G4 �G5�

+���������,��0����

�����������4����$�������$���$���"�������������)� �5�������)� ����������$&������8��$����������4� ���$�'�� �����4�� ����$��8����"��8� ����8��$������$5�%���)� �� �$�����$����D�8��$����� �$���3���$��$������)�����5��������4������)� ���)������ ���$��������'�����

��"���>�������>���S����+,�

Page 113: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

H�� �$� ��������)� ����������3�����"���'�������"�>����+,8���)� �������� �$���$���7��

'���� ���>������+,8��$�����$&���)� ���'����#�� ���+,5������������������$����)� ��

)$ ���$�8������������4����$�����$"�$���+,8� ���+,8����S��+,8��$��"��S��+,5�

������� ���>���3���+,� ����$������������ �$3����)����)��������$���4�7���)�����M�����������@�*8��98�������"��4�� �����$��3����� ����������$��3�����4�7����� ����$�5�

�0�*�

����

:��$"���)� �5 �$3���������4����$������������(�����$,��$������� �$3����4�7���)��������$�����)��5�.�$3����$"������)�����"��4�� ����"����$����$���(�)�������$�����)���'���� ��������"���������4�����$��4��)����$ �5�

(����$"�����)� �����"�����)���������4����

R�S#�� ����/���"���>���"�>����+I���"�>C��"I,�

������ �$3����$"��$����"���

R�S#�� ����/���"���>���"�>����+I���"�>C��"I,>���3���+,�

%� �$3�����$��$���$�������������$���$ ��4�����)� �8��$���������$ �������������4�����4����������� ����5�

���'�$"��$��������4������)� ������$,��� ������ �����$����"������44�����$������ ���$5�

9������4����$"8�������"���>�������>������+,� ����$��������5������ ����$�� �$�4�������'�$��'8�����)���� ���$8���� �����$��������)������ ���$5���������� �$���4����

����$�8���"���>�������> ���+,8�'�� ���������'��$���$"��������))���������'����� ��������$5�

�0�*�

.%:��0��

�������3���+,� ����$��'����� ��������'������$����"�,���$���$���)�����5���������"����)�����"�����$"�$���$�����4����$"�"��4�� �8����$���"�����)��������'����$"��$����"�� �$3�����$�4��"���������4��"����'��������$�������&��4��������"�$���)�������)��������"�5�

���� ����������������

.�����$"���'�$��'��$�'�� ����"���� �$��$��$��44�� ����$����)����������5�9��������$�������������4���"����'�����$��$������D�� ����$���

��"���>����+,�

Page 114: Game Programming With Python, Lua, And Ruby (2003)

� ����

���$���� �$�����4���'�$��'�'������ �4���$������$"���"���,���������� ����$���

R�S7������/���"���>�������>���S����++:=���=F�,,�

����� �����$���������)�K���� ��������$ ������������R�S7�����>����7��4����$������ ��4���,�� ������ ���$��$�����.�L� ���������;#�7#<��4�7���'�$��'�����������"����+�$��'8�F�����&���$�9�"���#5�5�0)� ����8�����'�$��'�� ��4�������$����$"8�����������������������44������)�������'�$"�4��$������ ���$5�

&����3(/(�����)$��������������

+���*#���-�)�� �� ���� DE�

������������� ������$���"����4����������������+,� ����8��$�������������� �$�������

��4����$�� �$ �4���$���"���>�����+,������ ������������$��������� ��$"����

R�S������"����/���"���>����+,�

����+,� �����'�����������)$ ���$�������3�8�����$&8��$���$)����������)M�)�$����$��$�

���'��$������)��$���������� ��M��$������ �� �������$�5��������&�������+,��$������� �����

)�����"������F� �5�����4������$��)�������+,������)�$����������44�����)�� ��$��5����� ����

��������������������� ���3����44�$"�4�7�������3�����4����D��8�������'�������������������$��4������$���������������)� �������$����� ���$5�9����� ����F� �8�������'�����)��$������

����������+,�$���$������������ �� �������$�5��

+���*#�� �,�� ���

Page 115: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

�$�������)�����"����������4�$�������4��������������3�$�8����$������������4������4�����3�$��A��������$�����$ ���$"���A�����K����� �� &�����&���4������L5���������4������

���$����������4������ �� &���$����&����������������4���������������4����$"�����"�����

�����S������"�/���������+�����S������"//�,E��������� ����3���������"���>�3���>"��+,E������������������ ��3���>��������V�!�E������������������������������S������"�/���

���� ����3������$��������"���>�3���>"��+,����"����$4��)�����������5���"����

$������$������� �+�$��'�� ����$��8��$��&$�'�������V�!������A�3���$�����4�����$"�

����=����������4���"��� ��$����)��� �������'�$��'5�������"���>�3����)$ ���$�������������$�����$����$"������$��������"���$��������3�$��A��C'�� ��������� ������$4��)�����$��������)���3� �8�������&�������8�����8����F����� &5������)$ ���$����� ����� ���������

$�'��3�$����F� �������"�����$�������A��5�������"���>�3���>"���)$ ���$�"�����3�$���

)��������A��5������3�$����������)�����"���>�3��������

•� 7C-+(�6������.���������$5�•� ��+-9**9*�+(�.�$���$�����������"��$5�•� F*G� ��(�:$� ����&���'��$�4������5�•� F*GC�(�:$ ����&���'��$���������5�•� ! C,*! +- �(�1����4������$5�•� ! C,*.C++ �C�(��������$����������$���������5�•� ! C,*.C++ �� ��(��������$����������$�4������5�•� H G�<-,! +- �(�@����� &��7��������$5�•� H G.���! +- �(���� &����������$5�•� H G"�+! +- �(�@����� &������$5�•� H G.C++ �C�(�@����� &�����$��������5�•� H G.C++ �� ��(�@����� &�����$�4����5�•� 9-�* �*,-I*(�+�$��'����3���������D�5�•� 9-�* *<� ,*(�+�$��'����3������74���5�•� C,*�*9*�+(�.����������3�$�5�

����������$������������������ &�&�������8�����8��$��F����� &�� ���$�5�(��,���������'�$�������������$�������$4����$���$"5�%���������$4�����������3�������"������

��"���>�3���������5�

� ��3���>��������R�#2 ���67E����������������������"�

��"���������������$������)���������������4���������'����� ���������4������$��$����M�������������������$�������#5�5�

+��$��3('(�������!�����*#�� �!� �����

!� ����� ���)����

"��S�������� ������������� ����������

Page 116: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

+��$��3('(�������!�����*#�� �!� �����

!� ����� ���)����

"��S �������� ���������������)�����������$4��)� ��

"��S����� �������� �����4������$�

"��S��������� ���������������)��������������$��

"��S����� �����$"��������3���$��

���S�������� ����������������)��������4���)���������� �����

���S����� 1�3������� �����

���S3���$���� ���4����������������������� �����

H�� �$� �� &������������)�����������&���������3�$�������$"�

��"���>�����>"��S���+,������"���>D��>"��S�������+,8����4� ��3���5�

������� ��������

��"��������"�����������$�)$ ���$��)���"��4�� �5�������)$ ���$����3��3�����$������������)�������)� �8�'�� ��������� ������$����������� �$�������'$�4�$5�(��,���������

'�$�������)���������� &"��$���$�R�S7�����>���'������ ����5�9�����"����������D���)�����'�$��'��

R�S ��D"������/���"���>#�� ���+R�S7�����>"��S��8�+,,�

����� �����������)� �� ������R�S ��D"����������,�������7� ����D���)�R�S7�����>��?�� �$3����������)� �������4�7���)�������������"���� �$�4����'�����

R�S ��D"������/�R�S ��D"�����>���3���+,�

%$��)�$����8�)���������� &"��$��'������ �����K����'����������/��3����L��

R�S ��D"�����> ���++--��--��F�,,�

��'����,�������������'�$"��3��������� &"��$����)� �5���"���� �����'�����������

)$ ���$��$���������������8�����)����'�$����������'���)�'���$��8���� ��������������

��"���>����>�����+R�S ��D"�������+������,�+��-=�,�+:=��-=�,��9,���"���>����>�����+R�S ��D"�������+�����,��+.-���,��+.-��=F�,��9,�

��"���,������>�������&���)�3��4���������5�����)��������������)� ��������'��$8������� �$�����'���� �����������'�K�"��$��$�/��3����L8��$������������������4�7���'������)�������$�5������������4�������������������������$���$��4��$����)�������$���$�7��$����4�7���

Page 117: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

�����$����5��$������ ���8�������'�������� &���$��� �����$"��$������7� �� �$�����)�����'�$��'8�������'$��$�9�"���#5�5�

&����3(2(����������� ������������� ���)$ ����������� ��0������� ����

������������'���������4���������� &"��$���$����$���������4��������$����������)$ ���$��

�� �����S��� +R�S7�����,E�R�S ��D"������/���"���>#�� ���+R�S7�����>"��S��8�+,,�R�S ��D"������/�R�S ��D"�����>���3���+,�R�S ��D"�����> ���++--��--��F�,,���"���>����>�����+R�S ��D"�������+������,�+��-=�,�+:=��-=�,��9,�����������"���>����>�����+R�S ��D"�������+�����,��+.-���,��+.-��=F�,��9,��������R�S ��D"������

���$� ��������)$ ���$�'����$��������4�������7�����K�$���������������� �������4���

R�S7�����S.>����$�����.�L��

R�S6�������/�����S��� +R�S7�����,�R�S7�����>$���+R�S6��������+���,,���"���>�������> ���+,�

.$ ��

������$"�K��� &����"�����$�)���$"L����4�� �� �������$�$�����'������$����$"8��$���4� �)� ��������$�������'�$"��$���F� ����� �4��$"�����4�7�����)��������F� ���$�����

� ���$������ &"��$�5��)�������$,���$�����$���+,�������8�$����$"�'�����3���"���

�����'$��$������� ���$�'����F��������$����$&5�9����������)����'�������&$�'8�$������$,���������4�'���C��,��������)���I������� &����$�)��5I�

Page 118: Game Programming With Python, Lua, And Ruby (2003)

� �� �

�$��$��"���8�������$"�����)��$���4�� ������������'�����$"����'$8��$��4���$"�����$���$����'�����������������$"8�'��$��������������$"8��$����'��)��$��������������$"�'������3������F�����4� ���$�����"���,��4��)����$ �5�����&���������4�����"��4�� ���$"�$�����������$"��$���'��$�$� ������5�

����$��������������3������4����$���$���"����"��4�� �5�������������� �4��4�7����)������

��� ����������4���5��$������ ���8�$������&�������4�7����4��������$�R�S6�������K'�� ��

���&����� ����$���)��������S��� L��$�� �4������������R�S7�����5�����$�����������$������$����4� ������������&�� ����&�����$����4��8���� �$��������'�����44�����)��3�������8��$����� �$������ ���������������$���$�����F� ����$�����)�����)��$�������

K��$"�$���S�����+,L5��$�������7��4��8�$���������&�$"�R�S6���������������$4���$��

��$����$"�������R�S7�����8��$�������������44�����)�� ��$���K4�7����8�L����&���4�������)� �5�

������"���>�������> ���+,� ����$�������"���,��������$�)$ ���$�)���4����$"�����

�$��������4����K�$������ ���8������$��������)�R�S7�����L��$ ���$��"��4�� � ��$"�����������������5�

�0�*�

����

�$�+�$��'�8���� �$���������$"���I'I���������$���)��������$�)����K���������$�������)��$��$"�����$�4�8�����$����$�4�'L������&������4��"�����4�$�4���'�$��'�'�������4�$�$"�4������$���4���� �$����8������)$$�����&�$"��0����75�

���������-����� ��������

���"�������$"�����$��)��$������)$ ���$��$�"����M��$�������� ���$��,������'�����������4��)��������$"��$����"���$���"���5�

%)������4����$"�����$� �������������8����$���������)�$����)$ ���$�)��������$"��$����"�������'������&���$���"��$�5�������"��$��'���������������������� ����&���K�������$�4���$ �� ����L��)��������"�M�������&����&��������

�� �����S���"�+�����������D��/���,E�

.����&���������$"��$3��3��������$"���"�������������4�7�����)����4� �)� � ������$��$����"��������������$�4���$�5������'��8��������"���A��������$,����� &������� &"��$�5�.����&���������$"�����$��'��������&��$�$��� ��$"���8��'������$���$������4����$���"���5����������� ����$���� &�������������4���3�������$"���"��4�� ��4��"������&��%�������������48����������������$�9�"���#5#��$���74���$����$�����)����'�$"��������5�

&����3(3(�,� ���$)���#�$����������������� ����)�

Page 119: Game Programming With Python, Lua, And Ruby (2003)

� ����

�����$� ����&���������$"��$8�������4��������� ���>���S�����D��+�����,5�����

�����)��������� ���>���S�����D��������������"����4���K�8�8�L�'��������)�����$��������$"���������3���8������� �$��"���$8��$����������������K�������8��"�L5��

�0�*�

.����&���3�����%�4���

����� ����&����$����4��������� �$�A���)�����&�$"�4������)���"��4�� ����$�4���$��'��$�

���3���$"�� ���������� ���$5��$���"���8���������"������F� ����$���4���������������8��$�������� ��$"�����$����4�5���������$�����$������'��������&��4�����)������� ��$"������$�4���$�8������������ �$���3�� �� ���8�����$"���8������$&������4���"����4�� ��5�0����'�������'�����$������ �4������)����4����$"��A����4�� ����3������� &"��$�5�

%�4�������$���� �$�A��)�����&�$"�4������)��$����"�����$�4���$�5�%$���4��������$"� ������������ �����"�����������$�� �$�����4����������4�A�5�%�4������$����������������)������������8��$��������"��������$��������������������$�4���$������4�7���������"����5�%�4������3�����������������$���"��4�� ��������K��&��%�������������4L8��$��

��"����������������$�"��S�����+,� ����$�5���������������4���4�7�����4���'�������� �$�����"$���4���3���������� ���$��3�����4�7����$���"�3�$����"�5��

+��$���$"��� ����&����� �$�A��K���������� ������ ����&���������$"L���������������"����$������&$�'����������4�7�����)��$�� �����$� �������������������������$�4���$�5���"����

������������$������D��+�����,�)$ ���$��������&����$����4����$�����)�����)�/�5�9���

�$���$ �8����S�����D��+�����,�'������&���3������� &�4�7����$���"�3�$����"�����$�4���$�5�

H�,������������� �$�A����$������ ��4���5���������S���"��)$ ���$��$�������� ���$�����

���S�����D��+,8�'�������������S���"�� ����$���$�����1�$&��O����54��"��4�� ��

�7��4����������$��$����� ��4��������"��S�����5�

Page 120: Game Programming With Python, Lua, And Ruby (2003)

� ����

����������$��������&$�'�'��������"�����������"�8��$����������'������������������

������$���4���5�H�,������������������)$ ���$���� ��������)���4���$��������������"�������$�����������������5�9���������7��4��8�����������������"������� ������$���I����I�

������ ����8��$�����$����������>����>C����)$ ���$���� ��������4���$�����$�'����3����������K1� 8�+�$��'�8�:��=L�����������$�����$$�$"��$5�

��������/���>����>C���+I����I������,�

+��A�1��) ������.$��%��

���$"���������)����"�� �)���������4����$���$�4��"�����$"5����� ����8������'����$����������3������ &�����8����'�������)���4��"���8�)����)��$�������� ��5�H�,���)�$�������

���*�?�����������* ������� �$��� �������3���� ����$5�

�����$��))���������*�?����*����� �$��� �����������'����3���4����������4���))���$��

��4����)���������$�����$��7� ����44��4�������7 �4���$���$���$"� ���5����*�?�����

� ���������&��F�����&������������)�� *��� *�����4��"����)��'� ����$����

���E����������?�����������$���D��?�����������E����������?�����������$���D�� �M������M����"����������?����������-E����������?�����������$���D�� �M�����-M����"�������������E����������?�����������$���D�

�������� �������� ���������'��)��������7� ���$��)���))���$�� ������� &����4�$��$"��$�

������4���)���������������"�$������5�+��$������$��$ �$����� ����'��44���'����$������'

�?����'��������� &8����)����������4�������7� ������� ����'����$������������ &5��)������ ����'��&��'�������$���7 �4���$�����$"�"�$������8������$����$� �� &����������)��$�

�������� &����4����$�5��)������8������ ��������7� ���5�

�)���4�����������$ �$������'������$$�$"����� ����'����$������������ &8������$����4��

�7� ���$��)������������ &���������4��$���$����"�$�� �� &�$"��� ���?�������� &���������)��������������$�����)�������4������5��)�����$��������)�$�8����� ����'����$������44��4������

�?�������� &�����7� ���5�0����'���8������$�F�4���������4���$��������� &8��)��$���7����8�������������)������$�����K'�� �������$���������4��"���L5�

%����*�?�������� ������������������������ �������"����$"���"���,�����"�5����5����

���������"�������*�?�������� &��)� �����$� ��������������$�������'��$������$"��������"���

���E������������"�/��"���>���"�>����+ �������,��?�������"���>������������"�E�����������������������IL��������������"�EI�����������������������������#�����2?���������"��

Page 121: Game Programming With Python, Lua, And Ruby (2003)

� ����

0$ ���������"�����������8������������� �$3�����5���������$��������������"����� �4�����������"������)� ���$������ ������$����4��������������������� ���������4���5�����������$���������������$"��������"���������� ���$�'������44�$����A� &������4���������

���"�/���"�>���3���+,�

����$�7�����4��������������������D���)����������"�5������ �$�������������D���4��3�����

'��$�����)$ ���$�'��� �����8������'�5��)�����'����� �����8�����3�����)������D�������������

������4���)��K�8�L�4�7��5���"���,�������D����74� ����$�/�%�3���8��$���%2&LL2%������)��"������������"$�����$����"�������'����$��� ��$"���3�������5�H���������$������ ������ �������'�������4������4�����)��������"�����$"����4�����8�4���� �������)��������"��������3��A� &��5�

� ������D�������������E���������� ������D������'�E����������������������D���/����"�>"��S��++���,,������������"�>���S�����D��+�����D�����%2&LL2%,�

����)�$������4�����������$��������"����F� ������������K(�&���,3������8���"��������������$�

�������$����)� ��L�)�������4��"�����������

����������"������"�>"��S����+,�

����)��� �����$�4�)�������S���"������������������$��������$�����.�8����

%���S!��"�>����

�� �����S���"�+�����������D��/���,E� ��������/���>����>C���+I����I������,������������E��������������������"�/��"���>���"�>����+ �������,����������?�������"���>������������"�E�����������������������IL����������EI�����������������������������#�����2?���������"�������������"�/���"�>���3���+,���������� ������D�������������E������������������� ������D������'�E������������������������������D���/����"�>"��S��++���,,��������������������"�>���S�����D��+�����D�����%2&LL2%,�������������������"������"�>"��S����+,�

��)$����+�1 �

��"�������8��)� ����8���������)��������$"�'������7�5�������"���> ���������������'������������3������)�$���$)�������$������������

R�S5����/���"���> ���>5���+�����.:,�

Page 122: Game Programming With Python, Lua, And Ruby (2003)

� ����

�$������ ���8��������4���R�S5����3����������������5���+�����.:,8�'�� ��������������

$��4���� ����)�$����4��K���8�'�� ��'���� ��������)����)�$�����������4�����L��$�����;�

)�$����D��K.:L5����4��������� ������'����)�$��������4������$"� ���>��������

R�S��?��/� ���>������+M5����#�����M�����+-���-���--�,,�

������"��$���4��������� ���>��������$ ����������7�����������4�����8�'�������������7������������$�����������K��)������8���)���$�L8��$������/��3���������������$��������7�,��

����5��������������4�������4�� ��������7���$���"���,���������)������+,��

R�S�����/�R�S��?�>"��S����+,�

9�$����8����"������� �$�����)����������+,����� ��������$�������� &"��$��'����

�����$,���4����4� ����������?��������K'�� ��������4������������)����������$�$"�����

�7� �� �$�����)��������$"L8��$�����$� ��������$���+,�����������4������

R�S����>������?�/�R�S ��D"�����>"��S����+,>������?�$��D"�����>$���+R�S��?���R�S����,�

����������������)�

%���"����"�������4����������3���������"��)��'���5�%)���������$"���������$����)�$�$"�3����������$��)$ ���$�8����F���$���������4���������&����������$4���$�����$�4������"��4�� �5������ �$������$��'�����$�����)�'���$����)� ���5�%���4� ����3�$�����4��$���"����'�������&��������$"���&��������

�������E��������� ����3���������"���>�3���>"��+,E������������������ ��3���>�����//�V�!�E���������������������������?������J���� ��������"��������������������������������������������������������������>$���+R�S7�������+����,,�������������������"���>�������> ���+,�

������"���>�3�������������&��)��������$4�8��$����"���>$�����$��

��"���>��������&��4�����"��4�� ��"��$"5�(��,�����8�)����7��4��8���������'�$����������&��4� �)� �����)���4������'$�����'�&����)���4������ �$����5���������8���� ����

���4���������� ��������$�����������3�$�����4���

�������E��������� ����3���������"���>�3���>"��+,E������������������ ��3���>�����//�V�!�E���������������������������?������J���� ��������"����������������������������������������������������������&��������������"� ���������D����!�������3����J������������������������ ��3���>�����//�T2�67E�������������������������! ��3���>D���//�TS������������������������������������������������"�������������������������! ��3���>D���//�TS67����������������������������������������������"�

Page 123: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

����������������������>$���+R�S7�������+����,,�������������������"���>�������> ���+,�

������,)� ���

0��"�$����� ��4�����'�������4����$ �4������)����'�$"��$�������$"�$������"��4�� ��)�����$�"��������4�����$�����������)���4�4�����)���3�����"���5��$�������)���"��������'��&8��4� ��������'����'�����3���4������A� &���4�����������"��4�� �����F� ��8���$"���3��������)��4� ������ �$�A����$��3������))���5���������F� ���'�����������4�����5��������4�������������)��������$���$��������'������$���$���"������F� �5�

�4������'�����$���� ����$�����"����'����>�����$��5�8��$����������������������

����"$���������4�4��"����������&���$�� �$�������"����3���"������F� ��5������������

����������������� �����#�����8�)����'�� �������4�������������������3��8��$����3�����

��))���$����4����)�W����� ������8�'�� ��������������4����� �$���$���5�

+��$���� ���������4������������"$���������"��4����������)�"��4�8��$����"����

�$���$������������������"������F� �5������4����� �$������3��8������������� �$���� �����8��$����� �$�����������������3���)����������"��4�5�+��$������4�����$����$"���

����$"������$��"��4�8���"���� ���$��4��������������F� ��)����������$�K�����$�����8�

��� �$�������������4�������$�������$"�����D���+,�������L5�

����W����� �����������$������)�"�����������$���������)��������$"�'�����$���4���������

�'$�8������������4����$�����$"�������+,8�'�� ��'����4����������4������'����$�����"��45���3�������������)��"��4���������������������$�������#5�5�

+��$��3(/(�C��0�$�����)�!� �����

!� ����� C���

���+,�� %�������4������������"��4�

����+,�� 1�&����� �4���)�����"��4�'���������)�������������

�����+,�� /���3��������4������'����$�����"��4�

���+,�� /���$����'���$���4����������"��4� �$���$��

����3�+,�� /���3����4�����)��������"��4�

�����+,�� /���$�������)�"��4������$���4������

������+,�� .������$�4�������������$��� ���4�����'����$�����"��4�

��4���)��4����������3������)��)������ &�$"�"������F� ��5�9����$���$ �8��$��$����������"���8�4���������4�� ��������$��"��4��)��4�����8����������� ����������� �$��"��48��$���$�����������4����������"��45���4�$"��$������'��� �$���&���������������$�"�8������8��$��4����������4�������$�����"���� ���5�

1�������$���4���������������$������$��)�����$"��4�����5���4��$���4����� �����������$��4����D��������&����$"��$��4����$"��4������3����)�����$����'��������

Page 124: Game Programming With Python, Lua, And Ruby (2003)

� ����

4�� �����5���"���������������� �������$����� ���$�������3�$"��$��������$"��$��

���������F� ��������$����$"�������$"�����$��"��4�5�

:4����$"��$��$������ ���$��� ��������������$"� ��$"��� �$� ��������)������4����� �$������������4�4��������'5��$�������)�4����$"������$������ ���$��$�������'�$"������$������ ���$�$�������8��$��$"�$���������$��� ��$"������"��4�� ���������3��� ������ ��$"��������3��5������$"�$���������������&��4�$"���� &��)�'�� ����������3�� ��$"����$���������$�����$��$���4����$"���������������$���)��� ��)���������$"�$�� � ��5�������4�����$������4�� ���8���"����������))���$����4����)�"��4��)�����$����$"5�������������������$���'��&�'�������������� �����$"8�����������$���$��8�����������$"�$�8�������$��"��$8�$����3����"������A�������'��44�$"�)���������5���"���,������$"������������'����5�

���������������$�����W����� ���������������������W����#��"��8��������������8���

������L����8��$������������������ �����K����9�"���#5�L5�W����#��"��� �$��$���

�$���$��$���4���������$������5�+��$�3������4�����������������W����#��"��8��$���7����$"�

�4��������)��"����$��$������)����������$5��������������������)������'�$"����������$"���

���"��"��4��)��4�������������� ���$5�����������4� �)� �����+,���������������� &���4������

�������3�����"���$����������������5�����������������"���� ��� ����������4�����$"�$��

)�����"���������� ����������"����$���� &"��$������$����$�������8���&��� �����$"�"�����'���������4�������������$��� �$�����$��������)������ ���$��$�������� &"��$��

� ����������������������3���$�5�������L�����������������)$ ���$�������)�

�������������������������$������������+,��������������������� &"��$����� �3���

�$������������������'������4�������������������5���������������������������

)$ ���$�������)�������L����8��$���������� �4������)���� &�$"��$�������K$���F����4������

'������������������L�)�����$����$"�'��������+,5�

&����3(4(�,)� ����� ������$������

Page 125: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

�4�������������3��������$� �������$����� ���$5������������������+,�������� �� &��)��� �������$�����'��$�����$"����4������$���4������'����$����4� �)� �"��48��$��'��������$���������)�������F� ���������3����4�'���������4������)���&�����5��������� �����'�����$��4���$���

��D����)��"8�'�� �8��)�����������8�'���� ��������D���+,���������$����������4�����5��

%�"�����������+,�������� �� &������ �������$��)������4���������'��$��'��"��4���$��'��������$����� ���$�����)����� ������$"��4�������)���&�����5�9�$����8�����

����������������+,������������$���$����$"����4���������� ��������'������"�3�$��4����5�������� �����)������� �������$�������������

��"���>������>�������������+��������"������D���K,�'4�������"���>������>"�����������+"�������"����-��D���"�����K��D���"����-K,�'4��������������"���>������>����������������+��������"����,�'4��������

2��������$��7��4����)��� �������$������ �� &���������'�������R�S#�������3��� ��������

'����R�S������8��$������3��������))�$��$"�R�S#�������4������

���R�S#���������������>�������������+R�S��������R�S#��������,E����������7�����������������"������������������������������

+��$���$"���"�����4�����8����$�������&��4���)�'����$"���$���$�5�9����8������4������

$���������3��������+,�����������$������������������������+,���������������������$��������5��� �$�8�'��$���� ���������4���������� ������������3�������4����8��������

��������������S����S+,��������)���������'$������S����S+,�������5�

����� �>�� ��$������

�����$����$"���4����N��F� ������$������$"�"�8�$��������"���� ����������� �������)����8����$��4� �)� ��$���$ ����)�"������F� ��������$��������)�������� ������� ������5�(��,��'��&�����"�� �����$"��$��7��4��� ����8�����$�$����

������ �����E�����������S����S����������$�����������������������$�������������-�����������$�������������.��� ��������������R�S ������/� �����+,�

����������"������'��� �����'��&�5����� ������ �����$���������������$�S����S�������8��$��'������&���� �$���$���$������5�%)�������� �������� ������8����4��� �������� ��������

�������$��$���$ �� ������R�S �������$��������$����45�

��$ ���$�S����S�������������$������8����,����&�������&����'����������������'�������&���&��)������

Page 126: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

������ �����+��"���>������>#�����,E����������� �S����S+��� ,E�������������������"���>������>#�����>S!���S+��� ,�

���� ������ ������������4��������"�����4����5�+��$������)�$������S����S�������8���������4� �)������������$��4����������������4����$���������F� ���)����� �����)���'�� ��

�������������� �����5���� �$3�$���$8��������)���$ ����"��$����� ��������� 5�

H������'�$����������������4� �)� ����$���������S����S�������5�9����$���$ �8��������

'��������4� �)���$����"�G������$�������4���"��4�� 5�H�����������'�$�������������

������ ������������� ���$��

������ �����+��"���>������>#�����,E����������� �S����S+��� ,E�������������������"���>������>#�����>S!���+��� ,�������������������� >!��"������ >�����/�����S��"+I$�����>��"I,������������������������/���"���>�������>"��S��� ���+,�

%)������)�$�$"�S����S8�������������'�$������������������������)�$��������F� �,��4������$��$������ ���$8��$��4�����������F� ��'��$�$� ��������

������ �����+��"���>������>#�����,E����������� �S����S+��� ,E�������������������"���>������>#�����>S!���+��� ,�������������������� >!��"������ >�����/�����S��"+I$�����>��"I,������������������������/���"���>�������>"��S��� ���+,����������� � ������S��������+��� ������,�������������������5��D������������������������������������� ������������������������������������������������������������������ � �����S������+��� ,�������������������L���������������������$������

�������������%��

��"����������4�����'��44������$����(8�'�� �������'��44������$���4�����$"��������"��4�� � ����5�%����"��4��"�����$"����� ���������'��$���$"���"�������$�'��$���$"���(8���"��������3������4������)���)�������� ���������� ���������������'��&8��$������� �$����������$"��$���$������)�'���5�

��������������������"$�)� �$�����'�� &������"���8���'�3��8��������)� �������������������$����������$����4�$��$ �����$����������)$ ���$5�0�3�����8���"����$����������$��$��

��(�����$8������������$�������3����������������������8��$ ���$"�#6%S�� ��#6%S��?��8�

#6%S���"�8�#6%S����8���8��$�����������$������ �4� &�"��)���������� �����������5�������)�������������������3���������'$���4�$��$ ���5�

:��=�4� &�"���"�$������� ����'����4� &�"���$����4�$��$ ����$�"�����������&����$�"�$"���4�$��$ ������ �$����������4��������$�:��=5�����$�+�$��'���������8���� �$������))� ������������������"����'������ �����$"��� ���� ���$��)���������$������)���������"������A���������$5�

Page 127: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

( &���8����������������$�������������4������+�$��'���7� ������5�����$���$�����)�'��)��������$�.��4�����8��$�4���� ����������� ����������7�5���������$$���8�������"���������8�� ������'����������������$���'�����������7�����4� &�"���������$���"����)���+�$��'�5������������� �����'���������4������������� ��4���$�� �$����)�$��������4�GG'''54�"���5��"G�� �G��G*7� �����5����5�

9�$����8������"������'����� ��������$����4��������'������"�����$��)���������������$����+�$��'�8���� �$����4��������� ��� ��������$���'��&���$������4���)����8��$���'��&��)���� ���$8��$��"������� ��4�� �����4�7�����)� ��5�H������� �$,�����������������������������$"�$��'�������)������'��������'����� ��������$C���������$���$������,3���$���$ ����&������5�

��������*1��)$��

�$�������� ���$���,������������"��������S���"��)$ ���$�'����"�������4����� �����������4����'������$���$���"��4�� ���$"�$��"�����7��4��5��������4�����$���������&���������)����'���

�5� ��4��������$� ����������������5�

�5� ��)�$���$��$� �������)$ ���$��K� ���������S���"�L5�

�5� ��)�$���$��"������F� �� �������K�4�����8�"���� ���� ����L5�

#5� .�����������$��3�$�����4�����������$��)����3�$��5�

�5� ����4���"���8�����'�$��'8��$�������� &"��$�5�

;5� ���'��$��4�����$� �������"��4�� ��K����D�$"�"��4���$���4�����L5�

���$3����$�����$&���3������$�&���"���8�'�����������$&��G4����������'����$�$�������$�&������&��4������������5��������4��)��� ���$"�������7��4��������74���$����$��� ���)�����)����'�$"��� ���$�8�����)������ �� ���� �$����)�$���$�����.�����

R��D��S����>��8��$��9�"���#5;�"�3��������4��3��'��)�����"���5��

&����3(5(���)��#����0�!��%��J+���()��

Page 128: Game Programming With Python, Lua, And Ruby (2003)

� �� �

-�)�� �� ���������������������

��4����$"��������$� �3��������$������������8������'����$�����������'���������������5����4���������'��������� �����

��#������'���������"�����������������$����������������"���������������������� ������"���>��������������)�

�������������������������)��������������'���������7 �4���$��)�����������������5�

�����$� ������A�44���'����������8��$��'��'���������$"�����������>�������"������������"�$��������$����$�����5�

�0�*�

/�$����(�������

����������>�������"���������"�$�����������$����$�����K�$��$��"��L�'����$�������$"��"�3�$5�9����$���$ �8�������$�44���4��$�����$��������'��$����$�� ��

��������������������+�������>�������"�+�����,,��

���4����$�"�5�����������������>�������"��4��$���4����������"�����$�����"�3�$8����$�������� ������"�������"��5�/�$����$������������������)��$��$�"�������������'�����)��$��$ �$������$����$�����)$ ���$����&��������

6� ��6�������+,E�������6�����/�������>�������"�+����<,�������������M�����������Y�M�Y�+�����,��������������������

Page 129: Game Programming With Python, Lua, And Ruby (2003)

� ����

H��'���������$"���$���,���������"�+,��$������+,������������4��� ����$����

$������)�������R��D��S����>����7��4��5�

��0�������������&��� ����

H��'���������$"���3�����$��)�����S���"���$������"�����7��4��8�������'�����'�� ��

)������$"������D����$�����&��$������)�����4���3������$�����"��4�� �5�H����3������"��4�� ���������������'������4��� ��$$�����$����������$������������ �����$�7���������"���� ����K�$��������$�����.�L5���������$�����$���������������)�'���$����)� ����)����

%���S!��"�>����

�� �����S���"�+����,E����� ��������/���>����>C���+I����I������,��������E������������"��/���"���>���"�>����+ �������,������������������������� ����������D���������������D� ���������3��������������� ����"�>"��S������������E��������������������"��/����"�>���3���+,�������������E��������������������"��/����"�>���3���S�����+,������?�������"���>������������"�E���������������IL��������������"�EI�� ����������������������#�����2?���������"����������������"������"�>"��S����+,�

H��'�����������)�$����3����������)$ ���$�������4���$����&������&���3�$���)��������

4�����5�+��'���� ���������)$ ���$�&��T�������

�� �&��T�����+D��,E��������D��>�����//�T2����

��0�������� �>�� ��$������

9��������'������)�$�����4����� ����5����� �����$����8��)� ����8��$�S����S���������

������#�����#�����+��"���>������>#�����,E����������� �SS����SS+��� ������/���,E�������������������"���>������>#�����>SS����SS+��� ,������������������ �����E���������������������������� >���"������ >�����/�����S���"�+����,���������������������E������������������������������

+��$��$������$"8��������#�����#������������������"�3�$����"��$�����$���� ������

����+,5���������8����'�����$ ���������� �����$� ��������$������$,��4���������

�������$"������"����'��$"8����)���$�'����'����F�����������$,������� ����$��

K���������$���4����������$������� �$��������)���F���� �����������$L5�

H��'���������"�3������#�����#����������������������4�������)� ���

Page 130: Game Programming With Python, Lua, And Ruby (2003)

� ����

���������� ����S���"�+��� �����#�� ������������/���,E�������������������� >���"��/����#�� ��������������������� ��������E���������������������������� >������/�����������������������������E������������������������������

������������'��������4��� ��4������)�����$��������$ ���������������������������)���4����$"������4����8����)���$�'����,��&��4��������5�

9���������$"�$�8����������8����$3����$�������$&���3������$�&���"���8��$����$ ���������

'����$"��$������$8�������'��������#��D�SW����� ������

������#��D�SW����E������� �SS����SS+��� ���� ������,E���������"��$������D�����������������"��$���$���D��������� �����������"�+��,E������������� ���C�������"�+������>�������"�+���� ������)9,,E�����������������$���D�/�#�����#�����+M���D�>��"M,�����������������$���D>����>��3�S��+++�(�,)=�,�=F�'+C)=�,,��������������������D��������>���+$���D,�������� ������+��� ,E���������"��$������D��������������������D��������>�����+,�

�����������'�����������$������ ����8��$������$�������������F� ���$���$����� �������5�����

�����+,�����������4������������+,���� ������������"���������D���������'��$�������

����5�����S����S����������&����$�������A�������� ��$�����������������)���))� ���8�

�$��������D����������$��$���D����� ������8��$�����$���������������$"�����"���� ������45��

��������� ������4��������������"������ �$���$$��� ������4������ �����������$����

$������)�I��� &�8I��� ���)�'�� �� �$���$�����A�������D���������������'���������$�&�54$"�"��4�� 5��������4���������� ��������$����3����$������ &���$�����"����������

��$"��������)� �$)��$"������K$���D>����>��3�S��+++�(�,)=�,�=F�'+C)=�,,L5���$,��'���������� ���������������������4�� ����������4�������$�����#<��4�7���'������)� �M��$�����8������D�������'��$��$��������'�����$��$��"�����4����$��$"���))� ���8���

#��D�SW�������F� ��'���� ��������4����$"������������������������$�9�"���#5!5�

&����(�&����3(6��� ����� ����>�� ���$$���� �����00��$ ���0�/�

Page 131: Game Programming With Python, Lua, And Ruby (2003)

� ����

����4�� ���$���)��������D����������$���������"����)�������'��������$����������������))����$��"������������)� �����4��� ����� �����������"��������$5�

��)�$������4�������4�����$�7�M������'�������R��D��S#�����5�H��'�$������

R��D��S#���������4���������������������3���$�����"���8�������$���������)�$����$������)��������������)�$���$����� &���3���$���

������R��D��S#�����+��"���>������>#�����,E������� �SS����SS+��� ��"���,E�������5����������"����!��������� ������������������ �������+��� ,E����������������� ���������������������� �����DS�����+��� ,E�������L���D� �������������������������������������� ���3�+��� ,E����������������3�������� ���"���SD��+���� ���3�������������"23�����,E��������������������������! �����������������������"������� �����DS����+��� ,E�������#���! �����������$������� ������������

����,���������)��������8�����$�� ������8�����R��D��S#���������)������$ ��4�� �����

�$ �������&��������������'��&�����"���� ��������5�(����������'����S����S��

�� �SS����SS+��� ��"���,E������������"���>������>#�����>SS����SS+��� ,������������� >���"������ >�����/�����S���"�+I���D��>��"I,������������ >��"��5����"!�"�/���� >���"������������� >�� �5����"!�"�/���"���>����� ���> ���+���� >���"�������,������������� >����������/��������������� >����������/�-9������������� >�������/���� >����������������� >"����/�"���������������� >������T����/�NO�

Page 132: Game Programming With Python, Lua, And Ruby (2003)

� ����

9��������������������"���$���������+,������'������4����$������R��D��S#������"������F� �8���$&��54$"8��$�����"������������)� �5����$����������$������)�3��������5�

������"��5����"!�"��������$�������������)�����"��4�� 8��$�������� �5����"!�"��������

"��4�� ����������<����"�������$"�������"���,����$�������� ���> ���+,�������5�

������� >����������3���������������$�3���������'�������������3������R��D��S#������

���3���$"���)��K��4����$����������L������"���K��4����$����������L5�������� >�������������

��8���4����$��$"����4�7�������������R��D��S#������'�������3���'������ ��4����5�����$�7�������������$"��������������)��������������������)����'��$���������5�

��������������$�7����������

������ �������+��� ,E������������ >����DS����+,������������ >��3�+,���������� ���� >����������//��E���������������� >���"��/���� >��"��5����"!�"�������������E���������������� >���"��/���� >�� �5����"!�"������������ >����DS�����+,�

�������)����� �� &�8���$"���������DS�����������8��������'�����������R��D��S#������

������� ����������������)������ ���$5�H����3�$,����)�$�������DS��������8�������'����

����$������5����$����������3�������R��D��S#������'����������3��������8�'�� ��

����������3�����������)�$�5�������$� �� &��'�� ������ ���$�R��D��S#���������)� �$"��$��

��&�����������"��4�� ����$"��������)� �$"����� ���� ��'��5�9�$����8�������� �����

����DS�����8�'�� �������$�������������)�$��8��$�� �� &���������'���������������3�����$��$���4����� �������$�5�

��������DS���������������4������&����������)�����R��D��S�#���������� ���������4���� ����4�7�����$������$�����"������������)� �8�'�� �������)�$����������

��� >����>�����$����� >����>�� ��3��������5��)�������8����$�'��&$�'����������

R��D��S#������$���������������� &��3������������4��)������ ���$5��

������ �����DS����+��� ,E���������� �+��� >����>����//�:=�,�����+��� >����>�� ��//��,E���������������� >"���>����+,�

������3�������������������)�$����$ ����$��3������������$�S����S������3�������4������ ���������� ���$��$��������� ���$���,3�����5��)������4�����"���������������"����'�$��'�KS;#�����R��4�7���L8������&�������4������'�� ���$�����3����� &�� ���������� ���$��$������44���������� ���$��

�� ���3�+��� ,E������������� >�������/���� >����������������� >�����/���� >����>��3�+��� >������������,����������� ���� >����>��"���4�:=�E����������������� >����>����(/�=������������������ >����������/�'-9�

Page 133: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

���������������� >����������/������������� ���� >����>�� ��1��E����������������� >����>����(/�=������������������ >����������/�-9����������������� >����������/���

��������DS�������������������"���,��������$�"��4����������$��

��"���>������>�������������+,���� �� &��)�����R��D��S#�������3��� ��������'����

�$����$"��$����� ���������8�'�� ���$������ �����$ ������$�����D��������5��)������������

����8�R��D��S#������'���� ��������"���>�����+,�������8�'�� ��'��'������)�$������$������5�

�� �����DS�����+��� ,E����������"��$������D�����������������������S�����/���"���>������>�������������+��� �����D�����������,����������� ����+�����S����,���������E����������������� >"���>�����+��� ,�

0$����$��������������������� ������'��������R��D��S�#�����8���"���SD��8�'�� ��������4����������$���)���&���������3�$��5�

�� ���"���SD��+���� ���3�������������"23�����,E������������������ ���� >������T���>���SD��+��3���>D���,�Q������������������������3���>��������T2�67E���������������������������� >������T���A�3���>D��B+���������"23�����,�

0$ ����R��D��#��������F� �����������8����'�����44�����$�������4���)�� ��$����)�����"������������)� ���$�����3���� ���������� ���$8�������'$��$�9�"���#5<5�+��$���������������"���)������ ���$8�������4������������$�����$��������� &��$������44���������� ���$5��)�����

R��D��S#�������3����� ���������D�����������������������)������ ���$8����'������������ &����������4��"��$5�

&����3(:(������ ������0� ������������������$���� ��#�$��������� ����������

Page 134: Game Programming With Python, Lua, And Ruby (2003)

� ����

��'������3����$&�����$���$�&��5�H��$�����$�������� ���8�����$�$�8�'�� ������

R��D��S#��������F� ���'��������'�����$���������������$�&����F� ���'���5���������$�����$������������)���������$�$�����4������$����3���$�� �� &�)��� �������$����

������ �����+��"���>������>#�����,E������� �SS����SS+��� ��������"���,E������� �������+��� ,E������� ���3�+��� ,E������� �����DS���+��� ,E�

�$������D�$"�������$�$���4�����'��&��� ����&������������S����S��������5�������'��������$��$ ����$����3�����������)�$�����'���$��4�7����������$�$����3���'��$�4�����8�

�$�������4������������4����$���������$�$��'���������4�������+,��$��)�������'��������

)���54$"�)���5�9�$����8����'����$��������� ������� �� &�'���������������"������F� ��)���'��$�������$�$�� �������������3����))������ ���$��

�� �SS����SS+��� ��������"���,E�����������"���>������>#�����>SS����SS+��� ,������������ >����������/�:������������ >���"������ >�����/�����S���"�+M ����>��"M,���������� ����������������E���������������� >�����/����������������� >"����/�"����

:4����$"��$����3�$"��������������4���&������������ ������5�������$�$����3���� ����$"���������$ ����$��3�����$�� �� &��������A�������������)�������$�$�� ��������'�����$���4�����������3����))��)�����"������������)� ���

�� �������+��� ,E������������ >��3�+,������� ���3�+��� ,E������������ >�����/���� >����>��3�+������ >���������,��

Page 135: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

��������� ���� >����>���//=F�E���������������� >"���>����+,�������������E���������������� >����DS���+,�

9�$����8���������DS��������������&��)����$�� �������$��'�������D���������F�����&��

'��������R��D��S#�������

������ �����DS���+��� ,E���������"��$������D������������������������S�����/���"���>������>�������������+��� �����D����������,���������� ����+�������S����,���������E���������������� >"���>���+,�

����������������$������� ��������'����C�����������4����$���$����$"����"������F� �5�H������� ������"��$"����4������"���� �$�������$��3����������$�����"���� ����� ������

R��D������5�+��$����R��D�����������������������$������$������)���))���$�����$"�8�����������&���������3�$��8� �������$�8��$��� ���$��)���'��$��4��������3���))�����

� ���$5������"�3���R��D���������3�������))���$�����������

������R��D������E������� �SS����SS+��� ������W����,E������� ������+��� ����������,E������� �����+��� ,E������� �����S ����+��� ,E������� �����+��� ,E������� ���"���SD��+���� ���3�������������"23�����,E������� ����+��� ,E�

�����������"���� ������$������D���4������� ���3������$"���������$�������)������"����

�� ��$� �5�9����8������&����$�����"�����4�������$������"$������������������W�����"��45����$������)�$�������"������))� �������������������)����� ���������5������4� �) �&�������&��������4�����$�����������4�$�������������4� ����8�'�� ��'��$�4�������'����)��������

����S �����������5�9�$����������$�&�8���$&��8��$����$�$��K ����L����������$������D����

�� �SS����SS+��� ������W����,E������������� >����W�����/�����W����������������� >�� �������/�-������������� >������T����/�NTS#�&L2E���� >����S ����O������������� >���D��/�#��D�SW����+��� >�� ������,������������� >���D���/�R��D��S#�����+��� ,������������� >����W����>���+�A��� >�����B�,������������� > �����/�����

�������������������� ������������R��D��S#������'��$���� ��������'������

���D�������5�+��$�����R��D��S#������ ��������'���������D�������8����$�����������

����������'��������D���+,���������$�����$���$�'�R��D��S#����������������$���$�����������������3����$���������"$�����������4�����"��4���

�� ������+��� �����R��D��,E�

Page 136: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

������������ >���D��>D���+,������������� >���D���/�R��D��S#�����+��� ,������������� >����W����>����+A��� >���D��B,�

������������������������ �������������R��D��S#������'��$������� ����������������)�

����� ���$5�9�����������4��������������������$�� ����������������������8�����$��������"���8�������$��$"���"��� ��������$�'�)������)��$�&��8����4�4�����4�������������))���$��������)�����"�����$������5�

�� �����+��� ,E������������� >���D��>D���+,������������� >���D���/�R��D��S#�����+��� ,������������� >����W����>���+A��� >���D��B,�

��������S ��������������� ������'��$������4� ��������4������8��$��R��D��S#������

�����4���������4�)�����$����$�&�5�6���S ���������"$����� > ������$��$���$ ���)�������$�$�� ������$������������������ ��3���4�����"��4��

������ �����S ����+��� ,E����������� ���� > �����������E����������������� > �����/� �����+��� >���D��>��������� ,����������������� >����W����>���+A��� > ����B,�

.����������� �������)���'��$��������44���)����)�����4���������$���)������ ���$M�)������

4�4����������4����� �$�F��� ��������D���+,���������$������)��

�� �����+��� ,E������������� > ����>D���+,������������� > �����/�����

9���&���������3�$��8���)�$������"���SD�����������

������ ���"���SD��+���� ���3�������������"23�����,E���������� ���� >������T���>���SD��+��3���>D���,E���������������� >������T���A�3���>D��B+,�������������E���������������� >���D��>��"���SD��+��3�������������"23�����,�

���������4����������� �����������$������4����� �������$5�������������)������ ��4��75�9�����

���$�������&��4���� &��)������������D��������8��$�����$������)������4�������$�����"��48�

��� �����$"�R�SW����5����$���� ����������������AB8�'�� ������$�������)��$��������$�����"��4� ���������

�� ����+��� ,E����������"��$������D������������������R�SW�����/���"���>������>W����+,�����������������������/�AB�

Page 137: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

9����'�$"�������������AB������)������4���������� ����� �� &����������)�������������)�

����)����������$��������4��)�������$&�������� ������8��$���)���������������������

���������������

��������� �����������"�+.,E�������������� ���C�������"�++��� > ����>����>$�����(�:'��� >���D��>����>���,*�:,E�����������������������/�����++��� > ����>����>�� �'.-(�).-����� > ����>����>�$�����'C)�:,�+-9��:,,������������������������������>������+����,�

���$8�)����� �� �������$8����$�������������������"�3�$� ������$����&�����������4�����"��4����4�������

��������� �����������������������E���������������������/�#�����#�����+,��������������������>�����/�������������������R�SW����>���+������,���������������/���"���>������>"�����������+R�SW���������D�������������,������������� > ����>D���+,������������� > �����/�����

����,��A�����������)�'��&8���8���44���8���)�$�$"����� ������� ��4������������&��)���������4��,�� ���8��$���������4�����������)'���4��$���)� ���$"5���'��$'����J�

���� ����!���*#�� ����)� �� ��� ����0���*#�� ��

��� �����������$����48����$����������)�$�������$�)$ ���$� �$���$�$"������������4��

�� �����+,E������������������E������������������������� �� �SS����SS�//�MSS����SSME���������+,�

������$��������������+,���� �������$���������������4�&��4���$$�$"����$"����� �����

�)�����"���5�%��"���� ���$"�4�� �� �8��$������D����)�'�3����������$������)�����+,��

����"��$��������������"��$���$��D"����������"��$������D�������������"��$���$���D�

H�����������"��$"������&����3�$��"���)�����"��������D�)�������$�������$���,�������������������������$����$���������5���$ ���������"��$"��������74����$ �$"���3���$��

�$������8���,�����������$"��$���� ���3��������������4�&��4���� &��)�������$�����4���������$���

Page 138: Game Programming With Python, Lua, And Ruby (2003)

� �� �

��������D�/���"���>����>L���D+,�����������>����+������,�������� ���/���

9�$����8��������������45�H��'�$�������&���������������� �����������$"�����D���D+,��$��4����$"�'������ ����������$5�%$��&���������3�$�������A���8���������6:��8�����

*� �4��&��8��������T2���8�'�� ��������������������4� ����8� �$�������4�$���������

�������E�������������D>���D+��,������������ ���/����+����D>"��S ��+,,���������� ���� ������������� ��E���������������� ���/���� ��������������23�����/�AB�����������������"23�����/���"���>�3���>"��+,��������� ����3���������������"23����E����������������23����>������+���������"23����>���+�,�,���������������T����/� �����+�&��T���������������"23�����,�������������� ��3���>�����//�V�!�E��������������������������������������� ��3���>�����//�T2�67������3���>D���//�TS2#L&�2E��������������������������������������� ��3���>�����//�T2�67�����3���>�����//�T2���E�����������������"���>��"���SD��+��3�������T����,�

,� ��C)�������� �������������� ���.��%������

H�� �$��$������D����"������$"���������+,��������'����$�����+,5����$�������

�������>���S����+,���� �$)�"�������"������)� �����;#�7#<��4�7���8��$������"����

�4���$�������I1�$&�������I5�H�����$������������S���"�����������������4�������)� ���� &"��$���$���$������D��������$"��$��)��44�$"��

������"���>����+,������������/���"���>�������>���S����++:=���=F�,,�������"���>�������>���S�������+IR��D�������I,�����$��D"����������S�����/�����S���"�+I$��D"�����>��"I,�����������>$���+$��D"�������+����,,�������"���>�������> ���+,�

����������C)�� ���������������)����

9������'�$"8��������������$������D�$"������)������4�������$���4�����"��4���$�����+,��

���������������/���"���>������>�������������+,��������D��������/���"���>������>�������������+,�����$���D�/���������"����/�R��D������+����������,�

���� ����������������������'��&��������������$���)��������������48�'�� �� �����������4�����

"��4�����$�4�������$�������'���� �� ��$"�������+,��

Page 139: Game Programming With Python, Lua, And Ruby (2003)

� �#��

������������������>�����+���������$��D"�����,������������D��������>�����+��������$��D"�����,�������������������>������+,��������������"�������-�/�����������>����+������,�������������"�������.�/����D��������>����+������,�����������"���>�������>������+����"�������-(����"�������.,�

����)�$������4��� ���$������)������ �� �����$�������)����� �$����)�$���$�.��4����#,��)�����$�����.�5�0�3�����8�A���������� ���������������������4��"���5�.�� &�������� ��4�����"�������4�����������$���)������ ��4����)�����)�'������J�

Page 140: Game Programming With Python, Lua, And Ruby (2003)

� �#��

�� �������)����

.�����$"���"��4�� ������&���������������������))� ��� ��� ��'��$� �����$"���"���5������������$�������)�"��4�� �&������� ������)�����$���� �����3������))���$���$��������$����$"�"�5������ ��4�����$��� �3��������$�)���)�����"��4�� �������������3��������)��������$�4��"�����$"8��$��"��������"�����4�����$��$�����)�'��)������3���������4���$�C���$�������4�4����&�����3��������)�����3���4�$"� �����4���)���5�

�4� �)� ����8������ �3���"���)��&�$�������"�3�$��$�������� ���$8�����&�$���� ������$�����'���������$8���� �����4���)���8��$����� ����$������������:��)��������$�4��"����5���"�������4�����������������4�4���������$�"�������������$���������8��$����"����"��4�� � �������3�������������$� �3������$������������5�%�)�'�04�$(����4�����$������$�����������7���$�����������$���)������ ��4���5�

�0�*�

%�$������)� ����� ������������������4��"���������'�����$������$�� ��4��5�������)������������ �"$�D������������$ �������$���8������8�(�"��)��'8��$����)����"��=��5�*� ���)������������������������$��$���)� �5����$����K�5�5�"������$���L����������$������� ��4��$"���$"�"�8���������������4� &��$ ������������$�� ��4��$"��"�$�8�(�"��)��'������������$��7��$���$������8��$����)����"������ ��4������3��������$5�

9���������4���$"���3���4��8������������������$��������"��4�� ��4���$���3�������5�2���8�)�����������8������������������)������$�:�������������$��"��4�� ��&�����

•� +���, �������������-� ��0���(����+���������������������� ����$�������:��)��������$8�������$�'����"����$�44�����5�������������'������$����������4���)�����$��4�$��$���$���)� �����.�������+�$��'���������8��������������$����$"����7������$������$��5��������3�8��$������$���$�������$���)�����"� �5�����$��$����:��=��$��1� 8����'���$�3���4���������+�$��'�5�

•� +����1)� ����$�����(����3������44����)�������'7+�$��'��4��������:�� ������������5�+74����$���������(������$����� �(� �$����$��)$ ���$����&����'��44����������.??�'7+�$��'���������5�������������3���� �����4���)���8����$���A�������4������������&�$���5�

•� +����� ������$�����(������$'�$����������$ ������$���$�����$����������$�����������$�8�����44�� ����$������"$���'�������'�����$����$��$�+�$��'�5������$'�$������'��44����������1� ����)��9�$�����$�.�����(������8��$��4��3�����)��������)�����+�$��'�������$���)� �5�

•� �)�(�%$���F� ������$���8� �����4���)���� ��������������������������������$�����1� ����)��9�$�����$�.������5�+4�������������������4����$��4�������5�

•� ��F�*(�%������)������$���$��$"��)�������E�*� �������'�����$�������������4��$5���E�*���A�������4�����$5�

•� ���+F(�%�)������)�'����:������&�����������������"��$������)�'��"��������$������'���������=�+�$��'�������5����E���������������$��������(������$����� �(� �$����$��'�����3���4���)��������E�'��"����$���01*����������5������������������F� ������$�����$�� �����'����������)�"�������4���5�

•� �� !*��� ���(�%������)���$��$"��)��������01*����������������������E�K'�� �� ������$�����'��������4� &�"�L5�

•� ��0�)� ���(�+�)�����������)���+��"���%���$��9��$��*$�8��$�������4� &�"��)�����3���4�$"��44�� ����$��'������"����3���"��4�� ��������$���)� ����$�� �5�

Page 141: Game Programming With Python, Lua, And Ruby (2003)

� �#��

+�)������$���4����$����$��$���)� �����'��$�� �8�����=�����&��8�����%���$��+��"������8�����1���)�+��"������8��$����)�'������� ��������$��'��"���4� &�"�������'$��$�)���"����������5�

•� ��&�+F(�9(�E����$���)���9����(�"�������&��M���,����.??�:������&���)���:��=8�04�$(��$��+�$��5���9(�E�'������"�$����� ����������������$�������44��)�����"����������$5�������4��D�&�����������"�$����������$���� ��3���4��������$�)�������� ��4�$������������������$��������(������$����� �(� �$��5�0�������3���4������3����$�������'��&��$���������&�����$ �����$8��$������4��F� ���������$���3��������� �)��"�5�

•� &�1��� ���(�9=��������.??�����&���)�����3���4�$"�:���������$���$�:��=��$��+�$��'�M������������������$��������(������$����� �(� �$��5�9�7,����4����������$��4�����$��������)���5���������� �$�A���)����$ �����$"����'�$"��4�����$����$���D�$"�������8��$������� �$������ �$���������'��������$"�����$���)� ���5�9�7��44��������"��$�����48�04�$(�'��"���8����"��4�� �8��$��������4�5�

•� �� ����<(�%$��7��$���$��������$��������$���"������'����1���)8�'�� ������������)������$���)� ��"�����$��������������04�$���)�'����9�$�����$5�1���)����� �������3������� �������8��$��������������$�����&�� �3���$"�������8��������������$�����'�����$��� ��$��)�����'����5�

•� +����� �������)� ������)����F (�%� ���� ���$��)������$��������)������ ��4����"��4�� �����"��5�����&������$���)� �����$���7��,��/�$���1�$��$���)� �8���������������� �$�������������)���04�$(�4��"��������$�$�/�$���1�$� ��4���$����$������5�

•� 9)� ���(�%�)�����$���4�$���� �����4��"�����$"�������������"$���I)�������$�����������5I��������������$��>4����$����������)�����$�����4�� ���5�

•� I��(�%��������$���04�$(�"��4�� ���$"�$��'�����$� ��4��������$������$5�Z����$ ������$������� ����)������8��$��)� �����$� �����$"����'����)������)���4������4�$"������4�����3���4��$�5�

•� +�����C-�������(�%$��$���)� ����������'�����$��$��������$������$�)��������$5���� �$��$��$����&��4�+�$��'������$����������'����� ����������$3���$��$���$��������$��������4�������5���:��'������"�$�������������������������$���)� ���)���"����5���:������'$���������$�/������)���$F�$����$"�K����.��4������)���������$)�������$��$���$F�$����$"L��$������D��������$��5�8���"���8���04�$(8����������$����"�$"�(������8��$������% ��3�������'�$����7��$���$�5�

•� ��7+(�6��)���+�$��'�������.??� �����4���)����:������&������������������������ �8�'�����3����)����$�$� ����� ����3�����$��� �$����$����4��� ����� ������ �$��5���6������������)������$���$��$"���������.??�6������&��8����"�$�����4��� ����������E��4�$���$��$�'�$����/�3�����$&�.��4��$"5�����:������&����$���$�+�$��'�8�1� �0��=8��$��:��=5�

�0�*�

����

:������� �������'����"��4�� ��������$��� ������'��"���8�'�� ��������4� ������ ��������8�����$�8���7��)�����8��� 5�+��"��������$��������)�$��'����$���'�$��'8�'�� �� �$�����������������)�����'��"���5�

�����$������������)�'����� �������$�������)���"��4�� ���$�����"����$���$"5������������$ �����$��������1������������3� ���������8�'�� ��������������$�������#5�5�

Page 142: Game Programming With Python, Lua, And Ruby (2003)

� �#��

+��$��3(2(��� ����!�$ ��������)���,��#����

!���$��� C���

���������� .�$3����$"����'��$�/���$�������� �������������

���"����� 1�$�4����$"���'����"�������

��"����� �������$�$"�������4���)����"�� �$���$����$���)������������������

�"$��"�� /����$"��$��'����$"����"��)������$����/��)������

�������"���������� �$��4�������$�<������������4�7������"����$��������������)���

��44�$"8�� ���$"8��������$"8��$�� �$3����$"��������"���������'���3��5�L�������� �$����

������� �$3����/�8�2(�8�2�>8��$��H�6� ������������5������$,����"���� �$��� �"$�D����$������)���))���$�����"��)�������K������'$��$�������#5#L��$�����������7��$�������������'��3�$��������4��5��

+��$��3(3(�-����&���� ��

9�$���� -����0���� �

�"��� �����"(���9�����

"�)�� �9�<!���$��< ��9�����

4���� ��������������4�9�����

4"��� ��������������4�9�����

44��� �����������7��4�9�����

��))�� ��99�9�����

������ �$�/������9�����

7���� =������4�9�����

F4�"�� @�*�������$�@9�9�9������

��4�� �1��9�����

4$"�� ������������'��&���4�� ��

+���+%� ����������

�$���������� ��4�����������������������4������7���$"��&�$���5�2������,����74�����:�� ������$�'�����&�$�����$��������4��5�%������� ���8��&�$��������$���F� ������$�����$���)� �������'��&���$�����4���4���)������$���������"$����������7��$����������������� �$�������������4����������4�����'��"���5�

��� ��

Page 143: Game Programming With Python, Lua, And Ruby (2003)

� �##�

�&�$���� �����'�����$�������$�)���)����$�����'��"���5�*� ��'��"������������$����������)����������$��������44����������"�������)�"�$������������8������������� �4������)���'���� �3���"�5������������������������'��"�������$�'���,����������$�.��4������K��4��$������������������#5��)����������)���$ �L5����������� ������ ���)������� ��4�$�$������������'$�4�� ���$�����'����$���:�8��$�������)�������������'$� ��4�$�$����$�������������� ������'������5�

+��$��3(4(�+%� ������ ����)���� ��

���)���� �� &��� ���

������� .�������������$���������""�����$��3�$��'��$� �� &���

L��3���� ���4�������7��������"���

L���D$������� .���������������$� �� &����$�

2������ .�����������$�������� �4���&���������$4��

5������ .����������������$"�'�$��',����"��

%�$���� ���4�������7������������)��� ��4�$�$���

%���$�?�� .���������������)��4���$��

R����� .�������������4������� ���$����4����

R���$������� .���������4�4�4����4�����'$���������$�

�����$������� .�����������$"����4���$�����$�

#������ .��������������������� �$� ������)��������$"��

#�����$���� .���������� ��������)��������� ��4�$�$���

��?��� .�������������4�����$����7������� �4��������$4��

�����3���� %�'��"��� �$���$�����&��5��������'���������'$���4���3���'�$��'�

�0�*�

� �G�E�

�E����������&����������$��������� ������$��)�'�$��'�8�:���3�$���K'��"���L8��$�������$���� ���$5������E�����&������4��3���������$��7��$���$�)���� �5��&�$��������$��$���)� ������ �M�'�����������$���)� �����'������&���$�������)���$����)� �����������3�$����4������$"����&���4�$���'�$��'���� ������������$5�

1�$����$"�"������������� �4������)���$"��E5��&�$������������$,������$������� �$������� �����)������E�:������&��8��$��� �������������$������� �$������� ����������&�$����������� ���$� ��������E5�������E��$��� �������4�$���� ����3���4��$������������$������3���4��$������ ��4�� ��K����� ����3���4����7 ��$"�� �$����)�$��������4�GG��35� ��4�� �5 ��L5�

.� ���

Page 144: Game Programming With Python, Lua, And Ruby (2003)

� �#��

.�� &���������$������4�����������������'����������'��"����$��$���$���)� �8��$���&�$������������$���4���$���3��������)�������$� ��4�$�$��M�������������������$�������#5;5�

+��$��3(5(�.� ������)�� ���

���)�� ��� &��� ���

����3�$��D"������� ����������� &"��$�� �����

����3� ���"������� ���������)���"��$�� �����

$������� ���4�������"�3�$������4������������$�

�� ������ ���$��)����������)��������$�

����$��� ���"��������������)���"��$�� ���������'��$�����$�������������K"��������L�

���"��� ������$����"��������4�����$�����'��"���K4�� ����������4L�

������� ��)�$�����������$�������K����R&%8�&L�!X28����6!#& %26L�

��D� ������ �$�� �����'���������������&��� �$�������������� �����������$�

��?��� ��)�$���������7��������4����'����$���������$�

����������� %$��))�����44������$���7�����4������������$��)��'�� �� ���� �����������$�����$���

�������"���� �������$��������$ ��'��$���7�����������'��44����������$�7����$��

����$���������3���������'$��4� ������������� ����+,�������������'�� ����3�������$��

�����������)���"��$���$���� &"��$�����������8��$����3�D�+,�������������������7� ��������)$ ���$���)�$����$��� ����$�5�

������������$�'��"����$���������� ��4���,��:�����4��8��$����������������)����'�$"� ����

�$�����&�$"���&��9�"���#5<�K�������������S �����>������4�����������"�3�$��$������ ��4���,�� ������ ���$��$�����.�L��

�����+����������?�/I2?��I���������/������>J���,>���D+����/ ��R,�

����� �$�������&�$���'$��$������� � ��4�$�$��5� �����+,����������� ��������������$8�

�$������4����������4�� ���'����$����� �����+,�4���$������8�K����������?�/I2?��I��

�������/�������>J���L8���)�$��'������������$� �$���5��������D+,���������7��$���

�����+,��$����)�$���'�������������$����������4�� ���'����$�����'�$��'8��$������

��������/ ��R5��

���#���

����.�$3���'��"��� ��4�$�$���������������'��3������$"�)������ ����������4�����4���"�$�5����������������'������ �����D��"��4�� ��������8��$�������������$�������,��

Page 145: Game Programming With Python, Lua, And Ruby (2003)

� �#;�

���$&� �$3��8�������������4��$���5�%� �$3����$��&�$���8��)� ����8����������'$�4��4������M�������������������$�������#5!5�

�����SL��3��>������"�3�$��$�����.����������4��������4��� ��������"��'��"�����)� �8�������'$��$�9�"���#5��5��

&����3('=(�,��)$�����#������ �

&����3(;(�+������ �� ����%�

+��$��3(6(����#������)�� ���

���)�� ��� &��� ���

����� .��������$��� �����$��� ������

$������� .��������������4������

���"��� .��������$����"�������

������ .�����������$�������

�3���� .��������� �� ����������4����������"�3�$� �����$�����

����"���� .���������4���"�$������K��������������3���� ��L�'��������"�3�$� �����$�����

Page 146: Game Programming With Python, Lua, And Ruby (2003)

� �#!�

+��$��3(6(����#������)�� ���

���)�� ��� &��� ���

������"����.����������� ��$"��������'��������"�3�$� �����$�����

��?��� .�����������7��������������"�3�$�4������$�'��������"�3�$��4���$��

�������� *��������'�$��'�'��"���������� �$3���

����%�� ���

%�.�� &����$�������� ���������7������ �$����������� �� &������$ �� &��M��$��7��4���������'$��$�9�"���#5����$�������4�������$ ������$�����.�,����� �� �������

�����SL���D$�����>��5�.�� &����$�� �$���3���$��$�3�����$���$��))�3��������)���'�������������7���� �� &��8��$����3������$�)���)����������3�������8�������'$��$�������#5<5��

&����3(''(������)$������%�� ���

+��$��3(:(�����%�� ���!� �����

!� ����� &��� ���

������+,�� ���� ������� �� &����$��$�����������3�����)�����3�������������3�����

����+,�� /�3�������$�������������)���"��$�G�� &"��$�� ������

��3�D�+,�� *7� ������)$ ���$���)�$�������������+,�

��""��+,�� /�3�����������������)�������$�K�5�5��))��� ������$L�

*� ���

����*$����'��"����������"$����������������$��������$"�����$���)���7��'����$���)��������

'�$��'5�%����4��������S2����>�������$ ������$�����.�5�

Page 147: Game Programming With Python, Lua, And Ruby (2003)

� �#<�

&�����

%�9�����'��"�������������"��48�����$"�8��$����"�$�D��������'��"���5���������� ��$"����� ���$��������$��4����$"����4��������$���3��'�)�����:�5�%����4���

�����S5����>�������$ ������$�����.�5�

����$�

%�(�����'��"����������7���������4�������7��������"��5�����(�����'��"�������'��������

�������$��4��������������4����8��$��������$�������$����"�3�$���������S%�$��>����$�����.�5��

�� ��1�

%�(�����7�'��"��� ��������������)���7������������� �$�������� ��������������5�(�����7�����3��������4��4��������

•� ��� (�����$������)���'���$���������5������$"����"������������'������$�?����������� ���������D���������$������)��$�����5�

•� ��$�� ����(���)�$���������4���)���������$"� ������5������ �$����#!W%28�

20�26268�R�%�!�%28���� �7#25�•� �� �(������������)� ���� ������$��� ����'8�'�� �� �$���������������� �����

����D���'�������������$"��5�

����(�����7�'��"��������������$������)������������� ������'������8�������'$��$�������#5 5�

+��$��3(;(��� ��1�!� �����

!� ����� &��� ���

������+,�� ����������"�3�$���'8����������'�����'��$�����"�3�$���'��$����������

"��+,�� ������������$"��������������������"�3�$���'�

������+,�� �$����������"�3�$�����$"��������"�3�$���'�

���+,�� 1�&���������'�3������������������

������S�����+,��.�������������� ���$�

������S���+,�� ���� ���������'��������$"��������������$���$��$"�����������

%�(�����7��7��4�������$�����.����������S%���$�?>��5�

!����

������������������4����)�1�$�'��"�����4�4�48���4��3��8��$��4�����'$5�����������������4� ������$�'��"����������4���� �������������$��������$�� �� &���$������5�%�

���4�����$����"�3�$���������SR���>��5�1�$�8��)� ����8���3���������'$��������8������������$�������#5�����

Page 148: Game Programming With Python, Lua, And Ruby (2003)

� �# �

+��$��3('=(�!����!� �����

!� ������ &��� ���

���S�������+,�� %��������$������

���S�����$�����+,�� .�������������������$���$������

���S����D$�����+,�� .��������� �� &�����$���$������

���S�������+,�� .���������$�'������� �� �����$�

���S���������+,�� %��������4���������$�����������$�

���+,�� %�������4� �)������4���)���$������

������+,�� ��������������$�������)�������������?�����������?�

�������� �"+,�� 1���)��������$������

����?+,�� /���$�������$��7�$������������"�3�$���$������

����������������3��������3�����'$��4���$���3���������������8�������'$��$�������#5��5�

!����� ���

1�$����$�� �$��������������4������$�8���������$��� ��$����$ ������1�$�'��"����������$��74�$��������$ ����������)�����1�$����$�)$ ���$�����5�

!������

1����"�����3�������������������(�����'��"��8��$������������ ������������4�����$��$�$�������������F� ����������4�������7�5�

������ ���

/���������$�'��"������������4��� ��� ������$�5�*� ��"��4��)�����������$������������� ������������������3�������8��$���� ��/��������$�������4����$������$"���3��������$��"�3�$�����5�/��������$����3���������'$�4��4��������

•� �������(�9$ ���$������� ������'��$���������$���� �� &��5�•� #����$�(�>�����������4������'��$�����$���� �� &��5�•� #�$��(���)�$�������3��������������������$�����3��������'��$�����$���� �� &��5�

+��$��3(''(�!������� �!� ���� ) ����

) ���� &��� ���

������������� %�&�������������$���3���������$��4���$�

��������� ��������������$��D�)$ ���$�'��$�������$������������� ����

������������ %�������'�� ��$�7�����������$��4���$��

Page 149: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��3(''(�!������� �!� ���� ) ����

) ���� &��� ���

��$���� ��)�$���������7���)�������$�������

������L������ �'�� ���� �����K'��������������L�

������� ��)�$�����$������������K������8�����3�8��������$���L�

��3������ >�������������������$�����3��������4��4�����

� 3������ >�������������������$�����3��������4��4�����

���� �� .��������� �� &�������4����������������4��)�������$�

����������� ��)�$��������$��7�4������$��)����� ���� ����������$�����$���

3����$���� >�����������������������3����

/��������$���������3���������'$��4� �������������

•� 0$���DE(�/�3������)��"��$���$���� &"��$�� �����5�•� �#�%�DE(�*7� ���� ����$��)$ ���$5�•� ��$�� DE(����� �����������������$5�

%�/��������$�������'$��$�9�"���#5����$�������4�������$ ������$�����.�����4�������

�����S�����$�����>��5�

&����3('/(���������� ���

,��$��

%�� ����'��"��������"��4�� ������������F� �����������'��������������� ��3�����)������� ���5�� �������������'$�$�A�����������

•� � DE(��������� ���$��� ����3���5�•� �� DE(����������� ����������4� �)����3���5�

Page 150: Game Programming With Python, Lua, And Ruby (2003)

� ����

�����S#����>�������$ ������$�����.����������4����$��9�"���#5������4�����������4���)��������4��� ���5�

&����3('2(���,��$�����)$����� �

,���$$����

%�� ��������'��"����������������� ��)������3���� ���� ��������$��'��&��'��������$�?8�

��?�8��$�����3��5�� ���������$��&�$��������������������������3������������������

•� �� DE(���)�$���)�� ���$�����'��$����$���������������������3��'5�•� � DE(�/���$������ ���$��� �������� �$)�"�����$������$"�5�

%����4���� ������������$ �����$�����.��K�����S#�����$��L��$�������������������$�9�"���#5�#5�

&����3('3(������$�����)$����� �

+�1 �

��7������'�����������$"��$��)�������$"��)�����4�����$����)���7���$��������$������)��3���������������8������������$�������#5��5�

Page 151: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��3('/(�+�1 �!� �����

!� ����� &��� ���

������+,�� ���������4� �)���� ���� ���K�L�

"��+,�� /���$���4� �)� � ���� ���K�L�

����?+,�� /���$����������3�����)��$��$��7�

������+,�� �$����������$"�������4� �)�����$��7�

���+,�� /���$�������)�������7���� ����������"�3�$��$��7����3�������

�����������������)�'��3������������������)�����7���

•� � � �(��������7�����������������$�$����������'��������)��"����������������$���5�•� ���(����3�������������)�����$"���$�����$��)�������������4���$�������7��'��"��5�

��7��'��"�����44�������&���&�4������$�8� ������1��&�M�����$���$"��)���"��$���)���7��8� ����������M��$���4� �)� ��� ����$�8� �������$��7��8�������4��������"�$�D����7�5�*� ���)������������C1��&�8�����8��$��(� ����$�C����� ��������4� �)�����������5�

+�)$�#�$�

������4��3���'��"������������ ������$�"����������'�$��'���$�"��M�������������������������$�������#5��5�

C�#����$���� �!� �����

%���'��"�����$��&�$�����������3�����$�����$�3�������4���$��)�����)�$�$"����$"���������3���$� ����$5�������������������������$��78��$��������������$�������#5�#5�

������������������������$��������)��������������&� ����������������4��3�����)�������

�&�$����'��"���8��$ ���$"�������4��3�����F� �� ���������������D+,�������5���������'�����44����������'��"����������&�������������� ���8��$��������������$�������#5��5���&��$��� ���)�����������)�)� ��'�����������������5�����'�$��'����'��"������������$�)� ����������$������������4��3����������3��'��5�

+��$��3('2(�+�)$�#�$�!� �����

!� ����� &��� ���

������+,�� .�$�����������������$����'��$����"����$��'�����

������+,�� :�����$�=�'�$��'�������)�$��7RSL%!2�SR&L�!2�

���������������+,�� :�����$�=�'�$��'�������)�$��7RSL%�R&�S7!67#�

�������+,�� �$�=���)�$���7RSLRR&6�

������� �+,�� ���4���������'�$��'�

Page 152: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��3('2(�+�)$�#�$�!� �����

!� ����� &��� ���

����+,�� /���$������'�$��'����$��)����

���������+,�� ���������)� ��������

"��������+,�� .��$"�������'�$��',��"��������

"����+,�� %����"�3�$�'�$��'��������'�$��'�"��4�

����$�����+,�� ��)�$����������4�)���'��$�����'�$��'����� �$�)����

����� �+,�� ��$������'�$��'��$����$�� �$�

�������D+,�� ��)�$����$�� �$������4�)���'��$�����'�$��'����� �$�)����

��������+,�� ��)�$����$�� �$�$����)���'��$�����'�$��'����� �$�)����

������������+,�� ��)�$������""�����$�)���'���������� �$�"����'��$�����'�$��'����� �$�)����

����������+,�� ��)�$�������� �$�'�$��'�����������������������$�� �$�

��?��8�+,�� ��)�$���������7������D��)�������'�$��'�

�����8�+,�� ��)�$���������$������D��)�������'�$��'�

�3��������������+,����)�$�����)��"���))���$��)�����8��$������������'�$��'���$�"���$������������������������������������'�$��'�

�������� ���+,�� ��)�$�������4������$� �$��������

��������+,�� /�"���������)$ ���$�'������ ����� &�

����8�$��+,�� ��)�$�������D��)��"���

��8� ���+,�� ��)�$�����D�� �$��������

�����+,�� /���$������ ���$���������)�����'�$��'8����$"�$�����8�� �$� 8�'������'$8����� �$�

�����+,�� ��)�$�������'�$��'�������

���������+,�� ��$��'�$��'��$��������4������'�$��'�)�������"�3�$��������'�� ������������ ����������$�

���������+,�� /���3�������'�$��'�)��������� ���$�

+��$��3('3(�, �������+%� ������ � ) ����

, ���������� �

) ���

���)�� ���

���"���� ��)�$������"����$�$������)� ���� ��������4�7����

������� ��)�$���'������$�4�7�������$������)� ���� �����

$��D"���������$"�� ��)�$����� &"��$�� �����

���"��������� "�� ��)�$���)���"��$�� �����

Page 153: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

+��$��3('3(�, �������+%� ������ � ) ����

, ���������� �

) ���

���)�� ���

����� �� ��)�$����������������

��"���"��������� ��)�$��� ���������������'�������"���"�����"��$�'��$�'��"�������&��������)� ��

��"���"��$��D"������� ��)�$��� ���������������'�������"���"�����"��$�'��$�'��"��������$�����3��&��������)� ��

��"���"������D������ ��)�$�����"���"�����"��$�'������$�4�7����

$��������������$��� +������)�'��"��������)���������$�4�7����

��?��� .�$���$��'��"��� �4���$���7�8�)������������)���"��$���$��)�$��

C���� ��� �����%25�8��!W��8����L2�2��)�����7�� �4���$���

����� .�$���)�$��)�$��)�����8�)�$����D�8��$��)�$��3�������&������8�$�����$�8��$���3������&��

��������� %��� ��������'��"���'�����������$�)$ ���$�

3����$���� 1�4��'��"��������3��������

�������� ��)�$����� ����$��)���'��"���'����$���'�$��'�����)���7��'����$���'��"���

���?�� ��)�$���4����$"��$�����7��7�������������

������ ��)�$�������4����$"��$��������7�������������

�������� ��)�$��������4��$����'��$���3����3���'��"���

�0�*�

.%:��0��

.������ �$�3����)����4���)�������4���)���5�9����$���$ �8�����+�$��'���4�����$"������������������� ����������$"��)���'�$��'���$�����.�$�������$��8�'���������:��=�=�+�$��'��������&��4��������$��$�7�"����7��)���5������ ���� ����:�� ����� ��� ������ ��$"�����"�����K������� ����L�)�����$���4�����$"���������������$�7�5�

+��$��3('4(�+%� ������ �!� �����

!� ����� &��� ���

�"��+,�� /���$��������$"������ �$���$������ ���$�� �$)�"�����$�3����)�����"�3�$��4���$�

��� �"+,�� ���������3�����)����$�����������4���$��

��� �"���+,�� ����������� �"+,�

Page 154: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��3('4(�+%� ������ �!� �����

!� ����� &��� ���

�������+,�� �������������'��"���

����+,�� ���������'��"��������&��������)� ���

����S���+,�� %�� ����+,�

����S�������+,�� /���$������$�����)�����'�$��'������ �$���$������'��"����$������)� ��

����S ����+,�� �3���&��������)� ���������'��"���

����S"��+,�� /���$���������$������)�����'�$��'����������)� ��

����S���� ��+,�� /���$������'�$��'���������������)� ��

"��3��+,�� /���$������3�����)����&�$����3��������

"��$S���+,�� ����������3�$���)��������$������ ���$�)�������'��"���

"��$S�������+,�� /��������"�����$���'��"���

"��$S���S"��$��+,�� /���$������8������8����"��$�����4�$��$"�4�$�����"����3�������������'�$��'�

D���+,�� /���$�������4���$���3��������)�����'��"���������4���

�� �+,�� 1�3�����'��"������������4��)�����'�$��'���� &�

�D�����+,�� ���������� �+,�

�����+,�� 1�3�����'��"������������������)�����'�$��'����� &�

��������+,�� % ��3�������������������3�$��

J���+,�� 6������������������3�$��

���3��+,�� �������3���������"�3�$��&�$����3��������

������+,�� ��� ����������A�������&��

������S�������D�+,����� ����������4�$��$"���������&��

�DS �����?�+,�� /���$������$�7��'��"����������������3��&��������)� ��

�DS �������3+,�� /���$������4��3����'��"����������������3��&��������)� ��

����S3����$��+,�� .����������� ����3�$�������'�����)�������"�3�$��&�$����3����������� ��$"��

����S3���$�����+,�� .����������� ����3�$�������'�����)�������"�3�$�'��"�������� ����3�������

����S������+,�� .����������� ����3�$�������'�����)�����"�3�$�'��"�������������������

����������������4� �)� ���������)�������'��"���������'��&�'����$�'�$��'�5�9���������)�

��)���$ �8��������"�$�'��������� ��K������)���+�$��'��$)�������$L5���������������������������$�������#5�;5�

Page 155: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

+��$��3('5(���� �������-�0���� ���!� �����

!� ����� &��� ���

��� �S�����+,�� /���$������$������)� ������$�����'��"���� �������4�

��� �S��������+,�� /���$����������)�'��"����$���$ ���

��� �S�����+,�� /���$�������&�$���� �����$����)���'��"���

��� �S�������� ���+,�� /���$�������)���'��"��,�� ������4����)���

��� ��S���������"+,�� /���$���������$������)�����'��"����������"�3�$�7�?��� �����$�����

��� �S�����+,�� /���$��������4����)�����'��"���K<8��;8��#8������������4���4�7��L�

��� �S�?����+,�� /���$�������)����&�'�$��'� �����4�$����������"�3�$�'��"���

��� �S ��?���+,�� /���$�������������)����� �$3�����$��)�����"�3�$������$ ��������� �����4�$��$"�$������)�4�7����K�$�)�����$"�4��$��3���L�

��� �S"�������+,�� /���$��������$"����'�$"�����'��"��� �����$����$��$�4�7����

��� �S���"��+,�� /���$��4�7������"���

��� �S�����+,�� /���$��4�7���'�����

��� �S��+,�� /���$��'�$��'����$�����

��� �S��������+,�� /���$�������)���'��"��������44����������'�$��'��������

��� �S����"��+,�� /���$������$�����)�����"����������$�"���

��� �S����+,�� /���$��'��"���$����

��� �S������+,�� /���$��'��"���4���$��

��� �S��������+,�� /���$��4���$�����)�'��"����

��� �S��?���+,�� ����������� �S ��?���+,��7 �4������$������"�����$��"����$�������)���)�����$"�4��$��3����

��� �S�������?+,�� /���$������7� �����$�����)����������4��$�����$�4�7����K��������$�'��"���'�$��'L�

��� �S��������+,�� /���$�������� �����$�����)����������4��$�����$�4�7����K��������$�'��"���'�$��'L�

��� �S��J���"��+,�� /���$����$�������"�����A��������'��"������������4������

��� �S��J�����+,�� /���$����$����'�������A��������'��"������������4������

��� �S����?+,�� /���$������4�7��� �����$������)���'��"��,��44�����)�� ��$���

��� �S�����+,�� /���$������4�7��� �����$������)���'��"��,��44�����)�� ��$���

Page 156: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

+��$��3('5(���� �������-�0���� ���!� �����

!� ����� &��� ���

��� �S������+,�� /���$������� ���$�$����)������� ���$��'�$��'�

��� �S�����������+,�� /���$������$������)� ������$�������)���� �������4�)���'��"��,��� ���$�

��� �S�����������+,�� /���$������������4����)�����'�$��'����"���

��� �S���������"��+,�� /���$���������"����)���'��"���� ���$��$�4�7����

��� ��S�����������+,�� /���$��'������)�'��"���� ���$��$�4�7����

��� �S�����������"��+,��/���$��� ���$����"�������$�������������

��� �S�������������+,�� /���$��� ���$�'���������$�������������

��� �S������3�����+,�� /���$��������)����3����� ���������)���'��"��,��� ���$�K�5�5�"���� ���8���� ����8������ ����8��$������$L�

��� �S�����3��+,�� /���$������'��"����$���$ ���)�������4���3���'�$��'� �$���$�$"�����'��"���

��� �S3�����+,�� /���$������3����� ���������)�������'��"���K"���� ���8���� ����8������ ����8��� 5L�

��� �S?+,�� /���$��7��7���4�7��� �����$����� �����4�$��$"��������'��"��,��44�����)�� ��$��8�������3�����44�����)�� ��$����)�����4���$��

��� �S�+,�� /���$�����7���4�7��� �����$����� �����4�$��$"��������'��"��,��44�����)�� ��$��8�������3�����44�����)�� ��$����)�4���$��

+%� �������� ���

�&�$����'��"������3���4� �)� �"����������$�"���$����������������������������"�$�D��'��"�����$�����������5���������������������"�$�D����$������� ���������������4���:��

����"$�����3���4��$��$���)� �5��������������������D+,8�"���+,8��$�������+,5�

:��$"������������������)�������))�������5�9�������� ��������'��"��5��$���������� ��4�������

���������'��"���)����� ��������������

!�������D������)��������/� ����+,�

%)���������3����'��"��8���� �$����4����$����������44������D+,8�"���+,8���������+,����� �����$�����

������>���D+,�������>"���+,�������>�����+,�

Page 157: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

:��$"������������������������3������4����$���$���"�$�D�$"���:���$���)� �8�����,��� �3����� ���$���$�����$�7������ ���$�5�

)��%DE�

�������D+,��������������������"�$�D��'��"�����$���� &����)����4�� �$"�������$�����

4���$��'��"��5����D+,��������'��"��������)��������'�$��'��������$��������������������'��"��������4� &��5��)������$,���4� �)����'�����'��"��������������4� &��8�������������4���4�� �����4������������$������3���������4� �5�H�� �$8���'�3��8��4� �)��

4�� ���$��'�����4���$����&����������������5��������D+,��������������)�'�������$��������8����'$��$�������#5�!5�

+��$��3('6(�� �����!� ���� ) ����

) ��� C���

2?������*74�$�����'��"���������4��3���������4� ��

5����� ��)�$�����'���'��"���������)������4�� ������)�����

!���?�� :����'���� ���������)�$���4� ���$�4�7�������$���$���F� ��

!������ :����'���� ���������)�$���4� ���$�4�7�������$���$���F� ��

���?�� ��)�$����4� ���$�4�7�������'��$�'��"����

������ ��)�$����4� ���$�4�7�������'��$�'��"����

#����� ��)�$���'��������'�$�����4�� ������'��"���K ����$�)������8� ��R8�%25�8�

�$���!W��L�

�0�*�

����

������)�������������4�7���������)�$����������$���$����D+,8������� �$���)�$����))���$����������$��8�� ������$� ���$� �$���������K L8��$� ���$�������������K�L8��$ ����K�L8��$��4��$����4��$���K4L5�H���4� �)��'�� ����������$���������������$"���������������������4���$����������$����

������������ ����������"����$������������������>���D+���?/=�������/9�,�

��DE�

����"���+,��������������������"�$�D��'��"����3�����������'����$�����4���$��'��"��5�

"���+,� ���������"����4�����$�K"��)�"��L�'����$���)����8��$�����$����� ������4� ������� �� �����$�����"��������������'��"��5������"����������������� ����$�K�8�L����������4���)���)�

����'�$��'5�W���+,�������)�'��������8�����$����$�������#5�<5�

Page 158: Game Programming With Python, Lua, And Ruby (2003)

� �� �

+��$��3(':(��������!� ���� ) ����

) ���� C���*1��)$��

L������� �4� �)�������� ���$�$�����

L����������� �����&����'��"����4�$�����4���K��)��������� ���$L�

����� �4� �)����������'�$�����

��������� �����&����'��"����4�$�����4�����'��K��)��������$����'L�

)$���DE�

���������+,������������������4�� ��'��"�����$��4� �)� ����4� �)� �4������$��$�����

4���$��'��"��5������+,�����'�����������������7� ��4������$��$����D���)��� ��'��"��8��$�

�������)������������������3�� �����$����5����������+,�������� �$���������4���$����������$�������#5� 5�

+��$��3(';(��� �����!� ���� ) ����

) ���� ����

&������� ��)�$��� �����$��������K��� ��4�����8�#8�28�78�28�78�#28�#78����

L2�2�L5���)����3�������7�

�������������)�$���!#!62������#!62�

���"���� ��)�$���'��"������"����$�4�7����

!��� ��� ���'��"����$���4������$�������3���������"�3�$�'��"���K��SL�

������"���� ��)�$���������3�����"����$���)���$ �������S�

���������� ��)�$���������3��'������$���)���$ �������S�

������ ��)�$���������3��4������$��$8���)���$ �������S�

���?�� ��)�$���������3��4������$��$���)���$ �������S�

7������ ��)�$���'��"���'������$�4�7����

��� ��)�$����������4������$��)�'��"����$����7��8���)������

0�� ��)�$����������4������$��)�'��"����$�7��7��8���)������

+%� ���*#�� ��

*3�$����$��&�$�������������3�$�����&��&��������4��������$���������3���$��5��&�$������$������3�$������ �����$"���$��$"��)����4� �)� ���F� ��5�H�� �$���$���3�$��������'��"��8��������'��"��,����4��3���'�$��'8������'��"��,�� ����8��������$��$������44�� ����$5��

0$ ���$��3�$���������$���$�������'��"��8�����4� �)���� ����� &8�'�� �������)$ ���$�

�������� ������'��$������3�$����44�$�5�(��,���������������)$ ���$� ������R�S23�����

Page 159: Game Programming With Python, Lua, And Ruby (2003)

� �;��

�� �R�S23���+,E���������**�������������"������

(��,���������'�$��R�S23���������� �����������'��"�������$� ������R�S �������

R�S ������/� �����+,�

����R�S ������'��"��� �$� ����R�S23����������4����$ ���$"��� ����$���4���$��$��$����$���

R�S �����AI�������IB�/�R�S23����

H�� �$�����"$��3�$������&����������$�������4����������'���8�������'$��$�������#5����$��������#5��5�

+��$��3(/=(�+%� ���!�����*#�� ��

*#�� �� *00�� �

1 ������'�4�� 1��������$�K��)�L����4��������3���'��"���

1 ������'-4�� 1��������$�K������L����4��������3���'��"���

1 ������'.4�� 1��������$�K��"��L����4��������3���'��"���

1 ��UR�����4�� 1���������3���'������������$��������'$�K���""��L�

1 �������������'�4�� 1��������$�������������

16��$���U� ������'��4�� %������� �� &�

12����4�� 1����4��$�����$�����'��"���

1%��3�4�� 1����4��$�������3���'��"���

+��$��3(/'(�+%� ���F��������*#�� ��

*#�� �� *00�� �

1&���'?4�� ��������%����$���$������&���

1L�������'04�� ��������.�����$���$������&���

12�����4�� ������������*� �&���

1D��4�� �������$��&���K ����������� ���� ����4�������3����� ����� &L�

1������4�� ������������*$����&���

1#�� ��'04�� �����������)���$���$������&���

������F� ����������"�$��������� ����� &��74�������������������)����3�$��5�����������������������������$�������#5��5�

Page 160: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��3(//(�+%� ���*#�� �� ��� ���

�>�� �� � ��� ��

L����� .���� ���� �����)�4�������&���

���"���� ��'����"����)���'��"����$�4�7����

T��������E��� �����)���4�������&���

T������� E�����������)���4�������&���

���� �������������$�$��������� ������'�����$��3�$��K�������8��8�����L�

������ �����3�$����4��

7��"���� ����'��"����$���$ ��

7������ ��'�'������)���'��"����$�4�7����

0�� ���� ���$��4������$��$�4�7�����)�����������$�����7��7���

0S������ ���� ���$��7��7���4������$��)�����������$�4�7����������3���������44�����)�� ��$����)������ ���$�

��� ���� ���$��4������$��$�4�7�����)�����������$��������7���

�S������ ���� ���$�����7���4������$��)�����������$�4�7����������3���������44�����)�� ��$����)������ ���$�

�0�*�

����

9����&�$����������3�$��8����'�����)��$�)�$��1 ������U��4���4�� ���'����

1 ����������'�4����1�48������)�'�� ������ ���� ����$�� �� ����5������� ��$"���'��&�)���������������$����"������������$�����'���5�

9����&�$����&���������3�$��8������&���� �$������4����$�������4�� �$"������'����$������

���$��$��"����������$���������K15�48�1L�����48��$��12��48�)����7��4��L5�

��������������������������������$������ ����� &������$��$"��������$�)$ ���$���������������$�� ���$������ �$�����44����������'��"��5��������������'$��$�������#5��5�

+��$��3(/2(�+%� ���*#�� ���$$���%��

!� ����� *#�� �

� ���+,�� %����� ����� &� �������)����"�3�$�������$�������� �$���

� ���S������+,��.�$ �����$������� ����� &�

� ���S����+,�� +��$�������������������8���"��������� ����� &�

$�����"�+,�� /���$���������� ���������������'��"���

$���+,�� ��)�$������� ����� &����������������� �����������"�3�$��3�$��

Page 161: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��3(/2(�+%� ���*#�� ���$$���%��

!� ����� *#�� �

$���S���+,�� ��)�$������� ����� &����������������� �����������"�3�$��3�$����������44�� ����$���3���

$���S�����+,�� ��)�$������� ����� &����������������� �����������"�3�$��3�$���������"�3�$�'��"��� �����

1L�� �"���4�� +��"����������D��������3��������$�'��� ����$�

��$���+,�� /���3�����$��$"��)�������"�3�$��3�$��

��$���S���+,�� /���3�����$��$"����������44�� ����$���3���

��$���S�����+,��/���3�����$��$"��)�������"�3�$��3�$���������"�3�$�'��"��� �����

9�$����8��&�$��������4���� ���������$�����3�$�������� ���$� �������'��$�����'�$��'���$�"����$������:�5����������'���$��44�� ����$�����$��� �4�������"���)����������������$��� ��� ����$"��5�������4���� ����'�������"�$���������������)�������=�������8�����&� �$���$�����3�$����$�����4���4���)����5�������$��7������$����4���� ����������$�����3�$��������)����'���

���"��>��������+�����������������,�

�$�������)�������'��"�������$��� �4����������������"�����$������������$�������4��3��5�������$�����������������'������)$ ���$5��

+%� ���-�����

�&�$���������������"�� ����������)�$�����$�������4����"��4�� ���F� ��5���4�� ���F� ���

�&�$���� �$����4�����$ ��������������4�K �����!��"�L��$���9�K�����!��"�L����"��5�

����)$ ���$�����"�S�������$�����"�S�������������������$���������������"���'����$�

�������"�� ����5�����)���������$��������� �$���$�$"�����$������)������3�����������"��8��$�������� �$������$�������������� �$���$�����������7����$"���4��������'���� ������5�

���"��8��$ �� ������8�4��3��������$�)���)�������������"�>�����+,8����"�>����+,8�

�$�����"�>���"��+,5�

. ��)-����

�����!��"���������������4���������4����"����$�'��"���5��$��&�$���8���'�3��8��������4�$�����5��4�)���������"�5������4������� �������'�� ��������"���K'���8��'�� �������$�������$�4���$ �����&�������4�� ���L��$����3�������4���$����������$�������#5�#5�

+��$��3(/3(����� � � ��� ) ����

!� ����� ���)����

Page 162: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��3(/3(����� � � ��� ) ����

!� ����� ���)����

�"��+,�� /���$��3�����)�����"�3�$��4���$�

��� �"+,�� .��$"������"���4���$��

��� �"���+,�� .��$"������"���4���$��

���"��+,�� /���$�����"����$�4�7����

�����+,�� /���$��'������$�4�7����

����+,�� /���$�����������4�����$"�

�������4���$����3�����������3���������������8���������$�������#5��5�

+��$��3(/4(����� � � ��� ) ���!� �����

!� ����� C����&���

$��D"������� �� &"��$�� �����

������ ����$"������������$�������)���)����

����� 9���������������

���"������� 9���"��$�� ���������������

������� �4� �)��������)������$���������������

���D������ ����$"��������)�$������� �$��$����)��������&�

���D ����� �4� �)�������&�)����

���"���� �3������"������$���$��

������� �3������"������$���$��

��� �-����

�����!��"���������)������4����$"�)��� ��������"��M�����44������9��$����1�)������$���������������������������$�������#5�;5��

+��$��3(/5(���� �-����!����������

� ��� ��� "�$���

������ ����$"������������$�������)���)����

����� 9���������������

���"���� ����$���$��

������� ����$���$��

Page 163: Game Programming With Python, Lua, And Ruby (2003)

� �;#�

+����� )������������

��04�$(�����$�04�$(�'��"���'�����$���������"��"��4��)���3���4���8��$ ���$"���3���%� ���8�1�&��2�������$8�@���2"$�$8��$������� �'�����5���04�$(��$ �����04�$(���$��$"��)��������$� ���������$"��������4��)����+��44����$���$���)� ���$�������K�+�L��$�������������$�����4�$���� ���� �$���5�����44�����04�$(�3�5�8�04�$(�3�5�8�(:8�(:��3�5!8�(*��8�+(�#8��$����"��K�&�04�$(�'��"��L5���04�$(����������$����4�������'�����&�$���8�'7�����$8�97��8������8��$��6���$�������"��$������)��������7���$���:������������)��������$5����������3����� ��3��)����'�$"��$������"������4��������� �)��"��4��F� ��4�"��������4�GG4��4�$"�5��� �)��"�5$��G5�

04�$(�����������4�����$��)����$"���))� ����������$5�2��8����������������$��'��������4���"������3���4����������"�� &�J������$,��3�����$��)�04�$(����$����))���$�����$��$��������3�����$8��$��04�$(����&��4��������������$���������'������$"�"����,���4����$"�'���5�

���������$�04�$(���� �$����������))� ������4� &�4������ ��������������$���$���"��4�� ��4��"�����$"� �$������)��������))� �����F� ��F����$������'$5���$ ��04�$(����)��������))� ������������8�������� ���$� �3����F�����)�'��7��4���5��)������� �3��8������$��4��"����������8������04�$(�������� ����$"8����$����� ����$����������4� &�4�04�$(��������"�����$"����E�3�$�2�'&�$���$����3��%����5�

:��$"�04�$(��$������$����A�����$���3�$��"���3�����������$"�"��8���'�3��8��� ���������$��$����"������&����3����� ��4��7����4��� ��������5�9����$���$ �8����������4����$5"����'�$��'��$��������7��4��������4�$�4���'�$��'�)������4����$"�"��4�� �5������ ������&����D�$���)���$����)� �����$���$�$N��"����3�����$"�"�8��������$�����&����'���$��������7��4���5�H����������$�����3�����'����������)����$"��$���������$"��������)��������)����� ��4��7�"��4�� �� ������$������$��5�2�'�3��8���3�$"�$�� �$������3�������������� ����$��$��������� ����$� �$� ����4�������5��

�0�*�

04�$(�

04�$(���������$�����"��4�� �������������"�$����� �������������� �$���4�� �5��� &����$����'��� �������(8��$���$�����$��$��������'���5�����3�$��������$����������� �$���"���$����$��4�$����$������$���� �$������������))���$���� ��$��5�04�$(������������4���������3���4��$�������)�����3���4�$"�4������������$������44�� ����$�8��$�����������������$������$�������$ ������������� ��5�

04�$(����)����)����44�� ����$��$��"��������"$���5��������$��'$����� �$���"�8���������� �$��$"��44��������3�$������)�����'����K�5�58�����"��4�� � ������&���L������'�����������D�������� �$���"�8�$���������)�'������3���4���5������� ���$����'��&�$"���'���������)��$"������� �$����$����������4�$���� ���� �$��5��������&���04�$(�3����4�4�������$"�"������3���4���8��$����$�� ����� ����"�������3��������8�)����% ��3����$,��6�&�8�������DD���,��������8�������'���,����3��+�$������"���5�

-�� �$$���� )�����

Page 164: Game Programming With Python, Lua, And Ruby (2003)

� �;��

��04�$(�$���������$�)���)���4�$��$ �����$����������� ���������)�����)$ ���$�����5�( &���8�������)�������'����������������$���������)���,3�����$�4����$"�'�������� �����$������ ��4���5���04�$(�$����������$��5�������"���8�� �G�&8�04�$(8�(:�K'�� �������� ����4����$���������$�����������$��� ��$����$��'��������������$�"��4�� �� ���L8�����04�$(�:�����������&���K���(:��)��������L8��$������� ������$5�

����04�$(�.�$��7�������������A������)�'���4�$��$ ���8���4�$��$"��$�����4���)���5���������4�$��$ �������������)������������������������$���������&,��.�8�$����X�H�20�X�H0�*�(X�*�*��*�.�*�8��7 �4��)�������� ������$8�'�� �����������'$�)������KX�H�20�X�:1*/�.��H�20�L5��������$�������$�����$���������)�����04�$(������� ������$�����.��$����X�H�20�X�:0�*�(5�������� ���$��4��F� ��4�"��)�����04�$(� �$����)�$�������� �)��"�8�'�� �����'��������'����'�$��������&�)��������������4�������$��$�'������4�GG4��4�$"�5��� �)��"�5$��G�� ��$�����$G�$���������$5�����

C����� )�����

����������)������������������04�$(8��� ���)�'�� �����$����������4��������4���������

•� ��(��������� 8�4������3���������5�•� ��C(�������)���(���������M��$ ������������3�$ ��� ����$������$�(5�

•� ��<(�(�)���0S7������>�•� ��C+(�(�:�������������&��8�'�� �������3�$��������4����� �����'�$��'�$"�

)������5�

9������������4�������'���������$"������(��$��(:��

�������W%>W%��������)� �������W%>W%���������)�

�����&�����$"��������8����'��������������$"�������)�������"�������������

���������"���� ������"���>��������������)�

9�������������4��"���� �����������04�$(�+�$��'�'������"��4�� ��$���+�$���

4���)���5������)�����4��"���8������������W%S�>����$������ ��4���,�� ������ ���$��$�����.�8���������������4�� ���$��)����� ����04�$(��7��4��������)����'�8����4�������$���$J�

������ �������������� )�����

�)�������&�����������4��� ���8�����)��������$"��������)����"�3�$"������$��$����"����

� �������������04�$(���������������"����������������$����������� ������� �4����)�3��������8���&������

�J����/��>��?����/������/�8����/��>����?������/�A���B�

Page 165: Game Programming With Python, Lua, And Ruby (2003)

� �;;�

����������3�����������,�������$��������7��4���8�$���)��������)��������4����$�8������� �$��"$���������)���$�'5�

%)��������3��������������)�$����'������D������'�$��'������04�$(�� �$�5������������

�����$"�����������8��)$ ���$5������)$ ���$�'������� �������������4�����'�$��'����� �$������������$ ��'��$�����4��"�������)������$8��$��'��$������� �����8����'�������"�3�$��������"����$��'��������'�$������'�$��'��������

�� �����������8�++����������"��,,E�����"�X�������+����������������"��,�����"�R����?R���+W%S��H2L�!,�����"�%���!�������+,�����"�����������3�+=9���>�)�����*���"�����>������>�,�����"�R����?R���+W%SR62%X!27,�����"�%���!�������+,�

����)����� ����$���$�����������8�����"�X�������5������ ����$������������� ���$��3��'5�

����"�R����?R���+W%S��H2L�!L���$�����$������4�����4��F� ���$������78�'�� �����

���4�$������)�������$"�4���4� ��3�5�"�R����?R���������)�$����������$�7���'�� ����$��8��$�'�� ������� �$����������$������4���4� ��3�������)�$��5����� ����$�������

)����'�����"�%���!�������+,8�'�� ����������$���������������4��F� ���$������7�����������"�$��������5�

0�F� ����$������ ���$�������������$��������)����'���$��������44�������������$����������

�������������� ���8��������4���4� ��3��������$���)�$���'����"�����������3�5��$�������7��4��8�����4���4� ��3����� �� �����������#����"����3��'�$"��$"����������$���������

K�5�PL���������8�,�����"����$��'����5��5���$�����5����������������$"��$���$��$"�4��$���)�����'����4������ ���$� �$�"�8��$����'���$�������������� ���$� �$���3�5�

9�$����8�������"�%���!�������+,����� �$������������$�����$���$��������4��F� ���$������7��$����������5�

-� �$@���� )�����

%)������)�$�$"�������������$���$���'�$��'8���� �$����$� ��������)$ ���$�������$������D�����04�$(5�H��$�����������������'���� ���������� ���$�������������8�������4����))��8��$��'�������������������������$"8����'���������$������)�������4��������

��04�$(�)������5���������'�����$���������8�� ����$���

�� ���������8�+,E�����"�#����R����+W%S#R��,�����"�L����L����+�>����>����>����>�,�����"�L����6����+�>�,�����"�2��$��+W%S62���S�2#�,�����"�6����5���+W%S%2V�&%,�����"�����+W%S�2�#�2L�!X2SL��2L�!S�!���W%S!L2#�,�

Page 166: Game Programming With Python, Lua, And Ruby (2003)

� �;!�

�$���������8�8�������"�#����R����+W%S#R��,�)����������&���04�$(�������������������$"�K������������$"�������4����$��'����)����$��$"� �������$����"���$"�

'��$���$����$"���4���"�$L5���7��������"�L����L����8�'�� ����������� ������)�����'�$��'�� ���$�'��$������� ����5�

��04�$(���&����$�)���$������'��$������ ������� ����5�����)�������������4����$������4������� ���������8�"���$8��$�����8��$��������������������4���K���$�4���$ �� ��$$��L5�*� ��$����� �$���$"��)�����5������5�M�������'�������$����8��������&��������$��$����8�������"��������$����8��������"����������$��$����5�����$��������������$��������)�/��8����$8����8��$��%�4��5�H�� �$� ��������))���$�� �����������7�$"�������4������� �����5���� &�'�������K�8�8�8�L8�'�����'�������K�8�8�8�L8��$�������'�'�������K�8�8�8�L�5�0)� ����8����������$��������������4���������$�4���$ �5�

%)���������$"������ ���$� ������������4�������4����))��5�������4����))���&��4����� &��)���'���$������������4������ ���$�"���8��$�����$���������3����4����$������������3���$��������)���5�������4����))���� ������&��4����� &��)�'�� ����F� ��������$�)��$���$��'�� �������$��� &8�������&$�'����'�������'������ ���$��$�����4��4���4���4� ��3�5�������

���������� ����$������� ������'����������4����))����$������������8��)$ ���$��

"�L����6����8�"�2��$��8��$��"�6����5���5�

"�L����6������4� �)����������4���3��������'��$�������4����))������ ������5�����

"�2��$��� ����$�������������$�����3��������04�$(� �4���������5��$������ ���8�������

�$����$"���4��������$"8�'�� ��'��������'���������8����������4��� ��4�����$���$��

4�����������4����))��5�"�6����5�����4� �)��������)$ ���$�������� ��4������ ���$ ���$"�4�7�����4���3����'����������4���3����4����$���$�������4����))��5�(*6:%(�

���������)���(�������$����*A�����8��$�������"�6����5�������4���������$ ���$"���4���3�����)���������������$�����A����������4����$��3���5�

"�����+W%S�2�#�2L�!X2SL��2L�!S�!���W%S!L2#�L��������$"� ����$�8������,������ ������$�����'����)������$"���04�$(����4������������������ ���� ��3��4���4� ��3���$��������"�����A������3��'�'��$���������������)����$���4�������$5�

��������,B�����

0��������)$ ���$�������� ���������� ���������'���������4���8�������,�� �������

����"�������+,5������)$ ���$�'����� ���������4�����3������$"������"�����$�������� ���$8�������'����������$"�������)�����'��&��$��� ���7��4��5�

�� �����"�������+,E�����"�L����+W%SL%�S �552�S !�ZW%S62���S �552�S !�,�����"�%���!�������+,�����"���������� +�>����>���'9>�,�����"� �"��+W%SV�&6#,�����"�X����?. +'�>����>����,�����"�X����?. +�>����>����,�����"�X����?. +�>���'�>����,�����"�X����?. +'�>���'�>����,�����"�2��+,�

Page 167: Game Programming With Python, Lua, And Ruby (2003)

� �;<�

9��������"�L�������� ���������� ���$������ ����8� ����������))��8��$�����$�������'����

"�%���!�������5�"�%���!��������� ��������3������������� �$�����)������ ���$8�'�� ������8���$�����7���$�����7��5�(�)���$����'$�����$�"���3��$�����8��$����"����$��4�'�������4�����3��$�����M�����9�"���#5��5�

&����3('4(�+�������������$��)����$���$������<�G������I�

����"���������� +,� ����$��4��� ��������$������$��)����� ���$�������7��������4���$"�����������78��8��$��D� �����$�����"�3�$������5��������$��� �$)��$"8�������������������������� ��$"���������'�$"�4��$��)�������� ���$��3��'��������4�� ������5��$������

���8�������$��� ��$"������"���������� +,�7������ �����$�����K���3�$"����������8�L����������"�3������5��)�������D��7��8�'�� ������ �����4��������������7��� &�)�3��� ���$���4���5��)�������$,��4������������7��� &8�'����������'�'����������� ������������

)��$���)���������4� ��)���������������5����� ����8�"���������� +,�������� ����$�������

��3������$"�����7�8���8��$��D��7��5�9����$���$ �8�"���������� +�>9���>�������U:>�,�'�������$������3����)���5��$�����$���$�������� ���$���4������;�$���5�

�0�*�

����

+��$�������"���������� +,8��������$�����3�$"� �����$�����������3��������� �$����

�)������ ���$8��������� ��������3�$"�"���������� +,�������3�����'����3������

���$������5��)������)��"���������� +,����������4���"��� ��$����)������ ���$�'������������� ����$�8���������'��������'�������������'��$���������������5���������$�����$������'����&��4���� &��)����� ���$��4������$5�

Page 168: Game Programming With Python, Lua, And Ruby (2003)

� �; �

"� �"�����������04�$(���������'�$��������������'�$"8��$��KW%SV�&6#L���������04�$(���������'�$��������'����A�������)������������4���)����������5�H�����

"�X����?+,�����������04�$(�'���������)���4��$����)������A�������4�������� �����

�$�����7�8���8��$��D��7��8��$��"�2��+,����$�����������$�����'�$"��$�����������������

$�������4��$��5�����)�����"�X����?+,�$���������������)�����4��$���)������A����K�$������7��7��8��)�����������'�$"���4���"�$L5������� �$��$���������������7��8��$������������$������������D5�

H����3��������������)$ ���$�M�$�'����F�����3��������������4��$�����������45�

�� �����+,E�������6� ��������3����$��������3����S ��"��/��2W%Z6� %2 �5�������!�������8����"����������"���>����+,�������"���>�������>���S����++:=��=F�,��3����S ��"�,�������L����������������8������!�������8�� ���������������������8�++:=��=F�,,�������������8�+,���������� �����������$� �������������������� ������/�����������3����"����D��������D�� �������������D��/���"���>����>"��S���D�+,������������������������������������D�����J���������������E����������3����/���"���>�3���>����+,���������� ��3���>�����//�V�!�����+�3���>�����//�T2�67������3���>D���//�TS2#L&�2,E�������������$���D�������������6�������� ���"���������������������"�������+,������������"���>�������> ���+,���������� ������/� �����(���� �SS����SS�//�ISS����SSIE�����+,�

���������� ������A����������"��$"��$�����5�9����8������)�$��3����S ��"��������04�$(��$���������))����M����������� ��������$���������&�������"�����$����������

��$����04�$(� ���� ���5����$�����$������D����"����'������������+,���������$�������������4�������;#�7#<��'��������3�����)��"�5�

�0�*�

�������))���$"�

���'�$"��$�������'�$"�� ���$���$�����"��� �$�����������$��4�� ������ �$���$"8��$��"����4��"����������3����3���4�����$����� &��)����$ �����$"������4���������&��������$�������'�$"�5�0$���)���������� &����� �������������))���$"8��$�����3���� ����$�'��$��$�����$"5��������))���$"������� ����$8��$�)� �8����������������$�"�����$���$������$�������������3��������$��44����)���)��"��)�����$"������� �$�A�5�.�$���������3�������4��"�����������������3����� �������������'$��))���������$�-����&���������&�%"��J�

Page 169: Game Programming With Python, Lua, And Ruby (2003)

� �!��

��������8�'��$��$����"����������'$8����������4��������'$��$�4�� ���$������ ���$5��$��������))���$"8��������"����������'$��������)�������$����))�������������$�������)������ ���$����������8��$�����$8�'��$���������������������4���8������))���������4��� �4������������ ���$5��$��������8��� ��4��7��$������$������A�$ ��������3����D�$���)�$���$�������� �$���$���������$"�'��������"��4�� �������'�������4������ �$��������5�

���$���� ����������������8��)$ ���$�'����������������4������D��K;#�7#<�L��$������

��������8��)$ ���$�������$������D�����04�$(5�H������4���������$��)�����3��������

K�A���$"��L��$�����$������&���"������������"���>"��>���D�����&��4���� &��)�������$�������� �$��5�

����� ����'��&���44�$���$��������������45�9����8������"���,���3���>����+,)$ ���$�

������8�3���&���������$4���$���$�� ��������$�8�'���������������'�$������A��5����$� ����

���������"�������)$ ���$8�'�� �����'�������A���5�

��"���>�������> ���+,�4�������������4������ ������������� �����5���"���>���������&$�'����������������$"�04�$(��$���������))���$"��� �����)�������������3�����)��"�8�������4�����������$��������4��������'�44�$"����� ���$��3��'�'��������$�'��$�������������'$��$����������$��������K�������� ��������"���))����'�4L5����$����4���������

)�����������������&$�'���'���$���������������������4��������4��8��$��)�$��������

�$������������'���������$����������$�� ���$�5�

+��'J��)�����$����W%S�>�����,���������'������A�����4�$��$���;#�7#<��4�7�����"����'�$��'8������������������$�9�"���#5�;5�

&����3('5(� )����J'()����)$�������B������������������ )�����������)$������ �����������������

,� �� �����$����0���� �>�� �

Page 170: Game Programming With Python, Lua, And Ruby (2003)

� �!��

��'�����������3����������$�8����,�����&����'������������ �$����'������04�$(5�(��,��

����"�3�$"������A������ ����5�H�� �$��������"�L����. +,� ����$�8�'�� ���������&���

�$������� ����$��8��$���� ��)������8�"���$8��$�������$��$�����3������"�L����. +���

"��$�,5���04�$(�&��4�����������$������ �$�����$��� ����� ����$��8�������� ��������3������$"��)�����5������5���$��'��&��7� �����������������)����'���������$"�4�����

� ���$��� &"��$�� �����'����"�L����L����. +,5�

��$�$"��$�"�L����. ������&���'�� ��$"��������))���$�� �������4�$5�+��$�����'�� ��������8��3������$"�������'��)���������4��$��������5����$8��)�����'�� ������$������ ����8��3������$"�������'��)���������������'$��$�����$�'� ����5������&�������A�����������$�

"���$8�������4���$���������������"�L����. � ����$���$���������"�������+,�

)$ ���$���)���������"�$����'�$"�'����"� �"��+W%SV�&6#,8���&������

�� �����"�������+,E�����"�L����+W%SL%�S �552�S !�ZW%S62���S �552�S !�,�����"�%���!�������+,�����"���������� +�>����>���'9>�,������&����"���������������J���������"�L����. +�>����>G���>9,�����"� �"��+W%SV�&6#,�����"�X����?. +'�>����>����,�����"�X����?. +�>����>����,�����"�X����?. +�>���'�>����,�����"�X����?. +'�>���'�>����,�����"�2��+,�

��'�'��$�����$������4��"����K�����������W%S->����$�����.�L8����'����������"���$��A����F�����&��������$�9�"���#5�!5����� �����������4���"�$�)������$������$�������)� ��'�������� ��������,3�����'$5��������� ������������� �����$"5�

&����3('6(���$�����������0����� ����"����#����

Page 171: Game Programming With Python, Lua, And Ruby (2003)

� �!��

�� � �������!�#���� �

��'��������� �$� ����������A���8����,������������������5���������8����$��������������������

��������"��������)$ ���$5�9����8���&������)������J����K�J�������������)����������

A��L�3������������� ����$"������"�������$�����$� ����$"�����"������� +,)$ ���$5�:�����3��������)����������$��������������3��)�$��"���$� �$������3���������3���$�5�

"������� +��"����?�����8,�4��� ������������$��)���"�3�$��$"����$���"������3�����"�3�$�3���� ���"�3�$��$�78��8��$��D� �����$����5����� ����$����&���)�����"��$����

&�"��8�0�3�����8���3�����8��$��[�3�����5�&�"��������$������������4����$�����'�� ������4�$�������F� �5�����78��8��$��D�3� �������4����$������3� �������$��'�� �������������$�'����� �5�9����$���$ �8�K�8�8�L8���� ��������3� ������������3�����$��������� ���$��)���$������$"�����7��7��5�

���� ���$�������7�K�����������,�����������"�R����?R���L���� ��$"������������������$5�

����4������������$��������$"��$����$������� �����"�������+,��$������A������$"�����

�J����3����������������$"����$��������$"��$�����7��7����

�� �����"�������+,E�����"�L����+W%SL%�S �552�S !�ZW%S62���S �552�S !�,�����"�%���!�������+,�����"���������� +�>����>���'9>�,��������#�������J���� ������������������������� �����������"��$����J��������"������� +�J������>����>����>�,������"�L����. +�>����>G���>9,�����"� �"��+W%SV�&6#,�����"�X����?. +'�>����>����,�����"�X����?. +�>����>����,�����"�X����?. +�>���'�>����,�����"�X����?. +'�>���'�>����,�����"�2��+,�

%$�����$���������$���)�����"�����������4������J�������������������'�$"��)������A���� �$��$��������������

������&�����������J���� �����3�����������J���(/��>��

����� ���������������$"�)�����A���8����������������$�9�"���#5�<�K������� ������$�����.��

������W%S.>��,5�

&����3(':(���0$� �)$������ � ����$��� ��1��1��

Page 172: Game Programming With Python, Lua, And Ruby (2003)

� �!��

���4����$"�'���������J����3�������8���� �$� ��$"����'���$����"���������4��$�����������$�����7��7��5�H�� �$���&������4��$���4�$�)������������'��8��� &'��������)��'����8���� ��$"�$"�����3��������� ������'������5�

!�#��0����&$� � ��2��

H����3������������$��������)�����'��&�)������4����$"�����������$���$�5�(��,���������

'�$������� ��$"������)����4��$������� ��5�W%SV�&6����� ������ �4������)����4����$"��� �����F� �M����F���$���������������'���������������3���� ���)�������������)�3��)����4��$���������"�5�������� �������4�7���4�����$"�4������M����������'$��$�9�"���#5� 5�

&����3(';(������������)�� ��0������������������))����� ���2���)����

Page 173: Game Programming With Python, Lua, And Ruby (2003)

� �!#�

0$ �����&$�'�'������� ��4�7�������$"�8���� �$�)���������� ����$����W%SV�&68�'�� ��)������$��� ����)� ��)�������

������5�����5��������"�X����?. +��>����>��'�>�,�����"�X����?. +'�>����>��'�>�,�����"�X����?. +'�>����>����>�,�����"�X����?. +��>����>����>�,�������� ��D�5��������"�X����?. +��>��'�>����>�,�����"�X����?. +'�>��'�>����>�,�����"�X����?. +'�>��'�>��'�>�,������"�X����?. +��>��'�>��'�>�,������������5��������"�X����?. +��>����>����>�,�����"�X����?. +'�>����>����>�,�����"�X����?. +'�>��'�>����>�,�����"�X����?. +��>��'�>����>�,�������� ������5��������"�X����?. +��>��'�>��'�>�,�����"�X����?. +'�>��'�>��'�>�,�����"�X����?. +'�>����>��'�>�,�����"�X����?. +��>����>��'�>�,����������"��� ��������"�X����?. +'�>����>����>�,�����"�X����?. +'�>����>��'�>�,�����"�X����?. +'�>��'�>��'�>�,�����"�X����?. +'�>��'�>����>�,��������%� ��5��������"�X����?. +��>����>��'�>�,�����"�X����?. +��>����>����>�,�����"�X����?. +��>��'�>����>�,�����"�X����?. +��>��'�>��'�>�,�

��'����� ���������7������5���04�$(�������� ��������'��������$��� �$���� �� &'���������C����)�����4��$�������4���"��8������� �$��4��$��������������"��8��$������$�$���� ��4����������$������"�3�$�4��$�5������������$������������������$8��$������1����71����������� �����&$�'�����4������� ��������������������M� �� &����

���W%S=>����$�����.���$��9�"���#5��5�

&����3(/=(�+���0$� �)$��������������0�$$��� � �������

Page 174: Game Programming With Python, Lua, And Ruby (2003)

� �!��

(��,���������'�$��������4����4��$���'��������������$"� ������$������������5���,����������)������'����1����71���8���4� ��������$ ����,3�����"����������$���$ �������$������)�3���������'����'�� ������������

����������������� ���������?��������8���������������������������������?���?����/������/�8����/��>��

������3��������8�?���8�����8��$��8���8� �$���������������������� ����$���$�'�'����$�

����7�8���8��$��7��7��5��������������$"���)�'���$������������4��)�����"���������

"��$���?�����������8��������"�L����+W%SL%�S �552�S !�ZW%S62���S �552�S !�,�����"�%���!�������+,�����"���������� +�>����>���'9>�,������"��$����J��������������� �����������"������� +?�����>���>���>�,�����"������� +������>���>���>�,�����"������� +8�����>���>���>�,�

%$�����$�������)�'���$�����������$���)�����"���������

����������0�[�����������'���������������$�������?����/�?����(��>G����������/������(��>G�����8����/�8����(��>G�

�����'���� �������� �������������A� &����$��������4�$��$���������7��5�

�����+�1 �����

Page 175: Game Programming With Python, Lua, And Ruby (2003)

� �!;�

�$�����)�$�����04�$(�����������,����4�$��$��������� �����7�������"���$�������)���3�$"���04�$(����4��� ��������� ��M���������������������$�9�"���#5��5�����)��� ����

�����������$����W%S9>����$�����.��4����#� ������ ���$��$�����.�5�

&����3(/'(��� �1 �����������)����������������1��

9��������'������&������)����������5�%���7����'�������$���3���������������)������������)������$8��$������4��"����'����$�������$������$����'����$�3�"��������"����))���$������ ��������$��4���)�����)��������$���3���4�����$"�������5�

H��'���������)�$����������$"�������7����3�������������$������D����������$��

����?������ ���������"�����>$������"����?������/�A���B�

H��'���������$"���?�����AB�)��������$"�����5��4����'���������$"�)�����7���5�����)��������$"����$���������$�'�)$ ���$�������4�$��4�����5��4�)�����

����� ����������� �������������������������?������� �������?�����+,E�������������� �������������������?��������������S��S ����/���>����>C���+I��� �>$��I,�������?����S��� ����/���"���>���"�>����+�����S��S ���,�������?����S$� ���/���"���>���"�>�������"+��?����S��� �����M�W 0M���,�

9����8������S��S ��������������������,����>����>C�������4��$���������5��4����'�$�������C�$������ ���������������� )�5��4�)����)�$���$�����.��'�������� �������4���5�����$�7���'�� ����$��������"������������������������5��4����"�������$�'���)� ��

+��?����S��� ���L��$�����$� �4���������"���$��������"�������$"��))���

+��?����S$� ��L5��4� �)��$"�/�=���������"���������������7��������������������4������/������5��������$������5��4����"���$����$�� ������7���5�

Page 176: Game Programming With Python, Lua, And Ruby (2003)

� �!!�

+������"���8�������7���������������������;#7;#�4�7���8��$�������$,�������������$���;7��;�4�7���5���7�����$������������D����$����"����$��'������������4�'����)���K�)�������7���������;#7;#8���<7��<8������;7��;8���������$���$��������������D��8������'�����������L5������������)� ������������$�������)�����)�����7������$������ ��$"�����8����$���'�������������3�$ ���4��"�����$"5�

��'��������"��������������7���8������$������3������04�$(5�9��������$�������

�4� �)�������������7��������'������$���$���'����W%S�20���2S-68��$�����$����$�������

��$������������?����AB������������'����������$���$��������7���������4��"����$������

����"� �����?����+W%S�20���2S-6����?�����A�B,�

"���?�!��"�-6��������04�$(� ����$��������4� �)�������'������$���$�����7���5�H��)���������3�����3����8��$ ���$"�������7������)� �8�'����8��$�����"���K��$"�����

"��S�����+,��$��"��S���"��+,��������L5����$�����4� �)�������������7��������'��

����$���$���'����W%S�20���2S-68��74���$���'����� �����)�����������"�$�D���'����

W%S�W &8���)�$�����������)�������������������������7���������'����W%S�#!W26S ��28�

�$��)�$����8����"�3��"���?�!��"�-6+,������ ����������)�������7���������)8�

��?����S$� ��8�'�� �������)�$���'������"�����

����"���?!��"�-6+�W%S�20���2S-6�����W%S�W &����?����S��� ���>"��S�����+,����?����S���'� ���>"��S���"��+,������������������������W%S�W &��W%S�#!W26S ��2����?����S$� ���,P�

+��'C����,�������$"�����$����$������5�������������4��$������$"�����7�����������������04�$(�'����)������$"�������'��$��������"���������� ����������������$������ ���$5����

�����8������04�$(,��������$�"���?��������� +,8�'�� �����4�����)�$��������4���$��

������'��$���7������44�$"5�����R!��$��R&W�)��������4� �)����7������"$�)� ����$8��$��

W%S2&�2#����&����04�$(����"��������$�������4�7���'��$������'�$"�����

W%S�20���2S-6����"���

����"���?��������� +W%S�20���2S-6��W%S�20���2SR&WS5!%�2���W%S2&�2#�,�����"���?��������� +W%S�20���2S-6��W%S�20���2SR!S5!%�2���W%S2&�2#�,�

��'��������� �$����������5��4����"���$����$�����$�������7���8����$���������&����04�$(����������7�����$��� ��������)����� ����$�������)�)����$"��$�����������'����

"�L����. +,5�

���'�$"�����7����� ������A������������))���$��)�������'�$"� ������� ���5�1�����)�����

"��)$ ���$����������������������"� �����?����� ����$��'����������������7�����

�����������7����'��'�$�������8�� ����&��"�L����. +,���������4�$�������4� �)� � ������

"� �����?����+W%S�20���2S-6����?�����A�B,�

Page 177: Game Programming With Python, Lua, And Ruby (2003)

� �!<�

�����4�������7���� ���� �����$������4� �)� �������)�������7���8����$���������&������������4���"����)�������7���������44������������4���"����)���������M������'���������������

��)�5�*� �� ��$���$�������������44�����$"�����"���?L����- +,8� ����$����&������

����"���?L����- +�>����>�,P�"�X����?. +'�>���'�>�����>�,�

����"���?L����- � ����$���������"$��������4������7������$��'������$���$�5�0$ ��

���"���������$"��)���$"����� ����$�������������������������"�L����8����������F����$������� ��4��7��������� ���)����� ��,����44���4��$����

"� �"��+W%SV�&6#,��������5�����5��������"���?L����- +�>����>�,P�"�X����?. +'�>���'�>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +��>���'�>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +��>�����>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +'�>�����>�����>�,�������� ��D�5��������"���?L����- +�>����>�,P�"�X����?. +'�>���'�>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +'�>�����>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +��>�����>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +��>���'�>���'�>�,������������5��������"���?L����- +�>����>�,P�"�X����?. +'�>�����>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +'�>�����>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +��>�����>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +��>�����>���'�>�,�������� ������5��������"���?L����- +�>����>�,P�"�X����?. +'�>���'�>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +��>���'�>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +��>���'�>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +'�>���'�>�����>�,����������"��� ��������"���?L����- +�>����>�,P�"�X����?. +��>���'�>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +��>�����>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +��>�����>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +��>���'�>�����>�,���������%� ��5��������"���?L����- +�>����>�,P�"�X����?. +'�>���'�>���'�>�,�����"���?L����- +�>����>�,P�"�X����?. +'�>���'�>�����>�,�����"���?L����- +�>����>�,P�"�X����?. +'�>�����>�����>�,������"���?L����- +�>����>�,P�"�X����?. +'�>�����>���'�>�,������"�2��+,P�

�����������)������ ����+���W%S9>��,����������������$�9�"���#5��5�

Page 178: Game Programming With Python, Lua, And Ruby (2003)

� �! �

,��������� ����

(�&��'����"��4�� �8�������������$������)��3������������������)�����4����$��$"���$���$������$5�

•� �� ��������,�����+��$% (�%$�K$)���$�����L����$��$���&���)��������$"��$��4����$"�%:8�>0.8��$��+%>�)������$�+�$��'���$���$�0��5�����$)�$���������&�������������3��������)���������$+����������4�GG'''54����$'���5 ��5�

�����$+��������� �4���"����8����)���������8��������5�

•� .���$��(�%$��$�������$"������)��� �����$"���$�� �4���'�� �����������$��$����� �������)���:��=��4�����$"���������K�����"�������'��&��$���%�8�1� 8��$��'�������� ��=��������$���$�L5�����4��F� �� �$����)�$��������4�GG'''5����$"5 ��GD��)G�������G5�

�������� ����$�����$�����4�����$����$��$"��$"���������)���$��)����� &"��$��$����5�

•� +���,���%�+��$% (������$� &�����&���'�����3���4������E�����F���$����)����.(��$�������$5�����������$��4�� ����$"�����&���'�������E��$���)� �5�����44�����1����$����$��)������$"M��������������$������&��������4�����3���4��$�5��$� &�

$�����������&�$�����$��� �G�&����'��&� ���� ���5�����������������DE������ ����$�8�'�� ������������ �������$����$������$����F� ��8����������������)����'�3�)����8��$��4������$��5��$� &����� ��������$"������&�$� &������5�H�� �$�)�$���$)�������$��$��$� &�������4�GG'''5�4�� �5&��5��G�$� &5�

•� +���!���F �������(�1�� E��������)��8���F� ������$������������)�����"$���4�� ����$"��$�������$"���$�8���� 8��$�� �����$"�1�����44�� ����$�5�����&�������������$�1�� �>�K9���������(�����$��1�7�1����'�L��$��'������"�$�����'�����$�)�����=�5�����������.�������������3����������������$���$"���0�F.��������0�F� ��3��.�����"�5��������������������$���4������������$����������������;<&8��������1�����$����$���������$"������3���������$�+�$��'���$��1� �4���)�����K�������������)������'����$"�����4��F� �������'���������'��&�$"��$���4�������(�$7L5�����&��� �$����)�$���$������'$���� �)��"��4�"�8����$"�'�����$���$���� ��$�����$8� �����7��4���8���������8��44�� ����$�8��$����� ���� �����������4�GG��� &��5��� �)��"�5$��G5�

�����$8��)� ����8� �����'������)�'���$��)$ ���$��������$5������������$ �����$����1������������3� ����$����������$�������#5�!5�

+��$��3(/6(��� ����!�$ ����������,��#����

!���$��� C���

���������1�$�4��������'����������504��������$���$��)��"��$��� �$�����$"��)���"$����$��"������4����<8��;8������������'���8���������$������$�����$"��

�� ��� /������$��'�����������)������$�%�99����%�9.�)������K%�����$��� ��$"��9����9�����L�

������� %$��$���)� ����������$�%:���$��)������

Page 179: Game Programming With Python, Lua, And Ruby (2003)

� �<��

+��$��3(/6(��� ����!�$ ����������,��#����

!���$��� C���

��3��� %$��$���)� ���������+%>���$��)�����5��44�������������$����$�����$��� ��4������$��$���� ��4������$�

����D�� /�����*%��99� �$&��

�������� ���3������������)$ ���$��������������$��������4���)�����$��)����

�����$������4�����������+�$��$�������������4��3������ ��������������� ���$��4����$"��� ��$�����$�+�$��'��4���)����5�+�$��$���$ ���������$"���)$ ���$�)����

����4���)����%��8�����#����8�'�� ����&����$�����$��4�����������"��$������� �$�������������)���$���8�������$"�K����,��������$"��)����������L������$�5�

+�$��$�,��)��"��������������$�������#5�<5�

+��$��3(/:(������������&$���

&$��� ���)����

#6S5!%2&R2�� ������$��4����������������$�����)���+%>�)����

#6S&%!&#�� ������$��4�������������������$���4����������� �$�����4�$�����$������ �����$�$����

#6S%��� �����������$����4��������

#6SR2R���� ������$��4����������������#����+,����������������"���)���+%>�)����

#6S���W2�� ���4�4����$"����4� �)������$��

#6S&#�L�� %���'����$������4�������$ ���$�����

#6S625&�%����)������4� �)������$�� �$$������)�$�8����$���4����������)�������4�

#6S#���� ���$����$����4����$��� ���$����4����$"�

#6S7&!��� /���$��������������)�������$�����3����������

%����"�������$"��$��4����$"���$������ �3������$�������� ���$8������4��"�����$"��$������� ��$ ������$����$��'�3�������� ��4��7��$���$���4���)����5��)����)�$�������4��"�����$"����������������8����""���� �� &�$"������ �4���)�1���$�1 .�&��,����"�$$�$"�����%�������"�����$"�)���������� ����������5�

�$������,������ ��������

H�� �$�4��������$����$"������$���"����'����F�����)�'���������$����)� ���5�9��������������4� ���4�"������4�����$�����������������4��������������� �$�)�$��)������$�����$���3���4�����$"���������

Page 180: Game Programming With Python, Lua, And Ruby (2003)

� �<��

��!�������������������������������������"���� ������"���>��������������)�

%)������4����$"�����$���������������8�����$������D��4�"�����

��"���>����+,�

��"����,�� �����4���)������� �������)�����$���))� ����$����� ��������������"������

��7��������8������������"���>��?�����������������$�8��$������������$�����+,�����������4��������

�������/���"���>��?��>#����+IH�W%2>��3I,�������>����+,�

����,����5����"�������� ��������$��$������'$�K�����������S#����>������4����$�����.��4����#� ������ ���$��$�����.������L8���������$����������������4������&��4������4��"�����$$�$"���������������$�������������������������$��4�������

�������E������

>����J��$���$����$��'�����$�����7���������$����)� ���J���������������5�0)� ����8��������

"����'����$������������)$ ���$�����,�������������3��������5�

.�$�����$���J������&��� ���

%���"��������S������)$ ���$�'�������&�3�����������������������S���"��)$ ���$���� ����������������"�$$�$"��)������ ��4���5�H�������������)�$�$"�����)$ ���$8�'�� ����&����$�����$�����)�������$��)�����

�� �����S�����+����,E�

��������S������ ���������� �� &���������)���"���>��?���K������"���������������

������4���$��L�����$�������5��)���"���>��?�����$,���3�������8���"����'����$�������������������������$�5���"����������������$�)������ ��������$���$�8�'�� �8��)����8�'������$�������$&���$����F� ���)�����)���� �$$������)�$�8��������)$ ���$�'����$��� �����'���������$"�����������$�$��7����$����$�5�

� �������"���>��?��E�������������������#����+,�

��7�8����'��������S���"�8������������� ��4�����4�������������F� ��'������������������

�������/��>����>C���+I����I������,�

Page 181: Game Programming With Python, Lua, And Ruby (2003)

� �<��

���$���������*�?����� ������$������$�������������F� ���

���E��������������/��"���>��?��>#����+ �������,��?�������"���>������������"�E���������������IL����������������EI����3�����������������������#�����2?���������"�����������������������

����)����$�4� �$����)�$�����%���S#����>����$�����.���

�� �����S�����+����,E������������������#����E�������������������� �����+��� ,E��������������� �������"���>��?��E���������������������������#����+,��������� �������/��>����>C���+I����I������,������������E����������������������/��"���>��?��>#����+ �������,����������?�������"���>������������"�E�����������������������IL����������������EI����3�����������������������#�����2?���������"�����������������������

Page 182: Game Programming With Python, Lua, And Ruby (2003)

� �<��

�� ���%������ ����

9��������$������$������� ��3���$)�������$����'��$��'�� ��4����8����$�����������)������� ��4��������$������$���� ����$��������5�������������� �$�������)��'�����$"����$��$���$�����������K�������������L��$����4����$����5�

������������������������$��������4����$�������)����� �������$����4���������������K)����7��4������5��#5���5��L5�������$��������$"��)������������5�*� �������������)����� ��$��'��&� ������� �$$� �����$���$��'��&��������$�A�5�

%�4��������$��$����4��$���$����$��44�� ����$�������3� ����������������$����� ��4���5�����������$��������4����$��������;������$��"���8���$"�$"�)���������;�����5�.�����$�4������$��$���

�0�*�

����0���1�����

���������)�$��'��&�$"�������)�$����������0��G��0�K04�$����������$��� �$$� ���$G�$���$����$������$������0�"�$�D����$L������5�����0�����������������4��)���3�$�������5�1�����)������,��$��'��&�$"�4���� ����K��&���.�G����$��:��L��4�$���)�'��)�������������5�

�5� ����� ���(����5�

��)�$��������$)�������$�$������������$�4����������3���4���� ��� ��4�$�$���K �����L5�

�5� �����(�$&�(����5�

��)�$�����'���������4����������$��)��������4���� ��� ��4�$�$��5�

�5� ���'��&�(����5�

0�"�$�D�������$��'��&��������"$�$"���������������� ��$��'��&������$��K��L5�

#5� ���$�4����(����5�

�� &��������$���$��������$�)����$�����$��'��&�K�.�8�:��L5�

�5� ������$�(����5�

2�$������� ���$��3�����������$���� �$$� ���$�����5�

;5� �����$�����$�(����5�

:���������$����4��������'������))���$��)��������$��4���)����5�

!5� %44�� ����$�(����5�

Page 183: Game Programming With Python, Lua, And Ruby (2003)

� �<#�

����� �����44�� ����$C����9��� ���$�8�2�������'���8����������$�����8��$������$8�������$��$�����$��'��&5�

"�3�$��� ��$���������4�$������)��� �$$� ���$����� �����$����3� ����$���44�� ����$��K)����$���$ �8�4����<����������3���)���2�������+���4�"����A����L5�%$��$�������������$��8��#���� �$��������4��3���"��8���������3��8��$���$������ ��4���������������'����$�����������$�����$����������)���������������$��$��44�� ����$��$�����5�%$��7��4����)������4�� �����������$����$�9�"���#5������$"�'��������0���$��'��&�������K�����������L5�

&����3(//(�,��)$���������� ����� ����� ������)� ���� � ����

�����$������� �$��� �� ���������� &��������$���$���� ��3����������'��$����������5��� &����'�������"�$������$���� ������:��=�����'����� &��$�����������<����$�������������������4��3����$��'��&��44�� ����$� �$$� ���$�5����� ����8��� ���$���)���

$��'��&��44�� ����$�$����������3�������D�����F� ���)��������4���������������$��$����������$������������$���$���� ��3���������� ���$� ���5�*���������$"����� &����$��$������������ ��������$��$"5�

�����$����������D��+,���������� ��������F� ���������� &��������� �$$� ���$�8��$�����D��+,��

+��$��3(2=(����������!� �����

!� ����� ���)����

������+,�� % �4�����$�'� �$$� ���$��$������$���'��3��������$�'����D�����F� ������������������$�)���������$���������������)������� &���������������F� ��������&�$"����

Page 184: Game Programming With Python, Lua, And Ruby (2003)

� �<��

+��$��3(2=(����������!� �����

!� ����� ���)����

$���+,�� ��$��������� &��������4������������

�����+,�� .������������ &���

�������+,�� .�$$� �������$�������� &���

"����������+,�� /���$���$�������������$������4�������'�� �������� &������ �$$� ����

"�����D������+,�� /���$���$�������������$������4�����)������'$��� &���

������+,�� ������������$�$"��$���"�3�$�4���8�'����$"�)����������� &������� �$$� ���

��D� ���+,�� .���������)������F� ���������� �$��������+,��$�������+,��$�

���3 ���+,�� /���$���������������$"��� ��3���)���������� &����$�����������������������������"�$�����)���������� &���

����+,�� ��$����������������$"���������� &���

������+,�� ��$����������������$"���������� &����������������������������4��3�����4����

���$���D��" ��"+,����� &����������G'������4������$��

��������+,�� �������'$����� ���$���� &��������������3����� &������������

�$����������� ������������������)��� �$$� ���$�K'�� ��������������)����������������

���$���������$�����3�������L5��������D��+,���������4����$�����$������)�)$ ���$�8������������$�������#5� 5�

+��$��3(/;(����������&��� ����

&��� ���� ���)����

���D��+,�� .��������$������$����$�'����D�����F� ��

"����������+,�� /���$����������$�����)������� ����� ��$��

"������$�����+,�� .�$3���������$��������$������������

"������$�����+,�� /���$�����4��� �$���$�$"���������$���8�����$��������������8��$������$������������

"�������$�����+,��/���$���� �$���$��3�����A�3���$���������4���� ���$����

"�����3$�����+,�� /���$������4����$��������� ����������������3� ���$��4���� ���4����

0$ �� ������8��� �����D�����F� ������� ���������$������)��������8������������$�������#5��5�

Page 185: Game Programming With Python, Lua, And Ruby (2003)

� �<;�

�0�*�

���D��>���+,� �$���������������4����� �����(� �$$� ���$5������� ��� �$$� ���$�

����04�$��(8�'�� �����������44�������$��������D��������5�

(��,��"��������$���� ��������$��'��&� �$$� ���$C�$������ ���8����.�� �$$� ���$�K��������4 ���$"���������)���������$)�������$��$��.���$��:��L5��$��������������4��������3���������)����� �$$� ���$8������$�$����������&������)����'�$"����4���

�5� .���������� &��5�

�5� ��$������ ��������� &�������$��3��������4���5�

�5� �����������$�$"��$������4���5�

#5� .�� &�����4����4������ �����)���$�'� �$$� ���$�� ���$"��$5�

�5� +��$��� �$$� ���$� ������$�K)�������� ���$������L8��������3���4�� ������������A�����$����$�������� &�������� ���$�5�

��&�$��$�����������8����������4������)�����������"��)��'���������4����$�5���� ��������

�� &��8����)�������4�����������D����������$�����$� �������$��$���$ ���)����� &��M��������A������� ������������� &��� �$��� ���5����� �������&����&��������

��!�������������D��+,������������������D�����L�����������D�����������������������S���D��/���D��>���D��+ �����������,�

��4� ����8�����)����������"$������$������� &��� �$��� ��������������&5S!2�8�'�� ������$��$���$�����4���� &��8�������� &�������� ���$� ��������'��$���))���$���� ��$��5�H��

����������$��$�������&5S�!0�)�����8�'�� ���������)�����:��=���4���� &����$�����$������������'��$��� &���� ���$� ����'������ ���������$������������ ��$�5�

9�������4������"$����$����'��������#LTS#��2&R�)����������������.�� �$$� ���$����

#LTS6W�&R�)���������"�������:��� �$$� ���$5��)����'�$�����$��$���$����.�� �$$� ���$8������� &��� �$��� ����'�������&���&��������

���3��S���D���/����D��>���D��+���D��>&5S!2������D��>#LTS#��2&R,�

%)���� �����$"����� &��8����$���������$�������� &��������4���5���������8�����������

$���+,���������

���D��>$���+�������,�

�������D�������)� �������4�� ���'���������� &����$���$ �8��$��������������������'��

4�����4����$�����)�����)�K����������L5��)����'�$���������$�����3��S���D�������������5���5���5�����$��4���� ���8����������

Page 186: Game Programming With Python, Lua, And Ruby (2003)

� �<!�

���3��S���D��>$���+M��>���>���>-��M��G���,�

���4���������������������3�����������������$�$"��$�����4���8�'����$"�)����$�� �$$� ���$�5�9���

��������4�����������������+,�������8���&������

���D��>������+$��D��",�

$��D��"�������������7����$������)� ���$�������� �$���A���� �$$� ���$��)��������

���3��5��$�������7��4��8����'�����������3��S���D���'��������7�����)���� �$$� ���$���

���3��S���D��>������+��,�

��'����$�����������4������4������'�����)������� ���$�������A������ �$$� ���$5��������4�

$���������$��$�������������������� ��3������ ���$����A������

��������������������/����D��>������+,�

9�$����8��������4� ���$� ����$��)����������3����$�� ���$����$"���������+,��$��

���3+,��������5�%����)�������$������)������������4��$������$����&����&������)����'�$"��

�������E�������������S�����/�M�������������������M���������������S���D����������S��������/����3��S���D��>������+,���������������ML��������������$�����������M��������S����������������������S���D��>����+����S����,���������������S���D��>�����+,�

��������S�����3���������������������������'���������$��������� ���$�5����$������� &���

������+,��������"��������� ���$�������������4��$���$�����)����'�$"���$�5����� �$��$����)�

����S������������$���$��������� ���$�8��$������ �$$� ���$���� ������'�������������+,�������5�

���� �$$� ���$��$����� ���$�����������3�$����������� ���5������������$������������$"�������$������������$����

�0�*�

�.��3�����:���

�.�G�������� �$$� ���$�����$����)�����)�$��'��&�$"5����'������"�$�������3���4����������:����4�����$���)���)�$��������)�����)� ���$� ����$�'����������$����$��$ �5�(��������)�����0���������K�������'��&�(����L����4��3�������������$���$�������� ���K��L8�'�� ��4��3������������� ��� ��$����)�������$"�4� &������ &��$��)������$������$���$��5�

�.�����������)������$�������$�.�$���������� ��5��������������$�)�����)� ���$� ����$��3��������$���$���K'��&�$"��$�0��,��(�����#L5����$������.���� �����$�(�3����8����

Page 187: Game Programming With Python, Lua, And Ruby (2003)

� �<<�

����$,��$������$�������������$���4�����'��$�����4� &���������$��8��$���������$,��4��)�����$��������$�������$5��.����$������������������������������ �� &�$"�����4� &���,�����3����$�� �$�����$"���A�$ �$"��)�4� &�������&��4�$"���� &��)�'��$��� ���$������3��5�+�����.���$����8���� �$���3���'��'��� �$$� ���$�����'��$��� ��$����3�������4���� ���0���������8��$�8����8��������� ����8�'����8�4��$����$��8�����������8��$��'��������������$���������&��4������$���$��5�

:����������))���$��)�����)�4���� ��������4��3��������$�4�����$�0��,��(�3���#��$�������)��.�5�:������)�������� �����������$,����� &�4� &������$���$���������$,���������� &$�'���"�$"�����������3��5�����8��)� ����8����������������������5��.��"���$���������3�����$�������������)�����3���8����:�������$,��"���$����������8��$����$ ���������$,����3�����'������������������� �� &8���� �$���$��4� &��������������$����$������A� &��5�

�5� 9����8� ���������� &��5�

�5� 04�$��� �$$� ���$�����������3����� &���3���������������K���������������$"���������,������$������4����$����������������$�$"��$L5�

�5� �)��$������� ���������"������ �$$� ���$8�4�� ��������$�� ��������� �$$� ���$5�

���4������&��)���������$�� �������������3�����������4���

����������D���������S���D���/����D��>���D��+���D��>&6S!2���#LTS#��2&R,�

%)���������� &������ ������8����4����$3��3��� �$$� ��$"�3����������3����������M���������

� ��4�����������"�������������+,���������

������S���D��>�������+M���3��S��������M��G���,�

9�$����8��$��������� ��3������4�� ������3����������3+,��������K �44�����������������$�

������7��4��L8�4��$���8��$�����$����� ���$�� �$$� ���$���� ������3������������+,���������

����S�����3���/�������S���D��>���3+9�-,�������S���D��>�����+,�������M�����3��� ��������M�������

(��,�������������4����"��$8��$��������������$���������:��� �$$� ���$��$�������)����.�� �$$� ���$5�+����:��8��������3��������� ����������� &����$����$���'�����������������$�����$���"�$�������$�$"5������������4��$�8��������3��,������"����$�����48��$����������������$������������ ���$�5�

��������8�'��$��$������D�$"������� &�����������4� �)��#LTS6W�&R��$�������)�

#LTS#��2&R��

���3��S���D���/����D��>���D��+���D��>&5S!2������D��>#LTS6W�&R,�

Page 188: Game Programming With Python, Lua, And Ruby (2003)

� �< �

%$�8��$������ ���8��������������4�� ���$����������$���4�����$����� ��3�������$)�������$�)�������� ���$��K'��������7����$������)��������"��$L��$�����4��������

�������E�������������S��������������/����3��S���D��>���3 ���+9�-,����������������������A�B��M���3�������E�M������S�����

���������� ���$�8��$�������7��4��8���������������������)�����'��&8�%"��$8����$��������4� �)������������� &��������:�����4���� &����

������S���D���/����D��>���D��+���D��>&6S!2���#LTS6W�&R,�

���$�����4� �)����������������$�8���&������ �$$� ���$8���$����������8��$�� ��������� �$$� ���$��

����S�����/���S�����+M6�����������M,�������S���D��>������+����S������+M���3��S��������M��G���,,�������S���D��>�����+,�

2�'�������$�� �����7��4��-�2�'�����������$"�4����� &��� ���$���$������ &������3����$����$����7����������'��$�����-�K����� ���� �$����)�$���$�����.��4����#���� ��)����8�

���������6�S#��3��>����$���6�SL�����>��8��$�����.�5L�9����������3��8����������

��4����$"����D����$�����$�����"$������������$����4�������3����������

���6�S#��3��>�������������D����R�S�����/�M�-<>�>�>�M�R�S�����/�9999�

H��������$"��������$������� �����������������!5�5�5���� ���8�������$"���8���� �$����$�������������3����$�� ���$���$������������ ��$�5���7�8�������������:����� &���

�$���$ �������)���8��$����$�������� &������R�S������$��R�S������

��L�������������D�������������R�S#��D���/����D��>���D��+����D��>&5S!2������D��>#LTS6W�&R�,���� �����������D��������������������R�S#��D��>$���+�+�R�S������R�S�����,�,�

%$��)�$����8����������������4�������� ��3�������4� &���)�������� ���$���

�������E�����������3��S���D������������/�R�S#��D��>���3 ���+���-=�,�����������M���D��������3��EM�����������M5��������EM���������A���B�����������M���������EM���������A���B�����������ML��������"EM�

Page 189: Game Programming With Python, Lua, And Ruby (2003)

� � ��

����������MQ�M�(������3��S���D���������#���������$��D���������������������MQ���������������>>>M������R�S#��D��>������+������3��S���D������������,�����������M���D�������Q�M�

���������8������&����3�$��"���)������$)�������$������ ���������"������ �$$� ���$8�4��$����������8��$�����$���$��������� &�������� ���$�5�%)���'����8���� ����������� &��� �$$� ���$5�

��'�)������� ���$���%"��$����$���������4���������� &��8�����4�����3��������8��$�� �������$��$���$ ���)������� &����

���6�SL�����>������!���������D��������������3����$��������������D����R�S�����/�M�-<>�>�>�M�R�S�����/�9999����L�������������D������������R�S#��D���/����D��>���D��+����D��>&5S!2������D��>#LTS6W�&R�,�

��'������$����������$��$"��)������������ &��$��)������$������������4��

������������������������������������"�� ��������D�����������E������#����������������D�������������3������R�S���D���/����S�����+�M#����6�������#��3��EM�,����������MQ�#�����"����D������������"EM��R�S���D������R�S#��D��>������+�R�S���D����+�R�S������R�S�����,�,����������M���D�������Q�M������������3���� ���������$��D� �����������3������R�S���D������������/�R�S#��D��>���3 ���+���-=�,�����������M���D��������3��EM����������M5��������EM���������A���B����������M���������EM���������A���B�����������ML��������"EM����������MQ�M�(�R�S���D���(�MQ�M�

���������� ��3�������"�������$,����)�����S�������$����$������������3����� &��5�����

���������4��������4�$������ ��3���$)�������$�������������74� ��$"�)�����������3��8��$�����$�4��$�����������$)�������$5�+��$�����$����� ���$���$�����3��8������������������$���� ����������"���� &��$��)����M�������&���������$"���&��9�"���#5��5�

&����3(/2(�C����$�� ����#��������� ������� ����������������$��

Page 190: Game Programming With Python, Lua, And Ruby (2003)

� � ��

Page 191: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�� ��- ��$$�+�� ����

�$�������� ���$���,�����&��������)������ ��4��3����4�����$����� ��4������� �����������4���"���5���������4������ �������$�'�����J54���$�� �$����)�$�����$"�'�������������)������$������ ��4������� ���$��$�����.�5�

�$�'�����J���������� �������������������R��D��S����>������4���)�����������8��$����,���)����'����������"�$��������4�����$"� ������$��

�5� ��4��������$� ����������������5�

�5� ��)�$���$��$� �������)$ ���$�8������$����$���$������ �������$"���

6������SR����"��)$ ���$�)������4����$"��4�������7���$������ ���$5��

�5� ��)�$���$��"������F� �� ������8��$������ ����#�����#�����8�������8�$������8�

�$��5�����%���5�

#5� .������������+,�)$ ���$��$������4���"���5�

�5� ���'��$��4���������$� �������"��4�� ������D�$"�"��4���$���4������'����$���

�����+,����45�

%�����������-����$�����&J�

-�)�� � �����������

%$���������������������

��������������������������������������������"���� ������"���>��������������)�

,�))�����5�

��0��� ���&��� ����

H��'�$���������4���)$ ���$������'�������4������7���$�����"����'�$��'5�(��,�� ���������

)$ ���$�6������SR����"�8��$��������������4������IH��+�$JI������I����03��JI������"���������"���,�� �$ ����$5�����)$ ���$�'������&��������4���������������� ����

�����"�8�����"����� ���$8��$������"������ &"��$�5�H�,��������"���> ���>5�������

��)�$��������4���)�)�$�������8� ���>������������$�������������"���$�'�����K/��3�����

�8�8�L8��$�����"��S����+,>�������?��$��������������$����������7��4�� ���$������$����� �$�����)�����'�$��'5�

��W������� ������������������������"�������������� �6������SR����"�+������"�����������$��D"������,E���� ����/���"���> ���>5���+������=F�,������?��/� ���>������+������"������+���������,�,�

Page 192: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�����?����������/���?�>"��S����+,������?���������>������?�/�$��D"�����>"��S����+,>������?������?���������>��������/�$��D"�����>"��S����+,>������������������������>$���+���?�����?����������,�

%��������8����6������SR����"��)$ ���$����&�������&��������������������

���>��������7��4������������$����� ��4���5�

��0��� ����$������

�$�'�����J�'������3��)��� ��������#�����#�����8�'�� ��'�������������� �����)�����������

������ ������8��$����������8�$������8��$��5�����%���� ������

������#�����#�����E��������������+�#�����#������,E�������$������+�#�����#������,E�������5�����%���+�#�����#������,E�

����#�����#�������������������)�����������������8��$����)�$����������������)���4�� �$"�

�����4������$������ ���$���$"�$���+,��$�����$� �3���$"������4�����'���������� &"��$��

�����&���������44���5�������)����S����S�������� �$���&��������������"���$�����������)�

4����������+,��

�� ����������������� ���������3��"��������������#�����#�����E������� �SS����SS+���� �����"��,E���������L��������������"������������'!��������+,���������� >���"��/����"����������� >������"���/����"�>"��S����+,������� ������+���� ���������,E���������������������������������"�3�����������������������������>$���+���� >���"������ >������"���,������� �����3�+���� ����������$��D"������,E��������������������$��D"�������������3���������������������>$���+�$��D"���������� >������"���������������� >������"���,�

����5�����%����������4������������4����$�������3�������$���$�����"���������5������$�'���������������3�����$������)�� ���$���$"������)������� ��$"�����)�$���8����"�$"������ �����$�����'��5�

H���$���$�����$�S����S���������$������3���������)���5�����%��������$������D������$�����$���3�����'����������3�������������������$��"�����������

��5�����������'���3�$��� ���"������ �������������5�����%���+�#�����#������,E����!�������8������������������ �SS����SS+���� �����"���������0�/������������/���,E�

Page 193: Game Programming With Python, Lua, And Ruby (2003)

� � #�

������#�����#�����>SS����SS+���� �����"��,���������� >������"��>������?�/�������0���������� >������"��>��������/�����������5�����������������3����������������������"������"������ ������������ ���3�+���� ��?!�����������!���������,E���������� >������"��>������?�'/�?!������������������ >������"��>��������'/��!���������

����$��������4�����'�������������������4���������"��8�'�� �������$�'��������'����

��3������3���8����4�� ���$������ ���$5����� ����'�������3�+,�����������������

��L������� �������� �����������������3����������$������+�#�����#������,E���!������������$C����� ���������������� �SS����SS+���� �����"���������0�/������������/���,E���������!�������������������������"���������������������"���������#�����#�����>SS����SS+���� �����"��,���������� >������3�������"���/���� >������"�������������3���$����������������� ���������������������� >������3�������"��>������?�/�������0���������� >������3�������"��>��������/�����������������������������������$C����������3��������������������� >������"���/���� >������3�������"��>��3�+�':���':��,�

������3���$���)��������4������'���������4�$��$��4�$�����4�����,��� ���$�8��$��'����

��A������ ��4�� �������3����������

����� ���3�+���� ��?!�����������!���������,E��������R�3���������������������������3��������������������������� >������3�������"��>������?�'/�?!������������������ >������3�������"��>��������'/��!�����������������L���"����������� ���������?����������������������� ���� >������3�������"��>��������1�-9E������������� >������3�������"��A���B�(/�Q�������������������>�������"�+�':=���:=��,���������T��������������"���3������ �����3�� �����"���������� >������3�������"��A���B�Y/�<:����������� >������3�������"��A���B�Y/�:�����������6�����������������$C����������3���!�������������������� >������"���/���� >������3�������"��>��3�+�':���':��,�

H��'���������$������� �� &8���$"���L��������S7�����������8�)����4����� �������$��'���������$�'�������5������� ��$"������7������������������� ������ �������$������ �����������������������$�����"��4�� ���

����� �L��������S7����+���� �,E��������R�D����������������$�?��������������"����������������������� >������"��>�� ����+�'-���'-��,�

9�$����8����$���������)�$������������� ����8�'�� ��������� ����������'����� ������ �$����������$�'�������5������ ��������������������� ��4�������3��������$"�5�9����8�����

Page 194: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�$�'�������,��)���"��4�� �C��)���8�"��$"���)�8�"��$"���"��8��$�� ������C����$�����������8��$���������������������7�������������� ��"��4�� �'��$�������$�����5�

����������� ������4������������� �$���������8�'�� �����$�����$�����������������C

�$������������$���)������������ ����������3�$"�������8��$��)����4����$"�48��$���$��)������'�$"���'$5�

����������� ����������$��������'�� ��)��� �������$��'����$������� ������8��$��

�����������'�)�������������3����������� �$�&$�'�'��$����4������5�����%���5�%���"�����8������'��&���������������$�����������

������������+�#�����#������,E������ �SS����SS+���� �����"���������!��"���������0�/������������/���,E������ �%���S!��"�+���� �,E������ �R�3�S%� �+���� �,E������ �R�3�S��"��+���� �,E������ �6�������S#����+���� �,E������ �!�������S#����+���� �,E������ �L��������+���� �,E������ �L��������S7����+���� �,E������ �&��S7�SR�3��"+���� �,E������ �6�������SR�3��+���� �,E�

+��������'��������S����S����������������������������������$"�"��4�� ��$�������$������

�������)�������������

����� �SS����SS+���� �����"���������!��"���������������0�/������������/���,E���������!����������"���������������������������� >��3��"!��"���/����"������������ >�����!��"��/������!��"����������!�����������������"�'������������������������� >������0�/�������0���������� >��������/�����������������#����������������������"������� ����"��������������� >���������������/�����������#������������������'�������3��"���������� >������/������������ >%���S!��"�+,�

H����������$������3�����$��)�%���S!��"�����4����� ��3�����$��)������$�'��������"��4�� �'��$�$�������

��%�������������������"������� �%���S!��"�+���� �,E���������! ������������������������'���������������� ���� >���������������//�'�E�������������"��/���� >�����!��"������������E������������&���������������������� >��������������������������������"��������������������������"��/���� >��3��"!��"��A���� >���������������B������������������������#�����#������!����'!�������8���������#�����#�����>SS����SS+���� �����"��,�

Page 195: Game Programming With Python, Lua, And Ruby (2003)

� � ;�

��������� >������"��>������?�/���� >������0���������� >������"��>��������/���� >��������

��'��� &�����3���$�5�����)����'�$"����4��������� �� &������������� ��������$,�� ��������$����������$"8��$�����$� ��$"������4�����,��4������$��

��������!��R�3��"��� �������� �R�3�S%� �+���� �,E����������L���D� ����������"��! ����������������������� ���� >���������������//�'�E�������������� >������/���������������� >���������������/�����������������������������3��"��� ������������ ���� >���������������4��E�������������� >���������������'/������������� >%���S!��"�+,����������!��R�3��"���"����� �R�3�S��"��+���� �,E���������L���D� ����������"��������� ���� >���������������//�'�E�������������� >������/���������������� >���������������/�-���������������������������3��"���"������������� ���� >���������������1�+����+���� >��3��"!��"���,�'���,E�������������� >���������������(/������������� >%���S!��"�+,�

+��$���3�$"���'$���������8������������ �����'������3��3���������4����5�9������������

&��S7�SR�3��"������������������$���)������������ ����������3�$"���������

��!�����������3��"���������������/����� �&��S7�SR�3��"+���� �,E��������� ���� >������//��E�������������������������������E��������������������

���$�'����)�$�8��$ �����8��$���� �������4���8�'�� ������ ������������)������������

3������������������"���� ����'�����������$ ����������� ����������$���������3���$���������

��#�$�������� ������������ �6�������S#����+���� �,E��������� ���� >������4��E�������������� >������'/�����&��������������������������6��$�������D��������! ��������������� �!�������S#����+���� �,E�������� ���� >������1���E������������� >������(/��������������������������������� ���� >���������������//�'�E������������� >���������������/��������������� >%���S!��"�+,�

Page 196: Game Programming With Python, Lua, And Ruby (2003)

� � !�

��7�8����$�������&��4���� &��)����������$ ������������� �����������3��5�H����������

'�����'��3��������8�?!����������$���!��������5�������������������$�����$��$ ���������

����������� �������3�����'$�����3����������5�%������$����8��)�����������)� �$"������"�����'$8��������3�����������������)���������$�'��$�����������3����$"���������5����������$ �����

���������)���������� >�������

�� �6�������SR�3��+���� �,E�������?!�����������!���������/������������� ���� >��R�3��"+,E�������������&������ ����"������"�������������� ���������������� ���� >���������������//��E�������������?!���������/����������������!���������/�-�)���� >�������������������E�������������?!���������/�+���� >���������������'���,�)���� >�������������������!���������/���� >�������������������?!�����������!���������

9�$����8�����4� �������$�5�������$ ��������������������)�L��������S7����������'�

��������'����$������8��$���������L�������������������� �$� ��$"������������ ������,�"��4�� ��)�$� ��������

�� �L��������S7����+���� �,E��������#��"�������������$�?����������������� >������"��>�� ����+�'-���'-��,���L���"��"�������! ������������� �L��������+���� �,E��������L���"��"���������������������������������� >������/������������ >���������������/�'����������� >%���S!��"�+,�

���� �����DE�����,� �C)�������

��������+,�)$ ���$����'����������)�����)$���44�$�5�����"����$�������$������)�3�����������)�$��8�������)�'�� �� ��$"�� �$���$�����$��������������$�3��� ��$"���������K ������ �$���$��L5�����)�������� &�������"��������)������������"��5�

�� �����+,E������5���������L���������+������������8���$�����3������,�������������������$������� ���������7&!�S�!R2�/�-�������#�����������������$��-9������������"����=F����?������������������L��#2S62����/�-9�)�=F�������#������������$���� �������������������������R 2�S��22#�/�9�������#������������X����$���������3��������������������3�������������������3�����/����������������"����������?�� ����������?������/���

Page 197: Game Programming With Python, Lua, And Ruby (2003)

� � <�

�������������������������$�����������������������3���/��������������"����������$���������������������������/�AB���&����������������������������������3������"���������������M�����M���������������"����/�AB��������������������D�����������D�/��������������������� ��������������������%� ��/�:��

������������$������)����"����$����$������'���������$"�K�� ������$����������)������$����.��4����#,�� ���������$"��$�����.�L8����'��$�����������������$�'���������������7� �����$��'�������'���� ����������

������������������������������������������5����/���>����>C���+�M����M��M���R�>��3M�,���������5����/���>����>C���+�M����M��MRRRRR�>��3M�,���������5����/���>����>C���+�M����M��M��0>��3M�,������������5����/���>����>C���+�M����M��M77->��3M�,����"���3��5����/���>����>C���+�M����M��M �[[2�>��3M�,������������������������!��"����������������������$����� �����!����"���5��������"���5�����/�AB����"���5����>������+���>����>C���+�M����M��M��� ��%� �>"� M�,�,����"���5����>������+���>����>C���+�M����M��M��� ��>"� M�,�,����"���5����>������+���>����>C���+�M����M��M��� ����"��>"� M�,�,����"���L����5����/���>����>C���+�M����M��M��� ��L������>"� M�,��������5����/���>����>C���+�M����M��M����>"� M�,�����������D5����/���>����>C���+�M����M��M����>"� M�,����"���S$��D"������/���>����>C���+M����M��M$��D"�����->��"M,�

��'8�����$������D����"���8���������"������)� ��������;#�7#<��4�7���8���&��������7� �4���$�I�$�'�����JI8��$����&������������$3������8��������"���� ��������$,���������

�������������8��"���"���������"���>����+,�����������/���"���>�������>���S����+�+�:=���=F��,�,������"���>�������>���S�������+�M#���$����;M�,������R�D�������>���S3���$���/� ����*�������"���>�����>���S3���$��+���,�

��'��������"�����������$��$������D����$�������3����'�$��'����4�����$8����������� &"��$���������$� ���$�'����������&�$"��� &"��$��54$"����"���

�����W��$��������3��������$��D"���������"�����$��D"������/���"���>���"�>����+�"���S$��D"������,>���3���+,������$��������$��D"���������������������������������������������������������>$���+�$��D"�������+������,�,������"���>�������>������+,�

Page 198: Game Programming With Python, Lua, And Ruby (2003)

� � �

��'����$������������"������������������$����$�����"������'�� �������3������������������4������

�����5����������������������������"���?���������������#�����/���"���>��?��>#����+����������5����,���������#�����/���"���>��?��>#����+������5����,���������#�����/���"���>��?��>#����+������5����,������������#�����/���"���>��?��>#����+���������5����,����"���3��#�����/���"���>��?��>#����+�"���3��5����,��������?�����������������"�������3���������?��� ������������������������D��� �������������������������!��"���/�AB������%����������������$����� ���������������!��"���5���������������������������!����%�����!��"��AB���� ��� �������"���5����E���������� ����/���"���>���"�>����+� ����,>���3���+,���������� ���>���S�����D��+���� ���>"��S��+�+������,�,�,�������������!��"��>������+���� ����,�������������������������� ������"�����"���L����!��"��/���"���>���"�>����+�"���L����5����,>���3���+,����"���L����!��"�>���S�����D��+�"���L����!��"�>"��S��+�+������,�,�,�����������������������"���������!��"��/���"���>���"�>����+�����5����,>���3���+,��������!��"�>���S�����D��+�����!��"�>"��S��+�+������,�,�,����������������������D����"������������D!��"��/���"���>���"�>����+��������D5����,>���3���+,�����������D!��"�>���S�����D��+���� ���>"��S��+�+������,�,�,�

������������������������$"�����$������������)����F�4�$"��$������������+,�"�������45�

����)���������$������D��������������$�'�������5��� �$���8�����4���������$��������������$����� ����5�9�$����8�4��������������4��2=���$�8�F���)����))� ���

��������������8������"���'����$����������������0�/�������>"��S�����+,�*�-������L����������!��������� ������������������W�������������������������"��������������8������������-9���?���� ������������������W����/�������+�������!��"����"���L����!��"���������0��-9�,������������������$C�����������������"������������������ �����������"�+��R 2�S��22#�,E���������������>������+�$������+�����!��"������������������>�������"�+����<:��,��������>�������"�+����:���,�,�,�����������������'���������� ���� ������������#����>����+,������"���>����>���S�����+��#2�2X2��������,�

����������C)�� ��� ��� �����$�����)�

��'����$�����������4��������������4������4���������������4�����8�&��4����� &��)�����8�

�$����$������3������$"5��������������4�'���������������$�$�������� ���������3����

����������������3��E�

Page 199: Game Programming With Python, Lua, And Ruby (2003)

� ����

���$�������������)�'����$"�����$����������'��������$"������&����������"����)��'������������

������������������/���"���>����>"��S���D�+,���������7����!����������������3��"����� ����������� �������������1���?�����E������������"���>����>�����+���?������'�������������,����������������������������������?������/�������������(�7&!�S�!R2�

���$� �� &�)����4���������������I�����I�K�������3�� ��$"����$��$����������4�����L5�+��

����3���$���4�����������$��������������3����$�� �� &��������'����������������D����������������'$�K�������� &�'�����$ �����������������)����)�����������4�����7����8�"�3�$"�����4���������������������� ������)�$������$�L��

������������3���$C����� �����������������������$������3��������������������"���>������+����W���>����3�+������������������$��D"������,�,���������L���D��������������������� �������������������E���������������������"���>������+�����>����3�+���������������������$��D"������,�,����������L���D��������D�������� ��������D�����������E���������������������"���>������+��������D>����3�+���������������������$��D"������,�,�

��'�����'��$������3�$�� ��������������$��)�����4�����������$"�����&�������5�:�����"���,��

������$�����+,�����������)���������3�$��A��5�����4�����,�� ����$������� �����))� ��

������������$���$ ��K���W���L���� ����$"������44��4���������������

��������"�����?���3���� �����3����J���������"�����+,����������������3����/���"���>�3���>����+,���������� ��������J��������"��������������������������D���������� ��3���>�����//�V�!�����Q����������+��3���>�����//�T2�67������3���>D���//�TS2#L&�2�,E�������������>�?��+,���������� ��������������D�������������������������;���������� ��3���>�����//�T2�67������3���>D���//�TS��E�������������W���>6�������S#����+,���������� ������������D������������������������;���������� ��3���>�����//�T2�67������3���>D���//�TS67E�������������W���>!�������S#����+,���������� ���"���������D������������������3�����������"������������ ��3���>�����//�T2�67������3���>D���//�TS�!W��E�������������W���>R�3�S��"��+,���������� ��� ��������D������������������3����������� ����������� ��3���>�����//�T2�67������3���>D���//�TS%25�E�������������W���>R�3�S%� �+,����������������������������������������������� ����������� ��3���>�����//��#2�2X2�E��������������%� ��'/���

Page 200: Game Programming With Python, Lua, And Ruby (2003)

� ����

:���������������$������ �������������D���$������ ���$��������4���������3������'$�������$���$��

����������������� ��������"������������D�������� ��������D����������������������>�������"�+�����,E�����������������D�/�5�����%���+��������D!��"���������������������>�������"�+����:=��,��=F��,�

��'8�����������W���� ������$���$ ����3�����'$�������$���$8����$���������&������

�����4�������������$���������������$�������������D�����4�������$�������'$5�������$���

��44�$���)�&��S7�SR�3��"���������

����������$�������������������D������������ ������������!����3��"���������5���������D�&��S7�SR�3��"�������� ����W���>&��S7�SR�3��"+,E������������L���D����W����?�������!�����������������������������?!�����������!���������/����W���>6�������SR�3��+,������������R�3�������������������������������"������������ �������������������E�����������������>��3�+�?!�����������!���������,������������! �������!�����������D���3��!�������������������� ��������D�����������E��������������������D>��3�+�?!�����������!���������,�������������� ��������D>������"��>$������1��E�����������������������D�/�������������������������3�����(/��!���������

��7����$��������������)����� �������$����� ���$5�.�� &�����"��4���������4�������$�����

�������D���$"�����L��������S7�������������

������D� ��������������������������������������� �?���/�AB������� �������������������E�������������� �?��>������+�����>L��������S7����+,�,���������������3���������� ������$����������������"�������������W����������L���������/����W���>L��������S7����+,>�����������+����� �?���,���������7������������"��������������������$������ ��������������� ��������� �L���������;/�'�E�������������������#����>����+,������������������A�L���������B>��3�+����'9=��,�������������W���>L��������+,��������������%� ��'/�9����������6��������������������W�������������������������������D���������&��������D�������?���� ������������ ��������D�����������E����������� ����W���>L��������S7����+,>�����������+��������D>������"���,E��������������������������������!������������������� �������������������#����>����+,��������������������D�/���������������������%� ��(/�9�

Page 201: Game Programming With Python, Lua, And Ruby (2003)

� ����

�����������$�����)�'����$"����)����������)�������� �$��7������������+,����45�9��������

'�$��������'��$����������� ��$"�����F� ��8����$��������������$�������������D�5�H��

�����'�$����� �� &���������)����W����������� ��������)�$������$�8��$�8��)���8��7����������45�

9�$����8����'�$����� �� &���������M��$ ������%� ��������� ����������"����'����������7����������4��

���������$C��������������������������������"���>������+����W���>�����+��������,�,������� �������������������E���������������������"���>������+�����>�����+��������,�,�������� ��������D�����������E���������������������"���>������+��������D>�����+��������,�,���������������������3�����������"�����������"���>�������>������+������������"����,������������������"����/�AB��������������D��������! ������3������������������� ������������������� ������������3�����4�L��#2S62���E������������#����� ��"����������������3�����;����������������3���/����������������D��������! �������������������������������� �����%� ��1/��E�������$���D�

+��'J���'8�F����������)�'��4�4� ������������$���)�����+,��$���)�����7���$"�����

�����+,����45��)������3���7������������������4��$��������3��������������8���������$������4��������� ���������$���)����� ������$��������"���4�����5�0����'������������5�

� �������3��E���������������#����>����+,������������"��/�M����7��;M��������E�������"���3��#����>����+,������������"��/�MW����3��;M�

0)� ����8�������������$�����$���6������SR����"��)$ ���$�������������4������'������44�$����

�����"���>�������>������+�6������SR����"�+������"�����������������$��D"������,�,�

:��������3�$��A������'����)�������4���������"�� �)�����7�������4��"�����

�����������������������������������������"��������������E��������3����/���"���>�3���>����+,��������� ��3���>�����//�V�!�����Q����������+��3���>�����//�T2�67������3���>D���//�TS2#L&�2�,E����������$���D�

Page 202: Game Programming With Python, Lua, And Ruby (2003)

� ����

9�$����8� ������))���������+,�)$ ���$��$����&�������������� ������'�����������4� ����$��������������$�4��"�����

� �SS����SS�//�MSS����SSME��������+,�

Page 203: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

,�������

+�'8���,3�� ��������$"�'��5�@�����)�'�������<��4�"����������"�����'������$�'���������$�4��"������M�$�'���� �$���)�'��������������)�����J�H��������)���� ��)�������� �����$"���"�������48������$"���$����$��"��4�� �8��$�����$"����� �$��'��&�$"�'���������$�$�'5�

��4����$��4��$���)��������� ��4�����

•� �����'��&���������"��������������� �����$����������5��•� /������$������$��$"�������$"��$���4������ �$�"��������$ ����������"���,��

4��)����$ �5�•� �������������$��)�����������������7����)������$"����$"���$������$5�•� �&�$����������������������$�� �$��� ������$���� �$�����'������ &���5�

•� �&�$���,�����D+,8�"���+,8��$�������+,�����������������&��������"�$�D�$"������&�$����:�5�

•� �����������������$�������������������)��������$"�'���� ����$���3���4��$��$�������&��$��'��&�$"��$����$�8�������)�'�� ������$ ��4�� ����5�

Page 204: Game Programming With Python, Lua, And Ruby (2003)

� ����

7��� ����������������

'8� 6��+������$,����� �3���_4�4����"����4��"�����$"��������`-�

�8� %��������������� ������$������$���$����������'�������4��������4������������$ ���������������)���$ �������3������$"�����������������5������$�������������$���)���3���4��$��'��&�����$��8������� �$���$���� ��$"�$"5�

/8� 6��+�� ��"��4�� �����������������������$��������)������)���������������$"�"���-�

�8� %��*� ���������������������3�������'$�����$"�����$��'��&$�����5�2�'�3��8��������4����$���� ����$�����������������$�����4��F� �,��$����8�$����$�����)��������)��$��4���� �����������5�+����������4��� ��$"���$������,���� �$� ���'����8���'��������� �� &��$����&�������������������������� �$��4�������$����$������)�)����)�8��74����$ ����������)������$ ��$"���4��F� ��'������5�

Page 205: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

*1�������

'8� :���%���S!��"����� �����������4�����������'�������'�� �������'��$����"����3����)�'��� �$������'������&�������� �� &5�

/8� +���������������4����&�$���� �����������4���"�����$"�$��'������"���-�

28� .��$"�������3�$�� �����$�R��D��S����>�������$�'�����J������&��������$4���$�������)�&���������$4�5�

38� (��������������������)�����0���$��'��&�������5�

48� %�����%���S#����>����������������� �4������)�4����$"���1���8�1��8�����$��)��������������+%>5�

Page 206: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

��������+��,���#$�����)������������$�

*3�$��$�&��������)������)��$�&��5�

CC���3�$�+��"���

�����$,��"������3���4��$�� ���$��������7��������� ��3�8��$��������������D�$���)�4�������"�����$"�$��������3������������"�������:��4�$���� �� ���$������ �$��5�����������������4� �)� ��������$������������)�������D�$"��$�� �����$"������$��"��4�� �8�$��������$���$������ ���)���$��'��&�$"��$�������3������4������"���$"5�������$���4��������'����$����� �$)�$����)���������&��������������)������ ��3��4��F� ����$���'�������������3�����������������$"������$�4��"������M����F�����3�������3���$��$�������������� ��$"5������ ��4���������������4�� ����'�����������$������� ������������3�����������"�����74����$ ���'���M������$&���,��������"����4�� ����������5�

Page 207: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

*�����

%$��$"�$��������4���������8��$������� ��4����)� �����$��������$���$"�$����3����������������4����4��"����"����5��������������������������$��������$���4�$���� �8��$�8�)������������4���8�����"��������'�����������"�$$�$"�4��"��������$�������3��������������$���)� ��5�

+������$��� �$��������*����

����.� ��$�0$��$�����$"�*$"�$��K.0�)��������L�����$��4�$���� �� ��4����"����������$"�������5������������ �����'��������3���4��$���44�� ����$����)� ��������"���� ������$8���I)�����$��������$&�I�:����������$"��4�'�$��'���$�'�� ���������4�����"�����$)�������$8�4�������$)�������$8������8����� ���$�8������8��3�$��8��$���3�$���)�$��� ���$�3���������� �$������&�$��$����������7��4�����5�������3���4��$���44�� ����$�������'$��$�9�"����5�5�

&����4('(�+���� ����#�$�)��� ��))$�� ���

.0� ���$�����44������������1�����$���)� �8�'����4������������� �� ���$�8���7���������$4�8��$������� ��4�$��4��$����3���$�5������ �������'����.0��������$���������$��$��$��3���2�����������"����+������'�����$���)� �5������$"�$�� �$����)�$���$���� �)��"��������4�GG �"�$"�$�5��� �)��"�5$��G5�

�� ������#�� ������ ��,�� ���

���������$�%�3�$����+����$"��������K�%+�L��������7����3�$�������������3���4������/�"������'��$5�%��'������$�������$�������"���������8��%+������������������$�$�4��"��������$�� �$�������)���"�����$"�$�8���'������������8��$����4���������5��%+�����)������'������ ��$���8��$�� �����'������)�'����4���"������$���'��"������74��$��������7��8��$����������'�����)����������"����'��������$���$�����8���������'����� ���������8�������74���$����'����������$���� ���'��&5�*3�$�������� �� ����

Page 208: Game Programming With Python, Lua, And Ruby (2003)

� �� �

�����)����'������ ��$���C��4� �������������4���"����8�'�� ���������&������������������3��5�H�� �$�)�$���%+���$�����.��� ��4�$��$"���������&�$�������������$��� ���$�K����9�"����5�L5�

&����4(/(�+������,������� ����%�

�%+���$ �������)�'�)$���� &�����&��4�����"�������3���5�9����$���$ �8�������������+,�

)$ ���$��������&�������4�� ���)��������$������$M����+,����������4� �������������������� ����$���)���4���"��4������&�8�����)� �8�������8��$�� ����5���������� &��������4� ������

���4)��'��$�����"$�$"�����7��������"���5����+,������������4����������8�0�F� �8�'�� ��

��� ���������$����� ����)��������5��%+��������$ �������$������)�)$��$��$�A�� ������8�����4��$����� ����"�����$���$�����$�3������������8�)��� �����$"�"������F� ����$�����$"�������)���)�����$"�5������� ��������$��'�����������������)�����������$����$��������5�5��

+��$��4('(����,��$������

�$����� ,�������

L����&���3���$��!�����.���������������4������ �$���$��$��$���))�

L����&������ .�������4��4��8��$�����8���$�����8��$�����������$"��4�������'������������������&�������)�"���'���5��������$�

L���� ��������"5�

L���� ���$C����� ����� �����)��� �����$"�����I���$"�I�����4������ �$��$���� ��'����

L���� ��������"�� ��)�$������� �4���� �����'�5������)����4� ����D��� ��������)�I���$"�I�

L����L���������� .������� �$���$��������� �$���������$"��

L����6���������� :������� ���������� ���$����3������������4������

L����6����� .��������$��������)��������

Page 209: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��4('(����,��$������

�$����� ,�������

L����5������������ �������������� ������)��������������� ������5�%��������� ������������������$������4���$��

L����W���$C����� .�����������"������F� ��

L����W��$���� .���������"��������F� ��

L����!����� .��������$���F� ������� �$������&�$��$�� ��������������4������

L����%��D�$��6����� .����������� &����������

L����R�������� ��)�$����$����$"�'���� ���������������5��������$�L����&�����

L��������$��!����� ��)�$�������������� �$��4�$���� �����

L����������2������ ������������������"���

L������������ ��)�$�������4������ ���� ������F� ��

L���������� ��)�$��������

L����#�������� .�������4��4���$�������4�����

L����#��� �� .���������)�7�������)������������ �$����4�� ����$�

L���������������� .��������$��������������4�� �$��$���'��$���&�$�

�%+����&������3��������������3���4�"�����A� &����)���,���� ���������������$5�9����$���$ �8��������� ���$����4������ �$����3�������������4�����"���������$��� ���$���5�%$��7��4�����4���"�������������$"���&������)����'�$"��

R�����S�>R���/�N����E������M�������I��"����������>M�����������������������������E��M�������I��"����������>M���������������������2���E�������M�������I��"����������>M���������������������#��������E��M�������I��"����������>M���������������������#����E������M�������I��"����������>M���������������������#��������E��M�������I��"����������>M���������������������7���E�������M�������I��"����������>M�����������������������������E��M�������I��"����������>M�����������������������E���������R�������������S����������������������6���E�������R�6�������������S��O�

�%+��&$�'��������4��'�����$�"�����)�"��������'������$&���������"���������4��$�����������$"��)�����,��'�������'�$�������3����44�$�'��$���4���������3�����$��� �����$����� ���$5��������$���������$��%+��������)�$��������$"����� ������$�����$��3������$"������44��4��������)������������8���&������

R�!���S��/�L����!���+MR���M,�R�!���S�> ��D�/���R�!���S�>#������"%��������/�R�������������S��

Page 210: Game Programming With Python, Lua, And Ruby (2003)

� ����

�$�������7��4��8�����)�$����$�����8�R�!���5�������"��$��"�3�$�KMR���ML��������$�$�

��� ��4�����%+��'������������)���$ ����������5����� ��D+,��$��#������"%�������+,�

��������K�$��������)����L����!���L�����4�'��������������'�������"�$��������)�$�8����$"�'��������'��"��G��D���$�����4�����,���$3�$����5�

0�����)$��%+��)��������$ ������4����������� �$�����7��$��������������4��"������� �$�����$�'�3������$����3����8�"���������$������� �$�����4�'$�������$�)$ ���$������3����4��������$8��$��I)���I������'�����$���)$ ���$��)�������������)������$����$�5�����������3�$������"���������������'����8�)��������$"�4�4����8������� �� ����$����$������3���������'�����4����$"5�

���"��������������3�����$��)���'�8�����/�"��,������8�������4�GG�������5$3�75$��GYD�5'��)G�%+�5�����5�

���$����

����� �8���������������K�$���������$�'��&������������$$���L8�����������)���"�$�����$"��������� ���4�CI��� �I���$����$"��$������$5�

����4�'�������$������� ���������$���54�������5��������$������������&����$�����4���F� �8�'�� ��������� �����������������$���$��������8��$������������4������$�����$��������� �3��'���4�'������$������)��A����������K'�� ������4��3������$���54$"�)�����L5�

:$)���$�����8�����4��F� ���������$��$���4���)���A������'����8��$������44�����������"����3���4��$���$�����4��F� ���������44��5������8�)�������"�8������ ���������"����������$"�4�� ��)����$��������� �"�����$"�$�5�9�$������4��F� ������4�"���������4�GG'''5���7 ����3�5$��G4�4�� �5�

%$��)�$����������� �)��"��4��F� ��4�"��������4�GG��� �)��"�5$��G4��F� ��G4�4�� �G5�

�� ����C�#�����.�$����

���������$�:$�3����������������������)������$��������������� ��������7��������"��������'��&���)��$���� ��3��)� ���$5��:��'������"�$�������������@����������$��'�������A�$������3��������������2�$� � &�)�������%��1�$"��4��F� �5��:����� ���$����$�'�$��������'�$"��)�@�����1� �8�'�������������))��������4������:��)��������$��5���$���� ��$������4��F� �5�������� �)��"��4�"�� �$����)�$��������4�GG4��$�3����5��� �)��"�5$��G�$��75����5�

�0�*�

�������� �:$�3��������������

�:�,����$"����������8��������� �:$�3�������������8�����������)������$� �������������$���������$���� ��3��)� ���$��$�������$5����������$�����������������7��4����)�'���������$���� �4������)8�����������$"���� &�)���������� ��4��7�"����K�����:������������F�����)�'�� ��4��� �4������)�4����$"�*$"�������$��$ ����&�� ����$��L5��:��'����������������@����������$�� �$����)�$���������+������8����4�GG'''5�����5$��G5�

Page 211: Game Programming With Python, Lua, And Ruby (2003)

� ����

�:����������$�)���)��������)�����4����$"8�������'$��$��������5�5������������������F� ������$���8��$����3����3�������"������ �������"��4������$����F� ��������4��������$���� ��'�����$��3���������������:������������$������4������ ����$��5�

+��$��4(/(��C.�!���$���

!���$��� &��� ���

������ .�$���$�������4��������"����

"��"����� 9��������$"��4� �)� ���F� ���

��$�� .�$���$��"�������

��$�$C��� .�$���$�����$�������F� ���

���D������� 9�����3�$"�K4� &��$"L��$������������

��$������� .�$���$��������4��8�)$ ���$�8��$�� �$���$���

��$����� :����)���$��'��&��44����

��$3��$��� .�$���$�����$�����3�����

��������� :����)���1:�����4�����$�

�:����������� �������)���� �������8� ����$��8�����4�����������)8��$���3�$��8�'�� �� �$����������� �������3������$"������$������$"�$�5�

%)������4����$"��:�8���� �$���"�$������$"�1:����&���������$��������)������A� &��5�

��L���������������������������$�$C������������������R������������/���$�$C�>����+M6��"�����������L���M,���6�����$����������������������������>�����/�M���I��������������$����������������������� ������>Q�������������������������!���'$����������>�Q�&�������$���� ����������������������!�������������� ���������>M���2���$������������?����?����������S�/�2?��+M������������$��������M,���6�����$���?�������S�>�����/�M��������������������$�������D��>M���&����$C����!�������������������/���$�$C�>%�J���+M��������J���M,���6�����$���$C���������>�����/�M!�������������$���������������������� �����������>M�

������7��4���)����� ������������4�������� ������R��������������$"���$�$C�>����8�

�$�����$���� ����������������$���������������7����'������������+,��$��2?��+,��������

����5����$��$���F� �8��$������ ������%�J���+,���F� �8���� �������'����$�����������$����� �������$�����������'��5����� ����'� �����$"��$���F� ���$���������$�� �����$"���������������)�����$���������$�� ��5�

�:�,����""��������$"��������&����������$��$ ��4�����8�'�� ������'��)������ ��4��7��$4��)����4�������KI����������"�$��$��4������$���������aIL5�

Page 212: Game Programming With Python, Lua, And Ruby (2003)

� ����

������� �)��"��4�"��4��3�������)�'����4���"�����K�$ ���$"������4���"����������������$���$����$�����1:��3�����$L��$�������4������ ��4���������$��������'�8�3��� ����$��8�'�������F� �������������5�������� �� ���������)����������3���������$��)������'���� ����$���5��

+�����@@$�������*����

��DD��������)����K$���������:�4��� ��� �$��L8�4��������"���������$���)� ���$������4������)�����1�����$��/�3�$�K�������$ ������$���������&,��.��$���������� ���$��$������$L5�%����������%$���'�@�$����$��'�����$��$������$��$����"���8������$"�$���$ ���������)����'�$"�)��������

•� %����������$����$"��$���)� �� �4������)���$"�04�$(8���(8�������� ���5�•� /$���$���3�����4���)�����K+�$��'�8���#8�0�=8���0�8�9������8��/�=8��$��

(�$7L5�•� 9���%�����$"������$�� ��4��$"5�•� �44����)�����))���$�����4������D���K;#�7#<�8�<��7;��8����#7!;<8��$������$L5�•� %����$����$�8���� 8��$����$���))� ���K��$"�+%>�)����L5�•� 03������������"���K)��������$ �����1�8��98���8�@�8��.=8��$���%L8���7��

��$"�������4��)�$��8��$����3���4����� &���$"�1�*�)����5�•� �$�"������F� ��������4������� �$� ����5�•� Z�4�$�3�"����$��4���$5�•� .�����D����� �����"��4�� ��� �����5�•� ��������&��/�3�$���������������$�����$�5�•� ���� ���$�5�

����9�"����5��)��������&������DD��,��4� &�"��������"�����$�� ���$5���DD������ ��4������)�������$�)���)����������������$��������5�5�

&����4(2(�+�����@@$����������������� ��������� ����%�

Page 213: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

+��$��4(2(���@@$��!���$���

!���$��� C���

&�$����#������ ��)�$�$"������$����$����$����� �

!��"��� ��)�$�$"��3������������"���

R�3���� ��)�$�$"���3����

$C����� ��)�$�$"���F� ���

������������ .�$������$"�����"������"����4����������

������� ��)�$�$"�������)����4�����

��88���� ����������$"�$��

#������ ��)�$�$"�������5��������� �"��4�� ��$���

#������ ��)�$�$"���$���))� ���

��?��� ��)�$�$"��3�����������7��

����%�����$,��A����)�$���������)�������� ��$��$"�"���8����F����4�$�$"�4����������"����)�����K �� &�����"���54�L��$��4����$"������ �$����A������3����$"�K�$�8��)� ����8�������� �� �������)�������3�������L5�

0$ ����DD����������$���4�����8������������������������������������"����4������������&��� ���$���D���$���� &"��$�� ������

����������88������������88��� ������88����������)����#����� ���"�������������������������>���#�����#�8�++F���:��,,������������8�����"��������������>��� ��D"�����L����++�����,,�������$��D"���������$���D�

���$����������������������������������4������������+%>8�1�*8�� ���$8��$��������)������

��������88����$������ ���������������>������>���#��������+��>����>C���+I����I��I������I,,������>���#��������+��>����>C���+I����I��I������I,,������>���!��"�����+��>����>C���+I����I��I���"��I,,������>���R�3������+��>����>C���+I����I��I��3���I,,�

H��'����$��������������$�������8�'�� ��������� �������"����� ���$5���� �$���������������������))�"�3�$"��� �����������������

��� ����#����������������R�#������"#�������/�#����+,�R�#�����#������/�#����+,�R������#�������/�#����+,�

Page 214: Game Programming With Python, Lua, And Ruby (2003)

� ����

%$�����$���)�$�$"��� ���������

��6� �����������R�#������"#����>����3����+��������,�R�#������"#����>���#����5���+IR�!��"�5���>C�"I,�R�#������"#����>����3�"�����+AR�#�����#������R������#�����B,�R�#�����#����>����3����+��������,�R�#�����#����>���#����5���+IR�!��"�5���->C�"I,�R�#�����#����>����3�"�����+AR�#������"#����B,�

�����'���������$�� �$$� ���'����))���$�����"������������������ ����$�3�"��������� �������5�������$"�����"����4���A������'����$����

��#��������������"���������88��>���5����#����+R�#������"#����,������������"������88��>�����+,�

���������������������������DD��� �$���5�*� �������� �$��$ ������� 8������8��4� �����))� ��8��$���4� ��������3������)�$���)��� �� &�$"��$��$�3�"���$"5���7�8���F� ��8������$����$�8� �$���$���8��$��4DD��� �$�������"� � �$����������)�$����$�����������&����"�����"���5�9��������������3�����$��)���DD��8� �� &������������4�"���$���� �)��"�8�������4�GG4�DD��5��� �)��"�5$��G5�

Page 215: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

���)����

+�����������1�78�(� ��4�8�(�"��'�3�8�%�� �8�1���8����$���8�%$������$�1�����8�����4� �8�/�$���1�$8��$��������������3���$� ����$-�+���8������������$"�"��4�� �4��"������$������44�� ����$�8�������������������$�� ��4��$"��$���)� ��5������$����������)����������""��$"�������M���,������������$&�4�����$������"�����$�����4��)� ��)��� �����$"�A� &� ���������������������$"���4�����3�����&�5�

�$���

%�� ������������)�����3���4�$"�����������$���$���"��4�� �8���������$������ �$ �4���)�I���)����3����$�5I�1��������$"�$�����A��������4��"����������&$�'��7��$��3�����"�$������8�3� ������"����8��$��������4��$)������5�%�� ���������"$������4��3����$�$�4��"��������'����� ����������4��"�����$"��$���$���� ��3��'�����5�0$���)��������$"���������&���%�� ��4�'��)�������������������3���������"��)��'���8�������������$�:��K���'$��$�9�"����5#L�)���4�� �$"8���D�$"8��'��&�$"8��$���$�����$"�����������$���$�����F� ����$���4� ��5��

&����4(3(�+����$����C-�

%�� ������4�$���� ���$��������3��������������� ���$����3���4�����$�� �4���"����������8��������"��������/����� ����4����.��$�"���1����$�:$�3������8��$�� �$����)�$���$��$��������4�GG'''5��� �5��"5�

����'�������$�� �$��$�� �������'����%�� ������)������������������8������$"�����������4�����$���$������� �$�������)����'��5�����%�� ��4��F� ���$����������"�$��������:$�3��������)�>��"�$��8��$���3������������������� ��3����44�����$�����)�����)�"��$���)�����%/�%8��$���8�1� ����)�8���98���7��8�.��3��$8��%�%8�����0))� ���)���3���/����� �8�%�3�$ ������'��&��$�����3� ���$ 58�0�/8��$�����������$� ���$���������)5�

Page 216: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

.���$����%�� ���44������'������$���$���"��4�� ���4�����K3������"��$�����4��������"������������$����������L��$��5����)����8�'�� ������%�.���� �$��*74����)���������)����74����$"����'����)�������$���3�����������������K�$ ���$"����������1�7L5�%�� ���������� �4������)���4����$"���� ��$����$��������$"�1���)����5������$"�$�� ������A�44���'�����$�������)���������$����$���4���������$��4� &�"���)�������$�'���5�

%�� ��� �������������""�����4��"�����$"� �$��� ���K)����7��4��8�� *������������$����$�����4�L������ �$�����������������������3�����)�����������5�:$���$���������:������� ��4�������$"�"��������44������������8�������8������8�)$ ���$�8��� ����$8��$������$5�

%�� �������� �$����"�$������"���� ��4����������3���4��$�8��$��'��&�����$"��$"��������'�%�� ������74�����$����4���������)��������$���$��$������4���)����5�0��"�$����8�%�� ��'��� ��4������������$C���� ���8����� ���8�����'������$ ������5�+���������� �$����F�����'�����K'�� ���������$��$"��$"���$ ��� L8�� ���)�������)�'�����������$���'�����$��$�@�3�5�2�'�3��8������$"�$������������ ��4������3���@����$5�

@����$�����$���4����$�����$��)������$5�2�'�3��8�@����$����'�����$� ��4��������$�@�3�8��$������$��"�������$����$�1� ����)�,��@�3����@�**�4���)���5���������$��@����$���������������$��� ���F� ������$����)��������)����������$���$"�"�8��$��������$���$��$��@�3��4���)���5��

�$������������4����$�������$G@����$�� ��4��$"��$�%�� �8����$�������)������$�������5�H�� �$���$��$�@����$�� ��4��$"�$�����������)���$ �����$5����� ��*���8����)���$ ��8�*$�����@����$�� ��4��$"8�������'$��$�9�"����5�5�

&����4(4(�*���$��H� �������) �����$������C-�

0$ ��� ��4��$"�����$�����8��3������F� ��'����$�����0�F� �������K������4���)����$��'�$��'8�'�� ���$ ������$���$���$ ���)�����������$���$�����F� ��8��$ ���$"�����'����������)L����� ��4�����������'��������"��� �� &��)���������8��������"���$����$��� ��4���3�����I"�I��7� ��������$��K����9�"����5;L5�H�� �$������� ����� ��4���'��$������$"���������

Page 217: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

K%�� ��������������$��������������L�'�����'�����""����������� ������� ��4���$��� ��4����)�$���/��4�$��5�

&����4(5(�*� ����)�������>�� ����) �0���� �����>�� � ����

����� ��4�����������'����������4���$� ���������'��������$�'��$������� ��4�������������$��$�����%�� ���$"�$�5������ ��4����)�$���/��4�$�������������)����4��� ��4�����%�� ���$������$�5�

0�F� ����$�%�� �� �$���� �����8���$"�������$����8�����"��� ��4��8��$��������4��4��������$��3�������������� ������F�����&���������3����������

���"���>��#�����"�/� �����

%����)���������4������4�'��)�C$����$��� �$����� ��4����F� ���3��������$G@����$8����'����@����$�����������3��� ������������$�����@�3��%��5������ ��4��� �$������ ����������$�%�� ���$������$���$��%�� �,��I/�"����'I��������8���&������������$����$��������5#5�

+��$��4(3(��$������� ����!� �����

!� ����� ��� � ������

6�!�����+,�� /$������������)��$������$��

! 2���!�����+,�� /$���$������$�������)����� �$�����$��������)���� *������������$���

��#�����"+,�� �������F� ��������3����������$���3�������

5��2���!�����+,�� �������������"���������

R�3�&��������+,�� 1�3�����F� ��

Page 218: Game Programming With Python, Lua, And Ruby (2003)

� �� �

+��$��4(3(��$������� ����!� �����

!� ����� ��� � ������

��3���"����+,�� 1�3�����F� ���������������)�"�3�$����� ���$��$�����$��

��������&��������+,�� �������F� ��4������$��$�'�����

����8�&��������+,�� /���D�����F� ��

����8���"����+,�� /���D�����F� ��������������

��������"������ /��������$�"�3�$��7���������������

���������������"�������������F� �,������$�����$�3�����������7�������������

#����&�����+,�� ������"�3�$���$������4� �)����3�����

����&��������+,�� /���������F� ��

������"����+,�� /���������F� ��������������"�3�$����$��

7���&�����+,�� +�����)���"�3�$�������$�

7����%���!�����+,�� /$������"���$������$������'����� �$�����$��������

��������������K�$����$��������C �� &��������%�� ����� ��$�����$L� �$���� �������$��������'����$�%�� �8����������$�%�� �,�� ������K����I'�� ���I�4��$���)�3��'L��$����������F� �����&����"���5�

(��,���������'�$���������)�$���$��$������$�)$ ���$��$�@����$5�H�� �$���)�$�������$������$�F�����&�������)�$���$��������)$ ���$��

�� �R�&��������+R�$C���,E����������������R�&���������

�$������ ���8�����)$ ���$�R�&���������'������&���$�R�$C��������$���"��$���$����$��

�� &�R�&�����������������$������$�����������'�$����������������7� ���K�����$"������������F� ��'��������$�%�� �������L5���'����,�����������$������$��������������$"��

�� �R�&��������+R�$C���,E��������������/�����&��������+R�$C�������"����������/�>�,�����������3���/�R�3�&��������+5���������������/�>������������/�>�,���3�-�/�R�3�&���������+ ��D������������/�>�����������/�>�,�R�&���������/�6�!�����+���������R�$C���>!�#�����"�/�����������������3����������������������������3�-��,����������������R�&���������

H����)�$����3����$����3�-������3��)��'�����$���� &'�������$"�%�� �,��

R�3�&���������������5����$����������������"�3���������������4�$���$"�

Page 219: Game Programming With Python, Lua, And Ruby (2003)

� ����

����&��������5�9�$����8������&������������F� �����3�������'����R�$C���!�#�����"��$���$�������������)��$������$�5�

�� �!����

%����"��$�'�$��������)$ �8�%��1�$"�������������$�)�����"����� �����$������$5�@�4�$����1�$"���������$������$�����������������$��%��1�$"�8��$�������$"�$�������4����$����'���������$�� ��4�������� ����.G.??��7��$���$��)�����(�����$��5������$"�$��'�����3���4������������2�$ � &8�����������$������)������� �$����������3������������8��$�����"�$�����'��������� �$$� ����������������$�:$�3�����������������$�����$���� ��3��)� ���$��$�����=1(�)�����A�$ �$"������ ��)����5�

1 ���)�%��1�$"��'��� ��4�����8��$ ���$"���"���$"��))� ����$�����������������4�����)�'���))���$��)�������)����� &"��$�����"����$���$������$� ����8��������4��F� ��$)���$���������$,�����$�� ��� ���$��$�����4�������������'�5������8���������"����������$"�4��$��)���)������$�� ���������������$��$������$M�������3���4���$������$��)����������� ������$���� �)��"�8�������4�GG�����$"�5��� �)��"�5$��G5��

.$������

���$������������"��4�� �������'��������������������5�0��"�$����8����$����'�������'������)�������������$����$������$�����������,������������5�0$���)����� ��)�$������)������8���$�/����$����8������)�$�������4�$��))� ��4�$�� �����������$������������K���L5������ ��4�$�,��������'������)��������3���4��$�����&������$������ �$���"�5��$������������� ��4�$��)������3����'���8������$"�������$���)����������$��"��$�$"������$����)� �������8�������'�������'���������� �$��� ������5��$�����8����� ��4�$���$$�$ �����$&�4� ���$�������$3������� ��������'$����5�

���$���8���'�3��8�4��3��������3��������$"�'���������3�5�/����$���������������$�$�4��)���)�$�����$��$����"�$�����I9�������$���I� ��4��"$�'��������������)��4�$�$"�4����$����������� ���$��������$��4�$���� ��4��F� �5�2��'��&���'�������,���$3�����������"���������4��$�'�����$��������$����9�$�����$�'���������������4� ����������$����� ������"�����$����� �� �����)��������$�����$"�$�5����$8����������4������)��3����$�8�/����$������$����3������7��������4������8�'�����������4��$���44�����)����$���,������������8���$�"���������������8����*:/��$���3�$�'��&�������&������4� ����5����$����'���)���8��$�� �$��$���������)���������������8��44�����������3���4�����$��������������������$������'����8�$���������:��(�(� �$��5�

���$���� �$��������)������������$"8��$������$8�"�����$"�$��� ��4��$"�K�$������3�����$�L8��$����$����$"5�1������)��������$���,��������$���7���������K����9�"����5!L�)��������$�� ��4��8�'�� �� �$����������� �����D�������8�����4��$������$���$���))� ��8��$���3�$��������4����� �����%�� �$������3�����"���$"��$��"������F� ��5�

&����4(6(�.$�������� �1 ��� �������$���)������.$�������� �������) �

Page 220: Game Programming With Python, Lua, And Ruby (2003)

� ����

���$�����))������$������)������$��������K���'$��$��������5�L��������$�� ��4��$"5�������)�������������������$"�4�������$�������$�'����3�����$��)����$��������)������'����$"5��

+��$��4(4(�.$�������� ����!���$���

!���$��� �����) ���� ��� �����)$� ��

�������� �������$����$����������� ����

W%�� �������$����04�$(�������� ����

L������� ����.������������� ����

6����� ���4����������� ����

!��"��� �������"��������� ����

!��� ������0��$������$�&���������� $��

%����� ����(��4�������� ����

R��������� ����1��������������� $��

R����� ����1����������� $��

������ (�'���3��������� ����� $��

$C����� ����0�F� ��������� $��

#������ ����� �$��������� $��

��?��� ������7��������� ����

7������� ����+�$��'�������� ����

����'�� ���������� ��4��$"�������$����$���8�4������������)���$��9���&����������$���������"��������� ���$��+�$��'���4������$��$�� ��������7��*�����5�.�� &��������'���

Page 221: Game Programming With Python, Lua, And Ruby (2003)

� ����

������� &�����$��$�� ������%�����'����$��������4�$������$&�54��)���5����$����'����������� �����$��������)�����=���7�M���� �$� ��$"������$������� �� &�$"��$�����$����4�$"��$�����$�'�$����K����9�"����5<L5�

&����4(:(�"�$� ��� �1 ���� ��$����.$������

��������������$���8������������$���$"�����7��)�������1�9���54�8��$�����$���4�����������$����$���������5�9���������4��$���$������3��� ��������������$������������� �����

$C�����

������� �������R�$C���/ ������>$C���>W��+M#���S$C���M,�

+��$��$$�$"�� ��4����$���F� ����$����$���8����'����$����������3���'��'�$��'���4�$5�0$��'���������'��&�4� ��'����������F� ��'����$8��$�������� �$��'���� �$���$����������$�� ��4����������'�����$��$�������F� �5��

(��,���������$����������$������ ��4��7�������$���R�������������$����$���5�9�����

�����4����R�������������

������� ������� ���� �������!�����������

���$�"���������������F� �8�����$���8��$��������'��������$"�$C�����$����������������

R�$C���/ ������>$C���>W��+M#���SR���S$C���M,�R�R������/R�$C���A�B>����>�����R�R���/����>W�����+R�R������,�

Page 222: Game Programming With Python, Lua, And Ruby (2003)

� ����

9�$����8��$����� ��4��7�������$��� ��3����78���4�� ������3������$�������F� ��8��$����3�����$���������'�������F� ���

�������S3����?�!��R�R���>3����E�����������������?���������������������������?���������������������������?���������������>������+R�R�����R�R������,� ������>�������

���$����������$��7 ����$������$�������$��)�����4�'����)��4�$���� ���$���4�$� ���$������3���4��$�5����$���,���������������7���������44����3���$�� �����3�8��$��������������'��&������&�$"����$��������������44���$ ����$ ����������5�H�,���)�$���$)�������$��$����$�������

•� +���.$������������ ��� �(����4�GG'''5���$���5��5"�•� +���.$������0����� ���� �(����4�GG'''5���$���5��"G�)5�•� +���.$��������$�����)��(����4�GG'''5���$�����5��"5�

����$��

����������$��4�$���� �8���8����������8������4���)����"�����$"�$��������44��������� ��=��$��04�$(5�����4��F� ��������"���������������"����������/���$�(���8��$������$5����������� ��������4����$����'����.??8����'������&�������4���)$��������������������� ��4������'���������$8�(�8��$��� �G�&5��,������&������������������������������$��$���������&�K�4� �)� ������$�����(���� ���$�L5�

�����2��

��$������������$����$"��$"�$��)����(5����� �����)������$"�$������$�.??8������$����������4��3������������$�� ��4��$"��$���)� ���$��������� ���5��,������&�������������������$������$������� ���$��$� ����� ����"������������$������ ��4���5�

������

���������������� &��$���������� �����A�44���'���������$�� ��4��$"�����$��3������������� ��)����������M������������$��������������������3�$ ���)$ ���$���$������$���)� �5������$�� ��4��� �$����� ������)���������,��+�$��'���$8�'�� ���4�$��4��������$�� ��4��������"���78�������'$��$�9�"����5 5�

&����4(;(������������������� ����,��) ����$����1�

Page 223: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

���������"���7� �$�������������4�� ��������)��� ����$�������� ��4��5�.�� &�$"��$���� ��4��'��������%���&����$����.��������.�$�����&����$���1� �'�������$"�4�����7��3�����$��)������ ��4���������� �$�����5�

+��$� �����$"� ������ ��4��8�� ���)�����'��&��$������������$������"������#����8�'�� �����4�����)�������������4������������

��5�����!����������������������������������L��������������R�#�����/������>#����+,���������������������������������"�����������������������&����������������'���������������R������>6���&��+,�

�������$�)��8���-�������� ������������3�������4�%���)����$���� ��$"�'���������$M����"����'�������$��� �$����$�� ������A�44���'����4�����)�$���� ��4���)�����������5�����������������)���������"��&$�'���"��������$��4��$����)����4���� ��4���'����$����� ���$���5�

�$)�������$��$������� �$����)�$�����.�����(���,������8�������4�GG'''5 ��������5 ��G4��� ��G4����#T4��� ��$)�5�

Page 224: Game Programming With Python, Lua, And Ruby (2003)

� ����

��������$�������

�����$"�$����$��"��4�� ����������'�����$��"���8����'���������� ���� ����� ����"����8������&-�H�,����$�� &8�)��������$�������������������'����$�����$�������45�������$"�"���������$������������4�������� ��4��$"���$"��)���A������)�'���F���"����8��$���������������������$�)���)�"������3���4��$�������8�� ��4������3��������$8��������3����������$���������5�

*#�� �$���

*3��0$��$������������3������4�������$��$��"���������'�$������'����)���������$��$��"�����$�����/�3�����$,������������)�*�������0$��$��%'����8��$��'��������)����������������)�����������������������,��*�� �$)���$ �5�.����������� ���$�,��..��������$������������$�����8�*3�,��'���������������3��/��� ��$ ��)� ���$��$3���$��$��)�����$"�4������������� �"��4�� ���$����������4� ��)���$"�)���5�

+������&���*3���4� ����)�����������������"������"� ���� �$�������������� &����������$5�..��������� &������$���������� ���$���$�����3�����������)��������4��"��������)������$���)������$��$�����&���)�����������3�����$���$������)� ���$����� �����3��4������)�%�5���� &��������������'��..�������������&�� ��$"����������"�����$��"��������3���8��3�$�'���������"��������$$�$"8�'�� ������7����������4����$��)�������4�������$���$��$��'����������5�

&�������&�����

9�������9�� �8���4�4�����4������������4������"����)�����������$�������8�'���$���$�����)�����$�)����)��.�����,���$$���������'����8��$���������$������ ���$����'��&�$"��$��$��74�$���$��)�����"���5��������$���������(,�������������"�����$"�$���$��9�������9�� ��'��� ��4�����������.��3��*$������$��$���$��*�� ���$� �%���5�1�$���)�����"���,��)$ ���$��'�����74������������������$�����8��������������$� ���������$����3����F� ����$�� �$����� ��������3���$��5�������$"���4��������3����'����� ��4����'���������$����'���8��$���������� �$�����������$� �$������$�� ��� �$��5��

�����$�'�������'���� ������7��$���$��4��3������������9�������9�� ���$"�$�8��$������&��������$"��������7��$���$�����$������$��$"������ ��4��$"�"����8�'�� ����� �$���'$�����)�����������$���"�����������4�GG'''5�������$��"����5 ��G���)�� �G*�����G� ��4�5���5�

9�������9�� ����$ �����'�������$�� ��4���K�� ������$������������)�����L�������454���$���$��54�5�������)�������)�����������������������������4�����)�������"���M��������$"��������

��)����4���8���� �$� ��$"��'�� �������� �K9�������9�� �L�������4����������"�$$�$"��

������� � >6� ���������/�MR�R�����P����M�

�����$�� ��4��� �$���������)��'��)��������������3�$�����$�� �$������������ ��4��������$�8� �������3�$���������4�'$�$�'��$�����8� �� &�)���������$�� �����$��)�����8����""����4�� �8��$���$� ��� �$��5�*� ��������$���������$"���� ��4��)����K ������������$8�

Page 225: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

4�L�'����'�� ������������ �������$����������$����������)���������������$5����K�����)������� ����$���&$�'������������$�� ��4�L5�

�����������������3����))������8� ����������)�$"���$���$���������$�8������������������$����'��$�������$�5������������ ��4�����$����������'������������$��������������54��)�����$��������5����)�����$�����5�

���� ������7��$���$��4��3������������9�������9�� ���$"�$�������"�5�*3������$"�)����%�����0�F� �� �$��������������$����� ��������3���$����� ��4�������� ��������3������������$�� ��4��$"��$���)� �5�(��,����&�������&�����$���7��4��8��� ��� �$���$�4�)����9�������9�� �5�����9�������9�� �� ������������$������)���������)�����$"� ��� �$��8����������������$��������5;5�

+��$��4(5(�&�������&������� �,�����!� �����

!� ����� ���)����

����+,�� �������� ��� �$��

��������"+,�� �������$���'��������� ��� �$������ ��4������A�$ ����� ���$����4����$"�

�����L#+,�� ��������� ��� �$��

���L#+,�� *$����� ��� �$��

��� ��� ��"L#+,�� *$���������)�$"�

�����L#�����#�����+,����������� ��� �$���������$,��"���$���'���� ���$������

��L#������"+,�� /���$�������)��� ��� �$����� ���$����4����$"�

��������������+,�� ������������"�����$�����$�

:��$"�������������������������$�����4��� ��� �$��'�������&���&������)����'�$"��

��6� ����L��������R�L��������/�A�+���#�����L����������M�����L#+,M��,���2���L����������M���L#+,M��,�

������'�����3�����$�4���$"�����$���$�'����$��� ������� ��� �$����$�9�������9�� �����������$������M������������������ ���� �$��$��������$����$��)���)������������

R�L�������/A+������,+����-�,+���,B�

Page 226: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

(������$����� ������� ������������+,�)$ ���$��$��3����J�����R�L�������� ��� �$��'�����$��

����+R�L�������,�

0)� ����8������ ��� �$������$,������ ��������8��������,��'�����99,�� ������ �$������

�����$5����� ����������$�����������L�����S%��D&�$C���+,� ����$���$�����������

�� &��������4������'��������L�����S�������+,� ����$�5�L�����S%��D&�$C���+,� �$��������'������$������)� ����$��� ����$��������99� �����8�������'$��$��������5!��

+��$��4(6(�&�������&��������������� ��$��

��������� �����) ���

�$C�������� ������F� �������� &�

���6����� ����D���������$ ��

������������� %$"����)�4�� �����$����F� ����"���3� ���8��$���"�����

����������� %$"����)���'����$����F� ��4�3� ���8��$���"�����

���#������ ������$��� �$������'������&����� ��4�����������3��

��3�����R��������� �������$�4�KL�RS#&�8�L�RS#L�%%�8�L�RS�R!W8����

L�RS#!R�%2�&��L��

���&������� ���� ��������3��KL&SRX2L������� &�$"�KL&S��&LTL�

����$��D5�����������������$�� ��4��)$ ���$���� ����'��$�)�$������

������ :������)�$��������

�3�$����� ������ �$�������$��������5!8���� �$���3������ ���������$���������$�4���������4����"�$�����

R�L��������/�A�+���M�����L#+,M����ML�����S%��D&�$C���+IR�S������I�'�G9�.��.F=�.�L�RS#L�%%��L&SRX2,M����ML�����S%��D&�$C���+IR�S������I�'-���-��.-��.�L�RS#L�%%��L&SRX2,M��,���M���L#+,M��,�B�

+��$��4(6(�&�������&��������������� ��$��

��������� �����) ���

�$C�������� ������F� �������� &�

Page 227: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

+��$��4(6(�&�������&��������������� ��$��

��������� �����) ���

���6����� ����D���������$ ��

������������� %$"����)�4�� �����$����F� ����"���3� ���8��$���"�����

����������� %$"����)���'����$����F� ��4�3� ���8��$���"�����

���#������ ������$��� �$������'������&����� ��4�����������3��

��3�����R��������� �������$�4�KL�RS#&�8�L�RS#L�%%�8�L�RS�R!W8����

L�RS#!R�%2�&��L��

���&������� ���� ��������3��KL&SRX2L������� &�$"�KL&S��&LTL�

����$��D5�����������������$�� ��4��)$ ���$���� ����'��$�)�$������

������ :������)�$��������

��������)�����A� &����3���$�������9�������9�� ��%��C�$��'�,3���������F�����"$5������������ ��������$������)������� ������ ����$����������'����� ���$8��$���� �� ������F�����8��$�4������F� ���������&���8�)�����$��$����8��$������$5�0�������)����� ����������������'������������)�)$ ���$���$�����������������4�$�������$8���� 8��$����$���))� ��8� �$�������.���$�� ���� ����8�����������$���F� ��3����$��"����)��'8��$������$��$������$5��

,�#������8�.$�����0����%�����

��3���$ ����������)����&$���������)�$����� ������"����)����.�����������G�/�����% ���������K'�� �����$�'���)$ �L5�������������������$ ��"��������������$���������$"�'��������3����������K ������(*�L��$���������)�������K ������/%�L�)�����&�$"���3�����$������8�'�� �����8��)� ����8��������$������$��$��'������� ��4�����5�%��������)����&$������3���"�$��������$ ������

•� %�5�'�)����'�� ������������4��� ���� �����������8� ��4�����)��������(*����4��������K$ ��4�������4������5�4�)����L5�

•� 5��4�)����8�'�� ������)�����'����������7����������$��$���$�������45�•� 0$�����������������)����&$����K�0�L�)������������)�$��������F� ����$��

���� �����������$�������������5�•� %�$������)������$�� ��4���������$������D���$����&����F� ����$��$4 ���$������$5�•� %���3���)����K5�3�L���������������$"��4��������"�����$"�$��K����5��4������4���$��

����5�'���4�)���L5�

����(*���������������'$��$�9�"����5���K$��� �������$��$�������4��������L5�

&����4('=(�+����*���� ���� ������)������)$��0$��

Page 228: Game Programming With Python, Lua, And Ruby (2003)

� �� �

�$����������$�� ��4��8���,���)�$���������F� ���K'��4�$�8���� ���8��$������$L�������������)�$���'��������F�54��)���8�4�������'������4�54��)���8� �$)�"�����$��'������ )"54��)���8�����4�� ���$���)������$��$������4������$�'���������54��)���8��$���$��'����� �����$�����'�������"�54��)���5��

��&�������&���������4����"�54��)�����

������� ����?�������/ ����?>L�����2�����+M�����M�M2������7����M�<-����.GF���'-���,������>�� �������/�>G������>L����/G��-��-�������-/ ����?>L�����2�����+M����-M�M2������7����M���:����.GF���9=���,�����->�� �������/�>������->L����/:�������������./ ����?>L�����2�����+M����.M�M2������7����M���:����.G<���=:���,�����.>�� �������/'�>9�����.>L����/������

9����8�����$� ������������7�����������K'�� �������������)�����$� ������� ����$����$��

)$ ���$�L�������4�����5�L�����2������������$� �������$���� ��������������4������4������)�'����������������4�������� ����$�5�0$ ���$���$������8��� ��4����������$�)��������)�$���

'���������� ���������$��L������������5�

�0�*�

%���$�)���)���3���4����)����/�����% �����������������'$� ��4�$�� ��������"�����(�"�$���*$������$��$��������4�GG'''5��"�������"�$��5$��G����������)����/%�� ���������������5���������� ���$����)� �����$�4��� �$"�������)�����"���8���"��)�������"�$��������4�GG'''5$�"��)������"�$�5 ��5�

Page 229: Game Programming With Python, Lua, And Ruby (2003)

� ����

+���+����

���$��'$8��$��$��$�� �����$������������4������"���8���������������)��������+�������$������"�$����$"������5��������� �������������'$� �����$��3�������$���74��������� ��'�����'���������� �$�������$���$���� ��'����������I���$�8I����$�F��������$�����4���$�������$&8��$��������$"��K��&�������$���������������)��������$�����L5�����������3�$��������)� �$)�� ������'$��$8��$�����)�����)���I.�"��$3����$I����������������$�$"����� ���5�

���$��,�����$��'$����������$��$������� ���$��4�'��)��'��5��������$��'$��7� ������� ������ ����������$��$����� ���$��'��$�����4��"��������$���$������5������$�'�������������$���3���4��$���)�����"���8�4���� �������$�������$�������$����$"��$"�$�5�

��$��������4�'�������������$8����� �=8��$������9������� ��$����$���))� ���������5�%)�������$"�������� ���������$��,�����$��'$����'��������������������4�$���� �� ���$�����$����� ���$����$�����3�$�������7��$��3����3���4��$��������������>/��������$������*$������$��$���� �$���"��.�$�������.��$�"���1����$�:$�3������5�*�.����'��&�$"��$���&�$"������4����$��������)�����$�����K���� ���$���$���������$��������'�����)�������a����L8� �����$"��������� ��$�����$8�����$"������������ ���������4����)$ ���$�����8��$�� �����$"���������&����3����$��� ��4���������5�

���������������������'��3�����$���)���$��5�0$������������"�$������������������ ���$����)�������$��8��� ������$���� �)��"���$��)�$��������������4�GG��� �)��"�5$��G4��F� ��G4�$����GL5�

������ �$��3�����$����������������)����.��$�"���1����$,��*�.8��$�� �$����)�$���$��$��������4�GG'''5�� 5 �5��G4��F� ��G4�$����G��'$�����5�

��$������ �4������)���4����$"�1�����$�����������1�7�������8����'��������������$�����5"�)8�5��))8��$��5F4�"����"��)������5����������)�������7��$��3��%�����������������$���"��$"��� ��$�����$5���� �$����������7��$����'����������E8��$�������$"�$�������)�����'��&����8�������� �����������$����������������� ���$���5�

�����'���������4����$����$����$��$�������$�����$���� ��4������

����#��� ���W��$����������)�

�$��

���+,�

����)�������$����4���������$� ���������$���)�����K'�� ����&���A�����������)�����L��$�������� �$����$���$�������$3���$��$�5�/$$�$"��������'����$����$���� ��4���)�����$������$"���$���'���� �����������"�8����$&8�"����'�$��'5��������'����$�������������$����$��������� ����������$����$3���$��$�5�

��$����������������$������� �$��"��4�8�'�� ��������������&����F� �������� ������ ���5��$��3�������F� ��8�'�� ������$���������������������:�������$��8����� ������

Page 230: Game Programming With Python, Lua, And Ruby (2003)

� ����

����������F� ��5�����������F� ����$����������3����)����������4���$��8��$��������������

$������)�������$8�����8�4�����)�$�������������F� ����$���$��5��

��$�����������������������5�""����5���5�*�)���������%�.���)������K�$�������)�������������������$�L8��$��5������������� �����4�$��$"���$����)������K)���)�����������

�����L5�H��������������F� ���$���$�����$"�����"���������������F� �8���&������

R�.6�$C����/�������>����R����+M.6�$C���>�""M,�

%������������F� ����$���$������8������)���8������$�)����3��'5���� ��$"������8���&������

���������F� ��K'�� �����$�'������$C���L��$�� ��$"������4���$�����������M����$"����'������&��������F� ����$�����$� ���$��

R�.6�$C���>����������+������,�

0$ ��������F� �����������8���� �$� ����4�$������������)�)$��������������$�4�������8�

)���������$"�����78�8��$��D� �����$�����'�������0+,8�����+,8����[+,����

������+?���8,��

R�.6�$C���>���0+=,���R�3��������$C����=�M ���E��������0������������

��� ��$"�$"����������$"8�4�� �8��$�������'����������+������"�������������,��

R�.6�$C���>������+9���.����,���L���"�������������������"�$��9����"����������������������������������.����"�����

��� ��$"�$"�������F� �,��� ����'�������#����+,��

R�.6�$C���>���#����+��,��������������������� ������?���������������������+?��������8,�

��$����������� �4������)���$���$"��3�$���K����� �� &���$��&���4������L8�������:���������)��� �����$"�:�������$�����&������$���$�������"���7���K'�� �� �$������$����������$�)$ ���$�L8��$�� �$��$ ��4��������$���))� ����$����� 5�

Page 231: Game Programming With Python, Lua, And Ruby (2003)

� ����

.�������� ����

���'��������������������������"������$��"��4�� �-�+���8���'������� &3�����8�� �����5����$"��������4��������$"�"������������8���,���)�$�������$��$$�$"��$��� &���$����������$"��$�����"�����F���������3���'������$�����4��$��5�����4��F� ����$�������� ���$�����4���� ������4�A�������$������5�

.������

0$��4�������'��������������������������3�����$����)�&$�'���"���$��'��&���A������������"$8����$���$8��$��4���������5�%$������������� �$���$������$"�$����$"��� ���$��4�$��$��"���$"� ��4�$������)$���$���44�����$���������� ������������������$��"�������5�����$�����������������F� ��)����'��&�)���"��������"$������'��� ������������������������4�������5��������������$����������$��4��F� ��'���������$��)��'�� ��4������)�����4�� ��������'��&������� ��������������8��$�����$�'��4������4���� ��4�$�$����$���������� �����������8������������)���������"����5������$�'��� ����$�)��������4��F� ���� �����)��������4����������������4���4���)����8��$�������7��$��������5�

����)�����3�����$��)�����$�8�����$���8�'���������3���4��$��4��F� ���$��4���)����)���:0�8�'�� ��'����������$����"�$����4��$��8������3��������4������"����������������0��"�$��������5��������$�����:������)� ���$����"�$����� ����������/� ������������8�:0������4�������3������'������"���� �����D��������$������� �4������)��$���� ��$"�'������F� ����$��������4��������$��������3��'����5�:$)���$�����8�:0��'������44����$��$�3���� ��������'�������"����)����8����������������$�����$�������� &�)����$���)�����4��$ �4�����3���4���8�@���$�%�����8�'���$�'��������$��4�$���� �8�3������'����8�11�������$�)����'��&8�����$���5�

����$�������������3������$"8�'�����$���>�����$��5�5����������8���8��)� ����8����������$"�������$������� &���)���3�������������"����� ���)��4���)����8��$ ���$"�������������3� �����/���$�(���8�����$���8��$���'�����������$5�

�� �$� ����8��������"�$�������$����4��F� ��'����������$���$����$"�"��8���������$�������4���� �������$�������$"�����5�.���$�����3����$)�������$�����$ ��4�����$��4������

����"�� �$��� ��� ������#��$C�������$"����������������$3� ����$���$������$5�

����#��$C����'������������F� �8�����4�� ����8�)���������������F� ��5����0�F� ���'������"�$�D����$��$���F� ������$���������� ��8��$�� ����4��)����� ���$������7� ��$"�

���������$��������3������������#��$C����5�

����$����'����������������3�$��$���������������"������������5�+�������������'�������������������$���74�$������'������������$"�����3����8��$������8��$��������$����������������'������ ��$"�$"������ �����$����� ���5�.���$���K4������L�'���� �$$� ������� ��������$���������3����'�� ���3�$������ �$$� ������������$��������������3����$���������$�"������������5�

��$�����������8�$��'��&� ���$� ����$�8��$��"��4�� ��'��������'��44����$��������$�����7��$���$����$"��+��K������)������4��)����+��44����$���$���)� ���$������M�������$��+���$�.��4������L5�9$ ���$���$�.��$��.??������74�������������$�)$ ���$���F� ��5�

Page 232: Game Programming With Python, Lua, And Ruby (2003)

� ����

���"������$�����$�����$��@���$�%�����,��������4��F� ��� �$����)�$���������+������8�������4�GG'''5������5 ��G�$��75����5�

����������$ �������3�����4�4�����������4����$�����$������$��$�������$�"����5�����������)�4�4����������$ �������4�����)������$��$�����������������$����$����$��$���4���)����5�

�))��

��44�������4�����)����������$���$"�"�������������0�� ���$����$������3���4��$�����*$���3������ �$���"�5�%����"����������$"8������������3�����$��$���$������0���5�������"���5�%���$�)���)��������$����������$����������3�����$�����3��������� ������ ����)���4��$�8����"������������3��������������� ����)�������K��&����$��� ���$&�$"����������L���������$,��$� ��������$��������4���)���5���44�� �$����)����������������������$"�������� �4���"���$��� ������$ ����M������������3�����$�� �$����)�$���$�������� �)��"��4�"�8�������4�GG4�44�5��� �)��"�5$��5�

%���$�)���)������$�)���������3�����$�����3���)�����������$$�$"��$���������8��$ ���$"�����)����'�$"��

•� 9�����$"�4��$��$�����G��F� ��5�•� .��4��7�$�����G��F� ��5�•� �����$�4�������$�� ��4�����•� �� ��$�����$�����$"��•� ��$��� ���$&�$"�•� ��"$����•� ������������� ����

•� 9�����G0�K�������$���������������������L�•� 1�����)����������$����������������•� 1�����)����������$��7��$���$��������

��44��������$ ������3�����$��)�����4�4���������$��$���� ��3���$���)� ���$����&��'����4�44���$��$���)� ��'�����������E��'������$��1��������$������ �$���$�������$������$�$����8������3���&��'����8��$���������$"��)�����������$��$���7��$���$�������5�

��3���4��$��'��&��������������$�������$���44�������� ������ ����)���4��$�8��$�� ���$������44��'��&���$������ ���3�����$��)������$��5�5�5�������������)�'����������'��&����'������������,����� &�K'��&����$���'���������$"���� &����������$������44�L��$������,����$��� ����48��������������4��F� ����������44����4������$"8�����&������$"��$�� ��3�� ���$����'����$"������&������4��F� ���������$�7����3��5�

, ��%$������ ����

��� &����������$��������3���4��$���))�����������.�������$�������8��$������������$�3����$�����������$,���������.���� &5����������$��$���4���������'�����$��$�.8��������������3����3���������$�� ���$�����7� ����3���.5�1��������������"���8����������������3�$"�����4����$���$ ����)������$�.� �����$$�$"��$�������� &� �$� ����4�������8�)����7��4���'������ ����$��$��'������F� ����)���$ �������������4��$�������� &5�

��� &����������� ��3���A�����������)� ���$�����44�����$���������$���"���"����������$������)������$� �$)���$ ��5���3����� ��4�$���8��$ ���$"��'�$��$8����$����8��$��

Page 233: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

..���������3��������� &������$���3���4��$�5���� &�����������4��������)��������$�'��&���$"� ������$�������� ����������M�����4�4����110�*3��0$��$�������"�����7��4����)���� &���������$������ ���5���� &���������"�$������"����)�'�3�������$�8��$��������� �$��$���������$���$8�4����8��$��)��������4��3������ �$ �4�8��������������&�$"���� &�����)�����8������4�������8��$���))� ��$�5�

H�� �$�)�$��������$)�������$��$���� &��������.�������$�������,��+������8�������4�GG'''5������5 ��G5�

+�� ���

�'��������"�$������7����$ ������$��4�$���� �8������3�8������4������"���� �������'������/������5���$ �����$��'������������ ������'������ ������$��'��&��44�� ����$�8�)����$��'��&����$�4������$��4���� ��������� ��� ���$�����3���5��'���������$����$"���F��������5��������� ��4�����3��4��� ���$����3���������8�����"$���'������������)���4��$������$��$���'��$������'�����$����������� �4������)���$���$"������$����)�����5��

�'�������44���������)����'�$"��

•� +�$����3�$���•� :��K�E8�6�8�'7�����$8��&�$���8��$������$L�•� �.�8���(8�:��8�1��� ���8��$��:��=��� &�����$����4�� ������•� � �����$"�•� �������$"��$��"�����$�•� /��1���3�$�����4��$��"�����$�

�'����������� �����'����4���������4����$�����$�8��$ ���$"��

•� %� ��4�����+���)����'��&�•� 9����'��&��4��3���$"�)� ���������$���4��)���28�9��8��$��2����•� %$���������3���)����'��&�•� %���������$�� ����$��������•� %$��$���$�������$"���

�'�������������$�����������)�������$�)���)��������4�$���� ��4��F� ��8��$ ���$"�.>�����8�2�48���$$��)���8�����$���8��$���� �����3��5�����������)��'�������$ ������$������)���"��4��)���� ��4�$������&��1��������)����$��$"8��%�%8��$��1�����$5�

�'������4��"�������������������������>��������>���>&�����������)$ ���$5������44�� ����$�� �������'���������)$ ���$������ �����������$���F� ����$�� �$�����������$"�'��������3��������)�������$���������� �������$����$�4����3���������44�� ����$���'������ �����'���8�F�����&���$�������������$���F� �5�����4�� ����)��� �����$"��$��44�� ����$��$��'������$���������$3��3��� �����$"��$��44�� ����$���F� ���$�����$� �����$"������ ����

+�������>���������>�������L8�'�� ��������� �����������&���)����$$�$"��'�������$���))���$��4���)����8�)��������44�� ����$5�

/�� ������������� �����)������3�$�����4��$��'�����8��$�������4��3���������� ��$���)� �������$������)����3� ��8��$ ���$"�$��'��&� ���$� ����$�8��������$"8��$���3�$�����4�� ��$"5�%���� ������4����$����������)��$���)� ��8���������4�$��$��4�$�'�� ��4���)�����'���������4����$"��$5�%)���������$"�4��$��44�� ����$��$������ ���8���� �$�

Page 234: Game Programming With Python, Lua, And Ruby (2003)

� ����

��4����$���'������$��'��&�4���� ���4����$"��$����$��$"�'����

�������>��������>��������>��������5�

�'���������������5������� �������+�������>��������>��������>5������L�'�����4�������$�� �$)�"�����$����&�4�5�������)����)� ����� ������� �$��$���$�������� ��4���� ��5�

���"�����$"��$��'���������&�������&�������&�������$�$��'��&�4��"�����$"�K��4����JL5�9��������������4����������� �����$��4���� ����

�����������>����������������������������������

���$����,���������'�$��������4���� ��������� ������� �$$� ���$���

������R��������L����+��������,E��� �R�L����������+��� ,E������������������������������"������������ >���������>����L���������+,�

��'�����4��'�����������$�$"��$�4����������

�� �����+,E��������� �������/���������>#��3��5������+,��������� ������>���������/�2�������������������>�������L�+9999� ������,����������������>���+,�� �S����S//IS����SIE�������������+,�

�'�����������)� �$����)�$���$�������� �)��"��4�"��������4�GG��� �)��"�5$��G4��F� ��G�'�����5�

�'����������������$�� ��3�� ���$�����)�������$����3���4����'��� �$����)�$���$��$����������'������1����78�������4�GG�'����������75 ��5�

Page 235: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

,�������

1�$����4�����3��4��F� �����3�����$���������$���74�������$������ ��4���5���$,�����)�����8���'�3��5�9����� ���$"�$����������4�$������������� ��$"8�������������3��������������������������8��$��)����3���������$�������"�����������4������������������������������'��������5���������F����$��44���D���)���'���,�����������'����$"�)������������$�"������3���4��5�

��4����$��4��$���)��������� ��4�����

•� �����$�������)������'����4����5�•� �������� ���$"������ ����$�)���"�����������4�'�����������'$��$���$�����3����$��

� ��4���������8��$�������$�����$���)����� ����$�����������'��$������������5�•� ������������$������)���3���4��$���))�������$"������$�������$"�����

��4�� ��������&��)�"����4��"�����$"��������$�$�4��"������5�•� 1����4��)�����$���"��4�� ���������$ ���������������)�� ��4��$"��$���)� ����������

�����$�����5�

Page 236: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

7��� ��������������

'8� 6��+������$,�������$���$�K�$�����4��� �G����G4��"���G�����L-�

�8� %�������$�������'����4������$�������4�������3���4�$"���������'���������4���������������������)�����"����8��$"�$��8��$�����������������D����5�

Page 237: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

*1�������

'8� (����)�3���$���������������������� ��4������'���������$5�

/8� (������)�'��)���������� ����$������)������$��$� ����� ����"����5�

28� .�������$���)������$"�$����$��� ���$����)������ ��4�������'��������'������������� ���$�"�����$���)� �5�

Page 238: Game Programming With Python, Lua, And Ruby (2003)

� �� �

��������������������������������

���"�����$"�'����(���$���� ���$"� ��)��������'��������(���$���4�����������������$�)� �����������$��$������4�����)��������&5����������������� �3����(�,��.�%����$���4� �)� ��$������"�����7��4���5�%�����$ ���������� �����4����&����(���(5��

Page 239: Game Programming With Python, Lua, And Ruby (2003)

� �#��

��������-��#������������������

(�$"�"���7����������$�4�'��8���&�������$��$����������5�

CC/����1������'$�

����� ��4����'�����))���������)��$���� ���$��������(����$"�"�5������������4������3��3��'8�������� ��4����������$ ������)�'� ����$��$����)���7��4���5�

Page 240: Game Programming With Python, Lua, And Ruby (2003)

� �#��

����*1��� ��$���������������

(�� �$�����7� �����$� �$&��'�����$��$���)��������$�������$"������$"�����)����'�$"�)$ ���$,��%��� ����$��8����$���������������4��"�����7� ����(�5��$�:��=�

�������8�(��� ��4��� �$����������$����7� ������4��"����������$"��������$��4�� �$"�

����TJ�*���>�����*$��*����K���'����3�������(��4������L���$�����������4��)���(��)���5�

(��)����� �$����������7� ����3�������+�$��'�� ����$����$��������$"�'���KLEQ���'

9>�Q$��Q%��>�?�� ���������>���L8�������'�$,���$�'����������������� �� &�$������,3������4���4�����������������3���4��$���$3���$��$��)���(�5�9���$�'�'�,���F��������$"�(��'���������$���4�����8�������$���)�����������5�

(������$,����3���$��������$����""�$"�)� �������5��������8���'�3��8��))����$��$���)� ��'�����4� ����)$ ���$���$�����&�����������'���4��"���������� �$��� ��4��)�������$�����""�$"������5����������&������ ������'��$������$���4�������$�����������3�����)$ ���$���� ��$"��� ���5�1�����)�������)$ ���$������$�'�����)�(���5�8�'�� �����"������ �������������� �����$�����&�)$ ���$��������������4�����$��)����$"����'��$��4��������3�������5�.����$����"�)$ ���$��������������$�������;5�5�

+��$��5('(����������&��� ����

&��� ���� ���)����

��$�">"�����D+,�� /���$�� ���$�����&������$"��

��$�">"���� ��+,�� /���$����������'�����$)�������$��������)$ ���$�

��$�">"��������+,�� /���$��$�����$��3�����)������� ���3��������

��$�">"����3�����+,�� /���$��$�����$��3�����)���3�����

��$�">���������+,�� %���"$����"�3�$�3���������3��������

��$�">�����3�����+,�� %���"$����"�3�$�3��������$���3�����

��$�">������D�+,�� ���������"�3�$�)$ ���$��)������&�

��$�">�����$��D�+,�� /���$��������$"�'��������� ��� &��)����� ������� &�

9���������$)�������$��$�����������$����""�$"�)� ������8� �� &��������(��������$��8�'�� ������3��������)����������5��"��� ��$�����$�4�"���������4�GG'''5��5��"G�� �5����5�

0$���$�������$"���3���4��$��������������(���*����������$�/���&8�'�� ������$��$��"�������$3���$��$��)�����3���4�$"�(���44�� ����$��K����(���*��$�� ���$��$�9�"���;5�L5������$3���$��$����� ���$�����$�����������$"��������3��������)���)����)��� ����� �������$�$� ����� ������5����4�������$"���4������4�8�(���*��44�������4��)��������$"��$������""�$"������"��8����4��$�����$�����4��3�����4�����""��� ����$��8�����&4��$��8��$���� ������ &���� ��'�$��'5�H�� �$�)�$�������������3�����$�K�$ ���$"���� �� ���L����������$�/���&,��+������8�������4�GG'''5"���� �5$��54�GY����&G�����G5��

&����5('(�+������-�*���#������ �� ������)$����������������)$��

Page 241: Game Programming With Python, Lua, And Ruby (2003)

� �#��

Page 242: Game Programming With Python, Lua, And Ruby (2003)

� �#��

�������, ��� ����

%������$���$��8��7� ���$���)�(���������&�$���'$��$���$���� ������ �$&�5�.�$&���������4�����A�$ ����)��������$��8��$���������� ������A�3���$�����4��"������� &�5�(����$������� �$&�F�����&���$����$"�"����$�������)$ ���$8���� �$&�� �$�������� ���3����������$������$�3����5�

.�$&�����������������$���)��������$�������$"��$��������������4��"���5�+��$��� �$&�����7� ���8�)�����������4�� ��4������$�������� ����)�������(��3�������� ��$�8��$�����$����� ��4����� ��������7� ��������$��$���4������)�������3�������� ��$�5�(������$���� �������$�8������ �$&��������������4����$���������������$"����������$���

����D�EE/N���"������������O�

0����� �$������"��$�� ��4��7��

L���D�EE/N����������3���S$� ���/������������������S������S���D��/������������$�"��S�����/�������������������S���D��/������������ ������/������������������S�������/�..�������������3��/�������������������/��������������$��D"������/�����������������S�������/�NO�����������������/�NO�������������S������/� �������+��� ���,�����������������������+�,������������������������+��� >���S���������,�������������O�

���� �� ���

(������.���$����� �����&��4$ �����$5��������&����������)�"����$"�������8���4� ������'��$���,���F��� ���$"�)���������$5�+����������$������4� ����$����������&��4��������$�����4������8�(������D������ &���8�A����8�4���$������8��A�""�����$��8��$��������������$�����8��$���4� ����$�����������4������� ���"$����8�'�� �� �$���� �$)��$"����)����5�%�"����4�� �� ����������������$���4�������)��$M��� ���������$���4�������74� ��� ����������4��4�������� &������))8�����

�0�*�

�����&����������������� ����$��������� ��4�����'��$���� ���$"��������������)� ��4������$"�"��5�%����������� ���8���� ����������"����3������ �����4��"�����$"���$"�"�8�'�� ��)�� �������"$�'������3������"���$������� ���5�

Page 243: Game Programming With Python, Lua, And Ruby (2003)

� �##�

'���� ��4���$��������������)��������$�����$���)�(������,�������$"��������$"5�9����7��4��8�����9�"���;5�8��$�'�� �����)���$�����$���4����������$���������������)���))������� �$��I��$���������$"�����"$��$�5�

&����5(/(�+�������� ��)�� ������)$���� �� �-�#��$�0 ��00����� ����)�� �� �

�������$����$�.�����$���������$�����$������� ���$5��$�(�����������4���$��8�������'����������������� ����$�����$���

�/��$/-�''�J��3����������/�P�$/-P�''�J��3����������/�P$/-P�

�������+�)���

(���������$��� �������4�����$"�"�8����3����������������3������$�����3����4��M��$�������3������)�����3�����������3����4��5��������� ���4����$�(���������'$��$�������;5���

>��������� ��������$�(������3�������'����$�������� &���$�'�� ����������� ��������$������

�$��������"������$������������������4� �)� �������)�$�������� �����$"�����������&��'���5�%)������ ������� &�����7� ���8��� ���3����������������������5�

.��$�����

�$�(�8�����3�������))���$��)���� ���������������� �$������������5���������$�������

�$��������$��������$� ��������� �$�������� �����)�������4�4������)��������$��

�7� ���$M��3������$"��������� �$������������5�%���)�>�����$��5�8�(��������������$�

������$��� �"$����$��)�������$�� ����5�

�����$$�$"�����)����'�$"���$����$�����(���$���4��������

Page 244: Game Programming With Python, Lua, And Ruby (2003)

� �#��

+��$��5(/(�.�$ ����� ��+�)���

������ �� ��"�$��

�������� *������)������������

��������� 9$ ���$�������������3��������

����� >����$���

���$���� /����$������K������4�� ����$�)�����$"�4��$�L�

�����"�� .���� ��������$"�

��$���� %��� ����3��������K�5�58������������G�����L�

�������� �$��4�$��$�����������)��7� ���$�

���������� .�4��$���������������3��������

�?�/������������+?,�������+����?,�

H��'������������������$���4����������������$�"�����&$�'�������)��������$"����$�������8�

���$����������� ����5�H�� �$����(����������������$�3�������������$"��'���A�����"$�������4����$��I����A�����8I���&������

������+�//���,�������+��//�,�

�����������$�(�8�������$�� ���������$���$���� ���3�����K���$���L���&���$��������$"�"��5�

&��� ����

%��������'�$���)��)�������)�(������������� �$�����"$�)$ ���$�����3��������5��$�)� �8�'��$������)�$����)$ ���$��$�(�8������������ ���������"$�$"�������7��������)�����

)$ ���$������"�3�$�3�������5�9$ ���$�������� �����������$"����� ��������&��'���8�'��������"�$�������$��7����$"��

������������+��"�,�����S��������"�����

'�����������������$�����)�����$�'�)$ ���$8���"������$����"��$�������)$ ���$���&��8�

����S��������"���4����$���'��������)$ ���$�� ����������8��$������������(������)$ ���$�����3��5��

9����7��4��8�����������A� &�)$ ���$������4��$������������$���������� ���$��

��������R� �������+,������+M7���I������� �������KM,�����

Page 245: Game Programming With Python, Lua, And Ruby (2003)

� �#;�

%)���� �����$"���)$ ���$8���� �$� ����������'�����

R� �������+,�

H�� �$������4��$������3�����)�����)$ ���$,�������������������$"��������

������+R� �������,�

+��$�����$�������������$���$������$���4�����8���� �$����������(��$��� ����������,�������$"�'������)$ ���$����'�����������$�$"�������������������5�

9$ ���$�� �$���&����"��$������'���8���&���$�������7��4����������&����$���"��$���$��

����"$��������0��

��������R� �������+0,������+0,�����

+��$���� ���������)$ ���$�'����R� �������+�,8������$���4������4��$������'�������

����"$������0C�$������ �������5�H�� �������������"$�����)$ ���$�������$"�'����

R� �������+M�����M,5��)�$����"��$�����4�������������)$ ���$8�(��������� �����

����"$���������������"��$�8��$���$����� �����)�R� �������+,8������$���4������4��$���

���5�

��$ ��)$ ���$�� �$��������������3����������$�(�8������ �$����$����4�����������"��$������������)$ ���$���������� �$��������$��5��������&��������)������4�'��)�� ���������$�(����$�5�

�$�

���3��������$��������3������������$��3���5�H�� �$�����3����������������������������

?�/�����

�$����� �$�������������'���������3���������7�������� �� &�$"���������)�����3������������

������+?//���,�

�����������A�3���$���)�$��3���8�����)���3���������������"$������8���� ����������7���5�

��������

(���44������������$���������K(L8������ ��K'L8�����4���K)L8��$����3����K*L��4�������5�

������ �$����)$����4����'�����)����)���$"�4�������5�7���$����$"������������������$���

������+�(�,�������+9)9,�������+��*G,�

Page 246: Game Programming With Python, Lua, And Ruby (2003)

� �#!�

�)�����$���������$����$������$���4�����8����'����$��� �������(��������� ��������$"���$�

)�����$"�4��$��$�������$��"�3�������>�������������$��$�'���������������� �$&5�(������$,���������'������$��$"��))���&����$����������$"�"�����5�%���$�������$�(������I����I�$��������������$�)�����$"�4��$��)�����5��

H�� �$�����"$�$���������3��������������$"�����/���"$��

0/����������+?,�

(��������44���������4�������"$��$����

?����/�-��=�������+?��,�?���/���?�������+?��,�

�0�*�

����� ���)������$"�����3�����)���3����������� �������$�����"$��$�5�

(���44������������$�������������� ��������$����4�������8��$ ���$"�

(�

'�

)�

*�

\�

//�

]/�

1�

4�

1/�

4/�

���������������4������)�����������������$�'5�(�������$������$�����"� ������8���8�

�$�����5�(�"� ��������$3���������"� ����74������$��

���������/� �����

Page 247: Game Programming With Python, Lua, And Ruby (2003)

� �#<�

'�������"� ��������$����� �$���������$�� ����$������)����������"� ����������$���4��"���������)��$�$�����

�������� �����?�/������������/������

�0�*�

.%:��0��

(��������7���������������$"������3����'��$�������$"�4�� ���$ ���$��$��A����$5����������3�������'��4�'��$��$$�$"�����"���A����$��)������)�������"����$����"��������)�5���������8�(��)�"�������������)��������)������A������"$�)����8���������������$�'�� ������4�������"$��$�������4��)���������� ������$��)�$��5�9����$���$ �8��)����������3���������������� ���'� ��'����$��$�����"$��$������8����$�(������4��)���������A����$�)������"��������)�5�����������4�� ���$ �������������� ��$"����$�)����3�����$���)�(�5������ �$������������8����������4������$������������������'���������4����������"$��$���������$���'��$�4�������5�

%$���4����$����4� �)���$�������$���$$�$"��A����$������4�������4�� ���$ �8�'�� �����������������$�������;5�5�

+��$��5(2(����� )��� ��������������

������������ )��� ���

�5K��"����L�� WK�74�$�$������$L�

�5�� $�����K$���L�

�5�� P�G�

#5�� ?���

�5�� 55K����$"� �$ ���$����$L�

;5K��'���L�� R�S�RQ�SQ�YQ�QQ�

(�������$��������$�����������������$���)� ���'�������� ����$�.�1������������)$ ���$�5�

����������������3��������)���� �������(��'�������������S�����)$ ���$��$���$ ������$������)�)$��������� &����������������&�)�����������.�������$��1����'��DD��5�����)$ ���$��������������$�������;5#5�

+��$��5(3(���� ���$�!� �������������&��� ����

&��� ���� C���

����>�$��� %�������3����

Page 248: Game Programming With Python, Lua, And Ruby (2003)

� �# �

+��$��5(3(���� ���$�!� �������������&��� ����

&��� ���� C���

����>������ %� � ���$��

����>������ %� ���$��

����>������ %� ���$"�$��

����>����-�� %�����$����������"$���)�������"��$������ ��4���A����$���)���������$�3����

����>������ .����$"8�����$������������$��"���$����������$�"�3�$���"��$��

����>����� .���$��

����>�?��� *74�$�$��

����> ������ /���$�����"�����$��"���$��"����������$�"�3�$���"��$��

����> ��?��� ��$����"��$��$������$�����$�������$���74�$�$��

����>���?��� /���$��=PK�W�74L��

����>��"�� (�"�������

����>��"���� ����������"�������

����>����� �4�����"�3�$��$����$��"����$��)�� ���$�4�����

����>���� ���K�5�#L�

����>����� ��'��8���������������������74�4�'���

����>����� ��$��

����>�J���� �A���������

����>����� ��$"�$��

����>�������� /�$����$�����

����>�����������������$�����)�����$����

������)$ ���$������)����'�����������4�����$�'��$����5�(��,��������'�$��������3�����)�4�5��,�����������

R����/�+����>��,�������+R���,�

�)���$���������)�$��������$"�$���)���"�3�$�$����8��,�����������

R�����/�+����>���+��,,�������+R����,�

, ����

Page 249: Game Programming With Python, Lua, And Ruby (2003)

� ����

(���44���������$"�������7��3����������4��5�H�� �$�����"$�����$"��F�����&�����'����$�����8����������������������$ ��������A������$��4���$������8���&������

����� �/�+M��M,�������+����� ,�

H�� �$$�������4����������&��(���� �$ ���$��������$"�8����(�����������'������� �$ ���$��������$"����$"��'��4������8���&���$�����)����'�$"��

����� �/�+M��M,�������+M���������M>>����� ,�

��������������A����8���� �$����������4�����$"����$"���$"���A���������������A������� &���8�����$�����)����'�$"���

''���������� �/�+M��M,�''����J��3������������������� �/�+I��I,�''����J��3������������������� �/�+AA��BB,�

(���44�����������3������������������������� �$�4�� ��A�����'����$�����$"��'��������$"�$������� �4����A�$ ����

R������"�/�+AAMJ����MBB,�������+R������",�

���(��������44�����������$�����.���4���� �4����A�$ ���'��$���$"�����$"�5���������A�$ ���������������$�������;5�5�

+��$��5(4(�����*���)��,�B�������

,�B������� +����$� ��� ��

Q��� ����������4�

Q$�� �� &�4� �8������������������ ���� ������4���

Q �� 9����)����

Q��� ��'��$��

Q��� .�����"������$�

Q��� 2���D�$��������

Q3�� >���� �������

QQ�� �� &������

QM�� ������A����

Page 250: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��5(4(�����*���)��,�B�������

,�B������� +����$� ��� ��

QI�� ��$"���A����

��������4����$�����$���������'��$��$��7�$"�������$"��$�(�8�����)����� ���� ����������4������$���K$�������8����'����.L5�

��� &������3��)����������'��$���,��� �����$"�����$"�5�9����$���$ �8������ �$�����������4�� ������$"���$���3�������$����)� ���8�������'$��$�9�"���;5�5��

&����5(2(�C�������%� �� ���)� ���� ����#�����$ )$��$����

(�� �����4� &�"���'�����������$���������������$"�)$ ���$�5�����������$���$� ������������4����(���������3�������4)���)��������'��&�$"��$��$��44�� ����$�'�������3������$"���$���$"5�������)$ ���$��������������$�������;5;M�����������������4�$���'��������

�������S�����"�)$ ���$5�

+��$��5(5(�������, ���"���$���������

&��� ���� ���)����

�����">$����+,�� /���$�������$���$���$���� ��� �����)����� ���� ����

�����">�����+,�� /���$��������$"��)�"�3�$���$"����$���$���$���$���� ��� �����

�����">�����+,�� /���$����$������4����$�����$�)�����"�3�$�)$ ���$�

�����"> ����+,�� :����4�����$���� ��$"����)�$������)�������� ���)���"�3�$�����$"�

�����">����+,�� /���$��������$",����$"���

�����">������+,��/���$���� �4���)���"�3�$�����$"��$�������'�� ������������

�����">����+,�� /���$��������$"� �$ ���$���������4� �)� ����$��"�3�$�

Page 251: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��5(5(�������, ���"���$���������

&��� ���� ���)����

�����">��$�+,�� /���$����������$"��)�����"�3�$�����$"�

�����">������+,��/���$���� �4���)���"�3�$�����$"��$�����44�� ������������

�����"> ������+,��

/���$����)���������3�����$��)���"�3�$�����$"���$"�.,������� ��������)���"��$����$�������

�����">" ����+,��:����������������3�������$"�������� ��4�����$�

�����">"��$�+,�� /���$���� �4���)���"�3�$�����$"��)�����$$�$"�"�3�$���"��$����3��������4� �)� �����$"�

��������$"������������������������$�)$ ���$��)���4�����$���� ��$"8�����'�$"�(��������� ������"����$"�����$"�����������8���� ��4�4�����$�8��$������$������K ������ �4���$"L5������� �$����������$��������4�� �������������M��������������$����$�������;5!5�

+��$��5(6(���������� ����!� ������� ��$��

,����$�� �� ����

>�� %��� ���� �����

Y��� %�����������

Y��� %��� �$����� ���� �����

Y��� %�����"����

Y��� %�����'�� ������������

Y��� %���4$ �����$� ���� �����

Y��� %����4� �� ���� �����

Y��� %���44�� ������������

Y��� %�����4��$���� � ���� �����

Y?�� %�����7��� �������"����

Y8�� .���� ����'������4����$�����$���

:��$"�������)$ ���$�����)�$��4�����$���$����� �������������3���������"��)��'������$"�

�����"> ���5�9����$���$ �8�����������(�� �$&���������� ����)��������������I�I��$�����"�3�$�����$"��

R�#������/������"> ���+I����I��I�I,�������+R�#�����,�

Page 252: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$������ �$&�����$��$�����(���$���4�����8��������"�3�$������� ����$��)����$���������$"8�'�� ����������� �$�� ���� ������ ����$8���"����)����,',�'�� �����)����5�

(��,��������������'�$�������)�$��)����������'������������"�$�'�������$���"�3�$�����$"5�

H�� �$����4������K>L������'��� �����

R������"�/�I ����$����$����$���������$���I�R������"-�/�+�����"> ���+R������"��I�>>>I,,�������+R������"-,�

����� �$&�'����)�$������'������$���$���������$"������������� ���� ������ ����$��)��������)�����)��������5�

+��$���

������������������$��������� �����$�(�5�(��������4��������8��� ������,����4����$���������������������$��������� �����$�(�5��$�������)�����������4��������� ���$�����8�(������D�����������������4������������������5������������(�,��"�$�����4�4�����������4���$������ �4������)������$"�"��4���)���F� ��8�$�����8�����$"�8�����3�$�������������5������������ ���������$"� ������� &���8���&������

R���$���/�NO�

�)����'�������4��$�����R���$���K��$"�������+R���$��,L8����'����"�����)$$��$����8��������$"���&�������� 5�������������$�A�����$��)�����$�����������������

�����(����������"$������R���$��5�

����������������3���'������$�(�5������������������ ������$"���� &���� �����$"������)�������4����$��4��"�����$"� �$��� �����&��A���8���$&��������8��$��������5�������� �$������)$ ���$��������&����������$���� ���$���������$���������$�������5�H�� �$������������&����F� ���������������������"$�$"���&��G3����4���8���&������

R���$���/�NR����$���/����R������/�M!D��;M�O�

H�� �$����$���)����������������'��������)��������

������+R���$��>R����$��,�������+R���$��>R�����,�

������� �$��������������$��$������G�������4��'��5�H������������� �����$"��� �������4�������������)���F� ���'��$� �����$"����������5�H�� �$����$�� ����������������&���$������8���$"���� &�����$��$���� ���)���$ ��8���&������

R���$���/�N���-�.�=�9�:�<�F�G���O�������+R���$��A�B,�

Page 253: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

���� �8�'��$�����$������ �$&��$������$���4�����8���������������G�����������������8�$����5�

������3�������� ����������"$������8����$��3���5�

H�� �$���7����� ���$������4���������$����������4����������"�����8���&�$"��������4������3�����������������""���5�������� �$������ �$���$���������������

R���$���/�N���$���/�N��/����$�/�-O����$��-/N��/�.����/�=OO�

%������$���'���������$�4����������������4����������$"������������$�����������)$ ���$����������$�������;5<5�

+��$��5(:(�+��$��&��� ����

&��� ���� ���)����

��$��>�������+,�� /���$�� �$ ���$������������

��$��> �������+,�� :��������7� �����"�3�$�)$ ���$��3������������$����)���������

��$��> ��������+,�� *7� ����"�3�$�)$ ���$��3���$���� ����$�� ���K�$��L��)�������

��$��>"����+,�� /���$��������D���)�����������

��$��>�����+,�� ������������������$����$���"�3�$�������

��$��>�������+,�� �$�����������$�������"�3�$�4������$8����)��$"����������������$���

��$��>����3��+,�� /���3��������$��)����"�3�$�4������$8����)��$"������$�����'$�

��$��>�����+,�� :4������������D���)���������

������)$ ���$������'��&��$�����������'��5�9����$���$ �8���� �$������$��>"�����$��

��$��>����������4��������������$���8���&������

R���$�����"���/���$��>"���+R���$��,�''!�������--��������������� �������$�����$��>������+R���$����--,�

H�� �$��$����������$�������� ����$�4��$���$������������$"���$��>��������

��$��>������+R���$����������,�

H�� �$�4��$��������� �$��$����)�������������$"���$��> ���������

��$��> �������+R���$���������,�

*3�$����"����� �$�������������������$������8�&��4��$���$������������������������5�H�� �$�������'����3������'�$���

R���$��A9B�/�M������������";M�

Page 254: Game Programming With Python, Lua, And Ruby (2003)

� ����

��8��)����'����4��$��$"�������� ���$����3�����$��)�����������

R���$���/�NR����$���/����R������/�M!D��;M�O�

���'����������� �������)$ ���$����4��$������� ��&��G3����4�����

��$��> ������+R���$���������,�

������?��)$ ���$� �$�������������������������3����������5���?����&������������$���$��$��7��$��"�3����� &�����$�7��&��G3����4����)���������������

��?�+R���$���MD��M,�

������������������F� ����$�(���$�������$���������������3�������8��$��4�$��$�����$����8�����)�� � ��8��$���4������$������� �$���� ������4�$�����5�����(��4��"�����$"����������������'�����)���4����$��$"���������$���00���$�����)�����)��$������$ �8�4������4����8� ������8��$���������$��$"�'����������5��

���4��� �$����������������$�(�������4�����3��������$������������3�����$������������'�������������'���5�*3�����������$������������F� ���$�(������$�'��������3�������������8�'�� ������$�����$����(�������������)��������)�$�������3���5����� ����$���

���S"��������$����$�����S���������$�������'���������$�4���������������������)���"�3�$���F� �5�

+��&��������'���������������'����(���5�8�'�� �������������'����������$�������'��&���)���$ ��5�:$��&����"������)���$ ���'��&���)���$ ��������"$��������(�,��"����"�� ���� ���55���$ ��'��&�����������$���4��3�$��"����"�� ���� ���$8������������)��)����������$�$"�'��$���������F� �����3�����$� ���� �����������.��$��)��� � ��$"���F� ���'��������4���$"�"����"�� ���� ���$5�

+�������

������������'�4��"���������������4������$"������$ �5��$���������������$"������8��� �����&��$���$��������������������4������)�����������������5�������������$��'���������4����$��������������$"8��$��(�,��'������������$�A�5�(��������I ��4�����3��������������$"8I���$"� �����$�����������$,��� �������4�����$"������������������������$������F������ &���)� ��������� �$���� ��������$���$��$���$���5�

��� �������� �����$�8����)�����������3����)$ ���$���������� �����$���$���

��������R� �������+,�������+M�����������"M,����������>�����+,�����

Page 255: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

H�����$� �������� �����$����$"����������>��������

R��������/����������>������+R� �������,�

0$ �������3���������������� �����$�8���� �$� �� &�����������'����

���������>��������

R��������/����������>������+R�������,������+R�������,�

+��$��$��$������$���4�����8������ ����'�������'������R�������������4�$���5�������������

�������� �����$�8�������������>������5��$�������7��4��8������$���4������'����4��$��

�����������"8��$�����$�R��������'�����7������������$"5�

H�����$"����&������ �����$��5�.�����$������������������������������������ ����$��

4���� �$������������$�7��������������$�������5��������������>������������������������

�������)$ ���$8��$������7�������� ���$����������$��)�����4��$������� ��5�

�)�����$�����R�������� �������� �$��������

R��������/����������>������+R�������,������+R�������,�

����������'�������'������������������������������$������4����$"�����5��

C����� ��

:��������������������4����$��.�3������$�(�5������������'����4����)����������)������������$����"����������5�9�������������4����$�������� &��)���������$����� �$���������������$���F� �5�%���"�������������4����$�����4��$���5�

-��� 0����

���$��)������$�(�� �$���������4��)��������8�$�����8��$��$���� ����8��������� �$$���

��"�$�'��������"��5�(����� ������$����3�8������������$"���2%%��$������������ �$����������))���$������$"�5���������������$�)���)������3���'����������(��&��4��)��������)��$�� �$$����������������$��)����M��������������)����'���

�����

$���D��

����

������

����� �

Page 256: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

�����

������

����

���������

� �

����

�������

�����

�����

���

��������

��������

������

������

������

������

%����$����� �$3�$���$��$�(�����������$���$���3�����������"�$�'�����$�$���� �����$����

�4�����������8���&��R�3����$��>�

��� ��$�, ��� �����

.�$�������� ������$�(������������������������$�(�,����$�� �� ���4���$���.��$����� ��5�

� 8������8��$��������� ����$�������3���� ����$5�������������$���� ��������$�����&����&������)����'�$"��$�(���

� �����������$���D�N����� �����������$���DO�A�����$���DB�����

%$��7��4����)��$�� ��������$�������4��$���'�������7������������$����'��������

?/��� �?1��������������+M?����������������M,����

H�� �$��������� �$��������������$���$� ����7����"����������$�����

Page 257: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

� �?1��������������+M?����������������M,�����������+M?����"��������������M,����

���)��

0$���7�������� ����$����4�$"��������$������������������48�'�� �����&����$�� �� �������&������)����'�$"��

��������������$���D�����

%��� �$�� ����$����4�$"� �$��� �������������������4��

�������$���D������������

2������������4���(�����������4������4��$����������������)�$�������

?�/���������?1������������+?,�?/?(������

�������4������F����������������4����$����$"���������

?/���������������+?,�?/?(��������?//���

���� ������48���'�3��8����'�������������4� ����4�� ���$�����4��"������,�������5�(������

�'��3�����$���)����� ������45�����)������$���������'����$�������

���3����$���/�3����3����3������$���D�����

(�&���$�����4� ��� ������48������������74������$�����$,��$� ��������

���0/��������������+0,�����

��������4�4��$���=��������������������"���������4���������5�

������ �$��3�����$��)� ����������)������3����$"��������8��$�������� �4������)��������$"�����"���� ��&��G3����4�����)���"�3�$��������

���3����$���N��3��O�����?���������$���D�����

Page 258: Game Programming With Python, Lua, And Ruby (2003)

� �� �

%$��7��4����)������3�����$��)� ����������$"��3�����"�3�$�������������)����'���

R���$���/�N��-�.P�����/M�������$��/������O� ���D���3��������R���$������������+D���3����,�����

�$ �����'���������)$� ������������������+,�)$ ���$�)����������$"�&��G3����4������

���D���3�������������+R���$��,����������+D���3����,�����

�$�������$���$ �8������+,�'�������������$����3���������������4���������$�������$������������

�������?�3��������������+R���$��,����������+����?�3����,�����

(����������������������$���������$�3�����)������)$ ���$������(�� �$&5����������

�������$���D��������$������� �$����������������$���������7� ���$��)������4��$���&�4����

����$�7���������$�������)����'�5��������������$��$���D������������������������$����$���"�3�$���� &5�

!���$���

1�����8�4� &�"��8�$����4� �������������� ��$��������������$"�"��������"�$�D��"������$������$���4� ���$���3���� �������$�5��$�(�8��������������4����$����'��������������4����$���$��3���������K���"��������L������5����$��)������� ����&����'����$���������$�������)�"������3��������5�%�4� &�"���������&���&��������

R����D�"��/�N��������� ���������/� �������+,�����������"NO�������������� �������-�/� �������+,�����������"NO�������������� �������.�/� �������+,�����������"NO�������������� �������=�/� �������+,�����������"NO������O�

���$�����4� &�"�� �$���� ��������&��������

�����/�R����D�"�> ��������+��"������,�

��������

(�������������)����$��������������������4��3������)���$�� ����$�����$��5�������������4����$�������� ��������"���������$�����%���������$,��$� ����������������$"�"�8��$���������4��3����������4������.����������5���������������� ��������8�����������)�������$"���$�4�����$8��$��)������������ ���)$ ���$�8��$��)����������)� ���������$���G08��$��)���

���""�$"8��$���$��)���������5�����)$ ���$�������� �������$������$>���$����������4�$���'������ �����4�$��$"�)$ ���$8���&���$�����)����'�$"��7��4�����

�������S�����"��������S��$���

Page 259: Game Programming With Python, Lua, And Ruby (2003)

� �;��

�������S������������S���

%�)�'��)���������������K������$������$"L�'���� �3������$�����4��3������ ���$�5������������'������� �3���������5�

+���.�����������

�������� ���������4��3������ ���)�(�,�������)$ ���$�����5����� ����$����$3��3���������������$�������;5 5�

�������������)$ ���$������� ������4�����)��������������)��������� ��������5�

-�)� A � )� ��������

�$4���$����4��������$���������'��)������$����5���������$�����������������$��'��"������

3����������S!�����$��S�����8�����)������)��������$"��$�������������)���'����$"5�

S!�����$��S����������������A�3���$�����S#�6!��$��S#�6��5����� ����$��G0�)$ ���$��������������$�������;5��5�

+��$��5('=(������������-�)� A � )� �&��� ����

&��� ���� ���)����

��>������+,�� .����������"�3�$�)����

��> �����+,�� 9�������3���������)������4��)����

��>������+,�� 04�$������$�����)�����$���7��������$�������������$�������������)�����$4��)����

��>������+,�� 04�$������"�3�$�)����$�����$������������$������$���$����������)$ ���$����������$����$�'���$��)��������)������ ������������� ������

��>�����+,�� 04�$����)�����$�����������4� �)�����$������$����$�'�)������$�����

��>�������+,��

04�$��$�����)�����$���7��������$�������������$�������������)������4��)����

��>��� ����+,��

/���$����$����)��������4������)����

��>�����+,�� .�� &���)���F� �������3�����)������$����

���E������+,��

.������)����

���E �����+,��

��3����$��'�����$���������)����

���E�����+,��

/���������)����� ����$"����"�3�$�)�������

���E������+,��

/���$���$��$��"���������������$����$�'���$��)��������)������� ������������� ������

���E���D� ������$��"��������)����4������$�

Page 260: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��5('=(������������-�)� A � )� �&��� ����

&��� ���� ���)����

+,��

���E������+,��

+����������3�����)��� ���)�������"��$����������)�����$����)����

+��$��5(;(�������.����&��� ����������

&��� ���� ���)����

�������+,�� �������$�������'��$�������"��$���������

�������"��$�"��+,�� 9�� �����"����"�� ���� ���$� � ����$������$������$������)���F� ��� ���� ����

���������>�������+,��

.���������$�'� �����$��

���������>�������+,��

���������� �$��$��� �����$���7� ���$�

���������>�������+,��

/���$��������)����� �����$��

���������>�����+,�� .���������$�'�'��44��� �����$��

���������>������+,����4�$��� �����$���7� ���$�

�� ����+,�� 04�$����"�3�$�)�����$���7� �������� �$��$��������(�� �$&�������4�� ��4����� �$&��

������+,�� .�����������������$������$�����$������$��������������4���� ����)$ ���$� ������

SW�� 2���������"�������$3���$��$��

"�� ��3�+,�� /���$�� ���$���$3���$��$���$���������"�3�$�)$ ���$�

"��������$���+,�� /���$����F� ��,�SS������$���)�����3����������������)���$������������

"��� ��+,�� /���$����$��� ������������$��"����"�� ���� ���������������$�&������

�������+,�� ����������3�����������

���� ����+,�� (�������)���������(�� �$&�

������$�+,�� (�$&����4��"���������.���������

���������"�+,�� (�����������$"������(�� �$&��

�����"�+,�� /���$����$�'���"����A�3���$���������%���)$ ���$����S�����"�

��?��+,�� %���'����4��"����������3���������)�������)���������

������+,�� ����������3����������

������+,�� .�������)$ ���$��$�4���� ���������'����"�3�$���"��$���

Page 261: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��5(;(�������.����&��� ����������

&��� ���� ���)����

������+,�� /� ��3�����"��$����$��4��$���������3�������$"���������$"��

����$�������������"�

����J����+,�� .�� &����������)��'��3����������A���

���"���+,�� �������������3�����)��$��$��7�'����$���������

�������+,�� ��������������3�����)��$��$��7�'����$���������

��J�����+,�� (�������"�3�$�4� &�"��

�����3�+,�� ����������$3���$��$�����������������)$ ���$�

���������$���+,�� �������������������)�����"�3�$�������

�����$���+,�� ��������� �$3�����$���"��$�������$�����

�������"�+,�� ��������� �$3�����$���"��$�����������$"�

�����+,�� /���$��������4���)������$�����"��$��

��������+,�� �$�������$������$�������"�3�$�������4������$�

�����3��+,�� /���3����$������$��)������"�3�$�������

�����+,�� ������������4���)���3����

�����D�+,�� /���$�����������$���)������"�3�$������

'X2�#!�� 2��������� ���$���$���4������3�����$�K�5�5�(���5�L�

?������+,�� .�������)$ ���$��$�4���� �����������$"��������������������$�����

,�� ���&��$ ���

�����������������)�'���������������)$ ���$������� �$�����$ �����'����(�,��������$��������5������������������$�������;5��5��

+��$��5(''(�����,�� ���&��$ ���

&��� ���� ���)����

��>����D�+,�� /���$���$��44��7������.�:�����8��$��� �$��8������������4��"����

��>�����+,�� /���$������������$�������� ����$"����"�3�$�)������

��>�� �����+,�� /���$�������� �$������'��$��'��"�3�$�������

��>�?������+,�� ��������� ����$���������7� ������������4�����$"�������5�*A�3���$�����.,���������

��>�?���+,�� .���������.�)$ ���$��7�����������$������4��"����

��>"����3�+,�� /���$������3�����)���"�3�$��$3���$��$��3��������

Page 262: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��5(''(�����,�� ���&��$ ���

&��� ���� ���)����

��>����3��+,�� ����������"�3�$�)����

��>�������+,�� /�$�������"�3�$�)����

��>����������+,��

:��������$��$���)� ���������%����.�����������)$ ���$�

��>�����+,�� /���$�� ���$�������

��>��������+,�� /���$��������$"�'������)���$��������� �$��������)��������4������)����

Page 263: Game Programming With Python, Lua, And Ruby (2003)

� �;#�

!����������0�������������,)����

(�&���������"����3�����$"�"��8�(����$�"����������������� ����8��������������$,����3�����'�������������� ���$"��������)���$�'���F� ����$��)����$"����'��$�������F� �������$����$"���$�����5�(����$�"����������������� ���������$$�$"���"����"�� ���� ����)�������������������� ���� ���$����F� ������������$����$"���� �����������(�5�����"����"�� ���� ����4� &��4������)�(�,����F� ��8��$ ���$"��������8�������8��$������$5�

%����"����������$����$������'��$��$$�$"�����(���$���4�����8�'��$� ����$"�(��)����������8�(�,����� &��$�����������������$�"��5�*� ��)$ ���$� �����$�(��$������$����� &�4������$�)����� ����"��$�8��� ���3�������8��$�����4�3�������8�4����$��4������$�)������&&��4�$"5�������� &��������������3�����������7����4������$���3�������5�9�����������4����$�����$���)�(��K'�����8����8��� ���3��)$ ���$�L8�����(��������$����""���������� &���D���)����5�������)��������8��#5��

&����5(3(����������) �� ���� ��� �� ���� ��%�

����S#����)���S�����+��������D��8�,P�

�����������(�8���� ���������������'����������� &��

3�������S������+���'#����)%,P�

��������������������F� ����$���"�3�$�(���$3���$��$����� ����$"����� �����4�$��$"�"����"�� ���� ���$���"����������$��)����������)�������$��� �������������������������5�H�����$���$��������$������� ���������)$ ���$��� ������������� ����������������'��$�����4��"�����$��5�2�'�3��8���$"��$$�$"�4��"�������&��+������3�������"�������3���

Page 264: Game Programming With Python, Lua, And Ruby (2003)

� �;��

����������$����������������������������$�������������$����$"���$���������������������������$,��"��'��������"�5�

+��$�����������(��.�%��8�����������4�$������)��� �$������$"���� &��3��)��'5�

+��$�3���(�� �����.8�����$�������������������%�&SR!#�&LT�4������$�������3�������8�������������$�����3�����'������������� &��4� ��'��$����� �����������4��4���$"������$����$���������� &5�����%����))������$������)�)$ ���$��)������� ���� &���$�4�����$8��$ ���$"�

•� #���$��J�� �)(������������� &���45�•� #���$��J)���#�$��(��������$���������� &5�•� #���$��J����#�(�/���3��������$�����"�3�$�4������$5�•� #���$��J���� (�1�3�����4������$���$���"�3�$�4������$8����)��$"������$����$���4�

�)������4������$�����4�$��4� �5�•� #���$��J��)$���(�/�4�� �����"�3�$������$�5�

H�� �$������A����������� &�'������$������)�)$ ���$������� �� &�������4���)�����"�3�$���F� ���$������$�����$"�5�������)$ ���$���$ ��������)����'�$"��

���S��������S���������S��$����������S�����$������S�������"����S����$������S�� �����������S��� �����������S��������������S����"�����������

���S�J�����$�����S����J��������)$ ���$��)��� ��4���$"��'��3������$�������� &5�

���4���.�3������$���������� &8�������������$������)�)$ ���$��������� ��3��.�3����8� �$3������������ �����4�$��$"�(��3����8��$��4��������������$���������� &5��������$ �����

���S����$����������S�������$������S����������"����S���������"����S�����������S����� �����������S������"�����������

+��$� �$&������ �����8�)$ ���$����&�����'��������4����$���������� &��$��3������3�$����������$���������� �$&�5�%� �$&� �$�����$��$��$������)�3����8��$��(�� �� &�������&����������3�����)����'����$�������� &��4� �5�����)�������� ���8��������4�$���������)���)����$"�'����$�������� &�)������� &��������4��"������5���������$��������)����$�������4��������������$����)���� ����$"��$���)�������)$ ���$�8���������� �� &�������� &��4� ���$������3������$��������$���)����������� &��)�������$���$��������5�

Page 265: Game Programming With Python, Lua, And Ruby (2003)

� �;;�

���������$$�� ���

(�������'��3������������ �$���������"����"�� ���� ���$� � ���5�����)�����&��4����� &��)���'���$���������)���$��� ��������(�������$"5������� �$��3���������������������������8�'��$����8�������(������$����� ���� ���5������������ ���������$�� ��$"������3�������

.�%����$������"������"��� ���$���������"��$�"��)$ ���$�5�

(��)����� �$����������$���)����������������$"5��)����� �$����� �����������������8�����$������"����"�� ���� ���5�%)�������� ���� ���$8����� �$�����4�������$�����������������������������'� ������ �$��3���5����� ���$�� �$��3���� �$����������3���'����

���S"���������+��S#�����)%,P�

���� ���$������������ �$����������3���'����

����"�������������+���S#�����)%,P�

*� ������$��������3������$�E�5��������������� �$���� ��$"���'����

���S���"�����������+���S#�����)%������������������,P�

%�"����"�� ���� ���$� � ��� �$����)�� ���'����

���"����S�������"��$�"�+���S#�����)%����"������,P�

��������������$������$������)���F� ��� ���� ���5�

����"�� ���� ����������������)����������� �$���������������$"�����.�%��5����������������������� ������)�$���D���5�����)�$���D��������'������� �����$����(�,��"����"�� ���� ���$�'�����7���$�������� ����$�"���$���)�$� ������5�

,)����

(���44����� �����$�������$��4�$��$�����������)��7� ���$5��������$,�8���'�3��8��������$��4�$��$����������������������C������������� ����������3�������������$"�������5���������$���� �����$���$�����4�$��������7� ���$�����74�� ����� ����$"�������������$�5�(��������))����������44����)�������4������������)��7� ���$�3�������.�%��8�����)������3��.�����������������))���&� &�$"8����$�������������$"�(�� �$� ��4������'��������5�

%����"��"����"�� ���� ���$� �$������$��������$�� �$�������8��������$� �����)���'��������4��)����$ ����������"��$������)���F� ���"�$������5��)����������$�"�$"���$����F� ��8����$�����.�����$��4���$8�����������$��������'����$� ������5�

(� ���3����������$�(������� ��A� &������$�"������3��������5����������� ���������� ��������� ����������$��75��)�4�������8���&���$��"������3����������� ��5�%������$����8��� ���

Page 266: Game Programming With Python, Lua, And Ruby (2003)

� �;!�

3�������������&�4���$�������� &��$�����'����$����))� ������"����"�� ���� ����K������3��������$���$���������� ���� �����������"����"�� ���� ���8������������� ��������$�������� &L5�

������4���$�(����3�����$��4����D��8��$���������3���4� ����D���3�������� ��$��

�$��� ���$�5���������$������������ �$����)���������$���������$�����������4�����4���$����������������)��4�����������"���5�

����������$����""���)�������K���$������&�L� �$�����������4��)����(�� �����$�����&�)���������$� &���$��7� ���$�����5�����������������(�����)������3���������$������������5��"������+�&��4�"�8�������4�GG�������5��"G'�&�G(����)����5�

+��$������$"��$�)����8�(���))��������)������$� �$&�8�'�� �����)���������$������$"�)�������$�������$�5�

Page 267: Game Programming With Python, Lua, And Ruby (2003)

� �;<�

,�������

��)������3�$"��$��������$�7�� ��4���8������������3��(���$���������$����� ��4�����$�����������)����A���� ��)��������4�""�$"� �$&���$�������(���$���4�����5�H��

��������3����&�$���"�������&����(�,����� ����8�4���� ������� * ��*�����8��$����4� ������������5�H����������3��������4����$"�'������)�'�)$ ���$��)������������$"��$����������������5���4����$��4��$���)��������� ��4�����

•� (�����$���������7� ��������������4��"���������$"�"�5�•� (�� ����������&�$�4��$��� �$&�8�'�� �����������������4��"������� &�����

��$"����������$��5�•� �����������3������4����$���$�(�5�•� (�����$�������"$���)��������$"��"��4��"����5��������������������)���$�

�����$"�������4��"��������4������)������"���������5�

Page 268: Game Programming With Python, Lua, And Ruby (2003)

� �; �

7��� ����������������

'8� 6��+�������������������F� ������$����)��������)�(�8���&������4����$������$ ���$��4������4����-�

�8� %��%����"��(������'��&�����'�����00���44���8�������$"�"����$,������������$�������������"��)� �������&���� ��$����)��������$"�"��$��4��"����5�:$��&��������00����4����$"�"��8�(��������$���������������$��)��7����5��� �����)�����8������00�� �$��� �������)������&���� &���������4�'�����������&���3���4��5�9�������������$8�����)�����������)����� ��4�� �����00��)��������$������ ��4���5�

/8� 6����'�$�����&$�'���������������(��.�%��5�

�8� %�������������$"�����$�7�� ��4���J�

Page 269: Game Programming With Python, Lua, And Ruby (2003)

� �!��

*1�������

'8� (����)������$"�������������������� �������$�(�5�

/8� *74���$�������))���$ �����'��$���5�7���$���� 5�7�5�

28� *74���$����� �$ �4���)�I �$&�I��$�(�5�

38� +�������A� &�(��4��"������������&��)����$��)�$���'������4� ��'����$�����7������$"��$�����$������������K��$��4��$��JL5�

Page 270: Game Programming With Python, Lua, And Ruby (2003)

� �!��

��������.��)��������������������)��� ��������

����4���$������"$��)�'����������� �$��$��� ����)�$��������������������&��������)����$"���$�������"��$�����3���������$8���'���� ������$������$�5�

CC1� �������1�$���"$��

�$������ ��4���8���,���4���������$��������)�(���$���7���$��"����4��"�����$"������)C'������������4�)����(���(5��,����������$ ���$�������(��.�%����$������ ��4���5�

Page 271: Game Programming With Python, Lua, And Ruby (2003)

� �!��

���,���

(���(�������4������� �1�����(����,����$��$"��$�������(��$�3����5�(���(����������'$�4��F� ��4�"���$���� �)��"�8�������4�GG��� �)��"�5$��G4��F� ��G�����G5�(������������&��4��� �4���)���������������$��$�������+�&��4�"��8�������4�GG������5��"G'�&�G(�1����(����5�

H�� �$������)�$���� �4���)�(���(��$�����.��4����!��� ���$��)���������&,��.�5�����(���(���$������������&�$�)����(������5��"��$��4�� ��4������$��"�$�������������� ����:��� �8���4��"�������)���0��'������$������$��5����� ���,���������(���(�3�����$�� �$����)�$���������+������8�������4�GG���� �5 ��5�

�$�+�$��'�8����$�������4�� ������4�����������(5��������'������$�����4�����$�������)�����(����)$ ���$5�������������'�����������������������4���������(5�����$�������+�$��'���������)�����5�(�$7�4���)��������������$���������������4�������4�� ���������(5����$����������������������$"�4����)����K'�� ��3�����M���������G���������G�� ��G���L5�0$�������4����������$�����������3���������������������)������'����$"8��$������������$����3���������$�������4���)����5�

�0�*�

����

�)�����������'�$�����"���4�����4����'������(8� �� &����������"����������9� ���$���(8����*�$������D���8�4������������������������5�

Page 272: Game Programming With Python, Lua, And Ruby (2003)

� �!��

���# �8�������,��������

��)������$���� �����(�'����� &��$�.��4����#8�'���������������'���������$������������4���������D�$"���))5�(�,����(���$��$"�����$,��A������� ��4����8��$��$)���$���������������������������������)�����5�������$��$"�������������$������K>�����$��5������)������'����$"L��$��'����4����"��������$"�����(��#��$���4������K������$����������

�������$�4���4� &�"���'����������%�������L5��� �����)�����8������)�����$� �������(��� ��4��������$�����'��������"�����$���������)������K��������$,�������$$�$"����'����(���L5��

(���(� ������$�����'����������4�����"����4������4�� ������1���������'��5�����"�������'�����$��$��������$�(���$����(�������� ����:��� �8�'�������"�$�������"�3�$�������� �� �����������4��� ������$5����������� ��������������)�����3���5������$�������� �����4��� �$����)�$���$�������3����)�������$�����.��4����!��� ���$��$�����.�8����$"�'��������4��� ��4������((��$� ���������������(��$������(��#��$���4�����5�

H�� �$���$ ����3����)�������� ����$����$�M�F���$�3�"��������������� �������$"����� ����$����$���$����4���

%���W��3���>����

�$���3���8�����4����������������$��$���$�3�����"�$�����'���5����$��������F� ����$���4� �����3������D����� ���������� ���$8��� ������� ��������������3����$���������4���������������"�3�$������K����9�"���!5�L5�����4�����������3������������F� ������)� ������� ���$5�

&����6('(����# ��������������� ������,�������

%�$������)�)$ ���$��&��4���3����"��$"5�����������)�)$ ���$��)�����3����������'$��$�9�"���!5�5�

Page 273: Game Programming With Python, Lua, And Ruby (2003)

� �!#�

&����6(/(�+���0��� ���$� �0������# ��

-�)�� ��,���

��)���������� ���� �$�������'��&�$"8�����4��"����������3��� �������(���(5������ �$����� ���3���'�����$�����)�'���������$����

''�����������������#6%��������� �����������������������������������+M#6%M,�����

�0�*�

(����3�����(��#�

(���5��'�������������������$�%4�����)�����5�%�$������)�$�'�)������� ����'����(���5�8��$ ���$"�����)����'�$"��

•� .�����$���)����7� ��$"���$���$��4�$��$���������5�•� ��� &� ����$���)�����3�$"�����4��� ����$����$����$� ���5�•� ������$���4���)��������$��)����5�•� .��$"��������'�����%��������� �$&�5����������44���������$�'� ����$����

���S����8����%S���� ���8��$�����%S����$� ��5�•� (�"��'��"������������������������3�����$��$����$���F� �5�•� +��&��������������������'����"����"�� ���� ���$5�•� %�)������3�������� ��$������������"�����������5�•� ���$�����������������������$����4� ��8������"������ �)$ ���$������������"�����5�•� ��'����������)�"����"�� ���� ���$8�� ������������������$��������$�'�

)��������������&�� ���� ���$���)�5�

Page 274: Game Programming With Python, Lua, And Ruby (2003)

� �!��

%��$"�'��������������)������� ������$������)��$ ��4������������'����4��3����(��3�����$�5�+�� �����)�������)����'�$"���))���$ ����)����������(��#5��"����3�$"����(���5����

•� 1������������3����4�� ���������"��������� ����5�•� ������������$������)� ��$"������)$ ���$� ����5�

•� ����������$�'������3���'�����K�$ ���$"� ������$������L5�•� 1������������)$ ���$������$�'���)�$����$�����(��������5�

•� ���S������������������4�� ������$���������$���4�� ���'�������S������������

�$�����S������"����������5�

+��&��$��5����������������"$8��$���������������������������������$�7��3�����$���������3����������������$���)�����5�

,� ��-� �$�9����$���

H�������$������D�����������)� ���$����������"����������������$�)�����������"���5�

������$"8������������� ����)����.��4����#8�������� �������$����$"�������'�$"8��$���$�4���� ������������ ���)������'�$"��$���F� ����� �4��$"�����4�7�����)��$���F� ���$�������� ���$5�

%$���(��������)� �����&����&��������

#6%>#6%S ���#�� ����/�#6%>#6%S����� ���P�

����"�������������� ���� ���$��)�������3��������8�����"$��������(�������8�����������$������D�����)��������"���������������$5�������������������$�������!5�5�

+��$��6('(�+���� ���� ���9����$���

*$���� �� 9�$���

����S������S���D��� ��

$�"��S������ ��

�������S���D��� ��

������� ��

������S�������� ���

����3��� ��

���S�������� �������������

�������� �������������

���S������� 9$ ���$�

�"���������/�N�������������S������S���D��/������������$�"��S�����/����

Page 275: Game Programming With Python, Lua, And Ruby (2003)

� �!;�

���������������S���D��/������������ ������/������������������S�������/�.�������''������3���$����������������������S���D�������������3��/���������������S�������/�NO�����������������/�NO�������������S������/� �������+��� ���,�����������������������+�,������������������������+��� >���S���������,�������������O�

�$������������������������$������)�3�������������������$���������)�'�$������������5�����

������S���������������$���3����$�������� �$������'��$� ������������4������� &8��$��

����3�������������$�����������'������������$"�$����� ���$����� ��3�����$��5�����

���S������)$ ���$�����������)�$����$�����������5��

����$�7��(�����������)������4����� � ��5������ � ���'����������4�������������3�������������$�������8���������$"�$��'�$,����3����������$�������������$�����)����

������S������/�NO�

��3�����������������4�����$��3��� �����$�8�'���8�"��3���5����$3����$���)���$"�4��$��������F� ��8��� ��'������))���$��������8���4�$"��$�� ������$"�'������ ���������$������������������&��4����$"�� ���$5����� ���3��������))� �8�����3���������"��3���8���'��)��$������ ����)����$�������� ���$8��$����'���$����3�������4������'������3�5�

''�#���"��3����W�&X!��SL#�&��/��������''���$���� �3�������������� ��������� �������$���������8����$������S�������/�N�����9���<9�O� #�&L%2S�2#�!���!�/�>�9�''��� �������'����������$��������#�226S���X2�S���2#�%6�/�=����''������������"���������R#S�2�SW&R2�/�.�''����� ��������������$��������������� &#2S�2%2&#2S�2�!6�/�9���

��������������� ���8��'��4��$�����$�����4� �� �'8�����������������$�9�"���!5�5�*� ��'���������$�A�������4����"�������������������$ ������$�������3����)�����5����������"�������4�� ����$�����(�������5��

&����6(2(�+��� �������� ��$��������# ��

Page 276: Game Programming With Python, Lua, And Ruby (2003)

� �!!�

�''���������$�������$����������"����$������S���"���/�N���������N�M�$�������>$��M�O����������N�M�$������->$��M�O����������N�M�$������.>$��M�O��O�

���� ��&��� ����

.�����$"�)$ ���$����������������������$��"��3���)������$���3��5�H��$����)$ ���$�8�������)�)$ ���$�5��4�����8�3� ����8��3�$��8�����"�����$"�$�8��$���� ��� ����K�����F� �L�'����$�����"�������������$����5�

,)� ��"���$��

�4�������$���$"��������)��������$"������ &���K����9�"���!5#L5��������$��4�����)$ ���$�'��������� �$��� �����������&����$��������4�)�����$������$���$���(���)� ������� �$�������������$��������������$"�$�5�%�)$ ���$���������'������$�'�����������(���)� ���4������$�����

�����K�����������"��$�)����.��4����#C����������������� ���F� ��)����������(�"���L�

'�������4�����)�����4�� �������'���5��������$��4�����)$ ���$�'�������������+,��

&����6(3(�,)� ������$��0��� ���������# ��

Page 277: Game Programming With Python, Lua, And Ruby (2003)

� �!<�

� ��������������+ ���,�''�����������������������>�������������$������ �����������������������#6%S#�� ������������''5���������D�������������������� �������S�����A ���B�����������������������������������S�����A ���B������������������������������������S������P���������''�%������������������"������������S�������/�#6%>#6%S%��� R�+ ���,P���������� ���S�������//�������������������������������+ML�����I�������M�>>�� ����>>�ME�M�>>�#6%>#6%SW��2����+,,P������������������������������������������������''�#��������D������$���D�+ ���������������,���������#6%>#6%S#��L����T��+��S��������#6%>$��S��+#6%>#6%S#�LL%�T2���#6%>#6%S�%2&LL2%,���,���������''�L��3��������������3�����#6%� �������������������/�#6%>#6%S6������5�����+��S������,P���������#6%>#6%S5���#�� ���+��S������,P���S�������/�����P���������������S�����A ���B�/���S������������������������S�����������

�����4����� �$��� ����)����� �� &�������&����������������4���������$,�����������7�����$�

������S�����5��)���������$��8����� �$��� �������������)�$������"�3�$��1�����"��)���5��)�����)��������$,���7���8����� �$��� �����7����'�����$������M������'�������"�����������$��

�������������"���$����$���(�)������K��$"��������3������������$�����L8����������

Page 278: Game Programming With Python, Lua, And Ruby (2003)

� �! �

�����D���K�$������.��4����#� �$ �4�L8������������4������$�������������S�����8��$������$�������4����5�

������ �$���4�����)$ ���$8�����S������8����4���������4������$�����'������$������ ���$�

�������"�3�$� �����$�����K78�L5�����������������3����4�'��)������+,����� ��4���������5�

���� ��������$�������)�������S����������'��&8����$���������)���3����������

������������S������+����������������?���,���������''���D������������3�������������������������������������� ���������S������������������������������S�����/�#6%>#6%S����S���+,�������������������������S����>?�/�?�'�������>��*�-�������������S����>��/���'�������>��*�-�������������S����>��/�������>��������������S����>��/�������>����������#6%>#6%S ���#�� ���+���������%%��������������S����,�����

9�� ���"���$��

+��$������$�"����4���� �8�3� ����� ����$����"$�����K�4���L��$������ ���$�K����9�"���!5�L5�>� ����������7����������)�8���������$"�$��$��������&$�'������4�����$��

���� ���$��)�������F� ����$��� �����)���$"����$������� ���$5��$�����������������8�����3��-�)$ ���$�$����������&���$����������$��������������5�

&����6(4(�9�� ������)���������������� ������������ ��(�

�$�"�������8�3� ����� �$������)���4��$��������� ����$��$��4� �8������� ���$8��$�������$ �5�

���� ����$����$��)����� ���$��$�������$ ��������������� ���������4�� ���$�5�����3��-�)$ ���$����4�����&��4���� &��)�3� �������$"�7��$���� �����$����8�������'$��$�9�"���

!5;5�����������$"� �����$����������>?��$���>�8��$�������$��$"� �����$���������$>?��$��

$>�5�

Page 279: Game Programming With Python, Lua, And Ruby (2003)

� �<��

&����6(5(�, �� �����������)�� ���0���#�� ���

����3��-�)$ ���$�������$������)���������)����������$�$"��4�����$������ ���$��)��$�

� ���������F� ����$"�3� ����5��������8���$8����8��$���������������������������� &�4������$��$��'������$���$����4� �����4��)����$"��� ������������� 5�

����������������������������3� �����������$�'�����������������)��'��3� ����� �$����4��������$��'������$���$����4� �8�������'$��$�9�"���!5!5�>� ��������� ���$������$�����

���������$�������8��$������������44�������)�3� �����������$��������3���$"�������))���$ �����'��$��'��3� ����5�

&����6(6(�9�� ������ ���

Page 280: Game Programming With Python, Lua, And Ruby (2003)

� �<��

H�� �$�����4�����3� ��������� �$���$�����4��� ������ �$��3� ������������3�����$������������������44���������� ���$�����������))���$���4���5�1���4���$"�3� ������$��������� ������� ���������4�� ����$5�� ���������4� ����$� �$�������������)��)��� �������$�C�����)��'��4��$�����$�������3����"���� ������8��$�������$���������$ ���))��)��� ���������$��44���������� ���$�5�

������������������ �$��'����)�����4���$"�3� ����������"�3��������$"������'��$��'��

3� ����5������ ��������������4��� �M��������������$����������������������5�%����"�������$,�������������4��� ���$������"���8�����������)��3� ����)$ ���$��$����������������������4��)������"���$"� �� �����$��K���8��)����'�$��������������$���F� ������� ����������'���������"���L�����������$��)� �$"��$����"����5�

%)�����$$�$"�����"��3��-8�3��-S�������8��)�$����������3� ��������������3���$"����������$"����$�� �� ��$"��$��4�������� ���������� �� �����$������� ���� ����������5��

''3��-S��"�/�����''���'��������8������3������������������������"� ��������3��-+�,�''���������������������� �����3��-S��"����������������������3��-S��"�/������"+,�����������������X������������������������������������"������+3��-S��"��M���M�������������������������� ��������+���$,��������3��-N��>?�(�$>?���>��(�$>��O���������������������,�

Page 281: Game Programming With Python, Lua, And Ruby (2003)

� �<��

����������������X��������$������������������������������"������+3��-S��"��M��$M�������������������������� ��������+���$,��������3��-N��>?�'�$>?���>��'�$>��O���������������������,�����������������X������������������������������������������"������+3��-S��"��M���M�������������������������� ��������+���$,���������������������������������� ������$��+�,�����������������������������������������������������3��-N���)�$>?����)�$>��O��������������������������������������� ������$��+$,�����������������������������������������������������3��-N��>?�)�$���>��)�$�O������������������������������������������������������������������������������''������������>������������������������������������������������+�>?�)�$>?,�(�+�>��)�$>�,���������������������������������������������������������������������������������,����������������������"������+3��-S��"��M���M�������������������������� ��������+�,��������3��-N�'�>?��'�>��O���������������������,����������������������������3�/�NO���������� �����+�,�//�I��$��I������"+�,�//�3��-S��"����������������������3>?�/������$��+�A�B,���������$��+�>?,����������������������3>��/������$��+�A-B,���������$��+�>�,�����������������������������������3>?�/�������������������3>��/����������������������������"+3��3��-S��",���������3>�������8��/�3��-S�������8�����������������3������ ��������3��-S�������8�+�,�''�! ����������������'8�������"�������������������$������������3���������������������-�/���)������������ ��-�1��>����������������������������''����������$������������3�����������������������>?�/��������������������>��/��������������������������������''���3����$���������"������"����������3�������������������������������"���/��J��+�-,������������������>?�/��>?�*����"��������������������>��/��>��*����"�������������������

*#�� �"���$��

2�$������)���&���4��������$������� �� &������$� �������)����$�� ��4����"���5�1�����3�$���'�������4� &���4���������$��3������ ��������� �$����������4�����8������$�����$"�)�������&���������$��'�$��'���3�$������������� ���$� ������4������'�$������ �������

Page 282: Game Programming With Python, Lua, And Ruby (2003)

� �<��

'�$��'����A�����$"�����*� �4��&��5������ �$������$��)�������������K����9�"���!5<L����

��$"�#6%ST2�67����'�� ��)���#6%TSJ����#6%TS2#L&�25�

&����6(:(�*#�� �����$��

� ��������������S�3���+�3���,�''��������$������������''L���D�� ���D����������''������"����������������� �����������������J������������� ��3���>�����//�#6%>#6%ST2�67����������������������������������/��3���>D��>D�����>��������������������� �����//�#6%>#6%TSJ��������//�#6%>#6%TS2#L&�2������������������������������"��������>����3��/�������������������������������������� ��3���>�����//�#6%>#6%SV�!�����������������������"��������>����3��/���������������������

+���*�������� �����������)�

%�$������)�� ���$��������44�$��$������$"�$���$��"�������48��$��������� ���$�������� �����4�$������� ��������)$ ���$5�H��������3����)$ ���$��������3���$���4��������������$,�����$"������$�������$��$�'��$��8���)$ ���$������$��������� ���$��$���� &"��$�8���)$ ���$������&��4����� &��)�������$��4����������"���������8���)$ ���$���������������������$"8��$����)$ ���$�����������$��)���4������&������&����

•� ������J0����(�:4�������$�������'�5�•� ����J� (������� ���$��$��3����5�•� ����J$��)(�1��$��$"�$�����45�•� ���$��)J ��� ��(���� &��������$�� ����������)$ ���$�5��•� �)�� �J �%(�:4�������$��"����� ����5�•� ����$�J�#�� (�(����$��)����$���3�$��� ������������4�����5�•� ����$�J��$$���(�2�$������$��� ���� �������$�5�

����)��������4��������$������D�������$"�$�5�

Page 283: Game Programming With Python, Lua, And Ruby (2003)

� �<#�

������"���S�����)$ ���$�������������������� ���$�'������$�����"����$������3�����������$���������������"������ &�$"8��������4��&5����������������������"�� ����$���$���

�� ���3��������8���)�'���(� ����8��$�� ����$"�"����������

����������"���S����+��"3,�������������������������"��P���������������3����S$��P���������������3���� ��"�P���������3���� ��"��/�#6%>$��S��+#6%>#6%S�7#��5&L2��#6%>#6%S&�5�R&�,���������������/�F��������������"���/�:�����������3����S$���/��:���������''�#���3������������������"��������>�������/�#6%>#6%S#��X����R���+����������"����3����S$����3���� ��"�,P���������"��������>$��D"������/�#6%>#6%SR���W +"��������>������> ��������������,P���������#6%>#6%S#���L�����+�,���������''���������8�����������*���D����������"��������>$�"��S�����/�#6%>#6%SW�����D�+,P���������"��������>����S������S���D��/�"��������>$�"��S����P�����

/���3�$"��$��� ��������������$����$"��������$������$"��$��$�'�� ����������$��������

�$�������S���D�)$ ���$5��'��(�� ������4��������������"���� ��� �����$�����"���5�����)���������3����$��� �������������$,��� ��3���$��������$��$�'��$����

�����/����"���+"��������>������,������������� �"��������>������A�B>����3�������������������������������''�����������������������������������������������+"��������>���S��������"��������>������A�B,�����������������

����)������"��������>������������������$���4�� ���'��������$�'��������$���A� &��'�4��

"��������>�������/�"��������>���S�������"��������>���S�������/�NO�

���$����� �$�� ������4� ������$�4�����)����� ��� �����$������������

''������������� ���������������������� �����/����"���+"��������>������,��������������������"��������>������A�BE������+"��������,�������������

%)��������� �������3�����$�4�����8��� ��$����������������'$8�������������� ���$5�%�

A� &�������S �����)$ ���$�����������'��&8�)����� �����$"����� ���$��� ���$��$�����$�

�����'�$"��� ��� ��������+,�'����$�"��������>��������

��������������S ����+��������$��D"�����,�

Page 284: Game Programming With Python, Lua, And Ruby (2003)

� �<��

''�7������������������������� ����>���������''�5�������������������������������#6%>#6%S5�������+���������%%��$��D"�����,P���������''���'��������������������"��������>��������������� �����/����"���+"��������>������,��������������������"��������>������A�BE������+������,���������������������''�����������������#6%>#6%S����������+������������������,�����

1�����)������ ����"�����$"�$��'��&������$����������$�7���������)$ ���$8� ������

"�������S���������5������� �������� ������������$"�$�����4�8��$��������4�$������)��� ����$"�����������������$����$"�)$ ���$���$��&��4�$"���� &��)�����5�9�����

"�������S���������� �����������S�3�����$��$��4�$��$"��3�$����$�����"��������,��

�3���S$� ���K �� &�$"�)���������������))����7����L��

��������"�������S���������+,�''�������������������������"���������>�����������������D��������������''���������"����������������>���������''�� �$� �����������?������D����������������� �"��������>�3���S$� ���//��������������������������"��������>�3���S$� ���/�#6%>#6%S23���S���+,���������������������''�����������S�3����������������"��3�������������������#6%>#6%S����23���+"��������>�3���S$� ��,�]/����������������������������S�3���+"��������>�3���S$� ��,�������������

"�������S�������������$�����#6%SW2��!LT#+,�����������������������3���������$��

��4����������'��������"�����������������)��$�4�����$��������� �5��)������$"�$��$�����

���4����8����$�������S���D���� �������$����������� �$�����4�������

''����������������������������������������������/�#6%>#6%SW�����D�+,P��������������������S���D��/������'�"��������>����S������S���D����������������������S������/����������������������S���D��4�"��������>������S��������������������������������S���D+,P����������������������S���D��/������S���D��'�"��������>������S�����������������������"��������>����S������S���D��/�"��������>����S������S���D��(��"��������>������S�����������������������������S������/�������S������(���������������

9�$����8�������S ��������������� ��������������'��$��� ������$������� ���$��� &"��$���)��$�4���������� ������

''�� ����������������������������������� �������������� �������S������4������������������������������S ����+"��������>��������"��������>$��D"�����,�����������������"��������> ������/�"��������> ������(���������������

Page 285: Game Programming With Python, Lua, And Ruby (2003)

� �<;�

����

����� �����$"�$��"�������4�K��"���S����L��$��'���������"������������� ��3�5�����

��"���S����� �����"�������S������������ ������������'$����������4�)����5�����

��"���S��������$� ���$����������))��5��)�����"������������$����$"���� ��3�8����$�

��"���S����� �����#6%SV�!���

����������"���S����+,�''�7����������������"�������S������������������������"��������>����3���������������������"�������S���������+,���������������������''������������������� ��3���S$� ������������������������#6%>#6%S23���S������+�3���,���������������������#6%>#6%SV���+,P�����

�� ����

*3����$��'�$����������$�� ���C����� ��4����"����4��"������C����������5�% ������$���3�������$,�������3��������� &���������2����'����3������8���'�3��5�������������� �$��� �������� �$�����$���� ����'�����$�����"���8�������'$��$�����)��$�9�"���!5 5������������� ����)$ ���$��'��������������������������F� ����$�����"���5�

&����6(;(��� ��������� �$@��������# ��

(���$�$"���'����4������$�� ���,��4������$��$������ ���$��������)��������&�����8��$����������'���������3� ����)$ ���$��"����������� ����������"�5�>��� �����������4����������'�� ��

������������4�����$�����"������������4���$ �����������4������

Page 286: Game Programming With Python, Lua, And Ruby (2003)

� �<!�

�������������S������+��� ��"�,�''������������������������"�3������ ����������������������������/�"��������>������S�������*�����>����������''����������������"����3��������^����������������������������/���� >3��������)��������������� >���������/���� >���������(�������

��$ ���������������%�����������4��"���8���F� ����$������ ���$�������'��4����$��������������������'��$�����������$���"�5�������))� ������ ���3���'�������4���������44������������

4������$��$������"����� ���$�K"�>������L���)���������S��������$����

''�������������������������"����������� ���� >��������>?�1�'��� >�������������� >3�������>?�1/��������������������������� >��������>?�/���� >��������>?�(�+"�>������>��(���� >�������)�-,���������������������� ���� >��������>?�4�"�>������>��(���� >�������������� >3�������>?�4/��������������������������� >��������>?�/���� >��������>?�'�+"�>������>��(���� >�������)�-,���������������������� ���� >��������>��1�'��� >�������������� >3�������>��1/��������������������������� >��������>��/���� >��������>��(�+"�>������>��(���� >�������)�-,���������������������� ���� >��������>��4�"�>������>��(���� >�������������� >3�������>��4/��������������������������� >��������>��/���� >��������>��'�+"�>������>��(���� >�������)�-,�����������������

%�)$ ���$������������� ������$�������� ���$���$"�����S��������������$�7�����$"���� �������)�����������$�$"������ ���,��4������$��

�������������S������+��� ��������,�''� ��������"�3����������������"�3����������������������S������+����������� >����������� >��������>?����� >��������>�,�����

����)�$��� ����$��$�� �����������������$�� ���� �$��� ���5����� �$��� ����'������&���$������4����������4��$��&��4���� &��)�4������$8�3��� ���8��$�������8��$�����$�����$������ �����$���$� �8�$����(���������

�������������+�,�''������������������>�������������������� ����������$�����>�����������������/�NO���������''���������������� ����������� ���D�3��������������������������ADB�/�3�������������

Page 287: Game Programming With Python, Lua, And Ruby (2003)

� �<<�

���������>�����/�M�����M����������>����3��/������������>�������/�+�A�B�����>�����������������+�A�B�����>������,,�����������������>���������/�3��-+�>��������,����������>3��������/�3��-+�>3�������,����������>�������/��>��������������������������+�>������������>������>��)��>9,�������������������������������>�������/������S����������������>�������/������S����������������������������

�� ��$���

����"��������� �������� �'���$��4��$���5������������ ����������� &���$������)���))���$�����$"���$������������&������"�����$�������$"5�

•� 0���� ���� �$���&������"�5�������)�������""�����F� ���'������3�3�� �������$��'������3���������������F� ��8���������$���������� &���'�� ������"������� �$���&�5�

•� 0���� ����$�������&$�'�'��$������ �������'�����������$"5�•� 0���� �����������'$������ �����������"��3���8��$����������$�������&��4���� &��)�

������$����������� ���5�

0���� ���������������� ����$������44�����$������ ���$5������������ ����)�����))� ���$��������$����4�� �8��������$�����4���8��$�����3�������'������'��������� �$�����)������ ���$5���������F� �� �4����������������$�����'��������)����'�$"�)$ ���$���

•� ��� ��$�J�)�� �DE(�2�$�����"��3���8���3���$�8��$�� �������$�5�•� ����$�J��� ��$�J��$$���DE(�.������'��$��� �������$�������� ���5�•� ��� ��$�J �%�J�����DE(�����"���������F� �5�•� )�%J��� ��$�J���DE(�.��������$���)���������� ������"��������$���5�•� ��� ��$�DE(���������� ��� �$��� ���5�•� ��� ��$�J���� ��DE(�/�$������4�� �������� �����$�������� ���$5�

�����$������S��������������)�����)$ ���$������ &��5����'�� ����)��� �������$�����)�����4����$"������)��$�����$�&��4�$"���� &��)�'���������������� �����������

���������$������S������+��� ��"�,�''��������������$������>�������� �������������������������������>���������''���3�������� ��������������S������+��� ��"�,��������������������/�"��������>������S�������*����������������������������/�3��-+,���������''�����D� ����������������� ���������������������� �����/����"���+"�>������,������������������������������/�"�>������A�B�

% �����'���������"�������'�������'�������� �������'������������3��5������������������

'��������W�&X!��SL#�&�8������'��� ����,�����8��$�����������5�

Page 288: Game Programming With Python, Lua, And Ruby (2003)

� �< �

������'��$��$� �$ �4���)������ ���$���&�������������)��'����F� ��8����������$ �����'��$�����8��$������ �$���$���)�"��3��������������$����'�����$"���������� ���$�������'��$������'����F� ���K����9�"���!5��L5�

&����6('=(���� �����$����0�� ��� ���D(�(���#����$���# � ��E�

�������'�����������74����������KP��LPKP��LG�W�8�'�������������"��3������$��� �$���$�8�����������������)�����)�������F� �8�����������������)������� �$����F� �8��$����������������$ �����'��$������'����F� ��5�

�����)��������������$��$������S������������&�$"�����W�&X!��SL#�&���$������

������)��$���F� ��K�>����L��$��� �������$"�� �������'������������ ������

''�� �����������������������������������"��3������������������������������������������� ��>����������������������������������/��>���������'���� >��������������������������������-�/���)��������������������� ��-�1�����)������������������������������������������/��J��+�-,�������������������������� ���)�-�4���� >����������������������������������������������/�������(���)�++W�&X!��SL#�&��)��>����,�*�+�-�)��,,�������������������������������������������������������������

���$��$������S�������$�������� �� &�)���� ���� �������$���$����$������������ ����$"�

������S���������5�H���$������)$ ���$�����������$"������ ���,��3��� �����

��������''�����D� �������������������������������������������� ���������]/���� ������>�������$��������

Page 289: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�����������������������������������/��>���������'���� >�����������������������������������������������S�J������/������)���������������������������������������S������S�J������/�+�>�������(���� >������,�\�-�������������������������� ���������S�J������1����S������S�J�������������������������������������������''������3�����������������������������������������>���������������������������������������S���������+��� ���,������������������������������������������������������������������������ >3��������/���� >3��������(�������)��������

����$�7��)$ ���$8�������S�$������S���������8�)�����'��$���������� ���� ������5����)�������&���������������� �������$�������'��$��'������� �����$��$������'��$��$������ ����$������4�����M������'���������$������������))���$��)$ ���$5�������$�����"�������

��F� �������� ���������� ����$"��$������S��D�S����"���

��������������S�$������S���������+���$,�''���������������������$������������$���������������$>���������''R�D���������������������"����������$������������$��������������������?������������ ��>�����//�M�$������M�����$>�����//�M�$������M�����������������''��������������$������"������������������3������$����������������$��������������������������������/�$>���������'��>��������������������������E�������8�+,������������������������3�S3���/�$>3��������'��>3�������������������''�6���"�������$C��������������������������������������������U����"��/��>��)�+������3�S3���)�������3�S3�P,�)�+�>�����(�$>����,�����������������������S����/�3��-N�������>���'������>?�O�������������$������S��D�S����"�+��������S�����'�����������������S����"�,�������������$������S��D�S����"�+$�������S����������������������S����"�,�����������������

�����$������S��D�S����"����� �������$������3�$���)��� �������$5��������F� ���������3�3���� �������$8��������������$��K�����$��'���������������L�'����������������5����������������F� ���K �'�L�'������'������������������

���������$������S��D�S����"�+��������S��������������������S�����������������S����"�,�''�����"�������$������P�� ���I������"�������"������������������������������S������/��J��+-�)����������S����"��*��>����,�)��>.9���������''��$���������D�������"�P��������������"�����������������������������>����������/��>����������'����������S����"��*�-������������� ��>����������4������������������������''������������������3�����������"�������������������$�������������������������������������������

Page 290: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�����������������S��8��/��>��8��'������������ ����S��8��1������������������������''���������������$���������������������"�����>������������������>����3��/������������������������������������������������''�D���������������>����3��/���������

���DS�$������S���"���������������$����)$ ���$������'����4� &�'�� ����F� ��������

)�����������"�S��$�����$"�(�,��������$���������

�����������DS�$������S���"�+��8�,������������������"�S��$���/��$������S���"��A��8�B���������''����D������ ������$����������"�������������������������������"�S��$��A������+"���+���"�S��$��,,B�����

�����$������� �$��� ������������������ �$��� ����������������$"���� &5�������$������

������4�����M�$������M8�)��"�������� ����������8���&���������������$���)���������������� �����D��8��$�����$������3���������)��������8���D�8��$���4���5�������������"$������

����� �������$������S��������

''�������������''����������������"�������������������������/������+�,��������>�����/�M�$������M��������>�������$���/����������>��8��/��>��8�����.������''���D���������������� ���������� �������������8���� ��$��������������>�������/�������+���DS�$������S���"�+�>��8�,,��������>�������/��>9�)��>������>���������>�����/��$������S������A�>��8�B��������>����������/��>�����)��>��������������''������������������'����������$������������������������������/��J��+�>3��������)��>3�������,���������� �������4�#�226S���X2�S���2#�%6�������������������������������S������/�#�226S���X2�S���2#�%6�(��J��+������'�#�226S���X2�S���2#�%6,������������������>3��������/��>3��������)�+���S������*������,���������������������''������������$���3����������������������>�������/��$������S����������������������������

1����)$ ���$����&���J��+,���3������4�����$�)������$"����'8���4� ������'��$� ��4��7���������������� �� �������$�����)��5�2�3�$"����4�� ��������$����"�� ��4�����$�� �$�

�����$������'����)�������$$�$"�"�������"��$�����������5�0$��'�������4����4��J��������� � ����$���A���������3��������������������������$��$ �5�(��,�����������������)����'�$"� �����

Page 291: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�)��J��+�,�$)��J��+�,���/���($�

�$�������)��$$�$"������J��+,�)$ ���$��'� �8��$�����$ ��)������$������������3�����

�J�����/��J��+�,��)�J�����$)�J�������/��($�

%��� �$����� &���������� ����$�������������)�������$��4�� ������$���������)�������4��"���5�(��,�����������������"��)�4�'����)�����4�� ����$��$���4��"���M���� ����'��&���� ����$��A����$��)������$��4��������$�����������&��������!5�5�

+��$��6(/(��������������

-� �$�9�$���� K/�� K�2�

�� #� <�

�� � �!�

#� �;� ;#�

�� ��� ����

;� �;� ��;�

+��$����� ����$������$���)�������3����8����"��������)���$ ����������44��4��������'��$�� ���$��$�������)� �� ����$"��$�����)��5�

����3������������$"������ ����$��������������44����� ����$������$������ ���$���������������4�����5���������� ���3������ �����$"��$�� ���������������� �$���'$������5�+��$�������������� �����8������ ���� �������������� ��� �$��� �8� ���������������� ����$�������"���)������ ���$8��$����������)���$"���'��������������������'����5����$����������������������3����"��$��

''���������$��������������� ���������$������S�������+�,�''�������������������������������������������������$������������������������������/�NO����������>����3��/������������>�����/�M�$������S�������M����������>�������$���/��������������>���������/�3��-N������O����������>3��������/�3��-N������O����������>�������/�������������''�����������������������������������������>�������/��>�����������A�B�������������''��������$��������������"��$�����������������>����������/��>�������

Page 292: Game Programming With Python, Lua, And Ruby (2003)

� � ��

���������>�������/� ��������+,��������������>�������/����������������� ��������+��� ��"�,���������������������������� >����������/���� >����������'�"�>������S�������������������������������� ���� >����������1����������������������������������������''������������?�����P�����������$���������������������������������������''����D����������������������������"��� �������������������������������������������������������/�"�>������>���"�>������>������������������������������������������"��/�������+��)�-�(���)�-,���������������������������������������������������������������������������� ���"��1����������������������������������������������������/�3��-N���"�����O�������������������������������������� ���"��1��)-��������������������������������������������������/�3��-N���"��'������O�������������������������������������� ���"��1��)-�(����������������������������������������������������/�3��-N������"��'��)-�O����������������������������������������������������������������������������������/�3��-N������"��'�+�)-�(��,�O���������������������������������������������������������������������''�������������������� ��������������������������������������������������3���/�3��-N��*-���*-�O�'�������������������������������������3��E�������8�+,���������������������������������3���/�3���)�+������+=��,�(�9�,���������������������������������"�E���S�����+������������������������������������������$������N���������������������������������������������������8��/�������+.,�����������������������������������������������������������/������������������������������������������������������3��������/�3�������������������������������������������O���������������������������������,���������������������������������''���������������������������������������������������� >����������/���� >����������������������������������������������������������������������������

+����$�����

����4�����������"����������������4����$��"����4�� �5�1 ���)������$)����� ��������4������$�����K� ������4�������$���$"��$��� ����)$ ���$�L����������������$��������5�2�'�3��8����������$����)$ ���$�������$��������)����'�$"��

•� :4����$"�����4������•� ������� �������$�

•� ����������� �$��� ����

����������S��������)$ ���$���$�����4����$"�����4�����M�������&�����������������

�$C���S��������)$ ���$5��������������F� �������$�����F�����&���$��4�����$"�������,������� ����5�����4�����,��4������$�����������$����������4������$5�:��$"�

#6%SW��R����#����8�����4������4������$����4�����8��$�� �� &��)����$�� �������$������

����5��)������������ �������$8�������S������S������������� �������

Page 293: Game Programming With Python, Lua, And Ruby (2003)

� � #�

��������������S������+��� ��"�,�''����������������������������� ���������������������������������/�"��������>������S�������*��������������''�"�����������������������������3�������������������������������������������������������������������/�NO����������>$���������>?���>��/�#6%>#6%SW��R����#����+����,����������������������/�3��-N��>?���>��O�����������������������/������'���� >�������������������������������/�����������������������)�9�������''���3�������������������������������������������'���� >3��������)�������''�������"������������ >3��������/���� >3��������(�������)������������''���3�������� ��������������S������+��� ��"�,���������''�����D� ���������������"������������������������������� �����/����"���+"�>������,������������������������������/�"�>������A�B�����������������''�����D� �������������������������������������������� ���������]/���� ������>�������$�������������������������������������������/��>���������'���� >������������������������������������������������S�J������/������)���������������������������������������S������S�J������/�+�>�������(���� >������,�\�-�������������������������� ���������S�J������1����S������S�J�������������������������������������������''������3����������������������������������������������''���������������������������>���������������������������������������S������S���������+��� ���,�����������������������������������������������������������������

����������S������S������������������&��A������������&������

������S�$������S������������7 �4����,������������ �������������$�� �$ ��$��3���

����"�5�%� �������$�'����&��������4��������������$"���������3�����������������

��������������S������S���������+���$,�''���������������������$������������������������������������$C�����$���������''��������������$������"������������������3������$����������������$����������������������������/�$>���������'��>�����������������������E�������8�+,���������������������3�S3���/�$>3��������'��>3����������������� �������3�S3���)��������4/������������������������''����I������������������������� ��$��������������3��"������ ����������������������������������������������������������''�T������������������������>����3��/���������

����������� �$��� ���������������������������� �$��� ������������3�����$�����8��7 �4���������,���������5������ �������4�������������$�������8����$����� �$��� ��������������

Page 294: Game Programming With Python, Lua, And Ruby (2003)

� � ��

���$5��4�����������"�8�����������)���� ����������8�"�3��������)��������K���8�����4�����,��

"��3��������� �����F� ��L��$�������8��$������������)�����$�������S������5�

��������������+�,�''���������������������''����������������"���������������������������/������+�,����������>�����/�M������M����������>�������$���/������������>�������/�������+M����>$��M,�''���������+M���I�������>>>>M,����������>�������/��>9�)��>������>�����������>�����/������������''������������$���3����������������������>�������/�������S����������������������������

�������������F� ��$�������)�'��������)$ ���$��'����'�� �����&��4���� &��)�������3����$��'���������,���$����������"���5�����4������ �����'������3����))���$��3��������������)��������"����������8�'�����4����$"8��$���)������ �������$8����������$����������&�4��

��� &��)����'���5�����������$��'���� �����4�$��$"�)$ ���$���$�����������S����"��5�

9������������������S����"��S������5����&��4����� &��)�����4�����������8�'�� ������������4���"����������48�� ��3�����4����$"8������ �����5��)�����4��������������8�

������S����"��S������� �� &����������)������������$����3�����)����� �� &�$"�����

R#S�2�SW&R2� �$���$�5��)����������8��������������������������)��������4������ �$�

��$ ������$�7�����$5�����������������$������������$�)���)�(��� ������ �������������$����

��������������S����"��S������+��� ��"�,�''�D��������D�� �"���� ������������������ ���� >������//�M���'�����M����������������������''���������������������������������>�������������������� >����������/���� >����������'�"��������>������S������������������������ ���� >����������1/����������������������������������� >������/�M�����M���������������������������� >������>����3��/���������������������������"��������E���S�����+��� >������,���������������������������������� ���� >������//�M�����M����������������������� �������� >������>����3�������������������������������''���������������������������>��������������">���������������������������� >������>����3��/������������������������������ >������>���������/���� >������>���������������������������������"��������E���S�����+��� >������,�������������������������''�������������������������C����������>���������������������������� >������/���� >������'������������������������������ >������/�M������"M���������������������������������� ���� >������//�M������"M����������������������� �������� >������>����3�������������������������������''����������������>�������������������������� ���� >������1/����������������������������������������''�"��������3�������������������������������������� >������/�M���'�������M�

Page 295: Game Programming With Python, Lua, And Ruby (2003)

� � ;�

����������������������������������� >����������/�������������������������������������������������������������������''�������� �����?������������������������������������������ >������/�M���'�����M������������������������������������ >����������/������������������������������������������������������������������� ���� >������//�M���'�������M����������������������''������������������������������������������������������� >����������/���� >����������'�"��������>������S������������������������� ���� >����������1/����������������������������������� >������/�M�������M���������������������������������� ���� >������//�M�������M������������������������������/�NO������������������>$���������>?���>��/�#6%>#6%SW��R����#����+����,������������������ ��>$�������4��������������������������������''�������������"���>���������������������������� >������/�M���'�����M���������������������������� >������/�R#S�2�SW&R2����������������������������� >����������/������������������������������������������

����)$ ���$� ������������S����"��S������� ������$���������4��$��������4�������$��4��������������'���'���$����3�������4������������)���

��������������S����"��S������+��� ��������,���������� ���� >������//�M�������M��������������������������S������+����������� >"���S�3��S��������������>��*�-��������>��*�-,������������������������������''������������������������"������������������������������/���� >������>�����������������������������?�/�������>��������������������������/�������>��'�������>������������������ �����/������� >�������������������������������������S������+����������������?���,�������������������������?�/�?�(�������>��������������������������������������

����������S����"��� �$��� ����������������)$ ���$����$�������'��4�4�����4�����5�(�&������ �$��� ����8������)$ ���$���������(������������������������3�����������$���8�� �����'�� ��4����������� �������� ���$������8���'���$����3���������)�8��$��'������ ����)�����$����$"��$��4����$"��

��������������S����"��+�,�''�����������������������������/�NO��������� ���D��3����������ADB�/�3������''������3������ ���������������>����3��/������������>������/�R#S�2�SW&R2�

Page 296: Game Programming With Python, Lua, And Ruby (2003)

� � !�

���������>������/�M�����M����������>�������/�������N���������O����������"��������E���S�����+�>������,����������>�������/�������N��������������������������/�N�"��������>������>��*�-��"��������>������>��*�-�O������������������3��������/�N������O����������O����������>�$������S�������>�������/� &#2S�2%2&#2S�2�!6����������>"���S�3��S�������/�������+M �����>$��M,����������>�������/�������S����"��S����������������>�������/�������S����"��S����������������������������

, �� �� ��������

%������)�$�����J�0$�����)�'�)$ ���$�������$5���������� ������������4��4�������� &����$�����$������ �� &�)������������$�������'����������"���4���5���������� �������������$������������������5��4�"��4�� ���������������4������ ������'��������4������$��������$�'��$��$�����4����$"�'�$��'5�%����)�������� ���$������� ��4�������'����

������S��������$������������� �$��� ���8��$�����������$)�������$���������'����$�(����������

��������������S������+��� ��"�,�''������������������>�� ���������������>�������������������/�NO����������>$���������>?���>��/�#6%>#6%SW��R����#����+����,������������ >��������>?�/��>?������������ >��������>��/��>����������� ��>$�������]/������������������������''����������������D���������������������� >����3��/���������������������� ��������������+�,�''���������������������''����������������"���������������������������/������+�,����������>�����/�M������M����������>�������/�������+M�����>$��M,�''���������+M���I�������>>>>M,����������>�������/��>9�)��>������>����������''������������$���3����������������������>�������/�������S����������������������������

�$������D�$"�����"�����$"�$�������4�����������"��)��'�����$���3����)������������'��&�����,��

�����������$���$�5�������"���S�����)$ ���$���� �����8��$�������'��)������ ���������$�

����"���������'�������S��������

��"���S����NO�''�W����������$������ ��$��������

Page 297: Game Programming With Python, Lua, And Ruby (2003)

� � <�

�����/�����������������"��������E���S�����+������������������$������N����������������������������������/�N�������+"��������>������>�,��������+"��������>������>�,�O��������������������������3��������/�N�+������+,)-�'��,�)������+������+,)-�'��,�)�����O��'�'���?���*������������������������������8��/�������+.,�����������������O���������,�����

���$� �������$��$������S���������$����������S����"����$������������&���������

''������������$������������������������/��$������S�������NO�"��������E���S�����+�������,�''���������������������"���"��������E���S�����+���������������S����"��N������������������$������S��������/�����������������O�,�

(�������$��������8� ����������"���S����+,8��$������$��������8�����"��������$$�$"��

''���������"������"���S����+,�

Page 298: Game Programming With Python, Lua, And Ruby (2003)

� � �

+�����������-�

%�8�����4�'����)�.5�%$����$"������ �$������$������ �����$�(�� �$�����������$���$�����(��.�%��8��$ ���$"���$�4����$"�3����������$��������8� ����$"�)$ ���$�8� �$������$"�����"����"�� ���� ���8���������$"�(��)��������$"�����)����5�

��4� ����8�����(��.������������ ��4������$����$��44�� ����$�����$��������������������5������������������ ����$�'����)�� ����$"�(���$���"����4��"���5�%���"�����8�����(�������������3���������8����������$���$ ����$����)�$�������$�������� ��������$ �����'�����������������"���5�

�0�*�

����

�)����'�$��������3�����4����$�������.�)�����8� �� &����.����"�����$"�)�������%���������"�$$��8����1� �����>�$�8����.??����"�����$"�)�������%���������"�$$��8�������&�2�$&���$���$��1��&�(��5�

)����C)�����

��)���� ����$"��$��%���)$ ���$8���4��$�����������(���������������4�������������)�����

��"��$�5������4��$�����4�$��4�(�5��������S����� ����$��K�$���� ����$�.��4����

;L����'����)�����4�����(�������5�%���%���)$ ���$��$��������������S�����4����������3����)�������"��$�5�

�$����������������S������$���.��$3���$��$�8�������5��)������������$ ����5�������5��)���������.��������)�����������)�$�������(��%��5�2�'�3��8���$ ��(�����%����.8��$��

�$ ����$���)�����(�����������������'��44���'����$��$��?�����.� ����$�8������'�������� ��4�����'������$"�������$������$��$�������������� �������� ����$���4��4����5������������$�� ��4�� ����8�����$�4�� �� ��������&����&��������

�?�����MLM�N����������1���>�4�O�

�0�*�

�����1�$"��$"�

.��4��������3�����������)�����)��$"�����$������)�)$ ���$���$����F� ���'��$� ��4���$"5�����������$�������������� ��4����� �$��$ �����7�����$)�������$8�4��3������4����$&�"�8��$���44����)$ ���$��3�������$"5����������)� ����$�����)��$� ��������$"��$"5������ ������ �$)��$"����������� �� ��4��������������'$�'����)���$"��$"�$������$������$"�������� ��4�������F� ��5������ �$� ����4��������'��$�'��&�$"�'������������$��$����$"�"�8�������� �$����$"�"�� �$$���4���� ����'���4���� ������F� ����� ����$��

���������$"���5�( &���8������?����� ����$�� �$�������������������$������$"��$"��$������5�

Page 299: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$�����(���������� ��$�����)�$������'��������F��8������������� ��������$"�����

���S�����+,� ����$�5������ ����$�����������������F� ����$�����"�3�$�(��������3�������"����"�� ���� ���5������)���8���)����$���$ ���)�(��'��44���'����$�.� �������&���������$"���&��������

�?�����MLM�N����������1���>�4�O����S������)R��������S�����+�,�**�R����������� ��**���� ���%�������������**�6����������"����S������+R�%��,�

1�����������8��3����)$ ���$��$�����(��%���������'��������(��������������� ���$���������)�����(���$���4������K���'�����)��$������(�����$"���)��������������I�������� ��$�I�'��$������$������'��L5�����(��������&��4����� &��)�)$ ���$�8�"������8��$���$���$���4���������������$)�������$5�+��$�����(����������� �����8���������(����F� ����$���$����$��� �����������������������������)����5�

+��$�3���(�� �����.8����� ������)$ ���$�"������3��������� &5��������� &� �$���$���$����"��$����������.�)$ ���$8�����������4����3���������$��)����.8��$��'����������$��3���������.�)$ ���$��4����� &5���� &�� �$��������������$��$�������$���$������

��4����$��������$��$��78�������4������$���)�'�� �� �$���� ������'�������S"�������

!������S"������+���S#�����)%,P�

�0�*�

����������� ������������������������������������������������$���������������������������������������������������"��������>�%��"'������"����"����������������������������$�����������������������>�

, ��%����������

(����������� &����4����3���������$��)����.5�*� �������$���$��������� &���4����$�����

3����K���8����$��8��$������$L������(�����5�����(��%����))������$������)���)�� ����$���)�����$�4����$"�������� &8�A����$"���� &�)$ ���$�8��$�����$�����$"�.����(�5������� ����$���������������$��������D����$�������!5�5�

��� &� ����$�������$��������"�3�$������"��$�������������S#����8���4��$�������(��

K)%��L8��$�G��������44��4�������$��7��$�������� &5�����)$ ���$���� ��3����.�3���8� �$3������������ �����4�$��$"�(��3���8��$�����$�4��������������$���������� &5�

����(����� &�����������4����������$���)� ���$� ����$����'��$�.��$��(�5�����������$��(����4��3������$�.8��$���)$ ���$���������$�4������������ &5�%���3����8�)$ ���$�8��$������$�����4������$������4�����)����������� &5�

Page 300: Game Programming With Python, Lua, And Ruby (2003)

� ����

9����$���

(��3����������$�����%������$���$������������ �����8��$�������)�������� �$��������"�������$�� �4��$������4� �)���������'���5�����3��������������������(��3���������"������3����8��� ���3����8����������)�����5�

(� ���3����� �$������ �������$�'�����'����$������ &���� �$&��)�(�� ���5������������7� ������ �4��5���������$������� �4���)�3�����������"�$���������)������������$���)������������ �������$��$��������$���������$���)������$$���������� &�������$ ����������� �������$5��

+��$��6(2(�������-�, ��%����������

��������� +�)��� ���)����

���S�������+,P�� 3����� .�$ ���$���������3��������������4��)������ &8�4�4������8��$�����3����������������������4�

���S�J����+,P�� ����� .��4������'���������$�������� &�

��O�$�����KLM�� 3����� 1�3���������4������$�������"�3�$��$��7�

���S��$�������+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S��� ��������+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S�� ��������+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S������+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S�����$���+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S����$���+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S�������"�+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S�����������+,P�� ����� /���$�����)�������F� ����� ��4������8������'������

���S����"�����������+,P��

����� /���$�����)�������F� ����� ��4������8������'������

���S���������+,P�� ����� .��4������'���������$�������� &�

���S����$�������+,P�� 3����� ������������$�3�����$���������� &��$������$����4��$�����������������$�

���S����� ��������+,P�� 3����� ��������.�)$ ���$��$���������� &��$������$����4��$�����������)$ ���$��

���S���� �����"�+,P�� 3����� ��������)�������������$"��$���������� &��$��

Page 301: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��6(2(�������-�, ��%����������

��������� +�)��� ���)����

����$����4��$���������������$"�

���S������"�����������+,P��

3����� ��������"�������������$���������� &��$������$����4��$����

���S����������"�+,P�� 3����� 1�&����$��$���$��� �4���)�"�3�$�����$"8�4����8��$������$����4��$���������������$"�

���S��������+,P�� 3����� ������������3�����$���������� &��$������$����4��$�����������3����

���S�������$���+,P�� 3����� ��������$���� �3�����$���������� &��$������$����4��$�����������$�����

���S���������"�+,P�� 3����� ������4��4���.�����$"���$���������� &��$������$����4��$���������������$"�

���S����3�����+,P�� 3����� �������� �4���)��$������$�������"�3�$��$��7�

���S����3 �����"�+,P�� 3����� ������������$"��$���������� &��$������$����4��$���������������$"�

���S����J����+,P�� ����� .��4�����3�����)���4������3���A������

���S����3��+,P�� 3����� /���3��������$���������"�3�$��$��7�

���S��������+,P�� 3����� /�4�� ���"�3�$��$��7�'����"�3�$������$��

���S�������+,P�� 3����� ������������ &���4������"�3�$��$��7�

���S#������ �������� ��$��� ���� �������������������(���������

���S��������+,P�� ����� .�$3�������3�����$�������� &��$�����.��������

���S�������+,P�� ����� ����������$",����$"���

���S��� ��������+,P�� ����� .�$3�������3�����$�������� &��$�����.�)$ ���$�

���S�����$���+,P�� ����� .�$3�������(��3�������"�3�$��$��7������.���4��$����5�����������������������)����

���S�������"�+,P�� ������������

.�$3�������(��3�����������"�3�$��$��7������.�

��4������$"�K�$�.���������)����L�

��O����������KLM�� 3����� ���$���������������������4� �)� �.���4��

���S�����+,P�� ����� /���$��������4���)���3�����$������ &�

%���"������3����������7�������)�������$�����$����(��������� �������$3���$��$���������������4����$3���$��$��5�9$ ���$��'�����$��$�.��$���74���������(�������������� ����$�"�������$3���$��$�5�*� ��)$ ���$�'�����$��$�(�����������'$���)���$ ������$��$3���$��$�8�������������"������3����������$������)$ ���$���)������������$3���$��$�������5�+��$���)$ ���$���� ������8�����$������������$3���$��$��)��������)$ ���$������ ���������5�

Page 302: Game Programming With Python, Lua, And Ruby (2003)

� ����

C����� ��

:��������������������4����$��.�3����5�(���44������'����4��8�)������������$����"����������5�9�������������4����$�������� &��)���������$����"��������������4����$�����4��$���5���������� �$����������F� ��5�

�������S����� ����$��'��������$�%�&S��#2�6&�&�)���)��������������

%�&S�%!W���#2�6&�&�)�����"�����������'��$� �� &�$"��$��7����$"��������5���'�

�������� �$���� �������'�����������S������������+,�)$ ���$��

3����)���S������������+���S�����)R�%������8�S����8�,P�

��������� �������$�'����������� &8�4������$���������� &���$�'���������'����������� &��������8��$�����$�����$�������������5�

+��$���

����(��%��������������)�'�)$ ���$��)�����$�4����$"�������������$���F� ��5�H��

���������������� ����$"�����)$ ���$����S�����$��5������)$ ���$� ���������$�'8���4���

�������$�����$�4���������$���������� &5�����)$ ���$����S"����$�����4��3�����)���

�����$"���3����)�����������������������������'������$�������� &M�'��$����S"����$�����"�3�$��$��$��7������4��$���������������8����'����������$������$�����3���5�

�$�������$"��8��$�����(��%��8�����"������3�������������&�4��'����$���������$����(��������� �������$3���$��$��5������$�������$3���$��$���������� ���������� ����������"������

�$3���$��$�8��$����� �$����4������$��7������%�&SW% &%#!6205�/�"�����������4������$�� �$���������3����$��$3���$��$������������ �����$�� ��$"��������"������

3�����K��$"����S���������"8�)����7��4��L5�����"�������$3���$��$���)���������� �$�

��� ��$"�����$"����S�������5�

�������S"�� ��3��$�����S��� ��3)$ ���$�������������"����$�����������$3���$��$��

�)�(��)$ ���$�5�9��������S"�� ��3�4����������$3���$��$���������)�����)$ ���$��$�

������� &������"�3�$��$��78��$�����$����S��� ��3�4�4����������)����������� &��$�����������������$�'��$3���$��$��)�������)$ ���$������"�3�$��$��75�

������������$������)���������)��(��)$ ���$��)��������$"�'����������5�

%��S"��������$���4��������������������)��$���F� ���$�������� &8��$��

���S���������$�������������������$�������4��)������ &������$�'�����������)��������

��F� ���$�����$�4�4�����������5��������S����� ����$�����������������4�(�� �$&�5����������� ��������� ���'��������� �$&������7�������$���8��$�����$����������� ����$"��5�

�������S�����+���S#�����)R�%�������S��������3����)R������������������)R�L���D,P�

����)$ ���$����S���"���"�������������3�����)���������&��5��������������3�����$����������������������������'������$�������� &8�����&����$������3��������4�������� ����$"�

���S������$��5��������S�������)$ ���$������������������������3�����)��$��������

�$��75�������� �$�������3������'�����$�����S��?�8�'�� ��4�4����&���)����������� &��$��

Page 303: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

4�������&���3����4����)�������������5��)�����������$������������$�����)�8����$�

���S��?������$�����5�

����������� ���������� ����$"����S�����$����

3�������S�����$���+���S#�����)R�%��,P�

/����$"�����3�����$����������$�������� &������$����� ����$"��������S"����$��� ����$��'�������4� �)� ��$��7��

���S"����$���+���S#�����)R�%������������� ��S����?,P�

�� �����)�������$�3����������$��)��7�������8�������������)��$����������������$�����%��5�

�0�*�

����

������)����.��))������4��������'�$����$"���'�(����$�����������5�(���������3��)$ ���$�����'��&�'����.�������8�'�� �����������������(����������$���$��7������$�����5�(������ �������$��(����������$�����������$��7������$�����&���5�����%���

�����'�� ����$������� ��4��������������S���"���8����4�������3�����)������$���

�$������������������"�3�$���� &�4������$8��$�����S�������8�)��������$"�����3�����)�

�����$����)��������������"�3�$���� &�4������$5��������S"���� ����$�������������)$ ���$������'����"�������$������)������$����$����������G�����5�

+�������

(���))����4��������44����)�������4����������5���$ �������44�������4���������� 8����'�����)��$�)�$��4��"�����������$�������$ ��4�������$��7����$"�.����������))���$"�)���������������$"5�

%���$"���$�'���������������(�������� �$������$�������$"��������S���������)$ ���$��

%��S#�����)���S����������+���S#�����)%,P�

�������S����������)$ ���$�4�����������������$���������� &��$�����$�����$����4��$����

������S#������������4����$��������$�'�������5�%�������"��������F� ����������$�����������'��$�������))���$���������8���������$�'�����������������'$��$��4�$��$���$�������� &5�*� �������������������$��$��4�$��$��"�������$3���$��$�������5�

1�$�4����$"��$��7����$"�������� �$����� ��4������������$"��������S��������$��

���S������)$ ���$�8�'�� ������'��$�������4�$������������$$�$"��������5�(��

�������� �$���� ��������$"��������S������������+,�)$ ���$5��

Page 304: Game Programming With Python, Lua, And Ruby (2003)

� ����

��$$��&��� ����

+��$�.��$��(������'��&�$"��$���$���8������.��$��(��)$ ���$�� �$���� �����5�9���.�)$ ���$�����'��&8���������������)����'�$"��

�5� /�"����������.�)$ ���$�'����(�5�

�5� ��������)$ ���$������� �������$���������� &5�

�5� �����$����"��$����������)$ ���$��$���������� &5�

#5� .��������)$ ���$�'�������S����5�

�������S�����)$ ���$����&���������$"���&��������

�������S�����+���S#�����)R�%����������"�������������������,P�

������"��������$�����������$��"������������$�������)���"��$����$��������������4�������$���������� &5�

�)���.�)$ ���$�$��������&��4�����)���$ �������(��3������������)�������)��4�$8�������� ����������)���$ ���������3���5���������)���$ ���������������$����$�4�������$��

���������'�������S�� �����S"���� 8��$�����S���� 5�

%�����"��$����$������)$ ���$�3�����������$�4�44���)����������� &5�(����&��������������������$���3�����)����$�������� &8��$�����������)$ ���$������������4������$����� ��

���������������������������������$�������45��������S�����)$ ���$�4��4�"������$���������

�$������4�� ����4'����8��$�����4� ����)$ ���$8����S�����8�������������� &������������"��������)��'������'��5�

.�)$ ���$�� �$�����������������7��$��(�8����� �$�A���������� �3������$�.��4������8����$"�'�����7��$��$"�/����$�������$��$����������'��5�

���0������� ����

(�,��.�%��������A�3���$�� ����$�������������� ���������������������'��$��$�.�%�������5������� ����$���������������$�������!5#5�

+��$��6(3(�������-��� ����

.�����������&��� ���� *B�#�$�� �����-�&��� ���

�� ����+,�� ���S�� ����

�������"�+,�� ���S�������"�

������+,�� ���S������

�����"�+,�� ���S�����"�

��"�+,�� ���S��"�

Page 305: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

+��$��6(3(�������-��� ����

.�����������&��� ���� *B�#�$�� �����-�&��� ���

�����+,�� ���S�����

0���)������)������8����S�������"���������$���������&�����������$ �$�������� �����������������4��)���������(��� ���$�5�(�� �$����������7� �����$� �$&��'�����$��$���)����

����$�������$"������$"����S�� ���8����S�������"8�����������S��$� ��� ����$�5�

+��$� ������'�������%%���"��$�8����S�� �����7� �����������$������$�K�����L�

������5���������S�� �����$�����S��$� ����������������7� ���4��� ��4�����(��

�$&�������'��5��������S�������"� ����$�8���'�3��8� �$��$����7� ������ �� ���5�

����)$ ���$����S�������"� ����������$���4�������3������� ���$��)� ���� �$���$����$���

����$"5��������S"��"��$��8����S���"��$��8����S����8��$�����S��"������������������$���4���� ����)����8������$����$�4�����"������3��������8� ����(��)$ ���$�8��$����&��.�)$ ���$��� �����������(�5��

Page 306: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

,�������

(�,�� �4�������������������)������ �������������4��$�8��$����(��������$��� &����)��������� �$��������$���������&5�2����������)�'���4����$��4��$�����)���� �$��$�$"��������$�7�� ��4�����

•� ������$"��������������&��������$����$"���F� ����$���(8�'���������$"������$����(�5�

•� /� �����������������&���)���������$"����4����������F� ���������� ���$5�•� ����&����������D�$"�����.�%������������� &5�•� ��������$�(�����������3���'����5��������&��"���� �$���$����)���"����

��F� ����$��"���� �$���$����)���"������3����������$�����.�%��5�

•� ��������� ����$���)�$��%���)$ ���$�K�)�������S�������$�����S����L����

���S�������"5�

•� ����(��%���)$ ���$�����������'����$��������>�������8�'�� ���������'��44���

�$���.��?����� ����$�5�

Page 307: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

7��� ����������������

'8� 6���� �$,����������"���������3���5��� �������'��&5�����������$����$"�����������������-�

�8� %��1�&�����������3����������(5����)��������'������$������������4���5��)����������$"�+�$��'�8�����������

�5� 04�$�4��� ����$��4���4�����4�����������������)��������/$��4���$��$�������������$5�

�5� ��3�"�������������3�������� �����'�������� ����$����$���������� �� ����$����� ��$"������ ���������� ��1H��0.:1*���X�00EX.2%��*/�!X/%>��H5�

�5� ��4��%��>�?��W��3���>�����

/8� 6��+����� �$�������$���������������(��%��-�

�8� %��(������5��"�+�&��4�"�����3����)�'�"���8�������%�������������

���4�GG�������5��"G'�&�G�

���������������$�%����� ���$��$������$��$���5��(����$����

���4�GG'''5��5��"G��$��G�5�G�

Page 308: Game Programming With Python, Lua, And Ruby (2003)

� �� �

*1�������

'8� 1�&���� �4���)�������3���5������ �� �����$������4����$"�'����������)�����3����������������'������44�$�5�.��$"������'������$�����"����)�����3������ ���$8� ��$"������$������)�4��������3��8��$�������'��������"��3�����$���4���� �$���$��5�+����'�������������� ��$"�������&������"����������$�������$"����)$-�

/8� ��&�������&��������1���������'���"��������� ������$�����'��������(���(��)���������3����4������"����)����)�����3�����������'�����$��3�$������ ��4��7�(��"�������&����&�5�%"��$8���&������� ��$"���������� �$���$����$��3��������5������)�����������$����$"����'���� ��$"�������&������"����������$�������$"����)$5�

28� ��&����)�'��)��������4���(�� �������4����)������������� ��4��������������� ��4���������$"�����.�%��5�

Page 309: Game Programming With Python, Lua, And Ruby (2003)

� ����

��������/��,�������)������������$�

����$"�������������&�� ������$���3���)��'���5������������������$8���������������������'�$$�$"�"���5�

CC������

0)�������������$"�"��� �3������$���������&8�(��������������'�����������$�����"�����$�����5����������������$�������������������$�����$�)���)����"��"�������4�8��$������������������������'����������)�������""����"�������� ��������$������.5����'�������)�������������������������)�����4��F� ����$�'�� ��(���������$���4������K�����"������(������������������)���������"�����4��$"��)�4��F� ��L5������ ��4�����$��������"���"������)�'�&���4��F� ��5�

Page 310: Game Programming With Python, Lua, And Ruby (2003)

� ����

�����*�����

�����$"�$���������������������4�4��"����"����5��$�(�,�� ���8�������)��������$"�$��������4�$���� ���$�����������$��M�������)������������������'�������"�$$�����$���������'�������3�$ ���4��"�������5�������)��������$"�$��������������������$�� ��4����8�'�����������������������$���'���4��������A��������5�������$"���)��$"�$��������������� ������3���$ ���)�������$"�"�,��4�4������5�

��%��� �

%�&���������$����"�$���)�$����������4����$"�"���������������$�A���$"�$�� ����������%�&��$"�$�5�����%�&��$"�$���$��%�&����������)����������4�$�(���$����(5�%�&�4��3����������8������ ���$�8��$��(��� ��4��$"�)� �����������������'���'�$�����������������$��������4��"�����$"�(�������5�����%�&����������4�"�� �$����)�$��������4�GG��&����5$�&���5$��G�$G5�

����%�&����� ����'������"�$����������'����@�3�� ��4���$��1�D����,��F����8�������"��'�������"��������������������"������������� ���$����(�4���)���5�����%�&��$"�$�������)�������������)���(��� ��4������8��$���$�4���� ���������$������$�)�����K5�$�L�������)�$���'��������(�������5�����"����%�������$�����'����$�������&����5���)���8�'�� ���$������D�������"������(��%���������5�%������$�����"����������44������������)�$������(��)�����KA���5���)������������7� �L5�

%�&��������4��������$��������$��$��������� �(� �$��5�����%�&���������"$��������� ���$�������&�$"�)�����3���4�����$����������$������*$"������$��9��$ �5�

�$�����

.��$(�������������4���)����"������3���4��$���������C4����4���$���)����������4�4��������������)����������"��������"$���������5��������������$��.��$(�����������&�� �����)�������������������3���4����4�)$ ���$��������&����$����7�$"8������$"�4����� �����'8��$��������$"����"��)����5�.��$(���4��3�������'����)������$"�'������$�8�"��4�� �8��$��$��'��&�$"5�

.��$(�������� �$����$���������:�(��������$��������� �(� �$����$������(��)����7��$��$"������)��$��)���� ��4��$"5���� �$����������7��$�����$��� ��4����'����/��8��$�������� ������$��������������$"����$�.��4��������)���������&5�

*����

*$�"��������I$������ ��4����I�4DD���"�����$�4��������%����,��07����$��%��"�,��/� &,$,/���5�*$�"������)������)�'���8�'���������7� ��������$����� �������������$���������$��������� �(� �$��M���� �$������'$�������������� ������,��+������8����4�GG'''5$�$"$5��"G�$�"��G5�

>�����$�5!�����������$ ������$�����.���$�����.��4����<�)������ ���$5�.���$���8��7� �������)��������+�$��'���$��1� �$����������$ �����'����������������������8������"��*$�"������������4���������$�����7��4�����$"���������'�����������)��'��&�$"5�

Page 311: Game Programming With Python, Lua, And Ruby (2003)

� ����

*$�"����������$���3���4������3��$�������$��������)�'� ���$����������������))�����3�����$���$ ���"���$�����$�'�������$����3�������"$���5�����"��������$"�$��������$"�(�8���(8��$��07�����8�'�� �������.??��������5�(�����������������$ ���$��)����$"�����4���������$"�"��)��� ���$"���))���$����3���5�*$�"�������$��7 ����$���7��4����)��� �����.??G(��4��F� �8��$���������"�����7��4����)���'������������������������ ��4����3�����$�����4��� �M�)��������������$�8��,��"��$"�����4�$������������)� ��$"��$���'����'��&���$�������� ���$5�

����*$�"���'�������������������$�'�� ������4���������3�����$�����"�����)��������$"���� &������K����9�"���<5�L5�����)��������4��$� �����$"�����3����$�*$�"��������� ����������4��)�����'�����)�������4����������7�����$��

&����:('(�+���*�������$��

�������S�����+�����,�

����� �����������7������ &�'�������45�0$ ��������4��������$� ������8��� ��4��$���$�������4� �$����� ��������&����"���5�����44�����)�� ��$��������'����K�8�L��$�8��$������ ���8�������4,����'�����"��� ��$������K 8 L8����������� �$��$"�)�����5�

*����+$������������������

*$�"���������$������)���))���$�����$��������K4��)�7��������'L8�� �$��K4��)�7�������?'L8�

������K4��)�7��������'L8�)�����������K4��)�7������ �'L8��$���'��4�������+��'$���D$����

�$����'�����$���L8������"��4�������'����� ���$����$��4����$�����$������$"�$�5������� �$�����������4�4���������'��������������4���������3�����$5�1�$���)��������$������������$��"����4�� ���������������$��������<5������"��<5�8������"�������������4����������� �����������'$5�����=�������$�������F� ��$������$�� ����'��� ����8�'���������������

����4�����������������K)����$���$ �8�������������3�������'������S0������8���)�'��7��4����

���$"���'������S�����'�8���'������S$���D'�8��$����'������S�����'�L5�

Page 312: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��:('(�*�����$������

�>�� �� �����) ���

��'$���D$����� �������4�� ��

��'�����$����� �� �$��4������4�� ��K ���$����$��4����$���L�

+��$��:(/(�*����&$����+$���

�>�� �� �����) ���

�'�$����� %�����)�����������

�'$���"����� �'�� ����� ����������

�'$���"������ �'�� ����� �����������

�'$���D�� 0��$"����� &�������)�����

�'$���"��� ����"������� �$�����4�$���� ������

�'������� ��$�������

�'"��������� 9���$"����������

�'"����� ����������

�'����� ����'���7����

�'���������� �����$�'�������

�'��3������ �$3������)� �'�������

�'���3���� ���$�)�����������

�'���$���� ����$����$��

�'������� 1������ �������'������))���$����3����

�'�������� 1������ ������'����)��� ��$�����3����

�'����D�� +����)����8�4��$&������ ��������� ����

�'���"��� ��$�������&�$"�

�'�������� ������������

�'���$��� ���$���������"��$�����$���)���4�� ���

�'������ ������������

�'������� ��� &�'��������� �������������

�'������� �$��� ����$��)�����

�'��"����� (�"�������������&�$"�)�����

�'������� +�����)�����������

�'������ +����)����8�)����3�$�����4��4��������

�'��3���� *� ������&����� &��$��'�����'��3��

Page 313: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

+��$��:(2(�*����-�����

�>�� �� �����) ���

��'������� �������� �$�

��'������� 1����4��$����

��'$������� ���� ���$�������'�

��'������ ���� ���$�������'�

��' ������ �� ���$��)����"����

��'������� �� �����)������� &�

��'����� ���� ���$�������'�

��'���� ���� ���$�������'�

+��$��:(3(�*����- ����

�>�� �� �����) ���

��'$���D$��$�� *74����$"������

��'$������ ���$������

��'������ 1�$���4�� ��

��'����D�� .�����$"���"��$��

��'���������� � �����

��'���������� ��� &��)���$������

��'�?����� ��� ��� &������K4������4�� �L�

��' ������� 9��44�����&�

��'�������� 2������

��'������ ����������������������������

��'�������� .�$ �3��������������������4������$���������'�

��'D���� E���

��'�����0�� ��))���$�������������)���������������

��'��"�������� %���"� �'�$��

��'��"���'� �� 1�"$���'����$���$������$�

��'��"���'���� 1�"$���'�����$������$�

��'������ ��4����"��$���

��'������ ����������������

��'���"���'0�� %����"$����8��$������8������8��$�����"����D���

��'������� ���3���

��'�����"��� :$ ��4��������4��$"�

Page 314: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��:(3(�*����- ����

�>�� �� �����) ���

��'�����"-�� .��4��������4��$"�

��'���������� �)��4� &�"��'������A�����$����&��3������

��'������� �'����

��'���������� �������������

��'������������ �������������'�

��'���""���� 1������ ����""���"�����

��'��$������� :��������

��'���������� %$��������4�$$�$"�'��������

��'������"�� /�3��������$���$"��������

+��$��:(4(�*����, ����+$���

�>�� �� �����) ���

��'$���D�� ��))���$�����$���'������� &�����"$��

��'$���D�� ���$�����"�������$����� &�

��'$���"����� �����$��"����)���$"����$��

��'$������� ���$���'������))���$������ ���$�������'��

��'$���D�� ����&�$"����$���$������$�

��'$���D�� ��� &�'����

��'$�������� ���'$�������$�'����

��'���������� +����'���������)��� ��$�

��'������� ���$��'�����&����$�� ������$���

��'�����'������� �&����$�� ������$����$������$�

��'����0�� ��))���$�����$��������

��' �D��?��/$���DS0�� ��))���$�����$&�$"����$���G��7���4�� ���

��' �������� ���$��)���� �4��$"���' ������������

��' �����-�� ���$��'������' �������$�������

��'"������ ���$��'����'�����"���������"$�

��'"������� .������"�����

��'"����-�� 04�$�"�����

��'"����$������ *�����$�"���$����'$����$��

��'D����� E�������'����$��&���

Page 315: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

+��$��:(4(�*����, ����+$���

�>�� �� �����) ���

��'D��-�� E�������'����&���

��'�����'0�� ��))���$�����$��������)����������

��'��"���� ���$���'������&�����������&��$��$�������$������

��'���$���� �$��� �����������$�������

��'������� �$��� ����������$��������

��'������'��3�$���� 1�3�����������������

��'������'�������� ����� �������������

��'�����������S0�� ��))���$��������)�����������

��'������S0�� ��))���$�����$���'�������� ���$�������'��

��'�?��0�� 07������$��K��$����))���$��"������F� �����$��L�

��'������� �$��� �4���$����$��'����

��'��88���� ��))���$��4�4��������

��'���D0�� ��3�������))���$���� ��������� &�������

��'��$$��$����� /�������$�������

��'���������� 04�$�� ���������$��

��'��������'������ .������� ���������$��

��'���"��0�� ��3��������"$����$��������

��'�������������� ��4�������$���$������$�

��'������������'�������� 2����'���4�������$���$������$�

��'������ ���&�$� �� ���

��'������0�� ��))���$�����4��"������$���

��'���� �� ����)����$���$������$�

��'������� ���$����������""�����������3�$��8��$�������

��'������ �� ���""��������$�������8�$���$������$�

��'������� ��))���$��'��������$��������

��'������ ���$�������'����'��������"$�

��'��3���� *� ������&��'�����'��3������"$�

��'�������� H����'����$�������

��'������"��� H�$���$"����$�����������"$�

���� ��*������#�$��

Page 316: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

������������$������)�)$ ���$��)��� �����$"���3���M�������������������$����� �������$�������<5;5�

+��$��:(5(�*������#�$������&��� ����

&��� ���� ���)����� ������ ��

&����$$�� ����� .�$$� ���� ������$�����$���������������$�4�������"������'����"�3�$�����$"����

% ���8���F� �8�����$"��8���$"���

������S������� ������������4�� +������$�����"���

�� S������� ��)�$�����'������� ���$��$���8���$��

�� S ������ ��)�$��� �' ������ 9�����$���8�)�� ���$8��$�������)� ����

����S����D��'�$����S ������

���'��)����������$���$"����'��$��'���������

)�����8�)�����8��� ����$�K78�L8���D��K���"��8'����L8�����������

����S$������� %����������������������3���� �3�$����$��K�4���$������ ����$��$�78�8D� �����$������$�����"���?�'����L�

����S ������ ���'��"�3�$� �' ������ 9�����$���8�7��$���� �����$������$���$ ����$��8��$������������

����S������� ���'��"�3�$���'������ �����$���8�7��$���� �����$������$���$ ����$��8��$������������

����S�������� ���'��"�3�$���'������� ���$��$���8�7��$���� �����$������$���$ ����$��8��$������������

���S ������ 9����������'����4���� ������' ������

9�����$���8����������8�7��$���� �����$�����

)���O������� 9����������'����"�3�$������� ����8� �����$�����K78�8DL8���D��K���"��L��

���S�������� 9����������'����"�3�$����$��� ���$�8� �����$����K78�8DL8���D��K���"��L�

W��&����$�� /���$�� ���$�����������3�����

0�F� �8����������$����

��D�S�$C����� .��������$���F� ���$�������48������$���$��������������)$ ���$���

$�����$������������

���S������� .�����������3��������F� ��K� ���L��

����8�7��$���� �����$����8������������

���S�����$�� ������$���F� �,������������ ������F� �8�3�����$����&���

���S�����$��� �������3�������������������$ ���

0�F� �8�����������

���6� ����&����$��� :����'��$�4�� �$"���$�� 0�F� ��$���8����������

Page 317: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

+��$��:(5(�*������#�$������&��� ����

&��� ���� ���)����� ������ ��

��F� ���'��������������������

���S ������ �����"�3�$���� �' ������ 9�����$���8�4������$�K78�L8�����������

���S������ �����"�3�$������'������ �����$���8�4������$�K78�L8�����������

���S������� �����"�3�$������'������� 9�����$���8�4������$�K78�L8�����������

���S�������� �����"�3�$������'�����8������&�������4���4������$���"��$����

���$��$���8�4������$��K78�L8�����������

�����������������)�'����$�����4������3����������$�*$�"��8���������� ����$����$"�����)����'�$"��

��3��S��������3��S���"����?���S�� ����S ��3���2&#��72#��#�����������2�5&%#2�

%)������$"�������S�����������"�$��$�*$�"�����3��8�����$�7�����4������������� ��������

)������)����$������������������$��������4���$"���������S$������ ����$�5����������

����������������'��������8����������

����S$�����+M��'����M,�

����,��4���������4��5���'����)��������)����5����)����$"�����S����D��$����S �����'��������44�����)�� ��$����)�����)����K���7��$���� �����$����L8�������4����"����$��'�����K'�� ��������)�$����$� �$���$����������L8��$�������'��)����������8�����)����� �$����)�������$�'���������$���$"���������������

���S ����+M �'������M�M �'����M��������3��S���������3��S���"��,�

��'�����������������)��������48���� �$�������S������)$ ���$����� ��������F� ����$�����

��45��������S�����)$ ���$�$��������&$�'�������4���)����$���$�� �����$������$�������4��$���������"�3�$���$�A��$����K'�� �����"�3�$�����$�����������$� ������� ��L��

���S�����+M��'"����M��=�<��N����/MR�S#����MO,�

Page 318: Game Programming With Python, Lua, And Ruby (2003)

� �� �

������� &�������3�$"�����3������)�$��$"�������� ��$"��$�7����$��5�������������8���� ����

�����������S�������

���S�����+M��'���?M�������N����/MR�S�?��MO,�

���� &��������*$�"�������"$�������������3�$�������5������3���������)���4�$"8��������

�?��� ����$���

�?��+���,��?��+-�-,��?��S��� ��+,�

������ ����$���4�4�����)���"����4�� ��8��$�����$��?��S��� ���4����������� �������$������7������$���'����$�������$�� �4�5�%)���� �����$"�������4��$������"����

4�� ��8�����)�$������4������� ����������4�������$�������4���$"����S��������$"����������

"�$����� �$3�$���$�5�����������������������������'�������������/��)�������4�4�����

�)����� ���$���$"�$�� ���M�9�9��������������$"�78�� �����$����8��$����'$���D$�����������4������4�� ���

���S�����+M��'$���D$���M��9�9��N������/�O,�

����*$�"������ �� ����K������$ ������$�����*$�"���)����)�������$�����.�L� �����'�������� ��$���)������������$ ��������������������$��� ���$��)�����3�������"$8����'���������$����3����7��4����K�3������L�)�����������$"�������5�������� �������)������"������7��4����)���$"�(���$� ����$����$�'������(5�

����

����������'������$���$���"������3���4��$��4���)����4�������������)���)����4������4�$"5�����������(��������"��4�� ��������8��$�������$�%������������ ��4������'����(�5���������� �����'������:���������)��� �����$"�'�$��'���$�������"���7��5��������'�����$��$�.��$��������� �������"�����$"�"�����������'��$���(��$��(�5������� ���$�����$����$�4����������K��4��L��$������3�������������������4�"��$���������:����� �(� �$��8����4�GG'''5"���5��"G5��

��������%���� �����������'����4����$��(��4��������(�:�����������$����(�:�����������5�����(�:������������� �4������)���$���$"���))���$����4�)� ����$�����"��5�������4)� �� ����$���44������������9��$���9�)�$��8����'���������))���$����������$����D����)���7�5����"��4�� ����$"������$��'������'��44��������3�������(�)$ ���$���$������'�����8�����"���$����"�� ����$�8���� ������ ���������)� ���)�����7��'�������$������4�A���$����4����$�� ����&��������$"�5�����:��������44��������'�$"�����$���)���)����$"��$��4����$"���)� ��8��3�$���4�� ����$"�)�������$�$"��$)�������$��$�&��������4��������$���������3���$��8��$����)�'���� ����$����)$ ���$��)������ &�$"�)�����8�����$"8��$�����""�$"5�

Page 319: Game Programming With Python, Lua, And Ruby (2003)

� ����

����(�:�������������������)���)������$�4�����$8�����$"���$�4�����$8����'�����4������$�8��$�� �����$"� � ���������8�'�� �������������������3������4���K������L��$��

'��&���)���$ ��5����� ���$������A�����(��#5�8���(��5�������"���8�#6%S���"�8�

#6%S�� 8�)�����4���5�8��$��#6%S��?��)������ 5�

"I�*����

����2Z�*$"�$���������3���4��$��4��F� �������3���@��&�8�'���'�$���������� ������2��D�"�Z'��8��� ����� ���"���$�����"��������������$�� ������� �$���)�5�2��D�"�Z'���'����$���)�����)���������������������"��"������$����4�� ��������4�4�������������&��.����$���$��.�$A��8�������%$$��������$8��$��%"���)�*�4����5�

��$ ������ ������$8�2Z�����"��'$��$�������"��4���)�����$����$������)�������������������"��"�����$"�$�5��������"�$���3�����$�'��������)���+�$��'�8������3���@��&������4���������������������$��$�(�$7G='�$��'�5�9��������$ ����

•� %��4������$��������$"�$��•� �������'����������44�����$�+�$���K'�� ����&��������3����)�����$"�$�L�•� <������;����� �����•� ������4����$�/���������3��'�•� (��� ��4��$"�

2Z������$�������3�����$��)�(��K�5�L��$��.��������4����������3��5���$ ����$���)�����"���,��)������������������$��������������(�8���� �$��$���� ��3����A����)����$)�������$����������"������$"�����(�� �$����5������� &�� &�KbL�&���'�������$"�4���(�� �$�����'���������"����������$"�4�����8��$����� �$�� ������� ��4���$��'�����$�'� ����)����������7�� �$����5��$����� ���$����4����$�����$8���� �$8������$"������� &�� &8���""������'��$�����"����� ���$��$������4���4�������� �4���(�5�

�����������$"���������� ��4���3�$�����3���$���74�����$��'��������(�� �$�����'�����4����$"�����"���8���� �$� ��4���������)�$���4�������F� �����$"�(�5�������$ ������3������$"�)����:���������3�������4���� �5�

���'��$"�����"��������� ���)�����"����K'�� �����������3���������$�����4��F� ��+������L8���� �$���������������$"�$���$���������$��$��5���)�������$"�����"���������45�

������5�$���)����������4�����������$� �������(��)�����K��$"������� ���� ����$��)����(�,������ �)$ ���$��������C��)������.��4������)�������L5��

�4������$�������$�����$���)��������$"��(�� �$�������$�����2Z�*$"�$�5�>������8������4������������)�$���'����$�����3����45���)���8�'�������� �$�)�$������ ��������� ��������������4����������$����$&���$�2=5���3���@�$&��������$ ����������4����4�����5���)����'�����7��4�����)���'���� ����������3�������4����$�����$5�%��4�����������$��������$�����"��'�������&���&��������

#�����#������/�NM���"�>$��MO�

%������ ��4�� ��������"��'������3��������"�������$�� �����$��$������$������))���$�����3���$"����� ���$��'�����$ �������������"����$���$��$��7��

Page 320: Game Programming With Python, Lua, And Ruby (2003)

� ����

L�����?#������/�N����������������������������������������N�M���"��>$��M�O�����������������������������������������N�M���"�->$��M�O�����������������������������������������N�M���"�.>$��MO�����������������������������������������N�M���"�=>$��M�OP��������������������������������!���?�� ��/�ML#�����M��������������������������������O�

����!���?�� ����$������������2Z�*$"�$��'������F� ��3������������������������K�����L��)����"��5�����"�����$"�$��������������3���������������$��'�� ��������'�K������)�������

����)��������"�L5�H�� �$� �������$���)��������������"�����������$"��������"�S ������$����� ���5�

�����4�������"� 8����'������������4��������"��8�������)�$���'����(�5������$"�$���$���$�)�����8��$���$��� ��)������4���������������'$8�&���4����������������$���)��8��$���4����� �������$���������� ���5�

�0�*�

.%:��0��

�$������7����$"� ����)����8����������"���� �������$������)����'��������$������)�D�����5�����D������'����)���)$ ���$�����������'���$�3�����4����$���8��$�����������$����$"�������3�$�����$� ������8������������� ���� �$)���$��� �����)�������3������))���$ �����'��$������7����$"� ����������$������ �������4���5�

*� ���4���������������������D+,���������������� ����������� ����������$��)������$"�$�5�

���������D�������� �$������������� ����'�� �����"��������'��$������������F� ��4��4�������)��5�������4��4������� �$�����$����$"���� �$�������4��$�(�8����@�$&�����������3��������)$ ���$���$�.��������������$"�$���$������$��4�������4���5�������)$ ���$��������"���"������$�������<5!5�

+��$��:(6(�"I�*��������&��� ����0�������,)� ���

&��� ���� ���)����

LS�$CS������+�$C���,P�� /���3������4�����

LS�$CS3���5�����+�$C���,P�� 1��$� ������'����)����'�������4�����

LS�$CS"��X�������+�$C���,P�� ��������3��� �����)����4�����

LS�$CS���X�������+�$C����3?�3�,P�� ���������3��� �����)����4�����

LS�$CS"�����+�$C���,P�� ��������4������$�K78�L��)����4�����

LS�$CS������+�$C����?��,P�� ���������4������$�K78�L��)����4�����

LS�$CS���%����+�$C���������S���$��,P�� ���������"��4�� ��������)����4�����

������)$ ���$����&���$��$C�������������)�����4����������$��78�� �����$��������)����'5�9����$���$ �8�����,����'����"����$���F� ��4������$��

Page 321: Game Programming With Python, Lua, And Ruby (2003)

� ����

L�S�$CS"�����+��� >�$C���,P�

�$������,����'������������4������$��

L�S�$CS������+��� >�$C����������F�,P�

2�3�$"�����.??��$"�$�����������$"�� �� &�$"��$�������"��������4�����4�����2Z�

*$"�$�5�.??������������������$���� �������$�5�*� ���4������$�2Z�������"�S���������+,�������5�����4��$���)��� �������$�"�3�$����7��$����4�����������$��������F� ��������������

����4��3�������������!����4��������8�'�� �������(��� ��4����F� �5��

����D��6�����$��D������3�$�������������� ��'�� ��&�����������$"��������'$5�E�����������3�������'��$�4���)����8���&�$"������))� ����������"$� �����4���)���8���������

�������))� ��)���"�����3�$��5����������23�����������)�����&�$"��$���$���������4�$"�����$"��)������4�����5�1����2Z��� ��$�����$8�������$�����8��$����� �� ���� �$����)�$�������3���@�$&�,��+��������$��2Z�4��F� ��4�"�8�������4�GG4�45)� ���$5$��GYF��&�G���F� ��G2Z5�

�1���

(�7�������������8���8���������3�$���3�$����"�����$"�$������"$���)��� �$3�������$��$�� ���� ���������� ��4����"����5�(�7��� �$�������)�������������3�$"�"��4�� ���$"�$���$���������$������)�������)����������������������"�����'���5��������$�����)�(���$�(�7����������$���*�'�����������)��� �����$"������8� ���� ����8���� 8��$���$������$5�

.���$���8�(�7������$������3���4��$���$��'��&���$����$�0��=��$��(�$75����'������"�$�����'�����$�'����Z���9�� ��K��������.��������L����������$ ����3������.??5�(�7��,��4��F� ��4�"�� �$����)�$���$���� �)��"��������4�GG��7��5��� �)��"�5$��G "����$G "���G �$��$�5����-�� ���$Q)����5�

+��������!���,��#���

($��1���������7�������8����������$"��$����������������)����(���$���4�����5�(��4��3���������)$ ���$������)����� &���8�����8��$������ ����������$"�5�($��1���$���$�(�$7��$��+�$���4���)������$��'���'�����$����@���$�.��'5�

($��1������$���������3���4��$��������4�������5��������� �$����$���������(��$�� �$����)�$�������� �)��"�8�������4�GG�$�5��� �)��"�5$��5��

+���!�����>�� �

%$���3�$����"����4��F� ���������$����� ����� ��������6����"����8�1%����F� ������$��4�$��� �8� �����4���)���8�� ��4�����3�$�"�����$"�$�8��$�8����8�(���������� ��4����������3�����5��$����� ���$����������$�K����)������'����$"L�1%���$���$����$��0���$��+�$��'�8�������� ���$�������'��&�$"��$�4����$"����1� �$������$������7������������'���5�

Page 322: Game Programming With Python, Lua, And Ruby (2003)

� ����

����1%����F� ��'���)�$�������/� &��4��$"��5�1������ �$����3���4��$���������$�$�����&�$����4��F� ����������$D���2�����4��$�������4��"�������@�3�����$D���D8��$������7�4����$"�������$"��� &�������.������4����/�� ��$�� �5�1%��)��������$ ��������)����'�$"��

•� �4������$������$�•� ����)�$��$"�•� %$��$������:��•� 1�� ��$����$���))� ���K1���8�+%>8��$��1��L�•� %�(��������� ��4��$"��$���)� ��

+�$��'���� ��$���������3�����((�)����K����"#�5���L�4�� ����$�������4�������'����$���������������)��������$�����������$�����1%����� ����$����$�����5������$"�$�� �����'�����$��7��4���"���� ������(����DD�8�'����� �����������������)������� �����$�������� ���$5�

1%����3���"�����$������)������� ���$��������� �����������(�8��$�4���� ������������"��8���)�$�8����4�8��$��D�������������5���� ������A�44���'�����$��$���4�������$����3�������������8�����'����$��������������� ������)�����1%����� ������5���������(�8�1%����������������'$�4��4��������)����)������KP5���L8�1%���$������$�)�����KP5�$�L8����"��)�����KP5��"L8��$��"��4�� ���� �$�)�����KP5� $L5�

�����))� ��������4�"��)���1%��������4�GG����4��F� �5��� �)��"�5$��5�������������������� �)��"��4��F� ��4�"�8�������4�GG��� �)��"�5$��G4��F� ��G����4��F� �G5�

1%��� �4����$������)���)�� ��(�5�(����������������3����������$��������8�4��)�������4�8��4����������8��$������ �$�������� ����5������������3�����$��)�1%��K�)������'����$"L�����5 ��$������$ ������$�����.��4����<��� ���$��$�����.�5�

1%����������$���$������)��4� �)� �)����5�������� �������� ��4���,��4��������� ��3��)���������5����$�����$5��8�����)������'��� ��4������$���������$5�%$��������4����$��)����������5 )"8�'�� �������������������$������4�������)������ ��3���$��'����� ���$���D����������������4������5��������5 )"�)���������������$�����)�������)���+�$��'��5�$��)���5�H�� �$������4���4�����5 )"�����$��$���)�3���������5�%$��������4����$��)�������������5��8�'�� �� �$������ &������������������� ������ ���$���$�� ���������1%�5�

!���+��$��

1%��)�����KP5���L� �$���� �������'��������1%��9����%� ��3��1�$�"���K1)���L5�1)���� �$� ��4������$��"��������� ����$�������$"��� ��4������������)���5�1)�������������������1%���� ��3����$�� ��4���������)�����1%��'������5����� ����$����$�������������$�1)���8��$��������<5<���������)�'��)�1)���,���$�����)��"�5��

+��$��:(:(�!0$���������������,� �����

,� ���� C���� *1��)$��

1�� :������ ��4������������1%��)����� � ����U��R�5���>����1�R�#�����>���

��� .��������$�'��� ��3��� � ����R�5���>����

Page 323: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

+��$��:(:(�!0$���������������,� �����

,� ���� C���� *1��)$��

��$��� 04�$��$��� ��3��� � ����R�5���>����

����1%��� �$���$�������K� �$"�$L���&�������$4������ &"��$�����"�8������&����"�8��$����'�� ����"�8��$��4��������������"��������� ��������� �$�5�� �$"�$5�7�� ����$������������������"���K$�������������4�������L��$����$��)�����8���5� $�)�����8����������1%���$"�$�� �$�������$����5�����������$��3��� ����$�������$��$����$�8�

$���$"������ �$��KR�#����L��$�����$�)����$"����������������4���

�����"��>�?��R�#����>����$��D"�����>$������D>$�������>$���

%)������� ������� �$������ �$�3��'������'��������1%��� �$��>��'��8�� �$�3��'5�� �$�3��'� �$����������������'���������$������������$���������"$���$"�������$����� ����$����$�5�9����$���$ �8������������ �$�����;#�7#<�8����������

����3���>�?��R�#����>����:=��=F��

����9���&��� �$�����������'����������4���$�� �$3��'5�7���$������� ���$������ ����5�

1%�,��%$������$��$�������K�$�"�$L� ������������$������$�)������4���K5�$�L�1%�����5���� �������$��$������$�)���8����$�������"�3���$�"�$������$������$� ������$�� ��4��)����K5���L��$������"�$��������$������$�)����K5�$�L��$����� ����$����$���

���"��>�?��R�#�����>����R�&��������>����

%$������$�� ��4��)�������3���'���� ���$����4����������������4�� �$��"�����������YYY5�����)������� ���$������������)�����)������)���$����������������$���������$������$���

���D��"�>$������D��"->$������D��".>$���YYY�

������ �$���� ���$������������)�����)�����)���$�������������������$���������$������$�5�9����8���������$������$����$����8����$8��$�4���$������8����������������4������ ���)�����)���������"�3�$��

���D��"+��,�

%� ����� �$���������������"$����)��4�)��"�8�'���������$�� ���$"�$��)��44�$"8���������"$���$"���3���� ���)��48���������"$���$"�������D�$����)��48��$����������"$���$"���3���� ����$��������D�$����)��4��

Page 324: Game Programming With Python, Lua, And Ruby (2003)

� ����

*)���� ������")*����D��"+�����,�*)X��������5������")*����D��"+�����,�*)����8������5������")*����D��"+����-,�*) ��������8����������X��������5������")*����D��"+����.,�

%)��������)��4�)������������"$����8�����)�����$����������������8���4�������������4� ���

���D��"+��,�����-�

���������������$��$�3��'5�7���������)���3��'�$"��$������$�)����5����������4������$������$��$���3��'��M����$������4� ����� �$����4����������4�������� ���$������$������$5���������'�&���� �$����������� ��$"������ ���$�������4������)����5�

��" �$3�����$����"�� �$3����������� �$3�����5��4�����1%�,�����"��)�����8�5��"5���� �$� �$3�������1��)���������1%�����"��)�������3� ��3����5�

�0�*�

1%���$���$����7#���3����������'������"����������$�K�;8��#8�������44L������)���5�

�����3����� �����$����$"����44�������� ����� ����7�#���$��;G�#G������������8��$����������� ��3���������K�������$"���&��IH��$���������� ��7� ��4�������3����� ���IL�'��$�

����$"�����$�1%��"����5�������������� �3����� ����$���'�� �8����>�?��U

�� �3����8��������� �$��$����"������$�����������5�

!�����-�

1%�������$�%��������4��)�����3��������������$���$"�$�����&���$����$����$)�������$��������&��$��5�����)$ ���$��������������$�������<5 5�

!���,������

� �$������������� &"��$���)���1%��"���5�*� ��� �$����� ��4������)������������4������#������� &"��$�8��$�<��������&8��$���$�<�����'��&G� ���5�����9�"���<5��)��������4���1%��"����� �$�5�

&����:(/(������)$��������0����!���

Page 325: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

+��$��:(;(�!�����-�&��� ����

&��� ���� ���)����

W��T��+,�� /���$�� �����)����������&���4�������

W��T��#����+,�� /���$���������)�&��� �$���$��4������������

W��T��7���+,�� /���$�� �����)����������&���4������8�'������)�$����$"��������$�4�������

W��R���� ��+,�� /���$�����)�"�3�$����������$����4���������'$8����)���,��$���4���������'$�

W��R����0+,�� ����=�4������$��)����������4��$�����$�4�7����)������4���)�� ��$����)������ ���$�

W��R�����+,�� ����H�4������$��)����������4��$�����$�4�7����)������4���)�� ��$����)������ ���$�

W�����DL����+,�� /���$��������$�������� �$�����$ ��1%��������������

%���W��$���+,�� :������������"������3�������������������)�������4� �)����)����

���#�����+,�� :���������3���$���4�������$�����"���$�������$��)$ ���$�����3���������)������"�3�$�� ��4���$�������"�������$3���$��$��

#�3�W��$���+,�� ��3���"������3�������������������������4� �)����)����

#��W�!&����3�+,�� ���������)���$����)����$��� ��3�����������"����)�����

#��R��#����+,�� �4� �)��������4������4�����$�������� �$��M��4����3�����)��������7�����4����

#��R�����X�����+,�� :�������������"����8�1���8����1���3�����)������KA���L��������K���L�

#��$C���&����3�+,�����������)���$����)����$��� ��3�����������"����)�����

Page 326: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

+��$��:(;(�!�����-�&��� ����

&��� ���� ���)����

#��#����&����3�+,�� ���������)���$����)����$��� ��3�����������"����)�����

#��#�����50+,�� �4� �)�����$�9=�)����������44��������� ���$��)���������4�������������'$�

#��#����&����3�+,�� ���������)���$����)����$��� ��3�����������"����)�����

.��������� �$��'��������)����'�$"����4���

�5� %���"$���$����K�$���$������������L��������$�'�� �$�5�

�5� %���"$���4���� ����� ��4��)�������� �$������$5�

�5� (��������� ����� �$��)�����$���/%15�

#5� ����������� �$���$$�$"5�

���4������� ��4���������$"�������#����� ����$���

R�S#�����/���#����+,�

����#��#������ ����$������������� ��4��������4����

R�S#����E#��#�����+MR�S#�����>���M,�

(����$"������ �$��)�����$���/%18����4��8������$��'��������%���� ����$���

R�S#����E%���+MR�S#����S5���>���M,�

%$�����$8�)�$����8�����$������ �$�5��$�������7��4��8��$$�$"������ �$�� �����

R�S#����S5���>�������������'$��$��R�S#�����>��������������7� ��$"��

R�S#����E���+,�

%�"����'������&������� ��4������)���$������)���))���$��� �$��M�����������+,�)$ ���$����F�4�)�����$��� �$������$�����5�

������������ �4����)�������� �$��)$ ���$��)��������$"�'���������$"��$��$�����$"�� �$���)����������5��������$ �����

•� #��5������>�������� �$���)���$����'�����������$"�����$���������5�

•� ������>9�������� �$�,�������4��)����������5�

Page 327: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

•� !�%�����+,>.�� &��'����������$������������4��)�����)$ ���$���3�����$���������$���/%15�

%������$���$��8��3����1%��� �$����� ��4������)������������4�5�����)�������������� &"��$�������45������� &"��$�������4��������� �������"��������)��������� &"��$�8���������������$���������������� �$�M������������#����5�

����1��&�� �$����������� �$�������48��$�<����������4��������������������"$������F� �������4������ �$�'��&�����$���$����� &"��$��� �$�5��������� �$��������'�$"�������"�������&���)�������F� ����$�����$����'�$"����� ��$"������$��������F� ��5��)������� ��$"�����)��'����))���$�����&���$����� �8����$�����))���$���������)�"�����������������������1%�� �$���&��������"$����$����'��$������'����F� ��5��������� ��$"���� �$���� ��������$�� �$�"�$5�7�������"��� �� &�$"5������ �$�"�$5�7����"��� �� &���$������"��$���� ���������)�'����'�$"������8��$ ���$"���$ ��8����$�� &��8��$��:$��8�'��������"��� �� &5�����

������"��� ����$��� ������'������������7����,���$����)����������&������)���5�+��$����'�$"��������� ��$"���8��������������������������4���)���$����3������������������"��M������'���8������ ��4��'����"�3�����$�"���3��$�����5�

��������������� ��4��$"��$3��3���'�����������&8����'���5�*� ����F� �,���� ��$"����������

��)�$���'��������R��D$C+,� ����$�8��������������$"�$��$������$���������D���)�������F� ����$��'���������������F� ����������'$��$�)��$���)��������$������5�

����+�� ���������������������$��)�$��������4��������������&���4���� �$��)���5�+�� ����������)���+��&�� ���8��$������������4�����"$�����'�� ���������)������ ���$�����4������ �$�'��&��$5�%������)���������&����������4��$����'�����$��$��7��)�����������"$��������$���'��&������������4�����5�

����+�� ����������$�<����������45��$��������$��������"$���$"�$'��&����������8���� �$��������������� �����)���F� ������'$����"�3�$�4��$����$������ �$�5���4�$��$"��$������� &"��$�����'�$"8���� �$��������������$ ��� �����)������4�����M��������������� ��4�������'���������$��7�3���5�%$��$��7��)�������'��������F� ���������4�� �$�8�������)����������"�$�����D�8�'������$��$��7��)��������'�������4������������������"�$�����D�5�

����4��$���$���� �$��������������$���'��������4�����������������'$������'�����������������������)������4����5����������� ������������'���������)�����)������ ���� ������$�1%��'��������$������'$��4����5�

!��� �>�� ��

%$����$"��������4������ �$��$���� ��'�����$�1%����� �$���������$���F� ���)����������5�����4��������$�� �������)��$���F� ������������������3���$�����������������$��4�$��$���)��������� &"��$�5��������4��)��� �����$"��$���F� ���$�1%���������)����'���

�5� %��� �����������)�����$�'���F� �5�

�5� (�����$���$������$��������F� ��'������5�

�5� ����������F� ���$������ �$�5�

#5� �����$����F� �����������8�)��"�8����"��4�� �)������5�

Page 328: Game Programming With Python, Lua, And Ruby (2003)

� �� �

�5� ���'�������F� �5�

���4������� ��4�������'����������$C� ����$���

R�S$C����/���$C+,�

��������4����������$��)�������)�����$�������� ����$��� �$�����$��$��$���F� �5�0�F� ���

�$�������3��������&�����������$������$���)����������8���������������%���&��������� ����$�������'���������1%���$������$�)�����KP5�$�L��$�����������$������$�)� �$"��$�����4�$"��

R�S$C���E%���&��������+MR�&��������>���M�MR�S ����"M���,�

�����������4�����1%���$������$8�����������$������$�)� �$"����R�S ����"�K'�� ������$�

�������������'����$������$������$L8��$��������������4�$"�����5�����#��#�����)$ ���$�4�� ���������F� ��'����$���� �$������� �����$�4������$���$"�K78�L� �����$������

R�S$C���E#��#����+R�S#����������-��,�

��������������$�)���)���������������������������$������$� �������)�����"�3�$���F� �M�

#��#�8���4� �)�����������"����$��'������)��$���F� ���$��#��#������4� �)������������D�$�����$��3���� ����4�����)��$���F� �5�0�F� ��)��"����������� ����$���������������$"�$�5�������)��"��������������$�������<5��5�

+��$��:('=(�!��� �>�� �&$���

&$��� ���)����

H5%&WSF7&�&!R�� ������1%�������������F� �� �$���$����"�������$������$��)������� ���$�����3���$��

�H5%&WS!#L�&�&L�2��� �������F� �������I ���� ���I�

H5%&WS!#2W�� �������F� �������4������ �$�������� ���� ����

H5%&WS!#2W&6F7&�&!R���������F� ���������� �$�������� ���� �����$�� �$���$�$"���"�������$������$��

H5%&WS#L&%2�� ������1%�����$������ ����"�������)�������� �$�,�������

H5%&WS6�&7&# TW�� ���'����F� �����4�����)������� &"��$��4���8���)������������F� ���

H5%&WS6�&7&#5�W�� ���'����F� �����4�����)�����)���"��$�8��)������������F� ����������'$�

��4�� �)���������������'��������#��W505������ ����$���$��"�$������������)��"��$���� �����K���8�"���$8����8������4��L�����$4����� �������$��))� ��'��$����'�$"��$���F� ���$������ ���$5�����)����'�$"�)��"��������)�$���'����$�����������5���)�����

Page 329: Game Programming With Python, Lua, And Ruby (2003)

� ����

�&<&-�+*�J+-�+(���$������� ������)��$���F� ��

�&<&-�+*�J.�*��(����$���������F� ��'���������� &"��$��

������)��"��'��&�����74� ���5�9����7��4��8����,���������'�$�������3����)�'�)��"���$����$��������������4�����$����D���)��$���F� ���

R�S$C���E#��#�8�+�����,�R�S$C���E#��#����+���,�R�S$C���E#��5��"�+ H5%&WS!#L�&�&L�2��(� H5%&WSF7&�&!R,�R�S$C���E#��W505�����+W505!%�2�S %26,�

������������4��$� �����$"���1%����F� ��������� ���������'���5�%�����F� ��������)�����$�

1%������������$3������5�H�����#���������&��������44�����$������������&�����������44�����

R�$C���E#���+,�R�S$C���E����+,�

H�� �$��$���D���� ����$��������������������3���$���F� �5����$"����'����������� ������������44���������$���F� ���

R�S$C���ET���+,�

%�$������)�1%��"��4�� �)$ ���$��F���)�����F� ����7���M������������������$�������<5��5�

+��$��:(''(� �>�� ����)����

&��� ����� ���)����

W��&���5����+,�� /���$�� ���$��4������$��)���������$������$�

W��&���#������ /���$�����)��$������$�������44��8��$�������)��$������$�����$$�$"�

%���&��������+,�� (�������1%���$������$��$���������F� ��

%���!��"�+,�� (�������1%�����"���$���������F� ��

�����&���+,�� ���������� ���$���$������$�

������&���+,�� /���������� ���$���$������$�K�)����4���$"L�

#�����&���+,�� .��$"��� ���$������$������$��$�����4�4���������

�� ��&����

H�� �$������$���F� �,��4������$��$������ �$���$����3���$���F� �����$�������$"�����

#����������� ����$���$��"�3�$"�1%������K78�L� �����$������

R�$C���E#����������+��9,�

Page 330: Game Programming With Python, Lua, And Ruby (2003)

� ����

�����$,��� ������$� �������������#�����������'��$�)����� �����$"��$���F� ���� ����

#��#�����'����4�� ��������F� ���$�������� �$�5�+��$��$���F� ��$����������3�8��$����3���$��$��$�������'��8������������������������1%�,��������$�4����)�$��$"5�1���� ������������$������)�)$ ���$��)��� �����$"����������F� ���'����$������ �$�M�������������������$�������<5��5�

+��$��:('/(�!����� ��&����&��� ����

&��� ���� ���)����

W��6��������� .�� �����������$ �����'��$��'����F� ����$�4�7����

W��R��D6��������� .�� �����������$ �����'��$��$���F� ���$�������&���F� ��

W������������ /���$�� ���$��K78�L� �����$�����

W����������L���"���/���$������ ��$"���$�4������$��)�������F� ����$ �����������)�����

W��#������ /���$���4�����)�������F� ��4���)�����

#������������ �������F� ��4������$����"�3�$� �����$�����

#�����������%�� %�����3�8��7 �4��������4���)��4������$�$"�

#��#������ /���$������D�$�����$��3���� ����4�����)�������F� ��4���)�����

7��D���� 0�F� ��'����'��&����"�3�$� �����$����5�0�F� ��'������3�����$���$��$���'��&������������)������ �$��

�����)���8��� ��)$ ���$�K�7 �4��'�����$����L�����7��$����������� �����$�����'����$������ �$�5������)���8�1%��4�� ����$���F� �����������������������4������$8�������������$"�������������������������4��� ���� �����$�����)����K��L�)������)���,�����$"�����������������4������$5�����)$ ���$������������4���)��K�(L�4������$�$"����������7 �4���$����������1%�����5�

-� ���� ��� �� �>�� ��

.�����$���F� ��� ���$�� �$������$������ ��4��)$ ���$�5�����������$����$"���

���&������ ����$���$����$������)���F� ��� ���$�)��"�5�������)��"�� �����4�$����� ������'����$�����1%��:���$��������������$�������<5��5��

+��$��:('2(� �>�� ��� ���&$���

&$��� �������� ���)����

H&L�!S&��7�� %//0+�� .�����)$ ���$�'��$�����'� ������������

H&L�!S �#��� �:�H�� .�����)$ ���$�'��$����� ������������

H&L�!SL��!�2R�� .:/��*1� .�����)$ ���$�'��$����� ���$�������� �����$3�$���������� ������������

Page 331: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��:('2(� �>�� ��� ���&$���

&$��� �������� ���)����

H&L�!SL�#�R�� .:��01�� 1%�������4� ��)��� ����8�4��"���������)�$��� ������

H&L�!S6���� �/0��� .�����)$ ���$�'��$����4� ������������

H&L�!S�2%��� 2*(��� .�����)$ ���$�'��$����4� ������������

H&L�!S2W7&%TX2����G%�� .�����)$ ���$�'��$�*0���F� ��'��&���3���

H&L�!S%T�� (00E�� .�����)$ ���$�'��$��������&� ������������

H&L�!S�&%T�� �%(E�� .�����)$ ���$�'��$��������&� ������������

H&L�!S�&�W2��� �%/*��� .�����)$ ���$�'��$����"��� ������������

H&L�!S��6&�2�� �G%�� .�����)$ ���$�'�����3����)�����4�����

H&L�!S�#2�� :�*�� .�����)$ ���$�'��$�������� ������������

H&L�!S7&%T�� +%(E�� .�����)$ ���$�'��$�'��&� ������������

!��%��

+�����1%���������$�������F� ��������$�����4�������$�� ���� ����������� ��������3��

���$������� ���$8��������R��D���F� ���)�������3������� &"��$��4�� ����$��

�� ������$�5�R��D���F� ������� �$�������������� �$����4���)���F� ���$�1%�8����R��D������������$���8��$��������"��4�� ��������&�$�)��������� �$��)������$�����&������5�

2�'�3��8����� ����)�����$�4����$"�R��D���F� ������$���������$�� ���������� ����)�����$�4����$"���F� ����������3��5�

R��D���F� �����������4�F�����&�����$�������F� ��8������$ ������������������$������&��$�������� &"��$���������)���� �$��)���8�$���������F� ��)$ ���$�������3���������������5�����)$ ���$������������3�������8��$������)$ ���$�����������$�A��������&�8�������������$�������<5�#5�

+��$��:('3(�� ��� �>�� �&��� ����

&��� ���� ���)����

���&�����+,��%����F� ��)$ ���$�

W������������ %����F� ��)$ ���$�

T���+,�� %����F� ��)$ ���$�

����+,�� %����F� ��)$ ���$�

��R��D$C+,��.���������$�'�R��D���F� ��'����"�3�$�� �$�8�K78�L� �����$����8�'��������"��8��$�� ������$��7�

#��5��"�+,�� �����R��D�)��"��

#���+,�� %����F� ��)$ ���$�

Page 332: Game Programming With Python, Lua, And Ruby (2003)

� ����

������������������$"���R��D)��"8�R&#T H5%&WS6�&78������'�����������&������44�������4�����)������� &"��$�����$���������'$5�

*��

�������$�4�������$�1%�8������'����&$�'$����*"�8�������$������)�)$ ���$��'����'�� �������$�����$)�������$��$���������4���8������������'����F����$������1%����F� �5�

*"���������'��������)��"� H5%&WS!#L�&�&L�2�8��$��������3����$������)��������$����$������$���������'��������)����'�$"�����$������$���

�����������������D��������������������D��������������������D������������������D�

�)����� ���� ����������������'���� H5%&WSF7&�&!R8���� �$���$������)����'�$"��������$���'��&�$"��$������$���

�������������D��������������D��������������D��������������D�

+���!����C-�

1%�� �����'������������$� �����D�����:������������������'������"$�������

•� %�������������� ������•� ����)�$���•� .����������$���$�������•� .������4�4�4�'�$��'���$����7���•� .�����D������:��)���������&�$�

������ ����$�����������$����$�������<5��5�������������)�'�:����7����������������� ������$��������$"�$�5��������$ ������������ ���$8����� ��� ����78��$��������'����������"����75�

% �4������)�$���)���1%���$ ��������)����'�$"��

.99�

Page 333: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

.���&�������4����)�$���

04�$��4��K�����4���$��.99L�

�9��������������4�)�$���

�����4��

��4����

+�$��'��9���

=����.9�

+��$��:('4(�!����C-�&��� ����

&��� ���� ���)����� �� ���

&��5������"!����+,�� .���������)�����$"��$4����7�

&��5������"��?�+,�� .��������$������$��)�����$"���7����F� ��

�����S ���&�����+,�� ��$�����"�3�$�)$ ���$������������$�

�����S����+,�� 2�����������$������$�������)���������$��

�����S%���&���+,�� (������$��$������$��$��������4� �)��������$�

�����S%��� ��+,�� (��������"��)�����$����4� �)��������$��

1������1%�����"��)������

�����S#��5��"�+,�� �������������$�)��"�� �

�����S#����?�+,�� �4� �)���������������)�������$�

�����S#���+,�� ���'��������$������$��������������$��

L����� �?+,�� ���4�����A�����$��$�� ���$�'�����'�� ��� ����

2��� ����8� �$����4������$��8����4��"����

W��L�����+,�� /���$��������S������ �

%���L�����+,�� �4� �)������������� ������$������$�

R��� �?+,�� ���4�����A�����$��$�� ���$�'������3����� ��� ����

2��� ����8� �$����4������$��8����4��"����

R�3�5������"'� 1�3���"�3�$�)�����$"� �

Page 334: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��:('4(�!����C-�&��� ����

&��� ���� ���)����� �� ���

!���� �?+,�� �$4����7����"�3�$�K78�L� �����$�����

R�3�5������"��?�+,�� 1�3���)�����$"���7����F� �����"�3�$�K78�L� �����$�����

R�" �?+,�� +�$��'���������4����������"����$�� ���$��

2��� ����8� �$����4������$��8����4��"�����

�� �����+,�� .�������������$��$������)�������$�����

�� ����� ��+,�� .������������������������:������$��

����3�5������"'�!����� �?+,��

/���3���"�3�$�)�����$"��$4����7�

����3�5������"��?�+,�� /���3���"�3�$�)�����$"���7����F� ��

#��L�����+,�� ��������� ���� ������������ �������������������$�������<5�;�

#��L�����L�����"+,�� *$��������������������"��� �� &�$"�����"�� ������

#��L�����5����+,�� ��������� �����"��4�� �)� ��4��$���

9� ��4��$���������K78�L�4��$���$����������"��4�� ����������� ���$� �$�������I �� &��I�

#��$C���������'�!�W�� �?�+,��

��$��:���� &"��$���$������$���$�����))�

#��#�����5���+,�� (�������)�$��)�����������������"������7���

% �4������)�$��)�������)����'�

#����?� �����'��������+,��

��$����7������$�����$����$��$���))�

2�����������4��)��� �����$"���:������$������

�5� .��������������$�������$"�R� ����� ���/��� ����� ��+��������������

���"��,5�H�������$ ����7��$���� �����$����8�'����8��$�����"��5�

�5� �����$���4���$����4���$�8��$ ���$"����������"����$���"��3����5�

�5� %�������$�������������$�������$"�R� ����� ��E�� �����+����������"����

�?����,>�����'����8����"��8��$��78����))����������A����5�

#5� %����$���4���$�������$���"��$��8�� ���������$��)$ ���$5�

Page 335: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

�5� �4� �)����������$�������'����R� ����� ��E �����S#����?�+R� �������

EM��$��M,5�

;5� ���'���������$������$������ ���$�'����

R� ����� ��E �����S#���+R� �����,5�

����1%�������4��$����'����$�����:��������$������)������������� �$�������5����������'������4���������4��)������$������)���))���$��� ���$�5�������������)�'�������$������4��$����������8����'������������)�����$������)� �����������8��� ���)�'�� ������$������))���$��$����5�������4�������� ��������������������$����$�������<5�;5�

+��$��:('5(������$���������, � ���

, � ��� ��������� ������

L��#�S&��7�� ��

L��#�S �#��� ��

L��#�S%T�� ��

L��#�S7&%T�� ��

L��#�S�&%T�� #�

L��#�S�#2�� ��

L��#�SL��!�2R�� ;�

L��#�S�&�W2��� !�

L��#�S6���� <�

L��#�S�2%��� �

L��#�SL�#�R��� �������"��#��

����&�������������$�"����$�����������'����������1%���$"�$�8�'������ ������������$�$"�

���4� �)� �$����5�������$������������'����T2�S&�/��8�T2�S �/�-8��$������$5��������$�����:���&�$� �$���������������� ������ �����:����7��8�'�� �� �$�4��������$������$���$�� �����"��4�� �5�������"��4�� �������������)���$ ������$����C��4�'�$��'��������Q��8��������'�$��'��������Q��8��$������$5�9����� ��4����������$"��)�������:��)������8� �� &���������� ��$�����$������ �����'����1%���$�����������$ ������$���������&,��.�5�

!���,������

1%�� �$�������$��4����5'�38�53� 8�5���8��$��5�4��)�����)�����$���))� ����$����� 5����4������$�������))� ����$�1%�8�)����'����������4���

�5� �$������D��������$����F� �5�

�5� (����������$��)���5�

Page 336: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

�5� �����������$��)���5�

#5� �������������$��)����'��$���,����$�5�

���4������� ��4�������'���������4����� �������$8���#����+,8�'�� ����������$�'���$����� �����$�����������

R�S#�����/���#����+,�

%)����������$������$�������8���� �$����%���7�3�����%���R�.�����������4���� ������$��)�����

R�S#����E%���7�3+MR�S7�3S5���>��3M,�

���$�4����������$����$"�������

R�S#����E����+�,�

������&����$4���$���'���$��������������4�������$�8��$������ ��������"��5�

9�$����8��������������$����$"�6�����#����+,��

6�����#����+R�S#����,�

�����$"������ ����4�����$�����������$�� ���4�� ���5�������R����� ����$���������

�$�������)�������#����� ����$�8��$��5����)�������4�� ��5'�3�)����8������"��1���� �$�

������������'������R������

R�S#�����/���R����+,�R�S#����E%���R���+MR�S7�3S5���>���M,�R�S#����E����+�,�6�����#����+R�S#����,�

- ��������,)�$$��

����1%���$"�$����$������4��������������4������ ������$�������������������������$���$���������$�� ���'��5�*� ��������� ������'�����$����$����8��$������� ���$��4��)����������4��������������������)��)�������4��"����������� ��4�5������4������$���$3�$�����������

������$��������������'��5�����#���!�3��������$��#���#������ ����$�����&���$�����)����'�$"�4�����������

•� 7��$���� �����$�����K?��L�

•� �� &�'�$��'���7����KR���?����>��"L�

•� ��������D���)�����'�$��'�K������S�������������S���"��L�•� 7��$���� �����$�����)��������������78�'����������$3�$������������������'$��$�

K����$�?S�����������$�?S���"��L�

Page 337: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

•� %$���������7��))����+����$�?S�?������$�?S��L�

•� � �$���D��K��������S���������������S���"��L�

�����$3�$�����'�$��'��$�"���� �$������""�����$��$���))���$"���������!�3������� ����$�5�������'����$������$3�$�������7� �$����������������4������$������$�5�

�$3�$����������������������������'�$��'���$"�&��!�����!�35�&��!�����!�3��������&����$���$������)�4������������

•� 1�����5��"8�'�� ��������������4�)���$���������5�•� 1�����5�$�8�'�� ����������$������$�)���$���������5�•� �����������������$�����)���������5�•� +��"��������'�� ������$���'��"����$�"����$���5�•� 6�$����������'���$��$�����)������������� &�4��$���������5�•� ��� ��4���$�1����"��������������"��������44�����'��$��������������7���$��5�

9�$����8�������������$������)�)$ ���$���3��������)���1%���������$���4����5���������������$����$�������<5�!5�

+��$��:('6(�!���- �������,)�$$�&��� ����

&��� ���� ���)����

S���S������ ������)$ ���$���� ����'��$�����������������

S���$���S������ ������)�)$ ���$���� ����'��$����������"��������

����3�!���5���!�3������+,�� /���3���������

#��L��!�3!���+,�� �4� �)�������� ���$�������� ���������

W��L��!�3!����� /�����3��� ���$�������� ���������

W��L��!�3!���!6+,�� /�����3������� ���$�������� �������������

&��#������ ��D+,�� %�����4��������4������&�

����3�5����#���� ��D+,�� /���3������4����)���������4������&�

W��L��#����+,�� /���$�� ���$���������4����

W��L��#����!6�� /���$�� ���$���4�������

�������&���1%��3���� �����D����M��4������$���$3�$����������� �$���$ ���$���)����� ��������������$���$��8����'��������4������)��������(�� �$��� ��5�

Page 338: Game Programming With Python, Lua, And Ruby (2003)

� �� �

���)����

(�����$����� ��'��$���� ��������"��4�� ��44�� ����$��$��"�����$5�(���'$������$�)���)��4�$��$"�$����$���3�$��$��������������$������$���3����� ����� ����"����5�%����"��������$ ����$����)�$���� ��4�������(��������"��4�� ��$"�$�8���,���7�������� ����$����)�$���$"�$��������������$�(�����4��)��������$������$"�� ��4��$"5��

�)���$�1�2��*����

%4� ���7�����$�04�$(�����$"�$��������$ �����(��� ��4��$"��44���5������$"�$�� �����'������������$� �$���������� �$������$ �����$��'����)����(��� ��4�������7� �����$����)�(�5�����)����'�$"� ����$�������3�������$����� ����$����$�� �$������

�>�/��������� ��4�����������)� ����$��5�

�>�/�������������)������ ��4��5�

�>�*7� ������� ��4�5�

�>�.��4�������� ��4�5�

�>�9����$����$"�(����$��5�

%4� ���7������$��$�����%���'�����74�����)��������$�� �������)���(�������$�4����5������� �������������"���"������$�������<5�<8����)��� ��4�������)���$ �8� �� &���������$��$����$�������������� �)��"��4��F� ��4�"�8�������4�GG�4� ���75�)5$��5�

+��$��:(':(�+����)���$�1���-�

�$����� ���)����� ��$���$������

��D"�������:���������$���������&���$������)���� ���� &"��$����F� ���

��� #D��

!��"��� .�$3��������"����$�� �� &��)�����4���� ��?�����

R��������� 2�����������"���4��4��������)�����)� ��� �����R��������

�� �������� .��$"���4������$��$������$�����$��)���F� ����$�����4� ���

����� ����K4���$�� ����L8�

L�����8�$C����

#������� .���������$���� #�����.68�#����8�R�����

#���������� 2�����4���� �������� ��������#���

#��D���� 2�������������)���$��'��&�$"�� �����

��������� /�$���������"��$��� #�������

7���� 1�$�"����44�� ����$�'�$��'�� #����8�7����8�5����������

[���� 2������������������������3�������)����D�4�)�����

Page 339: Game Programming With Python, Lua, And Ruby (2003)

� �#��

�����

����������$�04�$(�3��'������3�$����(�5��������(�8���$�����04�$(8�(:�8��$��(:�8�)��� �����$"�"��4�� ��� ��4��5�������'������$�����������4��)����"��4�� ����74�����$��8���������������"��������4��� ����)�������$�$"���'���� ����'����(�8�04�$(8��$����5�

������ �$����)�$���$�������������� �)��"��4�"�8�������4�GG�����5��� �)��"�5$��5�������'��� ������������ &�������$��$������)��������4����������5�.���$��������������3�����$���)�������)��������(��#��$��(���5�������� �)��"��4�"���$ �����(�� �������4���5�

����$��

����������$��4�$���� �8���8�����������"�����$"�$��'�����$��$�.??5����������� ������� ��4����������"����$������)���$"�"��8��$ ���$"�����������$��$��(�5�����44��������� ��=�K<5���$��<5�L��$��04�$(��$�� ���$�����$���$�(�$7��$��+�$��'��'�����5�

������������������ �$���"���$"�$��������������/���$�(�����$������$8�������4�GG'''5����$����5��5�/���$�������4�$������)�����)�'����"��"����4��� ��8��$ ���$"����F� ��������8�������������.�>��$�����8��$��:���$�%�����8�������������1� ����)���$�� <5�

/���$���� ���$�������'��&��$������� �$��"�$������$��)������8�������8��3���������������� �)��"��4��F� �5������$�'�3�����$��)�������'�����$ ������$�'�"��4�� ���������$�������������$����4��3���$���������� ��������)���4��"�����$"��$�����=���7��$��'����������$ ��4������ ��$"����������������������$"�$��)���������� �$��4������$"��)���)�'�/���$�"����5�/���$������4��$�����4�������������04�$(��$��(�$7��$���������'������)�(���$�������$��44����)�������$�'��$"�$�5�9���������$)�������$��$������8� �� &��������������+�&�8�������4�GG$������3� �5��� �)��"�5$��G "����$G�'�&�G3��'G�����G5�

Page 340: Game Programming With Python, Lua, And Ruby (2003)

� �#��

+���������+�����$#���

(���������$���4�����)�����"�����$������)�����$�������8��$�����4�������� ��������$����4������������,�����$������$���D�$���)� ����� ����������5�(�� �$���&��4������$����$"�4�����)���$��3����� ���)��4��� ��8��$ ���$"���3���������������$�����3��������5��$��������$8���$������)���������������)������������$�����$�7��)�'����������������F�4�$"��$�����(����$�'�"�$5�

�������

%$"��$�������)���'�����$"��$��74�������$�"�����������$�����'��&���)�@5/5/5����&��$�K%$"���$��'����� ������� �$��� �������1��"�����$����&��$,�����������������$L5�%$"��$���������$����$���$��$��3�������$�����$������)���A������������5�����4���� ��������$ ����1�����K� <�L��$��/�"��K������ !��L5����'������"�$�������7�������8����$�'��4����������$�)���"��4�� ��

�������������������$�4��$������&��4��$���$��'����%$"��$�5�9����8�����$���$�F���������3����4���)���8��$ ���$"�+�$��'�8�+�$��'��.*8��0�8�1� 8�%��"�8�0�G�8�(�$78���0�8�%����8��������8��$����3�����������5��� �$�8������� �$���������������7������������ ��3�5������8�����"����������)�����$����5##�)��44�����&J��

(���������$��������������.�%$"��$������������$�)��� �����D����$�5�����������������������D�$���)�%$"��$��3����$��8�'�����3������$"�)����4���$� ���������4���������$�1�$���3�$����������5�(��� ��4��$"�����3�������������$������$"���F� ���K��&��'�$��8�����8����3��8�)���8�4����$�8��$��� �����L��$��4�������4����5�*3�$����$���$"��7�����)���(��)$ ���$��)����$�"�����3�$��M�)����$���$ �8�(��� ��4�����$����'�� ����F� �����������$�����"����'��������$������5�

%$"��$�� �$����)�$���$��$�8�������4�GG'''5���$"�������5$��8��$����� ���$�������$���$������/������/����$$5�

.�$�������� ��

���'��������(���������4�������� ��4���$"�$��)�������4�4����"���������,�����5�%����)�����"���,�����""�$"� ����$���'�����74��������(�8��$������� ��4���$"�$��'����74������$���3��������3��� ����$����$��)��������"���5�9������'���8����������'��������4���3����)����""�$"�'��������3�$"������3���4��7��$��3�����""�$"�������)��������$"�$�5�9�������)�$�8����������'�����'�$��'��$��������$"�$���������������4��4�'$�$�������� &���$���$��4�$��$��4��F� �������D�$"������$)�$�����$"�$�5�

�����,������ �$����)�$���$����'���,�������������4�GG'''5���'���5 ��G"����G������O"���G5�

���'�������������(�����������7��$���$��$������4�4����"�������������3���������)8�1�E�5�

Page 341: Game Programming With Python, Lua, And Ruby (2003)

� �#��

!��%���-�$����

( ���%����'����$���)�����)�����"�������������������������������D�$"�(�5�%����"�����$���)�����9�$��$"�8��������$���3�$����"����( ���%��������������$�� !8�'���'�����$��$�(�5�

(����4�� ����$��$������� ��4��$"��$"�$��( ���%�������8� �������.:115�(��'�������������$�����"����1�$&�������$�����������3���4��$��� ��4���$"�$�5��$�1�$&�������$�����������������������������(�C�44���$������������"$������$������������$���������"����)�����.:11��������(�����5�

"������$���

/��� �*$������$��$�,��2���'������'������������'����(�����&���������'��������� ����)�$����������������� ����������5�����������'���$�������$F�������������$���� &��)�������� ���$���8��$ ���$"�2���'�����3����$��������$�����'�������)���������&8�������$��8��������������� �� �8��$�������+���5�/��� ����������� �����(��)�����������������$�������$�������� ��4�$���������� ��������������������8�4��)������4������8��$������������$���D�5�

/��� ���������'��&�$"��$���$�'�"�������������(��� ��4���)�������%���� ����$��$"�$�5�����4��$����)����$��$���4����3��%��������������4�4��"����������������������))���$������3����������8��$�������)�����'��&�"���������$"��'����� ��4��$"��$�������)���3�$"������� ��4�������� ��4�������� �� ���������5�/��� � �$����)�$��������4�GG'''5���� 5 ��G5��

����������

������������D�$���)���������������������3������(�5�.�������$������������$���)��������"��� ��4�$���8��� ������$��$��������4�GG'''5 �������$������5 ��5�

.�������$����������������3��������"�����������������$���$�@�4�$���������(�����������4�������"����� ��4��$"���$"�"�5�����4�4����)�$�����/�����$�������7��$��3������)�(�8����� �������������� ���$�����4�'$�����3������� &����������$"�$���3������$"�������)����� ����$�(��)������������$������� ����$�� ������5����$"����������� �$���"����4��� ������$�'������$"�"������$"�(�� �������������8�'�� �� �$����)�$���$��$��������4�GG�������5 ��5�

����)������ ���)�4��"�������������$"����8����� ����:��� �8�����'�����$���)�'��4�$���� ��(������ ��4��������K��������$���$���������� ��4���L5���'����'��&��)���0��'����8�'�� ��'���74� ��������������$�=���7��������$������$�'5�

Page 342: Game Programming With Python, Lua, And Ruby (2003)

� �#��

.����������

���$"�����3��������8���"��'��"��� �����������������8�(�� �$����)�$���$���$������)���))���$��4�� ��8����$"��$��$������)���))���$�����$"�5���������"��������F�������"����'����8�(������)�$������'����������3���4��$����$"�"���$��� ����� �����$���3���8�$�3�������4��F� ��8��$��"�3��$��$���"�$ ����� ���������'����5�

���-�*�

%�4��"�����$"���$"�"����$,�� ��4�����$�������4����������$���*�K�$��"��������3���4��$��*$3���$��$�L8��$������,���7� ����'����(���*���5���3���4���)������� ���$�������������$�/���&8�(���*���� ���$����K����)������'����$"L�$������������5���������8�'�����44����)���(���5�5��������)�������)�������4����� ��$����$���)� �$"8�+�$��'��������$�����""�$"������"��8�����&4��$��8��$�� ������� &���� ��'�$��'�5��������������$�%���)�����$��� ������������(���7��$���$�5�

1����)��&��)��������'������"��4�� �����3���4��$���$3���$��$��'������ �"$�D�������$���)� ����"����'���K����9�"���<5�L5�(���*� �$������'$�������)�������4�GG'''5"���� �5$��54�GY����&G�����5�

&����:(2(�+�������-�*������� ����%����������# ��

�$���

���������4�����)�(��������������4���)���5��������$���������0���5���$��(��#5�8���������� ����������������4���)���8��$�����"�$��������� ��4���������������$8��7 �4��)�����)�'������$"�4�� ����)�)$ ���$�����C���$�����)�'����$������G0�)$ ���$�8����$������$�

Page 343: Game Programming With Python, Lua, And Ruby (2003)

� �##�

K�����L�)$ ���$�8��$�������)$ ���$�������'����$�����������$����44����)����������4�������������������5��

���4����������D�������� ���$��)�����������8����������A�������������(������������$8��$ ���$"�

•� ���������)$ ���$��•� ��������$4��)$ ���$��•� (�'���3��������"��4�� ���44����•� ��'������$���)� ��)$ ���$��)������������

��������4��F� �������)�'���'��� ��������$�� �4���"��������1��� ���15�%$�����8��$���� ��$�����$��$�����4��� ���� �$����)�$���$��$��������4�GG$��4�"�5��5 ��5��G���$�G4���� 5���5�

�����

������(��������������"$��������&���$��"�����$����'��$�(���$��.����.??� �����4�������5���(����� �4������)���44�$"�.������� �$���$��8�)$ ���$�8� ������8�3��������8��$���������5���������������� �����"�$�������������$��$"� �������� ����������)�������)����(�5�>�����$��5����4��8�'�� �� �����4�$�����������5��/��������)�(�8�������� ���$��������������)������'����$"5�������)�'����4� &�"��������"�����������+��������.����8��$�� �$����)�$���$�����(��+�&��4�"�8�������4�GG'''5�� "��)54 ����5��GY ����G����G5�

Page 344: Game Programming With Python, Lua, And Ruby (2003)

� �#��

,�������

(�����)�$���$��3������$"�)�������4������4DD������� ��4�� �����������������4�"����8��$��)�����������������3� ���������"�8��$��������� ��$ ��4��F� ��5�1���� ����$��8�(��4���$����'����.��������� ��4���)� ��� �����4��3�����$��������$����$���)� ���)�)��7�����������������3���4��$������8��$���������)���������&����3������������$������ �����D����$�5��

��4����$��4��$���)��������� ��4�����$ ��������)����'�$"��

•� (����$����������� ��� ���$� ����� ������3���4��$���� �����������������$���D�8�)���8��$������������5�

•� ��(8�.8��$��(�������)��$�4���$�����$� ����5�•� (�����)������4��3���3��� ���������"���$"��$�����5�

Page 345: Game Programming With Python, Lua, And Ruby (2003)

� �#;�

*1�������

'8� :�������*$�"������������$�����4�����3������� �$��� ���$�*$�"�����3��5�

/8� :����������4�����������4��'��������1%���$"�$����� �$��� ����1%��� �$�5�

Page 346: Game Programming With Python, Lua, And Ruby (2003)

� �#!�

����� �!���������������������"��

�����4�����)��������&���"�$��'�����$��3��3��'��)�/������"������4�����4���8����$���3����$���/���������������&��/�������$��9=/��5�.����)�����A� &��$�������"��4�� ���$"�$��'�����$��$�/����44������$�.��4������5�(�����8�������)����������"��������$�����������)��/���4��F� ���������� ����5��

Page 347: Game Programming With Python, Lua, And Ruby (2003)

� �#<�

��������0��)������������������&��$�

��������"������������)����������$�8�%$��������������������$M�������8�������������4���)�)��D�$�'�$��9����*��$,��3����������$5�

CC/��4��+�����*�����$�

(�&��.��4��������$��;8���������������)��$���� ���$����������$"�"���)��$������C�$������ ��4���8�����,��/��5������������4������3��3��'� ��4���8�������������$ ������)�'���)���7��4�����)�/��� ���5�

Page 348: Game Programming With Python, Lua, And Ruby (2003)

� �# �

��������

/��� �����'���������""��8�� ���������$����� ����$����$�8�)������44�$"�����"��4��������'����4��"�����K����9�"��� 5�L5���4������)����'�$"����� ��������

&����;('(��������� ����������������$����������

���$��U����$�"�R����"���#�����>�$�

�������""���������$������)���)�� ����$���)��8�'���8����""�$"���/���4��"���5�������������������$������� 5�5�

+��$��;('(���������������

��������� C���

$���D�� ��������&4��$������4� �)������$������������

������� ������'�� �4��$��)����$��74������$�

Page 349: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��;('(���������������

��������� C���

������� ������ �� �4��$��)����$��7 �4���$�

�������� �����������&4��$������'�� �4��$���

��������� �������4�����74������$�������4��$����'��$�4��"�������4��

����������� :$�������4����

������ .�$��$��4��"�����7� ���$�

������ ���4�)��'�����$�����4��"����$��������$�7����� ����$��

��?��� ���4�)��'�����$�����4��"����$��������$�7����� ����$�5�������������� ���������$���$��� ���$�

������ (������$���)���� �� ����

���� ���� ����� &�)���������� ������ ���$����� &�)�����

������ ���� ����� &�)����� ��������� ���$����� &�)�����

������� *7� ���$�������� ������� &�)���������$��

������� ��$���� ��������$�����))�

J����� *7������""���

3���"��$���� ���'�"������3����������$� ���$����� &�)�����

3���������� ���'��� ���3����������$� ���$����� &�)�����

3������������� ���'��$���$ ��3����������)�����"�3�$���F� ��

3���������� ���'� �$���$����)�����"�3�$���F� ��

�����������������

���'����������)�����"�3�$���F� ��

�������� ���'��$���$ �����������)�����"�3�$� ���������������

������������� ���'�������������

����������������

���'� ���$���������

�������� �'�� �������"�3�$��������

������������� ���4�����"�3�$��������

��������������� /���������"�3�$��������

��� *3����������"�3�$��74������$��$� ���$����� &�)������$�����'�����3����

������ ���$�����"� ����$���

������ *3�������$4���$����� ���$����� &�)������$�����'�����3����

Page 350: Game Programming With Python, Lua, And Ruby (2003)

� ����

�������, ��� ����

�����������4����$�����$"�������������'��$�������$"������������/������ �$����������������4�����F� ������$����� ��4��$"���$"�"�5����$"���F� ������$�������$��������$������������)��������������&���$���F� �5�9����$���$ �8��$��"�����$�/���������� ������� ����

��F� ��8��$���$ ����)��������$��� ����5�

����/�����$"�"����� �$�������������������������$���2�5�/�������������������$�������

�)�'���5�9����$���$ �8���������������� ������"���������$"�)$$�� ���� ����8���&��@^8�@18�

@48��$��@62 �W5��)���,���)��������'��������$"���$���$"��$��4�����$���� ��$"��$�����8����'����)�$��/��,����$���$"���)������������4���������������������5�

0$����4����$����))���$ �����'��$�/����$����������F� ������$������$"�"����/����$����44�������$"����$������$ �M������00����$"�"�����3������4����$������$ �5���������$��������$�/��8���� ������� �$��$����������3���)�����$��4���$�5�

%�)�'���$"���$�������"����))��������5�*� ���74������$��$�/���"�$���������&���4��$����$�5����������$��$����)�����$�������$����$���$�/��5����� ���$�� �$����������������$���)�����$���������$��)��������8������������$,��$� ������5�/���'������ �"$�D��'��$���$�'���$�� ��������$"8������� �$��$�����������$��������4��������$"�/���$5�*74������$�� �$���������"��4���'����4���$������5�

.����$����$�/�����"�$�'��������4�$����"$5�

�������������������>��������������������"���������

.����$��� �$���������������������'��$�/$�"����$��/���� ����$��M������$���4������'����������&�4��$����$"��$����'��$��������

/$�"��������������������������������������"���������/����

+�����������A�����"$�8�$�"����$��������&������)�����)������ &��74������$8��������&�������������$��$��$��7 �4���$��

$�"���������������$���D�����������������������?���������������������

/����44����������� �$ �4��8� ��������� &�8�'�� ����������"$������$���$������)�

��))���$��'���5����� ������3������$"�'����$�������$���$������������� &5���� &�� �$�������������"$�����'���� ������� &���8���&������

���Z�����S��S�S$���D�Z�����

Page 351: Game Programming With Python, Lua, And Ruby (2003)

� ����

N����S��S�������S$���DO�

%��4� ����/��� ����$�� ������������ �$� ���� ������� &���$���3����������5��������3�������������� &�"�3�$�������� ���$���������'������"��$���K�)�$����"��$�����

"�3�$8�����������L5�������"��$������"$��$���������$���D�4��������������$��F�����&��������4�������"$��$�5�

�>�� ����$�����������!� �����

%��/�������$���F� ������$������$"�"�8�������������)�������)�$���������F� ������$���������5�%$���F� ������� �$���$��������������3����������$��)$ ���$������������4� �)� ���������)5�0�F� ������� ���������� ������8��$��������$�$�����'���� ������$���$ ��5�.�������������&����F� ��)� ������5������ ����$���$���F� �����4�����'���������������5�1����������� �$&���)� �������������$���3�����)�����������K����9�"��� 5�L5�

&����;(/(� �>�� �������� ��������#���0�������$����

�$�4�� �� �8���F� ��8� ������8��$�������������� ����$�����"�����5�0$���7��4����)����������������F� ������� ���������� ����$"� �������'���������� �$��� �����������5�

�$�/��8� ���������&���$�����)����'�$"�)�����

L�����R�L����+,����������� ���������8�+,����������������������� �R�R����������������������������������2?��������������������R��������L#�&������

Page 352: Game Programming With Python, Lua, And Ruby (2003)

� ����

������ ��74������$���$������)�R�L���������� ���������������

6� �R�R������+��"������,����������?�������������

%� ������$���$ ���)�R�L�����K�������8���R�L�������F� �L� �$���� ���������� ����$"�����

R�L����� �$��� ���8���������8�5�%$���������8��������������4� �������$�$"��$�

/��M����'����������� �������$&�4�'����������������� ���5���8���� �������� ������$���$ ��

�)�R�L����8�F�����4��

R�$C����/�R�L����>���+,�

0$ ��R�$C�����������$� ������8������)�R�L����,���������������3���������������

R�$C���>R�R�������

/���������$������)����$�����������$� ��������$���������5�1�$���)����� ����$� �������������������$������� 5�8��$�� ����$���������������������$������� 5�5�

+��$��;(/(�.�$ ���������$������

�$������� ������

&������ 0������� ���� ���$��)���F� ���

�"����� 2������$��"�����������������$"���)�5�?����

�����"�� *$ �4�������7� ���$� �$��7��

L������ ����� �����)������� �������

L�������������0�F� ���"�$����������&��$��� ��������������������$����������$���7� ���$� �$��7���

6���� /�4����$������� �������

2?��������� .��������7 �4���$��$)�������$�

5����L������ ����� �����)�����"� �����)�����

5����� %����� ���$��)��$��)������F� ��

5���EE#����� .����$��������$)�������$�)���)������F� ���

5�?����� 2������$��"���3�����

5������ /�4����$��������$������

������ .���� ���$��)�&���3����4�����

!���"���� ����� �����)��� �"�����$��5�?����

!�� ������)��������$4���$����4��

R����6����� ��4���)������4� ����@]�3��������)����$ �4�����$"�4�����$���� ����

Page 353: Game Programming With Python, Lua, And Ruby (2003)

� ��#�

+��$��;(/(�.�$ ���������$������

�$������� ������

R������� ����� �����)������������F� ���

R������� ����� �����)�����������F� ���

��L������ ����� �����)�������

�������� �������4��)���5����8�5�?���8��$�� �"����

$C����� ����$�� �����)������� �������

������ ����$��)�����F� ����� &���)� ���������������$������������)��� ���3���������

���"��� %$��$���3���'�������������$���$��

��"�?��� 2�������"�����74������$��

#����"�� 2������������A�$ ���

#������� �$�����������������"������

#�����EE����� 2������$)�������$��$�4�� ����������

#��$���� 0�F� ���������4����$�����/���$����

�������� ����$��)������������F� ���

������W������ 9���&��4�$"���� &��)��������������"��4�

������ %����� ���$��)��������$��������

����L������ ����� �����)�����"� ���������

+��$��;(2(�.�$ ��������!� �����

!� ����� �����) ��A��� �- ������

I����� ���)����������������������

&������ .�$3�����"�3�$���"��$������$�������

��S�?���� 9��� ���$�$"�4�'��$������$���4�������7����

���������� �4� �)������)�������������������$"���J�����

$�����"�� /���$���������� �����)�����$��$"�

�������� /���$�������$)�������$��)����� ���$�� ����

������� *7� �����������*��������� &�

������ /���3�������� ���� �����)���3����

������� /���3�������$��)������3����

�3���� *3�����������"�3�$��74������$������/���4��"����

�?���� *7� ��������"�3�$� ����$���������4�� ����

�?���� *7����������������

Page 354: Game Programming With Python, Lua, And Ruby (2003)

� ����

+��$��;(2(�.�$ ��������!� �����

!� ����� �����) ��A��� �- ������

�?��;�� *7�����������������$���"$������$��&�$���)��7 �4���$���$���$"�

����� /�������7 �4���$��

5������ .�$3�����"�3�$���"��$�������)�����

��D�� 9��&�� ������$��4���$��4�� ������

������� /���$��������$"��$�����"�3�$�)������

"����� /�����������$"�)�������$������$4��

"��$��S3����$�����/���$������������)���������"������3��������$�������)�$����$�����"�3�$�4��"����

"��$�� ���� ����)�����4�����$��$�������$"8��$���)�����4�����$����)�$�8���&����� �4���)���������$"�'��������4�����$���4�� ���'������"�3�$���"��$��

"��$;�� ���� ����)�����4�����$��$�������$"8��$���)�����4�����$����)�$�8���4�� �������4�����$�'��������"�3�$���"��$�5��

!���"���� .�$3�����"�3�$���"��$������$��$��"���

��������K�� /���$�������)� ������)�����$����������

���$���� /���$��$�'��� �������4�� �������F� ��)����������� &�

������ (������$���3�����������/���4��"�����$�����)����

�����S3����$����� /���$������������)����������� ���3��������$�������)�$����$����� ���$��� �4��

������ (��4��$���������$�����

������ 04�$����)�����$������$����)������F� ������ ������'��������)����

��� ���$���"�3�$���F� ����������������

������� ���$�����"��$���

����� �� ���$�����"��$����$���"�3�$�)������

������ /���$��$�'��� �������4�� �������F� ��)����������� &�

������ +��������"�3�$� ���� �������������)������4��

������� :����)��������$"��7 �4���$��

������ /���$������$����$�����"����������$�����A���������$����������$�����"�3�$�3����

���������� /�����������$"�)�������$������$4�8���������7 �4���$���������$���)���)����

����������� /���$���$������� �$���$�$"������������$���

��J������ :�������������������

�������� .��������������������8�'�����8��7 �4��8��$���������������� �����

Page 355: Game Programming With Python, Lua, And Ruby (2003)

� ��;�

+��$��;(2(�.�$ ��������!� �����

!� ����� �����) ��A��� �- ������

������� .������ ��4���������4�)�����"�3�$����$���)��� �$���

������� �4�����������$"��������"�3�$�����$"�

#����"�� .�$3�����"�3�$���"��$�����������$"�

������ �� /���$��������$"��$�����"�3�$�)������

������� �����������$����$����������)��������

��$�� ���� ����������$"�������$�@S�)�����4�����$��$����&����� �4���������4�� �������)������ ���$ ��'����"�3�$���"��$���

��$;�� ���� ����������$"�������$�@S�)�����4�����$��$����4�� �������)������ ���$ ��'����"�3�$���"��$��

��������� :���������&��������� �����

�������� /$��"�3�$� ����$���$�����4�� ����

������ ���)�������)���������

������� *7� �����������*��������� &�

�����S3���� ������������&������"�3�$�3���������������� ������'��$�����3�����)�����3����������� ��$"���

������ �4� �)����������"$�����$�����)�������"$���

�������S3���� �����������&��������������S3���

0�3�����8�/����44������$������$ �5��$������$ ������'�� �����������$������)$ ���$������)������ �������5�%�4���$�� ������$������������)��������$���4���� ���������4��� ����8��$������

����� �������� ����������� ����5���� �������������)�$������ ������$����������������$�K1L���������

R�#�$L�����1�R�������L��������������� �R�R������+��"������,����������?�������������

/���������44�������$������)�������00�� �$ �4��8�� �������7�$�8�'�� ��������������4����$������$ ���$�/��,����$"���4���$��������LM���$"����$�8�'�� ��4��3������'�������3���������F� �� ������$M��$���3�������$"8�'�� �����'��$�������� ����� �$�����3��'�����$����$�'���)�$����$�5�

�������+�)���

/������ ������$����3�8��$�����$��)����� �$���� ��4������)����������)�������4�����8��� �����8��������$���� ���� ���� ���5��������$�������$"�"����4����$ ��������$"�8� �$���$��8���$"��8��$��$�����5�

Page 356: Game Programming With Python, Lua, And Ruby (2003)

� ��!�

%���3����������$�� �$���$����$�/���4��$������$���F� �5�+��$���3���������������"$�������$������D��8�������F� �����������3�������������)���$ �$"�������������"$��5�>����������$�/���

�����������"������3����������������"�$�'��������@� ���� ���8��$���$ ��3����������������"�$�

'�����$�_� ���� ���8� �����3��������������������'����__8� �$���$����������������44�� �����������8��� ���3������������������������'�� �����������8���� ����� �$���$��������������)�$���'����$� �����$� ����������������5������������������)�'��4� ����3����������$�/��5�%����)�������/���3�����������������$����$������� 5#5��

+��$��;(3(������9����$���

9����$��� �����) ���

SS5!%2SS�� .���$����� ��)���$����

SS%!2SS�� .���$����$��$������$�������� ��)����

_3����$���� �$���$ ��3��������

__�� .�����3��������

@3����$���� ������3��������

3����$���� ���$�����3��������

X&�!& %2�� .�$���$��3��������

������ �$���$ ���)����� �����5����L�����K�5�5�)����L�

����� �$���$ ���)����� �������L�����K�5�5�)����L�

��� �� /� ��3����)����� ���$���������

������ �$���$ ���)����� ���������L�����K�������8����L�

�����$"���3�����������)�������$����3�M���������$����&������

��3����$���/�MR��#����"Q�M�

������"������3����������&��������

@��3���$���/�MR��#����"Q�M�

���� �����3�����������&��������

__��3����$���/�MR��#����"Q�M�

%$������$5�

�$�/��8�����$�)���)������3���'����� �$$����������)���3��������$����5��������$ ��������)����'�$"��

2W!��

Page 357: Game Programming With Python, Lua, And Ruby (2003)

� ��<�

�������

��������

�����

��� ��

������

26�

�� ��

������

�����

�������

�������

�������

�� �����

����

����

������

�������

�����

����

� �

������

������

$�"����

������

����

��������

���� �

$���D��

Page 358: Game Programming With Python, Lua, And Ruby (2003)

� �� �

���� ��

��������

�������

��������

������

����

��?���

��������

������

, ����

�$�/��8�����$"������<������������A�$ ��5������$������������� ���� ����8���� �$������

�������$��������5�%�����$"���F� ������ �������$��$���$ ���)����� �����#����"5�

+��$�4����$"�'��������$"�8��$��������&$�'������/�����))���$����������'��$���$"����$��������A����5����� ��������))���$ �����'��$�

������M�����"Q�M�

�$��

������I�����"Q�I�

+��$������'����$����)� �������3���$�'����$������$���4�����8�/����� �"$�D�������Q������$��� �4����A�$ ���$�����)�������$���$��$����$������� �$�5�

�����74��$����$�)��������������������$"�� �$���"�$��$���$��'�������������$"������������A������$����&�8����'���������������$"������������A������$����&����4�$����$������������$5�*74������$���$�������A���������"�$���������F� ������� &�������� �4��

���� ����8��$����$"���A���������$���K�7 �4��)���Q��$��QQL5��)����$����������$"����$������

��F� ������$���� �4����A�$ ��8��$ ���$"�����Q����QQ8����$����������"�$�����

�74������$�'������4�� �$��"��Y���"$5�

����#����"� �����������$����������K �����������L����� ������'������5���$ ��/��������)��$���$��������$"�8������&�����$�����������'������3����$�����$�������������)���4��)����$"����$������ ���$���$�����$"�5�

.����$��� �4����A�$ ���������������$������� 5�5�

Page 359: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��;(4(�������������*���)��,�B�������

,�B������� !�����

Q�� %���� ����3���� ���� ����

Q��� �����

Q$�� �� &�4� ��

Q�?�� .�$�����7�

QL'?�� .�$�����7�

Q��� *� �4��

Q �� 9����)�����

Q��� ��'��$��

X��� .�����"������$�

Q��� +������4� ��

Q��� ����

Q3�� >���� �������

Q?�� %�����7��� �����3���� ���� ����

QR'?�� 1����7�

QR'QL'?�� 1���� �$�����7�

���$���*1)��������

/�"�����74������$���������������������/�������)���4�����$���� ��$"��$�������� ����$�)$ ���$���"��$�������$"�5������$������ ����$����7����)������ ��$"�4�����$�8������������������� ����$���)����$ ����$"�4�����$�8���4����$"����� ���8� �����$"����'��$������$����4�����$�8�"��4�$"8��$�����������$5�.����$�/����74������$��������������$������� 5;5�

+��$��;(5(�������������*1)��������

*1)�������� �����) ���

@;�� *7 �4���$��$)�������$������"��K������������L�

@_�� �� &��� ���)�����������7 �4���$�

@^�� ��������$"���� ����������������� ���)��4�����$���� ���$������� �4��

@`�� ��������$"�4�� ���$"�'����3���'������ ����������������� ���)��4�����$���� ���$����� ���$��� �4��

@I�� ��������$"�)����'�$"�'����3���'������ ����������������� ���)��4�����$���� ���$����� ���$��� �4��

@(�� ������������ &������ ����������������� ���)������ ��4�����$��

Page 360: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��;(5(�������������*1)��������

*1)�������� �����) ���

@���@->>>�� .�$���$��������4�����$�)�������� �����4�$��$"������)�4���$��������$����������� ���)��4�����$���� ����

@]�� �$)�������$������������������ ���$����� ���$��� �4��

@/�� 9��"�)��� �����$��$����3��

@*�� �$4���� ������4�������

@Q�� 0�4���� ������4�������

@��� 0�4��)�������4�������

@P�� ��)������4�������)���#����"�������

@>�� ���� ���$���$4����$��$������)����������)���������'��������

@1�� ����3������ �$ ���$����$�)�����)�����)�����"�3�$���� ����$����$��

��"��$��5�#����������)����

@4�� ��)������4��)���4��$�8������ 5�������)����

@S�� ����������$4����$���)�����$"����"����������������

@��� .�$���$������$�����)�����)���� �$���$�$"�����/���� ��4�����$"��7� ����

@)�� .����$����$����"��$���"�3�$�)�������� ��4��

@@�� ����4�� ����$������)�/����$$�$"������� ��4��

@K�� �����������)�����������7� ���� �����4�� ����

@E�� ���������� �$���$������������)�4�� ���������&�)���/���� ��4����$����$����

��������������������J�����

@M�� ���������� �$���$������������$�����������������J�����

@62 �W�� �������)�����'���'�� ��

@5!%2&R2�� ��������@1> �����������������)���$����

@%&6S�&���������������������@E�

@������� ���� ���$�����$������$4��

@�������� ���� ���$�����$�������4��

@�������� ���� ���$�����$�������������4��

@X2� #2�� ����3�������)��"8�'�� ����������������'3��'�� ���������/����$���4�������

@'��� �����������������@*�

@'��� �����)��4���$�'���������

@'��� �����������������@62 �W�

@'5�� �����������������@P>�Q�

@'��� �$��$�4�� ������������

@'!�� �����������������@E�

Page 361: Game Programming With Python, Lua, And Ruby (2003)

� �;��

+��$��;(5(�������������*1)��������

*1)�������� �����) ���

@'��� �����)��4���$�'��������

@'��� �����)��4���$�'��������

@'3�� �����������������@X2� #2�

���� �� ��

(�&��3��������8� �$���$����������)���$ ��������F� ����$������ �������'��$����������)���������"$��5�:$��&���$���������$"�"��8� �$���$��� �$���� ��$"����$�/��8������"���� ��$"��)������))���'��$�$"�)���������$���4�����5�

.�$���$��������������)�$���'����$��� ������������������� ��������)����'����$����� �����

��������5�0�������)����� �������������8������ �4���4�������+EE,� �$������������ ��������5�/��������������$������)�4�����)�$��� �$���$������������"�������$�� �4�M�������������������$������� 5!5�

+��$��;(6(�������$���$�������0�������� �� ��

���� �� �� �����) ���

&�W5�� %��������@1�

&�WX�� %��������@)�

6&�&�� ����)������F� ���)������ ��4��

2X�� .�$���$�� ���$���$3���$��$��3���������

5&%#2�� 9�����

!%�� ����

�� �S�2%2&#2S6&�2�� /��������������������$"�

�� �S�%&�5�R�� /���4���)�������$��)����

#�6!�� ���$������$4�����@������

#�6���� ���$�������4�����@�������

#�62���� ���$��������������@�������

���2�� ����

X2�#!�� /���3�����$�����$"�

������

Page 362: Game Programming With Python, Lua, And Ruby (2003)

� �;��

/�$"������������$�/�������74�������A�$ ���� ������$������"����$����%����Z5�/�$"��� ����'������$������)���)����������)����������$"��3����������3�����������$"�

������ �$��$��5�����>>��4����������������� ����������$"����4����F� ���

�����"��/��>>���

/�$"�������4��������������)��$�������� ����������������������������������������$� �$�����$����������$��5�

��������

/���������4���������'�����$��"�����$��)�����$"�4��$��$�����5���������$����������

��F� ����)�����5�?���� ������$�����"��$������������F� ����)����� �"���� ����5�/���$������$���� ���8���$���8��$����7��� �����$�����5�/���$��������������$����$������� 5<5�

+��$��;(:(��������������

�������� +�)��

���� �$��"���

'���� ��"$����$��"���

��>���� 9�����$"�4��$��$�����

�? �� 2�7��� ������$��"���

�$������� ��$�����$��"���

�.<<�� 0 �����$��"���

%������$������������F� ��8��������)�$������������$�/����$�'����'�������$����'�����$���������$"�"��5���������$�/���'�������4�$����������"����$��������$�������������������������$�5�

/���������$������)��4�������8��$ ���$"��������$�����?8��8�G8��$��P5�%"��$8�������4������������������� ����5�9����'�$"������������)�����/����4�������8�)������"����������'������3����)�4�� ���$ ��K�����4������������)����������$����$������� 5 L��

�5� ����5� PP��5� �K$���L�?K$���L�J�Y�#5� G�^��5� ?���;5� RR�SS�!5� U�<5� V�W� 5� SQ�R�RQ���5�RQS�QQ�QQQ�JQ�QY�JY���5�UU�

Page 363: Game Programming With Python, Lua, And Ruby (2003)

� �;#�

��5�VV���5�55�555��#5�QK?Q8��Q555L���5�$����;5��$�����

+��$��;(;(�������$��C��������� )��� ����

)��� ���� C���

//�� ������)����A������

///�� �������A�������$���������������$��

1/4�� .��4������'��3�����

1��1/��4/��4�� (�������$8�"����������$8��� 5�

/]�� /�"�����74������$�4�����$���� ��

(/���� �$ ����$�������

'/��� �� ����$�������

^^�� (�"� ����$��

ZZ�� (�"� ������

;�� (�"� ���$���

;/�� �����A���

>>�� /�$"��

EE�� � �4����������$�

����� (�"� ����$��

�J�K�� .��4�������4���$��3����

�J���K�� .��4�������F� �����

����� (�"� ���$���

���� (�"� ������

%���"$��$�������������$�/�����$"�����4�'��)���A�����"$��

������/�I��I�

1���4�������"$��$��� �$��������������$"� �������$���A�����"$���

��-�.�/�I���I��I��I���I!I�

Page 364: Game Programming With Python, Lua, And Ruby (2003)

� �;��

��� ��$�, ��� �����

/���������$������)����$����� �$�������� �����74������$��)��� �$������$"�4��"����

)��'5��������$ ����� 8�����8�������8�����8������8������8� ��8��$������5�������

�$�����������44�����������$������)��4���������$��������$�����������$�����//8�18�1/8�48�

4/8��$��/5��������4��������������������$������� 5 5�

���� ���$��)�� a�����a�����a�����$���)���������� ����$� �$�������� ����8��$���$�/���������$��7��44��������)����'���

� �����S��S�����A����B������������S�������������A���� �����S��S����S��������A����B�������������S����S!������B���������A�����������������S����S� S���S����S ����B�������������

%���4� ���������� �$�������� �������&������������$�� ����

�����������S��S�����A����B�������������S�������������A�����������������S����S�������B�������������

����������������$���$�/������� ����&����A� &��� ���$"�� ��������$��'��$�����4���

��� ��������3�������5�����������������$����&����� ��4�����$����'��$������74������$�

"�3�$��$���$��$������)��74������$��K�����$"��L���������������)����������&��'������

�����@��S����S�����������������>>���M����S�M������-�>>�.�M����S-M������=>>�-��M����S.M������#J�����M����S=S�����M������M����S9M�����

���������� �$��� ���$������������ �$��� �����������3�������������

��5���������������������S��S���������S�������������������������������S��S����������S���������

Page 365: Game Programming With Python, Lua, And Ruby (2003)

� �;;�

���� ������4�$"� �$��� ���������������������3����$����F� ������� �$����4�$�������������$8�$������������������$"��5�����)����'�$"��7��4���4��$����3������$"���������$�����)�������"��$��"�3�$��

��������A���-��.B���������!��M�M�����

������������)�'���)�� ����$�������� �$���������$����4��K�$���$���� &�L8��$ ���$"�����)����'�$"��

����%(������$����������������������$ ����$"����45�

��1 (��&�4����������$���)��������45�

����(�/�4��������� ���$�����4�)��������������'����������3�����$"����� �$�����$5�

�� ��(�/�4��������� ���$�����45�

�� ���(�*7��������������G���4G��� &�'������������$�3��������$��������)�����$�3����5�

9�����$���$"��7 �4���$��/���������������$������� ����$�5������� �$� ��������

�$����������8���$�������"��8� �������$��7 �4���$��)���4�������S����8��$���3�$���$����� ��� &��$)�������$��$�����)������"�3�$������3�������� ������)$ ���$5�*7��4�����

������M����������������M�������#����?2������M��3����������?M�������#����?2����>���+M��������������M,�

�����������"������

%�����������$���$ ����)����� �����&����8��$������������ ���� ���$���)���F� ����)���$ ��5�%$������� �$���� �������������4�������"$�$"���$������)�3�����������'����'������3���������

@R�&�����/�AI�����I��I!I��I��3�I��I���IB�

*� ��3�����$����������� �$����$����� ������$���� ������

������@R�&����A�B�������@R�&����A�B�������@R�&����A-B�������@R�&����A-B�

2����������������$���$ ����)���������� ����8��$����������� ���� ���$���)���F� ����)���$ ��5�2������������&��������8��$���'����$� ������� &�����$��'����&���QS�3����4������

@R������/�NI�I/4���I$I/4-��I�I/4.��I�I/4=O�

Page 366: Game Programming With Python, Lua, And Ruby (2003)

� �;!�

���$������3����� �$������)���$ ������������&�����

������@R�����AI�IB�������@R�����AI$IB�������@R�����AI�IB�������@R�����AI�IB�

*1��) ����

/�������������$��?�������� �������)��������$"��7 �4���$�8��� ���)�'�� �����������'$�

�����"������$"��$����� &��� &��� �5�*7 �4���$� �������$��������4���$���$�"����$������

��� &�8��$�������$����������������� ����8���&��������

$�"�������������������������������������"��������2?����������������@������>������M�����������"�M�������������������

�������������������������$������ ����������������� ���$���7 �4���$8������� �$���������������� ��������$�A���7 �4���$��$�������������"���

� �R�2�����//������������R�2������MR�����J���2����M�������������

L������$���������������������'��$��7� ���$�����������$��$��� ��4������5�����

������ ����$�� ������������ &��)� ����������7� ����$��������$��������������

�$ �$�����5�+��$�/���������������8����"������ &�4����� ������� &����&�$"�)�������

��� ��$"������8���'�$�����������4��$�8��$�������$������������ &5�04���$����8�'��$�/���

F�4���� &�4�������� &8��$������������4��������� �$������$��4'����8� ���$"�/������ �$��$����$ �$"�4'������

������+ER�L����,������������������+�,�����������������������ER�L���������������S��S���������������������

!���$���

1����������"��4���)��������8� ������8��$�� �$���$���K����9�"��� 5�L5�%��4��"�����"��'���""����$����""��8������ �����$� �������)����������$"�"��������"��"����������)�)$ ���$�������$����������)$ ���$�5�1����������/��,��'����)���"�$�D�$"����"����� �����)� ���5�

Page 367: Game Programming With Python, Lua, And Ruby (2003)

� �;<�

&����;(2(�!���$�����$�����)���0��$������������ �����

1������ �$������)�$���)�������������'��������������� ����$���

�������R�R��������������#R2SL#�&�/����������&��2�SL#�&�/-����������� �#���SL����������������������?������������������

Page 368: Game Programming With Python, Lua, And Ruby (2003)

� �; �

��3�������������$�����)���� ������1�9���5��8��$��/���'������3�������4���$��)������$"�

�����������$��������������$"���J��������������

%����MR�5���>�$M���J�����MR�R�����M�

/��� �����'������$������)��������)�������$"��7����)$ ���$�������������4��"������������������$�K���������� 5��L5�

+��$��;('=(�������0���������!���$���

!���$��� C��A�����) ���

L������$���� .��4���$"���F� ���

2������$���� ���3�������$������ ��$"���������

2������ 1�44�$"�0����������������

5��������� 9����������4������$��

WL�� ����"�� ���� ���$��$���)� ��

T������� 0�F� ��� �$�� ����&��$���������

R�������� %�����������������D����F� ���

R����� ���� ����"�$��������$�����$� �$��$����)$ ���$��

$C���#������ %�����.�)$ ���$������)����������$"��3���������3�$"���F� ���

����������� ������4�� ����$�

��������� 1�$�4�����4�� ������

��������

(������������� ���� ���$���)���������$�� ������8��$��/���������'�������)�����5������� 5�����������)�'��)���������� ����$������������$��������"�$�����4�4����5���������������������'�����$��$�/��������)��$������)�$���$�����G���G�)�������)���������������$5�

+��$��;(''(��������������

�������� ���)���A�����) ���

6���"����� 9��������$"�����"������4����F� ���

2�"������ �$ ���������*$"�������������)����

$���3���� 9��� ���$� ����$����'��$���F� ���

��� ����� 9��� ����4��)���$"8�4��$�����������)�������� ��������@�������

�����D�� /���4��3�������$������)��� &�����3���� ���� ������8��$ ���$"����D��8�

����#��D��8�!�#��D��8��L�#��D��8�#LT#��D��8��L�#��3��8��$���6�#��D���

Page 369: Game Programming With Python, Lua, And Ruby (2003)

� �!��

+��$��;(''(��������������

�������� ���)���A�����) ���

#��"�������9����$���$"�������$����$���$���$ ���)���4���� ���� �������� �������

��������� 9�������$"� ������� &��

Page 370: Game Programming With Python, Lua, And Ruby (2003)

� �!��

!����������0�������������,)����

/����))����)��������������4������4�����$�����������������$"�"����$���������&C���$"��$���4����3���$����"����3��5�/��,��������$�4��)�������������4��A����������'��$�"�"�$"�4��)����$ ������7���$�$"� �����$�4���$������$���)������'��'$�5�����4��)�����

�$���� ������)�������� ����$����$���������$"�U����� ���8������� �$���������$�����

���������$"���J����8���&������

��J�����M��� ���M�

����4��)������������'����4��$������������)�����$������)� ���������� ��/�����������$�

����"�3�$�4��"�����$������������4�$���$��� ��������5�������������4��$�������@������5��

���������$$�� ���

/������������&��$���'��4�"����"�� ���� ���$�������5����4������ ������'��4������"����$��� ��������� �������������$���� ����������)������$,���$���5�/��������4��3�������.�K"����"�� ���� ���$L�������)����$���)� �$"�����$������$"�"����"�� ���� ���$��������8�'�� ���$ ����

•� ����$�(����������"����"�� ���� ���$5�•� ����$�(�*$������"����"�� ���� ���$5�•� � �� (��$����������"����"���$�K$�������������L5�•� �����J��$$�� (��������"����"�� ���� ���5�

,)����

9�$����8������������$������)���� &����� �$����������4��4����4�/��� �����

.�� &�����4��)������������'��������� ���������""�$"���'$5�

:�������������$�.������&�� �$������3���"����"�� ���� ���$5�

�$������D��3�����������)����������������5�>�������������'����$������ &� �$������)�$�����)���������$���4������������������ &5�

+��$��������$"��3��������"�������)������$��8��� ������$�����������3��������5�

+��$�����$�$"�3���������)��������� &8���3������3���������4����$������D��������������$,������ ������$�����)��5�

/����44��������������4������������$��)��&��)��� �����$"����4�� �����5���������������4����$����'����$������$���4�����8��$��)��&�������$3�&����$������4�����$"�������5�*�������)������� �$��������)������4���������$� �����$� ����5�

Page 371: Game Programming With Python, Lua, And Ruby (2003)

� �!��

,�������

��)������3�$"��$��������$�7�� ��4���8������������3��/����$���������$����� ��4���8��$�����������)����A���� ��)����������$"�/������ &�8� ������8��������8�

3��������8��$�� ����$� �$�������� �������&���������$��� 5�

��4����$��4��$���)��������� ��4�����

•� %$��)�����)�������$�/�������$���F� �5�•� %$���F� ������� �$���$��������������3����������$��)$ ���$������������4� �)� ����

�����)5�•� (�'�� �������������A����� ���3��������8�44�� �������������A����� �$���$�8�

3��������������������'����@�����"�����8�3��������������������'����_������$���$ ��

3��������8��$��3��������������������'����__����� �����3��������5�•� *$���)���$��������$����������$���$� ��������$�/��5�

Page 372: Game Programming With Python, Lua, And Ruby (2003)

� �!��

7��� ����������������

'8� 6��% &J�+���������I4����������I����$-�

�8� %��������������$�������3������� &�����,�������$"��$����5�

/8� 6���������������/�������� ��4�������$"�"���$��$����$���4�����M������������-�

�8� %������������4��$���$�����)���������3��/��� ����������� ��4�������$"�"���$�����������$ �����������7� ���$��4���5�

Page 373: Game Programming With Python, Lua, And Ruby (2003)

� �!#�

*1�������

'8� ��)�$����F� �8� ����8��$��������5�

/8� +�������������))���$ �����'��$���/���������$����/��������-�2�'������ ���� �����-�

28� ��� ������'��������$�/��� ������5�

Page 374: Game Programming With Python, Lua, And Ruby (2003)

� �!��

���������1��)������������������&��$�)��� �

����4�� ���)�'������������3�������5�

CC@����<��<�

����� ��4���� �3�������� ����$���������������)���"����4��"�����$"��$�/��8�)� ��$"��$�/��,��04�$(��$����(�'��44���5�

Page 375: Game Programming With Python, Lua, And Ruby (2003)

� �!;�

&<�����

/��� �����'������)�'�����&���8��$ ���$"�9=/����$��04�$(5�9=/��������/����$���)� ���������90=�����&��8�'�� ���������"$���)��� �����$"�"��4�� ��������$���)� ����$��'�� �����'�����$��$�.??5�

����9�7�����&��������������������4�GG'''5)�7�����&��5��"G5�

9=/����$��04�$(�)���/�������4���$�����$���$��4��F� ��5�����������)��$�����

��"�����8��$��9�7�4��3�������)�'�'��"����)���4��3���$"�04�$(��44���5�50W%L��3���

�$��50W%X����������50W%X��������F� ��5�50W%X������ �$����������� ������$�'�3�����

�44�� ����$���$���$ ������4���$��)����������))���$"�KX!#�&%S6� %2 �552�L��$��

���������$��KX!#�&%S#�2�2L��

R�X�����$C����/�50W%X�����>���+R�&������������X!#�&%S#�2�2,�

����50W%L��3���'��"�������$�04�$(�'�$��'�'������$�����)$ ���$�������

R�L��3���/�50W%L��3��>����+R�&������������3�����S��S���,�

����50W%X�����'��"����������"������3���04�$(�'�$��'�'���������)$ ���$�������$�������������������'����

R�X������/�50W%X�����>����+R�&������������3�����S��S���,�

������������$������)���4����$����))���$ ������'��$��������$�����90=�%����$������� ����9=/���%��5�9=/�������/�������$"���$�������)��������$�����9�7�9=����$"�5���$ ��/�����$�����$������$"����������$�"���$�8�������)��������"�����)���$���$"�4��$������$����������$�90=� �$�����&�44��5�1�$���)�����90=� ���������3�����$�

�7��$����'����������$�/������������ ���������8���������8�8��$�������5������������������))���$ ����$�������������$"��$����������$�3����������)�'��$���)� ��5�

+��������9=/����$ ������$��������$�����/���4� &�"�� �������$������)�9=/������4���5������������$�����K��4����JL����4�������� ����5�9=/������)��������������

�$ �����$���/���� ��4�5�0$ ���$�������8�/��,����J������$���������� ����$��� �$��������������$"��$���������������

�;*���*$��*��3���$����J�����M �?M���������5�?�

%�$�'�9=/����44�� ����$������ ��������� ����$"�����50&��� �����'������������ �$��� �����

R�&�����������/�50&��>���+,�

Page 376: Game Programming With Python, Lua, And Ruby (2003)

� �!!�

9=/�����A����������$����4���$��'�$��'M������� �$������ �������$����������'�����$"�

����$�'���������)�50R���7�����5������)$ ���$�������$�������$�'��� �������

R�&�����������9�7��44�� ����$��$����������)�������'�$��'��������

�����/�50R���7�����>���+R�&������������M507�����M,�

H�� �$� ��������:������$��$��������$�'�$��'������$"�50 �������

50 �����>���+������M����������� �����;M,�

9�$����8�������� ������R�&�����������'�������������������8����'�����$������ ���$�

'�����������������8��$�����$���$�����$�'������������������

R�&����������>������+,�����>����+�%&L2R2�S#L�22,�R�&����������>���+,�

Page 377: Game Programming With Python, Lua, And Ruby (2003)

� �!<�

��������� )�����

����� �����04�$(�)������$�.��4����#8�'��������$���� �����04�$(5��������)���������D�8�04�$(������4���)�����$��4�$��$��%���)��� �����$"�"��4�� �5�/��,��04�$(��7��$���$�������'�����3���4������H�����&��E��$�5����4��3������$��$���)� ������������� �04�$(8�(:8��$��(:��%���5�

%���)������'����$"8������7��$���$�������>�����$��5�����$�� �$����)�$�����H������&�$��E����,������4�"�8�������4�GG'''�5"�"�$��5$��GY�����5�

(:��������"����3����������������4���$����'����04�$(5����4��3������������$���)$ ���$�����������'���������'�������)��������))� ������ �����$�F���04�$(5�(:������$������04�$(��������$C��,��������&���)�������"$�$"�04�$(�4��"����5���"�������������'��������$�%������������'��/�������������� ����04�$(� ����$��5�

%����4����7��4����)�04�$(�������'�$"���"������� ����4�5����4�������$ ���$"�����04�$(8�(:8��$��(:�������������)����������$� ������5�����7������������������$����

����/���4���C�������8��;*���*�����*$��*��$���

�;*���*�����*$��*��$����J�����M����"�M���J�����M"���M�

:��$"�����04�$(������)$ ���$��$�����������������'������ �������$�'�)$ ���$8� ������

R������"��8������ �$����'���"������� ����4����

R������"���/�����>����N�

�$�������������'��������4�8�����(��))���������� ������8��$����$�'�(���F� ���)���4��

��!&W%2�������� ��������

W%>L����+W%EEL%�S �552�S !�,�W%> �"��+W%EE��!&W%2#,�

���$���� �$����8�'����W%>L����8�����/��3������������,������'��$����'�$"��

W%>L����+�>����>����>�,�

%$�����$����$���������������3���� ����)�����������4��$����)���������$"����$�����4� ���

W%>L����+�>����>����>�,�W%>X����?+����,�W%>X����?+������,�W%>X����?+����9�,�

����04�$(��))����������)������'����W%>5������$������ ��������04�$(��$���5�

Page 378: Game Programming With Python, Lua, And Ruby (2003)

� �! �

����'�����R������"���)$ ���$����&����&��������

R������"���/�����>����N���W%>L����+W%EEL%�S �552�S !�,���W%> �"��+W%EE��!&W%2#,�����W%>L����+�>����>����>�,�����W%>X����?+����,�����W%>X����?+������,�����W%>X����?+����9�,���W%>2�����W%>5�����

�$�����������������)$ ���$8�������� ��������'�$��'�KR�7�����L�)������4���5�����

'�$��'� �$�����������$"�(:�,��L�����7��������������)����(:������$������D����

W%��>!����R�7������/��W%��>L�����7�����+M���W%������"��M,�

����)�$������4��)���� �������$$�$"������������/���04�$(����4�������������(:�,��

6������5�����������������4����R������"��8��$�����$� ����R���%�������"�������������������

W%��>6������5���+R������"��,�W%��>R���%����

�������$�����/����$������ �����'������$��04�$(����4������ ������$�����/��X���4���X04�$(����� ����5��������$ �����7��4�������'�$"���'�������'��'������$���$����$������������$���$������4��8�4����'���� �����8��$�����������F� ����$�����������$���$����4� �5��

Page 379: Game Programming With Python, Lua, And Ruby (2003)

� �<��

���������,���

��(��������$��� ����$������������"�����������&8�)������$�.��4����#�'����������"������(�'��44���)��������$8��$�����$��$�.��4����!�'����(���(5����'�������$����������$��������(8����$"�����4��"�����3��������������������8��������������)�$"�����$�/��5�

��������(�'����/��8����)�����$��������$������������(��������8�'�� �� �$����)�$���$������$�������������������4�"�8����4�GG'''5������5��"5�

0$ ����(�����$�������8�/���$������$��$���)� ���$�����(M�������������3�������))���$���$���)� ������ ������)���5�1�����)������$���)� ��� �$����)�$���$�����/���%44�� ����$�%� ��3��������4�GG���5������$"5��"G5�

�����&������������������)���+�$��'������8����$�������(�4� &�"����� �$���$����$���$�)����7� �������$ ������$���������&,��.�M������� ������4� &�������5�7�8��$����� �$�)�$������$�����.���$�����.��4�������)�����5�����4� &�������5�7��4� &�"����������������$���������:����� �(� �$����$�8�)���+�$��8��$ ���������)����'�$"��

•� �����'(5(3(�����/���3�����$5�•� ������$�=(5(������ ������(�4� &�"�5�•� �������=(=(2(/(�%$���*�)���/����$�+�$��'��4���)����5�•� ��/�1��=(/(�%�4��"����)��� �$3����$"�/���� ��4����$����7� ������)����5�•� )��$�=(2/(�����3�����$��)�04�$(5�

����4� &�"����������'����.�"'�$��$�� �����'������)�'���(����4���8��$ ���$"�������)�����$"�����&���������$��F����� &8������$"���$��)�����)�������&8��$����$�4����$"���.�5�����4� &�"��������$ ������$��)������ ��4��������4���"�������0����������44��5�

���� �3�������������$������������������ ��$�����$��$���$���������$������$�@�4�$���5�H��'����$������������������������$������)�����'����������4��4���@�4�$���� ���� ���������$�������5����������$ �$3�$��$��)���*$"������4��&���8���������$������)������������&���&��9�"�����5�8���4�$��$"��$�����4���)�������5�

&����'=('(�+���)��%�������$��� �$$�����$��%�� ������ ��� � ����� �H�)������������ ����� (�

Page 380: Game Programming With Python, Lua, And Ruby (2003)

� �<��

+�����������4���)�������4��������� ���� ����� ���� �������$��8� �����$"�������)����$�� �$)�������$�����$����$������"��������$����������/����(�)�������$��)������$�����.�X����3��K����9�"�����5�L5�

&����'=(/(�������� ���$�0 �������� ���� � �����������0 ���$�������()��%�������$(�1���$$��� �$$� ���)��%��(�

/��+�$�����$���)�������"���$�����$������4� &�"�5�%�:����3���4������1���&���&����������$�����/����5;5#��$��� �$�������5�<�K��������2��"��$L8�/��+�$� ��������$��$3���$��$��)����$$�$"�/�����(�� ��4���'��������3�$"���� ��$"�������$�4������� ����$3���$��$��3��������5�(�$ ��$"������7� ���������$"��4�����/��+�$�:��K����9�"�����5�L��$������/$�9���� ����$�8�� ��������3�������.����/������ ���������"������/�����$8� �$�������������$ ���$�������/�����(��44�� ����$��

&����'=(2(�+�����������C-�

Page 381: Game Programming With Python, Lua, And Ruby (2003)

� �<��

������$��C���������,���!���$��������$������

���� ����$�/�����(���������$�� �������������������$���������5�5��

+��$��'=('(�������������,���!���$��������$������

���)���� �� !���$�����

�$����

�����) ���

#6%EEL6�� .������ /�4����$�������.��/01����3��

#6%EE2������ .������ *����� ����M���$�����/��G��(��������

#6%EE23����� .������ 2�$������3�$���

#6%EE23���-�� .������ 2�$������3�$���

#6%EEH������D�� .������ /�4����$�����F����� &�

#6%EET���� 1������ ��)�$���&��� �$���$����$��"��������&���������

#6%EER�?���� 1������ 2�������$��)$ ���$���$�� �$���$���

#6%EER�?��EE7�3���.������ 2�$�����+%>�)�����

#6%EER�2W�� .������ 2�$�����1�*���������

#6%EER������ 1������ .�$���$������� �$���$����$��)$ ���$��

#6%EE��?��5�������.������ ����$�����#6%EE#�� ����K��������L�

#6%EE#������� .������ ���4���������� ���$����"��

#6%EE#TT�� .������ 2�$�����@�4�$�����$4��

#6%EE#�� ����� .������ .�$���$����������)��� �����$"���(���)� ���K���"��L�

#6%EE��5�� .������ 2�$����������4��)�$���

#6%EE7R�� 1������ 2�$�����'�$��'��

/�����(��$ ����������������)� �������)����44����$"�'�$��'���$�"���$�8�1�*��������$"8�F����� &�8�.��/01�8��$����))���$��)�$��5�1���� ����$���������������������)����$������D�$"��$����(��$3���$��$��8� �����$"���(���)� ��8���$���$"��3�$��8�����8�����8��$��@�4�$���� ���� �����44���5��

-� �$@��,���

��������������������������$���������(5�%�)��"���������""����'�� ��4�����$��)���(�$������������$������D�������$ �����'��$��$������D�$"��

,��88-�-+J�C�- (��$������D�������������5�

,��88-�-+J9-�* (��$������D���������3����5�

,��88-�-+J��� !(��$������D������.��/015�

Page 382: Game Programming With Python, Lua, And Ruby (2003)

� �<��

,��88-�-+JH G,+-�F(��$������D����F����� &���3� �5�

������$���)� ���������'�����$������D��3��������&����&������)����'�$"��

#6%>����+#6%EE!!�SX!62,�

%�4���� ����"���,��3�����������������'����#6%>���S3����S����+,8�'�� ����&��������"��$�������'������$�����"����)������ ���$8������4���4�7���K�Q�� ���$������� ������4���L8��$���$��$� �������)��"���

#6%>���S3����S����+:=���=F������#6%S5%&W,�

���������)��"��)���#6%>���S3����S������$ ��������)����'�$"��

,��88,�,C�&��*(�.�������3�������)� ���$��������������5�

,��88"�,C�&��*(�.�������3�������)� ���$�3�����������5�

,��88&C��,��**�(�%����4�������������)���� ���$5�

,��88,��J� C.�*.C&(�*$�������������))���$"5�

���)�$������)���4���� ����3��������������44�����8����������������$�

#6%>����DX����R���+,� ����$����������������������$��75�

,��0�����

%)���������$"�4���3���������8�#6%EE#�� ���>����'���� �������$���4�����(���)� �5�

��������������������&��4���$��������)�����3�����)��"���

,��88,�,C�&��*(�.�������������)� ���$��������������5�

,��88"�,C�&��*(�.�������������)� ���$�3�����������5�

,��88,�����"�(�.������������� ����$�'�����������������'������4����44���5�

,��88,�� � �F*G(���(� ������������� ����$�'�����������������'���� ����&���������$"5�

#�� ���>���������$�����'����8����"��8��$��)�����5�����)������������������$���$ ���)�

#6%EE#�� �����$����3����������������4���4�7�����������4� �)������)� �5�

������������D�$���)�������������� �$���������$���(���)� ��5�������)���������� ����$��������$���������������$���������5�5��

+��$��'=(/(��������,���,��0����!� �����

Page 383: Game Programming With Python, Lua, And Ruby (2003)

� �<#�

!� ����� *B�#�$�� �+��� ���)����

������� � /���$����)� ����4���

$���� � /���$������4���4�7���

�����D���� � /���$����)� �� ����&���

����L������� ����S�������� ���'���� �� ���

����2�������� ����S��������� ���'���$�����4���

6���5�����L������� ����S �����S�������� ���'���� �� ���)������'�����4� �)���� �����

����5�����2�������� ����S �����S��������� ���'���$�����4���)������'�����4� �)���� �����

����%����� ����S������ ���'������$�����'��$�����"�3�$� �����$�����

���������� ����S������ ���'������ ��$"���

�������5������� �������S ������� 1�&����� �4���)������)��$���$�'���)� �M�����)���)����������$"�

�������5�����&�������������S �����S�������%���������5������'������4���3����4���4�7���

��������� ���S������ 9�����"�3�$��� ��$"���'�����4� �)���� �����

��"��� � /���$����)� ��)��"��

������� � /���$��4�7���)������

"��L��������� "��S����S������ /���$�� ��44�$"��� ��$"���)�������"�3�$���)� ��

"����������� "��S��������� /���$������4��������)������4� �)������)� ��

W����?���� "��S��?���� ���� ������)������4� �)����4�7����

W���W "��S�"$�� � /���$��/�� ��4�$�$��3������)��4� �)����4�7����$��$�������

"���W &�� "��S�"$��� (�&��"���W 8�����$ ������$���4���3����

��� � /���$����"���

������ � (��������"��K� ��������1�L��$��

����$���$���$ ���)�#6%EE#������

���� R��� ����S$���� (�����"�3�$������4�

���D�� � �����4�����)� ��)������� ����� ����$"�4�7����

��D�L��������R���� � .��������� �������$���4�

����W �� ���S�"$�� 1�4������/�� �����3�����������4�7���)�������)��4� �)������)� ���$��

Page 384: Game Programming With Python, Lua, And Ruby (2003)

� �<��

+��$��'=(/(��������,���,��0����!� �����

!� ����� *B�#�$�� �+��� ���)����

����$������4�7���3��������$��$��"���

����W &�� ���S�"$��� ��������R���W ����������$ ������$���4���3����

����%��DK�� ����S���DK�� /���$�������)���)� ����������� &���������� ����� ����4�7����

����� � ���'�"�3�$����"���$���� �

�����?���� ���S��?���� +������4�7�����������4� �)����4������$�

������#������#�� �����

������S�������S��� �����

/���������)� ���$���$ ��'����"�3�$��$"����$��� ���5����������������� �$����������������M���,�����$�

�4�� ������������� ���#�� ���5�

������#�� ����� ������S��� ����� %��������#�����#�� �������� ���������������5��

��3� R��� ��3�S$���� ��3���)�����$��1��)������

���&������ ���S������� :�������������4����$��4���4�7�����4������$��$"�

���L����T���� ���S�����SD���� ��������� ����&����)���������������)� ��

���L������� ���S�������� ����������������������'������))���$��)��"���

������������ ���S��������� �������4�����$��)�����4�������)�������"�3�$�<�������)� ��

����� ���#�� ����� ����� ���S��� ����� .������������������$��� ��������"���)�"�3�$���)� ��

�����D�� � :$�� &������)� ��

��� � /���$��'�����

*#�� ��

/�����(������'���3�$�� ������8��3����$���3���-8�)�����$���$"��3�$��5�*� ��������$������)��������M�����������������������$����$����������5���$����5#5�

+��$��'=(2(�*#�� �!� �����

!� ����� *B�#�$�� �+��� ���)����

���#������ 23���>���S������� /���$�� ���$������>���$���!L62�

Page 385: Game Programming With Python, Lua, And Ruby (2003)

� �<;�

+��$��'=(2(�*#�� �!� �����

!� ����� *B�#�$�� �+��� ���)����

23���>���$��S���������2��$����!L62�� E�����������$������$�K��������������)���L�

23���>����$���!L62��23���>����$��S������������������:$� ����&�����������$������$�

23���>���$���!L62K��23���>���$��S�������K��/���$��'�������:$� ����&�����������$������$�����$������

"���K�� � /���$������'��$�"��$�$"�)� ��

�� ��� � /���$���3�$���$)�������$��$��$�������

D��R���� D��S����� /���$������ ���$��&�������)������

D�������K�� D��S�����K�� /���$������'��$���&������4���������'$��$���&����3�$��

D��#���� D��S����� /���$����(�3������D������

����� ������� �����S$������� /���$���������������$��$��7�

����������K�� �����S�����K�� /���$���������$"������������$���'$��3�$��

�����0�� �����S?�� /���$������7� �����$�����)����������

�����0����� �����S?����� /���$������������3������������$��$�����7��7���

�������� �����S��� /���$�������� �����$�����)����������

����������� �����S������ /���$������������3������������$��$��������7���

����� � .���������$�'�#6%EE23������F� ��

������ � ������)��� ���$����4�$��$"��3�$���

������ � /���$��������4���)���"�3�$���������3�$��

������ � +�����)�������$�7���3���������3�$��

���#������ ���S������� /���$������&�$���)�&���3�23���

+��$��'=(3(�$%���&�!� �����

!� ����� *B�#�$�� �+��� ���)����

&���3��� � *3�$�������� ���'��$�����G&��������)� ��"��$�G�����

Page 386: Game Programming With Python, Lua, And Ruby (2003)

� �<!�

+��$��'=(3(�$%���&�!� �����

!� ����� *B�#�$�� �+��� ���)����

���#������ 23���->���S������� ��������23���>���#�����

���$���!L62�� ���$��S��������� ��������23���>���$���!L62��

���$���!L62K�� 23���->���$��S�������K����������23���>���$���!L62K�

����$���!L62�� ����$��S��������� ��������23���>����$���!L62�

H��&?���� � *3�$�������� ���'��$��7����)�F����� &������3���

H�� ����� � *3�$�������� ���'��$���F����� &���� &�������3���

H�� �����6����� � *3�$�������� ���'��$�F����� &�����$����4�������

H�� ��������� � *3�$�������� ���'��$�F����� &�����$�������������

H������� � *3�$�������� ���'��$�F����� &�������3���

T��6����� � *3�$�������� ���'��$���&������4�������

T������ � *3�$�������� ���'��$���&���������������

R���� �����6������ *3�$�������� ���'��$������������$����4�������

R���� ��������� � *3�$�������� ���'��$������������$����4�������

R����R������� � *3�$�������� ���'��$���������������3���

������ � ��������23���>�����

J����� � *3�$�������� ���'��$���J��������?��������A������

#��7R�� � *3�$�������� ���'��$�4��)������4�$��$��'�$��'���$�"���� ���

X��������8��� � *3�$�������� ���'��$�'�$��'����������D���

������ � ��������23���>�����

/�����(����������������$��&��� ��������$����������)���������$��&���������3�$��M���������������$����$���������5�5�

Page 387: Game Programming With Python, Lua, And Ruby (2003)

� �<<�

+��$��'=(4(�!���������F��������*#�� ��

!� ����� *B�#�$�� �+��� ���)����

T��>����$��T����������T��>����$��SD��S�����������������&�����4����

T��>���$��T���������� T��>���$��SD��S�������� �����&����������4���������

T��>"��T������� T��>"��SD��S������ /���$����������$"��)�&���$����

T��>���#������ T��>���S������� /���$������ ���$���)���������)����&����

T��>�����K�� � /���$������)�"�3�$�&������4�������

T��>������ � � �$��&���������

R����>������ � 2���������� �����

R����>���L������� R����>���S�������� :������� ��$"����������� �����

R����>������ � ���'��������� �����

R����>������� � /���$��������������$�������

R����>������ � ���������4������$��)���������� �����

�����

/��,����(�������R�?��������������������������3��4���� �)����8� ��$"��3����8��$��

����4���$���))� �����&��)���$"5�R�?�������� �����)�����$���$"�+%>�)����8�

#6%EER�?��EE7�3�8��$���� �����)��������$"���� 8�#6%EER�?��EER����>�7�3��

��$��������$�����+%>�)����8�'�����R����� �$���������8���18���8�=18�1��8��$��1���

)����)������5�R�?��,������������������$����$���������5;5��

+��$��'=(5(���'���!� �����

!� ����� *B�#�$�� �+��� ���)����

��������L�����������������S������������$��� ����� ��$"������$������)� ��$$������$�"������������7���

���!�R������ ���S��S������� 9�����$�����"�3�$���� ��$�������� �$���

�����R������ ���S���S������� 9�����������"�3�$���� ��$�������� �$���

�����*&�� � 2����4����$"��)���4���� ���� ��$$���

����R������ ����S������� 2������� �

������ � (��������� �)�����$������$�������F� ���)�R�?��EER�����

������ � �$������D��#6%S��?���

����K�� � /���$�'��������4� �)� � ��$$������4����$"�

Page 388: Game Programming With Python, Lua, And Ruby (2003)

� �< �

+��$��'=(5(���'���!� �����

!� ����� *B�#�$�� �+��� ���)����

���$���

����L�������� ����S��������� �������+%>��$����4� �)� � ��$$���

����R������ ����S������� �������� �

����R����K�� ����S�����K�� /���$�'�������������� ����4����$"�

������� � ������$���4���� ���� ��$$���

�����K�� � /���$�'���������4���� ���� ��$$������4�����

�����R������ �����S������� �������� �

�����R����K�� �����S�����K�� /���$�'�������������� ����4�����

�������� � /�������4���� ���� ��$$���

������R������ ������S������� /�������� �

������R������ ������S������� /�'�$����� �

���X������� ���S3������� ��������3�����

���X�����R������ ���S3�����S������� ����3�����

������ � /���$����������������$�������

+���

��(���������$����$��)��� &�����&��4���� &��)�����5�����"�����D�*"��S���D���������'����"�������$������)�������� �$����������3��4��������$ ����(�'����$������D��5����������

�������������������������'����'������"�3�$�$������)�������� �$�����)��������$�$"M��������������4�� ����� �������F�����$���3�$��5�

H�)������-�)� �

/��,����(� ������A�44���'�����$���E�������)����$ ���$"�����@�4�$���� ���� �������5��������������������$�������(��E��������8��$�� �$����������$ ���$"��������@�4�$���� ���� �����������K*:.@�L8�����%�.���4�����3�$"�:$� �����������K:�9<L8�����������)��@���@�4�$�����������K�@��L5���E���������$�)���)��������M���������������$����$���������5!5�

+��$��'=(6(�,,F�!� �����

!� ����� ���)����

L����?��� �4��� ������������4����$��������������)��$4��

6����������� �4��� �����)�����$�4����$"������� ���$������

�������"�� /���$���$ ���$"�

Page 389: Game Programming With Python, Lua, And Ruby (2003)

� � ��

+��$��'=(6(�,,F�!� �����

!� ����� ���)����

2�LH��� ������$ ���$"����*:.@��

T��$����� /�4����$�������&����$���$���(�EE��$4���������

���T���������$����/�4����$������������)� �$3�����$�)����%�4���������@�4�$����&�$��

#H!#�� ������$ ���$"�����@���

��5F�� ������$ ���$"����:�9<�

��,��)$�������,����������

%����)������������"�3�$��$������ ��4�������$,���$�"�C���$������������$��7��4����)���$"���(��$��/�����"�����5��$�����.��4��������� ���$��)������ ��4�$��$"�.����������4���/����$ ��)������'����)�3��/���)����5�������������)����'���

•� .0���5/��•� �(%H*/5/��•� /:�H�0:�.*5/��•� ��%�*5/��•� �H��*15/��

������)�3��)����������74���$����$�����$�7��)�'����� ���$�5�*� ��������4�������4�����$������$"�4���A� &���(�/����$3���$��$��'�������4��������$�4����������������$ �$"�����K����9�"�����5#L5�

&����'=(3(�������������������)$������� �������.������)�����(�

Page 390: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�����4��"���� �$�����$�)��������/��+�$��44�� ����$5�04�$�4����'�$5�7���$�����$�'�.�X/:�H��(X����)�����8� ����������/�����$8����� ��/$8��$�����$� ����������/:�H��0:�.*5/��)���5�

+���� �,+(�.�&$��

�������4������)�����)�3��/���)����8�.0���5/������������������$���4� �)� �"���� �$���$��������$������������)�$���K����9�"�����5�L5��$�������7��4��8�����)����������)��� �$���$��8��� ���)�'�� ����)�$�����'�����$�����4����$"���)� �5�.��$"�$"�������3������������$� ��$"���'���������4������ �$����3����$� ���$��

&����'=(4(�&$����$� ����)�0�������.������

Page 391: Game Programming With Python, Lua, And Ruby (2003)

� � ��

�%7&%%S0/=���7&%%S0/:���5%�S�/==��L2!%S�/:��

������3���������7���$��������4�7�����$"����������)�$��������"����)�����4����$"���)� ���$�4�7����K����9�"�����5;L5�

&����'=(5(��$����0�$��1����������������(�

Page 392: Game Programming With Python, Lua, And Ruby (2003)

� � ��

+���,G,+*!(�.�&$��

����)$ ���$������4��$������H��*15/��)�������������&�)�������8������������������������

����)$ ���$����������$��������� ��4����5������$�����))���$ �����'��$�����)������� ���8�

�����S$��8��$�����������$���3�����������������4�����/��,���'$�$�A���'������

�� ������S$��+ �������,���"����/#6%EE#�� ���>���� R�+ �������,���"����>���L����T���#6%EE#�LL%�T2���"����A���B���"����/"����>�������5����������

2����#6%EE#�� ���>���� R������������"������5�1��)���8����� ����&����������'��������

���L����T���������8��$��)�$����8��������5�������������������4����������)� �5�

%�����$ ������$������)���������'��)$ ���$��)���&��4�$"���� &��)�'������$���F� �����3����

�$������'������$���$���� ���$5�����?S����)$ ���$��$����������S����)$ ���$����4�

�������$���)�������F� ��������������3���4��������%7&%%��$���7&%%� �$���$��������$�.0���5/����

�� �?S���K+?��,���?(�(��1%7&%%S0�ZZ�?'��4�7&%%S0�������� �����S���K+?��,���������������� �%7&%%S0(#26S5!2%6S7!6��4?(����������������� ��7&%%S0'#26S5!2%6S7!6��1?��� �����

Page 393: Game Programming With Python, Lua, And Ruby (2003)

� � #�

����

���$������)�$������������� �����'����������������8���$����������S"�����������5��$���)���3�����$�"���8������'���������"����4�� �����������4����$��3�����������&��4������

� �����$��$������)���3��8�����$������ ����F����$���$���$ ��3��������������M�_�� ���

������#����������� ���������8������_�� �/.������������ ���������S"���K�����_�� ��4��������������

+���,+�+*(�.�&$��

���������������� ���������)�$����$���%�*5/���#����8�#����!�������8��8��$��

#����6��3��5�*� ������������&��4���� &��)�����"���������8��$���� ������������'����$�����

C��KF����$�����L������5�����#����� ����������'���������8���������8���$��

��3�S�����5�#����>��������8�����4�������������������4����$����������$������� ��4�5�

���)����� ��������� �$��� �����$���������������4����$���$���$ ��3���������������S����8�

�����S���3��8��$�������5�:��$"��� ��3�������8�#����>��������8�����$�����������4�

���������������3����� ���$�����$������S������

������#������� ���������8�+ ����S�����,������S��������8���/�#����!�������8��>���������������S��������8����_�����S�����/������S��������8��>�����S�����_�����S���3���/�#����6��3��>���+��� ,�_������/� ����S�������_�����S����>��������ZD���3��Z���� >��������S�3���11'2#��� ���� >�ND��>��-����O+)��",�� �_�����S����AE�ND��>��-����OBA_�����B������_�����S����AE�ND��>��-����OBA_�����B>����+_�����S���3���)��",���������2#���������

������3�S����������������������� ������$�'���������$������"$���������_�������

�� ���3�S�����+���S�����,�_�����/���S����������

Page 394: Game Programming With Python, Lua, And Ruby (2003)

� � ��

����#����!�������8��� �������)�$����������������8�C'�� �� �����������

�����S������$���$ ��3�������C�$�����S�3�����

������#����!�������8����� ���������8��_�����S����/NO���������S�������E�����S������� ����S�3���+�������3����^$���D,������������������ �����_�����S����A�3���B������_�����S����A�3���B/NO��������������_�����S����A�3���BA�����B/$���D���������

9�$����8���)�$������ �����#����6��3���'�����'���������8���������8���$����3�S�������

������#����6��3����� ���������8�+�����S�$C,�_�����S�$C/�����S�$C������� ���3�S�����+���S�����,�_�����S�$C>��3�S�����+���S�����,���������

+������G*�(�.�&$��

��'�����)$���))C����4���������������)�$���'������ �$��� �����������

K��������8�L5�H��$������������������4��������4�������$� ���$�K�8��8��$������L��$��

��3�����$������� ���$�K�����$����3�S��L5����)����8������(%H*/5/��)����$��������4�)�����H��*15/���$����%�*5/���

��J�����I������>�$I���J�����I�����>�$I�

��7�8�����"$�������� ������������$����)�$����)�'�4������ �$���$����

���������������!!�S6�/'9����60/-�����/.-P7/.-���W/-����W�&��S���/������S$���I��$�>$��I�

������ �$���$����$������D���������"����$��'������$��$�����)����������4����"���)�����

4������4�� �5�%)��������8� ����������������8��������5�������������$����$��� ���������

Page 395: Game Programming With Python, Lua, And Ruby (2003)

� � ;�

�H��*15/�� ���������������������������&���������3�$���)�����3�$"�����4�����,������4�� �����$������� ���$8��$ ���$"���3�$"���)���$����"����$��F�4�$"�����4�� ��4��

�� ���������8�+������,�����_������/�����������_?/.-�P_�/-�������_��/������_�����/H�EE#����>���+EC�����",����Z�Z��������>���S�3���+E���D��"�E���,����Z��D�����Z����������3�S��+D�����,��������� �D��>C�������������������_��/�!!�S6������������>��3�S������EC�����"����������������������

����4������4�� ��������������� &����� �$���$��������$�.0���5/��������������4�� �� �$$������3������4����$"�)������

�>���S�3���+EC�����"�E���,����Z��D�����Z���3�S��+D�����,�_��(/�_��)��*������������_���(/�W)��*������������� �_��4�5%�S��'��������_��/�5%�S��'����>��3�S������E���D��"���������

�$ ������$�����������>��������8����������������4����3�$����$������������ &�����4������4�� ���$� ������� ��������'�����$���������4�����G�� ����$�����4����$"���)� ���

_����"�S������/�H�EE#����>���+E������,����Z�Z��>���S�3���+E�������E���,�N�O��>���S�3���+E�������E���������S�����,����Z�Z�_������>���������S������_����"�S����/���>��3�S�����+E����"��,������>���S�3���+E����"���E���,����Z����Z�_����"�S����(/����>��3�S�����+E������,�� �_����"�S�����4�6&R&W2S�!R2������>���S�3���+E����"���E���������S�����,�N�O���������

%)����������>��������8�� �����'��A� &����������������)�$������'������$�����"����)�����4������4�� ���

�� ���P7P���P��� ���P�P���P�

Page 396: Game Programming With Python, Lua, And Ruby (2003)

� � !�

H��$���������������������4������4��3��������)�$��������4�K�$�W�&��S��L��$�������

� ���$5����'�$"����������4����� ��4�������'��������������������

�� �����+������,�������>���+W�&��S���_?�_�,�����

��������������������'��&��������������� �� &��'������%�*5/���$������������������

�����>�����$������"�S�����>�����$���$ ��3���������������������4������4�� ����������)$ ���$������)������%�*5/���

�� ����+D�����,�_�����>���+D�����,�_����"�S�����>���+��,�����

9�$����8���)�$������4�����,����3���$��'����$�����3�S���������5�R�3�S��� �� &��'�����������4�����,��&���4���������3������� ����"����4�� ���))��)�����4����)�$���4����$"���)� ���

�� ���3�S��+D�����,�_?'/60)��*����� �D��>�� ��_?(/60)��*����� �D��>��"���_?�/�%7&%%S0�� �_?1�%7&%%S0�_?�/��7&%%S0'7�� �_?�4��7&%%S0'7�����

+����C.G. C��*(�.�&$��

��,���$�/:�H�0:�.*5/���������(�����4�$����$���$������D����$������� ����"�������4��$�5�9����8���(��$��������������)�$���)�����������A������

��J�����I���I���J�����I������>�$I���J�����I�����>�$I���J�����I�����>�$I���J�����I������>�$I�

�$������D����(�'�������������������8���)�$������3���������8��$������������������)� �������'��������)����'�$"��'����$����

#6%>����+�#6%EE!!�SX!62�,��������/�#6%EE���X����R���+:=��=F���:�#6%EE#7#��5&L2,�

%�$�'���� �������������������������������� ��&��4������3���������������4�������

T���/�#�����>���+MT��M�E�� ��E��"���EC����E����,�

Page 397: Game Programming With Python, Lua, And Ruby (2003)

� � <�

��������������� �$��� ������� ������)����� ����F� ���������������$������D����

������/#�����>����������/������>���+������,��3���/#6%EE23���>����D��/T��>����

��'�������3������F� �����$������������������8�����"�������4���� ������5�9����8�������D������������������������

$� ���/���/#6%EE"�����D�'��

���$����������������������4����������������������������� �� &�)����3�$���)��������&���������

������������>��������S"���K���� ���3���>�����;/������������� ��3���>����//#6%EE23���EEV�!�������������$���D�������������� ��3���>����//#6%EE23���EET2�67�������������?���� ��3���>D��#��//#6%EET��EE2#L&�2���������������

*� ��4��������&���4��������A������)������T��EE�����K��

#6%EET��EE�����D��>�� ��/�#6%EET��EE�����K+#6%EET��EE%25�,�D��>��"���/�#6%EET��EE�����K+#6%EET��EE�!W��,�D��>C����/�#6%EET��EE�����K+#6%EET��EE��,�D��>�����/�#6%EET��EE�����K+#6%EET��EE67,�

������(��� &������ �� &���)����$��������4�����������3���)��'�����

$� ���/�������/#6%EE"�����D����/���'$� ����

%$��� ���$������)�)��������� ����$"�������>�����

������>���+D�����,�

����� ���$����)�����8��$������4�����������'$�'������ ����������$��)��������4��

������> �������+����:=��=F���,�������>����+������,�

Page 398: Game Programming With Python, Lua, And Ruby (2003)

� � �

%�������������)�������������&������������(�� ���$����)��44����$��������$��"����"����� ���� �����

$C���#����>"��$�"�S��������������> ����

Page 399: Game Programming With Python, Lua, And Ruby (2003)

� #���

,�������

����,����'��4��$����� ����$�/���"�������������5�%�)�'���4����$��4��$��������&��)��������� ��4�����������)����'���

•� /�������������$�� ����$��� �����A�44���'����4�� ���$�����������&��"������$��:��8��$�������� ����$����)�$��90=/����$��/���04�$(5�

•� �����$8�(�8��$��/����� ����3��������)�����$"���(��$��04�$(5�•� ��(��$��04�$(��$�/������&���������������������(��$��04�$(��$�������

��$"�"��5�•� ������������$������)���"$�)� �$����))���$ ��������'�90=������4����$�����$�

/������$��$���������$"�"��5�

Page 400: Game Programming With Python, Lua, And Ruby (2003)

� #���

7��� ����������������

'8� 6��+����4���)����������/����(��4�������$-�

�8� %��(�$78�+�$��8�9������8��$����0�5�

/8� 6��2�'������������������$�/����(-�

�8� %��/����(� �$$�����$������(��������5�2�'�3��8�/��,���������� �$���������$�����5�

Page 401: Game Programming With Python, Lua, And Ruby (2003)

� #���

*1�������

'8� (���������� ����$�/�����(���)� ���������5�

/8� 9=/����������� ����$����������OOOOO5�

28� :��������(%H*/5/�� ������������4������ �������$�0���%.(*5/��� ��4������� �$���������� �����������/����$ �� ���5�

Page 402: Game Programming With Python, Lua, And Ruby (2003)

� #���

������������,���&��$�)������������$�

����"��� �$$������4��������'������)�� ���$8�$�����$�4��)� ����'������������5�

CC.��$����4��3����

/������4�������������������$���$ �����)�������$"�"���'����$�*$"������4��&�$"�"������3���4��$�� ��4�$���5�������)�$��� ��������)��$��$������ ��$��)� ��$�������� �� ���$�������$��$�����"�����$���$������$��$���$�������5����������$,�����$������/��� �$,�����)�$����������'��&��$�����"����)����8����"�C��,�����$���4�����)���$������)����"��� ����4��F� ����$3��3�$"�"����5������ ��4������"���"������)�'�/���4��F� ������� ������'����"��������"�������������� �$���"���5�

Page 403: Game Programming With Python, Lua, And Ruby (2003)

� #�#�

��������������*�����

/�������3������������������)�����)�'�"����4��"�����$"��$"�$��5�.��$(�������$��$"�$���,3����$���$�����)����������������$������$���$���$��4�$��$��4��F� ��8�'�����1:*�������$�'�/��������&$�'$�4������������������ &��$���)�����9c���1:��+����5�

�$�������

.��$(���K'''5 ��$���5��"L�����$���)����������4�4��������������)����������"��������"$���������5�.��$(������'�����$��$��������$�.??������"��4�� ���$��"�����������5������&�����������������3���4�)$ ���$��������&����$����7�$"8����� ����'8�$��'��&�$"8��$��'��&�$"�'�������"����$��4��3������$�����������8������4���)�����������������3���4������)$ ���$�����5�.��$(��������4��3�������'���3����$���)� ������������4�4��������������� ��������� �9�8����� �=8�04�$(8��$��=��5�

.��$/�������������)���$��$"��)����/�������������$���.��$(��,���������5�.��$(����$��

.��$/��������� �$����$���������:�(��������$��������� �(� �$��5�.��$/���'�����3���4������/������0���$8��$�8�����)������'����$"8�>�����$��5;5��C'�� ����� ��4�������'����.��$(����5;5�C����3������������������ �)��"��4��F� ��4�"��������4�GG��� �)��"�5$��G4��F� ��G ��$���G5�.��$/��,�������4�"�C'�� �����'�������������.��$/�����3���4��$��8��))����������)�.��$/������������$�����'�����4���.��$/������C���������4�GG ��$���5��� �)��"�5$��5�

.��$/����5;5�����������$ ������$���������&,��.���$�����.��4�������)�����5�/������0���$����������������4���)����4����������$�/���2���(�$7�!5����$"�.��$(����5;5���$��/����5;5!�����5;5�5�.��$/��� �$�����$��������)����������� �����$4� &�$"���������)����8��$$�$"�����/��� �$)�"�����$�� ��4��K*=�.0�95/�L8�'�� �� �������������&��

)���8��$�����$��$$�$"���D���$�����$���D���������5��

+�����.��$/��� ���$�����$���'��&���$�/���2��8�.��$(�������3������4���)�����$��4�$��$���$���)� �5��)���"�������'�����$�'����.��$(��8�������������4����������� ��4��������"����$����F���������$��4���)����'������ ��$"�$"������44�� ����$���� �� ���5�

���.��$(������$���F�����'��44����������8�4��3���$"��� ����$��$���)� �������'���3���

����������� ��������� �9��K6������5����� � ��L8����� �=8�04�$(8�=��8��$������$5�+�����4���)�����$��4�$��$ �����.��$(��,��4�������"���8��������������������������3� ����$����"������E5��$�������'����8��������)��))�����������$�4���$�������"$�$"�����%����$�����������$���������.��$(��������������������������A����4�'��)�5�

.��$/��� �$�������"����$�����/���4��"�����)�����$���������$�'��������)����'�$"��

��J�����IL�����$�I���������L�����$��

�����$"�4�����.��$/����$3���$��$������ ��4�������'������)�'���������������$��

6������>���X����R���8�'�� ����������� ���$���D���$����������$5�.���$4������$�����

�������������������

Page 404: Game Programming With Python, Lua, And Ruby (2003)

� #���

�!�������8��#����L���>����+,�#����6������>����+,���#���6�������:=�?=F�?�:$���6������>���X����R���+�:=���=F����:�� �����,�����&������ ��D�� ��������"�������������6�'��������8��#����6������>������+,�#����L���>������+,�

:������)�.��$(���'������ �"$�D������4 ���$"� ���5�������'�����3�����3����$���04�$(��$����(��$��������� ��4�����'���������)�$��.��$(��,����$��7�)�������M�)����$���$ �8�����,����'�������'����� ��$"����

6������> �������+,������������������ ������������������������"�������6������> ���6������+,�

��� �)��"��������������������)�'�"�����'�����$��$�.��$(��8��$ ���$"�������������� ��$�� ������*4�4��$��'�����$�������44���,%A�M���,���������4�GG�4�4��$�5��� �)��"�5$��5�

!C*,�

����1:*��K1����:����*$3���$��$�����3��L������"�����$3���$��$�����3���'�����$��$�/��5�����4�4�����)�1:*��������)� �������������$"��$��$������4������"����������������$�5����4��3�����"����'�������$�����)�����)���$��� �����4��"���������F� ���$3���$��$��8��� ��$�����3� ����$�������$��)��� �����$"��$�"�����������8��$����$��'��&� ���$������ �����������$3���$��$��5�

1:*�����F�������)��������)��)�����4��F� �C����4��"�����$"��)��������3���4���)���5�1:*����������������$�����110/��K1����3����1����4������0$��$��/���������$"����L� ������9c���1:�8�'�� ��������� �����3�8�3����$��$�4����8�������������'�����������3���4��$��������������$������$"��$� �$F$ ���$�'���������$"�$�5�

1:*�������)�����4�$���� ����)�'���������'�������������������4��� ��$����������5�������� �� �����$���� ��$�����$� �$����)�$��������4�GG���5)�������5��"G5�����1:*���$"�$���44�������$������)���)��1:��)������8��$ ���$"��

•� 1�����������$"�•� �G0������� ���$�•� ���'��&��� &�����$��4���� ����•� 0�F� ��4�������$ ��•� (�""�$"�•� ��$��� G��������3�$��$3���$��$��•� :��������$�� ����$�

Page 405: Game Programming With Python, Lua, And Ruby (2003)

� #�;�

������������)����

�� ����/����������$�'�&����$�������� &8���$������)�����"��4�� ���/���4��F� �������������3����� ��$���� �$��� ���$5�����4��F� �����'����4����$���$�����$�7������ ���$����3�����$����$��)�����'����8���3��4��3�$���������)�$�����$���$������)��44�� ����$�8��$�� �$����)�$��4� &�"���'����"�����7��4�����$���� ��$�����$5��$� �$��������������$��$��(�����������8�/���"��4�� �������������$��������� ��$��)� ����+����������$�$����5�

&<�����

���))�������A� &����&�������������&����$��04�$(��$�.��4������5��$��������$����'��&�$"�'����04�$(8�9=/��� �$������'��&�'����� �$�����C������������'����9=� �$�����8�'�� �����90=,��'��44������$������� �$�������������5�

1�����$)�������$��$�9=/��� �$����)�$���������+������8�������4�GG'''5)7���5��"G�

����A���$� �

/��G�����������/����$���)� ���������������"��4�� ���������5���������8������)8�����3� ���$��4�$��$��"��4�� ��4� &�"���4� �)� ���������"$���)���4�����$"�"��4����)�4��� ����$�A�����5����������$���4��� ������$���)�'���8�����������3��������)�����)� ����)���$�$� ����� �����$���3���5����������������&���$�����3�������������$"�"��8��$ ���$"�%��8�.8�90/�/%�8��$�������$5�/��G��(�����������$������ �/��M������� �$���"�����$��:/(�������

•� ����A���$� (����4�GG'''5��5����5� 5F4GY����G���G4"4���G�$��75����5�•� �����������(����4�GG'''5��5����5� 5F4GY����G���G�$��7��5����T4"4���5�•� ���$� (����4�GG'''5�����5 ���� �5��GY�F4G4"4���G5�

��������

/���.(������/����$���)� �8�'�����$�����5�2���$� ��8�E5�E���8��$��E5�������������&���$��������.(�� ��$��)� �"��4�� ���������5������$���)� ���44����������)��.(C�3����)$ ���$��$��������$�C�$�8������"��� ���)������� ��$�����$�����$�@�4�$���8��������� ����'���������*$"�������$"�"���� ��$����$���44���5�/����.(����4�����)������"���4��F� �8�������$$��/������F� �8�����4�4�����)�'�� ����������3���4���������)���)�'���������)� ���������3������ ��$��)� ���������$�5�

�����.(�"��4�� ����������'������"�$�����'�����$��$�90/�/%���$��������4�������$���.8��$��/����.(����� ������������ �$��3�����$��)�����4��� ������������$$�5�����)������������8�%�3�$ ���.(8�'��������74�����$����4������4��)���/���.(��$�����$�'���������5�

/���.(8�������$$��/������F� �8��$������/���.(�4��F� ��4�"�� �$����)�$���$��$���������)����'�$"���$&���

•� �������(����4�GG���5")����$$�5��"G4��� ��G����� �G5�•� ���������������>�� (����4�GG���5")����$$�5��"G5�

Page 406: Game Programming With Python, Lua, And Ruby (2003)

� #�!�

•� ���������������>�� ����(����4�GG���5������$"5��"G����5�����-$���Q���� �5�

���������

��������������������������������������������)�����$��� ����� �����$"�"��4�� ����"��8�4���� ����������$��@�*����"��8��$��(��"��/��������4� &�"���7��$���$������������������'��/������'��4����$���5�(��"�����'�����$��$�.8��$����� �$��������)���'���5���������4�$��$���$���3��������������������8��$ ���$"���� ;8������:�.�(������8�9�����4���8���������4�� ��(������8��$�������$��4�$��$��@�*���4,��@�*��$������������5��������� �$����)�$���������)����'�$"���$&���

•� ��������(����4�GG4� &�"��5�����$5��"G$������G"��4�� �G���"�����5����5�•� ���������(����4�GG'''5������5 ��G"�G)�A5����5�

Page 407: Game Programming With Python, Lua, And Ruby (2003)

� #�<�

���������������

/����������$�' ������$�����%���� �$�"�����$�����8����"������ �$��74� ����$��"�������$"����� ���5�/������4��)� ��)����$���$���������"������ �����9c���1:�8�'�� �������"���"���������'5�

+���&L��!C�����>�� �

������$���$�����$���$��"������'����1:*�8�����9c���1:��4��F� ������������������������ �8�'������)� ���$�������8��������8��$�����"�$����$C$��&�������������� ����$�3����$��)�$�����'����5��

9c���1:��'������"�$�����'�����$��$�������$��'���4�������3������/��������&����3�$��"���)���)�'�/���)���������&��������$������ ������8����� ���$ �4������$8��$��4���00�5�

����9c���1:�����F� ��������������$"�����8��$�� �$����)�$��������4�GG'''5)�������5��"G5�

����1:*���$"�$�� �$����)�$���$��$��������4�GG���5)�������5��"G5�

Page 408: Game Programming With Python, Lua, And Ruby (2003)

� #� �

.�����������

/�������������$�$"�������$���)�'������������$����������"����"��4�� ���$��"�����$"�$��5�%�)�'��)�������������������$�����)����'�$"��� ���$�5�

+���,���%�,�����+��$% �0��������

�����$� &���$������&�������� ���� ���$��)���$����$��3�� ��4�� ����$"�����$����$���$ �����������)����4�� ���� �"$����$8�)����$����� &�$"��$����$������8��$��������)$���$���$���4�� �������������5���������&��8�'�����$�������4��$�(�"��$�8������������7��$��� ��4��$"���$"�"����$���$������ ��������'����$�����M�/����������4����"��4����� ����5�

�������"�$�����4����$�����$��)��$� &�'����$�4��������Ed����Fe��$�����$��'����7��$�������� �G�&5��$� &�)���/�����3���"��������7����$"��&�"��4�� ���$��4��3��������� ���44����)���'�3�)������$���4� ���"����5�

�$� &�)���/�����A���������������$� &�4� &�"���$��� �G�&�����$�������5�/�1������� ����$��������$� &��$��� �G�E��$��$���$�����������3��������)���(�$7�����8��$����������&����$���$����������7��$��+�$��'���$3���$��$��5�

�$� &�)���/������������$������3���4��$�����'���4����$������������$���$����$���/���.�$)���$ �5�

��������&��� �$����)�$���$���� �)��"��������4�GG��� �)��"�5$��G4��F� ��G���$� &G5�

�����)�

��'��4�����������)��� �$3����$"�/���� ��4����$��4��"������$������$����$���7� ������5��������������$�%�4��� ���$�������'��&��)���+�$��'���������5�����4� &�"����������$�.�"'�$��$������$�.�.��4����5�

��'��4����'�����$����/������9������$�� �$����)�$��������������,��+������8�������4�GG'''5 �5 �������5��GY)����G���G�44�� ����$�G��'��45�

!����@��

1�����D������������)����4����$"�4�4��"�����7� ���$5��������������� � ��$"�)$ ���$�8��$ �����$"�������D���)������$$�$"�4��"�������������4����$"�4��7� ���$�����5�1����D������������������$ ������)�/������9����M������������$�.�"'�$��$��������$�����'��&�'����/����5;5�5��

1�����D������3���������$��$��������4�GG'''5 �5 �������5��GY)����G���G�7��$���$�G������D�5�

Page 409: Game Programming With Python, Lua, And Ruby (2003)

� #���

,�������

����,����'��4��$�/��5�����4������$F�������������5�%�)�'���4����$��4��$��������&��)��������� ��4�����

•� *3�$����"��/����������44���������)��A�$�����$����������������)��$��$������ ��$��)� �'��������$��$������$������$��$���$��"�����$�������8������ �$����������)�$���)�������&�������$�"�5�

•� /�������A�����������)��44����)�����3���4�$"�� ��$��)� �"��4����$�� �����5��$��"�����$�'����������)������������������������'�������4�����3���4��$���)�/���:�����&���/�����"���������)�����$������)������� ��)� �������5�

Page 410: Game Programming With Python, Lua, And Ruby (2003)

� #���

7��� ����������������

'8� 6��+����� �$���)�$�������/���4��F� ��-�

�8� %������/��� ���$����4��������+���4�"��'����� ��3��/���4��F� ����������/���%44�� ����$�%� ��3��������4�GG���5������$"5��"G5�

/8� 6��2�3�����������$���$��"�����'�����$�'����.��$���-�

�8� %��.��$�����������$��$3��3����$���D�$���)�"����8��$��������)������������������$�����.��$����+��������������4�GG'''5 ��$���5��"G"����5����G5�

Page 411: Game Programming With Python, Lua, And Ruby (2003)

� #���

*1�������

'8� (�����������3������������� ���)���4��"�����$"�"������$�/��5�

/8� 9�$����������������$���I�����$� &�����&����������������'����OOOOO5I�

Page 412: Game Programming With Python, Lua, And Ruby (2003)

� #���

����� #���������$�!$�

�������&�'��4�4���� �������&�$"�'������,3������$������)����$��������������5��������$���4� ��������$"��7��$���$�������� �$�A���$���3���4��$���$��'��44�$"���"����3�����$"�"����$���.5��

Page 413: Game Programming With Python, Lua, And Ruby (2003)

� #�#�

���������"��2 ���#$����%�&��$�����������3� ���������

����"�������45�

CC+����������&��4����8�.������$��

2�"����3�����$"�"������� �4������)�'��&�$"�'����������4��"�����$"������5���� ������$������ ��4�������� ����$�'������������$"�"��� �$�������"����$����'��&����4�����)�������5��,��� �3��8�'�����7��4���8��7��$���$��$��'��44�$"8����'��������$��"����$"�������$"�"���'����.5�

Page 414: Game Programming With Python, Lua, And Ruby (2003)

� #���

"����#�$����������� �����#�$�)��� ����$��

������������$������)���3�$��"���)�����$"�����"����3�����$"�"���$�����3���4��$��4��F� �5���������3�$��"����$ ����

•� %��������"����"�� ���� ���$5�•� 2�"����3���)���������&��������$�4�����$���� ��$"��$��������$���4��5�•� ���4������$�� �� �������5�•� .���$"�������������� �$���$"5�•� (�'��� ��������$���$"��$��$���$������������$"�"�5�•� 2�"����3�����$"�"����������������������8�������8��$���7��$�����5�•� %������8���3�������"$���8��$���3�$���4�������'����������� ��4����� ��$ ��

�74����$ �� �$��������"���4��$��$������$����"����3�����$"�"��5�

�����������������$������)������$�����$����������"����3�����$"�"��)�������3���4��$��4��F� �5��������$ ����

•� ������������'��5�•� ����������� ���� �$���������������� &5�•� ���������""�������$,�������3�$ ��5�•� (�"��� �$ ��$�� ����������'��$���$"��4�$���� �� �����$�)���4��)���

��3���4��$�5�

����&��8����$8�������&$�'�'��$������������������$��'��$�$������������������5�%����"�������$8�(�8��$��/��� �$�����������'����� ��4�����"����8���������������$,�5��$�����4� ������4���������3�����4� �)� �)$ ���$8�'���������������$"���� �$������3���"��5�

9����$���$ �8��$��������$�"���8��������$����4�$"��$"�$�� �����������&��������$"���&������)����'�$"��

������������������� �������������!����>W��!����+,�����������������!�����!����>�������!����+,����������D������'���������"��������������W�������>���D+,�������������"��������W�������>������+,�

���������$����$"������������� ���)����� �����������������$8���'�3��5������$� �$����

����$"�����������'�����$��$���������$"�"��5�����W�������>���D��$����������������� �������%����.�����3�$���������5������$� ��������$$�$"�����"�������4��$�� ����$"�������.��$���'��$�$������)���.�:��$��$��3���4������$�5�

�$���4��F� ���������7�����$"�"��8���,�����&���������'����$"�"��8�������'$��$�9�"�����5�5�0$��'���������"����3��8�����)���"�$��� ����&�8��$������$�������3�5�������'���3�����$"�"���������)����4� �)� ��������3�$"����&��K������������5�L5�

&����'/('(�+�)��$���$����0�)�� ������$�������

Page 415: Game Programming With Python, Lua, And Ruby (2003)

� #�;�

+��$��'/('(���� ��������������

+�)��$�"����#�$��������+��%��� +�)��$�������#�$��������+��%��

.������'���3�����$"�"��� .�:��$��$��3�����&��

���� ������)����� ��4�� �G��$����$"��������

%��� .�������$����� ���$�

:�����$���)� ��� ���&��'������$��A� &���������$��

�����4��������""������$�)��������3���4��$�������$"���� ��4��$"���$"�"��������3������5�03������������8� ��4�$������3����� �3����������������$�����"����������������"����4���������C���&����3���$���4���8� ���� ��������$"��8��$��$�������4��$���)����7��4��C���4���'$��$��7� ������ ���5��)��������������������������8�4���������$"��� ������$��7����������$"����4�� ������ �����3����������� ��$"����������������� ��4��78���))� ������������$��$������$�� ���8��$�����$������������������$"������ ��4������$��$����������$"��)������$�����"���5�/������$"���"����'���������"�� ���������)����� ��� �� �$���&������8�����3�$���'��������8��$������� ���)��� ��4���$"�� ���������&���$���� �$"�$�'��"����������5�

�)�"����4����������K��&����3���$���4���8� ���� ��������$"��8��$��$�������4��$��L� �$��$��������� �$��������'������� ��4��$"���$"�"�8������ �$���� ��$"�����������$�����)��5�������������� ���� ��$"���������� ���$������������$������������$ ���)�����"������&�����$���'��������3�$"����"���� &��������3���4��$������5�

%���8�"����4������������ �$���������������� �$���$"����4��"�����$�.����.??5��)���"����3���� ��4��$"�����$$�$"�����%�8�����4���������������8��������A����)��'��)�����"���8����$�����.� �����'�������)�����4����)� ���$������$"�$�� ���5�����"$���� �$��������)������'�������������$"���)�������"������3��� �����$���������4��������������������$��������'������3��������3�����4��$��������$"�$�����"�����5�

Page 416: Game Programming With Python, Lua, And Ruby (2003)

� #�!�

*3�$�������8��)�������4������$����'��$������$"�$���$������"���� ���������3�����$�"�8������������'���3����$"�$�� �$�� �������������)�������4���"������$������4�����������5�����.G.??��$"�$������������� �'�����������"����3���� ��4�����)�$��$�'�4���������8�$�'�"������F� ��8��$��$�'�"������$��������$��)�������$�'�4������ ���� ����5���$ ����$�� ��4�$���� ����������������""����4������������)� ���������� ����$�"���$�8���� �$�����'�����$����3�����4�����������������4������4��5�

Page 417: Game Programming With Python, Lua, And Ruby (2003)

� #�<�

*1 ������� �������������������

*7��$��$"�����$���)������4���4�'���������$8�(�8��$��/�����3������))��5�*7��$��$"�������� �������������������� ����$�� ����)�����'������������))���$����$"�"����$����$���$$�$"��7� ���������� ��4�5�%����"���������������������)� ��4��7���������4��F� �8����"�3�������3���4������������������4� &��$�� ������)���������7����$"�������75�

%����)���������$"�"���������������$�����$"��7��$�����M��7��$�������������$���)�����)�����������������������������4����)� 5�������$"�"���� ��$�����$������ �����'������ ���$ �������$�)������4����$���74��$����$��)���'����4���$���'������������$"�"��8����������� ���$����������)�������)��3��3��'��)�����4�� ���5�

(�$"�"��������7��$����)�����$����))���$�������$�5�%���3���4�������'�$���������$��7����$"�.������������4����'��&�)�����$�����4��F� ���$�����$�'���3���4��$���))���5�0)��$��7��$��������$"�"��������������4������4��8��$�����$�4��)���$"����������������������'����4������)����� �����7� ������'��8��$��'�����4�� ���������������'�����$5���������������3���4���'����$�����������������$"������F�����$,��4���������$��������$���$"�"�8��$��������$�����������3�$��5��

*7��$��$"�������$�������'��$��$��������$"�"�� �$��������F���������C����������$�$"�������))� ��$������������������5�1���� ����$��8����'����)�$����������$"�"���4���$�����'����.��$��.??8�'���������.�������$$�$"� ���������$������������4����D���)����4�����$��������5�

����$����� ��*1 �����

%���,3������������$���$��8�������$"�"����3���4��$��������$��7�����������)� ��4��7���5������ ����4��������'�����7��$��$"��������)����'���

•� H���������"��$��'����$"�"���������$�����5�•� H��������3���4��$�����$���$�"��� ��������������������$"�"�����"������K�����

��"��������"$�)� �$�������"�����$����)� ���L5�•� ��))���$����$"�"���������3����))���$���7� ���$�������5�•� 0�F� ������������'��$���$"�"���������� ��4���������))���$�5�•� .��$"�������$��������)����� �����))� ����������������8� �����$"���4�$��$ ���5�•� 9$ ���$�����'��$���$"�"������������4����$������))���$���5�

*7��$����4��"����� �$�����������))� ���������"5�9����$���$ �8�/������������:����""��8�'�� �� �$����&���� ������4���������������$,����3������&4��$������� �������3�������������$��$����� �����45������������������))���$��)����������4����)��������3��������)���.��$��.??8�'���������&4��$����$�� ������4�� �$����'�� �����$����$�"������$"����"��7� ���$5���$ ������������ �$���))������'��$��'����$"�"��8�����3���4���������3������$������"����������$��$�����""������)�$����4������5�%���8��� ������"����3�����$"�"�����""�������������������4������3�8��������������� �� &�$"����$"� ��4��������8�'�� �� ������������������� ������)� ��$ ���5�

���������������"��� ����4� &�"�����������3��������)�������4�������5�����������������4�����4��"������������$�"������ ������$��)��7��$���� ���M����4���+��44����$���)� ���$�������K�+�8� �3������������$����� ��4���L�����$���7��4����)�� ����4� &�"�5�

Page 418: Game Programming With Python, Lua, And Ruby (2003)

� #� �

���"������$"���������$��$����$"�"�������4��F� ��"�3������������4���$�8����������8��������������$��7������3����)� ��4��7���5�+��$������������$"�"�8����'����$��������4��� ��4�������$������4������""���8��$�����'������3�������3���4��$�����$���$�����"��� �������'��$������'����$"�"��5�+������������������$"�"���������"����$�"���$��A�����$8��$�������$������������$�'������������$�����$������)��� ��4���� ����4��F� �5�

%�)�$��������'������3�$"���"����3��� �����$������44���4��� �������������� ������3������ ������������������� �����$������.����.??M������ �$���&����������3�$������������ &�$"5����������$,�����$������.����.??� �$$�������� &��8�F���������)�����3��������$������$��)$ ���$�$������������44����$�� ��4���'��������"���� �����$�����"����3���)�����8�����"���� �$������������������&��$�������� �$��� �5�

*1 ������� ����

������������)�'�������$�'�����)��$��"����$"������$�'����.8�.??8��$����������$"�"��5�+����$"��$��7��$���$��$3��3��� �����$"���'��44���)���.�����������$���4����8������8��$�� �$����$��7� ��5������$������4��3������� ��$�����)����������$"8�'�� �����'�����.�K����$��A�3���$�L����"�3�$����� ��� ����������������$��$���4�����5������������������$������)�������4������$��"�����$�������$�5�

�� ������ ����*1 ������

H������'�������'��44����$����������� �������� �$����$"�"��3����������$��7��$���$5�����'��44���� ������"������'��$������'����$"�"��8� �$3����$"�)$ ���$���"��$���)���������$��$��������� �$����$"�"���$�����$�����$�$"����������������$��$���'�������������$� �$�$������$�5�9����7��4��8����������3�������4���.�)$ ���$� ������

���������

���� ��������+����?,���������N�*)�����������������������"���� ��)*���������O�

%������$�'��44���)��� �����������&���������$"���&������)����'�$"��

���������1������>�4���$C����)����S �������+��$C����)��� ����$C����)��"�,�N����������������������?��������P������������������� �+;��&�"S����������+��"���M�E �������M�^?,,����������������������������������%%P�������������������������/� �������+?,P���������������������������S ����X����+M�M�������,P���������O�

����'��44��������������$ ���$"����������$5��������8�'�� ���$ ���������$� ������� ����$�������������'��44��8��$���������)�'����$������������)�����K��&�������5�8�����$"5�8����$�5�8��$��������5�L5�

�0�*�

Page 419: Game Programming With Python, Lua, And Ruby (2003)

� #���

����

�����$� ����$�������������$ �����'���������$5�����������'������"�$�'����������4�8�������������������������$"������)��������������)�����.� ���5�

������$C����'��44�������S �������������'����"��$��8���� ��$����"��K����9�"���

��5�L5�������� ���"��$���������'��$�����.�)$ ���$���4����$�����������$�������5�

������"���"��$���� �������4��$��������������$��4�����F� �� �$���$�$"�������"��$��5�*� ��������)������4�������������$���F� ���$�� �����4�$�������$���"��$���$����� ���,����"��$������5�

&����'/(/(�+���$$�� �� ���� �����������

����������I�I��$������E ���������$�����������)����$�5��)�����)$ ���$��$��������A���������))���$����4�8����'����$��������������))���$������������$�I�I��

Page 420: Game Programming With Python, Lua, And Ruby (2003)

� #���

•� (�9����$��$��"��5�•� -(�9�������$"��$��"��5�•� �(�9����� ���� ��������$"5�•� �(�9�������$"��� ���� ���5�•� 0(�9�����)�����$"�4��$��$�����•� �(�9���������•� �(�9����$���F� ��•� +�)$�(������$��4���� �$����������4�����F� ��5�

��"�����8���&�"S����������+,��$���� ����X����+,�����'���� �$3�������������'��$�

.��$�������$�K����9�"�����5�L5�%�"��$�������������3���'������&�"S����������8��$��

�����������4�������� &�'������S ����X����5���S ����X����+,�����$���$��3�������������$���F� ��5�

&����'/(2(��� �����#�� ���� ������������� ����

��&�"S����������+,�����������$�%���)$ ���$������ �� &��������"��$����4����$�� �$3�����������$���.�3������������������ �$�������5��������$�������)�������"��$�����3��������"�����4���$������ ��4�$�$�����3�����$���������$�����3���������'�����

��������������4�����5��)���.�)$ ���$�����$��$����)����"��$��K�5�5�3���L8����$�����

�����$�)$ ���$���������$����5��

�$����� �����$�44����$�� �������$�������������5��������� �������������F����$� �����$�������������� �����$�������"��$������5��)��$�������������� ���8����$�����'��44�������$��

�%%5��

0$ ����'��44����������$�'�����$8������$�$��������&$�'��������5������$"������$����������'��44������� ��4�������'�����$��$������D����$�)$ ���$5������$������D����$�)$ ���$���"�������$�'���������'�������������$��$���4�������$�����&����&��������

#��������R�������?�����R������AB�/�N���������NM �������M������S ����������O����������N�%%���%%O�OP��3������������8�S �������+,N�����������$C����)������������/���S!���R�����+M�?�����M��M�?�����R������M,P�O�

Page 421: Game Programming With Python, Lua, And Ruby (2003)

� #���

0$����)������'��44����$���$��$������D����$�)$ ���$��7���� �$����� ���� ��4���5�%)���� ��4������$8�����)$ ���$����4�����)������$,�������������� ������$�� �$���� ����������$������8�F�����&����$���3�������$������5�

H�� �$��������������4�)����'��$���4����$"��������5�%����4�)�����$ �������������$���8������� ����$��)�����.� ���8��$���$�� ��4������"��$�����5��������4�)����������$�4���4�� �������$�����4��F� ��)���������&�)���5�

���� ��4�����$�������4�� ����)����7��$��$"�3�����8���4�$��$"�4�$�����4���)���8��$3���$��$�8������8��$����$��� G����� ��� ����$���&�$"8�'�� ����&������������$�4���$���� ��$�����$��7��������3�������'��$���,��������4��$"������������)���3���4��$�5�

����>�$�/��������������������$��7��$��$"��$���������$"������$�'����$�������$"�"���� ��$�����$8�������4�GG'''54����$5��"G�� G ���$�G�7�G�7�5����5�

���������$�.�%���/�)���$ ����$������������7�����������4)���)�.����.??�����������"�����$"�"�5���,��������4�GG'''54����$5��"G��3G�� G���$���G�4�G�4�5����5�

������������4��$������$��7��$���$��������$ �����$��'��44���)$ ���$��K�$������ ���8�

�������L��$����������$� ���5���������'���������4�����4������$������$������D�����������8���&������

�������R�������!������

���$�����)$ ���$� �$���� ������)���������$�F�����&���$��������������5�

R�������!�����> �������+���,�

*��������� ����

*������$"��$������$����'�������4��"�������"�3�$����� ��� ����������������$��$���4�����8�����'�$"�����4��"��������4�'������������$���7� ��������$�� ��4����$�����3� ��5������"�3�����4��"�����������4�'����������������$�������8� ���������$�)$ ���$�8��$��� ���������$���F� ��8�����)���������������)�3��������$"�"���)� ��)���5�

*������$"����4�'�������������$,��%��8�'�� �� �$���������$�.�����$ ���$"�����

������>���������)���5�������������

���������M������>�M�

�$���$����������)$ ���$�8���4��8��$���� �����)�$����$��$����������������%��5�

������)���������4�������$������D�������$��$�.��$ �����������$��������)��������$ �����K����9�"�����5#L��

&����'/(3(�+������������� ����)�������

Page 422: Game Programming With Python, Lua, And Ruby (2003)

� #���

����������+,���������N�������������������S!�������8�+,P����������������������S#�����5���+M1 �������4M,P�������������������S5�����8�+,P�����������������������+,P���������O�

��S!�������8������������� ��$������D����$�)$ ���$M�������� ���������� ���)�������

�$���4�����������������$"�����%��5��$�4���� ���8�����$������D����$�� ����������������$����8�

�?��������8�S$������S8��$��S����S�������5�

�0�*�

.%:��0��

��S!�������8������ ����)���������������$"���������������$�������������$���)�7����� ����$8�'�� �����������������������$�����������������8���4�$��$"��$������4�����$"�������5��������'���������)$ ���$������$�� ������$����������������4�����$"�������,��

�$3���$��$��3��������4�����)��������R2����������&��5�%����$�����8�����������

4����� �$�����74�� �����������$"���#��S#��&�"3+,5�

���������S#�����5���)$ ���$�������4����$���)�����3������"����3���%���)$ ���$�������

����������"�3�$�)����)������4��$����K5!%2�)L��$���7� �������� ����$���������������5�

%)�����$������D����$��$���$$�$"��$�� ���8���S5�����8����������������$���$�������� ����$���������'$������$���4�����5�

�����$,����"����3���%���)$ ���$���������� �����F�������)����7� ��$"�"�3�$������$���� �8�$���)����$���� ��$"�'��������$��$����"$�)� �$��'��5�0�������"����3���)$ ���$���$������$,��.�%����$ ��������)����'�$"���

Page 423: Game Programming With Python, Lua, And Ruby (2003)

� #�#�

•� ��J���)$�, ��DE(���������$�� ��4�������� �� ��������$"5�•� ��J�#�$J�)� (���������$���3��������74������$�5�•� ��J0$�J�)� (���������$���3�������)����5�•� ��J!��DE(�1��$�4��"����)����������$������$���4�����5�•� ��������J,�)$������, ��DE(�������������$���� �� ����)��������$"5�•� ��������J,�)$������&$�DE(�������������$���� �� ����)����)���5�

•� �����J���&$�DE(�/���$�������������)��$$�$"������S!��������3�%���������/$O���4��9���KL5�

•� �����J,�)$�, ��DE(�/$��"�3�$� ����$������$"��$�S����S5�

•� �����J,�)$�&$�DE(�%�������S#�����#����"��7 �4����� �� ���� �$���������)������)�����$�������)�������$"5�

•� ��J��$�J�)� (��������������)�������$"����������$�5�•� �����J-� ���� #� ��DE(�/�����$���7� �������$"����������$��)�����$�

�$���� ��3����3� ��)���5�•� �����J-� ���� #����)DE(�/�����$���7� ��������������$���)�����$��$���� ��3��

��3� ��)���5�•� �����J, ��DE(�*7� ������ �� ����)����������$"5�•� �����J&$�DE(�*7� ������ �� ����)������)���5�

������"����3����������������F���� ��� ��������)� �8��$�������$,��%�������'�����������$�"���$�8���F� �� ������$8��������$"8��$���7 �4���$���$���$"8����$������)�'����$"�5�

0����� ����$������� ����$����$ ������!�����S!�����R�����+,8�'�� �����)���

��4����$"��$���$������D�$"��$����������$�������M���$C���SW��&���#����"+,8�'�� ��

���)���� ����$"���"�3�$�����������������M��$����$C���S#��&���#����"+,8�'�� �����)�������"$�$"�3��������3���������'����$�������5��

+������� ��-� ��� ���

���'������44�$��'��$���������������"���$��"�����$�4��F� ���$����������?�.�)$ ���$���������"�)��'��44���)��������$-������ �$����������� �$���$"8�������8�������4��$��4��F� �5����"�$��$�'������������������"��������"������F���4������3����)��������7���$���8��$���� ��'��44���)$ ���$�'����$������������3������5���'����&$�'�'����F����� ��������&����&�J�

( &���8������������������4���$���3��������)����7��$���$���������'��44���5��+�8�)����$���$ �8�����$��7��$���$�'��44�������"$��������&���7��$���$�������5���� �$�����������"�$�������$���)� ���K4����������$�.L�'��������3�$"����'������������)� ���5�%$�������4���$������48���������3���)��+�8�'�� ��)� �����$�.??5����������5�����$�����������������$���������������� �$�����������'�����������������)� ������� ����������������������5�0)������������8��+��������������4�4���8�4���������� �������4�����'����$����$���'����.8�.??8������$8��$��/��8���������'��������8�� �G�&8�@�3�8��$��.T5��+����� �4���"�������)�'���8����������)����������������5�������$��������)�$���$�:��=����'����������4�������$�+�$���0��5�

�+���������������'��44���4�� �������"�$�����$"�'��44��� ����)������������)�%����.�)$ ���$���$��3���������� �������$�5������+����$"�"������ ������)������ ��4��7��$��3���� ��4����5�����44�����4��4�� ����$"8�4��$����8� ������8��$������$ �8��$���3�$�.??����4�����5�

Page 424: Game Programming With Python, Lua, And Ruby (2003)

� #���

�+�������4� ����� ������)������ ����$��4���4���������'�����1%E*5�1������ �$���� ��4������$������((�)�����$�����$���$��� �������������$��������$8��������� �$��������4������ �����������4���$��$�1����3���4��$�������5��+�� �$����)�$���$��$�������� �)��"��K���4�GG�'�"5��� �)��"�5$��GL8��$�������5�����$8������3���%�������8� �$����)�$���$��$����������$5��"�K���4�GG'''54����$5��"G "����$G���$���$G�����O��4����$L5�

*1 ���������

(��'�����������4���$���'������������$"�"��8��$����� �$�����7��$����'����)$ ���$��

'�����$��$�.�F�����������$� �$5�������)$ ���$����������)��������SL5����������4���

������ �����+)���SL5�������,�+���S#�����)%,P�

%�.�)$ ���$��� ��3�����(���������$������$���$��$��"������������������$������)�3������������������$����(��K����9�"�����5�L5�����.�)$ ���$��� ��3�����"��$���)����(���$�������� &��$����� �������5�%$������$�3��������(������4������$���������� &8�������$����� �������5�

&����'/(4(���)����� � ����0�����������)�� �����)�

+��$���"������$"���.�)$ ���$����(�8���������$��� ����� ��3�������$��������)$ ���$�'������3���$�(���$����4��$�����������)$ ���$8������)$ ���$� �$������"���������$�(�����

����$"��������S��"�������� ����

���S��"�����+%��M�3���"�M��R�5�������,P�

>����� �$�������� ������'������.�)$ ���$�'��$������� ������5������ �������'������� ��������.� �����5�����3������������$�� ���������������.�)$ ���$�'��$�3��������� �����5���� ��������.� �����8�)�����4�������3������$���������� &8��$�����$��������

Page 425: Game Programming With Python, Lua, And Ruby (2003)

� #�;�

���S������������� ����$�����4�������.�)$ ���$��$���������� &�'�����$���"��$�� �$���$�$"�����$������)�3����������$�������������� ������'��������)$ ���$��

3�������S�������������+���S#�����)%�����SL5��������R�5�������������R�&�"�����,P�

+��$�3�������.�)$ ���$���� �����8�����3�����4�����4������� ���������4� �)� �4�����

�$�� ���4��� ���������� ��8����S��3��������?5�����)�����3����������4������$�

���S��3��������?+�,8������� �$��������S��3��������?+-,8��$������$5�

(�������4��3�������4����)�$�������������� �$������������$��.� �������������'����3���(��3�������$�������������5�������������������"�������$��������������)��'��$�3������������&�4���������������)��4�$��)���"�3�$�)$ ���$5��������"���������������4������$��7������

%�&S�2W!#���!6205�%$��.��������� �$�������������$�������������5�

*1 ����������

*7��$��$"�/����$�.����� ��4����������'����$"�.����������"�����'��$�/��,��.�%����$��'����3������'�$����������$����/���K����9�"�����5;L5�����/���.�%������ �$���$����$�����.��������)�������5�8��$����$���)����� ����$�%��� ����$���������������$���������5�5�

&����'/(5(�+������������-�

/����$��.������������������4��8�'�� �����4��������� �'��$�/����$����� �"$�D�����F� ��5�9���.����$������$��/��8���������$������$����������$��'�����������4��5��$�/��8��3������$"������������$���F� ���������)���$ ������$���F� �5�9���.����$������$��/��8��������4����������4��$����������/�����F� ������ ������F� ��5�H�����������

��&�$"�����/���3����������$�.���X&%�2��4�5�+��$�X&%�2������4��$���8����4��$�������$��

�)��������������� �����)�����/��� ����������F� ����� ���5�X&%�2� �$����������$�

����������3����� �����5�?���8�#��$��8�����8� ����8�������5�

%�/�����F� ������$����� �������� �����$������������� �$���$�����������)��$���$ ��3����������$�������� ������$)�������$5����� ���������$���������� �������� �����$��������

Page 426: Game Programming With Python, Lua, And Ruby (2003)

� #�!�

����� �$���$�����������)���������������)�$���)�������� ����5�����������$���F� ����$�� �������������)�$����$�����.�%��,���������)���8����5�5���)����'��44�$"�4��$��/����$�.8���������$ ���������)�����

���������M��$�>�M�

H��������)�$����.�"������)$ ���$��������"�$��'����!���S�'��$�'����$"�$�'� ����������������5�.�����$"���$�'��� ������)�/��,����F� �����&����&������)����'�$"��

3����!���SR���#�$�����+,�N����������R���#�$������/��$S�� ���S�����+MR���#�$�����M���$S�$C���,P���������O�

$C��������4����$��������$S�$C�����$��������5���������)���8��$������ ����������)�$���

'�����$S�� ���S�����5�1������� �$����������������� �������$"��$S�� ���S������8���&������

3����!���SR���#�$�����+,�N����������R���#�$������/��$S�� ���S�����+MR���#�$�����M���$S�$C���,P����������$S�� ���S������+�R���#�$�������MR�R�����M��R�5���������3�����,P���������O�

/����$��.� �$���������� ����������"������3����5���������� ��4����������)����� �����$"���/�����F� ���$�.��

X&%�2�R�#����"P�R�#����"�/��$S���S���+,P�

���$���$��������F� �,���������������/���"������3���������

�$S�� ���S3����$��+M@#����"M��^R�#����",P�

��'�/��� �$�� ��������.�3��������R�#����"����@#����"5�

H�������$��$����������'����/��,��"����"�� ���� ���$�'��$��7��$��$"�/��5�/��,��.�$�������������$�����'����&���"��3���'��$�.��������� ����������/�����F� ������'��$�/�����F� ��������.���� ����5�H�� �$������������'������'����$"���)$ ���$�

�������"�������������F� ��8�4����$"� ���+,8� ����$"��$S"��$��S3����$��+,��$��� ��/�����F� ���$������ ���8������&�$"��������4� ����%��� ����5�

0$ �� �����������$�'�����$�)����$��7��$���$8����$����������� ��4������$���'��������/��� �$���5����� ���� �$���� ��4�������������������F� ����������������$����8������� �$��������� �������$&����������/����$���4�����5������$�����/����$���4������ �$������������������'����$��$��44�� ����$5��������4�������������&����4�$��"��������$�����4���)�����$�'�� ������4��"�����$"�������$"���$�M������������$��� ���$��)����� ��

Page 427: Game Programming With Python, Lua, And Ruby (2003)

� #�<�

��������$������$��$��/�������������)���$ �8�������4�GG'''5������$"5��"G�$G�������!5����5��

����.�%��8���'�3��8����A�������"�8��$��)���*$"���������������������� ��)����� ��$�����$������&����������� �� ���������)5�

+��$��'/(/(������������������������-��

+�)��� ��-���������� &��� ���

������ �$S��-����+,�� /���$����$����)�������"�3�$����

!6�� �$S������+,�� /���$���$����)�����"�3�$�$����

����� L���DS#� �#��+,�� 9��������$"�#�������2�����

����� HS5�22[2+,�� 1��&������"�3�$���F� �����)��D�$�

����� HS5�[2+,�� 9��������$"��)��$���F� �����)��D�$�

����� HS�&!�+,�� 1��&������"�3�$���F� ��������$����

����� HS�&!�26+,�� 9��������$"��)��$���F� ��������$����

����� �$S$���DS"�3��S�+,�� /���$��������)�������'�����7� �������� &��$����� ���$�� �$��7��

����� �$S�3��S�� ����+,�� /���$��V������)�����"�3�$� �����3��������$�����������$���)�$��8������'��������$��V �����

����� �$S�� �S��3��+,�� /���$������ ���$����)����3���

����� �$S����S��"�+,�� � �$��������"��$��������$������"$��������$�

����������'���������� �

����� �$S������+,�� /������#�������2������)���3��������������$�����A���������� ���$����)����3���

X&%�2���$S�����+,�� 9$ ���$�)����$3�&�$"���������

X&%�2���$S���S�����+,�� /���$���$������������$�������"�3�$��$��7�

X&%�2���$S���S���+,�� /���$����$�'�������

X&%�2���$S���S���-+,�� /���$����$�'�K��$"L��������

X&%�2���$S���S���.+,�� /���$����$�'�������4�4������'��������"�3�$���"��$���

X&%�2���$S���S���=+,�� /���$����$�'�������4�4������'��������"�3�$�.�������3�����

X&%�2���$S���S����+,�� ��������3�����$��������$���)��$���������� �

X&%�2���$S���S���+,�� /���3����$������$����������������$��)�����$�������

X&%�2���$S���S��� �+,�� /���3����$������$������)����������$��)�����$�������

Page 428: Game Programming With Python, Lua, And Ruby (2003)

� #� �

+��$��'/(/(������������������������-��

+�)��� ��-���������� &��� ���

X&%�2���$S���S����� �+,�� ��������3�����$�������)��$���)��$���������� �

X&%�2���$S����S�����+,�� .��������� ���$����������$������4��� ������)����� ���$����F� ��

X&%�2���$S�����+,�� *A�3���$�����/���������

X&%�2���$S�3S"��+,�� /���$�� �����3��������$����

X&%�2���$S�3��S"��+,�� /���$������ �����3��������$����)��������"�3�$� �����

X&%�2���$S�� ���S�����+,�� ��)�$�����$�'���4���3��� �����

X&%�2���$S�� ���S�����S�����+,�� ��)�$�����$������ �����

X&%�2���$S�� ���S������+,�� ��)�$�����$�'���4���3���������

X&%�2���$S�� ���S������S�����+,�� ��)�$�����$������������

X&%�2���$S����+,�� �$3�&��������������������)�����"�3�$���F� ��

X&%�2���$S ������+,�� �$3�&�����������

X&%�2���$S ������-+,�� �$3�&�����������

X&%�2���$S ������.+,�� �$3�&�����������

X&%�2���$S"3S"��+,�� /���$������"������3��������$����

X&%�2���$S"3S���+,�� ���������"������3��������$�����

X&%�2���$S����S��� +,�� /���$�������$�� �����4�$��$"����"�3�$�&���

X&%�2���$S����S����+,�� ���������3����)�����"�3�$�&���

X&%�2���$S����S���+,�� /���$����$�'������

X&%�2���$S�������+,�� �$3�&����������'����"�3�$���"��$����$����� &�

X&%�2���$S�3��S"��+,�� /���$�������$���$ ��3��������$����)��������"�3�$���F� ��

X&%�2���$S�3��S���+,�� ���������3�����)������$���$ ��3��������$�����$�����"�3�$���F� �������"�3�$�3����

X&%�2���$S�3S"��+,�� /���$�������$���$ ��3��������$����

X&%�2���$S�3S���+,�� ���������3�����)������$���$ ��3��������$����

X&%�2���$S������+,�� *7� ����$������#�������2������7 �4���$�

���������8����$��7� �����������

X&%�2���$S���S���+,�� /���$����$�'��4�� ���������$"���F� ��

Page 429: Game Programming With Python, Lua, And Ruby (2003)

� #���

+��$��'/(/(������������������������-��

+�)��� ��-���������� &��� ���

X&%�2���$S���S���+,�� .�$ ���$�������$"��� ���� ������$�����$"�

X&%�2���$S���S������+,�� .�$ ���$������������$�����$"�

X&%�2���$S���S���+,�� /���$����$�'�����$"��$������D���'������$"��� ���� �����

X&%�2���$S���S���-+,�� /���$����$�'�����$"��$������D���'����$��������$�����.�����$"�

X&%�2���$S���S�����+,�� �4�����������$"��������"�3�$�������$������$������$���$��������)���������$"���F� ���

X&%�2���$S������S������+,�� /$����"�3�$�)$ ���$��$���$�'��������

X&%�2���$S�����+,�� ���$�)�����7� ���$�������������������� &��$����� ���$�� �$��7��

3����� �$S���S�����+,�� ���������3���������"�3�$��$��7��$��$�������

3����� �$S$�"+,�� �����$���������4�� ����������������

3����� �$S�3��S���+,�� ��������� �����3��������$�����$�����"�3�$�

��������3�����

3����� �$S�3S���+,�� ��������� �����3��������$�����

3����� �$S�� ���S�����+,�� ��)�$����$��������$��� ��������������

3����� �$S�� ���S����+,�� .�������� ������������)�������"�3�$�3��������'��������"�3�$�$����

3����� �$S�� ���S�����S3����$��+,�� ��)�$����� �����3��������$����

3����� �$S�� ���S�����+,�� ��)�$����� �$���$���$��� ��������������

3����� �$S�� ���S"��$��S�����+,�� ��)�$�����"������ �$���$��

3����� �$S�� ���S"��$��S �������+,�� ��)�$�����"������)$ ���$�

3����� �$S�� ���S���D��S3����$��+,�� ��)�$���)$ ���$�������� ������'��$������$"����'����$"����3��������

3����� �$S�� ���S������+,�� ��)�$����$��$���$ ���������

3����� �$S�� ���S������S �������+,�� ��)�$�������������$�����"�3�$� �����������'��������"�3�$�$����

3����� �$S�� ���S��������S3����$��+,�����������$S�� ���S3����$����7 �4�����������$���)����/���

3����� �$S�� ���S���"�����S������+,�� ��)�$�������$"����$��������

3����� �$S�� ���S3����$��+,�� *74������������������)�����"�3�$���F� �������'��� ��������$�.��������/���$����4� �������"�3�$�$����

3����� �$S�� ���S3������S3����$��+,�� *74�������3������3���������������/���$����4� ��

Page 430: Game Programming With Python, Lua, And Ruby (2003)

� #���

+��$��'/(/(������������������������-��

+�)��� ��-���������� &��� ���

3����� �$S�?��+,�� *7����/���'��������"�3�$�������

3����� �$S�?����S�$C���+,�� *7��$���"�3�$���F� ��'����������

3����� �$S ����+,�� /��������)������7 �4���$�

3����� �$S�������S������+,�� �$ ���������"�3�$��������$������� ��������������4���$��

3����� �$S����S$���D+,�� ����&������)������$ ����$"������������� &�

3����� �$S������������+,�� /�������������4*������7 �4���$�

3����� �$S�����+,�� /�������$��7 �4���$��

3����� �$S���S�� �S��3��+,�� ��������� ���$����)����3���

3����� �$S���S ���+,�� /��������4���)�����4� �)� ��7 �4���$�

3����� �$S�����+,�� *A�3���$�����/���������

3����� �$S���� S������+,�� :$��)�$�������"�3�$��������$�����$�����"�3�$� ��������������

3����� �$S����+,�� :$ �$�����$�������������'��$�$"������"��������$�����������

3����� �$S������"+,�� .�$�����$�������������'��$�$"������"��������$�����������

Page 431: Game Programming With Python, Lua, And Ruby (2003)

� #���

�� ����#����������9�����������

���'�� ���)�������������$"�"����������������������$�����4��F� �-��������4�$�����"�����������$�'�������'�$������ ��4����5����'��4�4��������&8��,3������$���������)�����4�����$�� �$���)��� ����$"�"���$�������� ���$5�

�� ������������������

����4�����)������$��������)����'���

•� �����$�����������7��$���$�����������$�������������$"�"��5�•� 1�$���$��$�������$�����������7���5����������������4��$����)�*$"��������&���$��

��)���$ �����������8���$�����4���� ��4����7�����$��$�8��$�������������'�������)��$���� �������������5����������$5��"�+������������"����4�� ��������������&�$"�)����������� ������������� ���$��)�����"�$$���8���������8�"�������"�$�D��������4� 8��$���������)���$&���$����)���$ ��5�

•� 1����)��&����������$F���������$��7��)����������$���$"�"���� ��������44����� ���$��$�����������������5�

•� �����$������$���"��'������������������� �$ ��$��5�������������$�����������8��$�8�)������������4���8����������'������ ��$���5�

•� (�����)�����������������$��������$������3�������8��$������������)��$�����������)�$�����$�����������)���(���$��/��5�

���� �$���)������$��������)����'���

•� *7����$"������$����""�������� �$��������A��&���$�����'5����""�$"��44�����$�1� �$������$�� �$����������3�$�'��&��5�

•� ��� �$������))� �������$���������$�'������������$"�"��5�����������������)���$�����((�8��$�������$�����K ��4��������������������$"�"��L������"�����$���������������$5�

•� (�����)�)��&��������������&������'������4� ����$����3�����)������$���$��75�•� �����$� �$����A�������'���������8�����3������$"�����$���F� ���$��������45�

������������������

����4�����)�(���������)����'���

•� (�����4������������)��������)�������������$"�"����$�������������������������$���)��$�����������5�

•� (��������������������������)���4��$��)����$���$"5�•� ����(��.�%������3����'������ ��$�����$������"�����7��4����)����$��"����$"�

'����.5�

���� �$���)�(���������)����'���

•� ������ ��$�����$�������4��3����������������������&�� ����3�����5�0)�������������$"�"��8�(��������4�������������������� ��$����K����%������$"������7 �4���$L8�'�����������������$���)� ���� ����$��5��������&���)����������"�������4�4�������������$8��$����������$,��� ���$�����'����)��$���� �����(����������5�

Page 432: Game Programming With Python, Lua, And Ruby (2003)

� #���

•� ��������$,���������)�������$�)$ ���$������)���(�5������������������44�����)����$������� �����������"�8� ��4��7��44�� ����$5�

•� (�� ����������������"����"�� ���� ���C���� ���$����3���4��$�������3�$"���'����������$�'5�/�"���$�'8�(��.�������3�������4����$����������$������4������&��$���'��45�

���������������0������

����4�����)�/����������)����'���

•� /���4���������)������"������3�$ ������""���5�•� /��������F� ������$����)��������"��$��48��$��4��"��������'�������00��

�$������������'������������������00��4�����"��'����)�$��������$"�"���7�������� ��)�������5�

•� /���������"������������4�������$��78�'����$�������������7 �4���$�5�*�4� ����������)���00���$��������5�

���� �$���)�/����������)����'���

•� (� &��)�*$"������� ��$�����$5�•� 9�'����7����$"�'��&���$�����4����)���"��������$�'����������������$"�"��5�

Page 433: Game Programming With Python, Lua, And Ruby (2003)

� #�#�

,�������

���"�����$"������$�$"�������$��������$����$��3�����$,������5�*3������$"������8���)�'������ ������������)����3����$�������5�2�"����3�����$"�"�����������$��������$ ����������3���$���$�����4��"�����$"5������8��� �����)��������$ ����������$"�"��8�"������������������'�������&�8� �����D������$"�$��8��������'$���$"�"��8��$������)������"��4�� �5������ �$����� ��4��������$���3���4��$����$"�����������3�$8�4���$�����"��������"$������5��

%�)�'���4����$��4��$��������&��)��������� ��4�����

•� ������������$������)����$"����� �$��������)�����$ ���$"���"����3�����$"�"����$�����3���4��$��4��F� �5�

•� *7��$��$"�����"����3�����$"�"�� �$�����'��'������������$"�"�������������)� ���$�'�������������"��������$�����$"���4��F� �8���������������������)� ��4��7���5�

•� *7��$��$"��������������4�� �����$������$8�(�8��$��/��5�

Page 434: Game Programming With Python, Lua, And Ruby (2003)

� #���

*1�������

'8� 2�'������� �����$���F� �,���������)����.���$"������$-�(�-�/��-�

/8� +��������4��� ��������7��� ��.�3�����)�����$���)�������������$"�"��,���F� �5�+�� �����)�����4��J�

28� (�����'��4��������������'��$���$"��7��$���$���$���4��F� �5�

Page 435: Game Programming With Python, Lua, And Ruby (2003)

� #�;�

������4������ ���$�������������#���������

����)����'�$"�����������$����������������)� ��4����4��"�����$"�����"������K��"����8��$������ ����L��������4����$���3�$��5�

+��$���('(���.��0�"� �����0����������

G����� *#�� �

%��$��#�����.��

.�����������������������&��4���� &��)����$�� ���$�5�

%��$��������.��

%�� ���$3�$�����$�������$��5�

%��$��<���%���

����.��$��������������������$������8������"���������������$�������3������'����$���� ���)�����$���5�

�;����;�!��

@��$���4�������������� �����4��$�8���3�������"�������8��$������$���������� &��)��� �� �����$5�

�;����+�������0"�������$3�$������� �� ���������������������$���4���,����"�������5�

�!<;��@5251�������������4�����I��))���$ ��*$"�$�8I������&����$������ ��� ��4�$���8���� �$$���"�������)$���)�����$3�����������������5�

�<����.������������"����"�$�����������"$��$�������1�����,����))���$ ��*$"�$��'����)$��$"�)����������������"�3��$��$�5�

�<�#����������"�� ��$"�������)� ��)����������))���$ ��*$"�$�������$�'�3�����$� ����������%$����� ���*$"�$�5�

�<#����%���(�3��� ���� ���������'����,��)�����4��"����������4���$"���"���������������)� ��4��$"���$"������"�,��$������$�����%$����� ���*$"�$�5�

�<#���������������"�3��$��$��4����)$��$"�)������� �$��� ���$��)�������))���$ ��*$"�$�5��

�<#!�# �������"�� ��4������������'�$"��)�����$�'���4��3����� �$��3�����$��)�������))���$ ��*$"�$����������������$��� ��4����� �$��� ���$5�

�<����������))���$ ��*$"�$�����)�$����� ��4�����������8��������$������"��4�$����$ ���$"������"�5�

�<�#��2����$�2��������8�'�������� ��� ��������$"��������'�������)��������< �� �$��8������������������������$"�1� ��$��.��4�$�5��1.�'������������ ������15�

� #���

%��$���))��$�����������������)�������� ���$� �K�$��$�$�4��"��������L� ��4����$�����%�.5�Z��� ��4����������Z���� ��$�8�����'����,��)�����)����)$ ���$���4��"�����$��$�������� ����� �$����������� ������ ��$� ��� ��4���5����������;#�'������������$�� ��4��������������� �$���4�������4�� ����$5�

� ##��2�'����%�&�$� ��4����������)�����4��"��������� ��4���8�����1��&��8���$"�4$ ����4�4�����4��)���4��"�����$"��$��3� ��������$������������

Page 436: Game Programming With Python, Lua, And Ruby (2003)

� #�!�

+��$���('(���.��0�"� �����0����������

G����� *#�� �

�� �����4�������5�

� #���

Z�����3���4��I���$&��&�I�K������)���4���$� �� ��L8�'�� ����� �$������������)�����4��"�����$"���$"�"���$��'�������"$����������� �����4����$"�K�5�5�"���L�4��"���5�%���8��$���4�� ��8�'��&�$"��$���4������4���)�����1��&���8��� ��1�����)�$�������)����� ��4����I�"8I��$�� �������������� �������������)�����5�

� ����������2�������$� ���������I�����1��"���$������8I���4���� ��������������$� ��4�����5�

� �!��90/�/%���44����8�������)���1�������� ���90/�����/%������$"�������5�2����$"�����90/�/%����������@��$��� &�8�'��������"�����$���� �$����������������3���4��$���)�%(0(��$����95�

� �<�� @��$�1 .�������$���� �������(��4�4��"�����$"���$"�"�5�

� �<�� 9����� ��4����������������'�������$���������$�������)�3� ������5�

� � �� ����������$�'��3�������4��"�����$"���$"�"����$��7����$ �5�

� ;���.0�0(8� ��������������.�$)���$ ���$���������������$��(�$"�"��8������$ ����)������$�����44�� ����$�5�

� ;����4� �'��8���"���������)�����3�����"�����3��8�����$3�$�������1��������"�����������$��$��������3��/����5��

� ;#��%�����������:$�3������8�4��)�������@��$�5E���$���$���������*5�E��D��$3�$���%��.5�����)������%��.�4��"�����$���$�1����8�� ;#�K������$��#��5�5L5�

� ;��� E�$��3����$���3���4������%�(���$"�"�������15�

� ;!����1��$$�$ �����������'����$����$"����$������)�'�����$������'������"�����8�����������'����������������4�������5���������$������3����� �$��������������"�$$�$"��)�������)�'�����$�����5�

� ;<��*��"�����F&�����)�����'�������������������)���))� ����)�����"�����������$�5��$�������)�������$���$ ��4��������$�@����<��5�

� ;<��%(�/%�8���90/�/%��3����$�8��44����5�.0�0(�����))� ��������)�$������%���5�

� ; ��E�$$��������$��$��$����$$���/�� ����)��������:��=����%�U�������(���5���$����E$���'������>��������)�����%����)�.��4�������"�����$"8� �$������������)����� ��4����4��"�����$"����&5�

� !��� ��&����+�������3���4����� ��8���4���� �������)�1������5�

� !���

����$�� �$���,��"������$"�������4�4������������)�$���%����5/�������$��$��$� �������������������$��4����$��������"���� �����%�4$���K%�4$���'������ ���������$���$��M ���$���������������$������������������L5���������&������3���4������=���7��%/.,������$�$"������� ��"��45���$���/�� ������3���4��.���������(���5�

Page 437: Game Programming With Python, Lua, And Ruby (2003)

� #�<�

+��$���('(���.��0�"� �����0����������

G����� *#�� �

� !���

����%������<<�������3���������$�@�$���������&������ �$��������$�������)������4����1� ��$� �8��$�������.�������$5�����������$������%���$�'�������3�����$��)��%��.�������������������1����K1� ����$�����$�����$��$�������������������L��$���4��� �4���������������5� ����8���(��4������ �����5(5��������$��5@5�����$8��44����5�

� !;��.��'������$��+����� ����������)�������3�$����"���� �����C���"��������C%�3�$���5����3��@�����$�����3��+�D$��&�����"$��$�����������%44����5�

� !!�� �����������$������%���$�)�$��1� ����)���$�%��A��A�8���'�1�7� �5�

� ! �� �� �1�$��44����5�

� <���

��1����� ����.��0��)��������1� ����)��.��4������$���������4�����$"��������)�������$�'��.5���������&�<���44����5�F��$���������4���3���4���������)���$"�"��8� ���� ��3������)������������I.�+����.������8I�'�� �����3����������������$"�"��$��)���.??5��

� <���@�4�$���"�$������9�)����$������$�.��4�����������4��F� ����$"������"��������4���������$"�"�5�

� <���

1� ����)���$$�$ ���I+�$��'�8I���"��4�� ��������$���)� ��)����.�5�+�$��'������$,��� ���������48���'�3��8�$����� <�5�����)�����.� ��4������)����� �� ��4�����������������5��$�@�������)�������4����$�����$��)�.??��44����5�

� <#������1� �$��������$3�����8�'����� ��"��������$����4�8���������4�����'�5+�����������$� ��$�����������I �����4� �I��$�����$�3���������$ ��5�

� <���+�$��'��)�$�������$ ���5�����.??���$"�"�����������)���������(���5������$����<��<;� ��4�'�����������4�� ����$"������������5�

� <;�� ����4��"�����$"���$"�"��*�))����44����5�

� <!�� ���������4��"�����$"���$"�"�������������5�

� < �� ����.�4��"�����$"���$"�"��������$�����D������%���5�

� ������$�'���������$��#�������$� ��4����������$�����$�����:$���������������$�8��$������)����� ����� �������3�������������4��$���$���� �����44����5�

� ��� ���������$�4��"�����$"���$"�"�������������5�

� ��� ����4��"�����$"���$"�"������$����������������%44��5�

� ��� ����/���4��"�����$"���$"�"�������������5�

� #������(��4��"�����$"���$"�"�������������5���� �4�,��)��������'������ ������3�������5�

� ��� �$�1� �������������������@�3�5�

� ;�� 0$������)��3�����������������$�����:$������������������ ��4���5�

Page 438: Game Programming With Python, Lua, And Ruby (2003)

� #� �

������4�5��6��������'����$�

%)��������)�������"����3�����$"�"���'������3���4����$������ ���8���D�$���)���������$"�"���4�44���4��$��)����'������5������8���� �$,����)�����+�����������$���������'���'�������$ �$����$"�������$�����$������)��������$�����5���������&�)� �����$���������$"�"�������� ����$��������$�"�������4�8����������������D�$���)���������$�4�4������5�

Page 439: Game Programming With Python, Lua, And Ruby (2003)

� ##��

�.��

.����������(�������8�(�������1�����$�8��$�����3�$���������$5��������������$��%�.�'������ �����������4��8��$���� ��3����$"�"������"$���)���A� &��$�������4��"�����$"5�%�.�'������"�$������$��$���������4�� ���%��.5�

Page 440: Game Programming With Python, Lua, And Ruby (2003)

� ##��

����

%���'�����3���4����$������ !����������:$��������������4�����$���)���)�$��5��������)����(����%���(�3��� ������$8�%��������"�$�����4�4������$"�"������)����3������$"�)�������$�����44������� &���� ��$ �5�%��������$�������)���������3���4��$���)���$����F���:5�5����������4��F� ����$���������$�����)������"��������������������)����������))� � �$������$����$&�$"5�

Page 441: Game Programming With Python, Lua, And Ruby (2003)

� ##��

�&� ��

%9�0/���$,��� ����������$"�"�8���������$�����������$"���"�$�D����$5�%9�0/�����$�� ��$���)���%��� �����$�9��$f������������$�����4�����)������$���$����$���0�"�$�D����$�)������$�����D����$������������$ �����%����K%���� �$������$������$�������$������L8���������K�����������$�������$�������$L8�����K���� ����$������)g������$"L8��$�����������$��������"�$�D����$�5�

Page 442: Game Programming With Python, Lua, And Ruby (2003)

� ##��

��

.���� �������������$$���/�� ������������(�����$�� !�5�.�'������"�$�����������������$"�"��)���:��=��$�������������$��'�������)���$�������5������������������)��������������$�'����:��=8�.��� ����������$"�"�������'����������)�����)�'������4����$�����$5�.�����"�$������"����)�'��$ ��$����$�8��$ ���$"�EU/�KE��$�"��$��$��/�� ���L�.8��$��%����.8��$���������$����������3��4������������F� ������$����.??5��

Page 443: Game Programming With Python, Lua, And Ruby (2003)

� ###�

�MM�

�����.��$��.??����� �$����������"����3�����$"�"��8������"������������ �� ����������� ��$��������������$���������"����3�����$"�"��5��������&��������3�����))� ��$�����������������))� ��������4����$�5�.??�'�����3���4�����������(��������F��$��������48�'������&�.��$����������F� ������$����4��"�����$"�K00�L�)������5�����.�)�����������4� �������������$��'��$���� �������� �����$"�����3����4�4����"��4�� ���$��+�$��'���������44�� ����$���$��������'�$���)���� ���$��)�'��������"$������������5�

Page 444: Game Programming With Python, Lua, And Ruby (2003)

� ##��

����$�

.��������������)���.����$����$����0���$����(�$"�"��5�.�����"����'����� &��������� �����$����� �$���������$���)����������������K'����90/�/%�����$"�����)�����L5�.����,��)� ��'��8��)� ����8����$�����44�� ����$���������$��$����"�� ��4����5��� &��$������ ����.�����'��$,��������� �$����������"����3��8����'��� �$��������'����5�����'����$������&��������������)����'��������$����F��"�$8��������������A������������������4�$"����$���������$"�"��5�

Page 445: Game Programming With Python, Lua, And Ruby (2003)

� ##;�

*00�$�

/�����������������$��1������$�� <;5�*�))������ �$���������$���F� ������$������$"�"�8������������ �"����"�� ���� ���$8��$��4����������$���)� ����������$���'�����$��$���������$"�"��5���������4����$���������.�4��4�� �����5�

Page 446: Game Programming With Python, Lua, And Ruby (2003)

� ##!�

& �+����

90�/%������$�� ��$���)���90/�����/%�������5�������4���������������������"����3�����$"�"�8����"�$���������"$��������1����@��$��� &���$����������� ���5�������$"�"���������$ �����$�����3�������))���$��3�����$�8���$���)�'�� �������������$���������5�90/�/%�,��$� ��������������� ��� ��4�����$�8��$������������� ����$��������$�$�3��������5�

Page 447: Game Programming With Python, Lua, And Ruby (2003)

� ##<�

��C� � �#��

:����)���$���� ��� ��4�����$�8��:�0 ��3������������)�������)��� ����$�������$����"�����)$ ���$���$�����&�5��:�0 ��3����� �����D����8� �$��$�3��� ����$����$���������"����� �8��$�� �$���$��� ����������4�90/�/%�����.�)������������&�5��:�0 ��3����������������$���������:��$��������� �(� �$���4���������������9������)�'����9�$�����$5��

Page 448: Game Programming With Python, Lua, And Ruby (2003)

� ## �

H�#��

0��"�$�������3���4�������$�1� ����������)���������4���7����$����$��������3� ����$��$��$ ��$����$�&$�'$����0�&8�@�3����3����������+�����+����+����$�� ���$�����&��))��� �������'��������4���)���5�@�3����������������.??����'�������"$���'����00���$���� ������$���$��)��������"��$��48��$���))�����'����������$�������� �����������3��)������������ ����� ����$���������$���"��K��&��4��$������$��"����"�� ���� ���$L5�

Page 449: Game Programming With Python, Lua, And Ruby (2003)

� #���

-����

� �$�����$��������"����3�����$"�"�������)��$��$������� ���$����7��4�� ����$"5�� �$�'�����3���4����������:$�3��������)�%��D�$���$��������������������$������(��,���$����5�

Page 450: Game Programming With Python, Lua, And Ruby (2003)

� #���

!���$��

������)���10�:����(%$"�"�8�1�����4�� �����1������8���3���4�����������������$"�"��)�������(������'��&������$5����� �$����� �$ �4������$��1�����������������C��4��"�����$"� �$��� ������� �$������������$ �4�������������)�����������4��"������$���������� ����5�1��������������������� �����$�������3����������)����������4�����$���)�����4��"���5�1�������4�� �����1������?��$��1������5�

Page 451: Game Programming With Python, Lua, And Ruby (2003)

� #���

�����$�

��� ���'�����3���4����$����������� ;��������&����+������$��'���$������)�������������� ��8�'���'������!��� �$����9��$ ����������� ��$�'��� �$��� ��������������$"��� ��$��5��$��������$�������$"���"����3��8���� ���������������� �����4��"�����$"���$"�"�8�'�� ��)�� �������"$��$�������3����$����5���� �������)��$������������� ��$"�������� �����)�������"���$������� ���5�

Page 452: Game Programming With Python, Lua, And Ruby (2003)

� #���

���$�

������)������ �� ���*7��� ���$��$��/�4����(�$"�"�8������'�������������$�� <!����(�����+���8�'�����3���4���������$"�"��'�����'��&�$"�)������������$����� �����%"�$ �5�(�����'�$����������$"�"���������������$� ����$���$���4��"�����$"��� �$�A����$��'�$�����44�� ����$����3���4���'���������������A� &����$���������'�����$5������'�����������"�$�������������4�����$"�"������ �$���7��)����8��7��� ���$)�������$�)����������)����8��$��4��$����4������������$�������$)�������$5�������������������$�����)���4��"�����$"���$"�"��'�����$�������)��44����$�������������5���������������������$��$����� ����$���)�$���$������$���$��8������$� �$F$ ���$�'����.���$��2�1(5��

Page 453: Game Programming With Python, Lua, And Ruby (2003)

� #�#�

�"��

�2������������$��4� �)� ���$"�"��)���+������3��������� ��4��$"5��2��������������)��$���2�1(���� ��������$��� �+���4�"��5�������$"�"����������$��7����������������,�����.,���$����� ��4����������.�M�����4�����������$"�������$����������� ���5��2��'������"�$�������3���4����$�� #��������"�$������"������������$����F�����'������$������������$�� �$��������5�

Page 454: Game Programming With Python, Lua, And Ruby (2003)

� #���

���$��

������)����/0"�����$"�(0� 8������"��������"����3�����$"�"���������$�������� �4��$���)���������$�����"� 5�+���������� ��4������$"�"���4��)��������A�$ ���)� ����$��8������"������$��$���������))���$���44��� �5������"�)����� ���������)�$����$���$������4���$���$�����$����������������3����"� �4�������5�9��������"8���4��"�������F�����������)�)� ����$������5������"����������)��$�)�$���$�%���74�����$����$���74������������K4��"����������)$ ���$���&�����$��74����L5�

Page 455: Game Programming With Python, Lua, And Ruby (2003)

� #�;�

����.����

%���"����3�����$"�"���������$��%��.8�����3�3����)������������)� �����$�&��4�$"�4��"�����$"���$�����$�����4��5�������� ������"��������$�$"������'������)�'�"�����$������������8��$ ���$"���� &��$�����+�"��48�E��&�����:$�������K������&���)�����.���������;#�"����E��&��L8��$����)�'�����������/��������5�

Page 456: Game Programming With Python, Lua, And Ruby (2003)

� #�!�

,��$$ �$%�

��������&�'��� ������������)�'����.�$ �4�����4�K�5�5=���7L��$�����3���4��$���������%��$�E����$������������ !��5���������&����&����� �$ �4����)� ������$�������"��)����������;!��$������������4��3���3�8����� ����� �����$"�����A�$�����$�������F� ������$������$"�"�5�*�����3�����$��'������������&�!�8���������&�!#8��$����������&�!;M�$�'�'�,����$���������&�<�5�

Page 457: Game Programming With Python, Lua, And Ruby (2003)

� #�<�

,B���%�

���$����$������%���$,���$���3���/����� ��(������4�����3���4������4�$���� ���A��&���$"�"�5��A��&������������$3���$��$�����$��)�����$"� ������$8��$��)����������� ���������"��������"�8��$���$��)����74�����'��������$���I���4� ��4��$"5I��