跪求C或C++的小游戏五子棋的代码,!

作者&投稿:叱干岩 (若有异议请与网页底部的电邮联系)
跪求资源,c++五子棋游戏代码~

#include
#include
#include
#include
#define Height 25 //迷宫的高度,必须为奇数
#define Width 25 //迷宫的宽度,必须为奇数
#define Wall 1
#define Road 0
#define Start 2
#define End 3
#define Esc 5
#define Up 1
#define Down 2
#define Left 3
#define Right 4
int map[Height+2][Width+2];
void gotoxy(int x,int y) //移动坐标
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
void hidden()//隐藏光标
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=0;//赋1为显示,赋0为隐藏
SetConsoleCursorInfo(hOut,&cci);
}
void create(int x,int y) //随机生成迷
{
int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向
int i,j,t;
//将方向打乱
for(i=0;i<4;i++)
{
j=rand()%4;
t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;
t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;
}
map[x][y]=Road;
for(i=0;i<4;i++)
if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall)
{
map[x+c[i][0]][y+c[i][1]]=Road;
create(x+2*c[i][0],y+2*c[i][1]);
}
}
int get_key() //接收按键
{
char c;
while(c=getch())
{
if(c==27) return Esc; //Esc
if(c!=-32)continue;
c=getch();
if(c==72) return Up; //上
if(c==80) return Down; //下
if(c==75) return Left; //左
if(c==77) return Right; //右
}
return 0;
}
void paint(int x,int y) //画迷宫
{
gotoxy(2*y-2,x-1);
switch(map[x][y])
{
case Start:
printf("入");break; //画入口
case End:
printf("出");break; //画出口
case Wall:
printf("▇");break; //画墙
case Road:
printf(" ");break; //画路
}
}
void game()
{
int x=2,y=1; //玩家当前位置,刚开始在入口处
int c; //用来接收按键
while(1)
{
gotoxy(2*y-2,x-1);
printf("●"); //画出玩家当前位置
if(map[x][y]==End) //判断是否到达出口
{
gotoxy(30,24);
printf("到达终点,按任意键结束");
getch();
break;
}
c=get_key();
if(c==Esc)
{
gotoxy(0,24);
break;
}
switch(c)
{
case Up: //向上走
if(map[x-1][y]!=Wall)
{
paint(x,y);
x--;
}
break;
case Down: //向下走
if(map[x+1][y]!=Wall)
{
paint(x,y);
x++;
}
break;
case Left: //向左走
if(map[x][y-1]!=Wall)
{
paint(x,y);
y--;
}
break;
case Right: //向右走
if(map[x][y+1]!=Wall)
{
paint(x,y);
y++;
}
break;
}
}
}
int main()
{
int i,j;
srand((unsigned)time(NULL)); //初始化随即种子
hidden(); //隐藏光标
for(i=0;i<=Height+1;i++)
for(j=0;j<=Width+1;j++)
if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫
map[i][j]=Road;
else map[i][j]=Wall;

create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数
for(i=0;i<=Height+1;i++) //边界处理
{
map[i][0]=Wall;
map[i][Width+1]=Wall;
}

for(j=0;j<=Width+1;j++) //边界处理
{
map[0][j]=Wall;
map[Height+1][j]=Wall;
}
map[2][1]=Start; //给定入口
map[Height-1][Width]=End; //给定出口
for(i=1;i<=Height;i++)
for(j=1;j<=Width;j++) //画出迷宫
paint(i,j);
game(); //开始游戏
getch();
return 0;
}

#include "stdafx.h"
#include "3_1.h"

#include "3_1Doc.h"
#include "3_1View.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMy3_1View

IMPLEMENT_DYNCREATE(CMy3_1View, CView)

BEGIN_MESSAGE_MAP(CMy3_1View, CView)
//{{AFX_MSG_MAP(CMy3_1View)
ON_WM_LBUTTONUP()
ON_WM_SETCURSOR()
ON_COMMAND(ID_START, OnStart)
ON_COMMAND(ID_PLAYER, OnPlayer)
ON_COMMAND(ID_CPMPUTER, OnCpmputer)
//}}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()

/////////////////////////////////////////////////////////////////////////////
// CMy3_1View construction/destruction

CMy3_1View::CMy3_1View()
{
// TODO: add construction code here
hcursorblack=AfxGetApp()->LoadCursor(IDC_CURSOR1);
hcursorwhite=AfxGetApp()->LoadCursor(IDC_CURSOR2);
m_bmwhite.LoadBitmap(IDB_WHITE);
m_bmblack.LoadBitmap(IDB_BLACK);

for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
wzq[i][j]=0;
colorwhite=true;
//默认为人对机
vscomputer=1;
}

CMy3_1View::~CMy3_1View()
{
}

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

return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMy3_1View drawing

void CMy3_1View::OnDraw(CDC* pDC)
{
CMy3_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//画背景
CBrush mybrush1;
mybrush1.CreateSolidBrush(RGB(192,192,192));
CRect myrect1(0,0,1200,800);
pDC->FillRect(myrect1,&mybrush1);

CBrush mybrush;
mybrush.CreateSolidBrush(RGB(0,0,0));
for(int a=0;a<3;a++)
for(int b=0;b<3;b++)
{
CRect myrect(97+a*120,97+b*120,103+a*120,103+b*120);
pDC->FillRect(myrect,&mybrush);
}
//画黑框线
CPen mypen;
CPen*myoldPen;
mypen.CreatePen(PS_SOLID,1,RGB(0,0,0));
myoldPen=pDC->SelectObject(&mypen);
for(int i=0;i<19;i++)
{
pDC->MoveTo(40,40+i*20);
pDC->LineTo(400,40+i*20);
pDC->MoveTo(40+i*20,40);
pDC->LineTo(40+i*20,400);
}

CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");

for(int n=0;n<19;n++)
for(int m=0;m<19;m++)
if(wzq[n][m]==1)
{
Dc.SelectObject(m_bmwhite);
pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);
}
else if(wzq[n][m]==-1)
{
Dc.SelectObject(m_bmblack);
pDC->BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);
}
}

/////////////////////////////////////////////////////////////////////////////
// CMy3_1View printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMy3_1View diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMy3_1View message handlers

void CMy3_1View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
//显示棋子
/////////////////////人对机
if(vscomputer==1)
{
if(point.x>30&&point.x<410&&point.y>30&&point.y<410)
{
int px=(point.x-30)/20;
int py=(point.y-30)/20;
if(colorwhite&&wzq[px][py]==0)
{
Dc.SelectObject(m_bmwhite);
pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);
wzq[px][py]=1;
over(point);
colorwhite=false;
//保存白棋位置
vspoint=point;
//计算机下棋
computerdown();
}
}
}
//人对人
if(vscomputer==2)
{
if(point.x>30&&point.x<410&&point.y>30&&point.y<410)
{
int px=(point.x-30)/20;
int py=(point.y-30)/20;
if(colorwhite&&wzq[px][py]==0)
{
Dc.SelectObject(m_bmwhite);
pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);
wzq[px][py]=1;
over(point);
colorwhite=false;
}
else if(wzq[px][py]==0)
{
Dc.SelectObject(m_bmblack);
pDC->BitBlt(px*20+32,py*20+32,160,160,&Dc,0,0,SRCCOPY);
wzq[px][py]=-1;
over(point);
colorwhite=true;
}
}
}

CView::OnLButtonUp(nFlags, point);
}

BOOL CMy3_1View::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default

if(nHitTest==HTCLIENT)
{
if(colorwhite)
{
CMainFrame*pFrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar*pStatus=&pFrm->m_wndStatusBar;
if(pStatus)
{
pStatus->GetStatusBarCtrl().SetIcon(0,AfxGetApp()->LoadIcon(IDI_WHITE));
pStatus->SetPaneText(0,"白棋下");
}
SetCursor(hcursorwhite);
}
else
{
CMainFrame*pFrm=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CStatusBar*pStatus=&pFrm->m_wndStatusBar;
if(pStatus)
{
//显示图像
pStatus->GetStatusBarCtrl().SetIcon(0,AfxGetApp()->LoadIcon(IDI_BLACK));
//显示文字
pStatus->SetPaneText(0,"黑棋下");
}
SetCursor(hcursorblack);
}
return 1;
}
return CView::OnSetCursor(pWnd, nHitTest, message);
}

