1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5 <html xmlns="http://www.w3.org/1999/xhtml">
7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9 <title>RingOpenGL と RingAllegro の用法 (3D グラフィックス) — プログラミング言語 Ring 1.12 取扱説明書</title>
11 <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
12 <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
14 <script type="text/javascript">
15 var DOCUMENTATION_OPTIONS = {
18 COLLAPSE_INDEX: false,
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'/>
33 <body role="document">
35 <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">🍩Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
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>
45 <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
46 <li><a title="総合索引" href="genindex.html">Index</a></li>
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" />
64 <a href="goldmagic800.html" title="Gold Magic 800 ゲーム">
69 <a href="usingopengl.html" title="RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)">
75 <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
79 <li>RingOpenGL と RingAllegro の用法 (3D グラフィックス)</li>
84 <div class="document">
85 <div class="documentwrapper">
86 <div class="bodywrapper">
87 <div class="body" role="main">
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>
95 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
96 <span class="k">load</span> <span class="s">"gamelib.ring"</span> <span class="c"># RingAllegro ライブラリ</span>
97 <span class="k">load</span> <span class="s">"opengl21lib.ring"</span> <span class="c"># RingOpenGL ライブラリ</span>
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>
106 <span class="k">func</span> <span class="n">main</span>
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>
113 <span class="k">class</span> <span class="n">GraphicsApp</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
115 <span class="n">TITLE</span> <span class="o">=</span> <span class="s">"Ring Cube"</span>
117 <span class="n">bitmap</span> <span class="n">texture</span>
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>
123 <span class="k">func</span> <span class="n">loadresources</span>
125 <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">"ring.bmp"</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>
128 <span class="k">func</span> <span class="n">destroyResources</span>
130 <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
132 <span class="k">func</span> <span class="n">drawScene</span>
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>
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>
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>
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>
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>
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>
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>
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>
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>
202 <span class="k">class</span> <span class="n">GraphicsAppBase</span>
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>
207 <span class="n">FPS</span> <span class="o">=</span> <span class="mi">60</span>
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>
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>
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>
219 <span class="n">TITLE</span> <span class="o">=</span> <span class="s">"Graphics Application"</span>
221 <span class="k">func</span> <span class="n">start</span>
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>
228 <span class="k">func</span> <span class="n">setup</span>
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>
253 <span class="k">func</span> <span class="n">eventsLoop</span>
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>
304 <span class="k">func</span> <span class="n">destroy</span>
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>
314 <span class="k">func</span> <span class="n">loadresources</span>
316 <span class="k">func</span> <span class="n">drawScene</span>
318 <span class="k">func</span> <span class="n">destroyResources</span>
322 <img alt="Ring Cube" src="_images/ringcube3d.png" />
324 <div class="section" id="index-2">
325 <span id="id1"></span><h2>複数の立方体<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
327 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
328 <span class="k">load</span> <span class="s">"gamelib.ring"</span> <span class="c"># RingAllegro ライブラリ</span>
329 <span class="k">load</span> <span class="s">"opengl21lib.ring"</span> <span class="c"># RingOpenGL ライブラリ</span>
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>
339 <span class="k">func</span> <span class="n">main</span>
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>
346 <span class="k">class</span> <span class="n">GraphicsApp</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
348 <span class="n">TITLE</span> <span class="o">=</span> <span class="s">"Many Cubes"</span>
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>
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>
358 <span class="n">nPerspective</span> <span class="o">=</span> <span class="mi">100</span>
360 <span class="k">func</span> <span class="n">loadresources</span>
362 <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">"sky1.jpg"</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>
365 <span class="n">bitmap2</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">"sky2.jpg"</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>
368 <span class="n">bitmap3</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">"sky3.jpg"</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>
371 <span class="k">func</span> <span class="n">destroyResources</span>
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>
377 <span class="k">func</span> <span class="n">drawScene</span>
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>
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>
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>
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>
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>
428 <span class="k">func</span> <span class="n">drawcube</span><span class="p">(</span><span class="n">cTexture</span><span class="p">)</span>
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>
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>
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>
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>
476 <span class="k">class</span> <span class="n">GraphicsAppBase</span>
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>
481 <span class="n">FPS</span> <span class="o">=</span> <span class="mi">60</span>
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>
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>
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>
493 <span class="n">TITLE</span> <span class="o">=</span> <span class="s">"Graphics Application"</span>
495 <span class="k">func</span> <span class="n">start</span>
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>
502 <span class="k">func</span> <span class="n">setup</span>
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>
527 <span class="k">func</span> <span class="n">eventsLoop</span>
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>
578 <span class="k">func</span> <span class="n">destroy</span>
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>
588 <span class="k">func</span> <span class="n">loadresources</span>
590 <span class="k">func</span> <span class="n">drawScene</span>
592 <span class="k">func</span> <span class="n">destroyResources</span>
596 <img alt="複数の立方体" src="_images/manycubes.png" />
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>
601 <div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
602 <span class="k">load</span> <span class="s">"gamelib.ring"</span> <span class="c"># RingAllegro ライブラリ</span>
603 <span class="k">load</span> <span class="s">"opengl21lib.ring"</span> <span class="c"># RingOpenGL ライブラリ</span>
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>
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>
617 <span class="k">class</span> <span class="n">TicTacToe3D</span> <span class="k">from</span> <span class="n">GameLogic</span>
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">"TicTacToe 3D"</span>
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>
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>
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>
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>
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>
647 <span class="k">class</span> <span class="n">GameInterface</span>
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>
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>
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>
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>
700 <span class="k">Class</span> <span class="n">GameLogic</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
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>
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>
720 <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
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">>=</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"><=</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">>=</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"><=</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>
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>
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>
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>
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>
824 <span class="k">class</span> <span class="n">GameOver</span>
826 <span class="n">font</span> <span class="n">bitmap</span>
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">"font/pirulen.ttf"</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">"image/ballon.png"</span><span class="p">)</span>
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>
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">"Good job X you won!"</span><span class="p">)</span>
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">"Good job O you won!"</span><span class="p">)</span>
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">"Oh no it's a tie!"</span><span class="p">)</span>
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>
863 <span class="k">class</span> <span class="n">GameCube</span>
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>
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>
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">"image/o.png"</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">"image/x.png"</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">"image/empty.png"</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>
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>
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>
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>
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>
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>
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>
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>
946 <span class="k">class</span> <span class="n">GameBackground</span>
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>
964 <span class="n">bitmap</span>
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>
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>
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">></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>
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">"image/back.jpg"</span><span class="p">)</span>
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>
992 <span class="k">class</span> <span class="n">GameSound</span>
994 <span class="n">sample</span> <span class="n">sampleid</span>
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">"sound/music1.wav"</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>
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>
1006 <span class="k">class</span> <span class="n">GraphicsAppBase</span>
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">"Graphics Application"</span>
1022 <span class="n">PRINT_MOUSE_XY</span> <span class="o">=</span> <span class="kp">False</span>
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>
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>
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">"x = "</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">"y = "</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>
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>
1122 <span class="k">func</span> <span class="n">loadresources</span>
1124 <span class="k">func</span> <span class="n">drawScene</span>
1126 <span class="k">func</span> <span class="n">destroyResources</span>
1128 <span class="k">func</span> <span class="n">MouseClickEvent</span>
1129 <span class="k">exit</span> <span class="c"># イベントループから脱出</span>
1131 <span class="k">func</span> <span class="n">CloseEvent</span>
1132 <span class="k">exit</span> <span class="c"># イベントループから脱出</span>
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>
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" />
1155 <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
1156 <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
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>
1169 <p class="topless"><a href="usingopengl.html"
1170 title="前の章へ">RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)</a></p>
1172 <p class="topless"><a href="goldmagic800.html"
1173 title="次の章へ">Gold Magic 800 ゲーム</a></p>
1174 <div role="note" aria-label="source link">
1176 <ul class="this-page-menu">
1177 <li><a href="_sources/usingopengl2.txt"
1178 rel="nofollow">ソースコードを表示</a></li>
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" />
1190 <div class="clearer"></div>
1192 <footer class="footer">
1193 <p class="pull-right">
1194 <a href="_sources/usingopengl2.txt"
1195 rel="nofollow">ソースコードを表示</a>
1196 <a href="#">冒頭へ戻る</a></p>
1198 © 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)