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省事多了

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

  • 相关阅读:
    善用VS中的Code Snippet来提高开发效率
    c#获取远程文件更新时间
    图解VS2008单元测试及查看代码覆盖率
    常用关于 JavaScript 中的跨域访问方法
    Jquery中使用setInterval和setTimeout
    外链图片也有风险吗?
    设计模式学习总结抽象工厂模式(Abstract Factory Pattern)
    斐波拉杰博弈 取石子(五)
    后缀表达式 NYOJ 257
    杭电 1085 Holding BinLaden Captive!
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9257740.html
Copyright © 2011-2022 走看看