Click here to Skip to main content
15,886,742 members
Articles / Programming Languages / C#

More Texas Holdem Analysis in C#: Part 2

Rate me:
Please Sign up or sign in to vote.
4.93/5 (32 votes)
20 May 2008LGPL327 min read 144.3K   2.9K   76  
Using C# to do sophisticated analysis of Texas Holdem
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using ZedGraph;

namespace Benchmark
{
    public partial class Form1 : Form
    {
        List<ITest> tests = new List<ITest>();
        MasterPane master = null;
        Thread t = null;

        public Form1()
        {
            InitializeComponent();
            evaluateToolStripMenuItem.Checked = true;
            lowestToolStripMenuItem.Checked = false;
            belowNormalToolStripMenuItem.Checked = false;
            normalToolStripMenuItem.Checked = false;
            aboveNormalToolStripMenuItem.Checked = true;
            highestToolStripMenuItem.Checked = false;
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            if (t != null)
            {
                t.Priority = ThreadPriority.Lowest;
                t.Abort();
            }
            base.OnClosing(e);
        }

        public void StopThread()
        {
            if (t != null)
            {
                t.Priority = ThreadPriority.Lowest;
                t.Abort();
                t = null;
            }
        }

        private void ThreadProc()
        {
            while (true)
            {
                try
                {
                    foreach (ITest test in tests)
                    {
                        test.RunBenchmark();
                        UpdateTest(test);
                        Thread.Sleep(50);
                    }
                }
                catch { }
            }
        }

        private delegate void UpdateTestDelegate(ITest test);

        private void UpdateTest(ITest test)
        {
            if (this.InvokeRequired)
            {
                ThreadPriority save = t.Priority;
               // t.Priority = ThreadPriority.Lowest;
                this.BeginInvoke(new UpdateTestDelegate(UpdateTest), test);
                //t.Priority = save;
                return;
            }

            test.UpdatePane();
            zg1.AxisChange();
            zg1.Invalidate();
        }

        private void InitMasterPane()
        {
            //System.Diagnostics.Debug.Assert(t != null);

            master.PaneList.Clear();

            // Display the MasterPane Title, and set the outer margin to 10 points
            master.Title.IsVisible = true;
            master.Title.Text = "Benchmarks";
            master.Margin.All = 10;

            foreach (ITest test in tests)
            {
                master.Add(test.Pane);
            }

            using (Graphics g = this.CreateGraphics())
            {
                master.SetLayout(g, PaneLayout.SquareRowPreferred);
            }

            if (t == null)
            {
                t = new Thread(new ThreadStart(ThreadProc));
                t.IsBackground = true;
                if (lowestToolStripMenuItem.Checked)
                    t.Priority = ThreadPriority.Lowest;
                //lowestToolStripMenuItem.Checked = false;
                if (belowNormalToolStripMenuItem.Checked)
                    t.Priority = ThreadPriority.BelowNormal;
                //belowNormalToolStripMenuItem.Checked = false;
                if (normalToolStripMenuItem.Checked)
                    t.Priority = ThreadPriority.Normal;
                //normalToolStripMenuItem.Checked = false;
                if (aboveNormalToolStripMenuItem.Checked)
                    t.Priority = ThreadPriority.AboveNormal;
                //aboveNormalToolStripMenuItem.Checked = true;
                //highestToolStripMenuItem.Checked = false;
                if (highestToolStripMenuItem.Checked)
                    t.Priority = ThreadPriority.AboveNormal;
                t.Start();
            }
        }

        private void UpdateMasterPane()
        {
            StopThread();
            master.PaneList.Clear();

            tests.Clear();

            // Load Tests
            if (evaluateToolStripMenuItem.Checked)
                tests.Add(new TestEvaluate(this));

            if (evaluateTypeToolStripMenuItem.Checked)
                tests.Add(new TestEvaluateType(this));

            if (inlineIterationToolStripMenuItem.Checked)
                tests.Add(new TestIterator(this));

            if (evaluateIterateToolStripMenuItem.Checked)
                tests.Add(new TestLoopEvaluate(this));

            if (inlineIterationToolStripMenuItem.Checked)
                tests.Add(new TestInlineEvaluate(this));

            if (threadPoolEvaluateIterateToolStripMenuItem.Checked)
                tests.Add(new TestThread(this));

            InitMasterPane();
        }

