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

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

  • 相关阅读:
    iOS应用程序生命周期(前后台切换,应用的各种状态)详解
    Urlrewrite
    下载文件、根据链接生成二维码
    三级联动
    easy-ui的datagrid
    $.extend、$.fn.extend
    windows.open、 window.location.href
    JS小整理
    Jsp数字格式化
    同时执行多个$.getJSON() 出现数据混乱的问题的解决
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9257740.html
Copyright © 2011-2022 走看看