newfivepro.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 6.6MB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 12
    下载次数
  • 2007-03-21 08:03
    上传日期
功能强大的五子棋游戏软件,实现人人对战,人机对战,机机对战,名:aa.密码:
newfivepro.rar
  • newfivepro
  • Release
  • ms5.bsc
    4.3MB
  • StdAfx.obj
    774B
  • ms5.exe
    2MB
  • Zhuce.obj
    27.6KB
  • WBButton.sbr
    0B
  • ms5.pch
    6.8MB
  • ms5Dlg.sbr
    0B
  • ms5.obj
    9.8KB
  • CVSCDlg.sbr
    0B
  • FiveStoneProcess.obj
    150.6KB
  • ms5.sbr
    0B
  • MemDC.sbr
    0B
  • Denglu.sbr
    0B
  • CVSCDlg.obj
    21.4KB
  • vc60.idb
    65KB
  • ms5Dlg.obj
    102.2KB
  • Denglu.obj
    30.3KB
  • MemDC.obj
    10.6KB
  • StdAfx.sbr
    1.5MB
  • FiveStoneProcess.sbr
    0B
  • AutoFont.obj
    24.6KB
  • GradientProgressCtrl.obj
    14KB
  • msado15.tlh
    88.6KB
  • msado15.tli
    74.9KB
  • ms5.res
    1.7MB
  • Zhuce.sbr
    0B
  • GradientProgressCtrl.sbr
    0B
  • WBButton.obj
    24.6KB
  • AutoFont.sbr
    0B
  • res
  • ms5.ico
    766B
  • 3.bmp
    93.1KB
  • ms5.psd
    1.2MB
  • gray1.bmp
    1.2KB
  • Hand.cur
    326B
  • lose.wav
    18.6KB
  • bk.bmp
    130.1KB
  • score.m
    86KB
  • ms5.rc2
    395B
  • 1.bmp
    91.6KB
  • 4.bmp
    91.8KB
  • win.wav
    22.2KB
  • newgame.wav
    30.4KB
  • whitestone.bmp
    1.2KB
  • 2.bmp
    89.1KB
  • 5.bmp
    92.9KB
  • put.wav
    926B
  • ms5.bmp
    905.8KB
  • darkstone.bmp
    1.2KB
  • gray2.bmp
    1.2KB
  • regret.wav
    9.8KB
  • ButtonsWin3000.bmp
    25.4KB
  • ms5.h
    1.3KB
  • ms5.ncb
    841KB
  • CVSCDlg.h
    1.6KB
  • FiveStoneProcess.h
    9.4KB
  • MemDC.h
    681B
  • ms5.plg
    242B
  • WBButton.h
    4.5KB
  • ms5Dlg.h
    3.9KB
  • score.m
    86KB
  • ms5.cpp
    2.1KB
  • GradientProgressCtrl.cpp
    4.2KB
  • MemDC.cpp
    1.2KB
  • ms5.dsp
    6.4KB
  • ms5.dsw
    529B
  • AutoFont.h
    2.3KB
  • Zhuce.h
    1.2KB
  • Denglu.cpp
    2.8KB
  • ms5.aps
    1.7MB
  • Denglu.h
    1.2KB
  • ms5.clw
    4.6KB
  • StdAfx.cpp
    205B
  • resource.h
    4.7KB
  • CVSCDlg.cpp
    3.6KB
  • ms5Dlg.cpp
    56.7KB
  • AutoFont.cpp
    7.4KB
  • msado15.tlh
    88.5KB
  • msado15.tli
    74.8KB
  • FiveStoneProcess.cpp
    210.8KB
  • Zhuce.cpp
    2.4KB
  • StdAfx.h
    1.1KB
  • GradientProgressCtrl.h
    2.1KB
  • ms5.opt
    58.5KB
  • wzq.mdb
    148KB
  • WBButton.cpp
    9.4KB
  • ms5.rc
    13.9KB
  • www.pudn.com.txt
    218B
