2005-05-01から1ヶ月間の記事一覧

2次元の2つの動いている物体の衝突応答

ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmersを参考に作ってみました。 import pygame import math class Point2D: def __init__(self, x, y): self.x = x self.y = y def __add__(self, pos): return Point2D(self…

書籍購入

ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmers作者: Wendy Stahler出版社/メーカー: ソフトバンククリエイティブ発売日: 2005/05/11メディア: 単行本購入: 13人 クリック: 373回この商品を含むブログ (55件) を見る…

回転行列

3D関係の入門書を読んでいると出てくるこいつ。 (2Dの座標変換ですが…(´Д`; その正体がこの前の授業でようやく分かりました。 まず、点Aの座標は、 により求められます。 そして、点Bの座標は、 により求めることができます。 は、加法定理より、 となり…

麻雀のアルゴリズム1

麻雀を作るために必要な処理は、 麻雀のルールの実装 CPUの思考ルーチン となります。 まあ、ゲームの本質は「ルール」と「遊び相手」ですから、 当たり前といえば当たり前なのですが…。 とりあえず、CPUの思考ルーチンは後回しです。 そもそも、ルールが確…

Pygameで画像処理10

モザイク化です。 画面遷移時に使えますね。 import pygame import math # Mosaic # @param tBuf サーフェス # @param RECT モザイクをかける範囲 # @param SIZE モザイクの大きさ def transMosaic(tBuf, RECT, SIZE): if(SIZE < 1): return None retBuf = p…

Pygameで画像処理9

グレースケールの改良版です。 人の目は緑に最も良く反応し、続いて赤、青という反応をします。 よって、このように重みをかけると、 自然なグレースケールになるわけです。 import pygame import math _gSrc = None def main(): pygame.init() pygame.displ…

ゲーム作成に役立つオブジェクト指向7

はじめに 今回はFacadeパターンです。 Facadeパターンは「シンプルな窓口」を提供する方法です。 簡単に言えば、 「複雑な操作・手順」を 「簡単」に行えるようにしたラッパークラス、 といえます。 クラス図 これは、DirectXのAPIに対してFacadeパターンを…

細部にこそ神は宿る

kenmoは変な宗教に入ったわけではありません(´Д`; さて、突然ですが、ゲームを面白くするにはどうすればよいのでしょうか。 ・ ・ ・ 漠然とし過ぎて、よく分からないですよね。 では、キャラを面白く動かすにはどうするか。 これもちょっと漠然としてい…

Pythonで画像処理8

輪郭抽出です。 大きめの画像でやると、そこそこキレイに抽出できますね。 import pygame import math _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("輪郭抽出") _gScr = pygame.display.get_surface…

ゲーム作成に役立つオブジェクト指向6

はじめに 前回のInterpreterパターンは、 そのままではゲームに使うことはできません。 それは、 Nodeクラスに、キャラの行動パターンを記述しなければならない からです。 それを回避する方法がVisitorパターンです。 Visitorパターンとは? Visitorとは、…

ゲーム作成に役立つオブジェクト指向5

今回はInterpreterパターンについてです。 Interpreterというのは、 例えばテキストファイルに書かれた命令を、 実行時に一行ずつ解読しながらその内容を実行する、 というものです。 例えば、インタプリタは、 アドベンチャーゲームのフローを制御するスク…

Pygameで画像処理7

これで最後。ネガ変換です。 import pygame _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("ネガ変換") _gScr = pygame.display.get_surface() tBuf = pygame.image.load("kenmo.jpg").convert() # ネ…

Pygameで画像処理6

RGB成分入れ替えです。 import pygame _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("RGB抽出") _gScr = pygame.display.get_surface() tBuf = pygame.image.load("kenmo.jpg").convert() # RGB抽出 …

Pygameで画像処理5

ノリノリです。RGB抽出を。 import pygame _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("RGB抽出") _gScr = pygame.display.get_surface() tBuf = pygame.image.load("kenmo.jpg").convert() # RGB…

Pygameで画像処理4

続いて、2値変換を。 import pygame _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("2値変換") _gScr = pygame.display.get_surface() tBuf = pygame.image.load("kenmo.jpg").convert() threshold …

Pygameで画像処理3

次にセピア変換を。 import pygame _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("セピア変換") _gScr = pygame.display.get_surface() tBuf = pygame.image.load("kenmo.jpg").convert() # セピア変…

Pygameで画像処理2

ここからがホントの画像処理です。 で、超基本のグレースケールから、、。 import pygame _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("グレースケール") _gScr = pygame.display.get_surface() tBu…

Pygameで画像処理1

画像処理でもなんでもない気がしますが…。 回転処理などを。 import pygame _gSrc = None # Image Ratation def drawRote(buf, x, y, angle): srcSize = tBuf.get_size() tmpBuf = pygame.transform.rotate(tBuf, angle) dstSize = tmpBuf.get_size() x -= (…

タスクシステム(基本編)

http://www5f.biglobe.ne.jp/~kenmo/program/task/task2/task2.html 「タスクシステム」って、ゲームプログラムの基本のわりには、 難しい言葉で書かれていることが多いから、できるだけ簡単に解説しました。 で、 なぜタスクシステムなのか? ゲームループ…

マイクロスレッド

そもそもゲームプログラムというのは、 画面上にたくさんあるキャラクターを同時に動かす、 という「マルチスレッド(並列実行)」を要求されるプログラムです。 それをシングルスレッドで擬似的に実現したのが 「タスクシステム」なのです。 しかし、例えば…

内挿法

ようやく画像処理の授業が幾何学変換に入り、 面白くなってきたので、ちょっとメモ書き。 画像の拡大処理について考えてみます。 拡大をする場合には、 拡大後のサイズを持った画像のバッファを作る そのサイズで(x,y)のループをする 元の画像に対応する色を…

タスクシステム5

いよいよ最終回です(ようやく?) 今回はタスクシステムを発展させてみます。 C++におけるタスクシステム これまでは、タスクを「構造体」で定義していました。 ですが、せっかくC++を使っているので、 「クラス」で実装できないか?ということを考えてみま…

書籍購入

図解入門よくわかる微分積分の基本と仕組み (How‐nual Visual Guide Book)作者: 小林道正出版社/メーカー: 秀和システム発売日: 2005/04/04メディア: 単行本 クリック: 2回この商品を含むブログ (1件) を見る画像処理に役に立つよ! ということで受講した微…

タスクシステム4

タスク同士の当たり判定 ここが超重要です。はいはいテストに出ますよー(何のテストじゃ) 例えば、ブロック崩し(こればっかですね)において、 以下のタスクがぶつかった場合、何らかのやり取りを考えなければなりません。 ボールvs壁 ボールvsパドル ボ…

運動不足

ここ一ヶ月の間、朝起きたらパソコンの電源を入れて、 夜までプログラムをする、などという不健康極まりない生活をしていたためか、 身体に無理がきているようです。 (首が回らなくなったり、肩こりがひどかったり…) 「こりゃいかん!」 と思って、google…

タスクシステム3

タスクチェンジ タスクチェンジとは、実行関数ポインタの入れ替えを行うことです。 たとえば、シューティングゲームでは、敵の行動について、以下のパターンがあります。 初期処理 移動したり弾を撃ったりする 爆発処理 これらの処理を関数ポインタの入れ替…

タスクシステム2

ダミータスク タスクは双方向リストとなるわけですが、 先頭と末尾のタスクに「NULL」をいちいち設定するのは大変です。 ということで、先頭と末尾のタスクは、 ダミーとして空のタスクを用意しておきます。 これにより、タスクの追加・削除の処理が楽になり…

タスクシステム1

タスクシステムとは何か タスクシステムとは、 複数の「タスク」を並列実行する 仕組みのことです。 では、「タスク」というのは何かというと、 ゲームを構成する最小単位の要素 のことです。 例えば、ブロック崩しにおける、ブロックやパドル、ボールなどが…

MFCで画像表示3

C++

CreateDIBSectionで表示。 void *buffer; // 画像ビット配列 BITMAPINFO bmi; ZeroMemory(&bmi, sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biWidth = width; bmi.bmiHeader.biHeight = height; bmi.bmiHeader.biPlanes…

MFCで画像表示2

C++

CBitmapでリソースから読み込み CBitmap bitmap; bitmap.LoadBitmap(リソースID); CClientDC dc(this); CDC mDC; mDC.CreateCompatibleDC(&dc); CBitmap *old = mDC.SelectObject(&bitmap); dc.BitBlt( 0, 0, 50, 50, &mDC2, 0, 0, SRCCOPY); mDC.SelectObje…