2005-05-01から1ヶ月間の記事一覧
ゲーム開発のための数学・物理学入門 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の座標は、 により求めることができます。 は、加法定理より、 となり…
麻雀を作るために必要な処理は、 麻雀のルールの実装 CPUの思考ルーチン となります。 まあ、ゲームの本質は「ルール」と「遊び相手」ですから、 当たり前といえば当たり前なのですが…。 とりあえず、CPUの思考ルーチンは後回しです。 そもそも、ルールが確…
モザイク化です。 画面遷移時に使えますね。 import pygame import math # Mosaic # @param tBuf サーフェス # @param RECT モザイクをかける範囲 # @param SIZE モザイクの大きさ def transMosaic(tBuf, RECT, SIZE): if(SIZE < 1): return None retBuf = p…
グレースケールの改良版です。 人の目は緑に最も良く反応し、続いて赤、青という反応をします。 よって、このように重みをかけると、 自然なグレースケールになるわけです。 import pygame import math _gSrc = None def main(): pygame.init() pygame.displ…
はじめに 今回はFacadeパターンです。 Facadeパターンは「シンプルな窓口」を提供する方法です。 簡単に言えば、 「複雑な操作・手順」を 「簡単」に行えるようにしたラッパークラス、 といえます。 クラス図 これは、DirectXのAPIに対してFacadeパターンを…
kenmoは変な宗教に入ったわけではありません(´Д`; さて、突然ですが、ゲームを面白くするにはどうすればよいのでしょうか。 ・ ・ ・ 漠然とし過ぎて、よく分からないですよね。 では、キャラを面白く動かすにはどうするか。 これもちょっと漠然としてい…
輪郭抽出です。 大きめの画像でやると、そこそこキレイに抽出できますね。 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…
はじめに 前回のInterpreterパターンは、 そのままではゲームに使うことはできません。 それは、 Nodeクラスに、キャラの行動パターンを記述しなければならない からです。 それを回避する方法がVisitorパターンです。 Visitorパターンとは? Visitorとは、…
今回はInterpreterパターンについてです。 Interpreterというのは、 例えばテキストファイルに書かれた命令を、 実行時に一行ずつ解読しながらその内容を実行する、 というものです。 例えば、インタプリタは、 アドベンチャーゲームのフローを制御するスク…
これで最後。ネガ変換です。 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() # ネ…
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抽出 …
ノリノリです。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…
続いて、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 …
次にセピア変換を。 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() # セピア変…
ここからがホントの画像処理です。 で、超基本のグレースケールから、、。 import pygame _gSrc = None pygame.init() pygame.display.set_mode((150, 150), 0, 32) pygame.display.set_caption("グレースケール") _gScr = pygame.display.get_surface() tBu…
画像処理でもなんでもない気がしますが…。 回転処理などを。 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)のループをする 元の画像に対応する色を…
いよいよ最終回です(ようやく?) 今回はタスクシステムを発展させてみます。 C++におけるタスクシステム これまでは、タスクを「構造体」で定義していました。 ですが、せっかくC++を使っているので、 「クラス」で実装できないか?ということを考えてみま…
図解入門よくわかる微分積分の基本と仕組み (How‐nual Visual Guide Book)作者: 小林道正出版社/メーカー: 秀和システム発売日: 2005/04/04メディア: 単行本 クリック: 2回この商品を含むブログ (1件) を見る画像処理に役に立つよ! ということで受講した微…
タスク同士の当たり判定 ここが超重要です。はいはいテストに出ますよー(何のテストじゃ) 例えば、ブロック崩し(こればっかですね)において、 以下のタスクがぶつかった場合、何らかのやり取りを考えなければなりません。 ボールvs壁 ボールvsパドル ボ…
ここ一ヶ月の間、朝起きたらパソコンの電源を入れて、 夜までプログラムをする、などという不健康極まりない生活をしていたためか、 身体に無理がきているようです。 (首が回らなくなったり、肩こりがひどかったり…) 「こりゃいかん!」 と思って、google…
タスクチェンジ タスクチェンジとは、実行関数ポインタの入れ替えを行うことです。 たとえば、シューティングゲームでは、敵の行動について、以下のパターンがあります。 初期処理 移動したり弾を撃ったりする 爆発処理 これらの処理を関数ポインタの入れ替…
ダミータスク タスクは双方向リストとなるわけですが、 先頭と末尾のタスクに「NULL」をいちいち設定するのは大変です。 ということで、先頭と末尾のタスクは、 ダミーとして空のタスクを用意しておきます。 これにより、タスクの追加・削除の処理が楽になり…
タスクシステムとは何か タスクシステムとは、 複数の「タスク」を並列実行する 仕組みのことです。 では、「タスク」というのは何かというと、 ゲームを構成する最小単位の要素 のことです。 例えば、ブロック崩しにおける、ブロックやパドル、ボールなどが…
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…
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…