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

发布时间 - 2026-01-11 02:03:35    点击率:

本文实例讲述了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#相关内容感兴趣的读者可查看本站专题:《C#图片操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

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


# C#  # 调用  # Cards.dll  # 图形化  # 发牌  # C#代码实现扑克牌排序的几种方式  # C#实现洗牌游戏实例  # C# L型棋牌覆盖实现代码与效果  # C#编写控制台程序纸牌游戏  # 程序设计  # 种方法  # 随机数  # 相关内容  # 感兴趣  # 数据结构  # 给大家  # 更多关于  # 试了  # 所述  # 使用技巧  # 面向对象  # 编了  # 操作技巧  # 讲述了  # 两张牌  # ref  # cdtInit  # bool 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何快速查询网址的建站时间与历史轨迹?  如何在腾讯云免费申请建站?  C++时间戳转换成日期时间的步骤和示例代码  Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  活动邀请函制作网站有哪些,活动邀请函文案?  EditPlus 正则表达式 实战(3)  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  IOS倒计时设置UIButton标题title的抖动问题  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  如何将凡科建站内容保存为本地文件?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  浅谈Javascript中的Label语句  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  如何快速搭建安全的FTP站点?  Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  如何在 Pandas 中基于一列条件计算另一列的分组均值  魔毅自助建站系统:模板定制与SEO优化一键生成指南  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何快速搭建FTP站点实现文件共享?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何在服务器上配置二级域名建站?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  JavaScript实现Fly Bird小游戏  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  JavaScript Ajax实现异步通信  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  MySQL查询结果复制到新表的方法(更新、插入)  如何用5美元大硬盘VPS安全高效搭建个人网站?  Laravel Fortify是什么,和Jetstream有什么关系  Android实现代码画虚线边框背景效果  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel如何配置任务调度?(Cron Job示例)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  北京网站制作公司哪家好一点,北京租房网站有哪些?  Bootstrap CSS布局之列表  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  高端建站三要素:定制模板、企业官网与响应式设计优化  *服务器网站为何频现安全漏洞?  网站制作价目表怎么做,珍爱网婚介费用多少?