A Fast Version of Conway's Game of Life with Thread and DirectX Draw | CodeGuru

A Fast Version of Conway’s Game of Life with Thread and DirectX Draw

Introduction A fast conways’s Game of Life Version using MFC,thread and DirectX together with a visual demo for sorting algorithms. It is also a good demo for “Bubble” and “Quick Sort” algorithms. Conway’s Game of Life For information on Conway’s Game of Life, check out the Wikipedia entry: Conway’s Game of Life Backgroud I built […]

Written By
CodeGuru Staff
CodeGuru Staff
Apr 14, 2009
2 minute read
CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More

Introduction

A fast conways’s Game of Life Version using MFC,thread and DirectX together with a visual demo for sorting algorithms. It is also a good demo for “Bubble” and “Quick Sort” algorithms.

Conway’s Game of Life

For information on Conway’s Game of Life, check out the Wikipedia entry: Conway’s Game of Life

Backgroud

I built this project just to test the algorithm of Conway’s Game of Life,because I found it is very interesting.

Using the Application

Using the Toolbar

  1. Create a document – To create a new MDI view of
    Conway’s Game of Life or Sorting
  2. Open an existing document – To open an existing document of Conway’s Game of Life (*.lif) or Sorting (*.sor)
  3. Save a document – To save an MDI frame of Conway’s Game of Life (*.lif) or Sorting (*.sor).
  4. Open a document of Conway’s Game of Life.
  5. Open a document of Sorting.
  6. Randomly initialize a pattern of the Conway’s Game of
    Life.
  7. Start the calculation on the current active MDI frame.
  8. Stop the calculation.
  9. Clear all cells in the active view and stop the
    calculation.
  10. A toggle switch to show grid or hide grid.
  11. Slow down – To slow down the creating of further
    generations of Conway’s Game of Life.
  12. Speed up – To speed up the creating of further
    generations of Conway’s Game of Life.
  13. Color Setting – To set the color of cells in Conway’s Game of Life or Sorting Bars.
Advertisement

Using the Mouse

  1. Mouse Left Click to add a new cell or remove a cell. It
    is useful to create an initial pattern manually or to change a stable pattern
    to be active by adding new neighbour cells,also you can interfere the
    evolvement by adding or removing neighbour cells with the mouse click. The
    initial pattern created by the user can be saved and loaded by “Save a
    document”/”Open a document”.
  2. To add/remove cells in a row by moving the mouse cursor
    with left button down. You can create any initial pattern you want easily.
  3. Right click to “Quick Sort” in Sorting view.

In the Code

To Create an independent thread to implement algorithum of Conways’ Game of Life or Sorting

void CSortAndLifeView::CreatSortThread()
{
    unsigned threadID;

    if(hThread)
        CloseHandle(hThread);
    hThread = (HANDLE)_beginthreadex(NULL, 0, thread_proc, this, CREATE_SUSPENDED,
        &threadID);
    ResumeThread(hThread);

}

unsigned int __stdcall CSortAndLifeView::thread_proc(void* pv)
{
    CSortAndLifeView *this_ = reinterpret_cast<CSortAndLifeView*>(pv);
    if(this_->m_bDocumentType == DOCTYPE_LIFE)
        this_->OnLifeGame();
    else if(this_->m_bDocumentType == DOCTYPE_BUBBLESORT)
        this_->OnBubbleSort();
    else if(this_->m_bDocumentType == DOCTYPE_QUICKSORT)
        this_->OnQuickSort();
    _endthreadex( 0 );
    return 0;
}

To override the OnPaint method CFomView Class to implement DirectX drawing

void CSortAndLifeView::OnPaint()
{
    CPaintDC dc(this);
    OnDraw(&dc);
}

void CSortAndLifeView::OnDraw(CDC* pDC)
{
    // TODO: add draw code for native data here

    CSortAndLifeDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    GetClientRect(&rectView);

    if(m_bDocumentType == 0)
        m_directXObj.CellDraw((char *)pDoc->m_cCellArray,pDoc->m_cellColor,rectView);
    else
        m_directXObj.BarDraw((int *)pDoc->m_nNumberArray,pDoc->m_barColor,rectView);
    m_directXObj.Display();

}

The cell size of the Conway’s Game of Life can be changed by setting the grid number in StdAfx.h

const int CONST_INT_GRIDNUMBER = 50;

Points of Interest

With threads and distributed grid calculation. The application makes a fast Conway’s Game of Life.

CodeGuru Logo

CodeGuru covers topics related to Microsoft-related software development, mobile development, database management, and web application programming. In addition to tutorials and how-tos that teach programmers how to code in Microsoft-related languages and frameworks like C# and .Net, we also publish articles on software development tools, the latest in developer news, and advice for project managers. Cloud services such as Microsoft Azure and database options including SQL Server and MSSQL are also frequently covered.

Property of TechnologyAdvice. © 2026 TechnologyAdvice. All Rights Reserved

Advertiser Disclosure: Some of the products that appear on this site are from companies from which TechnologyAdvice receives compensation. This compensation may impact how and where products appear on this site including, for example, the order in which they appear. TechnologyAdvice does not include all companies or all types of products available in the marketplace.