⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testnview.cpp

📁 一个简单的N皇后可视化原代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// testnView.cpp : implementation of the CTestnView class
//

#include "stdafx.h"
#include "testn.h"

#include "testnDoc.h"
#include "testnView.h"

#include <stdlib.h> //产生随机数用到RAND()

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestnView

IMPLEMENT_DYNCREATE(CTestnView, CView)

BEGIN_MESSAGE_MAP(CTestnView, CView)
	//{{AFX_MSG_MAP(CTestnView)
	ON_COMMAND(ID_NUM5, OnNum5)
	ON_COMMAND(ID_NUM6, OnNum6)
	ON_COMMAND(ID_NUM7, OnNum7)
	ON_COMMAND(ID_NUM8, OnNum8)
	ON_COMMAND(ID_NUM9, OnNum9)
	ON_COMMAND(ID_NUM10, OnNum10)
	ON_COMMAND(ID_NUM11, OnNum11)
	ON_COMMAND(ID_NUM12, OnNum12)
	ON_COMMAND(ID_NUM13, OnNum13)
	ON_COMMAND(ID_NUM14, OnNum14)
	ON_COMMAND(ID_NUM4, OnNum4)
	ON_COMMAND(ID_BEGIN, OnBegin)
	ON_WM_LBUTTONDOWN()
	ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)
	ON_COMMAND(ID_COLOR_CROCI, OnColorCroci)
	ON_COMMAND(ID_COLOR_CYAN, OnColorCyan)
	ON_COMMAND(ID_COLOR_DARKBLUE, OnColorDarkblue)
	ON_COMMAND(ID_COLOR_DARKGREEN, OnColorDarkgreen)
	ON_COMMAND(ID_COLOR_DARKRED, OnColorDarkred)
	ON_COMMAND(ID_COLOR_GRAY, OnColorGray)
	ON_COMMAND(ID_COLOR_GREEN, OnColorGreen)
	ON_COMMAND(ID_COLOR_LIGHTBLUE, OnColorLightblue)
	ON_COMMAND(ID_COLOR_LIGHTGREEN, OnColorLightgreen)
	ON_COMMAND(ID_COLOR_PINK, OnColorPink)
	ON_COMMAND(ID_COLOR_PURPLE, OnColorPurple)
	ON_COMMAND(ID_COLOR_RED, OnColorRed)
	ON_COMMAND(ID_COLOR_YELLOW, OnColorYellow)
	ON_COMMAND(ID_RANDCOLOR, OnRandcolor)
	ON_WM_KEYDOWN()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestnView construction/destruction

CTestnView::CTestnView()
{
	// TODO: add construction code here
}

CTestnView::~CTestnView()
{
}

BOOL CTestnView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CTestnView drawing

void CTestnView::OnDraw(CDC* pDC)
{
	CTestnDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	  // int num = 9;//皇后数目
	CString outstr[7];
	outstr[1].Format("欢迎使用,此程序为N皇后的简单可视化实现,如有宝贵意见请与QQ369606234联系,希望能得到您的宝贵意见!");
	outstr[2].Format("程序调试:samuel                      2008.11.22 ");
	outstr[3].Format("程序简介: 1.首先应先设置皇后数目;");
	outstr[4].Format("          2.点击开始分析;");
	outstr[5].Format("          3.鼠标左键单击棋盘区域或按键盘任意键,即可显示不同的皇后放置方法;");
	outstr[6].Format("          4.当然也能随时设置改变皇后的颜色,默认为随机颜色,也可以设置为固定颜色.");
	pDC->TextOut(150,100,outstr[1]);
	pDC->TextOut(600,390,outstr[2]);
	pDC->TextOut(300,200,outstr[3]);
	pDC->TextOut(333,230,outstr[4]);
	pDC->TextOut(333,260,outstr[5]);
	pDC->TextOut(333,290,outstr[6]);
	m_count = 0 ;
	m_clicknum = 0 ;
	m_r = 255 ;
    m_g = 0;
    m_b =  255;
	m_totalnum = 0 ;
	m_colorflag = false ;
	button = false ;

}

/////////////////////////////////////////////////////////////////////////////
// CTestnView printing

BOOL CTestnView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CTestnView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CTestnView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CTestnView diagnostics

#ifdef _DEBUG
void CTestnView::AssertValid() const
{
	CView::AssertValid();
}