void CMy3_1View::over(CPoint point)
{
//获取鼠标指向数组位置
int x=(point.x-30)/20;
int y=(point.y-30)/20;
//开始判断的坐标
int xx,yy;
if(x<4)
xx=0;
else
xx=x-4;
if(y<4)
yy=0;
else
yy=y-4;

int i,j,a;
//横向判断
for(i=xx;i<15;i++)
{
a=0;
for(j=i;j<i+5;j++)
{
a=a+wzq[j][y];
if(a==5)
{
AfxMessageBox("白棋胜!");OnStart();return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");OnStart();return;
}
}
}
//竖向判断
for(i=yy;i<15;i++)
{
a=0;
for(j=i;j<i+5;j++)
{
a=a+wzq[x][j];
if(a==5)
{
AfxMessageBox("白棋胜!");OnStart();return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");OnStart();return;
}
}
}
//向右下角
//判断起点位置
if(x<y)
{
if(xx==0)
yy=y-x;
}
else
{
if(yy==0)
xx=x-y;
}
//参数1时退出循环
int over=0;
do
{
a=0;
for(i=0;i<5;i++)
{
if((xx+i)<19||(yy+i)<19)
{
a=a+wzq[xx+i][yy+i];
if(a==5)
{
AfxMessageBox("白棋胜!");OnStart();return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");OnStart();return;
}
}
//到了边界
else
over=1;
}
xx+=1;
yy+=1;
}while(over==0);
//向左下角
if(y>(18-x))
{
if(x>13)
{
yy=y-(18-x);
xx=18;
}
else
{
yy=y-4;
xx=x+4;
}
}
else
{
if(y<5)
{
xx=x+y;
yy=0;
}
else
{
yy=y-4;
xx=x+4;
}
}
over=0;
do
{
a=0;
for(i=0;i<5;i++)
{
if((xx-i)>=0||(yy+i)<19)
{
a=a+wzq[xx-i][yy+i];
if(a==5)
{
AfxMessageBox("白棋胜!");OnStart();return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");OnStart();return;
}
}
//到了边界
else
over=1;
}
xx-=1;
yy+=1;
}while(over==0);

}

void CMy3_1View::OnStart()
{
// TODO: Add your command handler code here
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
wzq[i][j]=0;
colorwhite=true;
Invalidate();
}
//黑棋下
void CMy3_1View::putdown(CPoint point)
{
CDC *pDC=GetDC();
CDC Dc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can't create DC");
Dc.SelectObject(m_bmblack);
pDC->BitBlt(point.x*20+32,point.y*20+32,160,160,&Dc,0,0,SRCCOPY);
wzq[point.x][point.y]=-1;
//变数组坐标为棋盘坐标
CPoint overpoint;
overpoint.x=point.x*20+30;
overpoint.y=point.y*20+30;
over(overpoint);
colorwhite=true;

}
//轮到计算机下棋
void CMy3_1View::computerdown()
{
//把各种情形赋值为如下
bpointcan4=(-1,-1);
wpointcan4=(-1,-1);
bpointcan3=(-1,-1);
wpointcan3=(-1,-1);
bpointcan2=(-1,-1);
wpointcan2=(-1,-1);
bpointcan1=(-1,-1);

//搜索最好的落棋点
for(int i=0;i<19;i++)
for(int j=0;j<19;j++)
bestputdown(i,j);
//判断放在哪里
//棋多的位置优先
//黑白一样多时黑先
if(bpointcan4.x!=-1)
{
putdown(bpointcan4);
return;
}
else if(wpointcan4.x!=-1)
{
putdown(wpointcan4);
return;
}
else if(bpointcan3.x!=-1)
{
putdown(bpointcan3);
return;
}
else if(wpointcan3.x!=-1)
{
putdown(wpointcan3);
return;
}
else if(bpointcan2.x!=-1)
{
putdown(bpointcan2);
return;
}

else if(wpointcan2.x!=-1)
{
putdown(wpointcan2);
return;
}
else
{
putdown(bpointcan1);
return;
}

}
//检查四个方向,各算出五个棋子的和并赋值
void CMy3_1View::bestputdown(int i,int j)
{

int num[4];
CPoint numbig;
int a,k;
/////////////////////////////// num[0] -->
a=0;
if(i<15)
for(k=0;k<5;k++)
a=a+wzq[i+k][j];
num[0]=abs(a);

////////////////////////////// num[1] "|"
a=0;
if(j<15)
for(k=0;k<5;k++)
a=a+wzq[i][j+k];
num[1]=abs(a);

/////////////////////////////// num[2] "\"
a=0;
if(i<15&&j<15)
for(k=0;k<5;k++)
a=a+wzq[i+k][j+k];
num[2]=abs(a);

////////////////////////////// num[3] "/"
a=0;
if((i>4)&&(j<15))
for(k=0;k<5;k++)
a=a+wzq[i-k][j+k];
num[3]=abs(a);

//比较哪个方向同色棋最多
numbig=maxnum(num[0],num[1],num[2],num[3]);
//在得到最大值和方向上寻找落棋点
switch(numbig.y)
{
case 4:
searchcandown4(i,j,numbig.x);break;
case 3:
searchcandown3(i,j,numbig.x);break;
case 2:
searchcandown2(i,j,numbig.x);break;
default:
searchcandown1(i,j,numbig.x);
}

}

CPoint CMy3_1View::maxnum(int a, int b, int c, int d)
{
//point.x为方向值
//point.y为最大值
CPoint point;
if(a>=b)
{
point.x=0;
point.y=a;
}
else
{
point.x=1;
point.y=b;
}
if(c>point.y)
{
point.x=2;
point.y=c;
}
if(d>point.y)
{
point.x=3;
point.y=d;
}
return point;
}
//有四个同色棋
void CMy3_1View::searchcandown4(int i, int j, int n)
{
// CPoint point;
int k;
///////////////////////////// num[0] "--"
if(n==0)
for(k=0;k<5;k++)
//如果第一个是空
if(wzq[i][j]==0)
{
//如果下面有白棋
if(wzq[i+1][j]==1)
{
//下面位置可以下棋,已经有四个白棋
wpointcan4.x=i;
wpointcan4.y=j;
break;
}
else
{
//下面位置可以下棋,已经有四个黑棋
bpointcan4.x=i;
bpointcan4.y=j;
break;
}
}
//如果找到下棋位置,一定能找到!
else if(wzq[i+k][j]==0)
{
//如果第一个是白棋
if(wzq[j][j]==1)
{
wpointcan4.x=i+k;
wpointcan4.y=j;
break;
}
//否则第一个是黑棋
else
{
bpointcan4.x=i+k;
bpointcan4.y=j;
break;
}
}

//////////////////////////// num[1] "|"
if(n==1)
for(k=0;k<5;k++)
{
if(wzq[i][j]==0)
if(wzq[i][j+1]==1)
{
wpointcan4.x=i;
wpointcan4.y=j;
break;
}
else
{
bpointcan4.x=i;
bpointcan4.y=j;
break;
}

else if(wzq[i][j+k]==0)
{
if(wzq[i][j]==1)
{
wpointcan4.x=i;
wpointcan4.y=j+k;
break;
}
else
{
bpointcan4.x=i;
bpointcan4.y=j+k;
break;
}
}
}
/////////////////////////////// num[2] "\"
if(n==2)
for(k=0;k<5;k++)
{
if(wzq[i][j]==0)
if(wzq[i+1][j+1]==1)
{
wpointcan4.x=i;
wpointcan4.y=j;
break;
}
else
{
bpointcan4.x=i;
bpointcan4.y=j;
break;
}

else if(wzq[i+k][j+k]==0)
{
if(wzq[i][j]==1)
{
wpointcan4.x=i+k;
wpointcan4.y=j+k;
break;
}
else
{
bpointcan4.x=i+k;
bpointcan4.y=j+k;
break;
}
}
}
////////////////////////////// num[3] "/"
if(n==3)
for(k=0;k<5;k++)
{
if(wzq[i][j]==0)
if(wzq[i-1][j+1]==1)
{
wpointcan4.x=i;
wpointcan4.y=j;
break;
}
else
{
bpointcan4.x=i;
bpointcan4.y=j;
break;
}

else if(wzq[i-k][j+k]==0)
{
if(wzq[i][j]==1)
{
wpointcan4.x=i-k;
wpointcan4.y=j+k;
break;
}
else
{
bpointcan4.x=i-k;
bpointcan4.y=j+k;
break;
}
}
}

}
//最多有三个同色
void CMy3_1View::searchcandown3(int i, int j, int n)
{
int k=0;
///////////////////////////// num[0] "--"
if(n==0)
for(k=0;k<5;k++)
//找到位置
if(wzq[i+k][j]==0)
{
//下一个是白棋
if(wzq[i+k+1][j]==1)
{
//下面位置可以下棋,已经有三个白棋
wpointcan3.x=i+k;
wpointcan3.y=j;
}
//下一个是黑棋
else if(wzq[i+k+1][j]==-1)
{
bpointcan3.x=i+k;
bpointcan3.y=j;
}
}
//////////////////////////// num[1] "|"
if(n==1)
for(k=0;k<5;k++)
if(wzq[i][j+k]==0)
{
if(wzq[i][j+k-1]==1)
{
wpointcan3.x=i;
wpointcan3.y=j+k;
}
else if(wzq[i][j+k+1]==-1)
{
bpointcan3.x=i;
bpointcan3.y=j+k;
}
}
/////////////////////////////// num[2] "\"
if(n==2)
for(k=0;k<5;k++)
if(wzq[i+k][j+k]==0)
{
if(wzq[i+k+1][j+k+1]==1)
{
wpointcan3.x=i+k;
wpointcan3.y=j+k;
}
else if(wzq[i+k+1][j+k+1]==-1)
{
bpointcan3.x=i+k;
bpointcan3.y=j+k;
}
}
////////////////////////////// num[3] "/"
if(n==3)
for(k=0;k<5;k++)
if(wzq[i-k][j+k]==0)
{
if(wzq[i-k-1][j+k+1]==1)
{
wpointcan3.x=i-k;
wpointcan3.y=j+k;
}
else if(wzq[i-k-1][j+k+1]==-1)
{
bpointcan3.x=i-k;
bpointcan3.y=j+k;
}
}
}
//最多有两个同色
void CMy3_1View::searchcandown2(int i, int j, int n)
{
int k=0,m=0,a=0,b=0;
///////////////////////////// num[0] "--"
if(n==0)
{
//判断有多少个空位置
for(k=0;k<5;k++)
if(wzq[i+k][j]==0)
m+=1;
//如果只有一个空位置
if(m==1)
for(a=0;a<5;a++)
//找到空位置
if(wzq[i+a][j]==0)
{
//下面两个棋子值的和
b=wzq[i+a+1][j]+wzq[i+a+2][j];
//都是黑棋
if(b==-2)
{
//下面位置可以下棋,旁边有两个黑棋
bpointcan2.x=i+a;
bpointcan2.y=j;
}
//都是白棋
if(b==2)
{
wpointcan2.x=i+a;
wpointcan2.y=j;
}
}
//如果有三个空位置,说明另外两个同色
if(m==3)
{
for(a=0;a<5;a++)
//如果两个是黑棋
if(wzq[i+a][j]==-1)
{
for(b=0;b<5;b++)
//如果找到空位置
if(wzq[i+b][j]==0)
{
//下面位置可以下棋,旁边有两个黑棋
bpointcan2.x=i+b;
bpointcan2.y=j; break;
}
}
else
//如果两个是白棋
if(wzq[i+a][j]==1)
{
for(b=0;b<5;b++)
if(wzq[i+b][j]==0)
{
wpointcan2.x=i+b;
wpointcan2.y=j; break;
}
}
}
}
//////////////////////////// num[1] "|"
m=0;
if(n==1)
{
for(k=0;k<5;k++)
if(wzq[i][j+k]==0)
m++;
if(m==1)
for(a=0;a<5;a++)
if(wzq[i][j+a]==0)
{
b=wzq[i][j+a+1]+wzq[i][j+a+2];
if(b==-2)
{
bpointcan2.x=i;
bpointcan2.y=j+a;
}
if(b==2)
{
wpointcan2.x=i;
wpointcan2.y=j+a;
}
}
if(m==3)
{
for(a=0;a<5;a++)
if(wzq[i][j+a]==-1)
{
for(b=0;b<5;b++)
if(wzq[i][j+b]==0)
{
bpointcan2.x=i;
bpointcan2.y=j+b; break;
}
}
else
if(wzq[i][j+a]==1)
{
for(b=0;b<5;b++)
if(wzq[i][j+b]==0)
{
wpointcan2.x=i;
wpointcan2.y=j+b; break;
}
}
}

}
/////////////////////////////// num[2] "\"
m=0;
if(n==2)
{
for(k=0;k<5;k++)
if(wzq[i+k][j+k]==0)
m++;
if(m==1)
for(a=0;a<5;a++)
if(wzq[i+a][j+a]==0)
{
b=wzq[i+a+1][j+a+1]+wzq[i+a+2][j+a+2];
if(b==-2)
{
bpointcan2.x=i+a;
bpointcan2.y=j+a;
}
if(b==2)
{
wpointcan2.x=i+a;
wpointcan2.y=j+a;
}
}
if(m==3)
{
for(a=0;a<5;a++)
if(wzq[i+a][j+a]==-1)
{
for(b=0;b<5;b++)
if(wzq[i+b][j+b]==0)
{
bpointcan2.x=i+b;
bpointcan2.y=j+b; break;
}
}
else
if(wzq[i+a][j+a]==1)
{
for(b=0;b<5;b++)
if(wzq[i+b][j+b]==0)
{
wpointcan2.x=i+b;
wpointcan2.y=j+b; break;
}
}
}

}
////////////////////////////// num[3] "/"
m=0;
if(n==3)
{
for(k=0;k<5;k++)
if(wzq[i-k][j+k]==0)
m++;
if(m==1)
for(a=0;a<5;a++)
if(wzq[i-a][j+a]==0)
{
b=wzq[i-a-1][j+a+1]+wzq[i-a-2][j+a+2];
if(b==-2)
{
bpointcan2.x=i-a;
bpointcan2.y=j+a;
}
if(b==2)
{
wpointcan2.x=i-a;
wpointcan2.y=j+a;
}
}
if(m==3)
{
for(a=0;a<5;a++)
if(wzq[i-a][j+a]==-1)
{
for(b=0;b<5;b++)
if(wzq[i-b][j+b]==0)
{
bpointcan2.x=i-b;
bpointcan2.y=j+b; break;
}
}
else
if(wzq[i-a][j+a]==1)
{
for(b=0;b<5;b++)
if(wzq[i-b][j+b]==0)
{
wpointcan2.x=i-b;
wpointcan2.y=j+b; break;
}
}
}
}

}
//如果五个位置的和是一
void CMy3_1View::searchcandown1(int i, int j, int n)
{
//计算刚才白棋落棋点
int ii=(vspoint.x-30)/20;
int jj=(vspoint.y-30)/20;
int a;
for(a=0;a<5;a++)
//如果不到边界
if(ii+a<19)
{
//向右,如果有空位置
if(wzq[ii+a][jj]==0)
{
//在这个位置下黑棋
bpointcan1.x=ii+a;
bpointcan1.y=jj;
return;
}
}
//到了边界
else
//向左,如果有空位置
if(wzq[ii-1][jj]==0)
{
bpointcan1.x=ii-a;
bpointcan1.y=jj;
return;
}

}

//vscomputer:2表示人对人,1表示人对机
void CMy3_1View::OnPlayer()
{
// TODO: Add your command handler code here
vscomputer=2;
OnStart();
}

void CMy3_1View::OnCpmputer()
{
// TODO: Add your command handler code here
vscomputer=1;
OnStart();
}

人与人对战还好写,人机对战就需要给于计算机智能计算如何下的能力。。这个ai才是五子棋的核心。。。
http://zhidao.baidu.com/question/99819110.html?fr=qrl&cid=866&index=2&fr2=query
别人弄好的例子。。
http://zhidao.baidu.com/question/67361688.html
当形成对战时ai特别难,其难度不亚于开发一个系统,有时候开发一个系统所花的时候比你开发一个ai还要难。。。(如魔兽的电脑的ai(电脑占据物质优势、操纵优势还是被玩家蹂躏。。。。。)

老经典了,不过人机对战没这么容易写吧,算法可是一个程序的核心,灵魂啊

人机对战的太难了


用c语言编写小游戏 要有解释
2018-01-09 用C语言编写的小游戏代码是什么? 8 2013-11-16 教你如何使用C语言编写简单小游戏 183 2018-04-15 使用C语言编写小游戏的方法是什么? 2011-12-29 求一个用C语言编写的小游戏代码 552 2009-11-27 用C语言编写一个小游戏要在vc++6.0里运行 47 2013-08-28 怎样用C语言编写一个小游戏?

有什么好玩的C语言小程序
void yinc(int x=1,int y=0) \/\/隐藏光标的函数 { CONSOLE_CURSOR_INFO gb={x,y}; \/\/y设为0即隐藏 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &gb);} void csh( ) \/\/初始化函数 { int i;Color(7);gtxy(zlx,zly); printf("╔"); gtxy(zlx+W-2,zly); ...

求C语言编一个猜数游戏。我已经写完了,但是不好用求高人修改。_百度知 ...
比如将`printf("请输入一个1~100数:");`改为`printf("请输入你猜的数字:");`,并且修正了`scanf`语句的括号问题。5. 增加了`return 0;`语句,以符合C语言程序的标准结尾。6. 删除了多余的`#include`指令和未使用的变量。以上修改旨在提高代码的清晰度和可用性,同时保持了原始程序的功能。

用C++编写的小游戏源代码
char c = 'y';cin >> c;if (c == 'n')break;} } protected:int ChoiceMode() \/\/选择模式 { int i = 0;system("cls"); \/\/系统调用,清屏 InitChessBoard(); \/\/重新初始化棋盘 cout << "***0、退出 1、电脑vs玩家 2、玩家vs玩家***" << endl;while (1){ cou...

用C语言编写小游戏
要求用到C的图形库TC2.0下可运行不要贪吃蛇俄罗斯方块的话最好简单些的越简单越好初学怕看不懂谢谢要能运行的哦好的话追加分人机交互的小游戏... 要求用到C的图形库TC2.0下可运行不要贪吃蛇俄罗斯方块的话最好简单些的越简单越好初学怕看不懂谢谢要能运行的哦好的话追加分人机交互的小游戏 展开 ...

急求c语言小游戏代码!!!
include<stdio.h>#include<conio.h>#include<stdlib.h>#include<windows.h>int board[10] = {2,2,2,2,2,2,2,2,2,2};int turn = 1,flag = 0;int player,comp;void menu(); void go(int n);void start_game();void check_draw();void draw_board();\/\/打印棋盘void player_...

用C语言设计小游戏的程序??急!!!
\/\/下面的四行代码用于计算主框架的左上角和右下角的坐标 frame.left=(getmaxx()+1-BlockWidth*RowOfFrame)\/2; frame.top=(getmaxy()+1-BlockHeight*ColumnOfFrame)\/2; frame.right=frame.left+BlockWidth*RowOfFrame; frame.bottom=frame.top+BlockHeight*ColumnOfFrame; Head(frame.left+100,frame.top-20...

宠物小精灵c游版本安卓APK
游戏中涵盖大量可爱萌宠卡牌,在游戏中玩家需要收集、培养各种小精灵,喜欢的小伙伴们赶快来墨鱼下载站下载试玩吧!宠物小精灵c游版介绍《宠物小精灵》游戏以大家耳熟能详的宠物小精灵故事背景,配合符合动画原着的经典剧情,使游戏从小精灵的故事中脱颖而出。在游戏中,玩家扮演的训练师在精灵世界的各种...

求会C语言编程编程的师兄或高手帮我编个小游戏
刚改成了c版 如下:include <stdio.h> include include <stdlib.h> void main(){ time_t startTime, endTime;int num[30];int inNum;int i;char ready;\/\/随机数字 srand((unsigned)time(NULL));for(i=0; i<30; i++){ num[i] = rand()%10;} printf("Are you ready!(y\/n)"...

用C语言编一个小游戏,注明编码,(简单易懂的游戏,不要复杂)
\/\/C语言写的,一个玩石头、剪刀、布的小游戏。下面是源码。include<stdio.h> include<stdlib.h> int main(){ char cq[][10]={"石头","剪刀","布"};int guess=-1,r,youwin=0,mewin=0,daping=0,total=0;srand(time(NULL));while(1){ r=(int)((rand()\/(RAND_MAX+1.0))*3)...

龙南县19373355471: 急求一个五子棋C++程序 -
尤空复方: 以下代码经测试能在vc++6.0运行 以下是代码的开始-----------------------------------------------------------------#include<iostream>#include<cstdlib> using namespace std; const char outstr[11][4]={"┌","┬","┐","├","┼","┤","└","┴","...

龙南县19373355471: 谁能帮我用C语言做一个五子棋的程序,,我有一个C++版本的 -
尤空复方: #include <stdio.h>#define N 20int p[N][N]; int t, len; int lastx, lasty;void draw(void); void chess(void); int haswin(void);int main(void) {int n; memset(p, 0, N*N); printf("请问您想玩几子棋?(0~20):");do{scanf("%d", &t);if(t > N || t < ...

龙南县19373355471: 求C++五子棋游戏的程序
尤空复方: #include "types.h" #include "mouse.h" #include "shell.h" #include "luffar.h" int main(void) { InitMouse(); InitGraphics(); DrawBackground(); SetPoint(1,1); // L刧ger musen p?punkten 1,1. ShowPoint(); BOOL bWantToExit = FALSE; ...

龙南县19373355471: 用C++怎么编五子棋游戏的程序?
尤空复方: #define CROSSRU 0xbf /*右上角点*/ #define CROSSLU 0xda /*左上角点*/ #define CROSSLD 0xc0 /*左下角点*/ #define CROSSRD 0xd9 /*右下角点*/ #define CROSSL 0xc3 /*左边*/ #define CROSSR 0xb4 /*右边*/ #define CROSSU 0xc2 /*上边*/ #define CROSSD 0xc1 /*下边*/ #define CROSS 0xc5 /*十字交叉点*/

龙南县19373355471: 求用c语言编写的人机对战五子棋的源代码,要能运行的,简单点就好,初学C的学生 -
尤空复方: #include "stdafx.h"#include "resource.h"#include "define.h"#include "box.h"#include...

龙南县19373355471: 用c++写五子棋游戏的程序
尤空复方: /************************************************************************************ 五子棋,双人对战,界面简易,主要函数是判断胜负函数************************************************************************************/#include<iostream>//#include"data.h"...

龙南县19373355471: 找五子棋源代码c++ -
尤空复方: #include "iostream"#include <iomanip> using namespace std; const int M=20; const int N=20; int main() { char weizhi[M][N]; int k,i,j,x,y,flag=0; cout<<"欢迎使用简易双人对战五子棋游戏"<<endl; cout<<"五子棋棋谱如下:"<<endl; for(k=0;k<...

龙南县19373355471: 求C语言编写的五子棋程序.
尤空复方: #includeamp;lt;stdio.hamp;gt;nbsp;#includeamp;lt;stdlib.hamp;gt;nbsp;#includeamp;lt;graphics.hamp;gt;nbsp;#includeamp;lt;bios.hamp;gt;nbsp;#includeamp;lt;conio.hamp;gt;nbsp;#definenbsp;LEFTnbsp;0x4b00nbsp;#definenbsp;RIGHTnbsp;0x4d...

龙南县19373355471: 我们想用C++ Builder写一个五子棋小游戏的程序,不知道怎么写,求指教, -
尤空复方: 第一步,不考虑AI的情况下,先简单实现 单人 点击落子,点一次换一次黑白,落一次子判断一次输赢.第二步,加入socket通信两个人互落子.实现开局,落子,判断输赢,悔棋,认输,重新开局基本操作.第三步,加入AI,人机对战.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网