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无缝贴图怎么调?
高端建站三要素:定制模板、企业官网与响应式设计优化
*服务器网站为何频现安全漏洞?
网站制作价目表怎么做,珍爱网婚介费用多少?

