?? +-+
字號:
// 人機對戰(zhàn)五子棋tryView.cpp : implementation of the CTryView class
//
#include "stdafx.h"
#include "人機對戰(zhàn)五子棋try.h"
#include "人機對戰(zhàn)五子棋tryDoc.h"
#include "人機對戰(zhàn)五子棋tryView.h"
#include "Dlg.h"
#include "Dlg2.h"
#include "Dlg1.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define WHITE 1
#define BLACK 2
#define WITH_PEOPLE 1
#define WITH_COMPUTER 2
#define EASY 0
#define NORMAL 1
//#define HARD 2
/////////////////////////////////////////////////////////////////////////////
// CTryView
IMPLEMENT_DYNCREATE(CTryView, CView)
BEGIN_MESSAGE_MAP(CTryView, CView)
//{{AFX_MSG_MAP(CTryView)
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_Restart, OnRestart)
ON_COMMAND(ID_DIFFICULTY, OnDifficulty)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CTryView construction/destruction
CTryView::CTryView()
{
// TODO: add construction code here
CDlg2 dlg2;
CDlg1 dlg1;
dlg2.DoModal();
mode=dlg2.mode;
if(mode==WITH_COMPUTER)
{
//if(dlg1.DoModal()==IDOK)
//{
// difficulty=dlg1.difficulty;
AfxMessageBox("操作提示:單擊鼠標左鍵放子,電腦自動下子。");
//}
}
else
//{
AfxMessageBox("操作提示:白方單擊鼠標左鍵放子,黑方單擊鼠標右鍵放子。");
//}
}
CTryView::~CTryView()
{
}
BOOL CTryView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTryView drawing
void CTryView::OnDraw(CDC* pDC)
{
CTryDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//CDlg2 dlg2;
//dlg2.DoModal();
//int nResult=GetCheckedRadioButton(IDC_DOUBLE,IDC_COMPUTER)
//mode=dlg2.mode;
if(mode==WITH_COMPUTER)
{
DrawBoard(pDC);
// AfxMessageBox("操作提示:單擊鼠標左鍵放子,電腦自動下子。");
}
else
{
DrawBoard1(pDC);
// AfxMessageBox("操作提示:白方單擊鼠標左鍵放子,黑方單擊鼠標右鍵放子。");
}
}
/////////////////////////////////////////////////////////////////////////////
// CTryView printing
BOOL CTryView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTryView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTryView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CTryView diagnostics
#ifdef _DEBUG
void CTryView::AssertValid() const
{
CView::AssertValid();
}
void CTryView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTryDoc* CTryView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTryDoc)));
return (CTryDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTryView message handlers
void CTryView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CTryDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(mode==WITH_COMPUTER){ //人機對戰(zhàn)模式
if(pDoc->decided==TRUE)
return;
if(point.x<200||point.x>800||point.y<30||point.y>630)
return;
CPoint pos;
pos.x=(point.x-200)/40;
pos.y=(point.y-30)/40;
if(pDoc->GetCondition(pos.x,pos.y)!=EMPTY)
return;
pDoc->SetCondition(pos.x,pos.y,PEOPLE);
DrawWhite(&dc,pos.x,pos.y);
if(pDoc->IsGameOver())
{
pDoc->decided=TRUE;
if(pDoc->Get_number()>=60)
AfxMessageBox("我不服!有種在挑一局!!!!");
else if(pDoc->Get_number()<60&&pDoc->Get_number()>20)
AfxMessageBox("算你行,你贏了!");
else
AfxMessageBox("佩服!你贏了,在下甘拜下風!!");
//ResetGame();
}
pDoc=GetDocument();
if(difficulty==EASY)
pos=pDoc->ComputerThink1();
else
pos=pDoc->ComputerThink2();
pDoc->SetCondition(pos.x,pos.y,COMPUTER);
DrawBlack(&dc,pos.x,pos.y);
if(pDoc->IsGameOver()&&pDoc->decided==FALSE)
{
pDoc->decided=TRUE;
if((pDoc->Get_number())>=60)
AfxMessageBox("你輸了!加把勁有希望!");
else if((pDoc->Get_number()<60)&&(pDoc->Get_number()>20))
AfxMessageBox("你輸了!水平不過如此啊?");
else
AfxMessageBox("小樣!你太菜了!就你也想贏我?");
//ResetGame();
}
if(pDoc->IsGameOver())
{
CDlg dlg;
dlg.DoModal();
if(dlg.reset==TRUE)
{
CDlg2 dlg2;
dlg2.DoModal();
mode=dlg2.mode;
if(mode==WITH_COMPUTER)
DrawBoard(&dc);
else
DrawBoard1(&dc);
ResetGame();
}
}
}
else //雙人游戲模式
{
if(pDoc->decided==TRUE)
return;
if(point.x<200||point.x>800||point.y<30||point.y>630)
return;
if(next==BLACK)
return;
CPoint pos;
pos.x=(point.x-200)/40;
pos.y=(point.y-30)/40;
if(pDoc->GetCondition(pos.x,pos.y)!=EMPTY)
return;
next=BLACK;
pDoc->SetCondition(pos.x,pos.y,PEOPLE);
DrawWhite(&dc,pos.x,pos.y);
if(pDoc->IsGameOver())
{
pDoc->decided=TRUE;
AfxMessageBox("白方獲勝!");
}
if(pDoc->IsGameOver())
{
CDlg dlg;
dlg.DoModal();
if(dlg.reset==TRUE)
{
CDlg2 dlg2;
dlg2.DoModal();
mode=dlg2.mode;
if(mode==WITH_COMPUTER)
DrawBoard(&dc);
else
DrawBoard1(&dc);
ResetGame();
}
}
}
CView::OnLButtonDown(nFlags, point);
}
void CTryView::DrawWhite(CDC *pDC,int i,int j)
{
CBrush brush(RGB(255,255,255));
pDC->SelectObject(&brush);
//pDC->SelectStockObject(NULL_BRUSH);
//pDC->SelectObject(&pen);
pDC->Ellipse(200+i*40+4,30+j*40+4,200+i*40+36,30+j*40+36);
//pDC->SelectObject(pOldPen);
}
void CTryView::DrawBlack(CDC *pDC,int i,int j)
{
CBrush brush(RGB(0,0,0));
pDC->SelectObject(&brush);
//pDC->SelectStockObject(NULL_BRUSH);
//pDC->SelectObject(&pen);
pDC->Ellipse(200+i*40+4,30+j*40+4,200+i*40+36,30+j*40+36);
//pDC->SelectObject(pOldPen);
}
void CTryView::DrawBoard(CDC *pDC)
{
CTryDoc* pDoc = GetDocument();
/////////////////////////////////畫背景色//////////////////////////////////////////
CBrush brush2(RGB(0,120,0));
pDC->SelectObject(&brush2);
pDC->Rectangle(0,0,1024,768);
////////////////////////////////寫文字///////////////////////////////////////////
LOGFONT lf;
CFont cf;
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight=-80;
lf.lfCharSet=GB2312_CHARSET;
::lstrcpy(lf.lfFaceName,"華文行楷");
cf.CreateFontIndirect(&lf);
CFont* oldfont=pDC->SelectObject(&cf);
pDC->SetTextColor(RGB(255,255,0));
pDC->SetBkColor(RGB(0,120,0));
pDC->TextOut(50,70,"人");
pDC->TextOut(50,140,"機");
pDC->TextOut(50,210,"對");
pDC->TextOut(50,280,"戰(zhàn)");
pDC->TextOut(50,350,"五");
pDC->TextOut(50,420,"子");
pDC->TextOut(50,490,"棋");
CBrush brush3(RGB(192,0,0));
pDC->SelectObject(&brush3);
pDC->Ellipse(825,480,1000,540);
pDC->Ellipse(845,560,965,625);
CFont cf1;
LOGFONT lf1;
memset(&lf1,0,sizeof(LOGFONT));
lf1.lfHeight=-25;
lf1.lfCharSet=GB2312_CHARSET;
::lstrcpy(lf1.lfFaceName,"華文行楷");
cf1.CreateFontIndirect(&lf1);
pDC->SelectObject(&cf1);
pDC->SetTextColor(RGB(0,255,255));
pDC->SetBkColor(RGB(192,0,0));
pDC->TextOut(845,500,"五子棋 ver 1.0");
pDC->TextOut(855,580,"盛鋒制作");
pDC->SetBkColor(RGB(0,120,0));
if(difficulty==EMPTY)
pDC->TextOut(60,580,"(初級)");
else
pDC->TextOut(60,580,"(中級)");
pDC->SelectObject(oldfont);
cf.DeleteObject();
/////////////////////////////////畫棋盤///////////////////////////////////////////
CBrush brush1(RGB(0,0,192));
pDC->SelectObject(&brush1);
//CPen* pOldPen=pDC->SelectObject(&pen1);
//pDC->MoveTo(10,10);
//pDC->LineTo()
pDC->Rectangle(185,15,815,645);
CPen pen(PS_SOLID,2,RGB(0,192,0));
CPen* pOldPen=pDC->SelectObject(&pen);
for(int k=0;k<=15;k++)
{
pDC->MoveTo(200+k*40,30);
pDC->LineTo(200+k*40,630);
pDC->MoveTo(200,30+k*40);
pDC->LineTo(800,30+k*40);
}
pDC->SelectObject(pOldPen);
///////////////////////////////導入位圖/////////////////////////////////////////
CBitmap m_bmp;
m_bmp.LoadBitmap(IDB_BITMAP3);
BITMAP bm;
m_bmp.GetObject(sizeof(BITMAP),&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldbmp=dcMem.SelectObject(&m_bmp);
pDC->BitBlt(818,15,200,740,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldbmp);
dcMem.DeleteDC();
///////////////////////////////畫黑白子/////////////////////////////////////////
for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
{
if(pDoc->GetCondition(i,j)==PEOPLE)
DrawWhite(pDC,i,j);
else if(pDoc->GetCondition(i,j)==COMPUTER)
DrawBlack(pDC,i,j);
}
}
void CTryView::ResetGame()
{
CClientDC dc(this);
CTryDoc* pDoc = GetDocument();
pDoc->ResetData();
if(mode==WITH_COMPUTER)
{
DrawBoard(&dc);
AfxMessageBox("操作提示:單擊鼠標左鍵放子,電腦自動下子。");
}
else
{
DrawBoard1(&dc);
AfxMessageBox("操作提示:白方單擊鼠標左鍵放子,黑方單擊鼠標右鍵放子。");
}
}
void CTryView::DrawBoard1(CDC *pDC)
{
CTryDoc* pDoc = GetDocument();
/////////////////////////////////畫背景色//////////////////////////////////////////
CBrush brush2(RGB(0,120,0));
pDC->SelectObject(&brush2);
pDC->Rectangle(0,0,1024,768);
////////////////////////////////寫文字///////////////////////////////////////////
LOGFONT lf;
CFont cf;
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight=-80;
lf.lfCharSet=GB2312_CHARSET;
::lstrcpy(lf.lfFaceName,"華文行楷");
cf.CreateFontIndirect(&lf);
CFont* oldfont=pDC->SelectObject(&cf);
pDC->SetTextColor(RGB(255,255,0));
pDC->SetBkColor(RGB(0,120,0));
pDC->TextOut(50,60,"雙");
pDC->TextOut(50,180,"人");
pDC->TextOut(50,300,"五");
pDC->TextOut(50,420,"子");
pDC->TextOut(50,540,"棋");
CBrush brush3(RGB(192,0,0));
pDC->SelectObject(&brush3);
pDC->Ellipse(825,480,1000,540);
pDC->Ellipse(845,560,965,625);
CFont cf1;
LOGFONT lf1;
memset(&lf1,0,sizeof(LOGFONT));
lf1.lfHeight=-25;
lf1.lfCharSet=GB2312_CHARSET;
::lstrcpy(lf1.lfFaceName,"華文行楷");
cf1.CreateFontIndirect(&lf1);
pDC->SelectObject(&cf1);
pDC->SetTextColor(RGB(0,255,255));
pDC->SetBkColor(RGB(192,0,0));
pDC->TextOut(845,500,"五子棋 ver 1.0");
pDC->TextOut(855,580,"盛鋒制作");
pDC->SelectObject(oldfont);
cf.DeleteObject();
/////////////////////////////////畫棋盤///////////////////////////////////////////
CBrush brush1(RGB(0,0,192));
pDC->SelectObject(&brush1);
//CPen* pOldPen=pDC->SelectObject(&pen1);
//pDC->MoveTo(10,10);
//pDC->LineTo()
pDC->Rectangle(185,15,815,645);
CPen pen(PS_SOLID,2,RGB(0,192,0));
CPen* pOldPen=pDC->SelectObject(&pen);
for(int k=0;k<=15;k++)
{
pDC->MoveTo(200+k*40,30);
pDC->LineTo(200+k*40,630);
pDC->MoveTo(200,30+k*40);
pDC->LineTo(800,30+k*40);
}
pDC->SelectObject(pOldPen);
///////////////////////////////導入位圖/////////////////////////////////////////
CBitmap m_bmp;
m_bmp.LoadBitmap(IDB_BITMAP3);
BITMAP bm;
m_bmp.GetObject(sizeof(BITMAP),&bm);
CDC dcMem;
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldbmp=dcMem.SelectObject(&m_bmp);
pDC->BitBlt(818,15,200,740,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldbmp);
dcMem.DeleteDC();
///////////////////////////////畫黑白子/////////////////////////////////////////
for(int i=0;i<15;i++)
for(int j=0;j<15;j++)
{
if(pDoc->GetCondition(i,j)==PEOPLE)
DrawWhite(pDC,i,j);
else if(pDoc->GetCondition(i,j)==COMPUTER)
DrawBlack(pDC,i,j);
}
}
void CTryView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CTryDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(mode==WITH_PEOPLE){
if(pDoc->decided==TRUE)
return;
if(point.x<200||point.x>800||point.y<30||point.y>630)
return;
if(next==WHITE)
return;
CPoint pos;
pos.x=(point.x-200)/40;
pos.y=(point.y-30)/40;
if(pDoc->GetCondition(pos.x,pos.y)!=EMPTY)
return;
next=WHITE;
pDoc->SetCondition(pos.x,pos.y,COMPUTER);
DrawBlack(&dc,pos.x,pos.y);
if(pDoc->IsGameOver())
{
pDoc->decided=TRUE;
AfxMessageBox("黑方獲勝!");
}
if(pDoc->IsGameOver())
{
CDlg dlg;
dlg.DoModal();
if(dlg.reset==TRUE)
{
CDlg2 dlg2;
dlg2.DoModal();
mode=dlg2.mode;
ResetGame();
}
}
}
CView::OnRButtonDown(nFlags, point);
}
void CTryView::OnRestart()
{
// TODO: Add your command handler code here
CDlg dlg;
dlg.DoModal();
if(dlg.reset==TRUE)
{
CDlg2 dlg2;
dlg2.DoModal();
mode=dlg2.mode;
ResetGame();
}
}
void CTryView::OnDifficulty()
{
// TODO: Add your command handler code here
CClientDC dc(this);
CDlg1 dlg1;
if(dlg1.DoModal()==IDOK)
{
difficulty=dlg1.difficulty;
OnDraw(&dc);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -