カード・ゲームの制作 VB6 | |
(a) カードの表示(画像の部分利用) |
1. カードの画像準備
ゲーム制作の前に、カードゲームに必要なカードについて考える。ここでは、トランプについて、そのカードを画像データ(ファイル)として用意したものを使用することにする。
トランプのカードは52枚(エース、スペード、ハート、ダイヤ、それぞれ13枚ずつ)である。このカードの画像を1枚ずつ用意するのだが、別々のファイルにするとファイルの個数が多くなり、ファイルの管理が面倒になる。また、プログラム(VisualBasic)に取り込むだけでも大変な作業になる。
次のように、52枚とジョーカーを1つの画像ファイルに用意することにする。
図a-1 カードの表面 | 裏面 |
Download:カード表裏画像cardbmp.lzh(3.9KB) (card1.bmp, card2.bmp) |
カード1枚のサイズは横40ピクセル(ドット)、たて55ピクセル(ドット)としている。したがって、全体のサイズは横520×たて275ピクセルである。ペイントブラシ等で作成する。
また、カードの裏面も用意する。これは1枚でよい。
ほかのカードゲームでも基本的に同じである。処理を簡単にするために、1枚1枚のカードのサイズを同じにする。このようにしておけば、例えば、ハートの5の画像を取り出すとき、画像の左上の座標はx=40*(5-1), y=55*(3-1)の計算によって(160,110)と求めることができる。
2. カード表示のテストプログラム
フォームには図a-2のようにオブジェクトを配置する。
図a-2
Picture1のプロパティ
|
Image1のプロパティ
Text1のプロパティ
Command1のプロパティ
|
Text1に1〜53の数字を入力して表示(Command1)ボタンをクリックすると、Picture1の部分にカードの画像が表示されるようにする。
カードはスペードの1から順に0, 1, 2, ・・・のように通し番号が付けられているものとして考える。このように、0から順に通し番号を付けると、各マークの数字は13までなので通し番号を13で割った(余り+1)がカードの数字になる。また、マークもスペードから順に0,
1, 2, 3と考えれば、通し番号を13で割った答えの整数がマークになる。
/ | A | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | J | Q | K | マーク |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
スペード | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 0 |
クラブ | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 1 |
ハート | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 2 |
ダイヤ | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 3 |
joker→ | 52 | (53) | / | / | / | / | / | / | / | / | / | / | / | 4 |
↑13で割った余りが0になる。 | ↑13で割った余りが7になる。 |
例えば、ハート(2)の5は次の計算式を使うことで30番であることが求められる。
番号 → n = 13 * 2 + 5 - 1 = 30 ・マークyのx 番号 → n = 13 * y + x - 1 |
逆に、30番がどのカードかは次の計算式を使うことで知ることができる。
数 字 → x = (30 Mod 13) + 1 = 5 マーク → y = Int(30 / 13) = 2 ・n番のカード 数 字 → x = (n Mod 13) + 1 マーク → y = Int(n / 13) |
画像の一部分だけを利用するにはPaintPictureメソッドを利用する。
Picture1.PaintPicture コピー先 |
Picture2.Picture, コピー元 |
x1, y1, w1, h1, コピー先 |
x2, y2, w2, h2 コピー元 |
オブジェクトのピクチャボックス(Picture1,Picture2)はイメージでもよい。(「画像の拡大・縮小部分コピー」参照)
・プログラムリスト
Private Sub Command1_Click()
Dim number As Integer
number = Val(Text1.Text) - 1
xx = 40 * (number Mod 13)
yy = 55 * Int(number / 13)
Picture1.PaintPicture Image1.Picture, 0, 0, , , xx, yy, 40,
55
End Sub
適当なファイル名で保存しておく。
(a) カードの表示(画像の部分利用) | |
Copyright © 2004 Hiroshi Masuda |