软件编程
位置:首页>> 软件编程>> C#编程>> C#编程调用Cards.dll实现图形化发牌功能示例

C#编程调用Cards.dll实现图形化发牌功能示例

作者:songkexin  发布时间:2022-10-24 12:02:54 

标签:C#,图形

本文实例讲述了C#编程调用Cards.dll实现图形化发牌功能。分享给大家供大家参考,具体如下:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Windows.Forms.Design;
namespace GetCards
{
 public partial class Form1 : Form
  {
    [DllImport("cards.dll")]
   public static extern bool cdtInit(ref int width, ref int height);
    [DllImport("cards.dll")]
   public static extern void cdtTerm();
    [DllImport("cards.dll")]
   public static extern bool cdtDraw(IntPtr hdc,int x,int y,int card,int mode,long color);
   //mode=0表正面,1表反面,Color我从0-0xFF000试了很多,好象没颜色改变
   //[DllImport("cards.dll")]
   //public static extern bool cdtDrawExt(IntPtr hdc,int x,int y,int dx,int dy,int card,int type,long color);
   //[DllImport("cards.dll")]
   //public static extern bool cdtAnimate(IntPtr hdc,int cardback,int x,int y,int frame);
   int[] bb = new int[100];
   public Form1()
    {
      InitializeComponent();
    }
   private void Form1_Load(object sender, EventArgs e)
    {
     int width, height;
      width = 0; height = 0;
      cdtInit(ref width, ref height);
    }
   private void btn_PaintCard_Click(object sender, EventArgs e)
    {
     int i, k, left_x, top_y, CardId;
     for (k = 0; k <= 3; k++)
      {
       for (i = 1; i <= 13; i++)
        {
          left_x = 20 + (i - 1) * 15;        //牌的重叠后的宽度是15
          top_y = 20 + k * 100;           //每行13张牌.高度是20
          CardId = (i - 1) * 4 + k;         //原来52张牌是编了号的
          cdtDraw(this.CreateGraphics().GetHdc(), left_x, top_y, CardId, 0,9);
        }
      }
    }
   private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
      cdtTerm();
    }
   private void btn_PaintBack_Click(object sender, EventArgs e)
    {
     int i, left_x, top_y, BackId;
     for (i = 0; i <= 11; i++)              //12张牌背面图
      {
        BackId = i;
        top_y = 20 + (i & 3) * 100;           //小于等于3的不变,>3的截尾,相当于竖排
        left_x = 20 + (i >> 2) * 80 + 180 + 80;     //左边牌占15*12+80=260,也就是和最右张牌20(隐含了牌大小=80)
        cdtDraw(this.CreateGraphics().GetHdc(), left_x, top_y, 54 + BackId, 1, 9);
      }
    }
   private void btn_Random1_Click(object sender, EventArgs e) //第一种方法实现随机交换牌
    {
     int ii, k, left_x, top_y, CardId;
     int[] theArray = new int[52];
      Random r = new Random();
      listBox1.Items.Clear();
     for (int i = 0; i < 52; i++)
      {
        theArray[i] = i + 1;
      }
     for (int i = 0; i < 52; i++) //就是做52次随机交换两张牌
      {
       int a = r.Next(52); //生成0--->51的随机数
       int b = r.Next(52);
       int tmp = theArray[a];
        theArray[a] = theArray[b];
        theArray[b] = tmp;
      }
     for (int i = 0; i < 52; i++)
      {
        listBox1.Items.Add(theArray[i]);
        k = (int)(i / 13);
        ii = i % 13 + 1;
        left_x = 20 + (ii - 1) * 15;
        top_y = 20 + k * 100;
        CardId = theArray[i] - 1;
        cdtDraw(this.CreateGraphics().GetHdc(), left_x, top_y, CardId, 0, 9);
      }
    }
   private void btn_Random2_Click(object sender, EventArgs e) //第一种方法实现随机交换牌
    {
     int ii, k, left_x, top_y, CardId;
     int[] theArray = new int[52];
     int i = 0;
     while (i < theArray.Length)
      {
        theArray[i] = ++i;
      }
      Random r = new Random();
      listBox1.Items.Clear();
     while (i > 1) //从51-->1依次随机向前交换获得最终值
      {
       int j = r.Next(i);
       int t = theArray[--i];
        theArray[i] = theArray[j];
        theArray[j] = t;
      }
     for (i = 0; i < theArray.Length; ++i)
      {
        listBox1.Items.Add(theArray[i].ToString());
        k = (int)(i / 13);
        ii = i % 13 + 1;
        left_x = 20 + (ii - 1) * 15;
        top_y = 20 + k * 100;
        CardId = theArray[i] - 1;
        cdtDraw(this.CreateGraphics().GetHdc(), left_x, top_y, CardId, 0, 9);
      }
    }
  }
}

界面设计的话截图比贴Designer.cs省事多了:

C#编程调用Cards.dll实现图形化发牌功能示例

C#编程调用Cards.dll实现图形化发牌功能示例

希望本文所述对大家C#程序设计有所帮助。

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com