Python

Pygameで加算合成

ほとんどの方にはどうでもいいことですが、、、 どうやら、Pygameで加算合成ができるようになるっぽいです。 http://www.pygame.org/docs/ref/surface.html#Surface.blit ほぼSDLのPygameだと、光の表現をするのに、それっぽい画像を用意したり半透明で頑張…

マップ読み込みクラス(その2)

RPGにおけるマップ格納アルゴリズム http://blog.livedoor.jp/abars/archives/50454661.html そもそもmapのvalueなんてほとんど0で疎なんだから、 ベタに持つのはばからしい。 なるほど。そういえば、そうですねー。 スクロールタイプのアクションやシューテ…

トークン管理クラス

たぶんPython以外では実装が難しいですが、 トークン(ゲームオブジェクト)管理クラスの実装について。 クラス図 AbstractFactoryっぽい設計です。 ソースコード #!/usr/bin/env python # -*- coding: utf-8 -*- class IToken: """ トークン基底クラス """ …

FMF読込クラス

もう少し変態的な書き方に修正。 #!/usr/bin/env python # -*- coding: utf-8 -*- import struct class Layer2D: """ 2次元レイヤー """ def __init__(self, width, height, data): """ コンストラクタ @param width 幅 @param height 高さ @param data デー…

FMFファイル読込スクリプト

