カード・ゲームの制作 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のプロパティ
Appearance 0−フラット  
AutoRedraw True
Height 850
ScaleMode 3 - ピクセル
Width 630
Image1のプロパティ
Picture card1.bmp  

Text1のプロパティ
Text 1  

Command1のプロパティ
Caption 表示

 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 

 

 

inserted by FC2 system