内容介绍
// FiveStoneProcess.cpp: implementation of the FiveStoneProcess class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "ms5.h" #include "FiveStoneProcess.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif BOOL debugqian = false;//是否察看牵制子匹配的详细内容 ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// FiveStoneProcess::FiveStoneProcess() { is_low = false; level = 0; notshowinfo = false; thinkpos = 0; } FiveStoneProcess::~FiveStoneProcess() { } BOOL FiveStoneProcess::has_five(int color) { //color = 1表示黑子,color = 2表示白子 //判断是否出现了5个子想连的情况 int i,j; for(i=1;i<=15;i++) for(j=1;j<=15;j++) { if (points[i][j]==color) { points[i][j] = 0; if (is_five(color,i,j)) { points[i][j] = color; return true; } points[i][j] = color; } } return false; } BOOL FiveStoneProcess::is_alive(int x, int y,int color) { if (points[x][y]!=0) return false;//已经有子了 int model[][9]={//此数组表示各种模式,包括此子前四个和后四个子的排列 //-1表示任意,1表示相同颜色,0表示空,2表示(x,y)所在位置 {-1,-1,0,1,2,1,1,0,-1},//_1*11_ {-1,-1,-1,0,2,1,1,1,0},//_*111_ }; int model_num = 2; int point_num = 9; BOOL flag; for (int i=0;i<4;i++) { //四个方向遍历 for (int j=0;j<model_num;j++)//model_num种模式遍历,每种模式遍历两次,正反各一次 { flag = true; for(int k=0;k<point_num;k++)//point_num个子遍历,正遍历 { if (model[j][k]==0) { if (getcolor(x,i,k-4,y)!=0) { //不匹配此模式 flag = false; break; } } else if (model[j][k]==1) { if (getcolor(x,i,k-4,y)!=color) { //不匹配此模式 flag = false; break; } } } if (flag) return true;//匹配上某种模式 flag = true; for(k=0;k<point_num;k++)//point_num个子遍历,反遍历 { if (model[j][k]==0) { if (getcolor(x,i,4-k,y)!=0) { //不匹配此模式 flag = false; break; } } else if (model[j][k]==1) { if (getcolor(x,i,4-k,y)!=color) { //不匹配此模式 flag = false; break; } } } if (flag) return true;//匹配上某种模式 } } return false; } BOOL FiveStoneProcess::is_twoqianmodel(int color,int x, int y,POINT tempresult[],int n) { //此处判断是否有两个牵制子连在一起,主要为了防止对方造势 if (points[x][y]!=0) return false;//已经有子了 int model[][9]={//此数组表示各种模式,包括此子前四个和后四个子的排列 //-1表示任意,1表示相同颜色,0表示空,2表示(x,y)所在位置 //3表示不是牵制子的相同颜色子 /* {-1,0,0,1,2,0,0,-1,-1},//__1*__ 0 {-1,-1,0,1,2,0,0,0,-1},//_1*___ 1 {0,0,1,0,2,0,-1,-1,-1},//__1_*_ 2 {-1,-1,1,0,2,0,0,0,-1},//1_*___ 3 */ {-1,0,0,3,2,0,0,-1,-1},//__3*__ 4 {-1,-1,0,3,2,0,0,0,-1},//_3*___ 5 {0,0,0,3,2,0,-1,-1,-1},//___3*_ 6 {0,0,3,0,2,0,-1,-1,-1},//__3_*_ 7 {-1,0,3,0,2,0,0,-1,-1},//_3_*__ 8 {-1,-1,3,0,2,0,0,0,-1},//3_*___ 9 }; int model_num = 6; int point_num = 9; BOOL flag; for (int i=0;i<4;i++) { //四个方向遍历 for (int j=0;j<model_num;j++)//model_num种模式遍历,每种模式遍历两次,正反各一次 { flag = true; for(int k=0;k<point_num;k++)//point_num个子遍历,正遍历 { if (model[j][k]==0) { if (getcolor(color,x,y,i,k-4,tempresult,n)!=0) { //不匹配此模式 flag = false; break; } } else if (model[j][k]==1) { if (getcolor(color,x,y,i,k-4,tempresult,n)!=1) { //不匹配此模式 flag = false; break; } } else if (model[j][k]==3) { if (getcolor(color,x,y,i,k-4,tempresult,n)!=3) { //不匹配此模式 flag = false; break; } } } if (flag) return true;//匹配上某种模式 flag = true; for(k=0;k<point_num;k++)//point_num个子遍历,反遍历 { if (model[j][k]==0) { if (getcolor(color,x,y,i,4-k,tempresult,n)!=0) { //不匹配此模式 flag = false; break; } } else if (model[j][k]==1) { if (getcolor(color,x,y,i,4-k,tempresult,n)!=1) { //不匹配此模式 flag = false; break; } } else if (model[j][k]==3) { if (getcolor(color,x,y,i,4-k,tempresult,n)!=3) { //不匹配此模式 flag = false; break; } } } if (flag) return true;//匹配上某种模式 } } return false; } BOOL FiveStoneProcess::is_alive_old(int x, int y,int color) { //这是一个根据定义直接做的老方法,比较慢,被取代,待仍然保留 //判断一个子是不是一个活子 //即自己下一子后,对方不论走什么子,都会存在5子相连 if (points[x][y]!=0) return false;//已经有子了,不可能是活子 int i; points[x][y] = color;//假设走了此子 int anticolor;//对方的color if (color==1) anticolor = 2; else anticolor = 1; BOOL flag = true;//表明是否对方每次走子时,自己都可以连成5子 POINT roundpoints[8];//一个子周围8个方向上离它最近的空子位置 getroundpoints(x,y,color,roundpoints);//此处,为了避免全盘搜索,采用了近似手法,只计算它周围的8个空子即可 for(i=0;i<8;i++) { if (roundpoints[i].x!=0)//即是有效的位置 { points[roundpoints[i].x][roundpoints[i].y] = anticolor;//走对方的子 if (!can_five(color)) { //如果存在一种情况不能连成5子,那么失败 points[roundpoints[i].x][roundpoints[i].y] = 0; flag = false; break; } points[roundpoints[i].x][roundpoints[i].y] = 0; } } if (flag) { points[x][y] = 0; return true;//必然是活子 } points[x][y] = 0; return false; } BOOL FiveStoneProcess::can_five(int color,int &x,int &y) { //得到能够得到5连子的点 POINT closepoints[225]; int count = 0; getclose(color,count,closepoints); for(int i=0;i<count;i++) { if (closepoints[i].x!=0) { if (is_five(color,closepoints[i].x,closepoints[i].y)) { x = closepoints[i].x; y = closepoints[i].y; return true;//存在一个可以得到5子 } } } return false; } BOOL FiveStoneProcess::can_five(int color) { POINT closepoints[225]; int count = 0; getclose(color,count,closepoints); for(int i=0;i<count;i++) { if (closepoints[i].x!=0) { if (is_five(color,closepoints[i].x,closepoints[i].y)) { return true;//存在一个可以得到5子 } } } return false; } BOOL FiveStoneProcess::has_alive(int color,int &counter,POINT tempresult[]) { //判断一个棋盘有没有活子 //counter为候选结果的计数,tempresult为候选结果集 counter = 0; //if (can_five(color)) return false;//已经存在可以连5的子,不必再判断一阶活子 BOOL flag = false; //返回值 POINT closepoints[225]; int count = 0; getclose(color,count,closepoints); for(int i=0;i<count;i++) { if (closepoints[i].x!=0) { if (is_alive(closepoints[i].x,closepoints[i].y,color)) { tempresult[counter].x = closepoints[i].x; tempresult[counter].y = closepoints[i].y; counter++; flag = true; } } } return flag; } BOOL FiveStoneProcess::has_chongtwo(int color,int &counter,POINT tempresult[]) { //判断一个棋盘有没有冲二子 //counter为候选结果的计数,tempresult为候选结果集 counter = 0; BOOL flag = false; //返回值 POINT closepoints[225]; int count = 0; getclose(color,count,closepoints); for(int i=0;i<count;i++) { if (clo
评论
    相关推荐