C课程设计五子棋

合集下载

五子棋(双人对战) C语言课程设计.doc

五子棋(双人对战) C语言课程设计.doc

C语言程序设计题目五子棋(双人对战)指导教师曹东燕学生姓名夏文龙于文杰邢健学号 201000802032 201000802114 201000802097专业电子信息工程教学单位物理系(盖章)目录1设计内容与设计要求 (1)1.1系统功能简介 (1)1.2系统运行环境 (1)2程序流程图 (1)3运行的运行及说明 (2)3.1系统的运行 (2)3.2运行说明 (4)4课程设计目的………………………………………………….5 程序特色 (5)6总结 (5)附件:源程序清单 (5)1设计内容与设计要求1.1系统功能简介该系统是五子棋的人人对战模式,而非平常的人机对战系统有简单的菜单界面1.2系统运行环境Vc++6.0下运行,硬件基本无要求,现在的计算机系统基本都可以运行该系统。

2程序流程图3系统的运行及说明3.1系统的运行图3-1程序的初始化界面程序初始化的界面,界面简洁明快,便于观察。

图3-2程序的运行界面图3-3程序的介绍界面3-2运行说明A向左 W向上 D向右 S向左空格键确定当结束时按Y重新开始游戏按N退出游戏4课程设计目的五子棋游戏不仅能增强人们的抽象思维能力、逻辑推理能力、空间想象力,提高人们的记忆力、心算能力等,而且深含哲理,有助于修身养性。

五子棋既有现代休闲方式所特有的特征“短、平、快” ,又有中国古典哲学所包含的高深学问“阴阳易理” ;它既有简单易学的特点,为人民群众所喜闻乐见,又有深奥的技巧;既能组织举办群众性的比赛、活动,又能组织举办高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观,它是中西方文化的交融点,也是中西方文化交流的一个平台。

自从计算机作为游戏对战平台以来,各种棋类游戏如雨后春笋般纷纷冒出。

五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣性。

同时具有简单易学、既动手又动脑的特点。

同时也为锻炼自己的编程能力。

5程序特色本程序简洁明快,采用黑白两色棋,并且本程序为双人对战。

C语言程序设计---五子棋 (1)

C语言程序设计---五子棋 (1)

五子棋算法:任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI 越高。

五子棋游戏也是如此,但在打分之前,我们先扫描整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2,15,15,8,2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:Const DIR_UP=1Const DIR_UPRIGHT=2Const DIR_RIGHT=3Const DIR_RIGHTDOWN=4Const DIR_DOWN=5Const DIR_DOWNLEFT=6Const DIR_LEFT=7Const DIR_LEFTUP=8这样我们前四个方向可以通过加四得到另一个方向的值。

如果你还是不太明白,请看下面的图:---------------------oo-----ox*xx---------------------图中的*点从标为(4,4),(打*的位置是空位),则:gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3...一旦把所有空点的棋型值填完,我们很容易地得出黑棋水平方向上点(4,4)的价值,由一个冲1(我把有界的棋称为冲)和活2(两边无界的棋称为活)组成的。

c五子棋课程设计报告

c五子棋课程设计报告

c五子棋课程设计报告一、课程目标知识目标:1. 学生理解五子棋的基本规则,掌握棋盘布局、棋子走法等相关知识。

2. 学生了解五子棋的历史背景,了解我国棋文化的发展。

3. 学生掌握基本的五子棋策略,如防守、进攻、布局等。

技能目标:1. 学生能够熟练进行五子棋对弈,具备一定的竞技水平。

2. 学生能够运用所学策略进行棋局分析,提高解决问题的能力。

3. 学生能够通过五子棋锻炼思维,提高逻辑思维和判断能力。

情感态度价值观目标:1. 学生培养对五子棋的兴趣,激发学习棋类游戏的热情。

2. 学生在五子棋学习过程中,培养团队协作精神,增进同学间的友谊。

3. 学生通过五子棋学习,体会竞技精神,树立正确的竞争观念。

课程性质分析:本课程为兴趣选修课程,结合五子棋的竞技性和趣味性,旨在提高学生的逻辑思维和竞技水平。

学生特点分析:五年级学生具备一定的认知能力和自学能力,对新鲜事物充满好奇,喜欢竞技类游戏。

教学要求:1. 教师应关注学生的个体差异,因材施教,提高学生的学习兴趣。

2. 教师应注重理论与实践相结合,让学生在实践中掌握五子棋技能。

3. 教师应关注学生在学习过程中的情感体验,培养学生的竞技精神和团队协作能力。

二、教学内容1. 五子棋基本知识:- 棋盘与棋子:介绍五子棋的棋盘布局、棋子走法及胜负判定规则。

- 历史背景:讲解五子棋的起源、发展及在我国棋文化中的地位。

2. 五子棋基本策略:- 防守策略:教授学生如何防守对手的进攻,保持棋局平衡。

- 进攻策略:指导学生运用有效进攻手段,制造对手的困境。

- 布局策略:讲解如何合理布局棋子,为后续棋局发展奠定基础。

3. 五子棋实战技巧:- 棋型分析:教授学生识别不同棋型,提高棋局分析能力。

- 残局破解:训练学生解决棋局中出现的复杂局面,提高实战水平。

4. 教学进度安排:- 第一周:五子棋基本知识学习,了解棋盘、棋子及历史背景。

- 第二周:基本策略学习,掌握防守、进攻和布局策略。

- 第三周:实战技巧训练,提高棋局分析和实战能力。

c语言五子棋课程设计报告

c语言五子棋课程设计报告

c语言五子棋课程设计报告一、前言五子棋作为一种智力游戏,在我国有着悠久的历史和广泛的群众基础。

本次设计的目的是使用C语言实现五子棋游戏,通过此次课程设计,学生将掌握C语言的编程思想和开发方法,同时了解五子棋游戏的规则和策略。

二、五子棋游戏规则五子棋游戏是在15*15的棋盘上进行,由黑白双方轮流落子,先将五个同色棋子连成一条线的一方获胜。

落子的位置必须为空,不能与已有的棋子重叠。

黑方先手,白方后手。

下图为五子棋棋盘示意图。

三、五子棋游戏实现本次课程设计采用C语言实现五子棋游戏,主要包括棋盘的绘制、落子的判断和胜负的判断等功能。

1.棋盘的绘制棋盘的绘制采用双重循环实现,将15*15的棋盘分成225个小格,其中包括14个横线和14个竖线,以及4个角上的点。

通过循环输出字符实现棋盘的绘制。

2.落子的判断落子的判断主要包括鼠标的点击和棋子的绘制两个部分。

当鼠标点击棋盘上的一个位置时,程序会根据当前轮到哪方落子来绘制相应颜色的棋子,并将该位置的状态改为已有棋子。

同时,程序会检查当前落子是否符合规则,即该位置是否为空,如果不为空则重新等待鼠标点击。

3.胜负的判断胜负的判断主要包括横向、纵向、斜向和反斜向四个方向。

通过判断当前落子位置在这四个方向上的连续棋子数是否达到五个来确定胜负。

如果达到五个,则程序会弹出相应的提示框,显示胜利方。

四、总结通过本次课程设计,学生掌握了C语言的编程思想和开发方法,同时了解了五子棋游戏的规则和策略。

本次设计主要包括棋盘的绘制、落子的判断和胜负的判断等功能。

希望本次课程设计能够增强学生的编程能力和对五子棋游戏的理解。

c语言课程设计案例-五子棋.

c语言课程设计案例-五子棋.

使用图形方式时先进行图形系统初始化, 检测或设置指定的图形模式
图形系统的初始化

图形系统初始化函数
void initgraph(int *driver,int *mode,char *pathtodriver) 其中; driver——显示适配器驱动程序的枚举变量 mode——图形模式(模式号或模式标识符) pathtodriver——适配器驱动程序的寻找路径,“” 表示在当前目录下(*.BGI) enum graphics_driver{DETECT,CGA,MCGA,EGA,EGA64,…… …,VGA,PC3270}; DETECT——自动检测所用显示适配器的类型,将相应 的驱动程序装入,并将其最高显示模式作为当前显示模 式
颜色控制函数

