zoukankan      html  css  js  c++  java
  • [.NET开发] 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省事多了

      (编辑:雷林鹏 来源:网络)

  • 相关阅读:
    iframe标签用法详解
    Redis 数据备份与恢复,安全,性能测试,客户端连接,管道技术,分区(四)
    Redis 有序集合(sorted set),发布订阅,事务,脚本,连接,服务器(三)
    Redis 命令,键(key),字符串(String),哈希(Hash),列表(List),集合(Set)(二)
    Redis 安装,配置,简介,数据类型(一)
    Python2.x与3​​.x版本区别
    Python主流框架
    python面向对象( item系列,__enter__ 和__exit__,__call__方法,元类)
    Json对象与Json字符串互转(4种转换方式)
    JSON.parse和eval的区别
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9257740.html
Copyright © 2011-2022 走看看