基于C语言的五子棋程序毕业课程设计报告

合集下载

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语言五子棋课程设计

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五子棋实验报告篇一:五子棋对战实验报告实验项目五子棋网络对战和聊天实验日期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并且对其添加单击事件以及鼠标事件,可以实现文本的剪贴、复制粘贴等功能。

c 五子棋实验报告

c  五子棋实验报告

c 五子棋实验报告
C五子棋实验报告
引言
五子棋是一种古老的策略游戏,它既考验了玩家的思维能力,又具有很高的娱乐性。

在本次实验中,我们将利用C语言编程,设计一个简单的五子棋游戏,并对其进行实验测试。

实验目的
1. 学习使用C语言进行游戏开发;
2. 设计并实现一个简单的五子棋游戏;
3. 对游戏进行功能测试和性能评估。

实验方法
1. 使用C语言编写五子棋游戏的程序代码;
2. 设计游戏界面和用户交互功能;
3. 实现游戏规则和胜负判定功能;
4. 进行功能测试和性能评估。

实验结果
经过实验,我们成功地设计并实现了一个简单的五子棋游戏。

游戏具有清晰的界面和简单的操作方式,玩家可以轻松上手。

在功能测试中,游戏能够正确判定胜负,且没有出现明显的bug。

在性能评估中,游戏在常见的操作系统上都能够流畅运行,响应速度较快。

实验结论
通过本次实验,我们学习到了使用C语言进行游戏开发的基本方法和技巧。


们成功地设计并实现了一个简单的五子棋游戏,并对其进行了功能测试和性能
评估。

实验结果表明,我们的游戏具有良好的稳定性和性能表现,能够满足玩
家的基本需求。

展望
在未来,我们可以进一步完善游戏的功能和界面设计,增加更多的游戏模式和
挑战性。

我们也可以考虑将游戏移植到其他平台上,以提供更广泛的游戏体验。

同时,我们还可以利用更先进的技术和算法,进一步优化游戏的性能和用户体验。

总之,我们将继续努力,不断改进和完善我们的五子棋游戏,为玩家提供
更好的游戏体验。

c课程设计五子棋游戏

c课程设计五子棋游戏

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

c课程设计五子棋游戏

c课程设计五子棋游戏

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

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

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

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

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

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

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

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

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

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

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

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

c语言程序的设计五子棋

c语言程序的设计五子棋

伊犁师学院高级语言课程设计报告学院:电子与信息工程学院学生:学号:专业届别:指导教师:完成时间:五子棋游戏1 设计目的及要求目的:(1)学习综合运用C语言课程和其他相关课程的知识,提高分析解决实际问题的能力,进一步巩固、加深和拓宽所学的知识,进一步加强结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。

(2)全面系统的学习面向对象程序设计的基本概念、基本语法和编程方法,与同学合作设计整套程序,并且独立完成一定工作量的程序设计.(3)掌握程序设计中的常用算法和C语言的程序技巧,培养良好的程序设计风格。

(4)运用所学的知识了解五子棋游戏的制作结构,将所学的知识运用于实践中。

要求:(1)独自设计、编制、调试出一款五子棋游戏。

(2)要求该游戏具有趣味性和可操作性,能够正常运行。

其中用到C语言中的各种语句、结构。

(如其中需要注意全局变量和局部变量的申明,数组的使用等)(3)五子棋游戏要求能够进入欢迎界面,当有五颗相同颜色的棋子连续连成五颗,就胜出。

任务:五子棋是一种传统的棋盘游戏,是我国古代传统的黑白棋种之一发展于日本,流行于欧洲任务容就是设计一款老少皆宜、能够锻炼个人策略谋划能力棋。

有助于孩子开发智力,或者闲暇时打发时间。

原则:(1)系统性。

系统作为统一整体而存在,因此,在设计中,要从系统的角度考虑。

系统的代码要统一,传递语言要尽可能一致。

(2)可靠性。

可靠性是指系统抵御外界干扰的能力及外界干扰时的恢复能力。

(3)规性。

游戏的运用以吸引玩家的乐趣为前提,一方面,系统设计应尽量避免不必要的复杂化,另一方面模块应尽量简洁,以缩短处理流程。

2 开发工具C语言3 应用平台Windows xp4 功能设计游戏分析:五子棋是两人之间的竞技游戏,该五子棋程序基本上实现了五子棋游戏的功能,有双方下棋之前的欢迎界面及下棋过程中的棋盘界面,还有最终会判断出输赢。