设调色板:setpalette() 设背景色:setbkcolor() 设绘图色:setcolor()
图形设计
§1 显示系统
显示器:CRT(阴极射线管)与控制电路组成 适配器(图形卡):CPU与显示器的接口,由 寄存器组、存储器和控制电路组成
适配器 主机
图形 显示 显示 控制器 存储器 控制器
CRT
将要显示的字符和图形以数字形式存储在卡上的视频RAM中, 再转换成视频模拟信号传送给相应的显示器
显示模式
文本模式:显示缓冲区中存放显示字符的代码 (ASCII码或汉字机内码),及字符的属性,显示屏 幕按字符分成若干行、列,如80列25行 图形模式:显示缓冲区中存放显示屏幕上每点(象 素)的颜色或灰度值,显示屏幕按象素分成若干行、 列,如640480
一般开机后的模式都是80 ×25的文本模式
§2 Turbo C绘图
图形程序的独立运行问题
为使图形方式的C源程序能够脱离TC环境下运行,应对 EGAVGA显示器的驱动程序.BGI转换成.OBJ文件: C:\TC\BGIOBJ EGAVGA

c语言五子棋课程设计

c语言五子棋课程设计

c语言五子棋课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言的基本语法和编程技巧;2. 学生能运用C语言编写五子棋游戏的基本功能,包括棋盘的初始化、玩家输入、落子、判断胜负等;3. 学生能通过五子棋案例,理解并掌握数组和循环等C语言核心知识点的应用。

技能目标:1. 学生能够运用结构化的编程思想进行问题分析,将复杂问题分解为可解决的小问题;2. 学生能够独立完成五子棋游戏的编写,培养编程实践能力和解决问题的能力;3. 学生通过团队协作完成课程项目,提高沟通和协作能力。

情感态度价值观目标:1. 学生在编程实践中培养逻辑思维能力和创新意识,增强对编程的兴趣和热情;2. 学生通过五子棋游戏的设计与实现,体验编程带来的成就感,提高自信心;3. 学生在团队协作中学会相互尊重、理解和帮助,培养良好的合作精神。

二、教学内容1. C语言基础语法回顾:变量定义与使用、数据类型、运算符、表达式、控制语句(if、for、while等);2. 数组的应用:一维数组、二维数组,重点讲解二维数组在五子棋棋盘中的应用;3. 函数的定义与调用:编写功能模块,如初始化棋盘、打印棋盘、落子、判断胜负等函数;4. 指针的应用:指针与数组的关系,通过指针操作五子棋棋盘;5. 五子棋游戏设计与实现:分析游戏需求,设计游戏流程,编写代码实现游戏功能;6. 结构体的使用:定义玩家信息结构体,存储和管理玩家信息;7. 文件操作:读取和保存棋局,实现游戏进度保存与加载;8. 算法与逻辑:介绍五子棋胜负判断的算法,以及优化策略;9. 项目实践:学生分组进行五子棋游戏的开发,按照教学进度完成相应功能;10. 课堂讨论与展示:分析项目中的问题与解决方法,分享编程技巧,展示团队成果。

教学内容按照课本章节进行组织,确保学生能够将所学知识应用于实际项目中,逐步掌握C语言编程的核心技能。

三、教学方法本课程采用以下多样化的教学方法,旨在激发学生的学习兴趣,提高学生的主动性和实践能力:1. 讲授法:教师以清晰、生动的语言讲解C语言的基本概念、语法规则和五子棋游戏设计原理。

c课程设计五子棋游戏

c课程设计五子棋游戏

c课程设计五子棋游戏一、教学目标本课程的目标是让学生掌握五子棋游戏的基本规则和技巧,能够独立进行游戏,并理解游戏的算法和逻辑。

知识目标包括了解五子棋的历史和背景,掌握游戏的规则和技巧,理解游戏的算法和逻辑。

技能目标包括能够独立进行游戏,能够分析游戏局势,能够制定游戏策略。

情感态度价值观目标包括培养学生的团队合作精神,培养学生的竞技精神,让学生理解胜负的重要性。

二、教学内容本课程的教学内容主要包括五子棋的基本规则和技巧,游戏的算法和逻辑,以及游戏中的团队合作和竞技精神。

