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

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

本文实例讲述了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#程序设计有所帮助。

标签:C#,图形
0
投稿

猜你喜欢

  • 10分钟带你理解Java中的弱引用

    2023-02-09 10:35:55
  • WPF实现控件拖动的示例代码

    2023-04-01 09:36:15
  • AJAX中Get请求报错404的原因以及解决办法

    2021-07-03 05:41:07
  • Groovy动态语言使用教程简介

    2022-04-28 15:05:54
  • C#实现简单文本编辑器

    2022-04-28 06:42:30
  • Unity3D实现虚拟按钮控制人物移动效果

    2022-06-13 04:26:26
  • Java中的HashSet详解和使用示例_动力节点Java学院整理

    2021-10-21 05:58:33
  • Android实现选项菜单子菜单

    2023-06-14 16:06:26
  • Mybatis-plus全局id生成策略详解

    2022-11-30 02:41:21
  • Java获取UTC时间的方法详解

    2022-03-24 13:50:50
  • springmvc图片上传及json数据转换过程详解

    2022-02-25 17:11:14
  • Java实现合并两个有序序列算法示例

    2021-09-06 23:23:53
  • Android GestureDetector实现手势滑动效果

    2023-10-01 04:37:50
  • SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化

    2021-11-12 14:49:17
  • java15新功能的详细讲解

    2023-08-23 04:40:21
  • 新闻列表的分页查询java代码实现

    2022-02-24 19:46:25
  • Android数字华容道小游戏开发

    2023-10-06 22:31:35
  • Android MVP模式实战教程

    2023-09-05 13:16:54
  • Android自定义状态栏颜色与应用标题栏颜色一致

    2022-01-12 02:24:31
  • JVM之方法返回地址详解

    2022-05-02 07:58:27
  • asp之家 软件编程 m.aspxhome.com