小编Ale*_*lex的帖子

更快的扑克手评估

我正在尝试使用"RayW手评估器"方法来获得卡组合分数(7个中最好的5个卡).但是我在这个方法上遇到了一些性能问题.根据消息来源 - 使用这种方法,必须能够每秒评估超过300密耳的手!我的结果是1.5秒内10毫秒,这慢了很多倍.

"RayW手评估者"背后的想法如下:

Two Plus Two评估器由一个包含大约三千二百万个条目的大型查找表组成(准确地说是32,487,834).为了查找给定的7张牌扑克牌,您可以在此表中跟踪路径,每张卡执行一次查找.当你到达最后一张牌时,这样获得的值是手牌的官方等值

这是代码的样子:

namespace eval
{
public struct TPTEvaluator
{
    public static int[] _lut;

    public static unsafe void Init() // to load a table
    {
        _lut = new int[32487834];
        FileInfo lutFileInfo = new FileInfo("HandRanks.dat");
        if (!lutFileInfo.Exists)
        {throw new Exception("Handranks.dat not found");}

        FileStream lutFile = new FileStream("HandRanks.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096);

        byte[] tempBuffer = new byte[32487834 * 4];
        lutFile.Read(tempBuffer, 0, 32487834 * 4);

        fixed (int* pLut = _lut)
        { Marshal.Copy(tempBuffer, 0, (IntPtr)pLut, 32487834 * …
Run Code Online (Sandbox Code Playgroud)

c# poker ranking winforms

19
推荐指数
1
解决办法
6519
查看次数

将Surface保存到位图并在C#中优化DirectX屏幕捕获

经过一整天的测试后,我想出了这个代码,它使用DirectX(SlimDX)捕获当前屏幕并将其保存到文件中:

Device d;

public DxScreenCapture()
{
    PresentParameters present_params = new PresentParameters();
    present_params.Windowed = true;
    present_params.SwapEffect = SwapEffect.Discard;
    d = new Device(new Direct3D(), 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.SoftwareVertexProcessing, present_params);
}

public Surface CaptureScreen()
{
    Surface s = Surface.CreateOffscreenPlain(d, Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, Format.A8R8G8B8, Pool.Scratch);
    d.GetFrontBufferData(0, s);
    return s;
}
Run Code Online (Sandbox Code Playgroud)

然后我做以下事情:

   DxScreenCapture sc = new DxScreenCapture();
Run Code Online (Sandbox Code Playgroud)

..代码在这里

    private void button1_Click(object sender, EventArgs e)
    {

        Stopwatch stopwatch = new Stopwatch();

        // Begin timing
        stopwatch.Start();

        Surface s = sc.CaptureScreen();
        Surface.ToFile(s, @"c:\temp\test.png", ImageFileFormat.Png);

        s.Dispose();

        stopwatch.Stop();

        textBox1.Text = ("Elapsed:" …
Run Code Online (Sandbox Code Playgroud)

c# optimization image save slimdx

13
推荐指数
1
解决办法
1万
查看次数

使用C#从BitmapData裁剪区域

我有一个位图sourceImage.bmp

锁定它的位:

BitmapData dataOriginal = sourceImage.LockBits(new Rectangle(0, 0, sourceImage.Width, sourceImage.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
Run Code Online (Sandbox Code Playgroud)

做分析,得到一个克隆:

Bitmap originalClone = AForge.Imaging.Image.Clone(dataOriginal);
Run Code Online (Sandbox Code Playgroud)

解锁位:

sourceImage.UnlockBits(dataOriginal);
Run Code Online (Sandbox Code Playgroud)

是否可以指定要复制的"dataOriginal"的哪一部分(x,y,w,h)?或者从dataOriginal创建新数据,指定X和Y坐标以及H和W?

目的是从该图像中复制一个小区域.这个方法可能比DrawImage更快,这就是我不使用后者的原因.

编辑:

所以我拿了29 Mb位图并进行了一些硬核测试!全尺寸裁剪(基本上是副本)+ 100次迭代.

http://i.minus.com/ibmcUsT1qUGw6f.png

码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AForge;
using AForge.Imaging;
using System.Diagnostics;
using System.Drawing.Imaging;
using System.IO;
using System.Runtime.InteropServices;


namespace testCropClone
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private unsafe Bitmap Clone(Bitmap bmp, int …
Run Code Online (Sandbox Code Playgroud)

c# image bitmap aforge

8
推荐指数
1
解决办法
1万
查看次数

JS数字函数最后加起来为零

我正在使用Number()JS函数,它应该将字符串值转换为数字.

它适用于小数字.对于大的 - 它开始使用零的替换值,如图所示:

在此输入图像描述

这个问题有解决方法吗?

javascript

7
推荐指数
1
解决办法
68
查看次数

使用C#以一定概率触发事件

我正在尝试模拟一个真实的按键事件.出于这个原因,我正在使用SendInput()方法,但为了获得更好的结果,我需要指定keyDOWN和KeyUP事件之间的延迟!下面的这些数字显示DOWN和UP事件之间经过的时间(以毫秒为单位)(这些是真实的/有效的):

96 95 112 111 119 104 143 96 95 104 120 112 111 88 104 119 111 103 142 143 128 144 112 111 112 120 128 111 135 118 147 96 135 103 64 64 87 79 112 88 111 111 112 111 104 87 95

我们可以简化输出:

延迟64 - 88 ms - > 20%的时间

延迟89 - 135 ms - > 60%的时间

延迟136 - 150 ms - > 20%的时间

如何根据上面的概率触发事件?这是我正在使用的代码:

        private void button2_Click(object sender, EventArgs e)
        {
            textBox2.Focus(); …
Run Code Online (Sandbox Code Playgroud)

c# random simulation probability

6
推荐指数
1
解决办法
2432
查看次数

使用php成功完成paypal钱交易后提交表格

我做了一个表格.目前,此表单执行以下操作:

  1. 客户填写表格(创建订单)
  2. 点击"提交"按钮
  3. 所有表单条目都输入到数据库中.

我想将其更改为执行以下操作:

  1. 客户填写表格
  2. 在表格的最后有一个文本框显示这个订单将花费他很多.
  3. 点击"提交"按钮(如果接受价格)
  4. 重定向到贝宝
  5. 如果付款成功 - >所有表单条目都输入数据库.否则 - > echo"交易失败".

这是我到目前为止所做的:

"form.php"的内容

<html><head><title>Title</title></head><body>
<form action="php-form-processor.php" method="post">
    <table border="0" cellspacing="5" width = "500">
        <tr>
            <td align="right" width="160">Choose an Item:</td>
            <td align="left">
            <select name="formItem" value="<?=$varItem;?>" class="input_full" >
                <option value="1">Cheese</option>
            </select>
            </td>
        </tr>
        <tr bgcolor="#D0E8F5">
            <td align="right" >Item count:</td>
            <td align="left">
                <input type="text" name="formItemCount" maxlength="50" value="<?=$varItemCount = 1;?>"  class="input_full" />
            </td>
        </tr>
    </table>
    <p align="center">
    <input type="submit" name="formSubmit" align = "center" value="Submit" />
    </p>
</form></body></html>
Run Code Online (Sandbox Code Playgroud)

"php-form-processor.php"的内容

<?php
if($_POST['formSubmit'] …
Run Code Online (Sandbox Code Playgroud)

php mysql forms transactions paypal

6
推荐指数
1
解决办法
3797
查看次数

迭代与另一条线垂直的N个点

我有1行有2个已知点:

PointF p2_1 = new PointF();
p2_1.X = 100; // x1
p2_1.Y = 150; // y1

PointF p2_2 = new PointF();
p2_2.X = 800; // x2
p2_2.Y = 500; // y2

float dx = p2_2.X - p2_1.X;
float dy = p2_2.Y- p2_1.Y;

float slope = dy / dx; // slope m
float intercept = p2_1.Y - slope * p2_1.X; // intercept c 
// y = mx + c
Run Code Online (Sandbox Code Playgroud)

我想迭代10个像素向左(或右)到1行(在x1,y1).

在此输入图像描述

红点是我想要处理的.例:

for (int i = 10; i > 0; i--)
{ …
Run Code Online (Sandbox Code Playgroud)

c# winforms

6
推荐指数
1
解决办法
472
查看次数

从定制的蓝牙设备发送命令到 Android 手机来控制音乐播放器

我使用以下组件创建了一个简单的蓝牙设备

  • HC05模块
  • Arduino Uno 板(带有可重新编程的微控制器)

我想知道是否可以从我的 BT 设备发送命令,就像这些命令是从蓝牙耳机发送的一样?

我的意思是:

  • 我们发送 0x00000055 键码 - 音乐暂停 (KEYCODE_MEDIA_PLAY_PAUSE)
  • 我们发送 0x00000058 - 上一首歌曲开始播放 (KEYCODE_MEDIA_PREVIOUS)
  • ...

以下是 android 使用的键码的完整列表:http://developer.android.com/reference/android/view/KeyEvent.html

我可能可以创建一个单独的应用程序,它将读取传入的命令并模拟耳机按钮的按下,但这不是我想要的。就我而言 - 一些耳机是即插即用的,这意味着 Android 设备上不需要安装任何其他应用程序。这是我目前用来向 Android 手机发送命令的代码:

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

enum { LED_PIN = 6 };
enum LedState { LED_ON, LED_OFF, LED_BLINK };

LedState led_state;

void setup()
{
  led_state = LED_OFF;
  pinMode(LED_PIN, OUTPUT);

  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command …
Run Code Online (Sandbox Code Playgroud)

bluetooth arduino headset

6
推荐指数
1
解决办法
6420
查看次数

从后台工作者更新GUI

问题的名称是:" 从后台工作者更新GUI ",但正确的名称世界是:" 从后台工作者更新GUI或从后台工作者报告多个变量(除了整数) "

请让我解释一下我的情况.在一个程序中,我有一个后台工作者来分析信息.作为这种分析的结果 - 形式GUI元素应该填充必要的数据.在GUI中我想更新

  • 2 datagridviews
  • 1个列表框
  • 5个标签

据我所知 - 我只能通过后台工作者的方法本地报告1个intReportProgress().

所以问题是 - 我怎样才能传递List<>(+一些其他变量:string,int)ReportProgress()?基本上 - 我想用信息更新GUI,但是"1整数"不会这样做.所以要么可以通过ReportProgress()OR 传递多个变量, 我可以使用InvokeBackgroundWorker内部的一个来更新GUI.我个人不喜欢这个Invoke方法...你有什么看法?

这是我的代码(见评论):

   private void button9_Click(object sender, EventArgs e) // start BW
    {
        bw.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
        bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
        bw.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);

        bw.WorkerReportsProgress = true;
        bw.WorkerSupportsCancellation = true;

        bw.RunWorkerAsync(10);
    }

    private void button10_Click(object sender, EventArgs e) // cancel …
Run Code Online (Sandbox Code Playgroud)

c# multithreading backgroundworker winforms

6
推荐指数
2
解决办法
5736
查看次数

为不同的ChromeDriver实例使用相同的chrome配置文件(会话)

我试图并行打开多个浏览器,但我无法在多个窗口中导航到该网站..

我是这样做的:

namespace XXX
{
public class CoreDriver
{
    public IWebDriver driver;
    public int my_port { get; set; }

    public void Initialize()
    {
        string chromeee = "";
        if (my_port == 50147) { chromeee = "C:/Users/AA/Downloads/chromedriver1/"; }
        else if (my_port == 50148) {chromeee = "C:/Users/AA/Downloads/chromedriver2/"; }
        else if (my_port == 50149) { chromeee = "C:/Users/AA/Downloads/chromedriver3/"; }
        else if (my_port == 50140) { chromeee = "C:/Users/AA/Downloads/chromedriver4/"; }

        ChromeOptions options = new ChromeOptions();
        options.AddArgument("user-data-dir=C:\\Users\\AA\\AppData\\Local\\Google\\Chrome\\User Data");

        var driverService = ChromeDriverService.CreateDefaultService(chromeee);
        driverService.HideCommandPromptWindow = true;
        driverService.Port …
Run Code Online (Sandbox Code Playgroud)

c# selenium selenium-chromedriver

6
推荐指数
1
解决办法
7078
查看次数