具体包括五子棋的历史和背景,游戏的规则和技巧,如何分析游戏局势和制定游戏策略,以及如何在游戏中展现团队合作和竞技精神。

三、教学方法本课程将采用讲授法、讨论法、案例分析法和实验法等多种教学方法。

通过讲授法,让学生掌握五子棋的基本规则和技巧;通过讨论法,让学生深入理解游戏的算法和逻辑;通过案例分析法,让学生学会分析游戏局势和制定游戏策略;通过实验法,让学生在实际游戏中体验团队合作和竞技精神。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。

教材和参考书将提供五子棋的基本规则和技巧,游戏的算法和逻辑,以及游戏中的团队合作和竞技精神的相关知识。

多媒体资料将提供五子棋游戏的示例和案例,帮助学生更好地理解游戏的相关知识。

实验设备将用于让学生在实际游戏中体验团队合作和竞技精神。

五、教学评估本课程的评估方式包括平时表现、作业和考试。

平时表现主要评估学生的出勤、课堂参与度和团队合作表现。

作业包括练习题和游戏设计项目,评估学生对五子棋规则和技巧的掌握程度,以及游戏的算法和逻辑的应用能力。

考试包括期中和期末考试,评估学生对课程知识的全面理解和应用能力。

评估方式应客观、公正,能够全面反映学生的学习成果。

六、教学安排本课程的教学安排将在每周的一节课进行,共计10节课。

教学进度将按照教学大纲进行,确保在有限的时间内完成教学任务。

教学时间将安排在下午或晚上,考虑学生的作息时间。

c课程设计五子棋游戏

c课程设计五子棋游戏

c课程设计五子棋游戏一、课程目标知识目标:1. 让学生掌握五子棋的基本规则和棋谱,理解其蕴含的数学原理;2. 培养学生对博弈论的基本认识,了解五子棋游戏中的策略与决策;3. 引导学生运用计算机编程实现五子棋游戏,掌握相关算法和编程技巧。

技能目标:1. 培养学生运用逻辑思维和分析问题的能力,提高解决问题的策略选择和决策能力;2. 培养学生的团队协作能力,学会与他人共同分析问题、探讨解决方案;3. 提高学生的计算机编程能力,能够独立完成五子棋游戏的简单设计与实现。

情感态度价值观目标:1. 培养学生对五子棋游戏的兴趣,激发他们学习数学和计算机编程的热情;2. 培养学生勇于面对挑战、克服困难的精神,增强自信心;3. 培养学生遵守游戏规则,树立公平竞争的意识,培养良好的竞技道德。

课程性质:本课程以五子棋游戏为载体,结合数学和计算机编程知识,培养学生的逻辑思维、分析问题和团队协作能力。

学生特点:考虑到学生所在年级,他们对基本数学原理和计算机编程有一定了解,具备一定的独立思考和解决问题的能力。

教学要求:在教学过程中,注重理论与实践相结合,充分调动学生的积极性,引导他们通过自主探究和合作学习,达到课程目标。

同时,注重对学生的个性化指导,提高他们的学习效果。

通过本课程的学习,使学生能够将所学知识应用于实际生活,培养他们的创新意识和实践能力。

二、教学内容1. 五子棋基本规则与棋谱:包括棋盘布局、棋子走法、胜利条件等,结合数学原理分析棋局变化。

- 教材章节:第二章 简单博弈论2. 博弈论基本概念:介绍博弈论的基本要素,如参与者、策略、支付函数等,探讨五子棋游戏中的策略选择。

- 教材章节:第三章 博弈论基础3. 计算机编程实现五子棋游戏:学习运用编程语言(如Python)实现五子棋游戏,包括界面设计、算法实现等。

- 教材章节:第四章 计算机编程与算法4. 五子棋算法分析:讲解常用的五子棋算法,如极大极小值搜索、α-β剪枝等,提高游戏AI的智能程度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*这是我们c++课程设计五子棋,我用了许多循环语句,可能比较繁碎,不过仔细分析的话,还是挺简单的。

