OSDN Git Service

タグを打ち忘れていたついでに、html版ドキュメントを追加しました。
[ring-lang-081/ring.git] / docs / build / html / usingopengl2.html
diff --git a/docs/build/html/usingopengl2.html b/docs/build/html/usingopengl2.html
new file mode 100644 (file)
index 0000000..a99ea6a
--- /dev/null
@@ -0,0 +1,1203 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>RingOpenGL と RingAllegro の用法 (3D グラフィックス) &mdash; プログラミング言語 Ring 1.12 取扱説明書</title>
+    
+    <link rel="stylesheet" href="_static/bootstrap-astropy.css" type="text/css" />
+    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    './',
+        VERSION:     '1.12',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="_static/jquery.js"></script>
+    <script type="text/javascript" src="_static/underscore.js"></script>
+    <script type="text/javascript" src="_static/doctools.js"></script>
+    <script type="text/javascript" src="_static/translations.js"></script>
+    <link rel="top" title="プログラミング言語 Ring 1.12 取扱説明書" href="index.html" />
+    <link rel="next" title="Gold Magic 800 ゲーム" href="goldmagic800.html" />
+    <link rel="prev" title="RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)" href="usingopengl.html" />
+    <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,600' rel='stylesheet' type='text/css'/>
+
+  </head>
+  <body role="document">
+<div class="topbar">
+  <a class="brand" title="Documentation Home" href="index.html"><span id="logotext1">&#x1f369;Ring</span><span id="logotext2"> 1.12</span><span id="logotext3">:docs</span></a>
+  <ul>
+    
+    <li><a href="http://ring-lang.sourceforge.net/news.html">News</a></li>
+    <li><a href="http://ring-lang.sourceforge.net/download.html">Download</a></li>
+    <li><a href="https://groups.google.com/forum/#!forum/ring-lang">Get Help</a></li>
+    <li><a href="https://github.com/ring-lang/ring">Contribute</a></li>
+    <li><a href="http://ring-lang.sourceforge.net/resources.html">Resources</a></li>
+    <li><a href="http://ring-lang.sourceforge.net/team.html">Team</a></li>
+    
+    <li><a title="Ring Homepage" href="http://ring-lang.net/">Website</a></li>
+    <li><a title="総合索引" href="genindex.html">Index</a></li>
+    <li>
+      
+      
+<form action="search.html" method="get">
+  <input type="text" name="q" placeholder="Search" />
+  <input type="hidden" name="check_keywords" value="yes" />
+  <input type="hidden" name="area" value="default" />
+</form>
+      
+    </li>
+  </ul>
+</div>
+
+<div class="related">
+    <h3>ナビゲーション</h3>
+    <ul>
+      <li class="right">
+       <a href="goldmagic800.html" title="Gold Magic 800 ゲーム">
+         next &raquo;
+       </a>
+      </li>
+      <li class="right">
+       <a href="usingopengl.html" title="RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)">
+         &laquo; previous
+       </a>
+        |
+      </li>
+      <li>
+       <a href="index.html">プログラミング言語 Ring 1.12 取扱説明書</a>
+        &raquo;
+      </li>
+      
+      <li>RingOpenGL と RingAllegro の用法 (3D グラフィックス)</li> 
+    </ul>
+</div>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body" role="main">
+            
+  <div class="section" id="ringopengl-ringallegro-3d">
+<span id="index-0"></span><h1>RingOpenGL と RingAllegro の用法 (3D グラフィックス)<a class="headerlink" href="#ringopengl-ringallegro-3d" title="このヘッドラインへのパーマリンク">¶</a></h1>
+<p>RingOpenGL と RingAllegro の用法を学びます。</p>
+<div class="section" id="d">
+<span id="index-1"></span><h2>3D 立方体とテクスチャ<a class="headerlink" href="#d" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ソースコード:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
+        <span class="k">load</span> <span class="s">&quot;gamelib.ring&quot;</span>             <span class="c"># RingAllegro ライブラリ</span>
+        <span class="k">load</span> <span class="s">&quot;opengl21lib.ring&quot;</span>         <span class="c"># RingOpenGL  ライブラリ</span>
+
+<span class="c">#==============================================================</span>
+<span class="c"># macOS への対応</span>
+        <span class="n">al_run_main</span><span class="p">()</span>
+        <span class="k">func</span> <span class="n">al_game_start</span>      <span class="c"># al_run_main() から呼び出されます。</span>
+                <span class="n">main</span><span class="p">()</span>          <span class="c"># main 関数本体を呼び出します。</span>
+<span class="c">#==============================================================</span>
+
+<span class="k">func</span> <span class="n">main</span>
+
+        <span class="k">new</span> <span class="n">GraphicsApp</span> <span class="p">{</span>
+                <span class="n">start</span><span class="p">()</span>
+        <span class="p">}</span>
+
+
+<span class="k">class</span> <span class="n">GraphicsApp</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
+
+        <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Ring Cube&quot;</span>
+
+        <span class="n">bitmap</span> <span class="n">texture</span>
+
+        <span class="n">xrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+        <span class="n">yrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+        <span class="n">zrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+
+                <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;ring.bmp&quot;</span><span class="p">)</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">drawScene</span>
+
+                <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>
+                <span class="n">ratio</span> <span class="o">=</span>  <span class="n">w</span> <span class="o">/</span> <span class="n">h</span>
+
+                <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>
+                <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_PROJECTION</span><span class="p">)</span>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+
+                <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>
+                <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_MODELVIEW</span><span class="p">)</span>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">)</span>
+                <span class="n">glShadeModel</span><span class="p">(</span><span class="n">GL_SMOOTH</span><span class="p">)</span>
+                <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>
+                <span class="n">glClearDepth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_DEPTH_TEST</span><span class="p">)</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_CULL_FACE</span><span class="p">)</span>
+                <span class="n">glDepthFunc</span><span class="p">(</span><span class="n">GL_LEQUAL</span><span class="p">)</span>
+                <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>
+
+                <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>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+                <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>
+
+                <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>
+                <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>
+                <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>
+
+                <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>
+
+                <span class="n">glBegin</span><span class="p">(</span><span class="n">GL_QUADS</span><span class="p">)</span>
+                        <span class="o">//</span> <span class="n">前面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">背面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">上面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">底面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">右面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">左面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                <span class="n">glEnd</span><span class="p">()</span>
+
+                <span class="n">xrot</span> <span class="o">+=</span> <span class="mf">0.3</span>
+                <span class="n">yrot</span> <span class="o">+=</span> <span class="mf">0.2</span>
+                <span class="n">zrot</span> <span class="o">+=</span> <span class="mf">0.4</span>
+
+
+<span class="k">class</span> <span class="n">GraphicsAppBase</span>
+
+        <span class="n">display</span> <span class="n">event_queue</span> <span class="n">ev</span> <span class="n">timeout</span>
+        <span class="n">timer</span>  <span class="n">redraw</span>   <span class="o">=</span> <span class="kp">true</span>
+
+        <span class="n">FPS</span>             <span class="o">=</span> <span class="mi">60</span>
+
+        <span class="n">SCREEN_W</span>        <span class="o">=</span> <span class="mi">800</span>
+        <span class="n">SCREEN_H</span>        <span class="o">=</span> <span class="mi">600</span>
+
+        <span class="n">KEY_UP</span>          <span class="o">=</span> <span class="mi">1</span>
+        <span class="n">KEY_DOWN</span>        <span class="o">=</span> <span class="mi">2</span>
+        <span class="n">KEY_LEFT</span>        <span class="o">=</span> <span class="mi">3</span>
+        <span class="n">KEY_RIGHT</span>       <span class="o">=</span> <span class="mi">4</span>
+
+        <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>
+
+        <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Graphics Application&quot;</span>
+
+        <span class="k">func</span> <span class="n">start</span>
+
+                <span class="n">SetUp</span><span class="p">()</span>
+                <span class="n">loadResources</span><span class="p">()</span>
+                <span class="n">eventsLoop</span><span class="p">()</span>
+                <span class="n">destroy</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">setup</span>
+
+                <span class="n">al_init</span><span class="p">()</span>
+                <span class="n">al_init_image_addon</span><span class="p">()</span>
+                <span class="n">al_set_new_display_flags</span><span class="p">(</span><span class="n">ALLEGRO_OPENGL</span><span class="p">)</span>
+                <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>
+                <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>
+                <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>
+                <span class="n">event_queue</span> <span class="o">=</span> <span class="n">al_create_event_queue</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_display_event_source</span><span class="p">(</span><span class="n">display</span><span class="p">))</span>
+                <span class="n">ev</span> <span class="o">=</span> <span class="n">al_new_allegro_event</span><span class="p">()</span>
+                <span class="n">timeout</span> <span class="o">=</span> <span class="n">al_new_allegro_timeout</span><span class="p">()</span>
+                <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>
+                <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>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_timer_event_source</span><span class="p">(</span><span class="n">timer</span><span class="p">))</span>
+                <span class="n">al_start_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
+                <span class="n">al_install_mouse</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_mouse_event_source</span><span class="p">())</span>
+                <span class="n">al_install_keyboard</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_keyboard_event_source</span><span class="p">())</span>
+
+        <span class="k">func</span> <span class="n">eventsLoop</span>
+
+                <span class="k">while</span> <span class="kp">true</span>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_DISPLAY_CLOSE</span>
+                                <span class="k">exit</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_TIMER</span>
+                                <span class="n">redraw</span> <span class="o">=</span> <span class="kp">true</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_AXES</span>
+                                <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>
+                                <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span>
+                                <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>
+                                <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_BUTTON_UP</span>
+                                <span class="k">exit</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_DOWN</span>
+                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
+                                                <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>
+                                <span class="k">off</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_UP</span>
+                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_ESCAPE</span>
+                                                <span class="k">exit</span>
+                                <span class="k">off</span>
+                        <span class="k">off</span>
+                        <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>
+                                <span class="n">redraw</span> <span class="o">=</span> <span class="kp">false</span>
+                                <span class="n">drawScene</span><span class="p">()</span>
+                                <span class="n">al_flip_display</span><span class="p">()</span>
+                        <span class="k">ok</span>
+                        <span class="n">callgc</span><span class="p">()</span>
+                <span class="k">end</span>
+
+        <span class="k">func</span> <span class="n">destroy</span>
+
+                <span class="n">destroyResources</span><span class="p">()</span>
+                <span class="n">al_destroy_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
+                <span class="n">al_destroy_allegro_event</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
+                <span class="n">al_destroy_allegro_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
+                <span class="n">al_destroy_event_queue</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
+                <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
+                <span class="n">al_exit</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+
+        <span class="k">func</span> <span class="n">drawScene</span>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+</pre></div>
+</div>
+<p>スクリーンショット:</p>
+<img alt="Ring Cube" src="_images/ringcube3d.png" />
+</div>
+<div class="section" id="index-2">
+<span id="id1"></span><h2>複数の立方体<a class="headerlink" href="#index-2" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>スクリーンショット:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
+        <span class="k">load</span> <span class="s">&quot;gamelib.ring&quot;</span>             <span class="c"># RingAllegro ライブラリ</span>
+        <span class="k">load</span> <span class="s">&quot;opengl21lib.ring&quot;</span>         <span class="c"># RingOpenGL ライブラリ</span>
+
+<span class="c">#==============================================================</span>
+<span class="c"># macOS への対応</span>
+        <span class="n">al_run_main</span><span class="p">()</span>
+        <span class="k">func</span> <span class="n">al_game_start</span>      <span class="c"># al_run_main() により呼び出されます。</span>
+                <span class="n">main</span><span class="p">()</span>          <span class="c"># main 関数本体を呼び出します。</span>
+<span class="c">#==============================================================</span>
+
+
+<span class="k">func</span> <span class="n">main</span>
+
+        <span class="k">new</span> <span class="n">GraphicsApp</span> <span class="p">{</span>
+                <span class="n">start</span><span class="p">()</span>
+        <span class="p">}</span>
+
+
+<span class="k">class</span> <span class="n">GraphicsApp</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
+
+        <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Many Cubes&quot;</span>
+
+        <span class="n">bitmap</span> <span class="n">bitmap2</span> <span class="n">bitmap3</span>
+        <span class="n">texture</span> <span class="n">texture2</span> <span class="n">texture3</span>
+
+        <span class="n">fps</span> <span class="o">=</span> <span class="mi">120</span>
+        <span class="n">xrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+        <span class="n">yrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+        <span class="n">zrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+
+        <span class="n">nPerspective</span> <span class="o">=</span> <span class="mi">100</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+
+                <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;sky1.jpg&quot;</span><span class="p">)</span>
+                <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>
+
+                <span class="n">bitmap2</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;sky2.jpg&quot;</span><span class="p">)</span>
+                <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>
+
+                <span class="n">bitmap3</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;sky3.jpg&quot;</span><span class="p">)</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap2</span><span class="p">)</span>
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap3</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">drawScene</span>
+
+                <span class="n">prepare</span><span class="p">()</span>
+                <span class="n">cubes</span><span class="p">()</span>
+                <span class="n">rotate</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">Prepare</span>
+                <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>
+                <span class="n">ratio</span> <span class="o">=</span>  <span class="n">w</span> <span class="o">/</span> <span class="n">h</span>
+                <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>
+                <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_PROJECTION</span><span class="p">)</span>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+                <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>
+                <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_MODELVIEW</span><span class="p">)</span>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">)</span>
+                <span class="n">glShadeModel</span><span class="p">(</span><span class="n">GL_SMOOTH</span><span class="p">)</span>
+                <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>
+                <span class="n">glClearDepth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_DEPTH_TEST</span><span class="p">)</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_CULL_FACE</span><span class="p">)</span>
+                <span class="n">glDepthFunc</span><span class="p">(</span><span class="n">GL_LEQUAL</span><span class="p">)</span>
+                <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>
+                <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>
+
+        <span class="k">func</span> <span class="n">Cubes</span>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+
+        <span class="k">func</span> <span class="n">Rotate</span>
+                <span class="n">xrot</span> <span class="o">+=</span> <span class="mf">0.3</span> <span class="o">*</span> <span class="mi">5</span>
+                <span class="n">yrot</span> <span class="o">+=</span> <span class="mf">0.2</span> <span class="o">*</span> <span class="mi">5</span>
+                <span class="n">zrot</span> <span class="o">+=</span> <span class="mf">0.4</span> <span class="o">*</span> <span class="mi">5</span>
+                <span class="n">nPerspective</span> <span class="o">+=</span> <span class="mf">0.5</span>
+
+
+        <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>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+                <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>
+                <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>
+                <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>
+                <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>
+                <span class="n">drawcube</span><span class="p">(</span><span class="n">nTexture</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">drawcube</span><span class="p">(</span><span class="n">cTexture</span><span class="p">)</span>
+
+                <span class="k">switch</span> <span class="n">cTexture</span>
+                        <span class="k">on</span> <span class="p">:</span><span class="n">sky1</span>
+                                <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>
+                        <span class="k">on</span> <span class="p">:</span><span class="n">sky2</span>
+                                <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>
+                        <span class="k">on</span> <span class="p">:</span><span class="n">sky3</span>
+                                <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>
+                <span class="k">off</span>
+
+
+                <span class="n">glBegin</span><span class="p">(</span><span class="n">GL_QUADS</span><span class="p">)</span>
+                        <span class="o">//</span> <span class="n">前面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">背面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">上面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">底面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+
+                        <span class="o">//</span> <span class="n">右面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+
+                        <span class="o">//</span> <span class="n">左面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                <span class="n">glEnd</span><span class="p">()</span>
+
+
+<span class="k">class</span> <span class="n">GraphicsAppBase</span>
+
+        <span class="n">display</span> <span class="n">event_queue</span> <span class="n">ev</span> <span class="n">timeout</span>
+        <span class="n">timer</span>  <span class="n">redraw</span>   <span class="o">=</span> <span class="kp">true</span>
+
+        <span class="n">FPS</span>             <span class="o">=</span> <span class="mi">60</span>
+
+        <span class="n">SCREEN_W</span>        <span class="o">=</span> <span class="mi">800</span>
+        <span class="n">SCREEN_H</span>        <span class="o">=</span> <span class="mi">600</span>
+
+        <span class="n">KEY_UP</span>          <span class="o">=</span> <span class="mi">1</span>
+        <span class="n">KEY_DOWN</span>        <span class="o">=</span> <span class="mi">2</span>
+        <span class="n">KEY_LEFT</span>        <span class="o">=</span> <span class="mi">3</span>
+        <span class="n">KEY_RIGHT</span>       <span class="o">=</span> <span class="mi">4</span>
+
+        <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>
+
+        <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;Graphics Application&quot;</span>
+
+        <span class="k">func</span> <span class="n">start</span>
+
+                <span class="n">SetUp</span><span class="p">()</span>
+                <span class="n">loadResources</span><span class="p">()</span>
+                <span class="n">eventsLoop</span><span class="p">()</span>
+                <span class="n">destroy</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">setup</span>
+
+                <span class="n">al_init</span><span class="p">()</span>
+                <span class="n">al_init_image_addon</span><span class="p">()</span>
+                <span class="n">al_set_new_display_flags</span><span class="p">(</span><span class="n">ALLEGRO_OPENGL</span><span class="p">)</span>
+                <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>
+                <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>
+                <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>
+                <span class="n">event_queue</span> <span class="o">=</span> <span class="n">al_create_event_queue</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_display_event_source</span><span class="p">(</span><span class="n">display</span><span class="p">))</span>
+                <span class="n">ev</span> <span class="o">=</span> <span class="n">al_new_allegro_event</span><span class="p">()</span>
+                <span class="n">timeout</span> <span class="o">=</span> <span class="n">al_new_allegro_timeout</span><span class="p">()</span>
+                <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>
+                <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>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_timer_event_source</span><span class="p">(</span><span class="n">timer</span><span class="p">))</span>
+                <span class="n">al_start_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
+                <span class="n">al_install_mouse</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_mouse_event_source</span><span class="p">())</span>
+                <span class="n">al_install_keyboard</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_keyboard_event_source</span><span class="p">())</span>
+
+        <span class="k">func</span> <span class="n">eventsLoop</span>
+
+                <span class="k">while</span> <span class="kp">true</span>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_DISPLAY_CLOSE</span>
+                                <span class="k">exit</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_TIMER</span>
+                                <span class="n">redraw</span> <span class="o">=</span> <span class="kp">true</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_AXES</span>
+                                <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>
+                                <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span>
+                                <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>
+                                <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_BUTTON_UP</span>
+                                <span class="k">exit</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_DOWN</span>
+                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
+                                                <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>
+                                <span class="k">off</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_UP</span>
+                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_ESCAPE</span>
+                                                <span class="k">exit</span>
+                                <span class="k">off</span>
+                        <span class="k">off</span>
+                        <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>
+                                <span class="n">redraw</span> <span class="o">=</span> <span class="kp">false</span>
+                                <span class="n">drawScene</span><span class="p">()</span>
+                                <span class="n">al_flip_display</span><span class="p">()</span>
+                        <span class="k">ok</span>
+                        <span class="n">callgc</span><span class="p">()</span>
+                <span class="k">end</span>
+
+        <span class="k">func</span> <span class="n">destroy</span>
+
+                <span class="n">destroyResources</span><span class="p">()</span>
+                <span class="n">al_destroy_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
+                <span class="n">al_destroy_allegro_event</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
+                <span class="n">al_destroy_allegro_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
+                <span class="n">al_destroy_event_queue</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
+                <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
+                <span class="n">al_exit</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+
+        <span class="k">func</span> <span class="n">drawScene</span>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+</pre></div>
+</div>
+<p>スクリーンショット:</p>
+<img alt="複数の立方体" src="_images/manycubes.png" />
+</div>
+<div class="section" id="tictactoe-3d">
+<span id="index-3"></span><h2>TicTacToe 3D ゲーム<a class="headerlink" href="#tictactoe-3d" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>ソースコード:</p>
+<div class="highlight-ring"><div class="highlight"><pre><span class="c"># ライブラリの読み込み</span>
+        <span class="k">load</span> <span class="s">&quot;gamelib.ring&quot;</span>             <span class="c"># RingAllegro ライブラリ</span>
+        <span class="k">load</span> <span class="s">&quot;opengl21lib.ring&quot;</span>         <span class="c"># RingOpenGL ライブラリ</span>
+
+<span class="c">#==============================================================</span>
+<span class="c"># macOS への対応</span>
+        <span class="n">al_run_main</span><span class="p">()</span>
+        <span class="k">func</span> <span class="n">al_game_start</span>      <span class="c"># al_run_main() により呼び出されます。</span>
+                <span class="n">main</span><span class="p">()</span>          <span class="c"># main 関数本体を呼び出します。</span>
+<span class="c">#==============================================================</span>
+
+<span class="k">func</span> <span class="n">main</span>
+        <span class="k">new</span> <span class="n">TicTacToe3D</span> <span class="p">{</span>
+                <span class="n">start</span><span class="p">()</span>
+        <span class="p">}</span>
+
+<span class="k">class</span> <span class="n">TicTacToe3D</span> <span class="k">from</span> <span class="n">GameLogic</span>
+
+        <span class="n">FPS</span> <span class="o">=</span> <span class="mi">60</span>
+        <span class="n">TITLE</span> <span class="o">=</span> <span class="s">&quot;TicTacToe 3D&quot;</span>
+
+        <span class="n">oBackground</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameBackground</span>
+        <span class="n">oGameSound</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameSound</span>
+        <span class="n">oGameCube</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameCube</span>
+        <span class="n">oGameOver</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameOver</span>
+        <span class="n">oGameInterface</span> <span class="o">=</span> <span class="k">new</span> <span class="n">GameInterface</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+                <span class="n">oGameOver</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
+                <span class="n">oGameSound</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
+                <span class="n">oBackGround</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
+                <span class="n">oGameCube</span><span class="p">.</span><span class="n">loadresources</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+                <span class="n">oGameOver</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
+                <span class="n">oGameSound</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
+                <span class="n">oBackGround</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
+                <span class="n">oGameCube</span><span class="p">.</span><span class="n">destroyResources</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">drawScene</span>
+                <span class="n">oBackground</span><span class="p">.</span><span class="n">update</span><span class="p">()</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">MouseClickEvent</span>
+                <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>
+
+<span class="k">class</span> <span class="n">GameInterface</span>
+
+        <span class="k">func</span> <span class="n">Update</span> <span class="n">oGame</span>
+                <span class="n">prepare</span><span class="p">()</span>
+                <span class="n">cubes</span><span class="p">(</span><span class="n">oGame</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">Prepare</span>
+                <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>
+                <span class="n">ratio</span> <span class="o">=</span>  <span class="n">w</span> <span class="o">/</span> <span class="n">h</span>
+                <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>
+                <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_PROJECTION</span><span class="p">)</span>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+                <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>
+                <span class="n">glMatrixMode</span><span class="p">(</span><span class="n">GL_MODELVIEW</span><span class="p">)</span>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_TEXTURE_2D</span><span class="p">)</span>
+                <span class="n">glShadeModel</span><span class="p">(</span><span class="n">GL_SMOOTH</span><span class="p">)</span>
+                <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>
+                <span class="n">glClearDepth</span><span class="p">(</span><span class="mf">1.0</span><span class="p">)</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_DEPTH_TEST</span><span class="p">)</span>
+                <span class="n">glEnable</span><span class="p">(</span><span class="n">GL_CULL_FACE</span><span class="p">)</span>
+                <span class="n">glDepthFunc</span><span class="p">(</span><span class="n">GL_LEQUAL</span><span class="p">)</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">Cubes</span> <span class="n">oGame</span>
+                <span class="n">oGame</span><span class="p">.</span><span class="n">oGameCube</span> <span class="p">{</span>
+                        <span class="n">aGameMap</span> <span class="o">=</span> <span class="n">oGame</span><span class="p">.</span><span class="n">aGameMap</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="n">rotate</span><span class="p">()</span>
+                <span class="p">}</span>
+
+        <span class="k">func</span> <span class="n">MouseClickEvent</span> <span class="n">oGame</span>
+                <span class="n">oGame</span> <span class="p">{</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                                <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>
+                                        <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>
+                                        <span class="n">ChangeActivePlayer</span><span class="p">()</span>
+                                        <span class="n">CheckGameOver</span><span class="p">()</span>
+                                <span class="k">ok</span>
+                        <span class="k">ok</span>
+                <span class="p">}</span>
+
+<span class="k">Class</span> <span class="n">GameLogic</span> <span class="k">from</span> <span class="n">GraphicsAppBase</span>
+
+        <span class="n">aGameMap</span> <span class="o">=</span> <span class="o">[</span>
+                <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>
+                <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>
+                <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="o">]</span>
+
+        <span class="n">aGameButtons</span> <span class="o">=</span> <span class="o">[</span>                        <span class="c"># x1,y1,x2,y2</span>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+        <span class="o">]</span>
+
+        <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
+
+        <span class="k">func</span> <span class="n">point2button</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span>
+                <span class="n">nRow</span> <span class="o">=</span> <span class="mi">0</span>
+                <span class="n">nCol</span> <span class="o">=</span> <span class="mi">0</span>
+                <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>
+                        <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>
+                        <span class="k">if</span> <span class="n">x</span> <span class="o">&gt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span> <span class="ow">and</span> <span class="n">x</span> <span class="o">&lt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span> <span class="ow">and</span>
+                           <span class="n">y</span> <span class="o">&gt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span> <span class="ow">and</span> <span class="n">y</span> <span class="o">&lt;=</span> <span class="n">rect</span><span class="o">[</span><span class="mi">4</span><span class="o">]</span>
+                                        <span class="k">switch</span> <span class="n">t</span>
+                                                <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>
+                                                <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>
+                                                <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>
+                                                <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>
+                                                <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>
+                                                <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>
+                                                <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>
+                                                <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>
+                                                <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>
+                                        <span class="k">off</span>
+                                        <span class="k">exit</span>
+                        <span class="k">ok</span>
+                <span class="k">next</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">ChangeActivePlayer</span><span class="p">()</span>
+                <span class="k">if</span> <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
+                        <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">o</span>
+                <span class="k">else</span>
+                        <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
+                <span class="k">ok</span>
+
+        <span class="k">func</span> <span class="n">CheckGameOver</span>
+                <span class="n">aList</span> <span class="o">=</span> <span class="o">[</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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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="o">]</span>
+                <span class="k">for</span> <span class="n">item</span> <span class="k">in</span> <span class="n">aList</span>
+                        <span class="k">switch</span> <span class="n">item</span>
+                                <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>
+                                <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>
+                                <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>
+                        <span class="k">off</span>
+                <span class="k">next</span>
+                <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>
+                <span class="k">if</span> <span class="n">nStatus</span>
+                        <span class="n">oGameOver</span> <span class="p">{</span>
+                                <span class="k">Switch</span> <span class="n">nStatus</span>
+                                        <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>
+                                        <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>
+                                        <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>
+                                <span class="k">off</span>
+                        <span class="p">}</span>
+                        <span class="n">refreshGame</span><span class="p">()</span>
+                <span class="k">ok</span>
+
+        <span class="k">func</span> <span class="n">refreshGame</span>
+                <span class="n">aGameMap</span> <span class="o">=</span> <span class="o">[</span>
+                        <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>
+                        <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>
+                        <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="o">]</span>
+                <span class="n">cActivePlayer</span> <span class="o">=</span> <span class="p">:</span><span class="n">x</span>
+
+        <span class="k">func</span> <span class="n">CheckWinner</span> <span class="n">lst</span>
+                <span class="o">//</span> <span class="n">垂直の確認</span>
+                <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>
+                        <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>
+                                <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>
+                                        <span class="k">return</span> <span class="n">lst</span><span class="o">[</span><span class="n">v</span><span class="o">]</span>
+                                <span class="k">ok</span>
+                        <span class="k">ok</span>
+                <span class="k">next</span>
+                <span class="o">//</span> <span class="n">水平</span>
+                <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>
+                        <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>
+                                <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>
+                                        <span class="k">return</span> <span class="n">lst</span><span class="o">[</span><span class="n">h</span><span class="o">]</span>
+                                <span class="k">ok</span>
+                        <span class="k">ok</span>
+                <span class="k">next</span>
+                <span class="o">//</span> <span class="n">十字型</span>
+                <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>
+                        <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>
+                <span class="k">ok</span>
+                <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>
+                        <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>
+                <span class="k">ok</span>
+                <span class="o">//</span> <span class="n">枕木型</span>
+                <span class="n">tie</span><span class="o">=</span><span class="kp">true</span>
+                <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>
+                        <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>
+                <span class="k">next</span>
+                <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>
+
+
+
+<span class="k">class</span> <span class="n">GameOver</span>
+
+        <span class="n">font</span> <span class="n">bitmap</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+                <span class="n">font</span> <span class="o">=</span> <span class="n">al_load_ttf_font</span><span class="p">(</span><span class="s">&quot;font/pirulen.ttf&quot;</span><span class="p">,</span><span class="mi">54</span><span class="p">,</span><span class="mi">0</span> <span class="p">)</span>
+                <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/ballon.png&quot;</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
+                <span class="n">al_destroy_font</span><span class="p">(</span><span class="n">font</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">Player1Win</span> <span class="n">oGame</span>
+                <span class="n">showMsg</span><span class="p">(</span><span class="n">oGame</span><span class="p">,</span><span class="mi">80</span><span class="p">,</span><span class="mi">430</span><span class="p">,</span><span class="s">&quot;Good job X you won!&quot;</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">Player2Win</span> <span class="n">oGame</span>
+                <span class="n">showMsg</span><span class="p">(</span><span class="n">oGame</span><span class="p">,</span><span class="mi">80</span><span class="p">,</span><span class="mi">430</span><span class="p">,</span><span class="s">&quot;Good job O you won!&quot;</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">NoOneWin</span> <span class="n">oGame</span>
+                <span class="n">showMsg</span><span class="p">(</span><span class="n">oGame</span><span class="p">,</span><span class="mi">150</span><span class="p">,</span><span class="mi">430</span><span class="p">,</span><span class="s">&quot;Oh no it&#39;s a tie!&quot;</span><span class="p">)</span>
+
+        <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>
+                <span class="n">oGame</span> <span class="p">{</span>
+                        <span class="n">drawScene</span><span class="p">()</span>
+                        <span class="n">al_flip_display</span><span class="p">()</span>
+                        <span class="n">al_rest</span><span class="p">(</span><span class="mf">0.3</span><span class="p">)</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                                 <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>
+                                 <span class="n">ALLEGRO_ALIGN_LEFT</span><span class="p">,</span><span class="n">cMsg</span><span class="p">)</span>
+                        <span class="n">al_flip_display</span><span class="p">()</span>
+                        <span class="n">al_rest</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
+                        <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">newdisplay</span><span class="p">)</span>
+                        <span class="n">al_set_target_backbuffer</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
+                <span class="p">}</span>
+
+<span class="k">class</span> <span class="n">GameCube</span>
+
+        <span class="n">bitmap</span> <span class="n">bitmap2</span> <span class="n">bitmap3</span>
+        <span class="n">textureX</span> <span class="n">textureO</span> <span class="n">textureN</span>
+
+        <span class="n">xrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+        <span class="n">yrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+        <span class="n">zrot</span> <span class="o">=</span> <span class="mf">0.0</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+                <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/o.png&quot;</span><span class="p">)</span>
+                <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>
+                <span class="n">bitmap2</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/x.png&quot;</span><span class="p">)</span>
+                <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>
+                <span class="n">bitmap3</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/empty.png&quot;</span><span class="p">)</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap2</span><span class="p">)</span>
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap3</span><span class="p">)</span>
+
+        <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>
+                <span class="n">glLoadIdentity</span><span class="p">()</span>
+                <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>
+                <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>
+                <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>
+                <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>
+                <span class="n">setCubeTexture</span><span class="p">(</span><span class="n">nTexture</span><span class="p">)</span>
+                <span class="n">drawCube</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">setCubeTexture</span> <span class="n">cTexture</span>
+                <span class="k">switch</span> <span class="n">cTexture</span>
+                        <span class="k">on</span> <span class="p">:</span><span class="n">x</span>
+                                <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>
+                        <span class="k">on</span> <span class="p">:</span><span class="n">o</span>
+                                <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>
+                        <span class="k">on</span> <span class="p">:</span><span class="n">n</span>
+                                <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>
+                <span class="k">off</span>
+
+        <span class="k">func</span> <span class="n">Rotate</span>
+                <span class="n">xrot</span> <span class="o">+=</span> <span class="mf">0.3</span> <span class="o">*</span> <span class="mi">5</span>
+                <span class="n">yrot</span> <span class="o">+=</span> <span class="mf">0.2</span> <span class="o">*</span> <span class="mi">5</span>
+                <span class="n">zrot</span> <span class="o">+=</span> <span class="mf">0.4</span> <span class="o">*</span> <span class="mi">5</span>
+
+        <span class="k">func</span> <span class="n">drawcube</span>
+                <span class="n">glBegin</span><span class="p">(</span><span class="n">GL_QUADS</span><span class="p">)</span>
+                        <span class="o">//</span> <span class="n">前面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">背面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">上面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="o">//</span> <span class="n">底面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+
+                        <span class="o">//</span> <span class="n">右面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+
+                        <span class="o">//</span> <span class="n">左面</span>
+                        <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>
+                        <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>
+                        <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>
+                        <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>
+                <span class="n">glEnd</span><span class="p">()</span>
+
+
+<span class="k">class</span> <span class="n">GameBackground</span>
+
+        <span class="n">nBackX</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">nBackY</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">nBackDiffx</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+        <span class="n">nBackDiffy</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
+        <span class="n">nBackMotion</span> <span class="o">=</span> <span class="mi">1</span>
+        <span class="n">aBackMotionList</span> <span class="o">=</span> <span class="o">[</span>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+                <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>
+        <span class="o">]</span>
+
+        <span class="n">bitmap</span>
+
+        <span class="k">func</span> <span class="n">Update</span>
+                <span class="n">draw</span><span class="p">()</span>
+                <span class="n">motion</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">draw</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">motion</span>
+                <span class="n">nBackX</span> <span class="o">+=</span> <span class="n">nBackDiffx</span>
+                <span class="n">nBackY</span> <span class="o">+=</span> <span class="n">nBackDiffy</span>
+                <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>
+                        <span class="n">nBackMotion</span><span class="o">++</span>
+                        <span class="k">if</span> <span class="n">nBackMotion</span> <span class="o">&gt;</span> <span class="n">len</span><span class="p">(</span><span class="n">aBackMotionList</span><span class="p">)</span>
+                                <span class="n">nBackMotion</span> <span class="o">=</span> <span class="mi">1</span>
+                        <span class="k">ok</span>
+                        <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>
+                        <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>
+                <span class="k">ok</span>
+
+        <span class="k">func</span> <span class="n">loadResources</span>
+                <span class="n">bitmap</span> <span class="o">=</span> <span class="n">al_load_bitmap</span><span class="p">(</span><span class="s">&quot;image/back.jpg&quot;</span><span class="p">)</span>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+                <span class="n">al_destroy_bitmap</span><span class="p">(</span><span class="n">bitmap</span><span class="p">)</span>
+
+
+<span class="k">class</span> <span class="n">GameSound</span>
+
+        <span class="n">sample</span> <span class="n">sampleid</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+                <span class="n">sample</span> <span class="o">=</span> <span class="n">al_load_sample</span><span class="p">(</span> <span class="s">&quot;sound/music1.wav&quot;</span> <span class="p">)</span>
+                <span class="n">sampleid</span> <span class="o">=</span> <span class="n">al_new_allegro_sample_id</span><span class="p">()</span>
+                <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>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+                <span class="n">al_destroy_allegro_sample_id</span><span class="p">(</span><span class="n">sampleid</span><span class="p">)</span>
+                <span class="n">al_destroy_sample</span><span class="p">(</span><span class="n">sample</span><span class="p">)</span>
+
+
+<span class="k">class</span> <span class="n">GraphicsAppBase</span>
+
+        <span class="n">display</span> <span class="n">event_queue</span> <span class="n">ev</span> <span class="n">timeout</span>
+        <span class="n">timer</span>
+        <span class="n">redraw</span>                  <span class="o">=</span> <span class="kp">true</span>
+        <span class="n">FPS</span>                     <span class="o">=</span> <span class="mi">60</span>
+        <span class="n">SCREEN_W</span>                <span class="o">=</span> <span class="mi">1024</span>
+        <span class="n">SCREEN_H</span>                <span class="o">=</span> <span class="mi">700</span>
+        <span class="n">KEY_UP</span>                  <span class="o">=</span> <span class="mi">1</span>
+        <span class="n">KEY_DOWN</span>                <span class="o">=</span> <span class="mi">2</span>
+        <span class="n">KEY_LEFT</span>                <span class="o">=</span> <span class="mi">3</span>
+        <span class="n">KEY_RIGHT</span>               <span class="o">=</span> <span class="mi">4</span>
+        <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>
+        <span class="n">Mouse_X</span>                 <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">Mouse_Y</span>                 <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">TITLE</span>                   <span class="o">=</span> <span class="s">&quot;Graphics Application&quot;</span>
+        <span class="n">PRINT_MOUSE_XY</span>  <span class="o">=</span> <span class="kp">False</span>
+
+        <span class="k">func</span> <span class="n">start</span>
+                <span class="n">SetUp</span><span class="p">()</span>
+                <span class="n">loadResources</span><span class="p">()</span>
+                <span class="n">eventsLoop</span><span class="p">()</span>
+                <span class="n">destroy</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">setup</span>
+                <span class="n">al_init</span><span class="p">()</span>
+                <span class="n">al_init_font_addon</span><span class="p">()</span>
+                <span class="n">al_init_ttf_addon</span><span class="p">()</span>
+                <span class="n">al_init_image_addon</span><span class="p">()</span>
+                <span class="n">al_install_audio</span><span class="p">()</span>
+                <span class="n">al_init_acodec_addon</span><span class="p">()</span>
+                <span class="n">al_reserve_samples</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+                <span class="n">al_set_new_display_flags</span><span class="p">(</span><span class="n">ALLEGRO_OPENGL</span><span class="p">)</span>
+                <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>
+                <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>
+                <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>
+                <span class="n">event_queue</span> <span class="o">=</span> <span class="n">al_create_event_queue</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_display_event_source</span><span class="p">(</span><span class="n">display</span><span class="p">))</span>
+                <span class="n">ev</span> <span class="o">=</span> <span class="n">al_new_allegro_event</span><span class="p">()</span>
+                <span class="n">timeout</span> <span class="o">=</span> <span class="n">al_new_allegro_timeout</span><span class="p">()</span>
+                <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>
+                <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>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_timer_event_source</span><span class="p">(</span><span class="n">timer</span><span class="p">))</span>
+                <span class="n">al_start_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
+                <span class="n">al_install_mouse</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_mouse_event_source</span><span class="p">())</span>
+                <span class="n">al_install_keyboard</span><span class="p">()</span>
+                <span class="n">al_register_event_source</span><span class="p">(</span><span class="n">event_queue</span><span class="p">,</span>
+                        <span class="n">al_get_keyboard_event_source</span><span class="p">())</span>
+
+        <span class="k">func</span> <span class="n">eventsLoop</span>
+                <span class="k">while</span> <span class="kp">true</span>
+                        <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>
+                        <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>
+                        <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_DISPLAY_CLOSE</span>
+                                <span class="n">CloseEvent</span><span class="p">()</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_TIMER</span>
+                                <span class="n">redraw</span> <span class="o">=</span> <span class="kp">true</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_AXES</span>
+                                <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>
+                                <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>
+                                <span class="k">if</span> <span class="n">PRINT_MOUSE_XY</span>
+                                        <span class="k">see</span> <span class="s">&quot;x = &quot;</span> <span class="o">+</span> <span class="n">mouse_x</span> <span class="o">+</span> <span class="n">nl</span>
+                                        <span class="k">see</span> <span class="s">&quot;y = &quot;</span> <span class="o">+</span> <span class="n">mouse_y</span> <span class="o">+</span> <span class="n">nl</span>
+                                <span class="k">ok</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_ENTER_DISPLAY</span>
+                                <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>
+                                <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>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_MOUSE_BUTTON_UP</span>
+                                <span class="n">MouseClickEvent</span><span class="p">()</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_DOWN</span>
+                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
+                                                <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>
+                                <span class="k">off</span>
+                        <span class="k">on</span> <span class="n">ALLEGRO_EVENT_KEY_UP</span>
+                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_UP</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_DOWN</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_LEFT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_RIGHT</span>
+                                                <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>
+                                        <span class="k">on</span> <span class="n">ALLEGRO_KEY_ESCAPE</span>
+                                                <span class="k">exit</span>
+                                <span class="k">off</span>
+                        <span class="k">off</span>
+                        <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>
+                                <span class="n">redraw</span> <span class="o">=</span> <span class="kp">false</span>
+                                <span class="n">drawScene</span><span class="p">()</span>
+                                <span class="n">al_flip_display</span><span class="p">()</span>
+                        <span class="k">ok</span>
+                        <span class="n">callgc</span><span class="p">()</span>
+                <span class="k">end</span>
+
+        <span class="k">func</span> <span class="n">destroy</span>
+                <span class="n">destroyResources</span><span class="p">()</span>
+                <span class="n">al_destroy_timer</span><span class="p">(</span><span class="n">timer</span><span class="p">)</span>
+                <span class="n">al_destroy_allegro_event</span><span class="p">(</span><span class="n">ev</span><span class="p">)</span>
+                <span class="n">al_destroy_allegro_timeout</span><span class="p">(</span><span class="n">timeout</span><span class="p">)</span>
+                <span class="n">al_destroy_event_queue</span><span class="p">(</span><span class="n">event_queue</span><span class="p">)</span>
+                <span class="n">al_destroy_display</span><span class="p">(</span><span class="n">display</span><span class="p">)</span>
+                <span class="n">al_exit</span><span class="p">()</span>
+
+        <span class="k">func</span> <span class="n">loadresources</span>
+
+        <span class="k">func</span> <span class="n">drawScene</span>
+
+        <span class="k">func</span> <span class="n">destroyResources</span>
+
+        <span class="k">func</span> <span class="n">MouseClickEvent</span>
+                <span class="k">exit</span>                    <span class="c"># イベントループから脱出</span>
+
+        <span class="k">func</span> <span class="n">CloseEvent</span>
+                <span class="k">exit</span>                    <span class="c"># イベントループから脱出</span>
+</pre></div>
+</div>
+<p>スクリーンショット:</p>
+<a class="reference internal image-reference" href="_images/tictactoe3d.png"><img alt="TicTacToe 3D ゲーム" src="_images/tictactoe3d.png" style="width: 450pt; height: 350pt;" /></a>
+</div>
+<div class="section" id="index-4">
+<span id="id2"></span><h2>その他の 3D サンプル<a class="headerlink" href="#index-4" title="このヘッドラインへのパーマリンク">¶</a></h2>
+<p>サンプルは ring/samples/3D フォルダにあります。</p>
+<p>このスクリーンショットはトップダウン - 多層立方体のサンプルです。</p>
+<img alt="3D サンプル" src="_images/more3dsamples.jpg" />
+<p>このスクリーンショットはカメラのサンプルです。</p>
+<img alt="カメラ" src="_images/more3dsamples2.jpg" />
+<p>このスクリーンショットはカメラと背景のサンプルです。</p>
+<p>開発者 : アズディン・レマル</p>
+<img alt="カメラと背景のサンプル" src="_images/cameraandbackground.png" />
+</div>
+</div>
+
+
+          </div>
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper"><h3>ページの内容</h3>
+<ul>
+<li><a class="reference internal" href="#">RingOpenGL と RingAllegro の用法 (3D グラフィックス)</a><ul>
+<li><a class="reference internal" href="#d">3D 立方体とテクスチャ</a></li>
+<li><a class="reference internal" href="#index-2">複数の立方体</a></li>
+<li><a class="reference internal" href="#tictactoe-3d">TicTacToe 3D ゲーム</a></li>
+<li><a class="reference internal" href="#index-4">その他の 3D サンプル</a></li>
+</ul>
+</li>
+</ul>
+
+
+  <h4>前のトピックへ</h4>
+  <p class="topless"><a href="usingopengl.html"
+                        title="前の章へ">RingOpenGL と RingFreeGLUT の用法 (3D グラフィックス)</a></p>
+  <h4>次のトピックへ</h4>
+  <p class="topless"><a href="goldmagic800.html"
+                        title="次の章へ">Gold Magic 800 ゲーム</a></p>
+  <div role="note" aria-label="source link">
+    <h3>このページ</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/usingopengl2.txt"
+            rel="nofollow">ソースコードを表示</a></li>
+    </ul>
+   </div>
+      
+<form action="search.html" method="get">
+  <input type="text" name="q" placeholder="Search" />
+  <input type="hidden" name="check_keywords" value="yes" />
+  <input type="hidden" name="area" value="default" />
+</form>
+      
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+<footer class="footer">
+  <p class="pull-right">
+    <a href="_sources/usingopengl2.txt"
+       rel="nofollow">Page Source</a> &nbsp;
+    <a href="#">Back to Top</a></p>
+  <p>
+    &copy; Copyright 2016-2020, Ring Team.<br/>
+    Created using <a href="http://www.sphinx-doc.org/en/stable/">Sphinx</a> 1.3.6. / astropy-sphinx-theme 1.1 (isVowel)
+  </p>
+</footer>
+  </body>
+</html>
\ No newline at end of file