/*************************************/
/*★ シャフルして並べる 前田 稔 ★*/
/*************************************/
using System;
using System.Drawing;
using System.Windows.Forms;
public class MyForm : Form
{
Card App;
int[] T = new int[48];
Point bas = new Point(20,20); //描画の左上座標
Point siz = new Point(54,80); //Sprite の表示間隔
public MyForm()
{
Text = "カードゲーム";
Width = 700;
Height = 400;
App = new Card(@"c:\data\test\hanafuda.gif",51,75);
Paint += new PaintEventHandler(MyHandler);
App.Shuffle(T,48);
}
private void MyHandler(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (App.bmp == null) Application.Exit();
for(int i=0; i<48; i++)
App.View(g,T[i],(i%12)*siz.X+bas.X,(i/12)*siz.Y+bas.Y);
}
}
//☆ Card Object Class
class Card
{
public Bitmap bmp;
public int W; //Sprite の幅
public int H; //Sprite の高さ
public int N; //横の枚数
Random rand = new Random();
public Card(string file, int w, int h)
{
try
{ bmp= new Bitmap(file); }
catch
{ MessageBox.Show("イメージが取得できません", "Error");
return;
}
W= w;
H= h;
N = bmp.Width / w;
}
// Sprite を描画
public void View(Graphics g, int n, int x, int y)
{
Rectangle des = new Rectangle(x, y, W, H);
Rectangle sou = new Rectangle((n%N)*W,(n/N)*H,W,H);
if (bmp != null)
g.DrawImage(bmp,des,sou,GraphicsUnit.Pixel);
}
// カードをシャッフルする
public void Shuffle(int[] t, int n)
{ int i,j;
for(i=0; i<n; i++) t[i]= -1;
for(i=0; i<n; i++)
{ for(j=rand.Next(n); t[j]!=-1; j=(j+1)%n);
t[j]= i;
}
}
}
class form01
{
public static void Main()
{
MyForm mf = new MyForm();
Application.Run(mf);
}
}
|