




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
愣愣心欣 一级 | 我的知道 | 消息(1) | 空间 | 应用 | 退出 我的知道 我的提问我的回答为我推荐的提问知识掌门人应用 礼物投票分享HOHO照片PK更多应用 新闻 网页 贴吧 知道 MP3 图片 视频 百科 文库窗体顶端帮助|设置窗体底端窗体顶端窗体底端百度知道 电脑/网络 程序设计 C/C+急求一个五子棋C程序悬赏分:5|解决时间:2010-12-27 20:28|提问者:acoylee问题补充:是基于Win32控制平台的C五子棋程序用到类(class)有棋盘有悔棋功能能在visual c+ 6.0 上运行急求。最佳答案以下代码经测试能在vc+6.0运行以下是代码的开始-#include#include using namespace std;const char outstr114=,;int com1515,luozi1515;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(luozixy=0) for(m=-1;m=1;m+) for(n=-1;n=1;n+) if(m!=0 | n!=0) for(i=1;i=0 & x+i*m=0 & y+i*n=-4;i-) if( x+i*m=0 & x+i*m=0 & y+i*n=14 & luozix+i*my+i*n=1 ) lianzi1+; else if(luozix+i*my+i*n=0) life+; break; else break; if(lianzi1=1) comxy+=1; else if(lianzi1=2) if(life=1) comxy+=5; else if(life=2) comxy+=10; else if(lianzi1=3) if(life=1) comxy+=20; else if(life=2) comxy+=100; else if(lianzi1=4) comxy+=500; life=0; for(i=1;i=0 & x+i*m=0 & y+i*n=-4;i-) if( x+i*m=0 & x+i*m=0 & y+i*n=14 & luozix+i*my+i*n=2 ) lianzi2+; else if(luozix+i*my+i*n=0) life+; break; else break; if(lianzi2=1) comxy+=2; else if(lianzi2=2) if(life=1) comxy+=8; else if(life=2) comxy+=30; else if(lianzi2=3) if(life=1) comxy+=50; else if(life=2) comxy+=200; else if(lianzi2=4) comxy+=1000; lianzi1=0; lianzi2=0; life=0; void computer(int a1515) /这是电脑落子的函数 int i,j,max=0; jushi(); for(i=0;i=14;i+) for(j=0;jmax) max=comij; c=i; d=j; acd=10; luozicd=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=0 & x+i*m=0 & y+i*n=-4;i-) if( x+i*m=0 & x+i*m=0 & y+i*n=4) return 1; else lianzi=0; return 0; int main() /主函数 ,主要进行人落子工作 system (color 2f); system (mode con cols=50 lines=25); system (title 欢迎使用!); int a1515=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 4endl; for(i=0;i=14;i+) if(i!=0) coutendl; couti%10; for(j=0;j=14;j+) coutoutstraij; coutendl; coutxy) if(luozixy=0 & x=0 & x=0 & y=14) axy=9; luozixy=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 4endl; for(i=0;i=14;i+) if(i!=0) coutendl; couti%10; for(j=0;j=14;j+) coutoutstraij; coutendl; cout您的棋子落在x行 y列endl; cout电脑的棋子落在c行 d列endl; cout请输入您要下的棋子; else cout 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4endl; for(i=0;i=14;i+) if(i!=0) coutendl; couti%10; for(j=0;j=14;j+) coutoutstraij; coutendl; cout电脑的棋子落在c行 d列endl; cout电脑获胜!endl; break; else system (cls); /清屏 cout 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4endl; for(i=0;i=14;i+) if(i!=0) coutendl; couti%10; for(j=0;j=14;j+) coutoutstraij; coutendl; cout您获胜啦!endl; break; else cout输入错误,请重新输入:endl; system (title 谢谢使用!); system (color 03); cout谢谢使用nul); return 0;-希望对你有用!分享给你的朋友吧: 人人网 新浪微博 开心网 MSN QQ空间10回答时间:2010-12-13 14:58|我来评论向TA求助回答者: crpp13 来自团队 编程爱好者 | 三级采纳率:16%擅长领域: C/C+ VC+ 操作系统/系统故障参加的活动: 暂时没有参加的活动提问者对于答案的评价:灰常感谢你相关内容 2008-10-11一个五子棋C程序有一处错,请达人指教下 2011-1-2求一个五子棋的C语言源程序3 2010-12-21用C写一个五子棋程序 2010-1-17高分求一个C语言的五子棋程序7 2010-8-23用c编写了一个五子棋程序,同学用JAVA编写了一个界面,怎么把这两个连一.更多关于vc+6.0 五子棋的问题等待您来回答 0回答10C:Program FilesMicrosoft Visual StudioCommonMSDev98AddIns 在. 0回答三极管E级和C极怎么确定。就是动嘴巴的原理不清楚,可以解释下吗。 0回答能给我发个绿版的VC6.0吗? QQ:835285738 0回答腰疼得直不起来,隐约觉得骨头在响,到广州哪里挂骨科好? 1回答出售2012的陈文灯的复习指南。还有胡敏的英语阅读两百篇习题。还有新. 1回答10求线性代数第五版 同济大学数学系 高等教育出版社 习题答案 电子. 2回答5怎么样自己制作动漫人物图片 1回答上海有没有哪个软件公司是做VC开发的(C/C+)?更多等待您来回答的问题其他回答共1条#include #include #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 0x4b00 /*光标左键值*/#define RIGHT 0x4d00 /*光标右键值*/#define DOWN 0x5000 /*光标下键值*/#define UP 0x4800 /*光标上键值*/#define ESC 0x011b /*按键Esc的值 */#define ENTER 0x1c0d /*按键Enter的值 */#define F2 0x3c00 /*按键F2的值*/int MinX, MinY, MaxX, MaxY; /*定义棋盘横纵坐标变量*/int CurRow, CurCol, CurX, CurY; /*定义行列坐标变量*/int CurFocus, Radius; /*定义棋手标志变量、棋子半径变量*/int MapROWCOL; /*定义棋盘数组*/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, errorcode; initgraph(&gdriver, &gmode, ); /*初始化图形系统*/ errorcode = graphresult(); if (errorcode != grOk) /*错误处理*/ printf(Graphics error: %sn, grapherrormsg(errorcode); printf(Press any key to halt:); getch(); exit(1); /*出错退出*/ void InitData() /*初始化数据*/ int x, y; 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, y; 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 = Radius; if (flag=SET | flag=SHOW) /*画棋子*/ if (CurFocus = 1)color = 1; /*棋手1的棋子颜色*/ elsecolor = 15; /*棋手2的棋子颜色*/ elsecolor = 7; /*背景颜色*/ if (flag = SET) MapCurRowCurCol = color; /*置位数组值为当前颜色*/ CheckWin(CurRow, CurCol); /*判断输赢*/ else r -= 2; /*显示棋子时棋子半径值*/ 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; if (!x1) x1 = MinX-MinX/2; x2 = MaxX+MinX/2; y1 = y2 = MinY+40; /*根据棋手标志设定棋子颜色*/ if (focus = 1) /*棋手标志值为1时 显示棋手1的颜色*/ color1 = 1; color2 = 3; else /*否则显示棋手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 = focus;void GamePlay() /*开始游戏*/ int key, Exit = FALSE; int i, j; ShowChess(SHOW); /*初始化棋手要下的棋子的位置*/ SetChess(CurFocus); /*显示正在下棋的棋手的棋子颜色*/ while (!Exit) /*循环扫描键盘输入*/ key = bioskey(0); switch (key) /*判断键盘输入*/ case ESC: /*按Esc键退出游戏*/ Exit = TRUE; break; case ENTER: /*按Enter键确认棋子*/ /*若此位置没有棋子则在此位置落子*/ /*并判断胜负,胜则显示胜者信息,负则提示该对手下棋*/ if (!MapCurRowCurCol) ShowChess(SET); /*在此处落子*/ SetChess(CurFocus%2 + 1); /*提示对手下棋*/ ShowChess(SHOW); /*显示对手棋子的颜色*/ break; case F2: /*按F2,重新开始一局游戏*/ InitData(); /*重新初始化数据*/ for (i=0; iROW; i+) /*清空棋盘*/ for (j=0; jCOL; j+) Mapij = 0; DrawChessboard(); /*重新画棋盘*/ ShowChess(SHOW); /*在初始位置显示棋子*/ SetChess(CurFocus); /*显示下棋一方的颜色提示信息*/ case DOWN: /*按方向键移动棋子*/ case UP: case LEFT: case RIGHT: MoveChess(key); /*按照键盘输入移动棋子*/ break; void MoveChess(int dir) /*移动棋子*/ ShowChess(HIDE); /*隐藏棋子*/ if (MapCurRowCurCol)Refresh(); /*此位置有棋子时更新*/ switch (dir) case LEFT: /*向左移动*/ CurCol-; /*数组横向减一*/ CurX -= SIZE; /*横坐标减一格*/ if (CurCol 0) /*若移出棋盘从相反方向进入*/ CurCol += COL; CurX += COL * SIZE; break; case RIGHT: /*向右移动*/ CurCol+; CurX += SIZE; if (CurCol = COL) CurCol -= COL; CurX -= COL * SIZE; break; case DOWN: /*向下移动*/ CurRow+; CurY += SIZE; if (CurRow = ROW) CurRow -= ROW; CurY -= ROW * SIZE; break; case UP: /*向上移动*/ CurRow-; CurY -= SIZE; if (CurRow = 5)winner = CurFocus; /*五子相连则胜*/ if (!winner) /*统计竖直方向相连棋子数目*/ count = GetNum(row,col,UP,color)+GetNum(row,col,DOWN,color)+1; if (count = 5)winner = CurFocus; /*五子相连则胜*/ if (!winner) /*统计左对角线方向相连棋子数目*/ count = GetNum(row,col,LU,color)+GetNum(row,col,RD,color)+1; if (count = 5)winner = CurFocus; /*五子相连则胜*/ if (!winner) /*统计右对角线方向相连棋子数目*/ count = GetNum(row,col,LD,color)+GetNum(row,col,RU,color)+1; if (count = 5)winner = CurFocus; /*五子相连则胜*/ if (winner) /*若当前棋手获胜,则输出相关信息*/ x = getmaxx()/2; /*在棋盘上面输出文本信息*/ y = MinY-MinY/2; setcolor(12); settextstyle(0, 0, 2); if (CurFocus = 1) /*判断哪方获胜并输出其名称*/ strcpy(MsgWin, Player 1); else strcpy(MsgWin, Player 2); strcat(MsgWin, Win); outtextxy(x, y, MsgWin); /*显示文本“Win”*/ settextstyle(0, 0, 0); getch(); exit(0); /*向8个方向判断相连棋子数目,返回数目值*/int GetNum(int row, int col, int dir, int value) int result = 0; int i, j; switch (dir) case LEFT: /*向左判断*/ for (i=col-1; i=0; i-) /*找出最后相连棋子的位置*/ if (Maprowi != value) break; result = col - 1 - i; /*计算相连棋子的数目*/ break; case RIGHT: /*向右判断*/ for (i=col+1; iCOL; i+) /*找出最后相连棋子的位置*/ if (Maprowi != value) break; result = i - 1 - col; /*计算相连棋子的数目*/ break; case DOWN: /*向下判断*/ for (i=row+1; i=0; i-) /*找出最后相连棋子的位置*/ if (Mapicol != value) break; result = row - 1 - i; /*计算相连棋子的数目*/ break; case LU: /*左上判断*/ /*找出最后相连棋子的位置*/ for (i=row-1, j=col-1; i=0 & j=0; i-, j-) if (Mapij != value) break; result = row - 1 - i; /*计算相连棋子的数目*/ break; case RD: /*右下判断*/ /*找出最后相连棋子的位置*/ for (i=row+1, j=col+1; iROW & j=0 & jCOL; i-, j+) if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 营养食品研发与生产补充协议
- 协商处理孩子协议书
- 建筑施工监理补充服务协议
- 社区卫生服务中心公共卫生安全防控合作协议
- 2025合作经销合同模板
- 工程法规操作指南试题及答案
- 协商撤销婚姻协议书
- 喝酒致死赔偿协议书
- 单位辞退司机协议书
- 员工宿舍转租协议书
- 2025年入团考试各科目试题及答案分析
- 电网工程设备材料信息参考价2025年第一季度
- 成都设计咨询集团有限公司2025年社会公开招聘(19人)笔试参考题库附带答案详解
- 2025年高三高考冲刺主题教育班会:《高三考前心理调适指南:减压赋能 轻松备考》-2024-2025学年高中主题班会课件
- 学校设计施工及运营一体化(EPC+O)招标文件
- 2024年安徽省初中学业水平考试生物试题含答案
- 2024年浙江省中考英语试题卷(含答案解析)
- MOOC 理解马克思-南京大学 中国大学慕课答案
- 突发安全生产事故应急救援预案(现场处理方案)
- 直流系统蓄电池充放电试验报告
- 送教上门学生教案(生活适应和实用语数共17篇)
评论
0/150
提交评论