基于C++五子棋游戏
- 格式:pdf
- 大小:1.02 MB
- 文档页数:36
c 课程设计报告五子棋C++面向对象课程设计报告院(系):专业: 学生姓名: ,,班级:,,,学号:题目: 五子连珠棋 ,,,,,,,,,起迄日期: 2010-12-20,,,, ,,,,, 设计地点:指导教师:完成日期: 2010 年 12 月31 日课程设计报告内容一、需求分析1( 选做此课题目的五子棋游戏是一历史悠久,对抗性强,技巧性高的棋类游戏。
而且我对五子棋有着独特的爱好,希望自己也可以编写出一款可以实现人机对战的五子棋游戏。
把自己的思想付给电脑,让自己有些成就感,给自己继续努力的动力。
借此次课程设计的机会,把想法变成现实。
而且五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
它是中西文化的交流点,是古今哲理的结晶。
所以此次c++课程设计选择五子棋这个题目。
2( 程序所实现的功能通过给电脑赋予人工智能,利用电脑运算速度快的特点,结合五子棋的游戏规则,给电脑设定固定的扫描方式,设定权值,使电脑能够选择最合适的落子点,然后调用加载已做好的棋盘棋子图像,最终实现简单的人机对弈。
3(该游戏为普通玩家使用,只要连成五子即获胜,没有禁手、RIF(国际连珠连盟)正式规则、“Yamaguchi”、”Tarannikov”、“Taraguchi”等规则。
二、设计内容1( 根据所选题目,给出模块图主界面开始游戏重新开始游戏游戏结束初始化棋盘初始化棋盘结束界面落子判断输赢2( 画出主程序及其主要模块的流程图游戏开始初始化棋盘加载棋盘图片1点鼠标左键落子加载棋子图片到棋盘扫描棋盘,根据预设权值,选择最佳地点落子否五子连珠,加载棋子图片到棋盘是否五子连转1 珠,是用红色显示游戏结束3( 编写程序代码加载位图(棋盘和棋子):m_board->m_hObject = (HBITMAP)::LoadImage (NULL,"checkerboard.bmp",IMAGE_BITMAP,320,320,LR_LOADFROMFILE); m_white->m_hObject = (HBITMAP)::LoadImage(NULL,"bai.bmp",IMAGE_BITMAP,20,20,LR_LOADFROMFILE);m_black->m_hObject = (HBITMAP)::LoadImage(NULL,"hei.bmp",IMAGE_BITMAP,20,20,LR_LOADFROMFILE);m_temp->m_hObject = (HBITMAP)::LoadImage(NULL,"mask1.bmp",IMAGE_BITMAP,20,20,LR_LOADFROMFILE);m_red->m_hObject=(HBITMAP)::LoadImage(NULL,"dred.bmp",IMAGE_BITMAP,20,20,LR_LOADFROMFILE); 响应左键:LButtonDown(UINT nFlags, CPoint point) { int m ,n;CDC thmem1 ;CClientDC dc(this);thmem1.CreateCompatibleDC(&dc);int curx = point.y;int cury = point.x;m =int((curx-5)/20);n = int((cury-15)/20);}没有五子连珠时简单显示棋子:显示白色棋子: if(board[i][j]==0){ thmem2.SelectObject (m_temp);dc.BitBlt(j*20+15,i*20+5,20,20,&thmem2,0,0,MERGEPAINT); thmem2.SelectObject (m_black);dc.BitBlt (j*20+15,i*20+5,20,20,&thmem2,0,0,SRCAND);m_byColour = white ;}显示黑色棋子: if(board[i][j] == 1){ thmem2.SelectObject (m_temp);dc.BitBlt(j*20+15,i*20+5,20,20,&thmem2,0,0,MERGEPAINT); thmem2.SelectObject (m_white);dc.BitBlt (j*20+15,i*20+5,20,20,&thmem2,0,0,SRCAND);m_byColour = black;}五子连珠时红色显示棋子:人赢时: if(ptable[ii][jj][j] == true){ thmem2.SelectObject(m_temp);dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,MERGEPAINT); thmem2.SelectObject(m_red);dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,SRCAND); } // MessageBox("你赢了");计算机赢时: if(ctable[ii][jj][j] == true){ thmem2.SelectObject (m_temp);dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,MERGEPAINT); thmem2.SelectObject (m_red);dc.BitBlt(jj*20+15,ii*20+5,20,20,&thmem2,0,0,SRCAND);}电脑扫描棋盘: for(i = 0 ; i<15; i++)for(j= 0 ;j <15 ;j++)board[i][j] = 2; // 初始化棋盘数组for(i = 0 ; i <15 ; i++) //对列进行隔行扫描,for(j=0 ; j <11 ; j++){for( k = 0 ; k <5 ;k++){ptable[j+k][i][count] = true;ctable[j+k][i][count] = true;} count ++;}for(i = 0 ; i <15 ; i++) //对行进行隔行扫描for(j=0 ; j <11 ; j++){for( k = 0 ; k <5 ;k++){ptable[i][j+k][count] = true;ctable[i][j+k][count] = true;}count ++;}for(i = 0 ; i <11; i++) //对交叉的情况,东南,西北走向,进行扫描for(j=0 ; j <11 ; 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 <11 ; i++) //对交叉的情况,东北,西南走向,进行扫描for(j=14 ; j >= 4 ; j--){for( k = 0 ; k <5 ;k++){ptable[j-k][i+k][count] = true;ctable[j-k][i+k][count] = true;}count ++;}Start:void CMyDlg::Onstart() {MessageBox("请落子");m_byColour = black;}Restart:再次初始化棋盘,函数类似于扫描{for(i = 0 ; i<15; i++)for(j= 0 ;j <15 ;j++)board[i][j] = 2;for(i = 0 ; i <15 ; i++)for(j=0 ; j <11 ; j++){for( k = 0 ; k <5 ;k++){ptable[j+k][i][count] = true; ctable[j+k][i][count] = true; }count ++;}for(i = 0 ; i <15 ; i++)for(j=0 ; j <11 ; j++){for( k = 0 ; k <5 ;k++){ptable[i][j+k][count] = true;ctable[i][j+k][count] = true;}count ++;}for(i = 0 ; i <11; i++)for(j=0 ; j <11 ; 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 <11 ; i++)for(j=14 ; j >= 4 ; j--){ for( k = 0 ; k <5 ;k++){ ptable[j-k][i+k][count] = true;ctable[j-k][i+k][count] = true; }count ++; }三、调试分析1( 实际完成的情况说明能够判断胜负,没下一子,都要进行胜负判断,赋予电脑人工智能,玩家通过点击鼠标左键落子,电脑会根据预设的方式扫描,计算每一点的权值,从而找到最佳落子点,实现人机对弈。
哈尔滨远东理工学院C语言课程设计论文题目:五子棋对战游戏姓名:分院:机器人科学与技术学院专业:电子信息工程学号:指导教师:二0一四年九月五日五子棋(C语言)摘要五子棋是一种两人对弈的纯策略型棋类游戏,是起源于中国古代的传统黑白棋种之一。
早在“尧造围棋”之前,可能民间就已有五子棋游戏。
发展于日本,流行于欧美。
五子连珠棋五子棋容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“ 短、平、快” ,又有古典哲学的高深学问“ 阴阳易理” ;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“ 场” 的概念,亦有“ 点” 的连接。
它是中西文化的交流点,是古今哲理的结晶。
a , . \" \", . , .A , , , ; , , , 's a ., , , 's a . \", , \", a \" \"; , , a ; 's , ; \"\", a \"\" . , .目录1. 前言......................................................................................... 错误!未指定书签。
2. 功能描述................................................................................. 错误!未指定书签。
3. 总体设计................................................................................. 错误!未指定书签。
VC五子棋游戏论文前言1.五子棋起源于中国,相传早在尧造围棋之前,五子棋游戏在民间已经相当盛行了。
唐时由高丽使者带到高丽,后来辗转反复,流传到日本。
起先是在日本皇宫内盛行的游戏,只限于王室成员、贵族阶层之间的对弈,后来据说被出入皇宫的挑夫看见,由此便流行民间。
2.经百余年的流行,到18世纪末期已成为与围棋同级别的棋种。
但由于当时先手无禁手,许多棋手的真实实力无法体现。
19世纪初叶,当时被公认是五子棋界第一人的黑岩泪香,即后来的高山互乐第一世名人,为了解决这一弊端,召集了当时的南北高手进行商议,确定了不可走“三、三”的规定,不久即举办了新闻棋战,也就是老名人战(相对于20世纪60年代举办的名人赛而言)。
期间,还对五子棋进行了公开征名,最后通过投票多少确定为“连珠”两字。
没过多长时间,对规则作了修改,只规定黑棋不可走“三、三”。
几年后由于比赛中黑棋非自愿走“三、三”棋型的增加又作了修订,规定黑棋出现“三、三”棋型即判负,不论自愿与否。
由此五子棋向前迈出了一大步。
数年后,高山互乐在与大家的协商下,又相继推出了黑不可走“四、四”、“长连”、“四、三、三”等禁手的规定,进一步严格了规则。
没过多久,有人出版了最早的浦月、花月先手必胜法,顿时使五子棋界为之震惊。
通过几代棋手的努力,先手必胜法逐步完善起来了。
现在你知道五子棋不但是由我们的老祖先所发明,而且还曾远征到欧洲!身为发明者的后代子孙,我们怎么能不会玩这项「国粹」哩? 3.五子棋亦称连珠、连五子,它是起源于中国古代的黑白传统棋种之一。
早在尧造围棋之前,民间就已有五子棋游戏。
据《增山海经》中记载:休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。
《辞海》中亦言:五子棋中棋类游戏,棋具与围棋相同,两人对局,轮流下子,先将五子连成一行者为胜。
4.现代五子棋(连珠)的基本下法是:先由执黑棋一方将一枚棋子落在天元点上,为了尊重对方和出于礼貌,持白棋的一方通常将盘面的第二着棋布在天元下方周围。
C++课程设计--五子棋游戏课程设计说明书五子棋游戏The Game of Gobang学院名称:机械工程学院专业班级:测控10xx 学生姓名:江x 指导教师姓名:张xx 指导教师职称:副教授2012年6月目录第一章需求分析 (7)1.1系统概述 (7)1.1.1概述: (7)1.2系统运行环境 (7)1.2.1运行环境 (7)1.3功能需求描述 (7)1.3.1功能需求 (7)第二章总体设计 (8)2.1开发与设计的总体思想 (8)2.1.1总体设计思路 (8)2.1.2屏幕的组成 (9)2.1.3形状的组成 (9)2.1.4形状的统一 (10)第三章概要设计 (10)3.1系统流程图 (10)3.2 软件功能模块 (12)3.3 系统功能模块 (13)第四章详细设计 (13)4.1.界面的设计 (13)4.1.1总体界面的设计 (13)4.1.2界面棋子的设计 (13)4.2.显示界面的准备 (15)4.2.1在窗体类中添加存放黑白棋两维数组和背景棋盘、黑棋、白棋位图对象 (15)4.2.2 在窗体构造函数中初始化wb,装入棋盘、黑棋、白棋位图 (15)4.3. 显示棋盘和棋子代码 (15)4.4. 轮流下子代码 (16)4.5. 判断输赢 (19)4.5.1判断是否白棋胜代码 (19)4.5.2判断是否黑棋胜代码 (20)4.5.3判断是否平局代码 (21)4.6. 悔棋 (21)4.7. 重新开始 (22)4.8. 背景音乐 (23)4.9. 保存读取游戏文件 (23)4.9.1保存文件: (24)4.9.2读取文件: (25)第五章测试分析 (26)结论和心得体会 (27)致谢 (28)参考文献: (29)课程设计任务书一、课程设计目的课程设计是工科各专业的主要实践性教学环节之一,是围绕一门主要基础课或专业课,运用所学课程的知识,结合实际应用设计而进行的一次综合分析设计能力的训练。
课程设计旨在培养学生在本课程范围内,初步掌握解决实际应用问题时所应具有的查阅资料、综合运用所学知识的能力,为课程设计及今后从事专业工作打下基础。
C语言教程:简易五子棋程序收集于网络/* 纯用字符和数组编的五子棋,棋盘也是用字符画的。
编了1上午了,主要是算法跟按键比较烦,发现有bug-- 按键速度过快会产生延时显示,可能是算法不好。
操作:玩家1:a,s,w,d(方向)空格(落子)玩家2:上、下、左、右回车(落子)ESC:退出编译测试环境:TC3.0*/#include <stdio.h>#include <stdlib.h>#include <bios.h>#include <conio.h>#define CRRU 0xbf /*右上角点197*/#define CRLU 0xda /*左上角点218*/#define CRLD 0xc0 /*左下角点192*/#define CRRD 0xd9 /*右下角点217*/#define CRL 0xc3 /*左边195*/#define CRR 0xb4 /*右边190*/#define CRU 0xc2 /*上边194*/#define CRD 0xc1 /*下边193*/#define CR 0xc5 /*十字交叉点197*/#define size 19char a[size][size];int i,j; //跟踪光标在数组中对应的位置int x=10;int y=3; //光标所在位的坐标int side=1; //持子方1为玩家1,2为玩家2;int CB=1; int CW=2; // 棋子图形void inita() ;void inits();void pressco(int );void pressct(int );int judge(int);int main(){inita();inits();getch();while(1){int press=bioskey(0);if(press==283)break;if(side==1){pressco(press);if(side==2)if(judge(1)==1) {gotoxy(1,1);printf("the play1 win");break;}}if(side==2){pressct(press);if(side==1)if(judge(2)==1){gotoxy(1,1);printf("the play2 win");break;}}}getch();return 0;}void inita() //数组初始化;{a[0][0]=CRLU;a[0][size-1]=CRRU;a[size-1][0]=CRLD;a[size-1][size-1]=CRRD;for(int i=1;i<size-1;i++){a[0][i]=CRU;a[size-1][i]=CRD;a[i][0]=CRL;a[i][size-1]=CRR;for(int j=1;j<size-1;j++)a[i][j]=CR;}return ;}void inits() //界面初始化{for(int i=0;i<size;i++){gotoxy(x,y+i);for(int j=0;j<size;j++)putch(a[i][j]);}gotoxy(x,y);i=0;j=0;return ;}void pressco(int m){switch(m){case 7777: //Aif(i>0) {i--;x--;gotoxy(x,y);} break;case 8051: //Sif(j<size-1){j++;y++;gotoxy(x,y);} break;case 4471: //wif(j>0) {j--;y--;gotoxy(x,y);} break;case 8292: //Dif(i<size-1){i++;x++;gotoxy(x,y);} break;case 14624: //空格if(a[i][j]!=CB&&a[i][j]!=CW){a[i][j]=CB;putch(CB);gotoxy(x,y);side=2;}break;default: break;}return ;}void pressct(int m){switch(m){case 19200: //左if(i>0) {i--;x--;gotoxy(x,y);} break;case 20480: //下if(j<size-1){j++;y++;gotoxy(x,y);} break;case 18432: //上if(j>0) {j--;y--;gotoxy(x,y);} break;case 19712: //右if(i<size-1){i++;x++;gotoxy(x,y);} break;case 7181: //回车if(a[i][j]!=CB&&a[i][j]!=CW){a[i][j]=CW;putch(CW);gotoxy(x,y);side=1;}break;default: break;}return ;}int judge(int pa) //判断是否胜利,胜利则返回1,否则返回0;// 其中i,j为当前的落子位;{int m;int sum=1;for(m=1;m<=i&&m<=j;m++) {if(a[i-m][j-m]!=pa) break;sum++;}for(m=1;m<(size-i)&&m<(size-j);m++) {if(a[i+m][j+m]!=pa) break;sum++;}if(sum>=5) return 1;else sum=1;for(m=1;m<=i;m++) {if(a[i-m][j]!=pa) break;sum++;}for(m=1;m<(size-j);m++) {if(a[i+m][j]!=pa) break;sum++;}if(sum>=5) return 1;else sum=1;for(m=1;m<=j;m++) {if(a[i][j-m]!=pa) break;sum++;}for(m=1;m<(size-j);m++) {if(a[i][j+m]!=pa) break;sum++;}if(sum>=5) return 1;else sum=1;for(m=1;m<=i&&m<(size-j);m++) {if(a[i-m][j+m]!=pa) break;sum++;}for(m=1;m<(size-i)&&m<=j;m++) {if(a[i+m][j-m]!=pa) break;sum++;}if(sum>=5) return 1;else return 0;本文章来自 21视频教程网C语言教程:简易五子棋程序_C语言程序设计教程原文链接:/html/96307.shtml。
附件1:课 程 设 计2010——2011学年 第2学期课程名称可视化编程(VC ) 学 院 计算机科学与技术学院专 业软件工程专业班 级 姓 名 指导教师目录1、摘要------------------------------------------------------------------------22、关键字---------------------------------------------------------------------23、正文------------------------------------------------------------------------2 (1)功能描述-----------------------------------------------------------2 必备功能------------------------------------------------------2绚丽功能------------------------------------------------------3 (2)操作实现----------------------------------------------------------4 (3)详细剖析----------------------------------------------------------6 (4)所遇问题-----------------------------------------------------------11 (5)未解决问题--------------------------------------------------------13 (6)设计总结----------------------------------------------------------14 4、参考资料----------------------------------------------------------------14五子棋系统实现【摘要】此五子棋系统用户可以选择棋子颜色和样式,有黑白两种颜色的选取,备有计时功能,如果超时系统则做出让步处理。
#include <stdio.h>#include <stdlib.h>#define m 30int main (void){int count;//计数器算横纵行的结果int w,h;int u;int l;int i,size;//i声明步数。
size声明int r[m][m] = {0};//数组声明(棋子位置)int x, y;//声明落子坐标int n;//声明棋盘大小nchar a[20],b[20];printf ("请输入棋盘大小n\n");//编辑棋盘直到棋盘长度宽度大于4小于30 scanf ("%d", &n);if (n<=4 || n>m){do{printf ("输入的棋盘大小:4<n<%d\n", m);scanf ("%d", &n);}while (n<=4 || n>m);}getchar ();//声明玩家printf ("请输入玩家1姓名:\n");gets(a);printf ("请输入玩家2姓名:\n");gets(b);for ( i = 1, size = n*n;i <= size; i++)//编辑棋盘{if (i%2 == 1)//如果i能被2整除,为玩家a相关信息{do//玩家a棋子信息{printf ("%s该你下棋了,第%d个棋子\n", a, i);scanf ("%d%d", &x, &y);if (x > n || x < 0)//判断坐标是否在棋盘内,如果不是则重新输入{do{printf ("0<=横坐标<=%d请重新输入横坐标\n", n);scanf ("%d", &x);}while (x>m || x<0);}if (y > n || y < 0)//判断坐标是否在棋盘内,如果不是则重新输入{do{printf ("0<=纵坐标<=%d请重新输入纵坐标\n", n);scanf ("%d", &y);}while (y < 0 || y > n);}}while ((r[x][y] == 1 && (printf ("这个位置上已经有棋子了,请重新输入\n")))|| r[x][y] == 2&& (printf ("这个位置上已经有棋子了,请重新输入\n")) );r[x][y] = 1;for (u = 0;u < n; u++)//不同情况下判断玩家a获胜方式{for (l = 0;l < n;l++){count = 0;for (w = u,h = l;r[w][h] == 1 && h < n; h++)count++;if (count == 5){printf ("%s是胜利者\n", a);goto e;//直接跳转,其余代码不在运行count = 0;for (w = u, h = l; r[w][h] == 1 && w < n; w++)count ++;if (count == 5){printf ("%s是胜利者\n", a);goto e;}count = 0;for (w = u,h = l; r[w][h] == 1 && w < n && h<n;w++,h++)count++;if (count == 5){printf ("%s是胜利者\n", a);goto e;}count = 0;for (w =u ,h =l;r[w][h] == 1 && h > 0;h--)count++;if (count == 5){printf ("%s是胜利者\n", a);goto e;}}}}system("cls");for (int j = n;j>=0;j--){printf ("%-2d", j);for (int k = 0;k < n;k++)//画棋盘,声明两玩家棋子图片{if (r[k][j] == 0)printf ("╋");else if(r[k][j] == 1)printf ("○");else if (r[k][j] == 2)printf ("●"); }printf ("\n");}printf (" ");for (int k = 0;k < n;k++)printf ("%-2d", k);}else if (i%2 == 0)//如果i不能被2整除,为玩家b相关信息{do{printf ("\n%s该你下棋了,第%d个棋子\n", b, i);scanf ("%d%d", &x, &y);if (x > n || x < 0){do{printf ("0<=横坐标<=%d请重新输入横坐标\n", n);scanf ("%d", &x);}while (x>n || x<0);}if (y >n|| y < 0){do{printf ("0<=纵坐标<=%d请重新输入纵坐标\n", n);scanf ("%d", &y);}while (y < 0 || y > n);}}while ((r[x][y] == 1 && (printf ("这个位置上已经有棋子了,请重新输入\n")))|| r[x][y] == 2&& (printf ("这个位置上已经有棋子了,请重新输入\n")) );r[x][y] = 2;system("cls");for (int j = n;j>=0;j--){printf ("%-2d", j);for (int k = 0;k < n;k++){if (r[k][j] == 0)printf ("╋");else if(r[k][j] == 1)printf ("○");else if (r[k][j] == 2)printf ("●");}printf ("\n");}printf (" ");for (int k = 0;k < n;k++)printf ("%-2d", k); printf ("\n");count = 0;for (u = 0;u < n; u++){for (l = 0;l < n;l++){count = 0;for (w = u,h = l;r[w][h] == 2 && h < n; h++)count++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}count = 0;for (w = u, h = l; r[w][h] == 2 && w < n; w++)count ++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}count = 0;for (w = u,h = l; r[w][h] == 2 && w < n && h<n;w++,h++)count++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}count = 0;for (w =u ,h =l;r[w][h] == 2 && h > 0;h--)count++;if (count == 5){printf ("%s是胜利者\n", b);goto e;}}}}}e: for (int j = n;j>=0;j--)//游戏结束界面棋盘固定重新显示{printf ("%-2d", j);for (int k = 0;k < n;k++){if (r[k][j] == 0)printf ("╋");else if(r[k][j] == 1)printf ("○");else if (r[k][j] == 2)printf ("●");}printf ("\n");}printf (" ");for (int k = 0;k < n;k++)printf ("%-2d", k); printf ("\n");printf ("\a游戏愉快,Powered by Techmessager\n");//结束语句return 0;}。
实验报告课程名称:C语言课程设计实验项目:五子棋游戏设计专业班级:计专1502姓名:孙奇学号:248150203 实验室号:实验组号:实验时间:批阅时间:指导教师:成绩:沈阳工业大学实验报告(适用计算机程序设计类)专业班级:计专1502 学号:248150203 姓名:孙奇实验名称:五子棋游戏设计4.程序运行结果(1)规则界面(2)对弈界面(3)获胜界面5.出现的问题及解决方法(1)游戏开始时,棋子原来初始在棋盘中央,一旦中央落子后,初始棋子与已有棋子重叠,为了解决问题将初始棋子移动到棋盘左上方棋盘以外。
(2)棋子都为空心圆,在棋盘不好区分正在控制的棋子,改为已确定落子的棋子为实心圆,正在控制的棋子为空心圆。
附件A 沈阳工业大学实验报告(适用计算机程序设计类)专业班级:计专1502 学号:248150203 姓名:孙奇实验程序:本程序在Windows XP SP3操作系统及Turbo C 2.0开发环境下调试通过。
#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<bios.h>#include<conio.h>int judgeresult(int x,int y);void attention(){char ch;window(1,1,80,25);textbackground(LIGHTBLUE);textcolor(YELLOW);clrscr();gotoxy(15,4);printf("Play Rules:");gotoxy(15,8);printf("1.Press Left,Right,Up,Down Key to move Piece");gotoxy(15,12);printf("2.Press Space to place the Piece");gotoxy(15,16);printf("3.DO NOT press Space outside of the chessboard");gotoxy(15,20);printf("Do you accept the above Playing Rules? [Y/N]:");while(1){printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.");for(x1=1,y1=1,y2=18;x1<=18;x1++)line((x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI);for(x1=1,y1=1,x2=18;y1<=18;y1++)line((x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI);for(x1=1;x1<=18;x1++)for(y1=1;y1<=18;y1++)box[x1][y1]=0;}void draw_circle(int x,int y,int color){setcolor(color);setlinestyle(SOLID_LINE,0,1);x=(x+JZ)*BILI;y=(y+JS)*BILI;circle(x,y,8);}void draw_slice(int x,int y,int color){for(i=step_x-1,j=step_y;i>=1;i--)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if (i<1) break;step_x=i;judgewho(step_x,step_y);break;}case RIGHT:if(step_x+1>18)break;else{for(i=step_x+1,j=step_y;i<=18;i++)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;if((step_y-1)<0)break;else{for(i=step_x,j=step_y-1;j>=1;j--)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLUE);break;}if(j<1)break;step_y=j;judgewho(step_x,step_y);break;}case ESC :break;case SPACE :if(step_x>=1 && step_x<=18 && step_y>=1 && step_y<=18) {if(box[step_x][step_y]==0)setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,5);outtextxy(20,20,"The Black Win !");setcolor(14);settextstyle(3,0,5);outtextxy(120,120,"The Black Win !");setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}if(flag==2){setbkcolor(BLUE);cleardevice();setviewport(100,100,540,380,1);}}void change(){if(flag==1)flag=2;elseflag=1;}void judgewho(int x,int y){if(flag==1)draw_circle(x,y,BLUE);if(flag==2)draw_circle(x,y,WHITE); }int judgeresult(int x,int y){break;}if(n1+n2-1>=5){return(1);break;}/*垂直向上数*/n1=0;n2=0;for(j=x,k=y;k>=1;k--){if(box[j][k]==flag)n1++;elsebreak;}/*垂直向下数break;}/*向右下方数*/for(j=x,k=y;j<=18,k<=18;j++,k++) {if(box[j][k]==flag)n2++;elsebreak;}if(n1+n2-1>=5){return(1);break;}/*向右上方数*/n1=0;return(0);break;}}void main(){int gdriver=VGA,gmode=VGAHI;clrscr();attention();initgraph(&gdriver,&gmode,"c:\\tc\\bgi"); flag=1;draw_box();do{step_x=0;step_y=0;judgewho(step_x-1,step_y-1);do{while(bioskey(1)==0);。
c语言课程设计五子棋一、教学目标本章节的教学目标是使学生掌握C语言编程基础,学会使用C语言编写简单的五子棋游戏。
具体目标如下:1.知识目标:–了解C语言的基本语法和数据类型。
–掌握函数的定义和调用。
–理解指针的概念和使用方法。
–学习结构体的定义和运用。
2.技能目标:–能够使用C语言编写简单的程序。
–学会使用C语言进行基本的输入输出操作。
–掌握使用C语言进行条件判断和循环控制。
–能够使用C语言实现五子棋游戏的逻辑和规则。
3.情感态度价值观目标:–培养学生的编程兴趣和自信心。
–培养学生解决问题的能力和创新思维。
–培养学生的团队合作意识和沟通能力。
二、教学内容本章节的教学内容主要包括C语言的基本语法、数据类型、函数、指针、结构体等。
具体内容如下:1.C语言的基本语法和数据类型。
–变量的声明和赋值。
–控制语句的使用,如if、for、while等。
–数组的声明和使用。
2.函数的定义和调用。
–函数的声明和定义。
–函数的参数传递和返回值。
–函数的调用和调用方式。
3.指针的概念和使用方法。
–指针的声明和赋值。
–指针的解引用和取地址。
–指针与数组的关系。
4.结构体的定义和运用。
–结构体的声明和定义。
–结构体的成员访问和操作。
–结构体的数组和指针。
5.五子棋游戏的逻辑和规则实现。
–棋盘的表示和初始化。
–玩家输入和棋子放置。
–判断胜利条件和游戏结束。
三、教学方法本章节的教学方法采用讲授法、讨论法、实验法相结合的方式。
具体方法如下:1.讲授法:通过讲解和示例,使学生掌握C语言的基本语法和数据类型。
2.讨论法:通过小组讨论和问题解答,帮助学生理解函数、指针和结构体的概念。
3.实验法:通过编写五子棋游戏程序,让学生动手实践,巩固所学知识。
四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备。
具体资源如下:1.教材:选用《C程序设计语言》作为主教材,辅助以《C语言编程实例解析》等参考书。
2.多媒体资料:提供C语言编程的教学视频和PPT课件,帮助学生更好地理解知识点。
C语言游戏之五子棋源代码#include<stdio.h>#include<stdlib.h>#include<graphics.h>#include<bios.h>#include<conio.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int box[N][N];int step_x,step_y ;int key ;int flag=1 ;void draw_box();void draw_cicle(int x,int y,int color); void change();void judgewho(int x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attention(){char ch ;window(1,1,80,25);textbackground(LIGHTBLUE);textcolor(YELLOW);clrscr();gotoxy(15,2);printf("游戏操作规则:");gotoxy(15,4);printf("Play Rules:");gotoxy(15,6);printf("1、按左右上下方向键移动棋子");gotoxy(15,8);printf("1. Press Left,Right,Up,Down Key to move Piece");gotoxy(15,10);printf("2、按空格确定落棋子");gotoxy(15,12);printf("2. Press Space to place the Piece");gotoxy(15,14);printf("3、禁止在棋盘外按空格");gotoxy(15,16);printf("3. DO NOT press Space outside of the chessboard");gotoxy(15,18);printf("你是否接受上述的游戏规则(Y/N)");gotoxy(15,20);printf("Do you accept the above Playing Rules? [Y/N]:");while(1){gotoxy(60,20);ch=getche();if(ch=='Y'||ch=='y')break ;else if(ch=='N'||ch=='n'){window(1,1,80,25);textbackground(BLACK);textcolor(LIGHTGRAY);clrscr();exit(0);}gotoxy(51,12);printf(" ");}}void draw_box(){int x1,x2,y1,y2 ;setbkcolor(LIGHTBLUE);setcolor(YELLOW);gotoxy(7,2);printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit.");for(x1=1,y1=1,y2=18;x1<=18;x1++) line((x1+JZ)*BILI,(y1+JS)*BILI,(x 1+JZ)*BILI,(y2+JS)*BILI);for(x1=1,y1=1,x2=18;y1<=18;y1++) line((x1+JZ)*BILI,(y1+JS)*BILI,(x 2+JZ)*BILI,(y1+JS)*BILI);for(x1=1;x1<=18;x1++)for(y1=1;y1<=18;y1++)box[x1][y1]=0 ;}void draw_circle(int x,int y,int color) {setcolor(color);setlinestyle(SOLID_LINE,0,1);x=(x+JZ)*BILI ;y=(y+JS)*BILI ;circle(x,y,8);}void judgekey(){int i ;int j ;switch(key){case LEFT :if(step_x-1<0)break ;else{for(i=step_x-1,j=step_y;i>=1;i --)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLU E);break ;}if(i<1)break ;step_x=i ;judgewho(step_x,step_y);break ;}case RIGHT :if(step_x+1>18)break ;else{for(i=step_x+1,j=step_y;i<=18 ;i++)if(box[i][j]==0){draw_circle(step_x,step_y,LIGH TBLUE);break ;}if(i>18)break ;step_x=i ;judgewho(step_x,step_y);break ;}case DOWN :if((step_y+1)>18)break ;else{for(i=step_x,j=step_y+1;j<=18 ;j++)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLU E);break ;}if(j>18)break ;step_y=j ;judgewho(step_x,step_y);break ;}case UP :if((step_y-1)<0)break ;else{for(i=step_x,j=step_y-1;j>=1;j --)if(box[i][j]==0){draw_circle(step_x,step_y,LIGHTBLU E);break ;}if(j<1)break ;step_y=j ;judgewho(step_x,step_y);break ;}case ESC :break ;case SPACE :if(step_x>=1&&step_x<=18&&s tep_y>=1&&step_y<=18){if(box[step_x][step_y]==0){box[step_x][step_y]=flag ; if(judgeresult(step_x,step_y)==1){sound(1000);delay(1000);nosound();gotoxy(30,4);if(flag==1){setbkcolor(BLUE);cleardevice(); setviewport(100,100,540,380,1);/*定义一个图形窗口*/setfillstyle(1,2);/*绿色以实填充*/setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,5);/*三重笔划字体, 水平放?5倍*/ outtextxy(20,20,"The White Win !");setcolor(15);settextstyle(3,0,5);*无衬笔划字体, 水平放大5倍*/ uttextxy(120,120,"The White Win !");setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}if(flag==2){setbkcolor(BLUE);cleardevice();setviewport(100,100,540,380,1);/*定义一个图形窗口*/setfillstyle(1,2);/*绿色以实填充*/setcolor(YELLOW);rectangle(0,0,439,279);floodfill(50,50,14);setcolor(12);settextstyle(1,0,8);笔划字体, 水平放大8倍*/ outtextxy(20,20,"The Red Win !");setcolor(15);settextstyle(3,0,5);/*无衬笔划字体, 水平放大5倍*/outtextxy(120,120,"The Red Win !");setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}}change();break ;}}elsebreak ;}}void change(){if(flag==1)flag=2 ;elseflag=1 ;}void judgewho(int x,int y){if(flag==1)draw_circle(x,y,15);if(flag==2)draw_circle(x,y,4);}int judgeresult(int x,int y){ int j,k,n1,n2 ;while(1){ n1=0 ;n2=0 ;/*水平向左数*/for(j=x,k=y;j>=1;j--){ if(box[j][k]==flag)n1++;elsebreak ;}/*水平向右数*/for(j=x,k=y;j<=18;j++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){return(1);break ;}/*垂直向上数*/n1=0 ;n2=0 ;for(j=x,k=y;k>=1;k--) {if(box[j][k]==flag)n1++;elsebreak ;}/*垂直向下数*/for(j=x,k=y;k<=18;k++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){return(1);break ;}/*向左上方数*/n1=0 ;n2=0 ;for(j=x,k=y;j>=1,k>=1;j--,k--){if(box[j][k]==flag)n1++;elsebreak ;}/*向右下方数*/for(j=x,k=y;j<=18,k<=18;j++,k+ +){if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){return(1);break ;}/*向右上方数*/n1=0 ;n2=0 ;for(j=x,k=y;j<=18,k>=1;j++,k--){if(box[j][k]==flag)n1++;elsebreak ;}/*向左下方数*/for(j=x,k=y;j>=1,k<=18;j--,k++){if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=5){ return(1);break ;}return(0);break ;} }void main(){int gdriver=VGA,gmode=VGAHI;clrscr();attention();initgraph(&gdriver,&gmode,"c:\\tc" );/* setwritemode(XOR_PUT);*/flag=1 ;draw_box();do{step_x=0 ;step_y=0 ;/*draw_circle(step_x,step_y,8); */judgewho(step_x-1,step_y-1);do{while(bioskey(1)==0);key=bioskey(0);judgekey();}while(key!=SPACE&&key!=ESC);}while(key!=ESC);closegraph();}。
#i n c l u d e<s t d i o.h>#define N 10void welcome();void initqipan();void showqi(int i);void save(int p);void panduan(int p);/******************主函数*****************/void main(){int p=0;welcome();initqipan();for(p=1;p<=N*N;p++){weizhi[p].x[p]=zouqihang(); weizhi[p].y[p]=zouqilie();save(p);showqi(p);panduan(p);{printf("%d",i);printf(" ");}printf("\n");for(i=1;i<N;i++){for(j=0;j<N;j++){if(j==0)elsefp=fopen("wuzi_list","rb");for(i=1;i<=N*N;i++){fread(&weizhi[i],sizeof(struct zuobiao),1,fp);a[i]=weizhi[i].x[i];b[i]=weizhi[i].y[i];}for(m=1;m<p;m++){while(weizhi[p].x[p]==a[m]&&weizhi[p].y[p]==b[m]){for(i=1;i<N;i++){for(j=1;j<N;j++){if(j==1)printf("%d",i);for(k=1;k<=p;k++){if(i==weizhi[k].x[k]&&j==weizhi[k].y[k]){{printf("int zouqihang(){int x;printf("请输入要走棋子所在行数!\n");printf("x=");scanf("%d",&x);while(x>N-1||x<1){printf("error!\n");printf("请输入要走棋子所在行数!\n");}!\n");{printf("error!\n");printf("请输入要走棋子所在列数!\n");printf("y=");scanf("%d",&y);}return y;}/******************文件保存*****************/void save(int i){FILE *fp;{fread(&weizhi[i],sizeof(struct zuobiao),1,fp);a[i]=weizhi[i].x[i];b[i]=weizhi[i].y[i];}/*****************判断行******************/for(i=1;i<=p;i++){if(i%2==1){{{k[0]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-4)){k[0]++;continue;}else if(k[0]==5){}{for(j=2;j<=p;j=j+2){if((a[i]==a[j])&&(b[i]==b[j]-1)){k[1]++;continue;}else if((a[i]==a[j])&&(b[i]==b[j]-2)){}else if(k[1]==5){printf("Player 2 wins!!!\n");}else}if(k[1]==5)break;k[1]=1;}}/**********************判断列k[2]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j])){continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j])){}continue;}if(k[2]==5)break;k[2]=1;}else if(k[2]==5)break;else if(i%2==0){{{k[3]++;continue;}else if((a[i]==a[j]-4)&&(b[i]==b[j])){k[3]++;continue;}else if(k[3]==5){}{if(k[0]==5||k[1]==5||k[2]==5||k[3]==5)break;else if(i%2==1){for(j=1;j<=p;j=j+2){if((a[i]==a[j]-1)&&(b[i]==b[j]-1)){k[4]++;}{k[4]++;continue;}else if(k[4]==5){printf("Player 1 wins!!!\n");}elsecontinue;}k[5]++;continue;}else if((a[i]==a[j]-2)&&(b[i]==b[j]-2)){k[5]++;continue;}else if((a[i]==a[j]-3)&&(b[i]==b[j]-3)){}continue;}if(k[5]==5)break;k[5]=1;}}/**********判断对角(左下-右上)************/for(i=1;i<=p;i++){break;k[6]++;continue;}else if((a[i]==a[j]+3)&&(b[i]==b[j]-3)){k[6]++;continue;}else if((a[i]==a[j]+4)&&(b[i]==b[j]-4)){}}else if(k[6]==5)break;else if(i%2==0){for(j=2;j<=p;j=j+2){if((a[i]==a[j]+1)&&(b[i]==b[j]-1)){k[7]++;}{k[7]++;continue;}else if(k[7]==5){printf("Player 2 wins!!!\n");}elsecontinue;}}/****************游戏结束*******************/void over(){printf("************************************\n");printf(" game over!!!\n");printf("************************************\n");}/****************游戏开始*******************/void welcome(){。
#include<stdio.h>#include<string.h>#include<time.h>#include<stdlib.h>#define N 19int i,j,k,size=N;int isBlack=1;//当前是黑方下子 isBlack=1 若为白方下子 isBlack=0char state[N][N];char x,y,temp[10];char c; //用来存放显示黑白子的变量void printState();void startGame(){//printf("\n潇洒菠菜提示:此功能待开发...\n");//当前初始化面板。
for(i=0;i<size;i++){for(j=0;j<size;j++){state[i][j]='*';}}printState();while(1){printf("\n\t请%s方下子:",isBlack?"黑":"白");fflush(stdin);scanf("%s",temp);if(!strcmp(strupr(temp),"OUT")) //如果在下的过程中输入OUT 的话就返回主菜单{system("cls");return;}if(!strcmp(temp,"BACK")) //悔棋... BACK{i=x-'A'; //这里i和j承担过循环控制变量!需要重新初始化j=y-'A';state[i][j]='*';printState();printf("\t 观棋不语真君子,落子不悔大丈夫!\n");isBlack=!isBlack;continue;}if(!strcmp(temp,"LOSE")) //认输... LOSE{printf("\n\t潇洒菠菜提示:%s方认输,%s方胜!\n\n",isBlack?"黑":"白",isBlack?"白":"黑");return;}x=temp[0]; //取前两个字符做处理。
五子棋c语言版int x,y;char chx,chy,chz;chx='z';while(chx<'a'||chx>'s'||chy<'a'||chy>'s'){cprintf("\t现在该黑方(X)下,请输入横纵坐标:");chx=getchar();chy=getchar();chz=getchar();if(chx<'a'||chx>'s'||chy<'a'||chy>'s'){printf("\t\t错误:超出坐标范围!\n");}else{x=chx-'a';y=chy-'a';if(*(a+y*M+x)=='0')*(a+y*M+x)='X';else{printf("\t\t错误:此处已经有棋子!\n");chx='z';}}}}void luozi(char *a){int i,j,k,t1=0,t2=0,x1=0,y1=0,x2=0,y2=0;for(i=0;i<M;i++){for(j=0;j<M;j++){for(k=0;k<4;k++){if(t1<jilu.player[i][j][k]){t1=jilu.player[i][j][k];x1=i;y1=j;}}}}for(i=0;i<M;i++){for(j=0;j<M;j++){for(k=0;k<4;k++){if(t2<puter[i][j][k]){t2=puter[i][j][k];x2=i;y2=j;}}}}if(t1>t2)*(a+x1*M+y1)='O';else*(a+x2*M+y2)='O';}void score(char *a){int i,j,k,score=0,t=0;//初始化for(i=0;i<M;i++)for(j=0;j<M;j++)for(k=0;k<4;k++){puter[i][j][k]=0;jilu.player[i][j][k]=0;}//进攻for(i=0;i<M;i++){for(j=0;j<M;j++){if('0'==*(a+i*M+j)){t=0;for(k=1;;k++){if(j-k<0)break;if(*(a+i*M+j-k)=='O')score=score+1;else if(*(a+i*M+j-k)=='X'||j-k<0) {t=t+1;break;}elsebreak;}for(k=1;;k++){if(j+k==M)break;if(*(a+i*M+j+k)=='O')score=score+1;else if(*(a+i*M+j+k)=='X'||j+k>M) {t=t+1;break;}elsebreak;}if(t<2){puter[i][j][0]=score;//横向}t=0;score=0;for(k=1;;k++){if(j-k<0||i-k<0)break;if(*(a+(i-k)*M+j-k)=='O')score=score+1;else if(*(a+(i-k)*M+j-k)=='X'||j-k<0||i-k<0) {t=t+1;break;}elsebreak;}for(k=1;;k++){if(j+k==M||i+k==M)break;if(*(a+(i+k)*M+j+k)=='O')score=score+1;elseif(*(a+(i+k)*M+j+k)=='X'||j+k>M||i+k>M) {t=t+1;break;}elsebreak;}if(t<2){puter[i][j][1]=score;//斜向下45度}t=0;score=0;for(k=1;;k++){if(i-k<0)break;if(*(a+(i-k)*M+j)=='O')score=score+1;else if(*(a+(i-k)*M+j)=='X'||i-k<0) {t=t+1;break;}elsebreak;}for(k=1;;k++){if(i+k==M)break;if(*(a+(i+k)*M+j)=='O')score=score+1;else if(*(a+(i+k)*M+j)=='X'||i+k>M) {t=t+1;break;}elsebreak;}if(t<2){puter[i][j][2]=score;//竖向}t=0;score=0;for(k=1;;k++){if(j+k==M||i-k<0)break;if(*(a+(i-k)*M+j+k)=='O')score=score+1;elseif(*(a+(i-k)*M+j+k)=='X'||i-k<0||j+k>M) {t=t+1;break;}break;}for(k=1;;k++){if(j-k<0||i+k==M)break;if(*(a+(i+k)*M+j-k)=='O')score=score+1;elseif(*(a+i+k*M+j-k)=='X'||j-k<0||i+k>M){t=t+1;break;}elsebreak;}if(t<2){puter[i][j][3]=score;//斜向下135度}score=0;}}}//防守for(i=0;i<M;i++){for(j=0;j<M;j++){if('0'==*(a+i*M+j)){t=0;for(k=1;;k++){if(j-k<0)break;if(*(a+i*M+j-k)=='X')score=score+1;else if(*(a+i*M+j-k)=='O'||j-k<0){t=t+1;break;}elsebreak;}for(k=1;;k++){if(j+k==M)break;if(*(a+i*M+j+k)=='X')score=score+1;else if(*(a+i*M+j+k)=='O'||j+k>M) {t=t+1;break;}elsebreak;}if(t<2){jilu.player[i][j][0]=score;//横向}t=0;score=0;for(k=1;;k++){if(j-k<0||i-k<0)break;if(*(a+(i-k)*M+j-k)=='X')score=score+1;elseif(*(a+(i-k)*M+j-k)=='O'||j-k<0||i-k<0) {t=t+1;break;}elsebreak;}for(k=1;;k++){if(j+k==M||i+k==M)break;if(*(a+(i+k)*M+j+k)=='X')score=score+1;elseif(*(a+(i+k)*M+j+k)=='O'||j+k>M||i+k>M) {t=t+1;break;}elsebreak;}if(i<2){jilu.player[i][j][1]=score;//斜向下45度}t=0;score=0;for(k=1;;k++){if(i-k<0)break;if(*(a+(i-k)*M+j)=='X')score=score+1;else if(*(a+(i-k)*M+j)=='O'||i-k<0) {t=t+1;break;}elsebreak;}for(k=1;;k++){if(i+k==M)break;if(*(a+(i+k)*M+j)=='X')score=score+1;else if(*(a+(i+k)*M+j)=='O'||i+k>M) {t=t+1;break;}elsebreak;}if(t<2){jilu.player[i][j][2]=score;//竖向}t=0;score=0;for(k=1;;k++){if(j+k==M||i-k<0)break;if(*(a+(i-k)*M+j+k)=='X')score=score+1;elseif(*(a+(i-k)*M+j+k)=='O'||i-k<0||j+k>M) {t=t+1;break;}elsebreak;}for(k=1;;k++){if(j-k<0||i+k==M)break;if(*(a+(i+k)*M+j-k)=='X')score=score+1;elseif(*(a+(i+k)*M+j-k)=='O'||j-k<0||i+k>M) {t=t+1;break;}elsebreak;}if(t<2){jilu.player[i][j][3]=score;//斜向下135度}t=0;score=0;}}}luozi(&*a);}int win(char *a){int i,j,k,score;//玩家for(i=0;i<M;i++){score=1;for(j=0;j<M;j++){score=1;if('X'==*(a+i*M+j)){for(k=1;;k++){if(j-k<0)break;if('X'==*(a+i*M+j-k))score=score+1;elsebreak;}for(k=1;;k++){if(j+k==M)break;if('X'==*(a+i*M+j+k)) score=score+1;elsebreak;}//横向if(score>=5){printf("\t\t\t\t你赢了!\n"); return 1;break;}score=1;for(k=1;;k++){if(j-k<0||i-k<0)break;if('X'==*(a+(i-k)*M+j-k)) score=score+1;elsebreak;}for(k=1;;k++){if(j+k==M||i+k==M) break;if('X'==*(a+(i+k)*M+j+k)) score=score+1;elsebreak;}//斜向下45度if(score>=5){printf("\t\t\t\t你赢了!\n"); return 1;break;}score=1;for(k=1;;k++){if(i-k<0)break;if('X'==*(a+(i-k)*M+j)) score=score+1;elsebreak;}for(k=1;;k++){if(i+k==M)break;if('X'==*(a+(i+k)*M+j)) score=score+1;elsebreak;}//竖向if(score>=5){printf("\t\t\t\t你赢了!\n"); return 1;break;}score=1;for(k=1;;k++){if(j+k==M||i-k<0) break;if('X'==*(a+(i-k)*M+j+k)) score=score+1;elsebreak;}for(k=1;;k++){if(j-k<0||i+k==M) break;if('X'==*(a+(i+k)*M+j-k)) score=score+1;elsebreak;}//斜向下135度if(score>=5){printf("\t\t\t\t你赢了!\n");return 1;break;}}}}//电脑score=1;for(i=0;i<M;i++){score=1;for(j=0;j<M;j++){score=1;if('O'==*(a+i*M+j)){for(k=1;;k++){if(j-k<0)break;if('O'==*(a+i*M+j-k)) score=score+1;elsebreak;}for(k=1;;k++){if(j+k==M)break;if('O'==*(a+i*M+j+k)) score=score+1;elsebreak;}//横向if(score>=5){printf("\t\t\t\t你输了!\n"); return 1;break;}score=1;for(k=1;;k++)if(j-k<0||i-k<0)break;if('O'==*(a+(i-k)*M+j-k)) score=score+1;elsebreak;}for(k=1;;k++){if(j+k==M||i+k==M) break;if('O'==*(a+(i+k)*M+j+k)) score=score+1;elsebreak;}//斜向下45度if(score>=5){printf("\t\t\t\t你输了!\n"); return 1;break;score=1;for(k=1;;k++){if(i-k<0)break;if('O'==*(a+(i-k)*M+j)) score=score+1;elsebreak;}for(k=1;;k++){if(i+k==M)break;if('O'==*(a+(i+k)*M+j)) score=score+1;elsebreak;}//竖向if(score>=5){printf("\t\t\t\t你输了!\n"); return 1;break;}score=1;for(k=1;;k++){if(j+k==M||i-k<0) break;if('O'==*(a+(i-k)*M+j+k)) score=score+1;elsebreak;}for(k=1;;k++){if(j-k<0||i+k==M) break;if('O'==*(a+(i+k)*M+j-k)) score=score+1;elsebreak;}//斜向下135度if(score>=5){printf("\t\t\t\t你输了!\n");return 1;break;}score=1;}}}}void welcome(){time_t now;printf("\r\n\n\t\t\t 趣味游戏五子棋"); printf("\r\n\t\t\t 信息科学与工程学院"); printf("\n\n\n\n\n\n\n\t\t\t 通信工程一班");printf("\n\n\n\n\n\n\n\n\n");printf("请输入任意键开始游戏!");printf("\n\t\t\t\t\t\t 学号:631106040103");printf("\n\t\t\t\t\t\t 制作人:杨锐");now = time(NULL);printf("\n\n\t\t\t\t\t\t%s",ctime(&now)); getch();}void main(){char hang[M],lie[M],a[M][M];int i,j,k,z,x;char ch='a';char y;char y1;time_t now;system("color 1F");welcome();system("cls");y1=getchar();x=1;while(x==1){system("cls");for(i=0;i<M;i++)for(j=0;j<M;j++)a[i][j]='0';ch='a';for(i=0;i<M;i++){hang[i]=ch;lie[i]=ch;ch++;}banmian(hang,lie);while(1){shuru(hang,lie,&a[0][0]);system("cls");shuchu(hang,lie,&a[0][0]);z=win(&a[0][0]);if(z==1){printf("请输入任意键继续!");now = time (NULL);printf("\t\t\t%s",ctime(&now));getch();break;}system("cls");score(&a[0][0]);shuchu(hang,lie,&a[0][0]);z=win(&a[0][0]);if(z==1){printf("请输入任意键继续!");now = time (NULL);printf("\t\t\t%s",ctime(&now));getch();break;}}system("cls");printf("\n\n\n\n\t想要继续吗?\n\n\n");while(1){printf("\t\t.........1..........继续\n");printf("\t\t.........2..........退出\n");printf("\n\n请选择:");y=getchar();y1=getchar();if(y=='2'){x=0;break;}if(y=='1'){x=1;break;}printf("\t\t\t错误:没有这个选项!\t请重新输入:\n\n\n");}}system("cls");printf("\n\n\n\n\n\t\t\t\t您已退出五子棋!"); printf("\n\n\t\t\t\t谢谢您的使用!");printf("\n\n\n请输入任意键结束!");now = time (NULL);printf("\n\n\n\n\t\t\t\t\t\t%s",ctime(&now)); getch();}。
c五子棋课程设计报告一、教学目标本课程旨在让学生掌握C五子棋的基本规则、技巧和策略,培养他们的逻辑思维、判断力和竞技水平。
具体目标如下:1.知识目标:了解C五子棋的历史背景、基本规则和竞技策略。
掌握棋子的移动、 capture 和摆放规则。
了解不同棋型(活三、活四、死三、死四等)及其应用。
2.技能目标:能够独立完成C五子棋的设置和开局。
能够运用基本技巧进行中局对抗。
能够运用竞技策略进行残局思考和决策。
3.情感态度价值观目标:培养学生的团队协作和竞技精神。
增强学生面对挑战、克服困难的信心。
通过C五子棋的学习,培养学生的耐心、细心和逻辑思维能力。
二、教学内容根据课程目标,教学内容主要包括以下几个方面:1.C五子棋基本规则:棋盘、棋子、走法、capture 等。
2.棋型识别与运用:活三、活四、死三、死四等。
3.开局技巧:棋型摆放、线路控制、速度进攻。
4.中局策略:防守、攻击、棋型配合。
5.残局思考:胜负判断、棋型转换、策略选择。
教学大纲安排如下:第1-2课时:C五子棋基本规则及棋型识别。
第3-4课时:开局技巧及中局策略。
第5-6课时:残局思考及竞技水平提升。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用以下教学方法:1.讲授法:讲解C五子棋的基本规则、棋型和策略。
2.案例分析法:分析典型棋局,引导学生思考和判断。
3.实验法:让学生亲自动手实践,提高竞技水平。
4.讨论法:分组讨论,分享学习心得和经验。
四、教学资源教学资源包括:1.教材:《C五子棋入门教程》。
2.参考书:《C五子棋高级技巧》。
3.多媒体资料:教学PPT、棋局视频等。
4.实验设备:C五子棋棋盘、棋子。
以上资源将有助于实现教学目标,提高学生的学习效果。
五、教学评估本课程的教学评估将采用多元化方式,全面、客观地评价学生的学习成果。
评估方式包括:1.平时表现:课堂参与度、团队协作、竞技水平等。
2.作业:课后练习、棋局分析报告等。
3.考试:期中考试、期末考试,分别考察学生的基本规则掌握和竞技水平。