annotate presen/slide.pdf.html @ 13:7b39f43e4088

fix english description.
author Kazuma Takeda
date Wed, 15 Feb 2017 17:20:12 +0900
parents 4d06f18af177
children b2f7835ac00e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
1 <!DOCTYPE html>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
2 <html>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
3 <head>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
4 <meta http-equiv="content-type" content="text/html;charset=utf-8">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
5 <title>ゲームエンジンにおけるJungleDatabaseの提案</title>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
6
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
7 <meta name="generator" content="Slide Show (S9) 2.2.0 on Ruby 2.3.3 (2016-11-21) [x86_64-darwin16]">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
8 <meta name="author" content="Kazuma Takeda" >
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
9
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
10 <!-- style sheet links -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
11 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
12 <link rel="stylesheet" href="s6/themes/print.css" media="print">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
13 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
14
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
15 <!-- JS -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
16 <script src="s6/js/jquery-1.11.3.min.js"></script>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
17 <script src="s6/js/jquery.slideshow.js"></script>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
18 <script src="s6/js/jquery.slideshow.counter.js"></script>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
19 <script src="s6/js/jquery.slideshow.controls.js"></script>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
20 <script src="s6/js/jquery.slideshow.footer.js"></script>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
21 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
22
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
23 <!-- prettify -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
24 <link rel="stylesheet" href="scripts/prettify.css">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
25 <script src="scripts/prettify.js"></script>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
26
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
27 <style>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
28 .slide {page-break-after: always;}
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
29 </style>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
30
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
31
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
32
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
33
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
34 </head>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
35 <body>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
36
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
37 <div class="layout">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
38 <div id="header"></div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
39 <div id="footer">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
40 <div align="right">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
41 <img src="s6/images/logo.svg" width="200px">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
42 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
43 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
44 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
45
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
46 <div class="presentation">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
47
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
48 <div class='slide cover'>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
49 <table width="90%" height="90%" border="0" align="center">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
50 <tr>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
51 <td>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
52 <div align="center">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
53 <h1><font color="#808db5">ゲームエンジンにおけるJungleDatabaseの提案</font></h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
54 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
55 </td>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
56 </tr>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
57 <tr>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
58 <td>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
59 <div align="left">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
60 Kazuma Takeda
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
61
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
62 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
63 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
64 </td>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
65 </tr>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
66 </table>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
67 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
68
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
69 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
70 <!-- === begin markdown block ===
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
71
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
72 generated by markdown/1.2.0 on Ruby 2.3.3 (2016-11-21) [x86_64-darwin16]
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
73 on 2017-02-15 16:56:02 +0900 with Markdown engine kramdown (1.13.1)
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
74 using options {}
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
75 -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
76
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
77 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
78 <h1 id="section">この発表のセクション</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
79
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
80 <ul>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
81 <li>RDBとNoSQL</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
82 <li>Jungle Databseの提案</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
83 <li>Jungleの仕様</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
84 <li>ゲームのデータ構造</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
85 <li>Jungle-Sharpの実装</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
86 <li>例題ゲームの実装</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
87 <li>Jungle-Sharpの改良点</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
88 </ul>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
89
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
90
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
91 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
92 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
93 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
94 <h1 id="rdbnosql">RDBとNoSQL</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
95
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
96 <p>Relational Databseと呼ばれるRDBは行と列からなる2次元のテーブルにより実装されているデータベース。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
97 データ型として文字列や数値、日付、Bool型がある。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
98
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
99 <p>データの一貫性を重視しているRDBでは分散システムには向いていない。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
100
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
101 <p>NoSQL(Not Only SQL) Databaseと呼ばれる非リレーショナル型のデータベース。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
102 スキームを持たないため、扱うデータの型を気にしなくてもよい。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
103
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
104 <p>一貫性を一部犠牲にしているNoSQLでは分散させることが可能である。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
105 CassandraやMongoDBなどが例に挙げられる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
106
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
107
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
108 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
109 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
110 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
111 <h1 id="section-1">インピーダンスミスマッチ</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
112
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
113 <p>プログラム中ではListやネスト構造によりデータを扱うことができる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
114 しかしデータベースにはそのような概念はない。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
115
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
116 <p>そこにプログラムとデータベースの間にギャップが生じる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
117 これをインピーダンスミスマッチという。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
118
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
119 <p>RDBではネスト構造を許さない第一正規形とは相容れない。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
120
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
121
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
122 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
123 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
124 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
125 <h1 id="nosql">NoSQLのトランザクション</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
126
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
127 <p>CassandraやほとんどのNoSQLではACIDなトランザクションがない。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
128 トランザクション中の処理は外部からは閲覧出来ない。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
129 しかし、複数行を1回で書き換える機能を持っていないため、
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
130 データを書き込んでいる途中の状態が見えてしまう場合がある。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
131
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
132
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
133 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
134 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
135 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
136 <h1 id="jungle-database">Jungle Databaseの提案</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
137
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
138 <p>前章までRDBではプログラムとのミスマッチや分散構造に向いていない問題、NoSQLではトランザクションでの問題点について触れた。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
139 これらの問題を解決するため、当研究室で開発しているデータベースJungleを提案する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
140
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
141 <p>Jungleは過去の変更データを保存しつつ新しい木を構築してく木構造(非破壊構造)の手法をとる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
142 非破壊にすることにより、データを読み出す側と書き込む側のデータを安全に扱うことができる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
143
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
144 <p>Jungleは名前で管理された木のあつまりからなる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
145 木は複数のノードの集合からなる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
146
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
147 <p>ノード自身にはKey-Valueのデータを格納することができる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
148 これはデータベースのレコードに相当する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
149
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
150 <p>Jungleのトランザクションはルートから変更を行うノードまでコピーを行い、新しく木構造を構築する。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
151 最後にルートをアトミックに入れ替えてコミットする。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
152 コミットが失敗した場合は最初からやり直す。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
153 これにより、原子性を実現する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
154
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
155 <p>Jungleはcommit logを持ち、それを他のノードやディスクに転送することにより、
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
156 分散構成と永続性を実現する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
157
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
158
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
159 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
160 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
161 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
162 <h1 id="jungledatabase">JungleのDatabase</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
163
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
164 <p>Jungleの構造としては以下の図のようになっている。</p>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
165
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
166 <div style="text-align: center;">
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
167  <img src="./images/transaction.pdf" alt="message" width="700" />
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
168 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
169
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
170
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
171 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
172 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
173 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
174 <h1 id="section-2">ゲームのデータ構造</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
175
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
176 <p>Jungleはもともと認証管理システムやWeb向けに作られたものである。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
177 これらはすべて木構造をベースとしている。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
178
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
179 <p>ゲームでも同じことが考えられる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
180 そこでゲームエンジンUnity向けにJungleの再実装を行い、ゲーム向けのデータベースとしての提案を行う。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
181
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
182 <p>Unityは3Dゲームエンジンで、ゲームを構成する要素(Object)をC#で制御する。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
183 Objectは一つのゲームのシーン(一画面の状況)の中で木構造を持つ。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
184 これをシーングラフと言う。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
185 シーングラフをそのままJungleに格納するという手法が考えられる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
186
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
187
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
188 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
189 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
190 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
191 <h1 id="jungle-sharp">Jungle-Sharpの実装</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
192
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
193 <p>JungleはもともとJavaとHaskellで書かれていた。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
194 今回はJava版をベースにC#で再実装する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
195
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
196 <p>エラーをチェックするEitherの部分だけはHaskellの要素を取ってくる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
197
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
198
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
199 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
200 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
201 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
202 <h1 id="atomic-refarence">Atomic Refarenceの実装</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
203
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
204 <p>Jungleの木の変更(commit)はCAS(Check and Set)を用いてatomicに行われる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
205 競合している書き込み中に自分の書き込みが成功した場合に関数commit()が成功する。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
206 失敗した場合ははじめからもう一度行う。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
207
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
208 <p>JavaのモジュールにはAtomicRefarenceが存在した。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
209 C#では自分で作る必要があった。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
210
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
211 <pre lang="C"><code class="language-\#">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
212 // C\#
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
213 public bool CompareAndSet(T newValue, T prevValue) {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
214 T oldValue = value;
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
215 return (oldValue
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
216 != Interlocked.CompareExchange
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
217 (ref value, newValue, prevValue));
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
218 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
219
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
220 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
221
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
222
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
223 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
224 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
225 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
226 <h1 id="list">Listの実装</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
227
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
228 <p>木やリストをたどる時にJavaではIteratorを用いる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
229 Iteratorは次の値があるかを返すboolean hasNext()と、Tという型の次の値を取ってくるT next()を持つObjectである。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
230 C#では木やリストを辿りながらyeildで次の値を返す。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
231 Javaでは以下のように実装されている。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
232
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
233 <pre lang="Java"><code>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
234 public Iterator&lt;T&gt; iterator() {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
235 return new Iterator&lt;T&gt;() {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
236 Node&lt;T&gt; currentNode = head.getNext();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
237
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
238 @Override
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
239 public boolean hasNext() {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
240 return currentNode.getAttribute()
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
241 != null;
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
242 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
243
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
244 @Override
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
245 public T next() {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
246 T attribute
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
247 = currentNode.getAttribute();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
248 currentNode
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
249 = currentNode.getNext();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
250 return attribute;
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
251 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
252 };
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
253 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
254
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
255 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
256
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
257
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
258 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
259 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
260 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
261 <h1 id="list-1">Listの実装</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
262
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
263 <p>C#ではそもそも匿名クラスの中でメソッドを定義できない。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
264 この場合はIEnuratorを使って書き直すことができた。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
265
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
266 <pre lang="C"><code class="language-\#">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
267 // C\#
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
268 public IEnumerator&lt;T&gt; iterator() {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
269 Node&lt;T&gt; currentNode = head.getNext();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
270 while (currentNode.getAttribute() != null) {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
271 yield return (T)currentNode.getAttribute();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
272 currentNode = currentNode.getNext ();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
273 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
274 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
275
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
276 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
277
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
278
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
279 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
280 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
281 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
282 <h1 id="either">Eitherのチェック</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
283
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
284 <p>Haskellでは例外処理はモナド内部で行う設計になっている。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
285 Eitherもその一つである。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
286
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
287 <p>Jungleではある処理に対してエラーであればA、
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
288 なければBをEitherに包んで返す。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
289
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
290 <p>JavaのJungleでは分岐を使ってチェックする必要があった。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
291
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
292 <pre lang="Java"><code>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
293 // Java
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
294 Either&lt;Error,TreeNode&gt; either = children.at(2);
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
295 if (either.isA())
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
296 return either.a();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
297 TreeNode child = either.b();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
298
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
299 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
300
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
301
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
302 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
303 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
304 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
305 <h1 id="bind">bindの実装</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
306
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
307 <p>Eitherクラスに実装したbindは自身のEitherをチェックした後、
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
308 エラーがなければ関数fを実行し評価する仕組みである。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
309
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
310 <pre lang="C"><code class="language-\#">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
311 public Either&lt;A, B&gt; bind (System.Func&lt;B, Either&lt;A, B&gt;&gt; f) {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
312 if (this.isA ()) {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
313 return this;
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
314 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
315 return f (this.b ());
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
316 }
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
317
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
318 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
319
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
320 <p>ユーザー側でのエラーのチェックは不要になるが、関数fのLambda式を自分で定義する必要がある。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
321 次のページにその例を示す。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
322
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
323
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
324 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
325 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
326 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
327 <h1 id="bind-1">bindの引数に渡すラムダ式の例</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
328
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
329 <pre lang="C"><code class="language-\#">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
330 Either&lt;Error, JungleTreeEditor&gt; either = DefaultEither&lt;Error, JungleTreeEditor&gt;.newB(editor);
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
331 Item apple = new Item("Apple");
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
332
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
333 either = either.bind ((JungleTreeEditor arg) =&gt; {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
334 return arg.putAttribute (rootNode, item.name, item);
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
335 });
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
336
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
337 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
338
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
339
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
340 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
341 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
342 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
343 <h1 id="section-3">例題のゲーム</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
344
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
345 <p>前章ではJungle-Sharpのどのように実装したかを述べた。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
346
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
347 <p>この章では実際にゲームを構築し、そのデータベースとしてJungleを導入する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
348
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
349 <p>今回作ったゲームはMinecraftの簡易版である。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
350
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
351 <div style="text-align: center;">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
352  <img src="./images/craft.png" alt="message" width="400" />
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
353 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
354
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
355 <p>プレイヤーは自由にマップを移動し、ステージの破壊や、生成を行うことができる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
356
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
357 <p>破壊や生成のオペレーションに合わせてJungleのノードにも同期する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
358
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
359
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
360 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
361 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
362 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
363 <h1 id="section-4">ゲームデータの種類</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
364
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
365 <p>ゲームのデータにはいくつかの種類が考えられる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
366
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
367 <h2 id="section-5">オブジェクトが単体で持つデータ</h2>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
368
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
369 <p>シーン内に存在するオブジェクトが持つパラメータ。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
370
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
371 <p>例えば、プレイヤーのHPや経験値、位置座標などを示す。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
372
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
373 <h2 id="section-6">オブジェクト1つで複数持つデータ</h2>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
374
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
375 <p>プレイヤーが持つアイテムデータなどを示す。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
376
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
377 <h2 id="readonly">マスタデータ(ReadOnly)</h2>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
378
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
379 <p>アイテムの名前や敵の出現確率などを示す。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
380
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
381 <p>ゲーム開発者のみが更新できる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
382
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
383
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
384 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
385 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
386 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
387 <h1 id="section-7">データのデータ設計</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
388
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
389 <p>Jungleには複数の木を持つことができる。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
390
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
391 <p>ゲームのシーンを構成するGameTreeとアイテムを管理するItemTreeをJungle内に作る。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
392
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
393
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
394 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
395 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
396 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
397 <h1 id="gametree">GameTree</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
398
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
399 <p>GameTreeではシーン内にあるPlayerやStageを構成するCubeなどを格納している。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
400 Jungleではオブジェクトが単体で持つデータと、オブジェクト一つで複数持つデータを同時に表現できる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
401 以下にその例を示す。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
402
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
403 <div style="text-align: center;">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
404  <img src="./images/Tree.pdf" alt="message" width="600" />
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
405 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
406
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
407
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
408 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
409 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
410 <!-- _S9SLIDE_ -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
411 <h1 id="itemtree">ItemTree</h1>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
412
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
413 <p>ItemTreeではItemデータを格納している。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
414 データの種類ではマスターデータにあたいする。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
415 以下にその例を示す。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
416
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
417 <div style="text-align: center;">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
418  <img src="./images/ItemTree.pdf" alt="message" width="800" />
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
419 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
420
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
421
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
422 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
423 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
424 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
425 <h1 id="jungle">Jungleの改良</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
426
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
427 <p>前章では例題となるゲームを作成した。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
428 その上でJungleではデータ型について問題となった。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
429
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
430 <p>C#の再実装を行った際にJavaのJungleに沿ってデータの型、つまりByteArrayで設計を行っていた。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
431
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
432 <p>データの格納を行うたびにByte Arrayへのキャストを行う必要がある。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
433 しかし、キャストの処理は軽くはない。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
434
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
435 <p>そこで、シーンを構成するObjectをそのまま格納するに仕様を変更した。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
436 C#ではObjectクラスのエイリアスとしてobject型が使える。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
437
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
438 <pre lang="C"><code class="language-\#">
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
439 Player player = new Player ();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
440 either = either.bind ((JungleTreeEditor arg) =&gt; {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
441 return arg.putAttribute ("Player", player);
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
442 });
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
443
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
444 Enemy enemy = new Enemy ();
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
445 either = either.bind ((JungleTreeEditor arg) =&gt; {
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
446 return arg.putAttribute ("Enemy", enemy);
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
447 });
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
448
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
449 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
450
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
451
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
452 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
453 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
454 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
455 <h1 id="section-8">データを取り出す</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
456
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
457 <p>データを取り出すにはGenericで型を指定する、もしくはas演算子を用いてキャストを行う。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
458 以下に取り出す例を記述する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
459
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
460 <pre lang="C"><code class="language-\#">Player player = attr.get&lt;Player&gt; ("Player");
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
461 Enemy enemy = attr.get ("Enemy") as Enemy;
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
462 </code></pre>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
463
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
464 <p>データの型の再設計を行ったことによりシーン内のオブジェクトをそのまま格納が可能になった。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
465 格納の際にByte Arrayに変換する必要がない。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
466
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
467 <p>分散構造や、ネットワークで必要な時だけ変換する。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
468
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
469
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
470 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
471 <div class='slide '>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
472 <!-- _S9SLIDE_ -->
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
473 <h1 id="section-9">まとめ</h1>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
474
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
475 <p>本研究の流れは</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
476
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
477 <ul>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
478 <li>Jungle-Sharpの実装</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
479 <li>UnityでのApplicationの実装</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
480 <li>問題点の改良</li>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
481 </ul>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
482
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
483 <p>である。</p>
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
484
13
7b39f43e4088 fix english description.
Kazuma Takeda
parents: 11
diff changeset
485 <p>Jungle-Sharpの実装ではJavaと比較的似ている言語であるため、移行する方法を確立した。
11
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
486 C#版のJungleではJavaに劣らない、もしくはそれ以上のパフォーマンスを出すことが出来た。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
487
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
488 <p>実際のゲームに合わせたJungleの拡張を行った。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
489
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
490 <p>データの格納の際にByteBufferであったものをObject型に変更した。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
491 これにより、シーンを構成するObjectデータを手間なく格納することを可能にした。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
492
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
493 <p>Jungleは非破壊であるため、過去の変更を持っている。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
494
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
495 <p>ゲームにおいて過去の木を持ち続けることはパフォーマンスの低下につながる。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
496 そのため、過去の木をどこまで必要かを検討しなければならない。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
497
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
498 <p>現在C#版のJungleにはデータを永続化させる仕組みは備わっていない。
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
499 実用的なゲームのデータベースとして使うためには永続化を実装する必要がある。</p>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
500 <!-- === end markdown block === -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
501 </div>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
502
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
503
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
504 </div><!-- presentation -->
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
505 </body>
4d06f18af177 add prepaper.
Kazuma Takeda
parents:
diff changeset
506 </html>