// canvasFrame.cpp : implementation file
//
#include "stdafx.h"
#include "canvasr.h"
#include "canvasFrame.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// canvasFrame
int board[10][10];
BOOL ptable[10][10][192],ctable[10][10][192];
int cgrades[10][10],pgrades[10][10],cgrade,pgrade;
int win[2][192];
int pcount,ccount;
BOOL player,computer,start = true,over,pwin,cwin,tie;
int i,j,k,m,n,count;
int mat,nat,mde,nde;
char str[10];
IMPLEMENT_DYNCREATE(canvasFrame, CFrameWnd)
canvasFrame::canvasFrame()
{
RECT rect;
Create(NULL,"绘图窗口",WS_OVERLAPPEDWINDOW,CRect(0,0,415,470));
CClientDC dc(this);
int width = dc.GetDeviceCaps(HORZRES);
int height = dc.GetDeviceCaps(VERTRES);
GetWindowRect( &rect );
width = ( width - ( rect.right - rect.left ))/2 ;
height = (height - (rect.bottom - rect.top ))/2 ;
MoveWindow( width , height , (rect.right - rect.left ) , (rect.bottom - rect.top ) ,true);
mdc = new CDC;
mdc1 = new CDC;
mdc->CreateCompatibleDC(&dc);
mdc1->CreateCompatibleDC(&dc);
purple = new CBitmap;
green = new CBitmap;
bgbmp = new CBitmap;
temp = new CBitmap;
temp->CreateCompatibleBitmap(&dc,rect.right,rect.bottom);
purple->m_hObject = (HBITMAP)::LoadImage(NULL,"purple.bmp",IMAGE_BITMAP,36,36,LR_LOADFROMFILE);
green->m_hObject = (HBITMAP)::LoadImage(NULL,"green.bmp",IMAGE_BITMAP,36,36,LR_LOADFROMFILE);
bgbmp->m_hObject = (HBITMAP)::LoadImage(NULL,"bgbmp.bmp",IMAGE_BITMAP,400,400,LR_LOADFROMFILE);
mdc->SelectObject(temp);
for(i=0;i<10;i++)
for(j=0;j<10;j++)
board[i][j] = 2;
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptable[j+k][i][count] = true;
ctable[j+k][i][count] = true;
}
count++;
}
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptable[i][j+k][count] = true;
ctable[i][j+k][count] = true;
}
count++;
}
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptable[j+k][i+k][count] = true;
ctable[j+k][i+k][count] = true;
}
count++;
}
for(i=0;i<6;i++)
for(j=9;j>=4;j--)
{
for(k=0;k<5;k++)
{
ptable[j-k][i+k][count] = true;
ctable[j-k][i+k][count] = true;
}
count++;
}
if(rand()%2==0)
computer = true;
else
player = true;
count = 0;
}
canvasFrame::~canvasFrame()
{
delete purple;
delete green;
delete bgbmp;
delete temp;
delete mdc;
delete mdc1;
}
BEGIN_MESSAGE_MAP(canvasFrame, CFrameWnd)
//{{AFX_MSG_MAP(canvasFrame)
ON_WM_LBUTTONDOWN()
ON_WM_CREATE()
ON_WM_TIMER()
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// canvasFrame message handlers
void canvasFrame::OnLButtonDown(UINT nFlags, CPoint point)
{
if(!over)
if(player)
{
if(point.x<400 && point.y<400)
{
m = (int)floor(point.x/40);
n = (int)floor(point.y/40);
if(board[m][n] == 2)
{
board[m][n] = 0;
pcount++;
if((ccount == 50) && (pcount == 50))
{
tie = true;
over = true;
}
for(i=0;i<192;i++)
{
if(ptable[m][n][i] && win[0][i] != 7)
win[0][i]++;
if(ctable[m][n][i])
{
ctable[m][n][i] = false;
win[1][i]=7;
}
}
player = false;
computer = true;
}
}
}
CFrameWnd::OnLButtonDown(nFlags, point);
}
int canvasFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer(1,500,NULL);
return 0;
}
void canvasFrame::OnTimer(UINT nIDEvent)
{
CClientDC dc(this);
if(!over)
{
if(computer)
ComTurn();
for(i=0;i<=1;i++)
for(j=0;j<192;j++)
{
if(win[i][j] == 5)
if(i==0)
{
pwin = true;
over = true;
break;
}
else
{
cwin = true;
over = true;
break;
}
if(over)
break;
}
dc.TextOut(85,400," 该您下了.. ");
}
mdc1->SelectObject(bgbmp);
mdc->BitBlt(0,0,400,400,mdc1,0,0,SRCCOPY);
for(i=0;i<=9;i++)
for(j=0;j<=9;j++)
{
if(board[i][j] == 0)
{
mdc1->SelectObject(green);
mdc->BitBlt(i*40+2,j*40+2,36,36,mdc1,0,0,SRCCOPY);
}
if(board[i][j] == 1)
{
mdc1->SelectObject(purple);
mdc->BitBlt(i*40+2,j*40+2,36,36,mdc1,0,0,SRCCOPY);
}
}
dc.BitBlt(0,0,400,400,mdc,0,0,SRCCOPY);
if(pwin)
dc.TextOut(85,400,"您赢了!按下 F1 可重新进行游戏..");
if(cwin)
dc.TextOut(85,400,"电脑赢了!按下 F1 可重新进行游戏..");
if(tie)
dc.TextOut(85,400,"不分胜负!按下 F1 可重新进行游戏..");
CFrameWnd::OnTimer(nIDEvent);
}
void canvasFrame::ComTurn()
{
for(i=0;i<=9;i++)
for(j=0;j<=9;j++)
{
pgrades[i][j]=0;
if(board[i][j] == 2)
for(k=0;k<192;k++)
if(ptable[i][j][k])
{
switch(win[0][k])
{
case 1:
pgrades[i][j]+=5;
break;
case 2:
pgrades[i][j]+=50;
break;
case 3:
pgrades[i][j]+=100;
break;
case 4:
pgrades[i][j]+=400;
break;
}
}
}
for(i=0;i<=9;i++)
for(j=0;j<=9;j++)
{
cgrades[i][j]=0;
if(board[i][j] == 2)
for(k=0;k<192;k++)
if(ctable[i][j][k])
{
switch(win[1][k])
{
case 1:
cgrades[i][j]+=5;
break;
case 2:
cgrades[i][j]+=50;
break;
case 3:
cgrades[i][j]+=100;
break;
case 4:
cgrades[i][j]+=400;
break;
}
}
}
if(start)
{
if(board[4][4]==2)
{
m = 4;
n = 4;
}
else
{
m = 5;
n = 5;
}
start = false;
}
else
{
for(i=0;i<10;i++)
for(j=0;j<10;j++)
if(board[i][j] == 2)
{
if(cgrades[i][j]>=cgrade)
{
cgrade = cgrades[i][j];
mat = i;
nat = j;
}
if(pgrades[i][j]>=pgrade)
{
pgrade = pgrades[i][j];
mde = i;
nde = j;
}
}
if(cgrade>=pgrade)
{
m = mat;
n = nat;
}
else
{
m = mde;
n = nde;
}
}
cgrade = 0;
pgrade = 0;
board[m][n] = 1;
ccount++;
if((ccount == 50) && (pcount == 50))
{
tie = true;
over = true;
}
for(i=0;i<192;i++)
{
if(ctable[m][n][i] && win[1][i] != 7)
win[1][i]++;
if(ptable[m][n][i])
{
ptable[m][n][i] = false;
win[0][i]=7;
}
}
player = true;
computer = false;
}
void canvasFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == VK_ESCAPE)
PostMessage(WM_CLOSE);
if(nChar == VK_F1)
{
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{
pgrades[i][j] = 0;
cgrades[i][j] = 0;
board[i][j] = 2;
}
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptable[j+k][i][count] = true;
ctable[j+k][i][count] = true;
}
count++;
}
for(i=0;i<10;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptable[i][j+k][count] = true;
ctable[i][j+k][count] = true;
}
count++;
}
for(i=0;i<6;i++)
for(j=0;j<6;j++)
{
for(k=0;k<5;k++)
{
ptable[j+k][i+k][count] = true;
ctable[j+k][i+k][count] = true;
}
count++;
}
for(i=0;i<6;i++)
for(j=9;j>=4;j--)
{
for(k=0;k<5;k++)
{
ptable[j-k][i+k][count] = true;
ctable[j-k][i+k][count] = true;
}
count++;
}
for(i=0;i<=1;i++)
for(j=0;j<192;j++)
win[i][j] = 0;
if(rand()%2==0)
computer = true;
else
player = true;
count = 0;
ccount = 0;
pcount = 0;
start = true;
over = false;