同时,该游戏采用了二维坐标实现的,明了易懂,方便玩家在游戏过程中的基本操作,使游戏更加简便。

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

(此文档为WORD格式,下载后您可任意编辑修改!)石家庄铁道学院课程设计基于C语言的五子棋程序课程设计单位:数0901分院(系)专业:数学与应用数学学号:学生姓名:许晓倩指导教师:石玉晶完成日期 2010年 07月 14日摘要本程序是一款棋类益智游戏程序,与五子棋游戏相近,是由C语言编写的可在WINDOWS 系统下运行的娱乐游戏平台。

该程序面向广大棋类游戏的爱好者,能够提供方便,实现基本智能控制的游戏环境。

本程序可以实现人人对战,用户可以根据需要自行选择不同维数的棋盘。

对战中,为方便双方棋手,采用键盘上的上下左右键控制棋子的上下左右移动,由空格键控制下棋,双方都可通过ESC键终止游戏。

游戏开始后,红、白双方轮流下棋,程序会根据双方下棋的先后顺序自动显示不同颜色的棋子,提示当前下棋的棋手,任何一方由三子连成一线时,游戏结束,结束时会显示对战双方胜负情况。

关键词:五子棋游戏应用程序,C语言,图形函数。

目录1.选题的意义42.系统功能需求分析2.1设计思想-52.2功能模块-52.3流程图说明63.系统设计---73.1流程图---73.2数据结构-73.3中心算法代码说明v4.系统实现---94.1程序代码--94.2系统使用--244.3运行效果说明45.总结5.1设计收获--255.2存在的主要问题5.3参考文献--25第1章选题的意义总的来说,通过五子棋的设计,能使我掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能并熟悉分支、循环、数组、函数等的综合运用。

这次课程设计我们在学习了C语言之后第一次一个人设计程序,以前在完成作业时虽然也写程序,但当时的程序通常都是很短的,涉及到的知识点也通常比较单一。

这次的课程设计则是对我们这半年学习的C语言的中分支、循环、数组、函数等知识的综合运用,也是对我们所学知识的一个综合考察。

在运用这些知识的时候也锻炼了软件开发所需要的问题分析、系统设计、程序编码、测试等基本方法和技能,为我们以后从事软件开发打下基础。

另外,在这个五子棋游戏的设计过程中还会涉及到我们在C语言课堂上没有涉及到的图形设计,这又未尝不是一个学习新知识的好机会。

我希望自己通过查阅资料,在编写程序,调试程序的过程中,独立掌握这一知识,并将它正确运用到我的程序中来。

其次,五子棋是一款非常简单的棋类游戏,我从小学六年级就就开始玩五子棋,那时候用的还是自己画的棋盘,到大学有了更多的充裕时间,我开始经常的玩QQ游戏中的五子棋,对五子棋浓厚的兴趣使我在看到这一课题的时候马上选择了它,虽然五子棋游戏的应用程序已经普遍,但身为棋迷的我希望将自己所学的知识应用到五子棋游戏中,设计出一款我自己的五子棋。

第2章系统功能需求分析2.1 设计思想该系统为五子棋应用程序的简版,功能上要求玩家可以自己选择3到9维的棋盘,玩家通过键盘上的上下左右键来实现棋子的移动,通过空格键输入棋子,每一步都可以通过ESC键,退出游戏,当一方三子连成一线时,这一方赢棋,并结束游戏。

2.2 功能模块分析:程序总共包括5个模块,分别是初始化棋盘模块,判断结果模块,键盘功能控制模块,流程控制模块。

初始化棋盘模块:该模块的主要功能是根据玩家的选择初始化棋盘维数。

键盘功能控制模块:该模块根据玩家输入的上下左右键来控制棋盘上棋子的移动,根据enter键控制棋子的输入。

判断结果模块:该模块的功能是根据玩家输入的棋盘上的棋子,判定是否某一方存在三子连成一线。

游戏控制模块:该模块用来控制游戏的开始,在任意阶段任一方按ESC结束游戏,任一方三子连成一线,该方赢棋,输出结果,结束游戏。

流程控制模块:控制整个程序的运行,包括开始,结束以及各个模块的运行顺序各个函数之间的调用。