        private void OnLoad(object sender, EventArgs e)
        {
            // First, clear out any old GraphPane's from the MasterPane collection
            master = zg1.MasterPane;
            UpdateMasterPane();
           
        }

        private void lowestToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lowestToolStripMenuItem.Checked = true;
            belowNormalToolStripMenuItem.Checked = false;
            normalToolStripMenuItem.Checked = false;
            aboveNormalToolStripMenuItem.Checked = false;
            highestToolStripMenuItem.Checked = false;
            t.Priority = ThreadPriority.Lowest;
        }

        private void belowNormalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lowestToolStripMenuItem.Checked = false;
            belowNormalToolStripMenuItem.Checked = true;
            normalToolStripMenuItem.Checked = false;
            aboveNormalToolStripMenuItem.Checked = false;
            highestToolStripMenuItem.Checked = false;
            t.Priority = ThreadPriority.BelowNormal;
        }

        private void normalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lowestToolStripMenuItem.Checked = false;
            belowNormalToolStripMenuItem.Checked = false;
            normalToolStripMenuItem.Checked = true;
            aboveNormalToolStripMenuItem.Checked = false;
            highestToolStripMenuItem.Checked = false;
            t.Priority = ThreadPriority.Normal;
        }

        private void aboveNormalToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lowestToolStripMenuItem.Checked = false;
            belowNormalToolStripMenuItem.Checked = false;
            normalToolStripMenuItem.Checked = false;
            aboveNormalToolStripMenuItem.Checked = true;
            highestToolStripMenuItem.Checked = false;
            t.Priority = ThreadPriority.AboveNormal;
        }

        private void highestToolStripMenuItem_Click(object sender, EventArgs e)
        {
            lowestToolStripMenuItem.Checked = false;
            belowNormalToolStripMenuItem.Checked = false;
            normalToolStripMenuItem.Checked = false;
            aboveNormalToolStripMenuItem.Checked = false;
            highestToolStripMenuItem.Checked = true;
            t.Priority = ThreadPriority.Highest;
        }

        private void evaluateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            evaluateToolStripMenuItem.Checked = !evaluateToolStripMenuItem.Checked;
            UpdateMasterPane();
        }

        private void evaluateTypeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            evaluateTypeToolStripMenuItem.Checked = !evaluateTypeToolStripMenuItem.Checked;
            UpdateMasterPane();
        }

        private void inlineIterationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            inlineIterationToolStripMenuItem.Checked = !inlineIterationToolStripMenuItem.Checked;
            UpdateMasterPane();
        }

        private void cIterationToolStripMenuItem_Click(object sender, EventArgs e)
        {
            cIterationToolStripMenuItem.Checked = !cIterationToolStripMenuItem.Checked;
            UpdateMasterPane();
        }

        private void evaluateIterateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            evaluateIterateToolStripMenuItem.Checked = !evaluateIterateToolStripMenuItem.Checked;
            UpdateMasterPane();
        }

        private void threadPoolEvaluateIterateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            threadPoolEvaluateIterateToolStripMenuItem.Checked = !threadPoolEvaluateIterateToolStripMenuItem.Checked;
            UpdateMasterPane();
        }

        private void selectAllToolStripMenuItem_Click(object sender, EventArgs e)
        {
            evaluateToolStripMenuItem.Checked = true;
            evaluateTypeToolStripMenuItem.Checked = true;
            inlineIterationToolStripMenuItem.Checked = true;
            cIterationToolStripMenuItem.Checked = true;
            evaluateIterateToolStripMenuItem.Checked = true;
            threadPoolEvaluateIterateToolStripMenuItem.Checked = true;
            UpdateMasterPane();
        }
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Software Developer (Senior)
United States United States
I work at Tektronix in Beaverton OR. I've been programming for fun since 1975 (I started while in a Computer Explorer Scout group in Spokane WA). I've been programming in C since 1979 and I've been working professionally since 1983.

I really enjoy www.codeproject.com. It has saved me an incredible amount of time. I only hope my small contributions have given back some of what I've taken.

Comments and Discussions