多機能な汎用マップエディタ「Platinum」(http://www.vector.co.jp/games/soft/win95/game/se231004.html) のFMFファイルを読み込むスクリプト。 最近、kenmoは関数型プログラミングにはまっているので、 ところどころでおかしな書き方をしていますが、、。 …

レーダー

なんとなく思いついて作成しました。 #!/usr/bin/env python # -*- coding: utf-8 -*- import sys import pygame import math def main(): pygame.init() pygame.display.set_mode((120, 120), 0, 32) screen = pygame.display.get_surface() timer = 0 whil…

Pythonネタ

DLLの調査中に見つけたPythonネタ。 http://d.hatena.ne.jp/Wacky/20060304/1141471840 組込み型がクラスでないのは美しくないなどとあげつらっていた連中がかつての主張を過去形に直している様も最高だ最近kenmoは、「オブジェクト指向」について疑問を持っ…

Pythonで動くDLLをVCでビルドする方法

きっかけは、 「ピストンコラージュのファイルをPythonで聴けるようにしたいなー」 と思ったことからでした。 (※ピストンコラージュの再生エンジンはDLLで提供されている) ただ、DLLやら分っていないことが多く、 調査開始から3日間もかかってしまいまし…

バイナリデータの扱い

Pythonリファレンスブックなどというものを買ったのですが、 それを見ていたら、バイナリデータを簡単に扱える方法がのっていました。 >>> import struct >>> c = 'a' >>> struct.pack("c", c) 'a' >>> struct.pack("I", 2948509150) '\xde\xad\xbe\xaf' >>>…

CSVファイルからクラスを作る方法

例えば、こんなCSVから、ヘッダ部分の属性を持つ、データクラスを作りたいとします。 name,hp,mp,str,vit,agi,dex,int,men hoge,100,15,10,9,4,6,4,6 piyo,80,0,9,6,4,7,6,4 momo,90,50,8,8,3,3,10,12#!/usr/bin/env python # -*- coding: utf-8 -*- import …

ログ出力クラス

Pythonでは、以下のようにすると、自動的にコンソールとログに同時に出力できるようになります。 #!/usr/bin/env python # -*- coding: utf-8 -*- import traceback, sys class Logger: FILE_INFO = open("info.log", "w") FILE_ERR = open("error.log", "w"…

フィボナッチ数列

フィボナッチ数列のジェネレーター生成関数です。 #!/usr/bin/env python # -*- coding: utf-8 -*- def makeFibonacci(): def fibonacci(): # フィボナッチ数列のジェネレーター a0, a1 ,a2 = 1, 0, 0 while True: yield a0 a2 = a1 a1 = a0 a0 = a1 + a2 re…

平方根

会社のプログラム見ていたら、平方根を求める関数があったので、 Pythonで書いてみました。 def sqrt(var): if var <= 0: return 0 Xn_1 = var # 漸化式の和 Xn = Xn_1 + 1 # 漸化式の和の1つ前 while Xn_1 < Xn: Xn = Xn_1 Xn_1 = (Xn + (var / Xn)) / 2.0…

PyBML

BulletMLをPython用に作ってみました。 ただしkenmoの力不足のため、本家の仕様と結構異なるところがあります。 actionRefが使えない bulletの子要素に複数のactionを指定できない bullet時にメインループに制御を返してしまう fire時のspeedは親に依存 dire…

ソケットプログラミング

http://pleac.sourceforge.net/pleac_python/sockets.htmlを参考に作成しましたー。 まずはクライアントソケットです。 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket class Client: """ クライアントソケット """ def __init__(self, ip_ad…

Pythonでのマイクロスレッド

http://www.gamasutra.com/features/20020821/dawson_pfv.htm を見て知りましたー。 Pythonだとこんなに簡単にマイクロスレッドが、実装できてしまうんですねー。 …今まで知らなかったのが悔やまれます、、。 ウサギとカメのゲーム #!/usr/bin/env python # …

Builderパターンによる調合システムの構築

今回は、Builderパターンを使って、最近はやりの「調合システム」を構築してみます。 kenmoの勝手な考察ですが、調合システムは、 単体では弱いが、組み合わせをすることにより強力なアイテムになる 「あとアレがあれば、強力なアイテムが作れるのにー」とい…

ランレングス解凍

解凍ルーチンです。 #!/usr/bin/env python # -*- coding: utf-8 -*- import binascii class Writer: def __init__(self, filepath): self.f = file(filepath, "wb") def putByte(self, b): self.f.write("%c"%b) class Reader: def __init__(self, filepath…

圧縮始めました

とりあえず、超基本のランレングスを…。 「0xff,0xff,0xff」のようなデータを 「0x03,0xff」に圧縮するだけですが、、。 #!/usr/bin/env python # -*- coding: utf-8 -*- class Writer: def __init__(self, filepath): self.f = file(filepath, "wb") def pu…

Pygameでモザイク

以前、サーフェースのピクセルにアクセスしてモザイクをかける方法を試していたのですが、 それだと速度的に使えないので、 拡大縮小を使ってモザイクをかけるほうがいいみたいですね。 Pygameでのサンプルです。 // スクリーンサイズを(640, 480)とする // …

Pygameでモーションブラー

で、早速モーションブラーを作成。 モーションブラーの原理は、 現在の描画内容をテンポラリに取っておいて、 次回描画時にテンポラリをアルファブレンドする、 だけです。 Pygameを使うとこんな感じ。 // ゲームループ while(True): // 一連の描画処理 … sc…

Pythonのちょっとしたテクニック集

比較演算子をつなげて使う timer = 0 while True: print "%d:"%timer, if 0 <= timer < 1: print "Init" elif 1 <= timer < 10: print "MainLoop" else: print "Finish" break timer += 1 enumerateでインデックスと値を同時に取る arr = ["hoge", "piyo", "…

Pythonでのバイナリデータの扱い

バイナリデータの定義 print "\xff" # 16進の0xff文字列 16進数を文字列に変換 from binascii import * x = "\xff" s = b2a_hex(x) print "%r"%s 文字列を16進に変換 from binascii import * s = "ffffff" x = a2b_hex(s) print "%r"%x for c in x: print "%…

カットイン加速度算出のソースコード

http://d.hatena.ne.jp/kenmo/20051211のソースコードの例をPythonで。 #!/usr/bin/env python # -*- coding: utf-8 -*- class Vec2D: """ 2次元ベクトル """ def __init__(self, x=0, y=0): """ コンストラクタ """ self.x = x self.y = y def __sub__(sel…

Mediatorを使った衝突判定処理の分離

とりあえず、Pythonのソースコードだけ。 解説は後日にて…。 class Task: """ タスク """ def __init__(self, name, x=0, dx=0): """ コンストラクタ """ self.name = name self.x = x self.dx = dx def update(self): """ 更新 """ self.x += self.dx if(se…

Pythonで字句解析&構文解析

Pythonで字句解析&構文解析に挑戦。 #!/usr/bin/env python # -*- coding: utf-8 -*- import re # テキスト読み込みクラス class LexerReader: def __init__(self, f): self.f = f self.unget = False self.c = '' # 1文字読み込み def read(self): if sel…

Pythonのデバッグ

http://lowlife.jp/nobonobo/zine/5/8.html おおお、素晴しい…。 このおかげで、デバッグ速度が3倍(当社比)アップしました…!

RPGにおけるスクリプト2

この前のスクリプトは、 条件分岐がない ラベルがない ということで、ゲームを作るのに、 使えないスクリプトであることが判明しました…!(´∀`; というのは例えば、 階段を降りますか? Yes→降りる No→降りない ということもできません(´Д`; というこ…

RPGにおけるイベントスクリプトの構造

昨日に続いて、RPGネタです。 マップに配置したイベントIDをキーに、イベントスクリプトを呼び出す、 という話だったのですが、 今回はその「イベントスクリプト」の構造に触れてみたいと思います。 イベントスクリプトは、 イベントID ├フラグ操作 └イベン…

Pygameラッパライブラリ

Pygameを使いやすくするためのラッパライブラリを作ってみました。 Pygame自体が優れたライブラリなので、ラッパする必要なないのですが…。 しかし、なんというか、逆に使いにくくなっているかもしれません(´▽`; 提供する機能は、マウス入力と、単純な図…