2.3功能结构图第3章系统设计3.1 流程图ESCESCESCESC按任意键是否3.2 数据结构程序在windows界面中建立坐标系,棋盘初始点x1,y1,x2,y2,棋盘维数n,棋格宽度规定为120,以step_x,step_y,为棋子小坐标乘以棋盘宽度后为棋子坐标。

3.3 中心算法代码说明程序要求使用者自己输入棋盘维数为实现这一功能,主函数中使用语句printf(“Please choose a qipan between 3 and 9:”);使用者输入数字后,使用语句scanf(“%d”,&n);再调用函数printf_qipan(int n)。

printf_qipan(int n)中,建立一个图形窗口,建立坐标系,以n为变量,输出3到9维棋盘。

程序要求使用者能够通过键盘来控制棋子的移动和输入,judge_key(intx,int y)设置了键盘功能。

通过定义#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920将键转化为C语言可以读取的字符,通过调用函数judge_key(int x,int y),按上下左右键,对应位置输出对应色圆环,前一位置画背景颜色圆环,覆盖红或白圆环,达到棋子的移动的效果;按空格键画实心圆,并根据step_x,step_y 的取值取得此时的棋子坐标的坐标;按ESC结束程序。

程序中规定某一方有三个字连成一线时,这一方赢棋。

函数judge_result(int x,int y,int n)用来判断哪方赢棋,在每次输入空格键后,调用此函数,分别查看这一位置的上下左右斜方向上和这一棋子颜色相同的棋子是否有三个,若有,该方赢棋,然后输出结果,结束程序,若没有,继续游戏。

