人工知能に関する断創録スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。Learning、Kerasに関する記事が多いです。2008-05-03ウィンドウを表示するPygameまずは、すべてのゲームのひな形となるウィンドウを作成するプログラムです。ここでは、Pygameの初期化、メイン画面の作成、ゲームループなどを解説します。sys.exit()プログラムの実行方法Windowsをお使いなら上のプログラムをwindow.pyというファイルに保存して、ダブルクリックすれば実行できるはずです。上のプログラムをそのまま使う場合は、文字コードをutf-8にして保存してください。シフトJISやEUC-JPを使いたい場合はファイルのエンコードを参照のこと。ダブルクリックするとコマンドプロンプトもいっしょに表示されてしまいます。それがいやな場合は、window.pywというように拡張子をpywにしてダブルクリックしてみてください。コマンドプロンプトが表示されなくなります。window.pyとコマンドを打てば実行できます。-*-は、スクリプトファイルの日本語文字コードにutf-8を使うことを意味しています。utf-8でもOKです。スクリプトで日本語を使わなければこの行はいりません。range(128)のようなエラーが出る場合があります(たぶん出ても見えずに一瞬でウィンドウが閉じてしまいます)。その場合は、Pythonのsite-packageディレクトリ(WindowsならC:\Python27\Lib\site-packages)に以下のスクリプトを書いたsitecustomize.pyというファイルを作ってください。syssys.setdefaultencoding('utf-8')Pythonを使う場合は文字コードをutf-8で統一することをおすすめします。Windows付属のメモ帳はutf-8のファイルを開くと文字化けしますが、サクラエディタなど使うとutf-8でも何の問題なく開けます。ファイルを保存するときはutf-8を選択しないといけないのが少しめんどくさいですが・・・Pygameの初期化ここから本格的にPygameの解説に入ります。*は、Pygameを使う場合に必須のモジュールをインポートしています。画像を扱うpygame.image、図形を描画するpygame.draw、マウスを扱うpygame.mouseといったPygameの基本的なモジュールはすべてpygameの下に集まっています。これをインポートしないと始まりません。pygame.localsはpygameのさまざまな定数を格納したモジュールです。QUITという定数は本当はpygame.locals.QUITです。こんな長いのを毎回書くのが面倒なのでfrom文でインポートしてQUITと省略して書けるようにしています。Pygameを初期化pygame.init()pygame.init()は、Pygameの各モジュールを初期化する関数です。Pygameのモジュールを使う前に実行する必要があります。タイトルバーの文字列をセットpygame.display.set_caption(u&quot;ウィンドウの作成&quot;)pygame.display.set_mode()関数でメイン画面を作成します。引数には画面サイズをタプルで渡します。この場合は、640x480の画面ができます。Pygameでは画像を描画できる場所をSurfaceと呼んでいます(英語の発音はサーファス、サーフェイスではない!)。絵を描けるキャンバスみたいなイメージです。Surface)はただ1つだけでset_mode()で作ります。screenという変数に格納しておきます。pygame.display.set_caption()関数を使うとメインウィンドウのタイトルバーにキャプションを設定できます。sys.exit()このスクリプトの中でもっとも重要なのがゲームループです。これがないとスクリプトが一瞬で終了してしまいます。ゲームループは無限ループです。回ってwhile文の中身を処理し続けます。一般的にゲームプログラムはイベントドリブンという方式を取ります。これは、ゲームループをずーーーとまわしておいて、ユーザからの要求(イベント)が来るたびに処理する方法です。イベントとはマウスクリックしたメニューを選択したキー入力したなどユーザの要求の他に画面を描画しろなどOSの要求もあります。ゲームループは下のような構造が一般的です。イベント処理イベント処理は一番はじめにくる場合もありますが、どっちでもいいです。ゲームオブジェクトの更新→レンダリング→画面の更新はたいていこの順番です。ゲームオブジェクトの更新とは、RPGでキャラクターの位置を移動するなどを指します。レンダリングではバックバッファ(オフスクリーンともいう)と呼ばれるメモリ上のSurfaceにゲームオブジェクトを配置します。この時点ではまだ画面に表示されません。最後に画面を更新することでバックバッファが画面に表示されます。このように間にバックバッファをはさむことでちらつきを防止する方法はダブルバッファリングと呼ばれます。C++やJavaは自分でバックバッファを用意する必要がありますが、Pygameは自動的にやってくれます。アニメーションで詳しく説明します。pygame.Surface.fill()は、Surfaceを単色で塗りつぶす関数です。Surfaceオブジェクトでしたね。それぞれ0〜255の値を取り、RGBを組み合わせることでいろんな色が作れます。ためしに画面を別の色で塗りつぶしてみてください。pygame.display.update()は、先ほど説明した画面を更新する関数です。最後のイベント処理では、終了イベント(QUIT)がきたときにsys.exit()でスクリプトを終了しています。Pygameの関数ではなく、Pythonの関数です。QUITはウィンドウの×ボタンを押したときなどに発生します。これがあるおかげで無限ループから抜け出してスクリプトを終了できます。ないと強制終了しないと止まりません。このウィンドウを表示するスクリプトは、土台として何回も使います。コピペして再利用すると楽です。OpenBayesの使い方(1)インストール»プロフィールid:aidiary人工知能とその関連分野に興味があります。Blog|ブログを報告する。