数据结构课程设计实验报告五子棋
五子棋课程实训报告
一、设计内容与设计要求1.设计内容:在手机屏幕上设计一个五子棋游戏,屏幕有棋盘,可人与人对奕,人与机对弈。
双方交替下棋,如果某方在水平、垂直或45度方向有连续的5个棋子,就算胜利,结束比赛,提示游戏得到的分数。
2.设计要求:(1)论述课题的性质、内容以及本次课程实训的目的和要求。
(2)说明Android系统对计算机软、硬件环境的基本要求,对Android应用程序作简要的说明。
(3)界面设计和游戏操作设计:界面要求美观和友好(可使用图片资源文件),使用手机键盘上的2个方向键控制方向,按照手机上的操作习惯进行设计。
)游戏核心数据结构设计4(.主要是界面控制信息:五子棋的位置信息,双方已经下棋子的具体位置。
逻辑控制信息主要双方交替下棋。
下棋子和处理, 棋子只能下到棋盘的指定位置(棋盘的格子上)并不能下到已经有棋子位置,(5)胜负判断:双方每个已下点的3个方向判断它们是否构成五连、五连就胜利。
(6)编写代码、上机输入、调试、修改并运行通过。
(7)编写实训说明书。
说明书是总结性的技术文件,应全面叙述整个设计的内容及过程(可参考上述6条),发现的问题及解决方法等。
(8)源代码和参考书目应作为说明书的附录。
(9)说明书应采用A4纸张,文字说明不少于4000字。
说明书中应包括系统结构示意图。
进度安排二、第十五周星期一上午8:30——11:30,星期二下午2:30——5:00,星期三上午8:30——11:30,星期四上午8:30——11:30,第十六周星期一一天,星期二一天星期三上午8:30——11:30,星期四上午8:30——11:30,目录一、课程实训的目的及要求-------------------------------------------6二、游戏设计思路---------------------------------------------------7三、主要功能实现---------------------------------------------------9四、程序调试-------------------------------------------------------12五、程序源代码-----------------------------------------------------13六、总结-----------------------------------------------------------21七、课程设计评分表-------------------------------------------------22一、课程实训的目的及要求本次课程实训是专门针对大四学生的一次项目实践,当前3G移动互联网发展迅速,而Android系统已经成为当前时期移动终端设备的主流操作系统之一,在这样的条件下计算机与通信学院组织这次基于Android系统的手机项目实战,紧跟当前时代电子通信业的发展,让学生学习当前主流的新技术,扩展学生们的视野,为即将大学毕业的我们进入社会求职开辟了一条新道路。
五子棋游戏实验报告
清屏—绘制棋盘—根据a数组中的每一项的两个下标来决定绘制棋子的位置,根据每一项的值是1还是2来决定在该位置绘制何颜色的棋子。
决定该黑白方走的blackwhite变量当时没有保存,可以采用在数据库中保存的方式来解决,本例中解决方法是通过数黑白棋子个数来决定恢复棋局后该谁走的。
(6)棋局能够恢复,即重新打开,打开后出现棋局结束的状态、对手名字(此功能要求用数据库和文件两种技术实现)。
2.其它要求:
(1)界面友好、漂亮。
(2)程序尽可能无bug。
(3)程序健壮性强,基本上达到无论用户如何操作,软件都不出错,都有相应的处理方法。
3.设计步骤
(1)首先做界面
界面包括几个窗体,窗体上有相应的控件。
(6)五子棋保存棋局
思路:保存棋局的功能即把内存中与棋局相关的数据(棋局名称、棋子位置、棋子颜色、棋局状态(即棋局是否结束))存入外存中,以便以后能够恢复棋局。保存的实现用两种技术实现:文件和数据库。
采用数据库技术实现棋局保存:
数据库设计:
数据表字段:棋局名、x坐标、y坐标、该点状态值、下棋状态。
每条记录表示棋盘上一个存储的点的信息。
二、实验内容
1.基本要求:
(1)输入两个对手名字,然后进入游戏界面。
(2)用鼠标点击的方式在棋盘上摆放棋子,黑白交替。(棋盘15*15)
(3)可以悔棋。
(4)五子连在一起的时候能判断胜利,并且显示出胜利者的名字。
(5)能够将棋局的结ຫໍສະໝຸດ 保存,保存该棋局结束的状态、对手名字、棋局名字(棋局名字在保存时由用户在相应的界面下添入)(此功能要求用数据库和文件两种技术实现)。
c++上机实习报告-五子棋
目录一概述 (2)二总体方案设计 (3)三详细设计 (4)四程序的调试与运行结果说明 (8)五课程设计总结 (10)六后记 (11)参考文献 (11)附录——源代码 (12)一概述1.课程设计的目的1、学会编写C++程序。
2、课程设计是检验我知识能力的一种途径。
3、课程设计能让我学会许多书本中学不到的东西。
4、课程设计能使我所学知识融会贯通,熟练掌握C++中一些基本知识点。
5、课程设计是一次很好的实践机会,可以通过实际操作来找出不足,修改不足,让自己精益求精,做到最好。
6、通过设计开发五子棋这个具体的例子把我所学到的和我所想到的都运进设计一个自己的作品。
7、通过课程设计培养了我的动手能力以及综合运用所学的C++语言基础论,基础知识,基本技能,进行程序分析和程序开发,提高在实际开发中解决问题的能力,达到了能够利用C++语言进行应用程序的规划,分析,设计和实施,更能进一步使我对这门语言有深刻的理解和更好的得到巩固,更能对我所学的知识得到检验。
2.课程设计的要求需要的基本知识与技能:C++语言基本理论,基础知识,基本技能。
数据结构相关知识。
尚未掌握的知识点:由于最开始想开发windows界面的五子棋,查阅了很多相关资料。
比如《浅入浅出MFC》、《c++可视化编程》等等,但最终因自己可视化界面编程知识的缺乏和时间问题,改编成了dos界面的五子棋。
要想做一个完成的五子棋游戏,还需要学习《算法设计》《人工智能》等相关知识。
3.课程设计的主要设计思想1.五子棋是一个棋牌类对战游戏,一般有人机对战,和双人对战两种模式。
由于人机对战涉及人工智能等后续课程,所以我的程序只涉及了双人对战这一模式。
2.程序用一个二位数组name【N】【N】来存放棋盘信息,N=20表示一个20*20的棋盘。
Name【i】【j】=0表示此位置上没有落子,1、2分别表示落有黑子和白子。
3.程序中还应有个最重要的功能就是判断胜负。
五子棋游戏中,只要一方棋子在任一直线上率先连成五颗即为胜利。
五子棋人机博弈实验报告
五子棋人机博弈实验报告目录一(课程设计目的............................................. 2 二(课程设计要求............................................. 2 三(课程设计内容............................................. 2 四(课程设计思想............................................. 2 五(系统实现 (2)设计平台 (2)数据结构设计 (3)程序流程图设计 (3)主要算法设计 (4)程序调试及运行结果.............................. 4 六(课程设计总结............................................. 5 七(参考资料................................................... 6 八(附录:五子棋博弈算法源代码 (7)1一( 课程设计目的通过上学期学习的《人工智能》学科,运用推理技术、搜索方法和决策规划和博弈树设计五子棋人机博弈系统,以此进一步深化对理论知识技术的了解,培养学生编程能力以及实践水平。
二(课程设计要求通过本次课程设计要求学生掌握以下内容:1.深入了解博弈树和alpha-beta剪枝算法。
2.设计出适合五子棋算法的启发式函数。
3.熟练掌握启发式的搜索方法。
三(课程设计内容本系统实现的是五子棋博弈算法,运用java语言实现了图形用户界面,方便用户使用。
算法采用了博弈算法和启发式函数进行搜索,人机对弈可自动判断输赢,结束后可重新开局。
四(课程设计思想本系统实现的是五子棋博弈算法,为了方便用户的使用,采用的是java图形用户界面技术。
为了记录棋盘的每一个下棋点,定义数组array[19][19]。
(最新版)五子棋毕业课程设计报告
上海海事大学程序设计课程设计报告课程题目FIVE CHESS GAME作者姓名学号联系方式指导教师学科(专业)所在学院提交日期目录1引言 (3)1.1五子棋介绍 (3)1.2选题背景和动机 (3)1.3系统所要解决的问题 (3)2 系统框架 (5)2.1棋盘类 (6)2.1.1 主要成员变量说明: (6)2.1.2清空棋盘——Clear (6)2.1.3绘制棋子——Draw (6)2.1.4左键消息——OnLButtonUp (7)2.1.5载入棋盘 (7)2.1.6对方落子完毕——Over (7)2.1.7设置游戏模式——SetGameMode (7)2.1.8胜负的判断——Win (7)2.2游戏模式类 (8)3关键技术 (9)3.1 棋盘对话框的制作 (9)3.1.1 对话框机制 (9)3.1.3 棋子 (10)3.2 人机对弈 (10)3.2.1 难度的选择 (10)3.2.2 机器的落子判断 (11)4运行结果 (15)4.1开发环境及运行环境 (15)4.1.1开发环境 (15)4.1.2运行环境 (15)4.2运行图示 (15)4.2.1 棋盘显示 (15)4.2.2 开始的选择对话框 (16)4.2.3 主界面中的游戏难度选项 (16)4.2.4 电脑的应对 (17)5调试分析 (19)6总结 (21)参考文献 (22)1引言1.1五子棋介绍五子棋是起源于中国古代的传统黑白棋种之一。
现代五子棋日文称之为“連珠”,英译为“Renju”,英文称之为“Gobang”或“FIR”(Five in a Row的缩写),亦有“连五子”、“五子连”、“串珠”、“五目”、“五目碰”、“五格”等多种称谓。
五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方的直观;既有“场”的概念,亦有“点”的连接。
【报告】c五子棋实验报告
【关键字】报告c五子棋实验报告篇一:五子棋对战实验报告实验项目五子棋网络对战和聊天实验日期XX0406实验报告要求:一、实验目的:学习和使用socket编程,熟练软件开发二、实验原理:使用socket进行网络通信,java作为编程语言三、实验要求:编写五子棋程序可以实现联机网络对战,并且可以进行聊天四、实验步骤、结果(程序+注释+截图)及分析:首先拟定编程语言与开发方案,选择java语言,考虑到java可以跨平台运行,然后决定把这个程序拆分为客户端、服务器两个部分,每个部分再分成5个小的部分实现不同功能。
1、然后考虑使用java的swing包,创建ClientChessPanel类负责棋盘部分,包括判断输赢,使用数组chesses[i][j]记录棋盘上棋子的分布,对数组进行不同的赋值表示网格节点上无棋、黑棋、白棋;使用playChessHandler作为鼠标单击事件,单击事件调用Clientskt中的函数传送棋子坐标以及输赢信息。
drawChess函数画棋子,drawGrids画网格,gameOver判断棋盘棋子分布,输赢情况。
importjavax.swing.*;importjava.awt.*;;importChatOneToOneClient.Clientskt;classClientChessPanel extends JPanel{private static final long serialVersionUID = 1L;private int space=20; //网格间的距离private int grids=30; //棋盘的网格数private int radius=space/2; //棋的半径Clientsktskt;//当chesses[i][j]=0,表示网格节点(i,j)上无棋//当chesses[i][j]=1,表示网格节点(i,j)上放白棋//当chesses[i][j]=2,表示网格节点(i,j)上放黑棋privateint[][] chesses=new int[grids+1][grids+1];private intcurrColor=1; //当前棋的颜色privateMouseListenerplayChessHandler=new MouseAdapter(){public void mouseClicked(MouseEvent e){if(skt.reMouseGo()){int x=e.getX();int y=e.getY();//放一颗棋子if(x=0 && y=0)if(chesses[round(x)][round(y)]==0){chesses[round(x)][round(y)]=currColor;repaint(); //刷新图形skt.dataout("x:"+String.valueOf(round(x)));skt.dataout("y:"+String.valueOf(round(y)));skt.setMouseGo(false);if(gameOver(currColor)){skt.dataout("g:你输了");ClientMyDialog(skt.chat,"你赢了");;}currColor=currColor==1?2:1; //切换棋子的颜色}}}};public int round(float a){ //获得接近a的网格节点坐标float f=a/space;returnMath.round(f);}publicClientChessPanel(intspace,intgrids,Clientsktskt){ this.space=space;this.grids=grids;this.radius=space/2;this.skt=skt;setBackground(Color.BLUE);setSize(space*grids,space*grids);addMouseListener(playChessHandler);startChess();}public void startChess(){clearGrids(); //清空棋盘currColor=1;repaint(); //刷新图形private void clearGrids(){for(inti=0;i for(int j=0;j chesses[i][j]=0;}//画一颗棋子private void drawChess(Graphics g,intx,inty,int color){g.setColor(color==1?Color.GREEN:Color.BLACK);g.fillOval(x*space-radius,y*space-radius,radius*2,radius*2);}//画网格private void drawGrids(Graphics g){g.setColor(Color.DARK_GRAY);for(inti=0;i g.drawLine(0,i*space,grids*space,i*space);g.drawLine(i*space,0,i*space,grids*space);}}//接收对方下的棋坐标public void paintChess(intx,int y){if(x=0 && y=0){if(chesses[x][y]==0){chesses[x][y]=currColor;currColor=currColor==1?2:1; //切换棋子的颜色skt.setMouseGo(false);skt.setMouseGo(true);repaint(); //刷新图形}}}//判断游戏是否结束publicbooleangameOver(intgameOver){int five=0;//用于判断是否有连续5个子for(inti=0;i for(int j=0;j if(chesses[i][j]==gameOver){five++;for(in(本文来自:小草范文网:c五子棋实验报告)t k=1;k if(chesses[i][j+k]==gameOver){five++;if(five==5){return true;}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k if(chesses[i+k][j+k]==gameOver){ five++;if(five==5){return true;}}else{five=1;k=5;}}for(int k=1;k4;k++){//左斜向比较if(chesses[i+k][j-k]==gameOver){five++;if(five==5){return true;}}else{five=1;}}}}five=0;}return false;}public void paintComponent(Graphics g){ //覆盖paintComponent()方法super.paintComponent(g); //必须先调用父类的方法drawGrids(g); //画网格for(inti=0;i for(int j=0;j if(chesses[i][j]!=0)drawChess(g,i,j,chesses[i][j]); //画棋子}}2、ClientComponentPopupMenu类主要负责聊天的部分,使用JTextField并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。
五子棋系统实验报告
湖南工业大学课程设计任务书2015—2016学年第2 学期计算机与通信学院(系、部)计算机科学与技术专业计算机1502班级课程名称:面向对象程序设计设计题目:五子棋完成期限:自2016年6月13日至2016年6月19日共1周指导教师(签字):年月日系(教研室)主任(签字):年月日面向对象程序设计课程设计设计说明书五子棋起止日期: 2016年6月13日至 2016年6月18日学生姓名王回班级计算机1502学号15408100209成绩指导教师(签字)计算机与通信学院2016年 6 月 18日五子棋一、课题的介绍和课题的任务设计的课题名称:五子棋实现以下功能:功能1、模拟真实棋盘棋子功能2、模拟人与人对战下棋功能3、模拟实时胜负判断功能4、模拟棋局的存储与读取二、设计的要求具有动画功能(即图像能即时移动),能实现人与人进行简单的对玩,能实现简单的胜负判断三、系统的分析和系统中类的设计CWZQApp类作用:初始化应用程序及运行该程序的所需要的成员函数CWZQDoc类作用:存放应用程序的数据以及实现文件的保存,加载功能CMainFrame类作用:管理应用程序的窗口,显示标题栏,状态栏,工具栏等,同时处理针对窗口操作的信息CAboutDlg类作用:向导自动生成对话框类CWZQView类作用:管理视图窗口,在框架窗口中实现用户数据的显示和打印,存放添加的功能模块CWZQView类中的成员函数与数据成员:void Save(); //**** //保存文件void OnOpen() //打开文件void over(CPoint point);//**** //检查是否结束voidOnDraw(CDC* pDC) //画棋盘函数void OnLButtonUp(UINT nFlags, CPoint point)//模拟下棋函数HCURSOR hcursorwhite; //**** //两个鼠标HCURSOR hcursorblack; //****intwzq[19][19]; //**** //棋盘数组boolcolorwhite; //**** // colorwhite TRUE时白棋下,否则黑棋下CBitmapm_bmblack; //**** //棋子位图CBitmapm_bmwhite; //****void CWZQView::OnDraw(CDC* pDC) //构造棋盘,显示白棋以及黑棋GetDocument() //获取文档指针,在视图中显示文档内容CBrush //用于构造CBrush对象,然后传给需要画刷的CDC成员函数pDC->FillRect(myrect1,&mybrush1) // 画黑框线四、系统的实现及调试添加的功能:1.图标,光标以及位图的绘制程序运行开始鼠标在进入棋盘界面未放下棋子时变为类似棋子光标,此处需要描绘2种棋子光标:黑白鼠标Cursor以替换当前鼠标:IDC_CURSOR1 黑棋子IDC_CURSOR2 白棋子说明:由于下棋时我们必须把鼠标热点设置在中间,点击下图(图3-1-3)最右边按扭,然后把鼠标移动到图像中你想设置为热点的地方,按下鼠标左键。
五子棋课程设计实验报告
西南交通大学程序语言综合课程设计五子棋游戏课程《程序语言综合课程设计》学院信息科学与技术学专业软件工程姓名学号 20119050 日期 2016年月日目录第一章课程设计的目的和要求 (3)1.1 课程设计的目的 (3)1.2 课程设计的要求 (3)1.3 课程设计的实验环境 (3)第二章功能描述 (4)第三章总体设计 (5)3.1 功能模块设计 (5)3.1.1 任务执行流程图 (5)3.1.2 下棋函数流程图 (6)3.2 数据结构设计 (7)3.2.1 定义结构体 (7)3.2.2 定义数组 (7)3.2.3 全局变量 (7)3.3 函数功能描述 (7)第四章程序实现 (8)4.1源码分析 (8)4.2运行结果及界面介绍 (22)第五章后记 (27)第一章课程设计的目的和要求1.1 课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。
1.2 课程设计的要求1、编写程序代码,调试所写程序使其能够正确运行;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能1.3 课程设计的实验环境该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。
本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp软件环境:安装VC++6.0第二章功能描述本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。
五子棋实验报告
五子棋实验报告一、实验目的和要求1、能够用编程语言实现一个简单的五子棋程序2、在实际系统中使用、实现人工智能的相关算法3、进一步加深对人工智能算法的理解二、五子棋的基本常识与原理1、五子棋的起源五子棋,是一种两人对弈的纯策略型棋类游戏,亦称“串珠”、“连五子”;是中国民间非常熟知的一个古老棋种。
相传,它起源于四千多年前的尧帝时期,比围棋的历史还要悠久。
亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来。
五子棋发展于日本,流行于欧美。
容易上手,老少皆宜,而且趣味横生,引人入胜;不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。
传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为19X19,棋子放置于棋盘线交叉点上。
两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。
因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。
2、五子棋的基本常识与任何一种竞技棋一样,五子棋的每一局棋也分为三个阶段:开局,中局和残局。
五子棋的开始阶段称为开局,或称布局。
其开局阶段是十分短暂的,大约在七着与十几着之间。
在这一阶段的争夺中,双方的布局,应对将对以后的胜负起着极为关键的作用。
在开局阶段取得的形势好坏,主动与被动,先手与后手的优劣程度,往往直接影响中局的战斗。
因此积极处理好开局和开局向中局的过渡十分重要。
五子棋是从一至五,逐渐布子,发展连系,同时运用限制和反限制的智慧,在连子的过程中为自己的棋子争得相对的主动权和优势,逐步扩展优势,或者从劣势转化为优势,击溃对方的防线,最后连五取胜或抓禁手取胜或迫使对方投子认负。
3、五子棋比赛的相关规定(1) 职业连珠规则a. 黑方先下子,白后下,从天元开始相互顺序落子。
b. 最先在棋盘横向、竖向、斜向形成连续的相同色五个棋子的一方为胜。
c. 黑棋禁手判负,白棋无禁手。
黑棋禁手包括“三三”(包括“四三三”)、“四四”(包括“四四三”)、“长连”。
MFC-C++五子棋课程设计报告
课程设计成绩考勤成绩( %) 指导老师评语报告及程序成绩( %)总评成绩指导老师签名:《windows程序设计》课程设计报告学院(系):计算机科学与技术系班级:计专2班学生姓名:梁剑学号**********指导教师:时间:从2010 年1 月18 日到2010 年1 月22 日摘要1.能够利用所学的基本知识, 设计一个简单的五子棋序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。
②人机下棋时,计算机下棋算法的设计。
③人机下棋时,判断任一方获胜的算法的设计。
关键字:MFC编程,Windows程序目录项目一: 五子棋1 设计目的与要求 (1)1.1 设计目的 (1)1.2 设计内容 (1)1.3 设计要求 (1)2 设计环境或器材、原理与说明 (3)2.1 设计环境与器材 (3)2.2 原理与说明 (3)3 设计过程及程序代码 (6)3.1 服务器端设计 (6)3.1.1 界面设计 (6)3.1.2 人下棋设计 (8)3.1.3 电脑下棋设计 (8)3.1.4 搜索最优下棋点 (9)4 设计结果与分析 (21)4.1 设计结果 (21)4.2 设计分析 (22)5 设计体会与建议 (23)参考文献 (24)五子棋1 设计目的与要求1.1 设计目的1、进一步掌握利用Visual C++进行程序设计的能力;2、进一步理解和运用面向对象程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、理解Windows程序的运行过程;1.2设计内容能够利用所学的基本知识, 设计一个简单的学生信息管理应用程序,具有以下功能:①数据结构的设计;五子棋棋盘的绘制。
②人机下棋时,计算机下棋算法的设计。
③人机下棋时,判断任一方获胜的算法的设计。
1.3 设计要求整个程序使用winsocket 函数做网络数据收发,基于UDP协议。
可以直接使用Windows API编程(SDK编程),也可以使用MFC编程。
五子棋数据结构课程设计
五子棋数据结构课程设计一、课程目标知识目标:1. 让学生掌握五子棋的基本规则,理解五子棋棋盘的数据结构表示方法。
2. 学会使用数组或链表等数据结构存储和处理五子棋游戏过程中的各种信息。
3. 掌握五子棋游戏中的人工智能算法,了解其与数据结构的关系。
技能目标:1. 培养学生运用数据结构解决实际问题的能力,能独立设计五子棋游戏的数据结构。
2. 提高学生编程实践能力,能运用所学知识编写五子棋游戏的程序。
3. 培养学生团队协作能力,通过小组讨论、分工合作完成五子棋游戏的设计与实现。
情感态度价值观目标:1. 培养学生对五子棋游戏的兴趣,激发学习计算机科学的热情。
2. 培养学生面对问题积极思考、勇于探究的精神,提高克服困难的自信心。
3. 培养学生遵守游戏规则,养成良好的竞技道德品质。
课程性质:本课程为信息技术学科,以五子棋游戏为载体,让学生在学习数据结构的过程中,提高编程实践能力和问题解决能力。
学生特点:本课程面向初中学生,学生对五子棋游戏有一定了解,具备基本的计算机操作能力,对数据结构和编程有一定兴趣。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,充分调动学生的主观能动性,引导学生主动探索、合作交流,提高学生的综合运用能力。
在教学过程中,关注学生的学习成果,及时进行评估和反馈,确保课程目标的实现。
二、教学内容1. 五子棋游戏规则介绍:五子棋的基本玩法、胜利条件、棋盘布局等。
2. 数据结构基础知识回顾:数组、链表、栈、队列等基本数据结构的特点和应用。
3. 五子棋棋盘的数据结构表示:使用二维数组表示棋盘,存储黑白双方的棋子信息。
4. 五子棋游戏中的算法设计:- 人工智算法:极大极小值搜索、α-β剪枝等;- 数据结构在算法中的应用:如何利用数据结构提高算法效率。
5. 编程实践:- 设计五子棋游戏的数据结构;- 编写五子棋游戏的程序代码,实现人机对战功能。
6. 教学内容的安排与进度:- 第一课时:五子棋游戏规则介绍,回顾数据结构基础知识;- 第二课时:五子棋棋盘的数据结构表示,讲解人工智能算法;- 第三课时:编写五子棋游戏程序,实现人机对战功能;- 第四课时:学生展示作品,讨论优化方案,总结课程收获。
五子棋人机博弈实验报告
五子棋人机博弈实验报告目录一(课程设计目的............................................. 2 二(课程设计要求............................................. 2 三(课程设计内容............................................. 2 四(课程设计思想............................................. 2 五(系统实现 (2)设计平台 (2)数据结构设计 (3)程序流程图设计 (3)主要算法设计 (4)程序调试及运行结果.............................. 4 六(课程设计总结............................................. 5 七(参考资料................................................... 6 八(附录:五子棋博弈算法源代码 (7)1一( 课程设计目的通过上学期学习的《人工智能》学科,运用推理技术、搜索方法和决策规划和博弈树设计五子棋人机博弈系统,以此进一步深化对理论知识技术的了解,培养学生编程能力以及实践水平。
二(课程设计要求通过本次课程设计要求学生掌握以下内容:1.深入了解博弈树和alpha-beta剪枝算法。
2.设计出适合五子棋算法的启发式函数。
3.熟练掌握启发式的搜索方法。
三(课程设计内容本系统实现的是五子棋博弈算法,运用java语言实现了图形用户界面,方便用户使用。
算法采用了博弈算法和启发式函数进行搜索,人机对弈可自动判断输赢,结束后可重新开局。
四(课程设计思想本系统实现的是五子棋博弈算法,为了方便用户的使用,采用的是java图形用户界面技术。
为了记录棋盘的每一个下棋点,定义数组array[19][19]。
“Java程序设计”——“五子棋”综合实验报告
“Java程序设计”综合实验报告一、前言1、项目背景通过五子棋这个课程设计。
可以让我们更加熟悉Java程序设计这门课程,加强对Eclipse这个软件的使用,加深对Java语言的掌握,提高编程水平。
同时培养能力,为将来的工作打下坚实的基础。
2、目标和意义目标:锻炼我们的能力,提高组中每一个人对Java语言的认识,培养编程兴趣。
让每一个人都能参与进来,提高团队合作意识。
意义:通过编写综合类的程序,运用已经学过的知识,和自主学习一些新的知识,提高了学习能力,掌握了一些自主学习的方法。
3、开发分工及进度安排二、功能分析1、主要模块本项目主要分为3个大的模块,分别为整体布局;界面绘制;与对战的算法。
由于游戏规则的设置,这里的游戏模式分为人机对战和人人对战。
黑白双方依次落子,由黑子先下,当任意一方在棋盘上形成横向,竖向,斜向连续五个相同颜色的棋子的一方获胜。
主要功能①实现在2种模式下五子棋的游戏。
②实现通过鼠标的点击位置放置棋子,达到下棋的目的。
③实现游戏玩家对游戏模式的自主选择。
④实现对在每种游戏模式下的黑子先手下棋的规定,先达到5子即为胜利。
三、关键功能的设计与实现1、数据结构与算法数据结构:项目中主要数据结构为二维数组。
用于存储棋盘上棋子的信息,和保存棋型表。
主要算法:(一)iswin()函数:用来判断输赢,通过鼠标事件所得到的点或者电脑下的点的坐标,来扫描该点八个方向的相邻的相同棋子数,上下,左右,斜左上下,斜右上下为四组,任意一组等于5即为胜利,由于本程序没有考虑禁手原则,只考虑了民间规则,所以大于5也为胜利。
public int iswin1(int x, int y, int heqi) {int k, s1, s2, s3, s4, s5, s6, s7, s8;s1 = 0;s2 = 0;s3 = 0;s4 = 0;s5 = 0;s6 = 0;s7 = 0;s8 = 0;if (heqi == 256)return -1;for (k = 1; k < 5; k++) {if (y + k < 16 && qipanqizi[x][y + k] == qipanqizi[x][y])s1++;elsebreak;}for (k = 1; k < 5; k++) {if (y - k > -1 && qipanqizi[x][y - k] == qipanqizi[x][y])s2++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y + k < 16&& qipanqizi[x + k][y + k] == qipanqizi[x][y]) s3++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y - k > -1&& qipanqizi[x - k][y - k] == qipanqizi[x][y]) s4++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && qipanqizi[x + k][y] ==qipanqizi[x][y])s5++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && qipanqizi[x - k][y] ==qipanqizi[x][y])s6++;elsebreak;}for (k = 1; k < 5; k++) {if (x - k > -1 && y + k < 16&& qipanqizi[x - k][y + k] == qipanqizi[x][y]) s7++;elsebreak;}for (k = 1; k < 5; k++) {if (x + k < 16 && y - k > -1&& qipanqizi[x + k][y - k] == qipanqizi[x][y]) s8++;elsebreak;}if (s1 + s2 >= 4 || s3 + s4 >= 4 || s5 + s6 >= 4 || s7 + s8 >= 4) {return 1;} elsereturn 0;}(二)人机对战通过对整个棋盘上每一个点的扫描,获得了电脑和玩家的棋型表,表中数据为该点的权值。
C#课设报告书—游戏五子棋
(2)添加悔棋一步按钮,当一方想要悔棋时可以单击此按钮,则之前下的那步棋被撤 销。
(3)当有一方横向,纵向或斜向有连续的五子连成一线时,那一方获胜。 (4)当有一方点击重新开局这一子菜单项时,则将重新开始一盘棋。 (5)一方下一步棋则步数增一,一方悔棋一步则步数减一。 (6)在游戏中,会显示当前的系统时间,也可以根据用户需求隐藏起来。
和退出两个子菜单,在“帮助”菜单项中有关于五子棋、技术支持、隐藏\显示时间和屏保 四个子菜单。
(2)主窗体设计
控件及相应属性如表 1 所示。
表 1 编辑控件属性
控件名
属性
属性值
Label1
BackColor Location
ControlDark 12,35
Label1
Label1 控件名 Label3 Label4
课程设计说明书
NO.1
·
五子棋
1 设计目的
五子棋游戏不仅能增强人们的抽象思维能力、逻辑推理能力、空间想象力,提高人们 的记忆力、心算能力等,而且深含哲理,有助于修身养性。五子棋既有现代休闲方式所特 有的特征“短、平、快”,又有中国古典哲学所包含的高深学问“阴阳易理”。它既有简 单易学的特点,为人民群众所喜闻乐见,又有深奥的技巧;既能组织举办群众性的比赛、 活动,又能组织举办高水平的国际性比赛;它的棋文化源渊流长,具有东方的神秘和西方 的直观,它是中西方文化的交融点,也是中西方文化交流的一个平台。
7 每轮不得超时 30s!!!
True Gray 522,398 99,38
7 每轮不得超时 30s!!!
退出游戏 417, 398
(完整版)数据结构毕业课程设计-五子棋
姓名:刘旭学院:计算机与通信学院班级:通信工程101班指导老师:文志诚目录一、需求分析 (3)1.1 开发背景 (3)2.2 功能简介 (3)二、系统设计 (4)2.1 函数一览 (4)2.2 “封面”的设计 (4)2.3 二维数组与控制台 (5)2.4 键盘操作 (6)2.5判定 (7)2.6 悔棋的实现 (8)三、调试运行 (9)3.1 进入界面 (9)3.2 棋盘的初始状态 (10)3.3 激战中...... .. (10)3.4 游戏结束 (11)四、解决问题的关键 (11)五、课设总结 (11)六、附录 (12)6.1 画图代码 (12)6.2 初始化 (14)6.3 Play函数 (14)一、需求分析1.1开发背景学习了数据结构该门课程,对于枯燥无味的理论知识,我们是否能够通过所学的知识在课程设计中做出有趣味东西,然后让我们对于数据结构更加的感兴趣呢?于是我和我的室友陈明建开始酝酿着写些什么东西。
上个学期就已经写了通讯录那之类的链式结构,这次我们决心有所改变,我们学习了栈、队列、树、图,字典树有人选了,我们就来写一个基于图的小程序,五子棋,对,图的简单应用,于是我们开始着手来写这个小小的程序,祝我们好运!2.2 功能简介既然是五子棋,我们要做的是时时刻刻的将整个图(以下称为棋局)的状态呈现出来,那么界面就是必不可少的。
MFC不会?没关系,我们就用基于控制台的字符输出来构建这个棋局吧,当然这只是第一步,详细如下:○1拥有一个良好的进入界面,以及必要的选项;○2拥有一个二维的数组来记录和更新实时的状态,并且能够有一种方法在DOS界面下绘制出整个棋局的实时状态(包括棋盘和棋子);○3能够通过键盘上的按键完成所选位置的移动和选定操作;○4能够在每一次的走棋后判定是否游戏结束(棋盘走满或者是一方胜出);○5能够完成悔棋的功能,并保证这之间的棋局绘图能够与二维数组数据同步,做到真正意义上的悔棋。
五子棋c课程设计
五子棋c课程设计Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】目录第一章:课程设计目的和要求 (2)1.1数据结构课程设计的目的 (2)1.2数据结构课程设计实现的要求 (2)第二章:课程设计任务内容 (3)2.1五子棋对弈系统 (3)第三章:详细设计说明 (4)3.1功能设计 (4)3.2五子棋对弈系统流程图 (4)3.3软件中实现各项功能的函数与程序代码 (5)第四章:程序运行环境说明 (10)4.1程序运行环境说明及出现的问题 (10)4.2运行结果 (10)第五章:课程设计心得与体会 (14)附录 (15)源程序: (16)五子棋第一章课程设计目的和要求1.1数据结构课程设计的目的进一步培养结构化程序设计的思想,加深对高级系统语言基本语言要素和控制结构的理解,针对数据结构中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。
此课程设计着眼于知识的运用,把平常学的知识运用到课程实践中来,本身就是考察我们知识运用能力。
要求熟悉运用一些编程软件,对我们所学的理论知识进一步的深化。
1.2数据结构课程设计实现的要求使用C++语言编写一个基于控制台的简单程序,使学生掌握简单的程序设计技巧。
同时设计一个简单的五子棋对弈系统,可以实现五子棋的基本功能,是一款娱乐用的小型程序。
第二章课程设计任务内容2.1五子棋对弈系统设计一个五子棋系统程序,实现对五子棋进行运行。
基本要求:五子棋是有两个人在一盘棋上进行对抗的竞技活动。
在对局开始时,先由用户选择哪方开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围交叉点上落子,如此轮流落子,知道某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方程就算获胜。
此时算法结束,当有任何一方退时出,都可在算法中实现。
第三章详细设计说明3.1功能设计(1)由两个玩家分别下棋,当某一玩家五子相连,则赢。
五子棋游戏实践报告
计算机实习报告姓名:班级:学号:小班序号:指导老师:题目:五子棋游戏平台:MFC基于对话框程序邮箱:五子棋游戏实验报告一.功能说明1.1总体功能说明五子棋是一种两人对弈的纯策略型棋类游戏,起源于中国古代的传统黑白棋种之一。
本次实验,我设计的是人机对弈游戏,棋盘规格为14*14,棋子放置于方格内,当某一方有五个棋子连成一条直线时,即为获胜者。
游戏者在完成一局后可以在界面上选择重新开始进行下一次游戏。
1.2用户界面该界面可以为游戏界面,可直接点击开始进行五子棋游戏,游戏者开始可以点击任意方格放置第一枚棋子,计算机也会随之放置棋子的,游戏会随着游戏者和计算机交替下棋而进行的。
游戏结束后,可以选择重新开始进行下一轮游戏,也可以点击结束离开游戏界面。
1.3使用方法通过在某一点点击鼠标选择你想要放置棋子的位置,来达到五子连珠的效果。
一局结束后,游戏者可以选择重新开始进行下一次游戏。
二.程序设计说明2.1 总体设计框架工程项目的主要框架式基于基于对话框的MFC平台,当工程创建成功之后,基类CDialog和派生类类CAboutDlg,CMyDlg已经创建成功。
从整个程序上来看可以分成以下几个主要的板块。
一,游戏机界面的设计:通过创建了按钮并设置属性来完成按钮所实现的功能。
二,实现加载位图和相应鼠标点击来设计游戏画面:通过CBitmap函数来加载bmp图片素材,当鼠标指向棋盘内显示手拿黑白棋子的位图,游戏者通过点击鼠标左键来放置棋子。
三,找出所有五子连珠的结果,并用数组标记出来。
四,计算计算机放置棋子的位置:通过评定计算机和游戏者的赢得可能性谁比较大,来选定计算机是防守还是进攻;然后计算计算机的最佳落子点,即权值最大点。
五,显示游戏界面:每当放置一个棋子,如果双方都没有赢,就显示当前页面。
如果任意一方获胜,则停止游戏,成一条线的棋子显示为红色,弹出对话框显示游戏结束。
程序执行流程:2.2 关键算法描述算法1:设置鼠标左键单击落下棋子。
c++五子棋课程设计报告
福建农林大学计算机与信息学院课程设计报告课程名称:面向对象程序设计课程设计课程设计题目:五子棋姓名:系:计算机专业:软件工程年级:学号:指导教师:职称:年月日福建农林大学计算机与信息学院计算机类课程设计报告结果评定目录1.设计目的 (4)2.设计要求 (4)3.设计方案 (4)4.设计内容 (7)4.1系统的主要结构和类结构 (7)4.2(2)五子棋类的结构 (7)4.3⑶系统工作流程介绍 (7)4.4⑷类的介绍 (8)4.5(5)各个模块的介绍 (8)4.6(6)程序运行图示 (14)5.总结 (16)参考文献 (17)(a)1.设计目的(1)加深我对面向对象程序基本的理解和掌握。
(2)熟练掌握基本流程图的绘制。
(3)熟练visio的一些操作方法。
(4)能够在调试程序中快速发现并排除程序中的错误。
(5)提高面向对象程序语言解决实际中的问题的能力。
(b)2.设计要求五子棋是玩家在游戏棋盘上逐个输入黑子或白子的坐标,因此游戏要求在DOS界面生成一个可供操作的棋盘。
通过输入坐标完成对应落子情况,在输入过程中判断落子是否正确、是否有一方胜利等情况。
编写代码可以在VC6.0下编译通过。
游戏要能实现五子棋游戏的简单操作。
程序中要体现面向对象思想。
(c)3.设计方案(必须包含系统功能说明、用例图和类图)一、用例图落子基于用户的用例图步数用例图系统用例图1)输出棋盘界面菜单及图像2)开始进入控制3)黑白棋正确输入格式控制4)判断黑白输赢控制5)正确计数对羿步数及下一步所要走的棋盘界面二、类图(d)4.设计内容⑴本系统的主要结构和类结构1)五子棋功能实现的主要结构函数void getpointxy();//白棋出子函数void getpointmn();//黑棋出子函数void showqipan();//实现20行20列正方形界面输出void print();//输出下一棋盘界面及计数bool IsxyWin();//白棋获胜bool IsmnWin();//黑棋获胜void menu();//显示开始菜单界面(2)五子棋类的结构class five{int x,y,m,n,num_xy,num_mn;char qipan[20][20];//定义20行20列的数组public:five(int X=0,int Y=0,int M=0,int N=0,int Num_xy=0,int Num_mn=0)//构造函数初始化{x=X;y=Y;m=M;n=N;num_xy=Num_xy;num_mn=Num_mn;for(int i=0;i<20;i++)//输出20行20列的棋盘界面{for(int j=0;j<20;j++)qipan[i][j]='.';}}⑶系统工作流程介绍。
数据结构课程设计实验报告五子棋
湖南科技学院实验报告系部:计算机与通信工程系专业:软件工程姓名:范清文学号:201008003113班级:软件1001班课程名称:数据结构程序课程设计指导老师:卿武明实验项目:制作简单的五子棋课程设计目的:1:对本学期所学的专业知识进行实践运用2:制作五子棋并实现它的图示化实验环境:Visual C++6.0实验内容(算法、程序、步骤和方法):#include<iostream>#include<conio.h>using namespace std;int x,y,Step=0;bool flag=0;char Switch;char map[20][20][3]={ {"┌","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┐"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"└","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┘"}}; char copymap[20][20][2];float Player[20][20][1];int Table[20][20] ,Showboard(),Play(),Interface(),Initboard(),Judgewin(),Deuce() ,Initdata();bool legal(),Overflow();int Interface(){char a;cout << "\n\n五子棋\n \t\t─\n 制作人:范清文(201008003113)\n\t\t────\n";cout << " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;cout << " ~~ ~~" << endl;cout << " ~~ 1:人人对战~~" << endl;cout << " ~~ ~~" << endl;cout << " ~~ 2:退出~~" << endl;cout << " ~~ ~~" << endl;cout << " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;cout << "\n 请选择:";cin >> a;if(a=='2'){cout << "\n谢谢使用!\n";cout << "按任意键退出!";getch();return 0;}if(a=='1'){Play();}return 0;}int Deuce(){for(int i=0;i<20;i++)for(int j=0;j<20;j++)if(Table[i][j]==0)return 0;return 1;}int Initboard(){Step=0;for(int i=0;i<20;i++)for(int j=0;j<20;j++){map[i][j][0]=copymap[i][j][0];map[i][j][1]=copymap[i][j][1];}return 0;}int CopyB(){for(int i=0;i<20;i++)for(int j=0;j<20;j++){copymap[i][j][0]=map[i][j][0];copymap[i][j][1]=map[i][j][1];}return 0;}int Judgewin(){int cx,cy,dx,dy;char a0=-95;char a1=-16;if(flag==0){a1=-15;}cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cx--;cy--;if(cx<0||cy<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1) {dx++;dy++;if(dx>15||dy>15) break;}if(dx>=(cx+6)||dy>=(cy+6)) return 1;cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cx--;if(cx<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1){dx++;if(dx>15) break;}if(dx>=(cx+6)) return 1;cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cy--;if(cy<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1){dy++;if(dy>15) break;}if(dy>=(cy+6)) return 1;cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cx++;cy--;if(cx>15||cy<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1){dx--;dy++;if(dx<0||dy>15) break;}if(cx>=(dx+6)||dy>=(cy+6)) return 1;return 0;}int Showboard(){system("CLS");cout << " ";for(int s=1;s<=20;s++){if(s>=10) cout << s<< "";else cout << s << " ";}cout << endl;for(int i=0;i<20;i++){printf("%2d",i+1);for(int j=0;j<20;j++)cout << map[i][j];if(i==6) cout << "退出:输入: 0 0 ";if(i==8) cout << "步数(Step):" << Step;if(i==10) cout << "请输入棋子的纵坐标、横坐标下子!" ;cout << endl;}return(1);}bool legal(){if((map[x-1][y-1][0]==-95&&map[x-1][y-1][1]==-16)||(map[x-1][y-1][0]==-95&&map[x-1][y-1][1]==-15)) return 0;elsereturn 1;}bool Overflow(){if(x>20||x<1||y>20||y<1){cout << "此位置不合法!请重新输入:";return 1;}elsereturn 0;}int Play(){Showboard();cout << "白方下:";while(cin >> x >> y){if(x==0&&y==0){Initboard();Interface();break;}if(Overflow()) continue;if(legal()){x--;y--;map[x][y][0]=-95;if(flag==1){map[x][y][1]=-16;Step++;Showboard();Deuce();if(Judgewin()){cout << "\n黑方胜利了!\n" ;cout << "游戏结束!再来一局?(y/n)";cin >> Switch;if(Switch!='n'){Initboard();Play();}else return 1;}cout << "白方下:";flag=0;}else{map[x][y][1]=-15;Step++;Showboard();Deuce();if(Judgewin()){cout << "\n白方胜利了!" << endl;cout << "游戏结束!再来一局?(y/n)";cin >> Switch;if(Switch!='n'){Initboard();Play();}else return 1;}cout << "黑方下:";flag=1;}}else{cout << "此位置已有子!请重新输入:";}}return 0;}void main(){CopyB();Interface();}数据记录与结果:课程设计结论:程序运行的很成功。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南科技学院实验报告系部:计算机与通信工程系专业:软件工程姓名:范清文学号:201008003113班级:软件1001班课程名称:数据结构程序课程设计指导老师:卿武明实验项目:制作简单的五子棋课程设计目的:1:对本学期所学的专业知识进行实践运用2:制作五子棋并实现它的图示化实验环境:Visual C++6.0实验内容(算法、程序、步骤和方法):#include<iostream>#include<conio.h>using namespace std;int x,y,Step=0;bool flag=0;char Switch;char map[20][20][3]={ {"┌","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┬","┐"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"├","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┼","┤"}, {"└","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┴","┘"}}; char copymap[20][20][2];float Player[20][20][1];int Table[20][20] ,Showboard(),Play(),Interface(),Initboard(),Judgewin(),Deuce() ,Initdata();bool legal(),Overflow();int Interface(){char a;cout << "\n\n五子棋\n \t\t─\n 制作人:范清文(201008003113)\n\t\t────\n";cout << " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;cout << " ~~ ~~" << endl;cout << " ~~ 1:人人对战~~" << endl;cout << " ~~ ~~" << endl;cout << " ~~ 2:退出~~" << endl;cout << " ~~ ~~" << endl;cout << " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;cout << "\n 请选择:";cin >> a;if(a=='2'){cout << "\n谢谢使用!\n";cout << "按任意键退出!";getch();return 0;}if(a=='1'){Play();}return 0;}int Deuce(){for(int i=0;i<20;i++)for(int j=0;j<20;j++)if(Table[i][j]==0)return 0;return 1;}int Initboard(){Step=0;for(int i=0;i<20;i++)for(int j=0;j<20;j++){map[i][j][0]=copymap[i][j][0];map[i][j][1]=copymap[i][j][1];}return 0;}int CopyB(){for(int i=0;i<20;i++)for(int j=0;j<20;j++){copymap[i][j][0]=map[i][j][0];copymap[i][j][1]=map[i][j][1];}return 0;}int Judgewin(){int cx,cy,dx,dy;char a0=-95;char a1=-16;if(flag==0){a1=-15;}cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cx--;cy--;if(cx<0||cy<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1) {dx++;dy++;if(dx>15||dy>15) break;}if(dx>=(cx+6)||dy>=(cy+6)) return 1;cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cx--;if(cx<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1){dx++;if(dx>15) break;}if(dx>=(cx+6)) return 1;cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cy--;if(cy<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1){dy++;if(dy>15) break;}if(dy>=(cy+6)) return 1;cx=x;cy=y;dx=x;dy=y;while(map[cx][cy][0]==a0&&map[cx][cy][1]==a1){cx++;cy--;if(cx>15||cy<0) break;}while(map[dx][dy][0]==a0&&map[dx][dy][1]==a1){dx--;dy++;if(dx<0||dy>15) break;}if(cx>=(dx+6)||dy>=(cy+6)) return 1;return 0;}int Showboard(){system("CLS");cout << " ";for(int s=1;s<=20;s++){if(s>=10) cout << s<< "";else cout << s << " ";}cout << endl;for(int i=0;i<20;i++){printf("%2d",i+1);for(int j=0;j<20;j++)cout << map[i][j];if(i==6) cout << "退出:输入: 0 0 ";if(i==8) cout << "步数(Step):" << Step;if(i==10) cout << "请输入棋子的纵坐标、横坐标下子!" ;cout << endl;}return(1);}bool legal(){if((map[x-1][y-1][0]==-95&&map[x-1][y-1][1]==-16)||(map[x-1][y-1][0]==-95&&map[x-1][y-1][1]==-15)) return 0;elsereturn 1;}bool Overflow(){if(x>20||x<1||y>20||y<1){cout << "此位置不合法!请重新输入:";return 1;}elsereturn 0;}int Play(){Showboard();cout << "白方下:";while(cin >> x >> y){if(x==0&&y==0){Initboard();Interface();break;}if(Overflow()) continue;if(legal()){x--;y--;map[x][y][0]=-95;if(flag==1){map[x][y][1]=-16;Step++;Showboard();Deuce();if(Judgewin()){cout << "\n黑方胜利了!\n" ;cout << "游戏结束!再来一局?(y/n)";cin >> Switch;if(Switch!='n'){Initboard();Play();}else return 1;}cout << "白方下:";flag=0;}else{map[x][y][1]=-15;Step++;Showboard();Deuce();if(Judgewin()){cout << "\n白方胜利了!" << endl;cout << "游戏结束!再来一局?(y/n)";cin >> Switch;if(Switch!='n'){Initboard();Play();}else return 1;}cout << "黑方下:";flag=1;}}else{cout << "此位置已有子!请重新输入:";}}return 0;}void main(){CopyB();Interface();}数据记录与结果:课程设计结论:程序运行的很成功。