栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/123367.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号