第4章系统实现4.1 程序代码源程序代码为#include<stdio.(int n);void printf_qizi(int x,int y);void change();void judge_who(int x,int y);void judge_key(int n);int judge_result(int x,int y,int n);void attentoin();void attention(){char ch;window();textbackground(WHITE);textcolor(BLACK);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? [YN]:");while(1){gotoxy(60,20);ch=getchar();if(ch=='Y'||ch=='y')break;else if(ch=='N'||ch=='n'){window();textbackground(WHITE);textcolor(BLACK);clrscr();exit(0);}gotoxy(51,12);printf(" ");}}void printf_qipan(int n){int x1,x2,y1,y2 ;setbkcolor(BLUE);setcolor(RED);gotoxy(5,2);printf("Left, Right, Up, Down KEY to move, Space to put, ESC-quit."); for(x1=1,y1=1,y2=n;x1<=n;x1++)line((x1+JZ)*CELL,(y1+JS)*CELL,(x1+JZ)*CELL,(y2+JS)*CELL); for(x1=1,y1=1,x2=n;y1<=n;y1++)line((x1+JZ)*CELL,(y1+JS)*CELL,(x2+JZ)*CELL,(y1+JS)*CELL); for(x1=1;x1<=n;x1++)for(y1=1;y1<=n;y1++)box[x1][y1]=0 ;}void printf_qizi(int x,int y){if(flag==1){setcolor(RED);setlinestyle(SOLID_LINE,0,1);x=(x+JZ)*CELL;y=(y+JS)*CELL;circle(x,y,r);setfillstyle(1,RED);sector(x,yr,r);}if(flag==2){setcolor(WHITE);setlinestyle(SOLID_LINE,0,1);x=(x+JZ)*CELL;y=(y+JS)*CELL;circle(x,y,r);setfillstyle(1,WHITE);sector(x,yr,r);}}void judge_key(int n){int i ;int j ;switch(key){case LEFT :{if(step_x-1<1)break ;else{for(i=step_x-1,j=step_y;i>=1;i--)if(box[i][j]==0){circle(step_x,step_y,r);break ;}if(i<1)break ;step_x=i ;judge_who(step_x,step_y);setcolor(BLUE);circle((step_x+1+JZ)*CELL,(step_y+JZ)*CELL,r); break ;}case RIGHT :if(step_x+1>n+1)break ;else{for(i=step_x+1,j=step_y;i<n;i++)if(box[i][j]==0)circle(step_x,step_y,r);break ;}if(i>n+1)break ;step_x=i ;judge_who(step_x,step_y);setcolor(BLUE);circle((step_x-1+JZ)*CELL,(step_y+JZ)*CELL,r); break ;}}case DOWN :if(step_y+1>n+1)break ;else{for(i=step_x,j=step_y+1;j<=n;j++)if(box[i][j]==0){circle(step_x,step_y,r);break ;}if(j>n)break ;step_y=j ;judge_who(step_x,step_y);setcolor(BLUE);circle((step_x+JZ)*CELL,(step_y-1+JZ)*CELL,r); break ;case UP :if(step_y<-3)break;else{for(i=step_x,j=step_y-1;j>=-2;j--)if(box[i][j]==0){circle(step_x,step_y,r);break ;}if(j<0)break ;step_y=j ;judge_who(step_x,step_y);setcolor(BLUE);circle((step_x+JZ)*CELL,(step_y+1+JZ)*CELL,r);break ;}case ESC :break ;case SPACE :if(step_x>0&&step_x<=n+2&&step_y>=0&&step_y<=n+2) {if(box[step_x][step_y]==0){printf_qizi(step_x,step_y+1);box[step_x][step_y]=flag ;if(judge_result(step_x,step_y,n)==1){gotoxy(30,4);if(flag==1){setbkcolor(BLACK);cleardevice();setviewport(380,1);*定义一个图形窗口*setfillstyle(1,2);*绿色以实填充*setcolor(RED);rectangle();floodfill();setcolor(12);settextstyle(1,0,5);*三重笔划字体, 水平放?5倍* outtextxy(20,20,"The RED Win !"); setcolor(15);settextstyle(3,0,5);*无衬笔划字体, 水平放大5倍* outtextxy("The RED Win !"); setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}if(flag==2){setbkcolor(WHITE);cleardevice();setviewport(380,1);*定义一个图形窗口*setfillstyle(1,2);*绿色以实填充*setcolor(RED);rectangle();floodfill();setcolor(12);settextstyle(1,0,5);*三重笔划字体, 水平放大8倍* outtextxy(20,20,"The WHITE Win !"); setcolor(15);settextstyle(3,0,5);*无衬笔划字体, 水平放大5倍* outtextxy("The WHITE Win !"); setcolor(14);settextstyle(2,0,8);getch();closegraph();exit(0);}}change();break ;}}elsebreak ;}}void change(){if(flag==1)flag=2 ;elseflag=1 ;}void judge_who(int x,int y){if(flag==1)setcolor(RED);circle((x+JZ)*CELL,(y+JZ)*CELL,r); if(flag==2)setcolor(WHITE);circle((x+JZ)*CELL,(y+JZ)*CELL,r); }int judge_result(int x,int y,int n){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<n+1;j++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=3){return(1);break ;}*垂直向上数*n1=0 ;n2=0 ;for(j=x,k=y;k>=0;k--) {if(box[j][k]==flag)n1++;elsebreak ;}*垂直向下数*for(j=x,k=y;k<=n;k++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=3){return(1);break ;}*向左上方数*n1=0 ;n2=0 ;for(j=x,k=y;j>=1,k>=0;j--,k--) {if(box[j][k]==flag)n1++;elsebreak ;}*向右下方数*for(j=x,k=y;j<=n,k<=n+1;j++,k++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=3){return(1);break ;}*向右上方数*n1=0 ;n2=0 ;for(j=x,k=y;j<=n+1,k>=0;j++,k--) {if(box[j][k]==flag)n1++;elsebreak ;}*向左下方数*for(j=x,k=y;j>=1,k<=n;j--,k++) {if(box[j][k]==flag)n2++;elsebreak ;}if(n1+n2-1>=3){return(1);break ;}return(0);break ;}}void main(){int gdriver=VGA,gmode=VGAHI;int n;clrscr();attention();window();textbackground(WHITE);textcolor(BLACK);clrscr();gotoxy(15,10);printf("Please chose a qipan between 3 and 9:"); scanf("%d",&n);initgraph(&gdriver,&gmode,"c:\\tc");* setwritemode(XOR_PUT);*flag=1 ;printf_qipan(n);do{step_x=0;step_y=0;*printf_qizi(step_x,step_y,8); *judge_who(step_x-1,step_y-1);do{while(bioskey(1)==0);key=bioskey(0);judge_key(n);}while(key!=SPACE&&key!=ESC);}while(key!=ESC);closegraph();}4.2 系统使用该系统是C语言编写的,在TC环境下运行,在TC环境下打开后,按Ctrl+F9运行程序,输入Yy接受规则继续游戏,选择所需棋盘维数,输入nN退出游戏,游戏过程中上方显示具体操作,任一方三子连成一线,该方胜出,按任意键结束程序。

相关文档
最新文档