如果有什么不懂的地方可以加我q 1570169994 */ #include<stdio.h>#include<stdlib.h>#include<conio.h> // 这些是一些必要的头文件#include<windows.h>#include<iostream>using namespace std;#define M 15 //此处定义棋盘大小为15*15,自己视情况而定typedef struct Node{int a; //这里定义的结点在悔棋时要用到int b;struct Node *next;}node;class Qipan{ //定义一个棋盘类,这个类里有实现不同功能的函数public:int a,b,t; //棋子的坐标我们用a,b表示,t表示接收的输入信息int player; //player为1时,代表绿方下棋,2代表红方int name[M][M]; //棋盘用一个15*15的二维数组表示void reset(); //此函数实现重置功能,即将棋盘上的棋子清零void chess(); //此函数实现下棋功能,是非常重要的void win(); //此函数实现判断功能,即每当一方落子后,都要调用此函数void explain(); //此函数是解释说明的函数void output(int count[]); //此函数输出赢的一方void gotoxy(int x,int y){HANDLE hout; //这是实现光标移动的函数,具体可以百度一下COORD coord; //x,y即为棋子的坐标,和a,b一样coord.X = x; //此函数是将当前光标移动到x,y坐标处coord.Y = y;hout = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hout,coord);}};// main 函数int main(){Qipan qipan; //定义一个棋盘对象do{system("cls"); //清屏函数cout<<"1.开始游戏 "<<endl;cout<<"2.游戏说明 "<<endl;fflush(stdin); //清空输入缓冲区,准备接收用户的输入qipan.t = getch(); //接受用户的输入,把值赋给 tif(qipan.t == 27) //Esc键的ASCII为27,即用户如果按下Esc键,则退出循环break;switch(qipan.t) //选择语句{case '1': //如果用户输入1,即要开始游戏while(1){system("cls");cout<<"1.绿棋先走 "<<endl;cout<<"2.红棋先走 "<<endl;fflush(stdin);qipan.t = getch();if(qipan.t==48)break;if(qipan.t == 27)break;if(qipan.t == 49) //用户输入1,则绿棋先走,qipan.player = 1;if(qipan.t == 50) //输入2,红棋先走qipan.player = 2;do{qipan.reset(); //重置棋盘,即绘制棋盘qipan.chess(); //下棋函数}while(qipan.t == 49);if(qipan.t==48)break;}break;case '2':qipan.explain(); //用户输入2,调用说明函数qipan.t = getch();break;}}while(qipan.t!=48);qipan.gotoxy(40,8);return 0;}//reset函数,绘制棋盘void Qipan::reset(){int i,j;a = 14; //定义光标初始位置为中间,即(14,7)b = 7;for(i=0;i<M;i++){for(j=0;j<M;j++){name[i][j] = 0; //初始化二维数组为0,当有棋子落下时,根据红绿变为1或2}}system("cls");SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);// 此函数为设置背景颜色为白色函数,可以自行百度for(i=0;i<M;i++){for(j=0;j<M;j++){if(name[i][j] == 0)cout<<"+"; //输出棋盘,即15*15 个 + 号}cout<<endl;}gotoxy(42,2);cout<<"按Eas返回上级菜单";gotoxy(42,3); // 在右边输出一些提示cout<<"按 2 悔棋 ";gotoxy(42,4);cout<<"按 1 重新开始"<<endl;gotoxy(42,5);cout<<"按 0 结束游戏"<<endl;gotoxy(14,7);}//chess函数,下棋函数void Qipan::chess(){node *h,*p,*q,*r; // 定义一些结点指针,悔棋时用到h = (node *)malloc(sizeof(node));p = h;h->a = 0; //头结点初始化为0h->b = 0;h->next = NULL;while((t = getch()) != 27) //接收用户的输入,并且判断不为0,因为0是结束游戏{switch(t){case 'w': // w s a d 和上下左右键是移动光标的if(b>0){b = b-1;gotoxy(a,b);}break;case 's':if(b<14){b = b+1;gotoxy(a,b);}break;case 'a':if(a>0){a = a-2;gotoxy(a,b);}break;case 'd':if(a<28){a = a+2;gotoxy(a,b);}break;case 72: //上下左右方向键if(b>0){b = b-1;gotoxy(a,b);}break;case 80:if(b<14){b = b+1;gotoxy(a,b);}break;case 75:if(a>0){a = a-2;gotoxy(a,b);}break;case 77:if(a<28){a = a+2;gotoxy(a,b);}break;case ' ': // 空格键和enter键是落子if(name[(a/2)][b] == 0) //判断二维数组的值是否为0,如果是,则表示此处没有棋子{q = (node *)malloc(sizeof(node));q->a = a;q->b = b;q->next = NULL; //将当前光标的坐标即a,b赋给结点,即用结点记录棋子的坐标p->next = q;p = q;if(player == 1){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);c out<<"●"; //设置颜色gotoxy(a,b);name[(a/2)][b] = 1; //落子后,二维数组的值相应的变为1或2win(); // 每下一次棋,就要调用此函数判断是否有五子连线}else{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);cout<<"●";gotoxy(a,b);name[(a/2)][b] = 2;win();}player=(player==1)?2:1; //下完一次棋,player由红变为绿,或由绿变为红}break;case 13: //enter键的ASCII,和空格键作用一样if(name[(a/2)][b] == 0){q = (node *)malloc(sizeof(node));q->a = a;q->b = b;q->next = NULL;p->next = q;p = q;if(player == 1){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);cout<<"●";gotoxy(a,b);name[(a/2)][b] = 1;win();}else{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGR OUND_INTENSITY|FOREGROUND_RED);cout<<"●";gotoxy(a,b);name[(a/2)][b] = 2;win();}player=(player==1)?2:1;}break;}if(t == 48)break;if(t == 49)break;if(t == 50) // 2的ASCII为50,即用户要悔棋{r = h;if(p !=r){if(r->next == p){p = r;}else{for(int i=0;;i++){r = r->next;if(r->next == p){ p = r;break;}}}a = q->a; // 此为悔棋步骤,先找到最后一个结点,即最后一棋子的位置,因为坐标保存在了结点里b = q->b;gotoxy(a,b);SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGR OUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);cout<<"+";gotoxy(a,b); // 悔棋后,player也需要变name[(a/2)][b] = 0;player=(player==1)?2:1;free(q);q = p;}}}SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGR OUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN |FOREGROUND_BLUE);// 设置背景颜色}//win函数,判断是否有五子void Qipan::win(){ // 此函数判断是否有五子相连,需要从横竖些捺四个方向判断int i,j,count[8]={0},k;for(j=0;j<M;j++) // 从第一个位置开始,判断横向是否有五子{for(i=0;i<M;i++){for(k=0;k<5;k++){if(name[i][j+k]==1){count[0]++;}if(name[i][j+k]==2){count[1]++;}}output(count);}}//for(j=0;j<M;j++) // 从第一个位置开始,判断竖向是否有五子{for(i=0;i<M;i++){for(k=0;k<5;k++){if(name[i+k][j]==1){count[2]++;}if(name[i+k][j]==2){count[3]++;}}output(count);}}//for(j=0;j<M;j++){for(i=0;i<M;i++){for(k=0;k<5;k++){if(name[i+k][j+k]==1){count[4]++;}if(name[i+k][j+k]==2){count[5]++;}}output(count);}}//for(j=0;j<M;j++){for(i=0;i<M;i++){for(k=0;k<5;k++){if(name[i+k][j-k]==1){count[6]++;}if(name[i+k][j-k]==2){count[7]++;}}output(count);}}}//output函数,输出赢的一方void Qipan::output(int count[8]) // 如果有五子相连,则有一方胜利,此函数输出胜利者{if(count[0]==5 || count[2]==5 || count[4]==5 || count[6]==5){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGR OUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN |FOREGROUND_BLUE);gotoxy(42,8);cout<<"绿棋赢了"<<endl;gotoxy(a,b);fflush(stdin);}if(count[1]==5 || count[3]==5 || count[5]==5 || count[7]==5) {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FORE GROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);gotoxy(42,8);cout<<"红棋赢了"<<endl;gotoxy(a,b);fflush(stdin);}for(int i=0;i<8;i++){count[i] = 0;}}//explain函数,说明函数void Qipan::explain(){system("cls");cout<<"按w s a d 或上下左右键进行移动"<<endl;cout<<"按空格键或 Enter 键进行落子"<<endl;cout<<"按任意键上级菜单"<<endl;}。

相关文档
最新文档