void CTestnView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CTestnDoc* CTestnView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestnDoc)));
	return (CTestnDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTestnView message handlers

void CTestnView::OnchangeNum()
{
	CDC* pDC = GetWindowDC();
	CTestnDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here

	//int pointlengthbegin = 80 , point = 80 ;

	Onclear();
	int i , j ;
	 length = 670 / (Queennum+1) ;
	 wigth = 900 / (Queennum+1) ;
		for( j = 80 ; j <= (Queennum)*length +80; j += length) //横向直线
		{
			pDC->MoveTo( 80 , j );
			pDC->LineTo( Queennum*wigth +80, j);//900
		}	
		for( j= 80 ; j <= (Queennum)*wigth+80 ; j += wigth)//纵向直线
		{
			pDC->MoveTo( j , 80 );
			pDC->LineTo( j , Queennum * length +80);//670
		}
    
     CRect rect;
     GetClientRect (rect);
     CBrush brush;
     brush.CreateSolidBrush(RGB(0,0,0));
     pDC->SelectObject(&brush);
	  bool flag = true ;
	  for( j = 80 ; j <= (Queennum-1)*length+80; j += length)
	  {
	      
		  if(flag == true)
		  {
			  for(i = 80 ; i <= (Queennum-1) * wigth+80 ; i += wigth*2 )
			  {
	          pDC->Rectangle(i,j,wigth+i,length+j);
			  }
			  flag = false ;
		  }
		  else 
		  {
			  for( i = 80 + wigth ;   i <= (Queennum-1) * wigth+80 ; i += wigth*2 )
			  {
			   pDC->Rectangle(i,j,wigth+i,length+j);
			  }
			  flag = true ;
		  }
	  }
}

void CTestnView::Onclear()
{
	CDC*pDC = GetWindowDC();
	CTestnDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CBrush brush;
    brush.CreateSolidBrush(RGB(255,255,255));
    pDC->SelectObject(&brush);
    pDC->Rectangle(0,0,1350,900);
}
void CTestnView::OnNum5() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 5 ;
	UpdateData(false);
		InitQueenmessage();
	//OnchangeNum();	
}
void CTestnView::InitQueenmessage()
{
	 OnTest();
     OnchangeNum();
	 m_clicknum = 0 ;
	 button = true ;	 
}

void CTestnView::OnNum6() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
    Queennum = 6 ; 
	UpdateData(false);
	InitQueenmessage();
	
}

void CTestnView::OnNum7() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 7 ;
	UpdateData(false);
	InitQueenmessage();

}

void CTestnView::OnNum8() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 8 ;
	UpdateData(false);
	InitQueenmessage();
	
}

void CTestnView::OnNum9() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 9 ;
	UpdateData(false);
	InitQueenmessage();

}

void CTestnView::OnNum10() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 10 ;
	UpdateData(false);
	InitQueenmessage();
}

void CTestnView::OnNum11() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 11 ;
	UpdateData(false);
	InitQueenmessage();
}

void CTestnView::OnNum12() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 12 ;
	InitQueenmessage();
	UpdateData(false);
}

void CTestnView::OnNum13() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 13 ;
	UpdateData(false);
	InitQueenmessage();
}

void CTestnView::OnNum14() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 14 ;
	UpdateData(false);
	InitQueenmessage();
}

void CTestnView::OnNum4() 
{
	// TODO: Add your command handler code here
	UpdateData(true);
	Queennum = 4 ;
	UpdateData(false);
	InitQueenmessage();
}

void CTestnView::OnBegin() 
{
	// TODO: Add your command handler code here
	int k;
    int n = Queennum;
    x[1] = 0;
    k = 1;
	m_count = 0 ;
    while (k>0)
    {
        x[k] = x[k] + 1;
        while (x[k] <= n && place(k) == false)
            x[k] = x[k] + 1;

        if (x[k] <= n)
            if (k == n)
            {
                if(m_count < m_clicknum)
				{
				    	m_count ++;
					    continue;
				}
				else
				{
					   OnDrawQueen(x,n);
					   return;			   
				}
            }
            else
            {
                k = k + 1;
                x[k] = 0;
            }
        else
            k = k - 1;
    }
}
bool CTestnView::place(int k)
{
    int i;
    i = 1;
    while (i<k)
    {
        if (x[i] == x[k] || (abs(x[i] - x[k]) == abs(i-k)))
            return false;
        i = i + 1;
    }
    return true;
}
void CTestnView::OnDrawQueen(int a[20] , int n )
{
    CDC*pDC = GetWindowDC();
	CTestnDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	int y_add = 100 ; 
    CString outstr[4];
    for( int i = 1 ; i <= n ; i ++ )
	{
		int randnum = rand()%14;
		if(!m_colorflag)
			switch(randnum)
		{
		case 0:ColorBlue() ;break;
		case 1:ColorCroci() ;break;
		case 2:ColorCyan() ;break;
        case 3:ColorDarkblue() ;break;
	    case 4:ColorDarkgreen() ;break;
		case 5:ColorDarkred() ;break;
		case 6:ColorGray() ;break;
		case 7:ColorGreen() ;break;
		case 8:ColorLightblue() ;break;
		case 9:ColorLightgreen() ;break;
        case 10:ColorPink() ;break;
		case 11:ColorPurple() ;break;
		case 12:ColorRed() ;break;
		case 13:ColorYellow() ;break;
		}
			CBrush brush;
		brush.CreateSolidBrush(RGB(m_r,m_g,m_b));//255,0,0
        pDC->SelectObject(&brush);	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -