c++五子棋花月必胜开局统计玩家获胜局数

急求一个五子棋C++程序_百度知道
急求一个五子棋C++程序
是基于Win32控制平台的C++五子棋程序用到类(class)有棋盘有悔棋功能能在visual
c++ 6.0 上运行急求。。。
我有更好的答案
以下代码经测试能在vc++6.0运行以下是代码的开始-----------------------------------------------------------------#include&iostream&#include&cstdlib& const char outstr[11][4]={&┌&,&┬&,&┐&,&├&,&┼&,&┤&,&└&,&┴&,&┘&,&○&,&●&};int com[15][15],luozi[15][15];int c,d;void jushi()
//这是判断落子重要性的函数 {
int x,y,i,m,n,lianzi1=0,lianzi2=0,life=0;
memset(com,0,sizeof(com));
for(x=0;x&=14;x++)
for(y=0;y&=14;y++)
if(luozi[x][y]==0)
for(m=-1;m&=1;m++)
for(n=-1;n&=1;n++)
if(m!=0 || n!=0)
for(i=1;i&=4;i++)
if( x+i*m&=0 && x+i*m&=14 && y+i*n&=0 && y+i*n&=14 && luozi[x+i*m][y+i*n]==1 )
{lianzi1++;}
if(luozi[x+i*m][y+i*n]==0)
for(i=-1;i&=-4;i--)
if( x+i*m&=0 && x+i*m&=14 && y+i*n&=0 && y+i*n&=14 && luozi[x+i*m][y+i*n]==1 )
{lianzi1++;}
if(luozi[x+i*m][y+i*n]==0)
if(lianzi1==1)
{com[x][y]+=1;}
else if(lianzi1==2)
if(life==1)
{com[x][y]+=5;}
else if(life==2)
{com[x][y]+=10;}}
else if(lianzi1==3)
if(life==1)
{com[x][y]+=20;}
else if(life==2)
{com[x][y]+=100;}
else if(lianzi1==4)
{com[x][y]+=500;}
for(i=1;i&=4;i++)
if( x+i*m&=0 && x+i*m&=14 && y+i*n&=0 && y+i*n&=14 && luozi[x+i*m][y+i*n]==2 )
{lianzi2++;}
if(luozi[x+i*m][y+i*n]==0)
for(i=-1;i&=-4;i--)
if( x+i*m&=0 && x+i*m&=14 && y+i*n&=0 && y+i*n&=14 && luozi[x+i*m][y+i*n]==2 )
{lianzi2++;}
if(luozi[x+i*m][y+i*n]==0)
if(lianzi2==1)
{com[x][y]+=2;}
else if(lianzi2==2)
if(life==1)
{com[x][y]+=8;}
else if(life==2)
{com[x][y]+=30;}
}else if(lianzi2==3)
if(life==1)
{com[x][y]+=50;}
else if(life==2)
{com[x][y]+=200;}
else if(lianzi2==4)
{com[x][y]+=1000;}
lianzi1=0;
lianzi2=0;
}void computer(int a[15][15])
//这是电脑落子的函数 {
int i,j,max=0;
for(i=0;i&=14;i++)
for(j=0;j&=14;j++)
if(com[i][j]&max)
max=com[i][j];
a[c][d]=10;
luozi[c][d]=2;}int panduan(int x,int y,int sum)
//判断胜负的函数 {
int m,n,i,lianzi=0;
for(m=-1;m&=1;m++)
for(n=-1;n&=1;n++)
if(m!=0 || n!=0)
for(i=1;i&=4;i++)
if( x+i*m&=0 && x+i*m&=14 && y+i*n&=0 && y+i*n&=14 && luozi[x+i*m][y+i*n]==sum )
{lianzi++;}
for(i=-1;i&=-4;i--)
if( x+i*m&=0 && x+i*m&=14 && y+i*n&=0 && y+i*n&=14 && luozi[x+i*m][y+i*n]==sum )
{lianzi++;}
if(lianzi&=4){
}int main()
//主函数 ,主要进行人落子工作 { system (&color 2f&); system (&mode con cols=50 lines=25&); system (&title 欢迎使用!&);
int a[15][15]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,
6,7,7,7,7,7,7,7,7,7,7,7,7,7,8};
int x,y,i,j;
memset(luozi,0,sizeof(luozi));
cout&&& 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4&&&
for(i=0;i&=14;i++)
cout&&i%10;
for(j=0;j&=14;j++)
{cout&&outstr[a[i][j]];
cout&&&请输入您要下的棋子 行\\列 用空格隔开:&;
while(cin&&x&&y)
if(luozi[x][y]==0 && x&=0 && x&=14 && y&=0 && y&=14)
a[x][y]=9;
luozi[x][y]=1;
if(panduan(x,y,1)==0)
system (&cls&);
computer(a);
if(panduan(c,d,2)==0)
cout&&& 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4&&&
for(i=0;i&=14;i++)
cout&&i%10;
for(j=0;j&=14;j++)
cout&&outstr[a[i][j]];
cout&&&您的棋子落在&&&x&&&行&&&& &&&y&&&列&&&
cout&&&电脑的棋子落在&&&c&&&行&&&& &&&d&&&列&&&
cout&&&请输入您要下的棋子&;
cout&&& 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4&&&
for(i=0;i&=14;i++)
cout&&i%10;
for(j=0;j&=14;j++)
cout&&outstr[a[i][j]];
cout&&&电脑的棋子落在&&&c&&&行&&&& &&&d&&&列&&&
cout&&&电脑获胜!&&&
system (&cls&);
cout&&& 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4&&&
for(i=0;i&=14;i++)
cout&&i%10;
for(j=0;j&=14;j++)
cout&&outstr[a[i][j]];
cout&&&您获胜啦!&&&
cout&&&输入错误,请重新输入:&&&
system (&title 谢谢使用!&);
system (&color 03&);
cout&&&谢谢使用&&&
system(&pause&nul&);
return 0;}-----------------------------------------------希望对你有用!
采纳率:28%
#include &graphics.h&#include &bios.h&#define ROW
20#define COL
20#define SIZE
20#define HIDE
0#define SHOW
1#define SET
2#define TRUE
1#define FALSE
0#define LU
5#define RD
6#define LD
7#define RU
8#define LEFT
/*光标左键值*/#define RIGHT
/*光标右键值*/#define DOWN
/*光标下键值*/#define UP
/*光标上键值*/#define ESC
/*按键Esc的值 */#define ENTER
/*按键Enter的值 */#define F2
/*按键F2的值*/int MinX, MinY, MaxX, MaxY;
/*定义棋盘横纵坐标变量*/int CurRow, CurCol, CurX, CurY;
/*定义行列坐标变量*/int CurFocus, R
/*定义棋手标志变量、棋子半径变量*/int Map[ROW][COL];
/*定义棋盘数组*/void InitGraph();
/*初始化图形*/void InitData();
/*初始化数据*/void DrawChessboard();
/*画棋盘函数*/void ShowChess();
/*显示棋子*/void GamePlay();
/*开始游戏*/void SetChess(int focus);
/*设定棋子*/void MoveChess(int dir);
/*移动棋子*/void Refresh();
/*更新画面*/void CheckWin(int row, int col); /*判断输赢*/main(){ InitGraph();
/*初始化图形*/
InitData();
/*初始化数据*/
DrawChessboard();
/*画棋盘*/
GamePlay();
/*开始游戏*/
closegraph();
/*关闭图形界面*/}void InitGraph()
/*初始化图形*/{
int gdriver = DETECT; int gmode,
initgraph(&gdriver, &gmode, &&); /*初始化图形系统*/
errorcode = graphresult();
if (errorcode != grOk)
/*错误处理*/
printf(&Graphics error: %s\n&, grapherrormsg(errorcode));
printf(&Press any key to halt:&);
/*出错退出*/
}}void InitData()
/*初始化数据*/{
x = getmaxx();
y = getmaxy();
MinX = (x-COL*SIZE)/2;
/*棋盘边框横坐标最小值*/
MaxX = MinX+COL*SIZE;
/*棋盘边框横坐标最大值*/
MinY = (y-ROW*SIZE)/2;
/*棋盘边框纵坐标最小值*/ MaxY = MinY+ROW*SIZE;
/*棋盘边框纵坐标最大值*/
CurRow = ROW/2, CurCol = COL/2;
CurX = MinX+CurCol*SIZE+SIZE/2;
CurY = MinY+CurRow*SIZE+SIZE/2;
Radius = SIZE/2-3;
/*棋子半径*/
CurFocus = 1;
/* 黑1 白2*/}void DrawChessboard()
/*画棋盘函数*/{
int i, j, x,
setbkcolor(3);
/*设置背景颜色*/
setfillstyle(SOLID_FILL, 3);
/*背景颜色填充模式*/
bar(0, 0, getmaxx(), MinY);
setfillstyle(SOLID_FILL, 7);
setcolor(11);
bar(MinX, MinY, MaxX, MaxY);
x = MinX, y = MinY;
for (i=0; i&=ROW; i++, y+=SIZE)
line(MinX, y, MaxX, y);
/*画水平线*/
for (j=0; j&=COL; j++, x+=SIZE)
line(x, MinY, x, MaxY);
/*画垂直线*/
setcolor(11);
/*文本颜色*/
settextstyle(0, 0, 0);
/*文本类型*/ settextjustify(1, 1);
outtextxy(MinX-MinX/2, MinY+10, &Player 1&);
/*显示文本*/
outtextxy(MaxX+MinX/2, MinY+10, &Player 2&);
/*显示文本*/
outtextxy(getmaxx()/2, MaxY+MinY/2,&Esc:Exit Enter:Set F2:Start&);}void ShowChess(int flag)
/*显示棋子*/{
int color, r = R
if (flag==SET || flag==SHOW)
/*画棋子*/
if (CurFocus == 1)color = 1;
/*棋手1的棋子颜色*/
elsecolor = 15;
/*棋手2的棋子颜色*/
elsecolor = 7;
/*背景颜色*/ if (flag == SET)
Map[CurRow][CurCol] = /*置位数组值为当前颜色*/
CheckWin(CurRow, CurCol);
/*判断输赢*/ } else
/*显示棋子时棋子半径值*/
setcolor(color);
/*当前棋子颜色*/
circle(CurX, CurY, r);
/*画棋子*/
setfillstyle(SOLID_FILL, color); /*填充棋子*/
floodfill(CurX, CurY, color);
/*棋子的边缘颜色*/}/*在棋手名字下面显示当前下棋的棋手的棋子颜色*/void SetChess(int focus){
int color1, color2;
static x1, y1, x2, y2;
x1 = MinX-MinX/2;
x2 = MaxX+MinX/2;
y1 = y2 = MinY+40;
} /*根据棋手标志设定棋子颜色*/
if (focus == 1)
/*棋手标志值为1时 显示棋手1的颜色*/
color1 = 1;
color2 = 3;
/*否则显示棋手2的颜色*/
color1 = 3;
color2 = 15; } setfillstyle(SOLID_FILL, color1);
/*填充棋盘左侧棋子颜色*/ setcolor(color1); circle(x1, y1, Radius+2);
/*显示的棋子半径比正常的棋子半径大*/ floodfill(x1, y1, color1);
/*棋盘右侧欲显示棋子的边缘颜色*/ setfillstyle(SOLID_FILL, color2);
/*填充棋盘右侧棋子颜色*/ setcolor(color2); circle(x2, y2, Radius+2);
/*显示的棋子半径比棋盘上棋子半径大*/ floodfill(x2, y2, color2);
/*棋盘左侧欲显示棋子的边缘颜色*/ CurFocus =}void GamePlay()
/*开始游戏*/{
int key, Exit = FALSE;
ShowChess(SHOW);
/*初始化棋手要下的棋子的位置*/
SetChess(CurFocus);
/*显示正在下棋的棋手的棋子颜色*/
while (!Exit)
/*循环扫描键盘输入*/ {
key = bioskey(0);
switch (key)
/*判断键盘输入*/
/*按Esc键退出游戏*/
Exit = TRUE;
case ENTER:
/*按Enter键确认棋子*/
/*若此位置没有棋子则在此位置落子*/
/*并判断胜负,胜则显示胜者信息,负则提示该对手下棋*/
if (!Map[CurRow][CurCol])
ShowChess(SET);
/*在此处落子*/
SetChess(CurFocus%2 + 1); /*提示对手下棋*/
ShowChess(SHOW);
/*显示对手棋子的颜色*/
/*按F2,重新开始一局游戏*/
InitData();
/*重新初始化数据*/
for (i=0; i&ROW; i++)
/*清空棋盘*/
for (j=0; j&COL; j++)
Map[i][j] = 0;
DrawChessboard();
/*重新画棋盘*/
ShowChess(SHOW);
/*在初始位置显示棋子*/
SetChess(CurFocus);
/*显示下棋一方的颜色提示信息*/
case DOWN:
/*按方向键移动棋子*/
case LEFT:
case RIGHT:
MoveChess(key);
/*按照键盘输入移动棋子*/
}}void MoveChess(int dir)
/*移动棋子*/{
ShowChess(HIDE);
/*隐藏棋子*/
if (Map[CurRow][CurCol])Refresh();
/*此位置有棋子时更新*/
switch (dir) {
case LEFT:
/*向左移动*/
/*数组横向减一*/
CurX -= SIZE;
/*横坐标减一格*/
if (CurCol & 0)
/*若移出棋盘从相反方向进入*/
CurCol += COL;
CurX += COL * SIZE;
case RIGHT:
/*向右移动*/
CurX += SIZE;
if (CurCol == COL)
CurCol -= COL;
CurX -= COL * SIZE;
case DOWN:
/*向下移动*/
CurY += SIZE;
if (CurRow == ROW)
CurRow -= ROW;
CurY -= ROW * SIZE;
/*向上移动*/
CurY -= SIZE;
if (CurRow & 0)
CurRow += ROW;
CurY += ROW * SIZE;
ShowChess(SHOW);
/*当前位置显示棋子*/}void Refresh()
/*更新画面*/{
int color = Map[CurRow][CurCol];
setcolor(color);
circle(CurX, CurY, Radius);
setfillstyle(SOLID_FILL, color);
floodfill(CurX, CurY, color);}void CheckWin(int row, int col)
/*判断是否有五子相连,即判断输赢*/{
int count, color = Map[row][col];
int winner = 0, x,
char MsgWin[50]; /*统计水平方向相连棋子数目*/
count = GetNum(row,col,LEFT,color)+GetNum(row,col,RIGHT,color)+1;
if (count &= 5)winner = CurF
/*五子相连则胜*/ if (!winner)
/*统计竖直方向相连棋子数目*/
count = GetNum(row,col,UP,color)+GetNum(row,col,DOWN,color)+1;
if (count &= 5)winner = CurF
/*五子相连则胜*/ }
if (!winner)
/*统计左对角线方向相连棋子数目*/
count = GetNum(row,col,LU,color)+GetNum(row,col,RD,color)+1;
if (count &= 5)winner = CurF
/*五子相连则胜*/ }
if (!winner)
/*统计右对角线方向相连棋子数目*/
count = GetNum(row,col,LD,color)+GetNum(row,col,RU,color)+1;
if (count &= 5)winner = CurF
/*五子相连则胜*/ }
if (winner)
/*若当前棋手获胜,则输出相关信息*/
x = getmaxx()/2;
/*在棋盘上面输出文本信息*/
y = MinY-MinY/2;
setcolor(12);
settextstyle(0, 0, 2);
if (CurFocus == 1)
/*判断哪方获胜并输出其名称*/
strcpy(MsgWin, &Player 1&);
strcpy(MsgWin, &Player 2&);
strcat(MsgWin, & Win&);
outtextxy(x, y, MsgWin); /*显示文本“Win”*/
settextstyle(0, 0, 0);
exit(0); }}/*向8个方向判断相连棋子数目,返回数目值*/int GetNum(int row, int col, int dir, int value){
int result = 0;
switch (dir) {
case LEFT:
/*向左判断*/
for (i=col-1; i&=0; i--) /*找出最后相连棋子的位置*/
if (Map[row][i] != value)
result = col - 1 -
/*计算相连棋子的数目*/
case RIGHT:
/*向右判断*/
for (i=col+1; i&COL; i++) /*找出最后相连棋子的位置*/
if (Map[row][i] != value)
result = i - 1 -
/*计算相连棋子的数目*/
case DOWN:
/*向下判断*/
for (i=row+1; i&ROW; i++) /*找出最后相连棋子的位置*/
if (Map[i][col] != value)
result = i - 1 -
/*计算相连棋子的数目*/
/*向上判断*/
for (i=row-1; i&=0; i--) /*找出最后相连棋子的位置*/
if (Map[i][col] != value)
result = row - 1 -
/*计算相连棋子的数目*/
/*左上判断*/
/*找出最后相连棋子的位置*/
for (i=row-1, j=col-1; i&=0 && j&=0; i--, j--)
if (Map[i][j] != value)
result = row - 1 -
/*计算相连棋子的数目*/
/*右下判断*/
/*找出最后相连棋子的位置*/
for (i=row+1, j=col+1; i&ROW && j&COL; i++, j++)
if (Map[i][j] != value)
result = i - 1 -
/*计算相连棋子的数目*/
/*右上判断*/
/*找出最后相连棋子的位置*/
for (i=row-1,j=col+1; i&=0 && j&COL; i--, j++)
if (Map[i][j] != value)
result = row - 1 -
/*计算相连棋子的数目*/
/*左下判断*/
/*找出最后相连棋子的位置*/
for (i=row+1,j=col-1; i&ROW && j&=0; i++, j--)
if (Map[i][j] != value)
result = i - 1 -
/*计算相连棋子的数目*/ }
/*返回相连棋子的数值*/}
为您推荐:
其他类似问题
五子棋的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。查看: 1375|回复: 4
五子棋c++源程序 功能完整
此类简单游戏的设计最花时间的就是要保证功能完整,让玩家玩得尽可能舒服。主体架构方面都没有大问题,而在加入人机对战、机器对战及悔棋功能时,一些细微问题需要好好研究,不停测试。AI等智力问题也要适中。太弱智了玩得没激情,太聪明了玩得没信心。经过测试,发现再高级的AI也有输的时候,测试的博弈树的深度为2,再深反应会很慢,也就是说能预测两步的AI也会输。刚开始找到博弈树算法时,以为不管深度为多少都很聪明,后来发现只要找到窍门,那么深度为2的也很容易被打败。& && &&&而深度为3的反应需要10秒,后面的深度呈指数型增长,不符合实际需求。& && &&&游戏经过多次测试,反应良好。
PS】因马上就要交课程设计报告,公司也很忙,以下功能等后续版本实现:1、 据资料显示,博弈树算法还有很大的优化空间2、 机器对战,需要用到多线程3、 联网对战,因为传输的数据量小,且要求实时、有序、可靠,因此采用TCP协议4、 嵌入式,所在公司用的是Wince系统,改天有时间移植上去5、 多语言界面,如果老外也喜欢五子棋的话
参考文献【见同文件夹目录】1、 五子棋开局指南2、 维基百科:Alpha-Beta剪枝算法
0.png (51.19 KB, 下载次数: 13)
18:29 上传
c++源程序如下:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include &stdafx.h&
#include &3_1.h&
#include &MainFrm.h&
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
& & & & //{{AFX_MSG_MAP(CMainFrame)
& & & & ON_WM_CREATE()
& & & & //}}AFX_MSG_MAP
END_MESSAGE_MAP()
static UINT indicators[] =
{
& & & & ID_SEPARATOR,& && && &&&// status line indicator
& & & & ID_INDICATOR_CAPS,
& & & & ID_INDICATOR_NUM,
& & & & ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
& & & & // TODO: add member initialization code here
& & & &
CMainFrame::~CMainFrame()
{
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
& & & & if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
& & & & & & & & return -1;
& & & &
& & & & if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
& & & & & & & & | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
& & & & & & & & !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
& & & & {
& & & & & & & & TRACE0(&Failed to create toolbar\n&);
& & & & & & & & return -1;& && &// fail to create
& & & & }
& & & & if (!m_wndStatusBar.Create(this) ||
& & & & & & & & !m_wndStatusBar.SetIndicators(indicators,
& & & & & & & && &sizeof(indicators)/sizeof(UINT)))
& & & & {
& & & & & & & & TRACE0(&Failed to create status bar\n&);
& & & & & & & & return -1;& && &// fail to create
& & & & }
& & & & // TODO: Delete these three lines if you don't want the toolbar to
& & & & //&&be dockable
& & & & m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
& & & & EnableDocking(CBRS_ALIGN_ANY);
& & & & DockControlBar(&m_wndToolBar);
& & //添加白棋图像
//& & & & m_wndStatusBar.GetStatusBarCtrl().SetIcon(0,AfxGetApp()-&LoadIcon(IDI_WHITE));
& & & & //显示文字
//& & & & m_wndStatusBar.SetPaneText(0,&白棋下&);
& &
& & & & return 0;
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
& & & & if( !CFrameWnd::PreCreateWindow(cs) )
& & & & & & & & return FALSE;
& & & & // TODO: Modify the Window class or styles here by modifying
& & & & //&&the CREATESTRUCT cs
& & & & cs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST;& & & & //
& & & & cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;//;
& & & & //设置窗口大小:400*340
& & & & cs.cx=450;
& & & & cs.cy=500;& &
& & & & return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
& & & & CFrameWnd::AssertValid();
}
void CMainFrame::Dump(CDumpContext& dc) const
{
& & & & CFrameWnd::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers
所有资料51hei提供下载:
(108.13 KB, 下载次数: 29)
18:24 上传
点击文件名下载附件
解压就好下载积分: 黑币 -5
非常NICE 的code
想试试这个,作为初学者
赞,这个代码可以学习一下啊
Powered by&>&五子棋的功能实现 c++ 画棋盘 判断胜利
五子棋的功能实现 c++ 画棋盘 判断胜利
上传大小:1.8MB
用c++实现一般的五子棋功能,判断胜利,画棋盘等等
1.五子棋是2人对战游戏。
2.首局先落座者为黑方,后面则交换黑白方。
3.黑棋先白棋后,首先将五颗棋子连成一条直线(水平,垂直以及对角线方向皆可)的玩家获胜。
综合评分:5
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有6条
还不错。学习学习
代码还可以,挺简单的。
代码不错,学习学习
综合评分:
积分/C币:5
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
五子棋的功能实现 c++ 画棋盘 判断胜利
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
五子棋的功能实现 c++ 画棋盘 判断胜利游戏五子棋论文C++-免费论文
欢迎来到网学网学习,获得大量论文和程序!
游戏五子棋论文C++
&&&&请下载论文,论文或程序为doc或rar格式,只上传部分游戏五子棋论文C++内容,如果需要此论文或程序,请点击-下载论文,下载需要资料或是论文。&&&&  &&&&&&&&&内容摘要: C++语言是一种面向对象的语言,尽管在当前,可视化语言发展迅速,普及很快,但C++语言作为一种基础的语言,它的有时依然存在,甚至有时它是不可替代的,特别是和硬件接口技术相联系的软件。五子棋游戏是一种简单大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,现在流行的五子棋游戏软件大多缺乏美观的界面,和容易的操作方法,电脑的AI值也不是很高。本文通过C++语言在计算机图形方面的编程,设计了五子棋游戏软件,使该软件具有美观友好的截面,在人机对弈时,使电脑具有较高的智商。本游戏是以C++语言作为开发工具,采用搜索算法设计最优落子点开发的游戏软件。本文详细地介绍了五子棋游戏软件设计的全过程,描述了该软件的功能,以及和其它五子棋程序的一些比较。&&&&关键词:C++语言 面向对象语言 最优落子算法 &&&&    &&&&Disigned of Puzzle based on C++ Language&&&&Abstract: The C++ language is an object oriedted language, although in the current visualization language rapidly, and spread quickly, but the C++ language as a basis for language, its advantages still exist, and sometimes it is irreplaceable, particularly hardware and software interfaces are linked. Gobang game is a simple and popular game, since the computer to achieve, by the love of computer players, but now most popular game soft gobang lack aesthetic interface, and easy method of operation, the value of the computer AI is not high. The adoption of the C++ programming language in computer graphics, designed gobang game software to enable the software with a beautiful and friendly interface in both game, the computer has a higher IQ. The game is based on C++ language, using searching algorrithm to design best gobang. The detailed presentation of the whole process of gobang game software design, describes the software functions and procedures and other gobang other gobang some more.&&&&               &&&&Keywords: C++ language object oriedted language best algorithm &&&&目 录&&&&前言 5&&&&一、五子棋介绍及其开发环境 5&&&&(一)五子棋介绍 6&&&&(二)开发背景 6&&&&(三)开发环境及运行环境 6&&&&1.开发环境 6&&&&2.运行环境 6&&&&二、软件结构 7&&&&(一)棋盘类 7&&&&(二)游戏模式类 7&&&&三、棋盘类--Ctable 8&&&&(一)主要成员变量说明 8&&&&(二)主要成员函数说明 9&&&&1.套接字的回调处理--Accept、Connect、Receive 9&&&&2.清空棋盘--Clear 9&&&&3.绘制棋子--Draw 9&&&&4.左键消息--OnLButtonUp 10&&&&5.绘制棋盘--OnPaint 10&&&&6.对方落子完毕--Over 10&&&&7.设置游戏模式--SetGameMode 10&&&&8.胜负的判断--Win 11&&&&四、游戏模式类--CGame 11&&&&(一)主要成员变量说明 12&&&&1.棋盘指针--m_pTable 12&&&&2.落子步骤--m_StepList 12&&&&(二)主要成员函数说明 12&&&&1.悔棋操作--Back 12&&&&2.初始化操作--Init 12&&&&3.接收来自对方的消息--ReceiveMsg 13&&&&4.发送落子消息--SendStep 13&&&&5.胜利后的处理--Win 13&&&&五、消息机制 13&&&&(一)消息机制的架构 13&&&&(二)各种消息说明 14&&&&六、主要算法 17&&&&(一)判断胜负 17&&&&(二)人机对弈算法 20&&&&1.获胜组合 20&&&&2.落子后处理 21&&&&3.查找棋盘空位 21&&&&4.落子打分 22&&&&5.防守策略 24&&&&6.选取最佳落子 25&&&&七、补充说明 26&&&&八、结束语 26&&&&参考文献 27&&&&基于C++语言的智力游戏的设计&&&&前言&&&&  五子棋是人们喜欢的一种棋类游戏,近来,随着计算机的快速发展,以计算机作为对战平台,各种棋类游戏如雨后春笋般纷纷冒出,使得那些喜爱下棋,有常常苦于没有对手的棋迷们能随时过足棋瘾,而且这类软件个个水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的"深蓝"便是最具说服力的代表。&&&&  当我们与电脑对战对时,您知道这些软件是怎样像人脑一样进行思考的吗?总的来说(我们假定您熟悉五子棋的基本规则),要让电脑知道该在哪一点下子,就要根据盘面的形式,为每一可能落子点计算其重要程度,也就是当这子落下后会形成什么模型,然后通览全盘选出最重要的一点,这便是最基本的算法。当然,仅靠当前盘面进行判断是远远不够的,这样下棋很容易掉进玩家设下的陷阱,因为它没有考虑以后的变化。所以在此基础上我们需要使用好的算法是电脑能预测出今后几步的各种走法,以便做出最佳选择,这也是我们下棋时常说的"想了几步"。怎样才能达到这个程度呢?这是本文所要讨论的主要问题。作为一个五子棋游戏爱好者,在使用了众多的五子棋游戏软件后,发现当今大多数五子棋游戏软件中电脑的AI值不是很高,难与人脑抗衡,这是基于以上的最基本算法扩展而出的电脑最优落子算法不够优秀而造成的。本人使用C++语言作为开发工具,在吸收别人所编的五子棋游戏软件的基础上,再融入自己的创新思想(最优落子算法的改进),编写了这个五子棋游戏,软件实现了人机对弈和双人对弈的功能,游戏软件界面美观,操作容易,电脑的AI值也较高。&&&&  &&&&一、五子棋介绍及其开发环境&&&& (一)五子棋介绍&&&&  五子棋起源于中国古代的传统黑白棋种之一。现代五子棋日文称之为"B珠",英译为"Renju",英文称之为"Gobang"或"FIR"(Five in a Row的缩写),亦有"连五子"、"五子连"、"串珠"、"五目"、"五目碰"、"五格"等多种称谓。&&&&  五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征"短、平、快",又有古典哲学的高深学问"阴阳易理";它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有"场"的概念,亦有"点"的连接。它是中西文化的交流点,是古今哲理的结晶。&&&& (二)开发背景&&&&  当前网络上流传的五子棋游戏功能并不尽善尽美,其中最主要的问题就是人机对战和网络对战不能够一起实现,所以我决定开发一个既能够人机对战,又能够进行网络对战的五子棋系统。&&&& (三)开发环境及运行环境&&&&  1.开发环境&&&&* Intel(r) Pentium(r) 4 2.0GHz,512M内存,80G硬盘&&&&* Microsoft(r) Windows(tm) 2000 Professional&&&&* Microsoft(r) Visual C++ 6.0&&&&* Microsoft(r) Developer Network for Visual Studio.NET 2003&&&&* Visual Assist X 10.1.1301.0&&&&  2.运行环境&&&&* Intel(r) Pentium(r) 2及以上处理器,32M以上内存,4G以上硬盘&&&&* Microsoft(r) Windows(tm) 9X/NT操作系统&&&&* 800*600或以上的屏幕分辨率&&&& 二、软件结构&&&&  考虑到整个的下棋过程(无论对方是电脑抑或其他网络玩家)可以分为:己方落子、等待对方落子、对方落子、设置己方棋盘数据这一系列过程,因此一人游戏类、二人游戏类和棋盘类之间的关系参考了AbstractFactory(抽象工厂)模式,以实现对两个不同模块进行一般化的控制。&&&&  软件的总体架构如图1所示。&&&& (一)棋盘类&&&&  整个架构的核心部分,类名为CTable。封装了棋盘的各种可能用到的功能,如保存棋盘数据、初始化、判断胜负等。用户操作主界面,主界面与CTable进行交互来完成对游戏的操作。&&&& (二)游戏模式类&&&&  用来管理人机对弈/网络对弈两种游戏模式,类名为CGam1&&
【】【】【】【】【】
相关游戏五子棋论文C++:
www.myeducs.cn All Rights Reserved 版权所有?网学网 提供大量原创论文 参考论文 论文资料 源代码 管理及投稿 E_mail:
郑重声明: 本网站论文均来自互联网,由本站会员上传或下载,仅供个人交流、学习、参考之用,版权归原作者所有
请下载完后24小时之内删除,任何人不得大幅抄录、在期刊上发表或作为商业之用。如涉及版权纠纷,本网站不承担任何法律及连带责任。

我要回帖

更多关于 js五子棋获胜方法 的文章

 

随机推荐