OSDN Git Service

...。
[ring-lang-081/ring.git] / docs / ja-jp / build / html / usingopengl2.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5 <html xmlns="http://www.w3.org/1999/xhtml">
6   <head>
7     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8     
9     <title>RingOpenGL と RingAllegro の用法 (3D グラフィックス) &mdash; プログラミング言語 Ring 1.12 取扱説明書</title>
10     
11     <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
13     
14     <script type="text/javascript">
15       var DOCUMENTATION_OPTIONS = {
16         URL_ROOT:    './',
17         VERSION:     '1.12',
18         COLLAPSE_INDEX: false,
19         FILE_SUFFIX: '.html',
20         HAS_SOURCE:  true
21       };
22     </script>
23     <script type="text/javascript" src="_static/jquery.js"></script>
24     <script type="text/javascript" src="_static/underscore.js"></script>
25     <script type="text/javascript" src="_static/doctools.js"></script>
26     <script type="text/javascript" src="_static/translations.js"></script>
27     <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
28     <link rel="next" title="Gold Magic 800 ゲーム" href="goldmagic800.html" />
29     <link rel="prev" title="RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)" href="usingopengl.html" />
30     <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
31
32   </head>
33   <body role="document">
34 <div class="topbar">
35   <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">&#x1f369;Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
36   <ul>
37     
38     <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
39     <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
40     <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
41     <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
42     <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
43     <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
44     
45     <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46     <li><a title="総合索引" href="genindex.html">Index</a></li>
47     <li>
48       
49       
50 <form action="search.html" method="get">
51   <input type="text" name="q" placeholder="Search" />
52   <input type="hidden" name="check_keywords" value="yes" />
53   <input type="hidden" name="area" value="default" />
54 </form>
55       
56     </li>
57   </ul>
58 </div>
59
60 <div class="related">
61     <h3>ナビゲーション</h3>
62     <ul>
63       <li class="right">
64         <a href="goldmagic800.html" title="Gold Magic 800 ゲーム">
65           次へ &raquo;
66         </a>
67       </li>
68       <li class="right">
69         <a href="usingopengl.html" title="RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)">
70           &raquo; 前へ
71         </a>
72          |
73       </li>
74       <li>
75         <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
76          &raquo;
77       </li>
78       
79       <li>RingOpenGL と RingAllegro の用法 (3D グラフィックス)</li> 
80     </ul>
81 </div>
82   
83
84     <div class="document">
85       <div class="documentwrapper">
86         <div class="bodywrapper">
87           <div class="body" role="main">
88             
89   <div class="section" id="ringopengl-ringallegro-3d">
90 <span id="index-0"></span><h1>RingOpenGL と RingAllegro の用法 (3D グラフィックス)<a class="headerlink" href="#ringopengl-ringallegro-3d" title="このヘッドラインへのパーマリンク">¶</a></h1>
91 <p>RingOpenGL と RingAllegro の用法を学びます。</p>
92 <div class="section" id="d">
93 <span id="index-1"></span><h2>3D 立方体とテクスチャ<a class="headerlink" href="#d" title="このヘッドラインへのパーマリンク">¶</a></h2>
94 <p>ソースコード:</p>
95 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
96         <span class="k">load</span> <span class="s">&quot;gamelib.ring&quot;</span>             <span class="c"># RingAllegro ライブラリ</span>
97         <span class="k">load</span> <span class="s">&quot;opengl21lib.ring&quot;</span>         <span class="c"># RingOpenGL  ライブラリ</span>
98
99 <span class="c">#==============================================================</span>
100 <span class="c"># macOS への対応</span>
101         <span class="n">al_run_main</span><span class="p">()</span>
102         <span class="k">func</span> <span class="n">al_game_start</span>      <span class="c"># al_run_main() から呼び出されます。</span>
103                 <span class="n">main</span><span class="p">()</span>          <span class="c"># main 関数本体を呼び出します。</span>
104 <span class="c">#==============================================================</span>
105
106 <span class="k">func</span> <span class="n">main</span>
107
108         <span class="k">new</span> <span class="n">GraphicsApp</span> <span class="p">{</span>
109                 <span class="n">start</span><span class="p">()</span>
110         <span class="p">}</span>
111
112
113 <span class="k">class</span> <span class="n">GraphicsApp</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
114
115         <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Ring Cube&quot;</span>
116
117         <span class="n">bitmap</span> <span class="n">texture</span>
118
119         <span class="n">xrot</span> <span class="o">=</span> <span class="mf">0.0</span>
120         <span class="n">yrot</span> <span class="o">=</span> <span class="mf">0.0</span>
121         <span class="n">zrot</span> <span class="o">=</span> <span class="mf">0.0</span>
122
123         <span class="k">func</span> <span class="n">loadresources</span>
124
125                 <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;ring.bmp&quot;</span><span class="p">)</span>
126                 <span class="n">texture</span> <span class="o">=</span> <span class="n">al_get_opengl_texture</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
127
128         <span class="k">func</span> <span class="n">destroyResources</span>
129
130                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
131
132         <span class="k">func</span> <span class="n">drawScene</span>
133
134                 <span class="n">w</span> <span class="o">=</span> <span class="mi">800</span> <span class="n">h</span> <span class="o">=</span> <span class="mi">600</span>
135                 <span class="n">ratio</span> <span class="o">=</span>  <span class="n">w</span> <span class="o">/</span> <span class="n">h</span>
136
137                 <span class="n">glViewport</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span>
138                 <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_PROJECTION</span><span class="p">)</span>
139                 <span class="n">glLoadIdentity</span><span class="p">()</span>
140
141                 <span class="n">gluPerspective</span><span class="p">(</span><span class="mi">45</span><span class="p">,</span><span class="n">ratio</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">100</span><span class="p">)</span>
142                 <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_MODELVIEW</span><span class="p">)</span>
143                 <span class="n">glLoadIdentity</span><span class="p">()</span>
144
145                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">)</span>
146                 <span class="n">glShadeModel</span><span class="p">(</span><span class="n">GL_SMOOTH</span><span class="p">)</span>
147                 <span class="n">glClearColor</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
148                 <span class="n">glClearDepth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
149                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_DEPTH_TEST</span><span class="p">)</span>
150                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_CULL_FACE</span><span class="p">)</span>
151                 <span class="n">glDepthFunc</span><span class="p">(</span><span class="n">GL_LEQUAL</span><span class="p">)</span>
152                 <span class="n">glHint</span><span class="p">(</span><span class="n">GL_PERSPECTIVE_CORRECTION_HINT</span><span class="p">,</span> <span class="n">GL_NICEST</span><span class="p">)</span>
153
154                 <span class="n">glClear</span><span class="p">(</span><span class="n">GL_COLOR_BUFFER_BIT</span> <span class="o">|</span> <span class="n">GL_DEPTH_BUFFER_BIT</span><span class="p">)</span>
155                 <span class="n">glLoadIdentity</span><span class="p">()</span>
156                 <span class="n">glTranslatef</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="o">-</span><span class="mf">5.0</span><span class="p">)</span>
157
158                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">xrot</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span>
159                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">yrot</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span>
160                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">zrot</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">)</span>
161
162                 <span class="n">glBindTexture</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">,</span> <span class="n">texture</span><span class="p">)</span>
163
164                 <span class="n">glBegin</span><span class="p">(</span><span class="n">GL_QUADS</span><span class="p">)</span>
165                         <span class="o">//</span> <span class="n">前面</span>
166                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
167                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
168                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
169                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
170                         <span class="o">//</span> <span class="n">背面</span>
171                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
172                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
173                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
174                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
175                         <span class="o">//</span> <span class="n">上面</span>
176                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
177                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
178                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
179                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
180                         <span class="o">//</span> <span class="n">底面</span>
181                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
182                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
183                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
184                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
185                         <span class="o">//</span> <span class="n">右面</span>
186                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
187                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
188                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
189                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
190                         <span class="o">//</span> <span class="n">左面</span>
191                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
192                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
193                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
194                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
195                 <span class="n">glEnd</span><span class="p">()</span>
196
197                 <span class="n">xrot</span> <span class="o">+=</span> <span class="mf">0.3</span>
198                 <span class="n">yrot</span> <span class="o">+=</span> <span class="mf">0.2</span>
199                 <span class="n">zrot</span> <span class="o">+=</span> <span class="mf">0.4</span>
200
201
202 <span class="k">class</span> <span class="n">GraphicsAppBase</span>
203
204         <span class="n">display</span> <span class="n">event_queue</span> <span class="n">ev</span> <span class="n">timeout</span>
205         <span class="n">timer</span>  <span class="n">redraw</span>   <span class="o">=</span> <span class="kp">true</span>
206
207         <span class="n">FPS</span>             <span class="o">=</span> <span class="mi">60</span>
208
209         <span class="n">SCREEN_W</span>        <span class="o">=</span> <span class="mi">800</span>
210         <span class="n">SCREEN_H</span>        <span class="o">=</span> <span class="mi">600</span>
211
212         <span class="n">KEY_UP</span>          <span class="o">=</span> <span class="mi">1</span>
213         <span class="n">KEY_DOWN</span>        <span class="o">=</span> <span class="mi">2</span>
214         <span class="n">KEY_LEFT</span>        <span class="o">=</span> <span class="mi">3</span>
215         <span class="n">KEY_RIGHT</span>       <span class="o">=</span> <span class="mi">4</span>
216
217         <span class="n">Key</span> <span class="o">=</span> <span class="o">[</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="o">]</span>
218
219         <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Graphics Application&quot;</span>
220
221         <span class="k">func</span> <span class="n">start</span>
222
223                 <span class="n">SetUp</span><span class="p">()</span>
224                 <span class="n">loadResources</span><span class="p">()</span>
225                 <span class="n">eventsLoop</span><span class="p">()</span>
226                 <span class="n">destroy</span><span class="p">()</span>
227
228         <span class="k">func</span> <span class="n">setup</span>
229
230                 <span class="n">al_init</span><span class="p">()</span>
231                 <span class="n">al_init_image_addon</span><span class="p">()</span>
232                 <span class="n">al_set_new_display_flags</span><span class="p">(</span><span class="n">ALLEGRO_OPENGL</span><span class="p">)</span>
233                 <span class="n">display</span> <span class="o">=</span> <span class="n">al_create_display</span><span class="p">(</span><span class="n">SCREEN_W</span><span class="p">,</span><span class="n">SCREEN_H</span><span class="p">)</span>
234                 <span class="n">al_set_Window_title</span><span class="p">(</span><span class="n">display</span><span class="p">,</span><span class="n">TITLE</span><span class="p">)</span>
235                 <span class="n">al_clear_to_color</span><span class="p">(</span><span class="n">al_map_rgb</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
236                 <span class="n">event_queue</span> <span class="o">=</span> <span class="n">al_create_event_queue</span><span class="p">()</span>
237                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
238                         <span class="n">al_get_display_event_source</span><span class="p">(</span><span class="n">display</span><span class="p">))</span>
239                 <span class="n">ev</span> <span class="o">=</span> <span class="n">al_new_allegro_event</span><span class="p">()</span>
240                 <span class="n">timeout</span> <span class="o">=</span> <span class="n">al_new_allegro_timeout</span><span class="p">()</span>
241                 <span class="n">al_init_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mf">0.06</span><span class="p">)</span>
242                 <span class="n">timer</span> <span class="o">=</span> <span class="n">al_create_timer</span><span class="p">(</span><span class="mf">1.0</span> <span class="o">/</span> <span class="n">FPS</span><span class="p">)</span>
243                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
244                         <span class="n">al_get_timer_event_source</span><span class="p">(</span><span class="n">timer</span><span class="p">))</span>
245                 <span class="n">al_start_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
246                 <span class="n">al_install_mouse</span><span class="p">()</span>
247                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
248                         <span class="n">al_get_mouse_event_source</span><span class="p">())</span>
249                 <span class="n">al_install_keyboard</span><span class="p">()</span>
250                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
251                         <span class="n">al_get_keyboard_event_source</span><span class="p">())</span>
252
253         <span class="k">func</span> <span class="n">eventsLoop</span>
254
255                 <span class="k">while</span> <span class="kp">true</span>
256                         <span class="n">al_init_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mf">0.06</span><span class="p">)</span>
257                         <span class="n">al_wait_for_event_until</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span> <span class="n">ev</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
258                         <span class="k">switch</span> <span class="n">al_get_allegro_event_type</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
259                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_DISPLAY_CLOSE</span>
260                                 <span class="k">exit</span>
261                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_TIMER</span>
262                                 <span class="n">redraw</span> <span class="o">=</span> <span class="kp">true</span>
263                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_AXES</span>
264                                 <span class="n">mouse_x</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_x</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
265                                 <span class="n">mouse_y</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_y</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
266                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span>
267                                 <span class="n">mouse_x</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_x</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
268                                 <span class="n">mouse_y</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_y</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
269                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_BUTTON_UP</span>
270                                 <span class="k">exit</span>
271                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_DOWN</span>
272                                 <span class="k">switch</span> <span class="n">al_get_allegro_event_keyboard_keycode</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
273                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
274                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_UP</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
275                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
276                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_DOWN</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
277                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
278                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_LEFT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
279                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
280                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_RIGHT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
281                                 <span class="k">off</span>
282                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_UP</span>
283                                 <span class="k">switch</span> <span class="n">al_get_allegro_event_keyboard_keycode</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
284                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
285                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_UP</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
286                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
287                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_DOWN</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
288                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
289                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_LEFT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
290                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
291                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_RIGHT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
292                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_ESCAPE</span>
293                                                 <span class="k">exit</span>
294                                 <span class="k">off</span>
295                         <span class="k">off</span>
296                         <span class="k">if</span> <span class="n">redraw</span> <span class="ow">and</span> <span class="n">al_is_event_queue_empty</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
297                                 <span class="n">redraw</span> <span class="o">=</span> <span class="kp">false</span>
298                                 <span class="n">drawScene</span><span class="p">()</span>
299                                 <span class="n">al_flip_display</span><span class="p">()</span>
300                         <span class="k">ok</span>
301                         <span class="n">callgc</span><span class="p">()</span>
302                 <span class="k">end</span>
303
304         <span class="k">func</span> <span class="n">destroy</span>
305
306                 <span class="n">destroyResources</span><span class="p">()</span>
307                 <span class="n">al_destroy_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
308                 <span class="n">al_destroy_allegro_event</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
309                 <span class="n">al_destroy_allegro_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
310                 <span class="n">al_destroy_event_queue</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
311                 <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
312                 <span class="n">al_exit</span><span class="p">()</span>
313
314         <span class="k">func</span> <span class="n">loadresources</span>
315
316         <span class="k">func</span> <span class="n">drawScene</span>
317
318         <span class="k">func</span> <span class="n">destroyResources</span>
319 </pre></div>
320 </div>
321 <p>スクリーンショット:</p>
322 <img alt="Ring Cube" src="_images/ringcube3d.png" />
323 </div>
324 <div class="section" id="index-2">
325 <span id="id1"></span><h2>複数の立方体<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
326 <p>スクリーンショット:</p>
327 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
328         <span class="k">load</span> <span class="s">&quot;gamelib.ring&quot;</span>             <span class="c"># RingAllegro ライブラリ</span>
329         <span class="k">load</span> <span class="s">&quot;opengl21lib.ring&quot;</span>         <span class="c"># RingOpenGL ライブラリ</span>
330
331 <span class="c">#==============================================================</span>
332 <span class="c"># macOS への対応</span>
333         <span class="n">al_run_main</span><span class="p">()</span>
334         <span class="k">func</span> <span class="n">al_game_start</span>      <span class="c"># al_run_main() により呼び出されます。</span>
335                 <span class="n">main</span><span class="p">()</span>          <span class="c"># main 関数本体を呼び出します。</span>
336 <span class="c">#==============================================================</span>
337
338
339 <span class="k">func</span> <span class="n">main</span>
340
341         <span class="k">new</span> <span class="n">GraphicsApp</span> <span class="p">{</span>
342                 <span class="n">start</span><span class="p">()</span>
343         <span class="p">}</span>
344
345
346 <span class="k">class</span> <span class="n">GraphicsApp</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
347
348         <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Many Cubes&quot;</span>
349
350         <span class="n">bitmap</span> <span class="n">bitmap2</span> <span class="n">bitmap3</span>
351         <span class="n">texture</span> <span class="n">texture2</span> <span class="n">texture3</span>
352
353         <span class="n">fps</span> <span class="o">=</span> <span class="mi">120</span>
354         <span class="n">xrot</span> <span class="o">=</span> <span class="mf">0.0</span>
355         <span class="n">yrot</span> <span class="o">=</span> <span class="mf">0.0</span>
356         <span class="n">zrot</span> <span class="o">=</span> <span class="mf">0.0</span>
357
358         <span class="n">nPerspective</span> <span class="o">=</span> <span class="mi">100</span>
359
360         <span class="k">func</span> <span class="n">loadresources</span>
361
362                 <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;sky1.jpg&quot;</span><span class="p">)</span>
363                 <span class="n">texture</span> <span class="o">=</span> <span class="n">al_get_opengl_texture</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
364
365                 <span class="n">bitmap2</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;sky2.jpg&quot;</span><span class="p">)</span>
366                 <span class="n">texture2</span> <span class="o">=</span> <span class="n">al_get_opengl_texture</span><span class="p">(</span><span class="n">bitmap2</span><span class="p">)</span>
367
368                 <span class="n">bitmap3</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;sky3.jpg&quot;</span><span class="p">)</span>
369                 <span class="n">texture3</span> <span class="o">=</span> <span class="n">al_get_opengl_texture</span><span class="p">(</span><span class="n">bitmap3</span><span class="p">)</span>
370
371         <span class="k">func</span> <span class="n">destroyResources</span>
372
373                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
374                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap2</span><span class="p">)</span>
375                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap3</span><span class="p">)</span>
376
377         <span class="k">func</span> <span class="n">drawScene</span>
378
379                 <span class="n">prepare</span><span class="p">()</span>
380                 <span class="n">cubes</span><span class="p">()</span>
381                 <span class="n">rotate</span><span class="p">()</span>
382
383         <span class="k">func</span> <span class="n">Prepare</span>
384                 <span class="n">w</span> <span class="o">=</span> <span class="mi">800</span> <span class="n">h</span> <span class="o">=</span> <span class="mi">600</span>
385                 <span class="n">ratio</span> <span class="o">=</span>  <span class="n">w</span> <span class="o">/</span> <span class="n">h</span>
386                 <span class="n">glViewport</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span>
387                 <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_PROJECTION</span><span class="p">)</span>
388                 <span class="n">glLoadIdentity</span><span class="p">()</span>
389                 <span class="n">gluPerspective</span><span class="p">(</span><span class="o">-</span><span class="n">nPerspective</span><span class="p">,</span><span class="n">ratio</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="n">nPerspective</span><span class="p">)</span>
390                 <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_MODELVIEW</span><span class="p">)</span>
391                 <span class="n">glLoadIdentity</span><span class="p">()</span>
392                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">)</span>
393                 <span class="n">glShadeModel</span><span class="p">(</span><span class="n">GL_SMOOTH</span><span class="p">)</span>
394                 <span class="n">glClearColor</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
395                 <span class="n">glClearDepth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
396                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_DEPTH_TEST</span><span class="p">)</span>
397                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_CULL_FACE</span><span class="p">)</span>
398                 <span class="n">glDepthFunc</span><span class="p">(</span><span class="n">GL_LEQUAL</span><span class="p">)</span>
399                 <span class="n">glHint</span><span class="p">(</span><span class="n">GL_PERSPECTIVE_CORRECTION_HINT</span><span class="p">,</span> <span class="n">GL_NICEST</span><span class="p">)</span>
400                 <span class="n">glClear</span><span class="p">(</span><span class="n">GL_COLOR_BUFFER_BIT</span> <span class="o">|</span> <span class="n">GL_DEPTH_BUFFER_BIT</span><span class="p">)</span>
401
402         <span class="k">func</span> <span class="n">Cubes</span>
403                 <span class="n">cube</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="o">-</span><span class="mf">3.4</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky1</span><span class="p">)</span>
404                 <span class="n">cube</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky1</span><span class="p">)</span>
405                 <span class="n">cube</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="o">-</span><span class="mi">3</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky1</span><span class="p">)</span>
406                 <span class="n">cube</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky2</span><span class="p">)</span>
407                 <span class="n">cube</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky2</span><span class="p">)</span>
408                 <span class="n">cube</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mf">0.5</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky2</span><span class="p">)</span>
409                 <span class="n">cube</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky3</span><span class="p">)</span>
410                 <span class="n">cube</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky3</span><span class="p">)</span>
411                 <span class="n">cube</span><span class="p">(</span><span class="o">-</span><span class="mi">5</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="o">-</span><span class="mi">5</span><span class="p">,:</span><span class="n">sky3</span><span class="p">)</span>
412
413         <span class="k">func</span> <span class="n">Rotate</span>
414                 <span class="n">xrot</span> <span class="o">+=</span> <span class="mf">0.3</span> <span class="o">*</span> <span class="mi">5</span>
415                 <span class="n">yrot</span> <span class="o">+=</span> <span class="mf">0.2</span> <span class="o">*</span> <span class="mi">5</span>
416                 <span class="n">zrot</span> <span class="o">+=</span> <span class="mf">0.4</span> <span class="o">*</span> <span class="mi">5</span>
417                 <span class="n">nPerspective</span> <span class="o">+=</span> <span class="mf">0.5</span>
418
419
420         <span class="k">func</span> <span class="n">cube</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="n">nTexture</span><span class="p">)</span>
421                 <span class="n">glLoadIdentity</span><span class="p">()</span>
422                 <span class="n">glTranslatef</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">)</span>
423                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">xrot</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span>
424                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">yrot</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span>
425                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">zrot</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">)</span>
426                 <span class="n">drawcube</span><span class="p">(</span><span class="n">nTexture</span><span class="p">)</span>
427
428         <span class="k">func</span> <span class="n">drawcube</span><span class="p">(</span><span class="n">cTexture</span><span class="p">)</span>
429
430                 <span class="k">switch</span> <span class="n">cTexture</span>
431                         <span class="k">on</span> <span class="p">:</span><span class="n">sky1</span>
432                                 <span class="n">glBindTexture</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">,</span> <span class="n">texture</span><span class="p">)</span>
433                         <span class="k">on</span> <span class="p">:</span><span class="n">sky2</span>
434                                 <span class="n">glBindTexture</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">,</span> <span class="n">texture2</span><span class="p">)</span>
435                         <span class="k">on</span> <span class="p">:</span><span class="n">sky3</span>
436                                 <span class="n">glBindTexture</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">,</span> <span class="n">texture3</span><span class="p">)</span>
437                 <span class="k">off</span>
438
439
440                 <span class="n">glBegin</span><span class="p">(</span><span class="n">GL_QUADS</span><span class="p">)</span>
441                         <span class="o">//</span> <span class="n">前面</span>
442                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
443                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
444                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
445                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
446                         <span class="o">//</span> <span class="n">背面</span>
447                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
448                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
449                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
450                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
451                         <span class="o">//</span> <span class="n">上面</span>
452                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
453                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
454                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
455                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
456                         <span class="o">//</span> <span class="n">底面</span>
457                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
458                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
459                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
460                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
461
462                         <span class="o">//</span> <span class="n">右面</span>
463                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
464                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
465                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
466                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
467
468                         <span class="o">//</span> <span class="n">左面</span>
469                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
470                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
471                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
472                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
473                 <span class="n">glEnd</span><span class="p">()</span>
474
475
476 <span class="k">class</span> <span class="n">GraphicsAppBase</span>
477
478         <span class="n">display</span> <span class="n">event_queue</span> <span class="n">ev</span> <span class="n">timeout</span>
479         <span class="n">timer</span>  <span class="n">redraw</span>   <span class="o">=</span> <span class="kp">true</span>
480
481         <span class="n">FPS</span>             <span class="o">=</span> <span class="mi">60</span>
482
483         <span class="n">SCREEN_W</span>        <span class="o">=</span> <span class="mi">800</span>
484         <span class="n">SCREEN_H</span>        <span class="o">=</span> <span class="mi">600</span>
485
486         <span class="n">KEY_UP</span>          <span class="o">=</span> <span class="mi">1</span>
487         <span class="n">KEY_DOWN</span>        <span class="o">=</span> <span class="mi">2</span>
488         <span class="n">KEY_LEFT</span>        <span class="o">=</span> <span class="mi">3</span>
489         <span class="n">KEY_RIGHT</span>       <span class="o">=</span> <span class="mi">4</span>
490
491         <span class="n">Key</span> <span class="o">=</span> <span class="o">[</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="o">]</span>
492
493         <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Graphics Application&quot;</span>
494
495         <span class="k">func</span> <span class="n">start</span>
496
497                 <span class="n">SetUp</span><span class="p">()</span>
498                 <span class="n">loadResources</span><span class="p">()</span>
499                 <span class="n">eventsLoop</span><span class="p">()</span>
500                 <span class="n">destroy</span><span class="p">()</span>
501
502         <span class="k">func</span> <span class="n">setup</span>
503
504                 <span class="n">al_init</span><span class="p">()</span>
505                 <span class="n">al_init_image_addon</span><span class="p">()</span>
506                 <span class="n">al_set_new_display_flags</span><span class="p">(</span><span class="n">ALLEGRO_OPENGL</span><span class="p">)</span>
507                 <span class="n">display</span> <span class="o">=</span> <span class="n">al_create_display</span><span class="p">(</span><span class="n">SCREEN_W</span><span class="p">,</span><span class="n">SCREEN_H</span><span class="p">)</span>
508                 <span class="n">al_set_Window_title</span><span class="p">(</span><span class="n">display</span><span class="p">,</span><span class="n">TITLE</span><span class="p">)</span>
509                 <span class="n">al_clear_to_color</span><span class="p">(</span><span class="n">al_map_rgb</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
510                 <span class="n">event_queue</span> <span class="o">=</span> <span class="n">al_create_event_queue</span><span class="p">()</span>
511                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
512                         <span class="n">al_get_display_event_source</span><span class="p">(</span><span class="n">display</span><span class="p">))</span>
513                 <span class="n">ev</span> <span class="o">=</span> <span class="n">al_new_allegro_event</span><span class="p">()</span>
514                 <span class="n">timeout</span> <span class="o">=</span> <span class="n">al_new_allegro_timeout</span><span class="p">()</span>
515                 <span class="n">al_init_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mf">0.06</span><span class="p">)</span>
516                 <span class="n">timer</span> <span class="o">=</span> <span class="n">al_create_timer</span><span class="p">(</span><span class="mf">1.0</span> <span class="o">/</span> <span class="n">FPS</span><span class="p">)</span>
517                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
518                         <span class="n">al_get_timer_event_source</span><span class="p">(</span><span class="n">timer</span><span class="p">))</span>
519                 <span class="n">al_start_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
520                 <span class="n">al_install_mouse</span><span class="p">()</span>
521                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
522                         <span class="n">al_get_mouse_event_source</span><span class="p">())</span>
523                 <span class="n">al_install_keyboard</span><span class="p">()</span>
524                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
525                         <span class="n">al_get_keyboard_event_source</span><span class="p">())</span>
526
527         <span class="k">func</span> <span class="n">eventsLoop</span>
528
529                 <span class="k">while</span> <span class="kp">true</span>
530                         <span class="n">al_init_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mf">0.06</span><span class="p">)</span>
531                         <span class="n">al_wait_for_event_until</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span> <span class="n">ev</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
532                         <span class="k">switch</span> <span class="n">al_get_allegro_event_type</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
533                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_DISPLAY_CLOSE</span>
534                                 <span class="k">exit</span>
535                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_TIMER</span>
536                                 <span class="n">redraw</span> <span class="o">=</span> <span class="kp">true</span>
537                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_AXES</span>
538                                 <span class="n">mouse_x</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_x</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
539                                 <span class="n">mouse_y</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_y</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
540                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span>
541                                 <span class="n">mouse_x</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_x</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
542                                 <span class="n">mouse_y</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_y</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
543                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_BUTTON_UP</span>
544                                 <span class="k">exit</span>
545                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_DOWN</span>
546                                 <span class="k">switch</span> <span class="n">al_get_allegro_event_keyboard_keycode</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
547                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
548                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_UP</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
549                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
550                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_DOWN</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
551                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
552                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_LEFT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
553                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
554                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_RIGHT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
555                                 <span class="k">off</span>
556                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_UP</span>
557                                 <span class="k">switch</span> <span class="n">al_get_allegro_event_keyboard_keycode</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
558                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
559                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_UP</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
560                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
561                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_DOWN</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
562                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
563                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_LEFT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
564                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
565                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_RIGHT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
566                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_ESCAPE</span>
567                                                 <span class="k">exit</span>
568                                 <span class="k">off</span>
569                         <span class="k">off</span>
570                         <span class="k">if</span> <span class="n">redraw</span> <span class="ow">and</span> <span class="n">al_is_event_queue_empty</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
571                                 <span class="n">redraw</span> <span class="o">=</span> <span class="kp">false</span>
572                                 <span class="n">drawScene</span><span class="p">()</span>
573                                 <span class="n">al_flip_display</span><span class="p">()</span>
574                         <span class="k">ok</span>
575                         <span class="n">callgc</span><span class="p">()</span>
576                 <span class="k">end</span>
577
578         <span class="k">func</span> <span class="n">destroy</span>
579
580                 <span class="n">destroyResources</span><span class="p">()</span>
581                 <span class="n">al_destroy_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
582                 <span class="n">al_destroy_allegro_event</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
583                 <span class="n">al_destroy_allegro_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
584                 <span class="n">al_destroy_event_queue</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
585                 <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
586                 <span class="n">al_exit</span><span class="p">()</span>
587
588         <span class="k">func</span> <span class="n">loadresources</span>
589
590         <span class="k">func</span> <span class="n">drawScene</span>
591
592         <span class="k">func</span> <span class="n">destroyResources</span>
593 </pre></div>
594 </div>
595 <p>スクリーンショット:</p>
596 <img alt="複数の立方体" src="_images/manycubes.png" />
597 </div>
598 <div class="section" id="tictactoe-3d">
599 <span id="index-3"></span><h2>TicTacToe 3D ゲーム<a class="headerlink" href="#tictactoe-3d" title="このヘッドラインへのパーマリンク">¶</a></h2>
600 <p>ソースコード:</p>
601 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
602         <span class="k">load</span> <span class="s">&quot;gamelib.ring&quot;</span>             <span class="c"># RingAllegro ライブラリ</span>
603         <span class="k">load</span> <span class="s">&quot;opengl21lib.ring&quot;</span>         <span class="c"># RingOpenGL ライブラリ</span>
604
605 <span class="c">#==============================================================</span>
606 <span class="c"># macOS への対応</span>
607         <span class="n">al_run_main</span><span class="p">()</span>
608         <span class="k">func</span> <span class="n">al_game_start</span>      <span class="c"># al_run_main() により呼び出されます。</span>
609                 <span class="n">main</span><span class="p">()</span>          <span class="c"># main 関数本体を呼び出します。</span>
610 <span class="c">#==============================================================</span>
611
612 <span class="k">func</span> <span class="n">main</span>
613         <span class="k">new</span> <span class="n">TicTacToe3D</span> <span class="p">{</span>
614                 <span class="n">start</span><span class="p">()</span>
615         <span class="p">}</span>
616
617 <span class="k">class</span> <span class="n">TicTacToe3D</span> <span class="k">from</span> <span class="n">GameLogic</span>
618
619         <span class="n">FPS</span> <span class="o">=</span> <span class="mi">60</span>
620         <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;TicTacToe 3D&quot;</span>
621
622         <span class="n">oBackground</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameBackground</span>
623         <span class="n">oGameSound</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameSound</span>
624         <span class="n">oGameCube</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameCube</span>
625         <span class="n">oGameOver</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameOver</span>
626         <span class="n">oGameInterface</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameInterface</span>
627
628         <span class="k">func</span> <span class="n">loadresources</span>
629                 <span class="n">oGameOver</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
630                 <span class="n">oGameSound</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
631                 <span class="n">oBackGround</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
632                 <span class="n">oGameCube</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
633
634         <span class="k">func</span> <span class="n">destroyResources</span>
635                 <span class="n">oGameOver</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
636                 <span class="n">oGameSound</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
637                 <span class="n">oBackGround</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
638                 <span class="n">oGameCube</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
639
640         <span class="k">func</span> <span class="n">drawScene</span>
641                 <span class="n">oBackground</span><span class="p">.</span><span class="n">update</span><span class="p">()</span>
642                 <span class="n">oGameInterface</span><span class="p">.</span><span class="n">update</span><span class="p">(</span><span class="n">self</span><span class="p">)</span>
643
644         <span class="k">func</span> <span class="n">MouseClickEvent</span>
645                 <span class="n">oGameInterface</span><span class="p">.</span><span class="n">MouseClickEvent</span><span class="p">(</span><span class="n">self</span><span class="p">)</span>
646
647 <span class="k">class</span> <span class="n">GameInterface</span>
648
649         <span class="k">func</span> <span class="n">Update</span> <span class="n">oGame</span>
650                 <span class="n">prepare</span><span class="p">()</span>
651                 <span class="n">cubes</span><span class="p">(</span><span class="n">oGame</span><span class="p">)</span>
652
653         <span class="k">func</span> <span class="n">Prepare</span>
654                 <span class="n">w</span> <span class="o">=</span> <span class="mi">1024</span> <span class="n">h</span> <span class="o">=</span> <span class="mi">768</span>
655                 <span class="n">ratio</span> <span class="o">=</span>  <span class="n">w</span> <span class="o">/</span> <span class="n">h</span>
656                 <span class="n">glViewport</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">)</span>
657                 <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_PROJECTION</span><span class="p">)</span>
658                 <span class="n">glLoadIdentity</span><span class="p">()</span>
659                 <span class="n">gluPerspective</span><span class="p">(</span><span class="o">-</span><span class="mi">120</span><span class="p">,</span><span class="n">ratio</span><span class="p">,</span><span class="mi">1</span><span class="p">,</span><span class="mi">120</span><span class="p">)</span>
660                 <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_MODELVIEW</span><span class="p">)</span>
661                 <span class="n">glLoadIdentity</span><span class="p">()</span>
662                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">)</span>
663                 <span class="n">glShadeModel</span><span class="p">(</span><span class="n">GL_SMOOTH</span><span class="p">)</span>
664                 <span class="n">glClearColor</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
665                 <span class="n">glClearDepth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
666                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_DEPTH_TEST</span><span class="p">)</span>
667                 <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_CULL_FACE</span><span class="p">)</span>
668                 <span class="n">glDepthFunc</span><span class="p">(</span><span class="n">GL_LEQUAL</span><span class="p">)</span>
669                 <span class="n">glHint</span><span class="p">(</span><span class="n">GL_PERSPECTIVE_CORRECTION_HINT</span><span class="p">,</span> <span class="n">GL_NICEST</span><span class="p">)</span>
670
671         <span class="k">func</span> <span class="n">Cubes</span> <span class="n">oGame</span>
672                 <span class="n">oGame</span><span class="p">.</span><span class="n">oGameCube</span> <span class="p">{</span>
673                         <span class="n">aGameMap</span> <span class="o">=</span> <span class="n">oGame</span><span class="p">.</span><span class="n">aGameMap</span>
674                         <span class="n">cube</span><span class="p">(</span> <span class="mi">5</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">3</span> <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">1</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span> <span class="p">)</span>
675                         <span class="n">cube</span><span class="p">(</span> <span class="mi">0</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">3</span> <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">1</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span> <span class="p">)</span>
676                         <span class="n">cube</span><span class="p">(</span> <span class="o">-</span><span class="mi">5</span> <span class="p">,</span> <span class="o">-</span><span class="mi">3</span> <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">1</span><span class="o">][</span><span class="mi">3</span><span class="o">]</span> <span class="p">)</span>
677                         <span class="n">cube</span><span class="p">(</span> <span class="mi">5</span>  <span class="p">,</span> <span class="mi">1</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">2</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span> <span class="p">)</span>
678                         <span class="n">cube</span><span class="p">(</span> <span class="mi">0</span>  <span class="p">,</span> <span class="mi">1</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">2</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span> <span class="p">)</span>
679                         <span class="n">cube</span><span class="p">(</span> <span class="o">-</span><span class="mi">5</span> <span class="p">,</span> <span class="mi">1</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">2</span><span class="o">][</span><span class="mi">3</span><span class="o">]</span> <span class="p">)</span>
680                         <span class="n">cube</span><span class="p">(</span> <span class="mi">5</span>  <span class="p">,</span> <span class="mi">5</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">3</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span> <span class="p">)</span>
681                         <span class="n">cube</span><span class="p">(</span> <span class="mi">0</span>  <span class="p">,</span> <span class="mi">5</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">3</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span> <span class="p">)</span>
682                         <span class="n">cube</span><span class="p">(</span> <span class="o">-</span><span class="mi">5</span> <span class="p">,</span> <span class="mi">5</span>  <span class="p">,</span> <span class="o">-</span><span class="mi">5</span>  <span class="p">,</span> <span class="n">aGameMap</span><span class="o">[</span><span class="mi">3</span><span class="o">][</span><span class="mi">3</span><span class="o">]</span> <span class="p">)</span>
683                         <span class="n">rotate</span><span class="p">()</span>
684                 <span class="p">}</span>
685
686         <span class="k">func</span> <span class="n">MouseClickEvent</span> <span class="n">oGame</span>
687                 <span class="n">oGame</span> <span class="p">{</span>
688                         <span class="n">aBtn</span> <span class="o">=</span> <span class="n">Point2Button</span><span class="p">(</span><span class="n">Mouse_X</span><span class="p">,</span><span class="n">Mouse_Y</span><span class="p">)</span>
689                         <span class="n">nRow</span> <span class="o">=</span> <span class="n">aBtn</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span>
690                         <span class="n">nCol</span> <span class="o">=</span> <span class="n">aBtn</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span>
691                         <span class="k">if</span> <span class="n">nRow</span> <span class="o">!=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">nCol</span> <span class="o">!=</span> <span class="mi">0</span>
692                                 <span class="k">if</span> <span class="n">aGameMap</span><span class="o">[</span><span class="n">nRow</span><span class="o">][</span><span class="n">nCol</span><span class="o">]</span> <span class="o">=</span> <span class="p">:</span><span class="n">n</span>
693                                         <span class="n">aGameMap</span><span class="o">[</span><span class="n">nRow</span><span class="o">][</span><span class="n">nCol</span><span class="o">]</span> <span class="o">=</span> <span class="n">cActivePlayer</span>
694                                         <span class="n">ChangeActivePlayer</span><span class="p">()</span>
695                                         <span class="n">CheckGameOver</span><span class="p">()</span>
696                                 <span class="k">ok</span>
697                         <span class="k">ok</span>
698                 <span class="p">}</span>
699
700 <span class="k">Class</span> <span class="n">GameLogic</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
701
702         <span class="n">aGameMap</span> <span class="o">=</span> <span class="o">[</span>
703                 <span class="o">[</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="o">]</span> <span class="p">,</span>
704                 <span class="o">[</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="o">]</span> <span class="p">,</span>
705                 <span class="o">[</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="o">]</span>
706         <span class="o">]</span>
707
708         <span class="n">aGameButtons</span> <span class="o">=</span> <span class="o">[</span>                        <span class="c"># x1,y1,x2,y2</span>
709                 <span class="o">[</span><span class="mi">176</span><span class="p">,</span><span class="mi">88</span><span class="p">,</span><span class="mi">375</span><span class="p">,</span><span class="mi">261</span><span class="o">]</span><span class="p">,</span>               <span class="c"># [1,1]</span>
710                 <span class="o">[</span><span class="mi">423</span><span class="p">,</span><span class="mi">88</span><span class="p">,</span><span class="mi">591</span><span class="p">,</span><span class="mi">261</span><span class="o">]</span><span class="p">,</span>               <span class="c"># [1,2]</span>
711                 <span class="o">[</span><span class="mi">645</span><span class="p">,</span><span class="mi">88</span><span class="p">,</span><span class="mi">876</span><span class="p">,</span><span class="mi">261</span><span class="o">]</span><span class="p">,</span>               <span class="c"># [1,3]</span>
712                 <span class="o">[</span><span class="mi">176</span><span class="p">,</span><span class="mi">282</span><span class="p">,</span><span class="mi">375</span><span class="p">,</span><span class="mi">428</span><span class="o">]</span><span class="p">,</span>              <span class="c"># [2,1]</span>
713                 <span class="o">[</span><span class="mi">423</span><span class="p">,</span><span class="mi">282</span><span class="p">,</span><span class="mi">591</span><span class="p">,</span><span class="mi">428</span><span class="o">]</span><span class="p">,</span>              <span class="c"># [2,2]</span>
714                 <span class="o">[</span><span class="mi">645</span><span class="p">,</span><span class="mi">282</span><span class="p">,</span><span class="mi">876</span><span class="p">,</span><span class="mi">428</span><span class="o">]</span><span class="p">,</span>              <span class="c"># [2,3]</span>
715                 <span class="o">[</span><span class="mi">176</span><span class="p">,</span><span class="mi">454</span><span class="p">,</span><span class="mi">375</span><span class="p">,</span><span class="mi">678</span><span class="o">]</span><span class="p">,</span>              <span class="c"># [3,1]</span>
716                 <span class="o">[</span><span class="mi">423</span><span class="p">,</span><span class="mi">454</span><span class="p">,</span><span class="mi">591</span><span class="p">,</span><span class="mi">678</span><span class="o">]</span><span class="p">,</span>              <span class="c"># [3,2]</span>
717                 <span class="o">[</span><span class="mi">645</span><span class="p">,</span><span class="mi">454</span><span class="p">,</span><span class="mi">876</span><span class="p">,</span><span class="mi">678</span><span class="o">]</span>               <span class="c"># [3,3]</span>
718         <span class="o">]</span>
719
720         <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
721
722         <span class="k">func</span> <span class="n">point2button</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span>
723                 <span class="n">nRow</span> <span class="o">=</span> <span class="mi">0</span>
724                 <span class="n">nCol</span> <span class="o">=</span> <span class="mi">0</span>
725                 <span class="k">for</span> <span class="n">t</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">to</span> <span class="n">len</span><span class="p">(</span><span class="n">aGameButtons</span><span class="p">)</span>
726                         <span class="n">rect</span> <span class="o">=</span> <span class="n">aGameButtons</span><span class="o">[</span><span class="n">t</span><span class="o">]</span>
727                         <span class="k">if</span> <span class="n">x</span> <span class="o">&gt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="ow">and</span> <span class="n">x</span> <span class="o">&lt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span> <span class="ow">and</span>
728                            <span class="n">y</span> <span class="o">&gt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span> <span class="ow">and</span> <span class="n">y</span> <span class="o">&lt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">4</span><span class="o">]</span>
729                                         <span class="k">switch</span> <span class="n">t</span>
730                                                 <span class="k">on</span> <span class="mi">1</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">1</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">1</span>
731                                                 <span class="k">on</span> <span class="mi">2</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">1</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">2</span>
732                                                 <span class="k">on</span> <span class="mi">3</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">1</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">3</span>
733                                                 <span class="k">on</span> <span class="mi">4</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">2</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">1</span>
734                                                 <span class="k">on</span> <span class="mi">5</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">2</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">2</span>
735                                                 <span class="k">on</span> <span class="mi">6</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">2</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">3</span>
736                                                 <span class="k">on</span> <span class="mi">7</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">3</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">1</span>
737                                                 <span class="k">on</span> <span class="mi">8</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">3</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">2</span>
738                                                 <span class="k">on</span> <span class="mi">9</span>  <span class="n">nRow</span> <span class="o">=</span> <span class="mi">3</span>  <span class="n">nCol</span> <span class="o">=</span> <span class="mi">3</span>
739                                         <span class="k">off</span>
740                                         <span class="k">exit</span>
741                         <span class="k">ok</span>
742                 <span class="k">next</span>
743                 <span class="k">return</span> <span class="o">[</span><span class="n">nRow</span><span class="p">,</span><span class="n">nCol</span><span class="o">]</span>
744
745         <span class="k">func</span> <span class="n">ChangeActivePlayer</span><span class="p">()</span>
746                 <span class="k">if</span> <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
747                         <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">o</span>
748                 <span class="k">else</span>
749                         <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
750                 <span class="k">ok</span>
751
752         <span class="k">func</span> <span class="n">CheckGameOver</span>
753                 <span class="n">aList</span> <span class="o">=</span> <span class="o">[</span>
754                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">1</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span><span class="p">,</span>
755                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">1</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span><span class="p">,</span>
756                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">1</span><span class="o">][</span><span class="mi">3</span><span class="o">]</span><span class="p">,</span>
757                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">2</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span><span class="p">,</span>
758                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">2</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span><span class="p">,</span>
759                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">2</span><span class="o">][</span><span class="mi">3</span><span class="o">]</span><span class="p">,</span>
760                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">3</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span><span class="p">,</span>
761                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">3</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span><span class="p">,</span>
762                         <span class="n">aGameMap</span><span class="o">[</span><span class="mi">3</span><span class="o">][</span><span class="mi">3</span><span class="o">]</span>
763                 <span class="o">]</span>
764                 <span class="k">for</span> <span class="n">item</span> <span class="k">in</span> <span class="n">aList</span>
765                         <span class="k">switch</span> <span class="n">item</span>
766                                 <span class="k">on</span> <span class="p">:</span><span class="n">x</span>   <span class="n">item</span> <span class="o">=</span> <span class="mi">1</span>
767                                 <span class="k">on</span> <span class="p">:</span><span class="n">o</span>   <span class="n">item</span> <span class="o">=</span> <span class="mi">2</span>
768                                 <span class="k">on</span> <span class="p">:</span><span class="n">n</span>   <span class="n">item</span> <span class="o">=</span> <span class="mi">0</span>
769                         <span class="k">off</span>
770                 <span class="k">next</span>
771                 <span class="n">nStatus</span> <span class="o">=</span> <span class="n">CheckWinner</span><span class="p">(</span><span class="n">aList</span><span class="p">)</span>
772                 <span class="k">if</span> <span class="n">nStatus</span>
773                         <span class="n">oGameOver</span> <span class="p">{</span>
774                                 <span class="k">Switch</span> <span class="n">nStatus</span>
775                                         <span class="k">on</span> <span class="mi">1</span> <span class="n">Player1Win</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
776                                         <span class="k">on</span> <span class="mi">2</span> <span class="n">Player2Win</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
777                                         <span class="k">on</span> <span class="mi">3</span> <span class="n">NoOneWin</span><span class="p">(</span><span class="n">this</span><span class="p">)</span>
778                                 <span class="k">off</span>
779                         <span class="p">}</span>
780                         <span class="n">refreshGame</span><span class="p">()</span>
781                 <span class="k">ok</span>
782
783         <span class="k">func</span> <span class="n">refreshGame</span>
784                 <span class="n">aGameMap</span> <span class="o">=</span> <span class="o">[</span>
785                         <span class="o">[</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="o">]</span> <span class="p">,</span>
786                         <span class="o">[</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="o">]</span> <span class="p">,</span>
787                         <span class="o">[</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="p">,</span> <span class="p">:</span><span class="n">n</span> <span class="o">]</span>
788                 <span class="o">]</span>
789                 <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
790
791         <span class="k">func</span> <span class="n">CheckWinner</span> <span class="n">lst</span>
792                 <span class="o">//</span> <span class="n">垂直の確認</span>
793                 <span class="k">for</span> <span class="n">v</span><span class="o">=</span><span class="mi">1</span> <span class="k">to</span> <span class="mi">9</span> <span class="k">step</span> <span class="mi">3</span>
794                         <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">+</span><span class="mi">1</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">+</span><span class="mi">2</span><span class="o">]!=</span><span class="mi">0</span>
795                                 <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">+</span><span class="mi">1</span><span class="o">]</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">+</span><span class="mi">1</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">+</span><span class="mi">2</span><span class="o">]</span>
796                                         <span class="k">return</span> <span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">]</span>
797                                 <span class="k">ok</span>
798                         <span class="k">ok</span>
799                 <span class="k">next</span>
800                 <span class="o">//</span> <span class="n">水平</span>
801                 <span class="k">for</span> <span class="n">h</span><span class="o">=</span><span class="mi">1</span> <span class="k">to</span> <span class="mi">3</span>
802                         <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">+</span><span class="mi">3</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">+</span><span class="mi">6</span><span class="o">]!=</span><span class="mi">0</span>
803                                 <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">+</span><span class="mi">3</span><span class="o">]</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">+</span><span class="mi">3</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">+</span><span class="mi">6</span><span class="o">]</span>
804                                         <span class="k">return</span> <span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">]</span>
805                                 <span class="k">ok</span>
806                         <span class="k">ok</span>
807                 <span class="k">next</span>
808                 <span class="o">//</span> <span class="n">十字型</span>
809                 <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="mi">1</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="mi">5</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="mi">9</span><span class="o">]!=</span><span class="mi">0</span>
810                         <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="mi">1</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="mi">5</span><span class="o">]</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="mi">5</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="mi">9</span><span class="o">]</span> <span class="k">return</span> <span class="n">lst</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="k">ok</span>
811                 <span class="k">ok</span>
812                 <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="mi">3</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="mi">5</span><span class="o">]!=</span><span class="mi">0</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="mi">7</span><span class="o">]!=</span><span class="mi">0</span>
813                         <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="mi">3</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="mi">5</span><span class="o">]</span> <span class="ow">and</span> <span class="n">lst</span><span class="o">[</span><span class="mi">5</span><span class="o">]=</span><span class="n">lst</span><span class="o">[</span><span class="mi">7</span><span class="o">]</span> <span class="k">return</span> <span class="n">lst</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span> <span class="k">ok</span>
814                 <span class="k">ok</span>
815                 <span class="o">//</span> <span class="n">枕木型</span>
816                 <span class="n">tie</span><span class="o">=</span><span class="kp">true</span>
817                 <span class="k">for</span> <span class="n">i</span><span class="o">=</span><span class="mi">1</span> <span class="k">to</span> <span class="mi">9</span>
818                         <span class="k">if</span> <span class="n">lst</span><span class="o">[</span><span class="n">i</span><span class="o">]=</span><span class="mi">0</span> <span class="n">tie</span><span class="o">=</span><span class="kp">false</span> <span class="k">exit</span> <span class="k">ok</span>
819                 <span class="k">next</span>
820                 <span class="k">if</span> <span class="n">tie</span><span class="o">=</span><span class="kp">true</span> <span class="k">return</span> <span class="mi">3</span> <span class="k">ok</span> <span class="k">return</span> <span class="mi">0</span>
821
822
823
824 <span class="k">class</span> <span class="n">GameOver</span>
825
826         <span class="n">font</span> <span class="n">bitmap</span>
827
828         <span class="k">func</span> <span class="n">loadresources</span>
829                 <span class="n">font</span> <span class="o">=</span> <span class="n">al_load_ttf_font</span><span class="p">(</span><span class="s">&quot;font/pirulen.ttf&quot;</span><span class="p">,</span><span class="mi">54</span><span class="p">,</span><span class="mi">0</span> <span class="p">)</span>
830                 <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/ballon.png&quot;</span><span class="p">)</span>
831
832         <span class="k">func</span> <span class="n">destroyResources</span>
833                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
834                 <span class="n">al_destroy_font</span><span class="p">(</span><span class="n">font</span><span class="p">)</span>
835
836         <span class="k">func</span> <span class="n">Player1Win</span> <span class="n">oGame</span>
837                 <span class="n">showMsg</span><span class="p">(</span><span class="n">oGame</span><span class="p">,</span><span class="mi">80</span><span class="p">,</span><span class="mi">430</span><span class="p">,</span><span class="s">&quot;Good job X you won!&quot;</span><span class="p">)</span>
838
839         <span class="k">func</span> <span class="n">Player2Win</span> <span class="n">oGame</span>
840                 <span class="n">showMsg</span><span class="p">(</span><span class="n">oGame</span><span class="p">,</span><span class="mi">80</span><span class="p">,</span><span class="mi">430</span><span class="p">,</span><span class="s">&quot;Good job O you won!&quot;</span><span class="p">)</span>
841
842         <span class="k">func</span> <span class="n">NoOneWin</span> <span class="n">oGame</span>
843                 <span class="n">showMsg</span><span class="p">(</span><span class="n">oGame</span><span class="p">,</span><span class="mi">150</span><span class="p">,</span><span class="mi">430</span><span class="p">,</span><span class="s">&quot;Oh no it&#39;s a tie!&quot;</span><span class="p">)</span>
844
845         <span class="k">func</span> <span class="n">ShowMsg</span> <span class="n">oGame</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">cMsg</span>
846                 <span class="n">oGame</span> <span class="p">{</span>
847                         <span class="n">drawScene</span><span class="p">()</span>
848                         <span class="n">al_flip_display</span><span class="p">()</span>
849                         <span class="n">al_rest</span><span class="p">(</span><span class="mf">0.3</span><span class="p">)</span>
850                         <span class="n">newdisplay</span> <span class="o">=</span> <span class="n">al_create_display</span><span class="p">(</span><span class="n">SCREEN_W</span><span class="p">,</span><span class="n">SCREEN_H</span><span class="p">)</span>
851                         <span class="n">al_set_window_title</span><span class="p">(</span><span class="n">newdisplay</span><span class="p">,</span><span class="n">TITLE</span><span class="p">)</span>
852                         <span class="n">al_clear_to_color</span><span class="p">(</span><span class="n">al_map_rgb</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span><span class="mi">255</span><span class="p">,</span><span class="mi">255</span><span class="p">))</span>
853                         <span class="n">al_draw_bitmap</span><span class="p">(</span><span class="n">this</span><span class="p">.</span><span class="n">bitmap</span><span class="p">,</span><span class="mi">200</span><span class="p">,</span><span class="mi">50</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
854                         <span class="n">al_draw_text</span><span class="p">(</span><span class="n">this</span><span class="p">.</span><span class="n">font</span><span class="p">,</span>
855                                  <span class="n">al_map_rgb</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">255</span><span class="p">),</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span>
856                                  <span class="n">ALLEGRO_ALIGN_LEFT</span><span class="p">,</span><span class="n">cMsg</span><span class="p">)</span>
857                         <span class="n">al_flip_display</span><span class="p">()</span>
858                         <span class="n">al_rest</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
859                         <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">newdisplay</span><span class="p">)</span>
860                         <span class="n">al_set_target_backbuffer</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
861                 <span class="p">}</span>
862
863 <span class="k">class</span> <span class="n">GameCube</span>
864
865         <span class="n">bitmap</span> <span class="n">bitmap2</span> <span class="n">bitmap3</span>
866         <span class="n">textureX</span> <span class="n">textureO</span> <span class="n">textureN</span>
867
868         <span class="n">xrot</span> <span class="o">=</span> <span class="mf">0.0</span>
869         <span class="n">yrot</span> <span class="o">=</span> <span class="mf">0.0</span>
870         <span class="n">zrot</span> <span class="o">=</span> <span class="mf">0.0</span>
871
872         <span class="k">func</span> <span class="n">loadresources</span>
873                 <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/o.png&quot;</span><span class="p">)</span>
874                 <span class="n">textureO</span> <span class="o">=</span> <span class="n">al_get_opengl_texture</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
875                 <span class="n">bitmap2</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/x.png&quot;</span><span class="p">)</span>
876                 <span class="n">textureX</span> <span class="o">=</span> <span class="n">al_get_opengl_texture</span><span class="p">(</span><span class="n">bitmap2</span><span class="p">)</span>
877                 <span class="n">bitmap3</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/empty.png&quot;</span><span class="p">)</span>
878                 <span class="n">textureN</span> <span class="o">=</span> <span class="n">al_get_opengl_texture</span><span class="p">(</span><span class="n">bitmap3</span><span class="p">)</span>
879
880         <span class="k">func</span> <span class="n">destroyResources</span>
881                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
882                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap2</span><span class="p">)</span>
883                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap3</span><span class="p">)</span>
884
885         <span class="k">func</span> <span class="n">cube</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">,</span><span class="n">nTexture</span><span class="p">)</span>
886                 <span class="n">glLoadIdentity</span><span class="p">()</span>
887                 <span class="n">glTranslatef</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">z</span><span class="p">)</span>
888                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">xrot</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span>
889                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">yrot</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span>
890                 <span class="n">glRotatef</span><span class="p">(</span><span class="n">zrot</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">0.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">)</span>
891                 <span class="n">setCubeTexture</span><span class="p">(</span><span class="n">nTexture</span><span class="p">)</span>
892                 <span class="n">drawCube</span><span class="p">()</span>
893
894         <span class="k">func</span> <span class="n">setCubeTexture</span> <span class="n">cTexture</span>
895                 <span class="k">switch</span> <span class="n">cTexture</span>
896                         <span class="k">on</span> <span class="p">:</span><span class="n">x</span>
897                                 <span class="n">glBindTexture</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">,</span> <span class="n">textureX</span><span class="p">)</span>
898                         <span class="k">on</span> <span class="p">:</span><span class="n">o</span>
899                                 <span class="n">glBindTexture</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">,</span> <span class="n">textureO</span><span class="p">)</span>
900                         <span class="k">on</span> <span class="p">:</span><span class="n">n</span>
901                                 <span class="n">glBindTexture</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">,</span> <span class="n">textureN</span><span class="p">)</span>
902                 <span class="k">off</span>
903
904         <span class="k">func</span> <span class="n">Rotate</span>
905                 <span class="n">xrot</span> <span class="o">+=</span> <span class="mf">0.3</span> <span class="o">*</span> <span class="mi">5</span>
906                 <span class="n">yrot</span> <span class="o">+=</span> <span class="mf">0.2</span> <span class="o">*</span> <span class="mi">5</span>
907                 <span class="n">zrot</span> <span class="o">+=</span> <span class="mf">0.4</span> <span class="o">*</span> <span class="mi">5</span>
908
909         <span class="k">func</span> <span class="n">drawcube</span>
910                 <span class="n">glBegin</span><span class="p">(</span><span class="n">GL_QUADS</span><span class="p">)</span>
911                         <span class="o">//</span> <span class="n">前面</span>
912                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
913                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
914                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
915                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
916                         <span class="o">//</span> <span class="n">背面</span>
917                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
918                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
919                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
920                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
921                         <span class="o">//</span> <span class="n">上面</span>
922                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
923                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
924                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
925                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
926                         <span class="o">//</span> <span class="n">底面</span>
927                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
928                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
929                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
930                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
931
932                         <span class="o">//</span> <span class="n">右面</span>
933                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
934                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
935                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
936                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span> <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
937
938                         <span class="o">//</span> <span class="n">左面</span>
939                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
940                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
941                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">1.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">)</span>
942                         <span class="n">glTexCoord2f</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span> <span class="n">glVertex3f</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span>  <span class="mf">1.0</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.0</span><span class="p">)</span>
943                 <span class="n">glEnd</span><span class="p">()</span>
944
945
946 <span class="k">class</span> <span class="n">GameBackground</span>
947
948         <span class="n">nBackX</span> <span class="o">=</span> <span class="mi">0</span>
949         <span class="n">nBackY</span> <span class="o">=</span> <span class="mi">0</span>
950         <span class="n">nBackDiffx</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
951         <span class="n">nBackDiffy</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
952         <span class="n">nBackMotion</span> <span class="o">=</span> <span class="mi">1</span>
953         <span class="n">aBackMotionList</span> <span class="o">=</span> <span class="o">[</span>
954                 <span class="o">[</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span> <span class="o">]</span> <span class="p">,</span>            <span class="c"># 右下</span>
955                 <span class="o">[</span> <span class="mi">0</span> <span class="p">,</span> <span class="mi">1</span>  <span class="o">]</span> <span class="p">,</span>            <span class="c"># 上</span>
956                 <span class="o">[</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span> <span class="o">]</span> <span class="p">,</span>            <span class="c"># 右下</span>
957                 <span class="o">[</span> <span class="mi">0</span> <span class="p">,</span> <span class="mi">1</span>  <span class="o">]</span> <span class="p">,</span>            <span class="c"># 上</span>
958                 <span class="o">[</span> <span class="mi">1</span> <span class="p">,</span> <span class="o">-</span><span class="mi">1</span> <span class="o">]</span> <span class="p">,</span>            <span class="c"># 左下</span>
959                 <span class="o">[</span> <span class="mi">0</span> <span class="p">,</span> <span class="mi">1</span>  <span class="o">]</span> <span class="p">,</span>            <span class="c"># 上</span>
960                 <span class="o">[</span> <span class="mi">1</span> <span class="p">,</span> <span class="o">-</span><span class="mi">1</span> <span class="o">]</span> <span class="p">,</span>            <span class="c"># 左下</span>
961                 <span class="o">[</span> <span class="mi">0</span> <span class="p">,</span> <span class="mi">1</span>  <span class="o">]</span>                      <span class="c"># 上</span>
962         <span class="o">]</span>
963
964         <span class="n">bitmap</span>
965
966         <span class="k">func</span> <span class="n">Update</span>
967                 <span class="n">draw</span><span class="p">()</span>
968                 <span class="n">motion</span><span class="p">()</span>
969
970         <span class="k">func</span> <span class="n">draw</span>
971                 <span class="n">al_draw_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">,</span><span class="n">nBackX</span><span class="p">,</span><span class="n">nBackY</span><span class="p">,</span><span class="mi">1</span><span class="p">)</span>
972
973         <span class="k">func</span> <span class="n">motion</span>
974                 <span class="n">nBackX</span> <span class="o">+=</span> <span class="n">nBackDiffx</span>
975                 <span class="n">nBackY</span> <span class="o">+=</span> <span class="n">nBackDiffy</span>
976                 <span class="k">if</span> <span class="p">(</span><span class="n">nBackY</span> <span class="o">=</span> <span class="o">-</span><span class="mi">350</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">nBackY</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span>
977                         <span class="n">nBackMotion</span><span class="o">++</span>
978                         <span class="k">if</span> <span class="n">nBackMotion</span> <span class="o">&gt;</span> <span class="n">len</span><span class="p">(</span><span class="n">aBackMotionList</span><span class="p">)</span>
979                                 <span class="n">nBackMotion</span> <span class="o">=</span> <span class="mi">1</span>
980                         <span class="k">ok</span>
981                         <span class="n">nBackDiffx</span>  <span class="o">=</span> <span class="n">aBackMotionList</span><span class="o">[</span><span class="n">nBackMotion</span><span class="o">][</span><span class="mi">1</span><span class="o">]</span>
982                         <span class="n">nBackDiffy</span>  <span class="o">=</span> <span class="n">aBackMotionList</span><span class="o">[</span><span class="n">nBackMotion</span><span class="o">][</span><span class="mi">2</span><span class="o">]</span>
983                 <span class="k">ok</span>
984
985         <span class="k">func</span> <span class="n">loadResources</span>
986                 <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/back.jpg&quot;</span><span class="p">)</span>
987
988         <span class="k">func</span> <span class="n">destroyResources</span>
989                 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
990
991
992 <span class="k">class</span> <span class="n">GameSound</span>
993
994         <span class="n">sample</span> <span class="n">sampleid</span>
995
996         <span class="k">func</span> <span class="n">loadresources</span>
997                 <span class="n">sample</span> <span class="o">=</span> <span class="n">al_load_sample</span><span class="p">(</span> <span class="s">&quot;sound/music1.wav&quot;</span> <span class="p">)</span>
998                 <span class="n">sampleid</span> <span class="o">=</span> <span class="n">al_new_allegro_sample_id</span><span class="p">()</span>
999                 <span class="n">al_play_sample</span><span class="p">(</span><span class="n">sample</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">,</span> <span class="mf">0.0</span><span class="p">,</span><span class="mf">1.0</span><span class="p">,</span><span class="n">ALLEGRO_PLAYMODE_LOOP</span><span class="p">,</span><span class="n">sampleid</span><span class="p">)</span>
1000
1001         <span class="k">func</span> <span class="n">destroyResources</span>
1002                 <span class="n">al_destroy_allegro_sample_id</span><span class="p">(</span><span class="n">sampleid</span><span class="p">)</span>
1003                 <span class="n">al_destroy_sample</span><span class="p">(</span><span class="n">sample</span><span class="p">)</span>
1004
1005
1006 <span class="k">class</span> <span class="n">GraphicsAppBase</span>
1007
1008         <span class="n">display</span> <span class="n">event_queue</span> <span class="n">ev</span> <span class="n">timeout</span>
1009         <span class="n">timer</span>
1010         <span class="n">redraw</span>                  <span class="o">=</span> <span class="kp">true</span>
1011         <span class="n">FPS</span>                     <span class="o">=</span> <span class="mi">60</span>
1012         <span class="n">SCREEN_W</span>                <span class="o">=</span> <span class="mi">1024</span>
1013         <span class="n">SCREEN_H</span>                <span class="o">=</span> <span class="mi">700</span>
1014         <span class="n">KEY_UP</span>                  <span class="o">=</span> <span class="mi">1</span>
1015         <span class="n">KEY_DOWN</span>                <span class="o">=</span> <span class="mi">2</span>
1016         <span class="n">KEY_LEFT</span>                <span class="o">=</span> <span class="mi">3</span>
1017         <span class="n">KEY_RIGHT</span>               <span class="o">=</span> <span class="mi">4</span>
1018         <span class="n">Key</span>                     <span class="o">=</span> <span class="o">[</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="p">,</span><span class="kp">false</span><span class="o">]</span>
1019         <span class="n">Mouse_X</span>                 <span class="o">=</span> <span class="mi">0</span>
1020         <span class="n">Mouse_Y</span>                 <span class="o">=</span> <span class="mi">0</span>
1021         <span class="n">TITLE</span>                   <span class="o">=</span> <span class="s">&quot;Graphics Application&quot;</span>
1022         <span class="n">PRINT_MOUSE_XY</span>  <span class="o">=</span> <span class="kp">False</span>
1023
1024         <span class="k">func</span> <span class="n">start</span>
1025                 <span class="n">SetUp</span><span class="p">()</span>
1026                 <span class="n">loadResources</span><span class="p">()</span>
1027                 <span class="n">eventsLoop</span><span class="p">()</span>
1028                 <span class="n">destroy</span><span class="p">()</span>
1029
1030         <span class="k">func</span> <span class="n">setup</span>
1031                 <span class="n">al_init</span><span class="p">()</span>
1032                 <span class="n">al_init_font_addon</span><span class="p">()</span>
1033                 <span class="n">al_init_ttf_addon</span><span class="p">()</span>
1034                 <span class="n">al_init_image_addon</span><span class="p">()</span>
1035                 <span class="n">al_install_audio</span><span class="p">()</span>
1036                 <span class="n">al_init_acodec_addon</span><span class="p">()</span>
1037                 <span class="n">al_reserve_samples</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
1038                 <span class="n">al_set_new_display_flags</span><span class="p">(</span><span class="n">ALLEGRO_OPENGL</span><span class="p">)</span>
1039                 <span class="n">display</span> <span class="o">=</span> <span class="n">al_create_display</span><span class="p">(</span><span class="n">SCREEN_W</span><span class="p">,</span><span class="n">SCREEN_H</span><span class="p">)</span>
1040                 <span class="n">al_set_window_title</span><span class="p">(</span><span class="n">display</span><span class="p">,</span><span class="n">TITLE</span><span class="p">)</span>
1041                 <span class="n">al_clear_to_color</span><span class="p">(</span><span class="n">al_map_rgb</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">))</span>
1042                 <span class="n">event_queue</span> <span class="o">=</span> <span class="n">al_create_event_queue</span><span class="p">()</span>
1043                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
1044                         <span class="n">al_get_display_event_source</span><span class="p">(</span><span class="n">display</span><span class="p">))</span>
1045                 <span class="n">ev</span> <span class="o">=</span> <span class="n">al_new_allegro_event</span><span class="p">()</span>
1046                 <span class="n">timeout</span> <span class="o">=</span> <span class="n">al_new_allegro_timeout</span><span class="p">()</span>
1047                 <span class="n">al_init_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mf">0.06</span><span class="p">)</span>
1048                 <span class="n">timer</span> <span class="o">=</span> <span class="n">al_create_timer</span><span class="p">(</span><span class="mf">1.0</span> <span class="o">/</span> <span class="n">FPS</span><span class="p">)</span>
1049                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
1050                         <span class="n">al_get_timer_event_source</span><span class="p">(</span><span class="n">timer</span><span class="p">))</span>
1051                 <span class="n">al_start_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
1052                 <span class="n">al_install_mouse</span><span class="p">()</span>
1053                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
1054                         <span class="n">al_get_mouse_event_source</span><span class="p">())</span>
1055                 <span class="n">al_install_keyboard</span><span class="p">()</span>
1056                 <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
1057                         <span class="n">al_get_keyboard_event_source</span><span class="p">())</span>
1058
1059         <span class="k">func</span> <span class="n">eventsLoop</span>
1060                 <span class="k">while</span> <span class="kp">true</span>
1061                         <span class="n">al_init_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="mf">0.06</span><span class="p">)</span>
1062                         <span class="n">al_wait_for_event_until</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span> <span class="n">ev</span><span class="p">,</span> <span class="n">timeout</span><span class="p">)</span>
1063                         <span class="k">switch</span> <span class="n">al_get_allegro_event_type</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1064                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_DISPLAY_CLOSE</span>
1065                                 <span class="n">CloseEvent</span><span class="p">()</span>
1066                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_TIMER</span>
1067                                 <span class="n">redraw</span> <span class="o">=</span> <span class="kp">true</span>
1068                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_AXES</span>
1069                                 <span class="n">mouse_x</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_x</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1070                                 <span class="n">mouse_y</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_y</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1071                                 <span class="k">if</span> <span class="n">PRINT_MOUSE_XY</span>
1072                                         <span class="k">see</span> <span class="s">&quot;x = &quot;</span> <span class="o">+</span> <span class="n">mouse_x</span> <span class="o">+</span> <span class="n">nl</span>
1073                                         <span class="k">see</span> <span class="s">&quot;y = &quot;</span> <span class="o">+</span> <span class="n">mouse_y</span> <span class="o">+</span> <span class="n">nl</span>
1074                                 <span class="k">ok</span>
1075                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span>
1076                                 <span class="n">mouse_x</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_x</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1077                                 <span class="n">mouse_y</span> <span class="o">=</span> <span class="n">al_get_allegro_event_mouse_y</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1078                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_BUTTON_UP</span>
1079                                 <span class="n">MouseClickEvent</span><span class="p">()</span>
1080                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_DOWN</span>
1081                                 <span class="k">switch</span> <span class="n">al_get_allegro_event_keyboard_keycode</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1082                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
1083                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_UP</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
1084                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
1085                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_DOWN</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
1086                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
1087                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_LEFT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
1088                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
1089                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_RIGHT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">true</span>
1090                                 <span class="k">off</span>
1091                         <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_UP</span>
1092                                 <span class="k">switch</span> <span class="n">al_get_allegro_event_keyboard_keycode</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1093                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
1094                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_UP</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
1095                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
1096                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_DOWN</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
1097                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
1098                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_LEFT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
1099                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
1100                                                 <span class="n">key</span><span class="o">[</span><span class="n">KEY_RIGHT</span><span class="o">]</span> <span class="o">=</span> <span class="kp">false</span>
1101                                         <span class="k">on</span> <span class="n">ALLEGRO_KEY_ESCAPE</span>
1102                                                 <span class="k">exit</span>
1103                                 <span class="k">off</span>
1104                         <span class="k">off</span>
1105                         <span class="k">if</span> <span class="n">redraw</span> <span class="ow">and</span> <span class="n">al_is_event_queue_empty</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
1106                                 <span class="n">redraw</span> <span class="o">=</span> <span class="kp">false</span>
1107                                 <span class="n">drawScene</span><span class="p">()</span>
1108                                 <span class="n">al_flip_display</span><span class="p">()</span>
1109                         <span class="k">ok</span>
1110                         <span class="n">callgc</span><span class="p">()</span>
1111                 <span class="k">end</span>
1112
1113         <span class="k">func</span> <span class="n">destroy</span>
1114                 <span class="n">destroyResources</span><span class="p">()</span>
1115                 <span class="n">al_destroy_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
1116                 <span class="n">al_destroy_allegro_event</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
1117                 <span class="n">al_destroy_allegro_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
1118                 <span class="n">al_destroy_event_queue</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
1119                 <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
1120                 <span class="n">al_exit</span><span class="p">()</span>
1121
1122         <span class="k">func</span> <span class="n">loadresources</span>
1123
1124         <span class="k">func</span> <span class="n">drawScene</span>
1125
1126         <span class="k">func</span> <span class="n">destroyResources</span>
1127
1128         <span class="k">func</span> <span class="n">MouseClickEvent</span>
1129                 <span class="k">exit</span>                    <span class="c"># イベントループから脱出</span>
1130
1131         <span class="k">func</span> <span class="n">CloseEvent</span>
1132                 <span class="k">exit</span>                    <span class="c"># イベントループから脱出</span>
1133 </pre></div>
1134 </div>
1135 <p>スクリーンショット:</p>
1136 <a class="reference internal image-reference" href="_images/tictactoe3d.png"><img alt="TicTacToe 3D ゲーム" src="_images/tictactoe3d.png" style="width: 450pt; height: 350pt;" /></a>
1137 </div>
1138 <div class="section" id="index-4">
1139 <span id="id2"></span><h2>その他の 3D サンプル<a class="headerlink" href="#index-4" title="このヘッドラインへのパーマリンク">¶</a></h2>
1140 <p>サンプルは ring/samples/3D フォルダにあります。</p>
1141 <p>このスクリーンショットはトップダウン - 多層立方体のサンプルです。</p>
1142 <img alt="3D サンプル" src="_images/more3dsamples.jpg" />
1143 <p>このスクリーンショットはカメラのサンプルです。</p>
1144 <img alt="カメラ" src="_images/more3dsamples2.jpg" />
1145 <p>このスクリーンショットはカメラと背景のサンプルです。</p>
1146 <p>開発者 : アズディン・レマル</p>
1147 <img alt="カメラと背景のサンプル" src="_images/cameraandbackground.png" />
1148 </div>
1149 </div>
1150
1151
1152           </div>
1153         </div>
1154       </div>
1155       <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
1156         <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
1157 <ul>
1158 <li><a class="reference internal" href="#">RingOpenGL と RingAllegro の用法 (3D グラフィックス)</a><ul>
1159 <li><a class="reference internal" href="#d">3D 立方体とテクスチャ</a></li>
1160 <li><a class="reference internal" href="#index-2">複数の立方体</a></li>
1161 <li><a class="reference internal" href="#tictactoe-3d">TicTacToe 3D ゲーム</a></li>
1162 <li><a class="reference internal" href="#index-4">その他の 3D サンプル</a></li>
1163 </ul>
1164 </li>
1165 </ul>
1166
1167
1168   <h4>前のトピックへ</h4>
1169   <p class="topless"><a href="usingopengl.html"
1170                         title="前の章へ">RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)</a></p>
1171   <h4>次のトピックへ</h4>
1172   <p class="topless"><a href="goldmagic800.html"
1173                         title="次の章へ">Gold Magic 800 ゲーム</a></p>
1174   <div role="note" aria-label="source link">
1175     <h3>このページ</h3>
1176     <ul class="this-page-menu">
1177       <li><a href="_sources/usingopengl2.txt"
1178             rel="nofollow">ソースコードを表示</a></li>
1179     </ul>
1180    </div>
1181       
1182 <form action="search.html" method="get">
1183   <input type="text" name="q" placeholder="Search" />
1184   <input type="hidden" name="check_keywords" value="yes" />
1185   <input type="hidden" name="area" value="default" />
1186 </form>
1187       
1188         </div>
1189       </div>
1190       <div class="clearer"></div>
1191     </div>
1192 <footer class="footer">
1193   <p class="pull-right">
1194     <a href="_sources/usingopengl2.txt"
1195        rel="nofollow">ソースコードを表示</a> &nbsp;
1196     <a href="#">冒頭へ戻る</a></p>
1197   <p>
1198     &copy; Copyright 2016-2020, Ring Team.<br/>
1199     Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6 / astropy-sphinx-theme 1.1 (isVowel)
1200   </p>
1201 </footer>
1202   </body>
1203 </html>