黑白棋程序设计
- 格式:docx
- 大小:771.98 KB
- 文档页数:18
python趣味小代码Python是一种简洁、易学、功能强大的编程语言,让人们能够用更少的代码实现复杂的任务。
除了它的实用性,Python也可以用来编写各种有趣的小程序,帮助我们解决日常生活中的一些有趣问题。
在这篇文章中,我将为您介绍一些有趣的Python小代码。
1. 黑白棋游戏黑白棋是一种经典的棋类游戏,现在我们可以使用Python编写代码来实现一个简单的黑白棋游戏。
我们可以创建一个8x8的棋盘,并使用0表示空白格,1表示黑子,-1表示白子。
接下来,我们可以实现一些游戏逻辑,例如根据规则翻转对方的棋子、判断游戏是否结束等。
通过输入不同的坐标,我们可以在控制台上下棋并观察游戏的进展。
2. 猜数字游戏猜数字游戏是一款大家都熟悉的经典游戏。
使用Python编写一个猜数字游戏可以让我们锻炼逻辑思维,并提高编程技巧。
在这个游戏中,计算机将随机生成一个数字,然后我们可以通过输入不同的数字来猜测。
计算机会根据我们的猜测给出一些提示,例如“猜大了”、“猜小了”或“恭喜猜对了”。
我们可以使用循环和条件语句来实现这个游戏,并设置一个计数器来记录我们猜测的次数。
3. 倒计时时钟使用Python编写一个倒计时时钟可以帮助我们更好地管理时间和任务。
我们可以使用time模块中的sleep函数来实现倒计时的效果。
首先,我们可以设置一个指定的时间长度,并将其转换成秒。
然后,我们可以使用一个循环来不断减少剩余时间,并在控制台上输出剩余时间。
当倒计时结束时,我们可以使用一些提示语句来提醒我们完成了一项任务或可以开始下一个任务。
4. 模拟掷骰子模拟掷骰子是一个有趣而又简单的小程序。
我们可以使用random模块中的randint函数来模拟骰子的投掷,并生成一个1到6之间的随机数。
我们可以使用循环来模拟多次掷骰子的情况,并统计每个点数出现的次数。
通过分析统计结果,我们可以了解到骰子的随机性,并可以将此应用到更复杂的概率问题中。
5. 文字游戏使用Python编写一个文字游戏可以让我们体验字谜、填字游戏等的乐趣。
游戏课程设计报告题目:超级黑白棋班级:11数媒姓名:徐继涛学号:1108040352014年 1 月6日目录一、目的与要求……………………………………………………………………….二、游戏设计方案……………………………………………………………………三、游戏开发平台构建……………………………………………………四、项目设计……………………………………………………………………….五、游戏创新描述……………………………………………………………………六、调试运行与分析…………………………………………………………七、程序清单………………………………………………………………………. 参考文献…………………………………………………………………………...一、游戏设计目的及要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C++语言中所学的知识,合理的运用资料,实现理论与实际相结合。
黑白棋,又叫反棋、奥赛罗棋、苹果棋或翻转棋。
黑白棋在西方和日本很流行。
游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。
它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。
有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。
(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(4).完成课程设计报告,并进行答辩(5).黑白棋的棋盘是一个有8*8方格的棋盘。
下棋时将棋下在空格中间,而不是像围棋一样下在交叉点上。
开始时在棋盘正中有两白两黑四个棋子交叉放置。
游戏结束时输出得分。
画出模块枝干图与每个模块的程序流程图。
修改某些代码,改变其外观及功能。
(6).游戏操作应尽量简单。
界面美观,让人看了觉得舒服。
二、游戏设计方案2.1、算法设计:玩游戏过程采用递归算法,控制循环过程,可使游戏重复玩,判断迷宫游戏结束的算法是通过判断人有没有到达终点。
楚雄师范学院2015年春季期末Java程序设计报告项目名称:基于Java平台开发的五子棋程序设计学院:物理与电子科学学院专业:电子信息科学与技术班级:2 0 1 3 级电信一班组员姓名:杨邦桂许勇董俊宏课程教师:程满目录引言 (3)第一章设计目的和要求 (3)第二章JAVA语言概述 (3)2.1 JAVA简介 (3)2.1.1 JAVA的基本特点 (3)2.2 JAVA工具JDK (4)第三章程序的设计思路和算法 (4)3.1 人机博弈的要点 (4)3.2 五子棋特点及规则 (4)3.3 设计思路 (5)3.3.1 (5)第四章测试及运行效果 (5)4.1棋盘系统主界面 (5)4.2下期博弈过程界面 (6)4.3黑方赢的结果 (6)4.4白方赢的结果 (7)第五章设计体会与总结 (8)附录 (9)源程序代码及简要说明: (9)引言随着计算机技术的不断发展,网络技术的普及范围越来越广,网络能够提供的服务多样、便捷,已经成为人们生产生活中不可缺少的重要组成部分。
如今网络休闲游戏发展迅速,它凭借健康、方便、互动性强、益智等诸多优点,成为大部分现代人休闲娱乐的首选。
网络五子棋游戏是使用Java语言开发的一款游戏。
它使用SOCKET建立连接,多线程处理数据,以及可嵌入网络浏览器的APPLET作为客户端,这些特点使这款游戏无论是服务器还是客户端的实现都相对容易。
通过对该软件的编写,还可以巩固学生对以上各种知识的掌握和理解。
第一章设计目的和要求1.1 实现一个简单的五子棋游戏程序,包括如下两个界面: (1)对弈及角色(黑方先落棋)。
(2)在游戏界面,有游戏栏(开局、悔棋、退出),帮助栏;显示区;棋盘区。
1.2在实际系统中使用、实现人工智能的相关算法1.3进一步加深对人工智能算法的理解第二章JAVA语言概述2.1 JAVA简介JAVA是Sun Microsystem公司开发的编程语言,是一个简单,面向对象,分布式,解释性,强壮,安全,与系统无关,可移植,高性能,多线程和动态的语言。
c语言有趣的代码C语言是一种强大的编程语言,是许多程序员都必须要掌握的语言之一。
对于那些想要深入学习和掌握C语言的人来说,掌握一些有趣的代码可以是很有帮助的。
本文将介绍一些有趣的C语言代码,这些代码涉及到各种程序设计的领域,从简单的算术操作到复杂的图形和游戏。
1. 打印正弦函数要在C语言中打印正弦函数可以使用数学库函数sin()。
以下是一个简单示例,它将打印出正弦函数的值:#include <stdio.h> #include <math.h>int main() { double angle; double result;// Loop through the angle 0 to 360 degrees, in increments of 10 for (angle = 0.0; angle <= 360.0; angle += 10.0) { result =sin(angle * M_PI / 180.0); // Convert angle to radiansprintf("sin(%f) = %f\n", angle, result); }return 0; }在这个示例中,我们循环从0°到360°,每次以10°的步长递增,并使用sin()函数计算相应角度的正弦。
我们将角度从度数转换为弧度以便计算,然后打印出结果。
2. 凯撒密码凯撒密码是一种简单的置换密码,它将明文中的每个字母替换为一个固定的、用于加密的字母。
这个加密算法可以使用C语言非常容易地实现。
以下是一个示例,它将使用凯撒密码加密输入的字符串:#include <stdio.h>int main() { char str[100]; int key;printf("Enter a string to encrypt: ");gets(str);printf("Enter a key: "); scanf("%d",&key);for (int i = 0; str[i] != '\0'; i++){ if (str[i] >= 'a' && str[i] <= 'z') str[i] = (str[i] - 'a' + key) % 26 + 'a';else if (str[i] >= 'A' && str[i] <= 'Z')str[i] = (str[i] - 'A' + key) % 26 + 'A'; }printf("Encrypted string: %s\n", str);return 0; }在这个示例中,我们首先要求用户提供要加密的字符串和一个密钥。
一、实验背景黑白棋,又称五子棋、连珠棋等,是一种两人对弈的策略型棋类游戏。
本实验旨在通过编程实现黑白棋游戏,并运用人工智能算法优化游戏策略,提高游戏水平。
二、实验目的1. 理解黑白棋游戏规则及基本策略。
2. 掌握人工智能在黑白棋游戏中的应用。
3. 通过优化算法,提高黑白棋游戏水平。
三、实验内容1. 黑白棋游戏规则黑白棋游戏规则如下:(1)棋盘为15×15的网格,每个网格可以放置一枚棋子。
(2)黑方先手,双方轮流在空白网格放置棋子,黑色棋子为“黑”,白色棋子为“白”。
(3)当任意一方在水平、竖直或两个对角线上形成连续的五个棋子时,该方获胜。
2. 人工智能算法本实验采用Minimax(最小-最大)算法进行人工智能策略优化。
Minimax算法是一种决策树搜索算法,用于解决二人零和博弈问题。
在黑白棋游戏中,Minimax算法通过模拟对手的走法,寻找最优的落子策略。
3. 优化算法为了提高游戏水平,我们对Minimax算法进行了以下优化:(1)棋子权重:将棋盘上的棋子按照位置赋予不同的权重,以反映棋子的重要程度。
例如,棋盘中心的棋子权重高于边缘棋子。
(2)22点权重:在棋盘的四个角落,我们赋予额外的权重,以鼓励在角落放置棋子。
(3)边线权重:棋盘边缘的棋子权重高于中间棋子,以反映棋子贴边的重要性。
(4)顶角权重:棋盘四个顶角的棋子权重最高,以鼓励在顶角放置棋子。
四、实验结果与分析1. 游戏效果通过优化后的Minimax算法,我们的黑白棋游戏水平得到了显著提高。
在与对手的对弈中,我们能够更好地判断棋局走势,制定合理的落子策略。
2. 优化效果分析(1)棋子权重:通过对棋子权重的优化,我们能够更好地把握棋局走势,避免在棋局后期陷入被动。
(2)22点权重:在棋局初期,我们倾向于在22点位置放置棋子,以占据有利地形。
(3)边线权重:在棋局中后期,我们注重在棋盘边缘放置棋子,以扩大棋局范围。
(4)顶角权重:在棋局的关键时刻,我们会在顶角位置放置棋子,以形成优势。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==黑白棋实验报告篇一:黑白棋程序设计实验报告C++版海南大学课程论文课程名称:数据结构课程设计题目名称:黑白棋姓名:学号:评阅教师:201X年 12月 17 日目录一、黑白棋简介 (2)二、程序设计思路及实现界面图 (3)三、程序设计算法性能分析 (6)四、实验总结 (6)五、实验代码 (7)一、黑白棋简介黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello),苹果棋,翻转棋。
黑白棋的棋子和围棋类似。
但它的下法与围棋的很不相同。
黑白棋是由黑方和白方两人进行的益智游戏。
棋盘为N×N方格,黑白棋总共使用N个棋子,每个棋子分正反两面,分别是黑色和白色。
轮到一方下棋时,必须把棋下在与对方棋子相邻的空位上,要求所下的棋子和原有的已方棋子夹住对方的至少一个棋子(横竖斜夹均可),然后把被夹住的子变成己方的颜色(也叫吃子)。
下棋过程中,任何棋子既不会从棋盘上拿走,也不会从一个格子移到另一个格子,吃子时,不会发生连锁反应,吃进的棋子不能再夹吃其他的子。
当双方都无棋可下,或者方格全部占满后,棋局结束,子多的一方为胜方。
2二、程序设计思路及游戏实现界面1、设计初始化棋盘函数2、复制棋盘函数3、显示棋盘函数4、选择下棋类型4、计算可落子的位置个数,及该位置落子后翻过的棋子的个数5、设置棋子的稳定性(计算得分的依据),空白处除外6、评价棋手得分游戏开始选择类型和棋子:打印棋盘棋手开始下棋输入下棋的位置:游戏结束,统计棋数并分出胜负:篇二:C语言-黑白棋实验报告福建工程学院计算机与信息科学系实验报告12345篇三:黑白棋课程设计报告惠州经济职业技术学院计算机专业课程设计报告课题名称:关于黑白棋游戏的设计专业:班级:组长: XXX小组成员:二O一O年十二月摘要中国最早出现黑白棋是在80年代的任天堂游戏机和苹果II个人电脑游戏里,但从那时一直玩到现在的人已经寥寥可数了,我们只能说,从那时起,中国第一次出现了黑白棋;然后就是1990年的Windows 3.0的推出,当时Windows自带的游戏就是黑白棋,由于当时电脑还比较少,没等到黑白棋传开,Windows 3.1推出,把自带游戏换成现在大家见到的踩地雷和接龙;让大量人认识黑白棋的是文曲星,文曲星的黑白棋棋力很低,一个人下了几盘以后就可以轻易把它打败,棋力之低简直可以说是误人子弟的地步,让人一叶障目,不见森林,以为黑白棋不过尔尔;在90年代中期流行的任天堂Gameboy当中也有一款黑白棋游戏,棋力甚为不错,比起以上提及的游戏强很多。
C++程序设计选题与考核标准一、训练要求:1、要求利用C/C++程序设计课程上学习的基础编程技巧来完成程序的设计;在设计的过程中,要建立清晰的类并正确使用相应的数据类型;在系统设计中要分析类与类之间的关系,将查找和排序的算法独立出来形成为单独的函数。
正确使用继承、重载和多态等技巧。
2、如果有数据交互的地方,要求对用户输入的数据都进行有效性验证,以保证程序的正常运行。
二、训练目的:1、加深对面向对象设计中基础理论和基本知识的理解,培养学生的实践能力,促进理论与实践的结合。
通过课程设计,让学生能够熟练运用C++进行面向对象编程,建立对象模型,降低软件的复杂性,改善软件的重用性和维护性,提高软件的生产效率,全面掌握面向对象编程技术。
2、通过程序设计,掌握面向对象程序设计语言C++,培养调查研究、查阅技术文献、资料、手册以及编写技术文献的能力指导等。
三、课程设计分组及考核办法本课程设计采用分组的方式进行,设计内容分为基础部分和发挥部分。
具体实施如下:1、每组3—5人,不得多于5人;2、共有18个设计题目,每个题目限3组可选;3、每组选1人参与课程设计答辩,限时15分钟,PPT内容包括:介绍本组每个成员的分工情况和设计过程(演示);或完成后,向教师演示程序的运行和回答教师的问题,老师对每位同学提问3次,时间大概5分钟。
4、每个人(或3人或4人合作完成,作为训练考核)都要交一份课程设计报告(3-5页左右),要有侧重点。
5、考核计分,总分为分课程成绩由小组答辩成绩和报告成绩组成,计算方法如下:(1)答辩成绩基础设计部分占60%和发挥部分占40%;(2)设计报告成绩根据格式和论述的完整性打分,分四个层次:优秀90分以上占20%,良好80-90分占30%,中60-70分占40%,差60一下分占10% ;(3)课程设计成绩=答辩成绩×50%+设计报告成绩×50%。
6、有效时间:从第周-第周,可利用上机时间向教师提交程序。
辽宁工业大学C语言程序设计课程设计(论文)题目:黑白棋游戏设计院(系):软件学院专业班级:学号:学生姓名:指导教师:胡峰教师职称:讲师起止时间:至课程设计(报告)任务及评语目录第1章课程设计的目的与要求 ........................................... 错误!未定义书签。
课程设计目的....................................................................................... 错误!未定义书签。
课程设计的实验环境........................................................................... 错误!未定义书签。
课程设计的预备知识........................................................................... 错误!未定义书签。
课程设计要求....................................................................................... 错误!未定义书签。
第2章课程设计内容........................................................... 错误!未定义书签。
程序功能介绍......................................................................................... 错误!未定义书签。
程序整体设计说明................................................................................. 错误!未定义书签。
一种基于改进权重的黑白棋AI的设计与实现作者:徐刚翟梦姣来源:《数码设计》2020年第04期摘要:本文基于改进权重设计并实现了一个黑白棋的人工智能程序,系统可以设置计算层数,经测试,程序效果较好。
关键词:黑白棋;AI;设计与实现中图分类号:TP18;; 文献标识码:A;; 文章编号:1672-9129(2020)04-0054-02Abstract: In this paper, based on the improved weight design and implementation of a black and white ai program, the system can be set to calculate the number of layers, through testing,the program effect is better.Key words:Black and white; AI; Design and Implementation前言:黑白棋,又叫翻转棋(Reversi)、奥赛罗棋(Othello)等。
近年来,人工智能是重要的研究领域之一。
研究黑白棋的AI有助于了解人类只能行为。
网上已有较多黑白棋的AI程序。
经过测试,笔者发现网上常见的黑白棋棋盘每个格子的权重如果做一定程度的调整,比如,适当降低四个角的格子的权重,且适当增加四条边每个格子的权重,那么有助于提升黑白棋AI的水平。
接下来的部分笔者将详述该系统的需求,设计和实现。
1 系统需求和设计目标系统可以自动画出黑白棋的棋盘,供双方落子,并实时显示双方的棋子数量,是否分出胜负和胜负关系,以及接下来该哪一方落子。
当用鼠标点击棋盘某个格子时,需要做判断。
如果棋盘已满,或者接下来双方都没有可以下子的格子,则根据双方的棋子数量自动判断胜负关系并显示出来;如果上个条件不满足且某一方落子后,并不能导致另一方的任何棋子被吃掉,则落子无效,仍有该方走棋;如果上述两个条件均不满足且某一方落子后,另一方没有可以落子的格子,则由某一方继续走棋;如果上述几个条件均不满足且某一方落子后可以导致另一份某些棋子被吃掉,则换另一方走棋。
课程设计任务书摘要程序设计语言类课程的指导思想是:使学生通过学习即高级编程语言的知识、编程技术和基本算法,又掌握程序设计的思想和方法,更具备利用计算机求解实际问题的能力,能灵活运用高级语言进行程序设计[6]。
其实认真学习一门语言并不困难,关键要所追求的学习的方法和途径。
一条好的途径便于快速掌握,熟悉运用语言。
学习的目的在于应用,理论来源于实践,如果在学习中能够通过有效的途径如自己动手设计一个功能比较前大的开发系统,借鉴于各种工具书,善于总结。
定可以很好的效果。
正是如此,使我们在这几年中对语言学习有了很大提高。
通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
关键词: 掌握编程语言的知识;编程技术;基本算法思想和方法目录黑白棋4 (4)2.1.用到的函数: (4)2.1.1main()主函数: (4)2.1.2DrawQp()画棋盘函数: (4)2.1.3MoveColor()恢复原来格子的状态 (4)2.1.4playtoplay()人人对战函数 (4)2.1.5QpChange()判断棋盘变化 (4)2.1.6PrintScore()输出成绩 (5)2.2.子函数功能一览表 (5)2.3. 主函数流程图 (6)2.3.1棋盘绘制流程图 (6)2.4.函数解析 (7)2.4.1图形库文件 (7)2.4.2图形初始化函数 (7)2.4.3设置背景颜色 (7)2.4.4画线 (7)2.4.5设置填充模式和颜色 (7)2.4.6方向操作 (7)2.4.7落棋位置判断 (8)2.4.8判断棋盘的变化和改变棋子的颜色 (8)2.4.9 成绩输出 (8)2.4.10输出成绩 (8)2.4.11输出最后的胜利者结果 (8)2.5.源代码 92.6运行结果172.7心得体会17参考文献 (18)黑白棋2.1.用到的函数:2.1.1main()主函数:在主函数中,棋盘状态用数组a[8][8],初值为0,表示空格。
用图形系统画出棋盘,调用playtoplay()人人对弈函数开始游戏,一旦游戏结束后,关闭图形系统,程序结束。
2.1.2DrawQp()画棋盘函数:背景颜色设为蓝色,从坐标(100,100)开始每隔40个单位用白色画一条水平直线,一条垂直线,构成棋盘,用循环语句实现。
以x和y为圆心,xradius和yradius为水平和垂直轴画一填充椭圆,当xradius和yradius相等时,则画出的是圆,用它表示棋子。
SetPlayColor()设置棋子的颜色:函数的参数为整型变量t,根据t的值来设计填充棋子的当前颜色,值为1代表白棋,值为2代表黑棋。
2.1.3MoveColor()恢复原来格子的状态因为棋子移动过程并没有改变数组元素的值,所以可以根据数组元素的值判定原来的状态,如果值是1,就恢复白色棋子,值是2则恢复黑色棋子,否则恢复蓝色空格。
2.1.4playtoplay()人人对战函数这是游戏进行的函数,主要是接收棋手的按键消息,按Esc键程序可以随时结束。
按上下左右光标键,则改变棋子移动的坐标值。
按回车键后判断。
2.1.5QpChange()判断棋盘变化当棋手按回车键落子后,就要分别往8个方向判断是否包围住对方棋子,如果是,则改变棋盘。
如果所有方向都判断过,并且没有引起棋盘的变化,则棋盘变化标志值yes为0,返回yes,结束本函数。
根据当前数组元素的值判断分数,也就是各方棋子的个数,如果数组元素值为1,白棋棋子数累加;如果数组元素值为2,则黑棋棋子数累加。
2.1.6PrintScore()输出成绩利用设置实体填充模式填充矩形条清除掉前次的成绩,再利用sprintf()函数将整数转换为字符串的形式,再利用outtextxy()函数将成绩输出。
playWin()输出胜利者结果根据分数值score1和score2的大小得出下棋的结果,输出赢者信息2.2.子函数功能一览表2.3. 主函数流程图2.3.1棋盘绘制流程图2.4.函数解析2.4.1图形库文件#include "graphics.h"2.4.2图形初始化函数intgd=DETECT,gr图形初始化函数initgraph(&driver,&mode,“路径”)功能:装入图形驱动程序2.4.3设置背景颜色在本程序中,设置的的北京颜色为蓝色,setbkcolor(BLUE),根据上述可知,此时,游戏界面的底色为蓝色。
setcolor(0)将线的颜色设置为黑色,由此是为了取消圆形周围的东西。
2.4.4画线在本程序中,使用上述源代码实现绘制棋盘的功能,也就是以40为一个步增,以(100,100)为起点,以(100,420)、(420,100)(420,420)为顶点画出棋盘,棋盘大下为320*320,由于步增是40,所以,棋盘上自然出现8*8的格子,由于画线的时候,没有定义线的颜色,所以线的颜色是默认的白色,所以最终出现了兰色的底面上以白色画格子的棋盘。
2.4.5设置填充模式和颜色在本程序中,棋子为半径为15的圆,颜色分别为代码为15和8的深灰色和白色两种棋子,分别由两位旗手来使用。
附表:颜色代号2.4.6方向操作在主程序前,使用宏定义将 UP、DOWN 、LEFT 、RIGHT,做了相应的定义,因此,在对战函数当中可以使用已经进行过定义的以上四个进行操作,每次移动后,在屏幕上显示的都是一个以15为半径的圆形。
由于走棋时,每个格子不能重复落子,所以,需要判断棋手要落子处是不是已经有了棋子2.4.7落棋位置判断走棋后,判断棋盘的变化情况,将棋子途径的地方恢复为空格状态,并且开始统计棋手的尝试次数,当一个棋手在一次走棋的过程中尝试的次数超过空格的个数的时候,取消该棋手的本次走棋,改为下个旗手走棋,也就是跳出本次循环,进行下一次的循环。
如果常识的次数没有超过空格的个数,而是落棋的位置无效,则旗手可以继续尝试,知道到达尝试次数。
当某次走棋后,接受的按键的值为ESC的时候,则退出游戏,当落子后在判定棋盘的变化时,一方的棋子为0,或者是双方已经下满60手,则执行 playWin 函数,输出游戏的结果。
2.4.8判断棋盘的变化和改变棋子的颜色通过判断数a[i][j]的值来判断棋子的颜色,已经定义当a[i][j]=1的时候,棋子为白色,当a[i][j]=2的时候棋子为黑色,当a[i][j]的值不为1和2的时候,则此时恢复为背景2.4.9 成绩输出清空之前的成绩,a[i][j]==1/2?;Score2++;Score1++;Score2++>Score1++??黑色胜利,全部胜利=?白色胜利2.4.10输出成绩在统计完得分后,分别在(550,200)和(550,300)俩个地方输出参与游戏的俩个人的分数信息。
2.4.11输出最后的胜利者结果黑子胜利,在(100,50)的位置上输出black win,白子获得胜利,在(100,50)的位置上输出“white win”,当出现得分相同的情况时,在(60,50)的位置上输出“you all win!”。
2.5.源代码#include "graphics.h"#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define ENTER 0x1c0dint a[8][8]={0},key,score1,score2;charplayone[3],playtwo[3];voidplaytoplay(void);void DrawQp(void);/*画棋盘函数*/voidSetPlayColor(int x);voidMoveColor(intx,int y);intQpChange(intx,inty,int z);/voidDoScore(void);voidPrintScore(int n);/voidplayWin(void);/void main(void){intgd=DETECT,gr;initgraph(&gd,&gr,"c:\\tc");DrawQp();playtoplay();/*人人对战*/getch();closegraph();}voidDrawQp(){inti,j;score1=score2=0;setbkcolor(BLUE);for(i=20;i<=600;i+=30){line(20,i,600,i);line(i,20,i,600);}setcolor(0);setfillstyle(SOLID_FILL,15);fillellipse(500,200,15,15);setfillstyle(SOLID_FILL,8);fillellipse(500,300,15,15);a[3][3]=a[4][4]=1;a[3][4]=a[4][3]=2;setfillstyle(SOLID_FILL,WHITE); fillellipse(120+3*40,120+3*40,15,15); fillellipse(120+4*40,120+4*40,15,15); setfillstyle(SOLID_FILL,8);fillellipse(120+3*40,120+4*40,15,15); fillellipse(120+4*40,120+3*40,15,15); score1=score2=2;DoScore();}voidplaytoplay(){intx,y,t=1,i,j,cc=0;while(1){x=120,y=80;while(1){PrintScore(1);PrintScore(2);SetPlayColor(t);fillellipse(x,y,15,15);key=bioskey(0);if(key==ESC)break;elseif(key==ENTER){if(y!=80&&a[(x-120)/40][(y-120)/40]!=1 &&a[(x-120)/40][(y-120)/40]!=2){if(t%2==1)a[(x-120)/40][(y-120)/40]=1;elsea[(x-120)/40][(y-120)/40]=2;if(!QpChange(x,y,t)){a[(x-120)/40][(y-120)/40]=0;cc++;if(cc>=64-score1-score2){MoveColor(x,y);fillellipse(x,y,15,15); break;}elsecontinue;}DoScore();break;}elsecontinue;}elseif(key==LEFT&&x>120){MoveColor(x,y);fillellipse(x,y,15,15); SetPlayColor(t);x-=40;fillellipse(x,y,15,15);}elseif(key==RIGHT&&x<400&&y>80) {MoveColor(x,y);fillellipse(x,y,15,15); SetPlayColor(t);x+=40;fillellipse(x,y,15,15);}elseif(key==UP&&y>120){MoveColor(x,y);fillellipse(x,y,15,15); SetPlayColor(t);y-=40;fillellipse(x,y,15,15);}elseif(key==DOWN&&y<400)MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y+=40;fillellipse(x,y,15,15);}}if(key==ESC)break;if((score1+score2)==64||score1==0||score2==0) {playWin();break;}t=t%2+1;cc=0;} /*endwhile*/}voidSetPlayColor(int t){if(t%2==1)setfillstyle(SOLID_FILL,15);elsesetfillstyle(SOLID_FILL,8);}voidMoveColor(intx,int y){if(y<100)setfillstyle(SOLID_FILL,BLUE);elseswitch(a[(x-120)/40][(y-120)/40]){case 1:setfillstyle(SOLID_FILL,15);break;case 2:setfillstyle(SOLID_FILL,8);break;default:setfillstyle(SOLID_FILL,BLUE);}}intQpChange(intx,inty,int t){inti,j,k,kk,ii,jj,yes;i=(x-120)/40;j=(y-120)/40;SetPlayColor(t);if(j<6)/*往右边*/{for(k=j+1;k<8;k++)if(a[i][k]==a[i][j]||a[i][k]==0) break;if(a[i][k]!=0&&k<8){for(kk=j+1;kk<k&&k<8;kk++){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15); }if(kk!=j+1)yes=1;}}if(j>1){for(k=j-1;k>=0;k--)if(a[i][k]==a[i][j]||!a[i][k])break;if(a[i][k]!=0&&k>=0){for(kk=j-1;kk>k&&k>=0;kk--){a[i][kk]=a[i][j];fillellipse(120+i*40,120+kk*40,15,15); }if(kk!=j-1)yes=1;}}if(i<6){for(k=i+1;k<8;k++)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k<8){for(kk=i+1;kk<k&&k<8;kk++)a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15); }if(kk!=i+1)yes=1;}}if(i>1){for(k=i-1;k>=0;k--)if(a[k][j]==a[i][j]||!a[k][j])break;if(a[k][j]!=0&&k>=0){for(kk=i-1;kk>k&&k>=0;kk--){a[kk][j]=a[i][j];fillellipse(120+kk*40,120+j*40,15,15); }if(kk!=i-1)yes=1;}}if(i>1&&j<6){for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++) if(a[k][kk]==a[i][j]||!a[k][kk]) break;if(a[k][kk]&&k>=0&&kk<8){for(ii=i-1,jj=j+1;ii>k&&k>=0;ii--,jj++) {a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i-1)yes=1;}}if(i<6&&j>1){for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--) if(a[k][kk]==a[i][j]||!a[k][kk])if(a[k][kk]!=0&&k<8&&kk>=0){for(ii=i+1,jj=j-1;ii<k&&k<8;ii++,jj--) {a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i+1)yes=1;}}if(i>1&&j>1){for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--) if(a[k][kk]==a[i][j]||!a[k][kk]) break;if(a[k][kk]!=0&&k>=0&&kk>=0){for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--) {a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i-1)yes=1;}}if(i<6&&j<6){for(k=i+1,kk=j+1;kk<8&&kk<8;k++,kk++) if(a[k][kk]==a[i][j]||!a[k][kk]) break;if(a[k][kk]!=0&&kk<8&&k<8){for(ii=i+1,jj=j+1;ii<k&&k<8;ii++,jj++) {a[ii][jj]=a[i][j];fillellipse(120+ii*40,120+jj*40,15,15); }if(ii!=i+1)yes=1;}}return yes;}voidDoScore(){inti,j;score1=score2=0;for(i=0;i<8;i++)for(j=0;j<8;j++)if(a[i][j]==1)score1++;elseif(a[i][j]==2)score2++;}voidPrintScore(intplaynum){if(playnum==1){setfillstyle(SOLID_FILL,BLUE); bar(550,100,640,400);}setcolor(RED);settextstyle(0,0,4);if(playnum==1){sprintf(playone,"%d",score1); outtextxy(550,200,playone);}else{sprintf(playtwo,"%d",score2); outtextxy(550,300,playtwo);}setcolor(0);}voidplayWin(){settextstyle(0,0,4);setcolor(12);if(score2>score1)outtextxy(100,50,"black win!"); elseif(score2<score1)outtextxy(100,50,"white win!");elseouttextxy(60,50,"you all win!");key=bioskey(0);key=key&0xff? key&0xff:key>>8;return(key);}2.6运行结果2.7心得体会在这次课程设计中,我深深地感受到了C语言的博大精深,从中知道了好多之前不知的知识。