カードを反転

カードを重ねたり、反転して描画します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

カードを反転

  1. カードゲームでは、相手側のカードを上下逆にして表示することがあります。
    Card Object Class に 180度回転して描画するメソッドを追加します。
    Bmp が通常のイメージ領域で、RBmp が 180度回転したイメージ領域です。
    Card の Constructor で RBmp に 180度回転したイメージを設定します。
    画像の回転等は 画像描画 etc を参照して下さい。
        public  Bitmap  Bmp;
        public  Bitmap  RBmp;
    
            RBmp = new Bitmap(Bmp);
            RBmp.RotateFlip(RotateFlipType.Rotate180FlipNone);
        
  2. 180度回転したカードを表示する RView() メソッドです。
    回転した画像に合わせて、カード番号を計算し直します。
        public void RView(Graphics g, int n, int x, int y)
        {
            int num;
            num = 49 - n;
            if (num < 0) num = 48; 
            Rectangle des = new Rectangle(x, y, W, H);
            Rectangle sou = new Rectangle((num%N)*W,(num/N)*H,W,H);
    
            if (RBmp != null)
                g.DrawImage(RBmp,des,sou,GraphicsUnit.Pixel);
        }
        
  3. MyHandler() から通常のカードと回転したカードを並べて描画してみました。
    同じカードが 180度回転して描画されることを確認して下さい。
        private void MyHandler(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            if (App.Bmp == null)    Application.Exit();
            App.View(g,5,10,10);
            App.RView(g,5,60,10);
            App.View(g,30,150,10);
            App.RView(g,30,210,10);
        }
        

重ねて表示

  1. 手持ちのカードを種類が解る程度に重ねて表示してみましょう。
    表示スペースが限られているときに良く使われる手法です。
        private void MyHandler(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            if (App.Bmp == null)    Application.Exit();
            for(int i=0; i<10; i++)
                App.RView(g,i+30,i*15,100);
        }
        
  2. これで神経衰弱ゲームぐらいは作成出来るようになったでしょうか。
    いくらなんでもコンピュータを相手に神経衰弱をしようとは思わないので (^_^;) 、人間同士が対戦する形にして下さい。
    カードゲームで難しいのは、コンピュータ側の思考メソッドです。
    本来は禁じ手ですが、全てのカードの並びや、場合によっては乱数も自由に操作出来るのですから勝つのは簡単です。
    強すぎず、弱すぎず、適当なレベルに設定するのが最大の課題です。
    禁じ手を使わずに、人間の考え方をそのままプログラムに組み込むのがベストでしょう。
    Java Applet で 神経衰弱ゲーム が楽しめます。

前田稔(Maeda Minoru)の超初心者のプログラム入門