• 検索結果がありません。

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

N/A
N/A
Protected

Academic year: 2021

シェア "IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators"

Copied!
22
0
0

読み込み中.... (全文を見る)

全文

(1)

IronPythonによる柔軟なゲーム開発

(2)

自己紹介

(3)

IronPythonって?

.Net FrameworkおよびMono上で動作するPython

.NetFramework、Monoは共通中間言語(CIL)のた

めの仮想マシン。

CILが動く仮想マシンの仕様は共通言語基盤(CLI)

と呼ばれている。

CILを利用できる言語としてはC#、C++/CLIなどが上

げられる。

発音は あいあんぱいそん 

(4)

Jim Huguin

CLIの設計は動的言語との相性が悪い、を主張す

るために

Pythonを試しに移植。

その結果、不幸にもよく動くものが出来てしまった。

CPython2.4より.Net2.0Β上でのIronPythonの

ほうが

1.8倍高速

それにより開発の継続を決定

(5)

バージョン

現在最新バージョンは

2.0.1(2009/02/13)

1.xと2.xはかなり違う。

日本の

Wikipediaの情報は遥かに古い。

国内の資料も大半が

1.x

今回の解説は

2.xなのでご安心を。

ただ、今回は

C#からの呼び出しのみ。

(6)

インストール

公式サイト

から

IronPython-2.0.1-Bin.zipをDL

IronPython.dll、

IronPython.Modules.dll

Microsoft.Scripting.Core.dll

Microsoft.Scripting.dll

Microsoft.Scripting.ExtensionAttribute.dll

を参照に追加

(7)

簡易な

Classの説明 その1

Microsoft.Scripting.Hosting.ScriptEngine

動的言語ランタイム

動的言語を

.net frameworkで実装するためのエンジン

Microsoft.Scripting.Hosting.ScriptSource

コンパイルされていないソースコードクラス

Microsoft.Scripting.Hosting.CompiledCode

コンパイルされたソースコードクラス

(8)

Hello World! その1

test1.py

print "Hello World!"

(9)

Hello World! その2

using System;

using Microsoft.Scripting.Hosting; class Test

{

public static void Main() {

// Pythonを実行できるエンジンの生成

ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); // テキストファイルからソースコードクラスを生成

ScriptSource source = engine.CreateScriptSourceFromFile("test1.py"); // ソースコードをコンパイル

CompiledCode compiled = source.Compile(); // コンパイルした結果を実行

compiled.Execute(); }

(10)

Hello World! その3

結果

Hello World!

(11)

簡易な

Classの説明 その2

Microsoft.Scripting.Hosting.ScriptScope

(12)

IronPythonでC#クラスの利用 その1

利用されるクラス

class SampleFunction {

static public string SampleString1 = string.Empty;

static public string CombineString(string string1, string string2) {

return string1 + string2; }

}

(13)

IronPythonでC#クラスの利用 その2

public static void Main() {

// Pythonを実行できるエンジンの生成

ScriptEngine engine = IronPython.Hosting.Python.CreateEngine(); // テキストファイルからソースコードクラスを生成

ScriptSource source = engine.CreateScriptSourceFromFile("test2.py"); // ソースコードをコンパイル

CompiledCode compiled = source.Compile(); // スコープの生成

ScriptScope scope = engine.CreateScope();

// スコープに 名前を SF として SampleFunctionのインスタンスを格納 scope.SetVariable("SF", new SampleFunction());

// コンパイルした結果を実行 compiled.Execute(scope); // 結果を表示

(14)

IronPythonでC#クラスの利用 その3

test2.py

SF.SampleString1 = "Hello "

result = SF.CombineString("World", "!")

SampleFunction.SampleString1 = “Hello ”

result = Wrold!

となり

Hello World! と表示されるはず。

(15)

IronPythonでC#クラスの利用 その4

結果は「

Hello World!」

IronPython は 戻り値を返せない。

ただし

resultはscopeに残る。

IronRubyでは

object re = compiled.Execute(scope);

などとして戻り値を返せる。

ただし

resultはscopeに残らない。

(16)

IronPythonでC#クラスを継承 その1

今回、継承するクラス

ネストしたクラスでは不可能な模様

namespace Sample {

abstract public class Abstract {

public abstract void Func(); }

(17)

IronPythonでC#クラスを継承 その2

ScriptEngine engine = IronPython.Hosting.Python.CreateEngine();

ScriptSource source = engine.CreateScriptSourceFromFile("test3.py"); CompiledCode compiled = source.Compile();

ScriptScope scope = engine.CreateScope(); compiled.Execute(scope); // Inheを取得 object inheType; inheType = scope.GetVariable("Inhe"); // Inhe を Abstract として インスタンスを作成 Sample.Abstract inhe = IronPython.Runtime.Operations.PythonCalls.Call(inheType) as Sample.Abstract; // Inheを実行 inhe.Func();

(18)

IronPythonでC#クラスを継承 その3

test3.py

AddReference Sample3(.exe)を参照先に追加

どちらでもお好きなほうをどうぞ。

import clr clr.AddReference('Sample3') from Sample import Abstract class Inhe(Abstract): def Func(self): import clr clr.AddReference('Sample3') import Sample.Abstract class Inhe(Sample.Abstract): def Func(self):

(19)

IronPythonでC#クラスを継承 その4

結果、「

Hello World!」が表示されました。

問題なく継承されています。

import clr

clr.AddReference('Sample3')

の代わりに

engine.Runtime.LoadAssembly(typeof(Sample.Abstract).

Assembly);

C#側で参照を追加しても問題ありません。

(20)

他のスクリプト言語に対するメリット

関数のラッパーや追加のコードを一切書く必要なし

1行書くだけでクラスのメソッド全てが使用可能

プラグインを入れれば

VisualStudioでブレークポイ

ントを入れることも可能らしい

.NETの資産のほとんどを利用可能

(21)

他のスクリプト言語に対するデメリット

Lua、Squirrelなどに対して遅い。

何でも

.NETの関数なら実行できてしまう。

MODとして使うとき、セキュリティ面で問題

(22)

是非、触ってみましょう。

ご清聴ありがとうございました。

        

Q&A

参照

関連したドキュメント

With the passage of the Resource Conservation and Recovery Act (RCRA), and the subsequent amendments to RCRA, eorts to provide tighter controls on the transportation and disposal

With the passage of the Resource Conservation and Recovery Act (RCRA), and the subsequent amendments to RCRA, eorts to provide tighter controls on the transportation and disposal

極大な をすべて に替えることで C-Tutte

[r]

えて リア 会を設 したのです そして、 リア で 会を開 して、そこに 者を 込 ような仕 けをしました そして 会を必 開 して、オブザーバーにも必 の けをし ます

本検討で距離 900m を取った位置関係は下図のようになり、2点を結ぶ両矢印線に垂直な破線の波面

パスワード 設定変更時にパスワードを要求するよう設定する 設定なし 電波時計 電波受信ユニットを取り外したときの動作を設定する 通常

Even if it is true that wh-words take wider scope over any other Q-expressions, as shown in 4, a universal quantifier mei-ge ren 'every NP' in subject position can have wider scope