黑白棋游戏设计

合集下载

2024年数学活动黑白棋大赛大班教案

2024年数学活动黑白棋大赛大班教案

2024年数学活动黑白棋大赛大班教案一、教学内容本节课的教学内容选自《幼儿园大班数学活动教材》第四章“趣味棋类”中的“黑白棋”一节。

具体内容包括:黑白棋的基本规则,棋子的走法,胜负判断方法以及简单策略的运用。

二、教学目标1. 让学生掌握黑白棋的基本规则,能独立进行游戏。

2. 培养学生逻辑思维能力和策略运用能力。

3. 培养学生合作意识,提高团队协作能力。

三、教学难点与重点重点:黑白棋的基本规则和棋子的走法。

难点:策略的运用和胜负判断。

四、教具与学具准备教具:黑白棋棋盘、黑白棋棋子、教学课件。

学具:黑白棋棋盘、黑白棋棋子、记录本。

五、教学过程1. 实践情景引入(5分钟)利用课件展示2024年数学活动黑白棋大赛的现场,激发学生兴趣,引导学生关注黑白棋。

2. 讲解黑白棋的基本规则(10分钟)通过课件和实物演示,详细讲解黑白棋的规则,包括棋盘布局、棋子的走法、胜负判断等。

3. 例题讲解(15分钟)通过示例,讲解黑白棋的基本策略,如如何占据有利位置、如何阻止对方棋子连成一线等。

4. 随堂练习(10分钟)学生两人一组进行黑白棋对弈,教师巡回指导,解答学生疑问。

5. 小组讨论与分享(5分钟)学生分组讨论黑白棋的策略,分享自己的经验和心得。

6. 班级比赛(10分钟)举行班级黑白棋比赛,选拔出优胜者,给予奖励。

六、板书设计1. 黑白棋基本规则2. 棋子走法3. 胜负判断方法4. 基本策略七、作业设计1. 作业题目:与家长一起进行黑白棋游戏,记录至少三局比赛过程。

八、课后反思及拓展延伸1. 反思:关注学生对黑白棋规则和策略的掌握情况,调整教学方法,提高教学效果。

2. 拓展延伸:鼓励学生参加校内外黑白棋比赛,提高竞技水平,培养团队合作精神。

重点和难点解析1. 教学难点与重点的确定2. 例题讲解的深度和广度3. 随堂练习的互动性和指导性4. 小组讨论与分享的实效性5. 作业设计的针对性和实践性一、教学难点与重点的确定在黑白棋的教学中,基本规则和棋子走法是基础,需要学生熟练掌握。

示范幼儿园大班数学教案教学设计:黑白棋大赛

示范幼儿园大班数学教案教学设计:黑白棋大赛

示例幼儿园大班数学教案教学设计:黑白棋大赛教学目标1.培养幼儿逻辑思维能力。

2.认知黑白棋的规则和基本技巧。

3.提高幼儿观察能力和判断能力。

4.培养幼儿团队合作精神。

授课内容黑白棋大赛教学步骤1. 热身•活动名称:数学歌曲。

•活动要求:通过数学歌曲引导幼儿热身并温习1到10的数字。

•活动时间:5分钟。

2. 介绍黑白棋的规则•采用实物棋子和棋盘,手动演示规则。

•通过比较两个棋子之间的位置,判断是否可以将对方的棋子翻转。

•给幼儿10分钟时间,自行摆放黑白棋,互相研究规则。

3. 进行黑白棋比赛•安排比赛小组,每组两个人。

•每组开始时,每人各有2个棋子。

•每个小组选一个发言人,每局比赛结束后,小组发言人汇报得分。

4. 清理工作•教师指导幼儿按照规则将棋子插回到棋盒里。

教学方法•采用示范演示和实操相结合的方法。

•采用小组合作学习法,鼓励互相研究,共同进步。

•鼓励竞赛,提高学生的学习积极性。

教学评价•通过每个小组的汇报和现场表现,评价幼儿的黑白棋水平和团队合作精神,对优秀的小组进行表扬。

•针对幼儿提出针对性的问题和互动指导,鼓励幼儿自我思考和发掘。

参考资料•《幼儿园数学教育教案初步》•作者:李艳英总结黑白棋大赛是一项锻炼幼儿思维、观察能力和团队合作精神的好方法。

通过实物棋子和棋盘来演示规则,让幼儿在体验中学习,通过小组合作、竞争和互动,来尝试解决问题。

通过此次的活动,幼儿能够学习黑白棋的规则和基本技巧,并且增强了幼儿团队合作的意识,提高了幼儿的整体素质,同时也让幼儿在应对比赛时体验到了紧张和兴奋的感受。

大班数学教案《黑白棋大赛》含反思

大班数学教案《黑白棋大赛》含反思

大班数学教案《黑白棋大赛》含反思一、教学内容本节课选自大班数学教材第六章《趣味数学》,具体内容为“黑白棋大赛”。

通过黑白棋游戏的设置,让学生掌握基本的棋类规则,理解策略性思维,提高逻辑思维能力。

二、教学目标1. 让学生了解黑白棋的基本规则,能够熟练进行游戏。

2. 培养学生的策略性思维,提高逻辑推理能力。

3. 培养学生团结协作、勇于挑战的精神。

三、教学难点与重点1. 教学难点:黑白棋的规则理解,策略性思维的培养。

2. 教学重点:熟练掌握黑白棋的基本规则,提高逻辑推理能力。

四、教具与学具准备1. 教具:黑白棋棋盘、黑白棋子、教学课件。

2. 学具:每人一套黑白棋棋盘和棋子。

五、教学过程1. 实践情景引入(5分钟)利用课件展示黑白棋的起源和发展,激发学生的学习兴趣。

2. 教学黑白棋基本规则(10分钟)讲解黑白棋的棋盘布局、棋子的摆放、下棋的顺序、胜负判断等基本规则。

3. 例题讲解(10分钟)通过具体案例,讲解如何进行黑白棋的攻防策略,引导学生理解策略性思维。

4. 随堂练习(10分钟)学生两人一组进行黑白棋对战,教师巡回指导,解答学生在游戏过程中遇到的问题。

5. 小组讨论(10分钟)让学生分享自己在游戏中的策略和心得,互相学习,共同进步。

6. 竞赛环节(15分钟)举行黑白棋大赛,激发学生的竞争意识,培养学生的团队精神。

六、板书设计1. 黑白棋基本规则2. 策略性思维3. 逻辑推理能力七、作业设计2. 答案:学生需在下一次课堂上分享自己的作业成果。

八、课后反思及拓展延伸2. 拓展延伸:引导学生了解其他棋类游戏,如国际象棋、围棋等,培养学生的兴趣爱好,提高逻辑思维能力。

重点和难点解析:1. 黑白棋基本规则的讲解2. 策略性思维和逻辑推理能力的培养3. 课后反思与拓展延伸详细补充和说明:一、黑白棋基本规则的讲解1. 棋盘布局:明确黑白棋棋盘的标准尺寸(如8x8),以及棋子的初始摆放位置。

2. 棋子颜色:讲解黑方和白方的区别,以及双方下棋的顺序。

《黑白棋大赛》大班数学教案:公平赛制设计

《黑白棋大赛》大班数学教案:公平赛制设计

黑白棋,又称翻转棋、翻石子等,是一种非常古老的棋类游戏。

它的规则简单明了,但是却充满策略与深度。

因此,黑白棋比赛一直备受瞩目。

为了使一场黑白棋比赛更加公平,需要设计一个合适的赛制。

而如何设计才能达到公平的效果呢?本篇文章将通过分析黑白棋比赛的特点和需求,提出一个公平赛制的设计方案。

I. 黑白棋比赛的特点黑白棋比赛的特点在于:1、棋局具有不确定性。

棋局中每一步棋的走法都会影响后续的走法,因此难以预测最终胜利者。

2、比赛时间有限制。

一般来说,黑白棋比赛会有一定的时间限制,比如每一步棋的时间不能超过30秒。

3、比赛棋手有高低之分。

棋手的棋艺水平是影响比赛胜负的重要因素。

因此,比赛中会出现棋手水平不均的情况。

II. 黑白棋比赛的需求众所周知,比赛是为了决出胜者。

因此,黑白棋比赛的赛制需要考虑以下三个需求:1、胜者决定方法比赛必须有明确的胜者决定方法,只有通过该方法才能决定比赛的胜负。

2、公平黑白棋比赛需要公平的赛制,让每位棋手都有平等的机会取得胜利。

3、高效黑白棋比赛需要高效的赛制,尽可能节约比赛时间。

III. 赛制设计基于黑白棋比赛的特点和需求,我们提出了以下的赛制设计方案:1、赛制采取淘汰制,每个阶段都是单败淘汰赛。

采用淘汰制来进行比赛,每个阶段都是单败淘汰赛。

这样能够在最短的时间内找出胜者,同时也能够在前期选拔阶段过滤掉实力不足的棋手。

2、比赛分组为了让比赛更加公平,我们采用分级分组的方式。

按照棋手水平分为不同组别,每个组别中的选手水平尽可能接近。

组内进行循环比赛,总胜场数多的选手晋级下一轮。

3、限时赛制时间是黑白棋比赛中最重要的因素之一。

我们将每一轮比赛的时间限制在适当范围内,同时可以设置额外的延迟时间。

当比赛时间到达规定时间,系统会自动停止。

4、加赛制将比赛的步数限制在一定数量以内,当步数相同时,比赛进入加赛制,通过加赛的方式决定胜者。

这样能够让比赛更加公平,因为任何一位选手在相同的步数下,要想取得胜利都离不开运气的支持,因此使用加赛制可以尽量避免比赛的“输赢靠运”现象。

示范幼儿园大班数学教案教学设计:黑白棋大赛

示范幼儿园大班数学教案教学设计:黑白棋大赛

示范幼儿园大班数学教案教学设计:黑白棋大赛
教学目标:
1. 培养幼儿的逻辑思维能力和推理能力;
2. 培养幼儿的观察力和注意力;
3. 通过黑白棋游戏的方式,加深幼儿对黑白概念的理解。

教学准备:
黑白棋棋盘、黑白棋子、幼儿课桌椅。

教学步骤:
1. 导入新课:告诉幼儿今天我们要玩一个很有趣的游戏,它叫做黑白棋大赛。

2. 讲解规则:将黑白棋棋盘放在地上,给每个幼儿发一些黑白棋子,告诉他们游戏的规则,即黑白棋子轮流在棋盘上下棋,棋子可以横、竖、斜向移动,但是必须将对方颜色的棋子夹在自己的两个棋子之间才能吃掉对方的棋子,最后棋盘上棋子多的一方胜利。

3. 示范演示:老师和一些幼儿一起演示如何下棋,如何吃掉对方的棋子。

4. 讨论策略:在比赛之前,让幼儿们讨论一下下棋的策略,比如说应该尽量多吃对方的棋子,应该如何占领棋盘的中心等。

5. 开始比赛:幼儿们可以自己组队或者个人单独进行比赛,比赛时间为20分钟左右。

6. 结束比赛:比赛结束后,老师可以点评每一个幼儿的表现,鼓励他们成功、坚持,也指出他们的不足,帮助他们改进。

7. 游戏总结:在游戏总结时,让幼儿们谈谈他们学习到的经验和教训,反思自己的下棋策略,以及思考如何再接再厉。

教学评价:
1. 能否懂得游戏规则,正确理解游戏;
2. 能否掌握下棋的基本技巧,包括如何移动棋子和如何吃掉对方的棋子;
3. 能否通过比赛的实践,培养幼儿的观察力、注意力和逻辑思维能力;
4. 能否锻炼幼儿的团队协作精神和竞争意识。

幼儿园游戏:黑白棋教案

幼儿园游戏:黑白棋教案

幼儿园游戏:黑白棋教案幼儿园游戏:黑白棋教案一. 教学目标:1. 学习黑白棋基础规则,提高逻辑思维和决策能力;2. 培养合作意识和沟通交流能力;3. 增强竞争意识和自信心。

二. 教学准备:1. 黑白棋棋盘;2. 黑白棋棋子;3. 记分牌。

三. 教学内容:1. 黑白棋基础规则:① 开始游戏时,对战双方各有2枚棋子放在中间位置(黑棋放在棋盘的右下方,白棋放在棋盘的左上方);② 棋手轮流落子,每次只能将自己的棋子放在一片空位上,并且不能出现边角空位;③ 落子的方式是:将自己的棋子放在与对方棋子相邻的空格上,使得对方的一个或多个棋子被自己的棋子夹在中间(纵、横、斜方向都可以),被夹住的棋子就变成了己方的棋子;④ 游戏结束的条件是:当棋盘上已没有空位时,或者双方都不能再行动时,则游戏结束;⑤ 胜负的判断方式是:最后棋盘上棋子数多的一方获胜。

2. 游戏进行:① 分别选出黑棋和白棋;② 分别在棋盘上放置2枚棋子;③ 黑棋先行动;④ 一旦己方落子后,对方就无法将该棋子夹住;⑤ 落子后,被夹住的对方棋子颜色会变为与自己颜色相同的棋子;⑥ 落子完毕后,开始计分,计算谁的棋子更多。

四. 教学过程:1. 游戏前的准备:教师向学生边展示黑白棋棋盘和棋子边讲解游戏规则,让学生听懂并有一定的认知。

2. 游戏过程:(1)根据数量确定队伍,每队选出一名队长,由队长选择自己的队员(各6人左右);(2)摆好棋盘,并按照规则分配好黑白双方;(3)教师现场进行实操演示;(4)依照顺序轮流进行游戏;(5)结束游戏时,根据棋子数量计分。

五. 教学体会:黑白棋能够在竞争和团队协作两方面起到锻炼的作用,培养学生合作意识和作战策略,同时提高逻辑思维和决策能力,更是一项非常有趣味性的游戏,能够吸引幼童的兴趣。

黑白棋教学设计一等奖3篇

黑白棋教学设计一等奖3篇

1、黑白棋教学设计一等奖作为一名优秀的教育工作者,常常要写一份优秀的教学设计,教学设计是对学业业绩问题的解决措施进行策划的过程。

我们应该怎么写教学设计呢?下面是小编整理的黑白棋教学设计,欢迎阅读,希望大家能够喜欢。

一、教学内容:本课选择学校校本教材的教学内容为:黑白棋。

二、设计意图:黑白棋是一款经典的策略性游戏,它规则简单,行棋方法变化多端,通过黑白棋的游戏教学,首先能更好地培养学生的观察能力;其二能够更好地培养学生的有序思维和反应能力;其三能够有效培养学生的多向思维能力和集中注意力能力;其四能够培养学生手脑并用、协调运作的能力和培养学生“胜不骄,败不馁”的良好品质。

由于它棋法的灵活性、游戏过程的多变性和游戏预设的多样性,所以又能极大地激发学生的探究兴趣和提高学生综合运用各种策略的能力。

三、学情分析:1、本班共78名同学,通过调查了解,发现本班已有56名同学接触过这款游戏,有22名同学对黑白棋游戏比较陌生。

2、此款游戏需要两人对弈,因此只需准备39套器具即可。

3、本次教学的活动主体是五年级学生,五年级的孩子,对于棋类的游戏比较熟练,在一、二年级的时候,学生就接触过围棋,对于围棋的规则有了一定的了解,也具有了一定的推理判断能力。

黑白棋的规则比围棋简单,比较容易上手,因此,对五年级的孩子来说,掌握棋规应该是比较容易的,但是它的变化却非常复杂,游戏进行过程中,每一回合都可能会发生急剧的变化。

“黑白棋只需要几分钟学会它,却需要一生的时间去精通它。

”故要玩得比较精通,对学生来说还是存在一定难度的。

四、教学目标:1.通过了解黑白棋游戏的规则,学生掌握黑白棋的游戏规则。

2.在游戏的过程中,按游戏规则,通过两人对奕,探究如何棋出高招,初步总结战胜对手的策略和技巧,使学生会玩、巧玩“黑白棋”游戏。

3、增强学生分析问题的能力,提高学生透过事物的表面提出有价值的问题的洞察力。

五、教学要点:1、通过了解黑白棋游戏的规则,学生掌握黑白棋的游戏规则。

《黑白棋大赛》大班数学教案

《黑白棋大赛》大班数学教案

《黑白棋大赛》大班数学教案一、教学目标1.让幼儿通过游戏了解棋盘的布局和棋子的摆放规则。

2.培养幼儿的逻辑思维能力和策略意识。

3.培养幼儿合作、竞争、分享的良好品质。

二、教学重点与难点1.教学重点:掌握黑白棋的规则,能够进行简单的对弈。

2.教学难点:运用策略,提高对弈水平。

三、教学准备1.教具:黑白棋盘、黑白棋子、计时器。

2.学具:每人一份黑白棋盘和黑白棋子。

四、教学过程(一)导入1.组织幼儿玩“猜棋子”游戏,激发幼儿兴趣。

2.教师出示黑白棋盘,引导幼儿观察棋盘的布局。

(二)基本规则讲解1.讲解黑白棋的基本规则:a.棋盘为8×8的方格,共64个格子。

b.两人对弈,一方执黑,一方执白。

c.轮流下棋,每次只能下一个棋子。

d.棋子不能重叠,不能超出棋盘范围。

2.示范对弈,让幼儿直观了解下棋过程。

(三)实战演练1.将幼儿分成两人一组,进行实战演练。

2.教师巡回指导,纠正幼儿的错误操作。

(四)策略讲解1.讲解简单的黑白棋策略:a.尽量占领棋盘中心区域。

b.尽量阻止对方棋子连成一线。

c.学会牺牲一些棋子,换取更大的利益。

2.示范策略运用,让幼儿初步了解策略的重要性。

(五)黑白棋大赛1.将幼儿分成四组,每组两人,进行黑白棋大赛。

2.设定比赛时间,每局10分钟。

3.教师担任裁判,记录比赛结果。

1.让幼儿分享比赛过程中的心得体会。

五、教学延伸1.组织幼儿进行黑白棋课后练习,提高对弈水平。

2.邀请家长参与,开展家庭黑白棋比赛,增进亲子关系。

六、教学反思1.本节课幼儿对黑白棋产生了浓厚兴趣,能够积极参与实战演练。

2.在策略讲解环节,部分幼儿对策略的理解不够深入,需要在今后的教学中加强引导。

3.比赛环节,个别幼儿出现紧张情绪,需要在今后的教学中关注幼儿心理素质的培养。

七、教学评价1.观察幼儿在实战演练中的表现,评价幼儿对黑白棋规则的掌握程度。

2.观察幼儿在比赛中的表现,评价幼儿的合作、竞争、分享等品质。

3.收集家长反馈,了解幼儿在家庭中的表现,评价教学效果。

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

辽宁工业大学C语言程序设计课程设计(论文)题目:黑白棋游戏设计院(系):软件学院专业班级:学号:学生姓名:指导教师:**教师职称:讲师起止时间: 2008.12.29至2009.1.9课程设计(报告)任务及评语目录第1章课程设计的目的与要求 (1)1.1 课程设计目的 (1)1.2 课程设计的实验环境 (1)1.3 课程设计的预备知识 (1)1.4 课程设计要求 (1)第2章课程设计内容 (2)2.1程序功能介绍 (2)2.2程序整体设计说明 (2)2.2.1设计思路 (2)2.2.2数据结构设计及用法说明 (2)2.2.3程序结构(流程图) (3)2.2.4各模块的功能及程序说明 (3)2.2.5程序结果 (6)2.3程序源代码及注释 (6)第3章课程设计总结 (18)参考资料 (21)第1章课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完《程序设计语言(C)》课程后进行的一次全面的综合练习。

本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。

C语言程序设计及相应的开发环境。

1.3 课程设计的预备知识熟悉C语言及C语言开发工具。

1.4 课程设计要求1. 分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章课程设计内容2.1程序功能介绍黑白棋游戏是一个深受人们喜爱的游戏,通常是人机对弈,本课题设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。

按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。

2.2程序整体设计说明2.2.1设计思路程序界面是一个二维平面图,所以数据的表示用二维数组,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格中的状态,共有三种情况,分别是空格、黑棋和白棋。

这样给数组元素的取值设定为0、1、2,其中0代表空格,1代表白色棋子,2代表黑色棋子。

这样程序的主要工作是接收棋手按键操作,一旦接收到回车键,说明棋手摆子,先判断是不是有效位置,也就是能不能包围住对方棋子,如果能,便为棋子所在的位置往上下、左右、左上、左下、右上、右下8个方向寻找被包围住的所有棋子(必须是连续的,中间不能有空格),将这些被包围住的对方棋子都变成自己的棋子,然后对当前棋盘中的黑白棋个数进行统计并输出结果。

如果没有这样的位置可以落子,则停步,让对方走棋,重复上述步骤,直到游戏结束。

如果想提前终止游戏,可以按Esc键。

2.2.2数据结构设计及用法说明int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/void playtoplay(void);/*人人对战函数*/void DrawQp(void);/*画棋盘函数*/void SetPlayColor(int x);/*设置棋子第一次的颜色*/void MoveColor(int x,int y);/*恢复原来棋盘状态*/int QpChange(int x,int y,int z);/*判断棋盘的变化*/void DoScore(void);/*处理分数*/void PrintScore(int n);/*输出成绩*/void playWin(void);/*输出胜利者信息*/2.2.3程序结构(流程图)黑白棋游戏流程图如下:2.2.4各模块的功能及程序说明(1)main()主函数首先初始化图形模式,然后通过调用函数先画出棋盘,再开始游戏,一旦游戏结束则关闭图形模式,程序结束。

(2)DrawQp()画棋盘函数先设置背景色,然后通过循环利用水平和垂直直线画出棋盘,再利用填充圆画出初始棋子。

(3)SetPlayColor()设置棋子的颜色目的是为判断棋手和棋盘的变化,根据函数参数的值来设计填充棋子的当前颜色,值为1代表白棋,值为2代表黑棋。

(4)MoveColor()恢复原来棋子的状态棋手要通过移动光标键走到落子的位置,在经过的路程上显示当前棋子,则会覆盖原来的棋盘状态,所以一旦棋子走过后,就应恢复原来的状态。

(5)playbplay()人人对战函数这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下:1)按Esc键程序可以随时结束。

2)按上下左右光标键,则改变棋子移动的坐标值。

3)按回车键后判断:①如落子的位置已经有棋则无效,继续压键。

②如落子位置是空格,可以将棋子落入格内,调用函数QpChange()判断是否引起棋盘的变化,函数值为1有变化,为0没变化。

如果棋盘有变化,说明将包围的对方棋子吃掉,统计当前分数,如果棋盘没有变化,则说明落子的位置无法包围对方的棋子也视为无效棋,可以继续寻找合适的位置,但开始统计其落子次数,一旦尝试次数超过当前棋盘的空格数,则说明他无棋可走,则放弃此步,让对方下棋。

③如果棋子变化后,格子已占满64格或一方棋子为0,则游戏结束,显示胜利方信息。

按任意键程序结束。

④重复上述步骤,直到游戏结束。

(6)QpChange()判断棋盘变化当棋手按回车键落子后,就要分别往8个方向判断是否包围住对方棋子,如果是,则改变棋盘,也就是棋盘上黑白棋子的个数要发生变化。

表示黑白棋的图形用屏幕上的像素坐标,而棋子的状态是数组元素a,所以要根据落子的坐标x和y计算出对应数组元素a的下标i和j。

i代表行,j代表列,对于8×8的棋盘,它们的值为0-7,如果j<6,往右边判断,从当前位置开始,用循环语句判断右边是否有一个或连续多个对方的棋子,遇到自己的棋子或空格则结束循环,如果循环结束不是遇到空白,且列坐标小于8,则说明这些位置的棋子是被自己包围的对方棋子,将它们吃掉.也就是改变为自己的棋子,如果有棋子发生了变化,给棋盘变化标志值yes赋值为1,同样的方法向左、上、下等8个方向进行判断,并作相应的变化。

如果所有方向都判断过,并且没有引起棋盘的变化,则棋盘变化标志值yes为0,返回yes,结束本函数。

(7)DoScore ()处理分数根据当前数组元素的值判断分数,也就是各方棋子的个数,如果数组元素值为1,白棋棋子数累加;如果数组元素值为2,则黑棋棋子数累加。

(8)PrintScore()输出成绩利用设置实体填充模式填充矩形条消除掉前次的成绩,再利用索赔sprintf()函数将整数转换为字符串的形式,再利用outtextxy0函数将成绩输出。

(9)playWin()输出胜利者结果根据分数值score1和score2的大小得出下棋的结果,输出赢者信息。

2.2.5程序结果2.3程序源代码及注释#include "graphics.h" /*图形系统头文件*/#define LEFT 0x4b00 /*光标左键值*/#define RIGHT 0x4d00 /*光标右键值*/#define DOWN 0x5000 /*光标下键值*/#define UP 0x4800 /*光标上键值*/#define ESC 0x011b /* ESC键值*/#define ENTER 0x1c0d /* 回车键值*/int a[8][8]={0},key,score1,score2;/*具体分数以及按键与存放棋子的变量*/ char playone[3],playtwo[3];/*两个人的得分转换成字符串输出*/void playtoplay(void);/*人人对战函数*/void DrawQp(void);/*画棋盘函数*/void SetPlayColor(int x);/*设置棋子第一次的颜色*/void MoveColor(int x,int y);/*恢复原来棋盘状态*/int QpChange(int x,int y,int z);/*判断棋盘的变化*/void DoScore(void);/*处理分数*/void PrintScore(int n);/*输出成绩*/void playWin(void);/*输出胜利者信息*//******主函数*********/#include<io.h>#include<stdio.h>#include<dos.h>#include<string.h>#include<math.h>#include<bios.h>#include<mem.h>#include<fcntl.h>#include<stdlib.h>#include<conio.h>#include <graphics.h>#define HH '0'#define N 6int Q=0;char key;int fine=1;int A=0,B=0;char s[N][N],m[N][N];void *ball;int maxx;unsigned int size;loading(){ int z=1;while(z){ if(z>77)break;printf("<");delay(5000);z++;}delay(2000);cleardevice();}unsigned char Get_Ascii_Key(void) {if(bioskey(1))return(bioskey(0));else return(0);}int Test_Ascii_Key(int ascii){if(Get_Ascii_Key()==ascii)return(1);elsereturn(0);}void tu(){maxx=getmaxx();size=imagesize(210,390,450,420);ball=malloc(size);setfillstyle(1,10);bar(160,170,473,253);setfillstyle(1,9);bar(163,173,470,250);setcolor(13);outtextxy(200,200,"Welcome to BLACK & WHITE chess"); setcolor(14);outtextxy(250,220,"Developer :Wu siyuan ");outtextxy(290,240,"2002.8");outtextxy(210,390,"Press any key to contunue...");getimage(210,390,450,420,ball);while(!kbhit()){putimage(210,390,ball,XOR_PUT);delay(30000);}cleardevice();}void sou(void){}void print(){ int i=0,j=30;setcolor(11);outtextxy(35,20," 0 1 2 3 4 5");outtextxy(14,50,"0");outtextxy(14,100,"1");outtextxy(14,150,"2");outtextxy(14,200,"3");outtextxy(14,250,"4");outtextxy(14,300,"5");setbkcolor(0);setlinestyle(SOLID_LINE,0,2);for(i=0;i<7;i++){ setcolor(GREEN);line (j,30,j,330);j+=50;}j=30;for(i=0;i<7;i++){ setcolor(GREEN);line(30,j,330,j);j+=50;}for(i=0;i<6;i++)for(j=0;j<6;j++){ if(s[i][j]=='o'){setcolor(WHITE);circle(55+j*50,55+i*50,15);}else if(s[i][j]=='x'){ setcolor(RED);circle(55+j*50,55+i*50,15); }}}int cal(char z){ int *p=0;int num=0,i,j;for(i=0;i<N;i++)for(j=0;j<N;j++)if(s[i][j]==z)num++;p=&num;return(*p);}void save(){int i,j;for(i=0;i<N;i++)for(j=0;j<N;j++)m[i][j]=s[i][j];}void load(){ int i,j;for(i=0;i<N;i++)for(j=0;j<N;j++)s[i][j]=m[i][j];}snew(int x,int y,char z1,char z2){int i,j,a;int can[]={0,0,0,0,0,0,0,0,0},k[N*N]; if(s[x][y-1]==z1&&(y-1)>=0){i=0;while(i<y){if(s[x][i]==z2){ can[1]=1;break; }i++;}}if(s[x][y+1]==z1){i=y+2;while(i<N){if(s[x][i]==z2){ can[2]=1;break;}i++;}}if(s[x-1][y]==z1&&(x-1)>=0){i=0;while(i<x){if(s[i][y]==z2){can[3]=1;break;}i++;}}if(s[x+1][y]==z1){i=x+2;while(i<N){if(s[i][y]==z2){can[4]=1;break;}i++;}}if(s[x-1][y+1]==z1&&(x-1)>=0){i=2;while(y+i<N&&(x-i>=0)){if(s[x-i][y+i]==z2){can[5]=1;break;}i++;}}if(s[x+1][y-1]==z1&&(y-1)>=0){i=2;while(i<N&&(y-i>=0)){if(s[x+i][y-i]==z2){can[6]=1;break;}i++;}}if(s[x-1][y-1]==z1&&(x-1)*(y-1)>=0){i=2;while(x-i>=0&&y-i>=0){if(s[x-i][y-i]==z2){can[7]=1;break;}i++;}}if(s[x+1][y+1]==z1){i=2;while(i+x<N){if(s[x+i][y+i]==z2){can[8]=1;break;}i++;}}for(i=1,j=0;i<=8;i++)if(can[i]==0)j++;if(j==8&&Q==1) {printf("error!");exit(1); }else if(j!=8)s[x][y]=z2;if(can[1]==1){ i=1;while(s[x][y-i]==z1){s[x][y-i]=z2;i++;}can[1]=0;}if(can[2]==1){i=1;while(s[x][y+i]==z1){s[x][y+i]=z2;i++;}can[2]=0;}if(can[3]==1){i=1;while(s[x-i][y]==z1){ s[x-i][y]=z2;i++;}can[3]=0;}if(can[4]==1){i=1;while(s[x+i][y]==z1){s[x+i][y]=z2;i++;}can[4]=0;}if(can[5]==1)while(s[x-i][y+i]==z1){s[x-i][y+i]=z2;i++;}can[5]=0;}if(can[6]==1){i=1;while(s[x+i][y-i]==z1){s[x+i][y-i]=z2;i++;}can[6]=0;}if(can[7]==1){i=1;while(s[x-i][y-i]==z1){s[x-i][y-i]=z2;i++;}can[7]=0;}if(can[8]==1){i=1;while(s[x+i][y+i]==z1){s[x+i][y+i]=z2;i++;}can[8]=0;}} /* snew */void one(){ int a,b;char g='o';load();setcolor(15);printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); printf("\n To exit the Game press the 'q' key.\n");printf("Please input x (0 to 5):");while(1){a=Get_Ascii_Key();if(a==113||a==81){printf("\nQuit?(y or n)");while(1){if(Test_Ascii_Key(89)||Test_Ascii_Key(121))exit(0);else if(Test_Ascii_Key(110)||Test_Ascii_Key(78)){printf("\n\tWelcome to return the Game !\n");break; }}}if(a>=48&&a<=53){printf("\tGood! x has get!\n");break;}}a=a-48;printf("Please input y (0 to 5):");while(1){b=Get_Ascii_Key();if(b==113||b==81){printf("\nQuit?(y or Y)");while(1){if(Test_Ascii_Key(89)||Test_Ascii_Key(121))exit(0);else if(Test_Ascii_Key(110)||Test_Ascii_Key(78))break;}}if(b>=48&&a<=53){printf("\tGood! y has get!");break;}}b=b-48;Q=1;snew(a,b,'x','o');Q=0;save();A=cal(g);B=cal('x');/* printf("\t\t\t\t\t\t\rA=%d,B=%d",A,B);*/}/* one */void search(){int i,j,r=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(s[i][j]==HH)r++;if(r==0)fine=0;}void two(){ char h='x';int row[N*N],col[N*N];int a=1,ii,j,t,t1,k[N*N];load();for(ii=0;ii<N;ii++)for(j=0;j<N;j++)if(s[ii][j]==HH){row[a]=ii;col[a]=j;a++;}/* space right */for(ii=1;ii<a;ii++){load(); /*two*/snew(row[ii],col[ii],'o','x');k[ii]=cal(h);}t=k[1];ii--;t1=ii;while(ii){if(t<=k[ii]){t=k[ii];t1=ii;}ii--;}a=t1;A=cal('o');B=t;load();snew(row[a],col[a],'o','x');save();cleardevice();printf("\n\n\t\t\t\t\t Computer located :%d,%d",row[a],col[a]); }main(){ int i,j;int gd=DETECT,gm;clrscr();initgraph(&gd,&gm,"d:\\tc\\bgi");setbkcolor(BLACK);tu();sou();setbkcolor(0);for(i=0;i<N;i++)for(j=0;j<N;j++)s[i][j]='0';s[2][2]=s[3][3]='x';s[2][3]=s[3][2]='o';save();loading();cleardevice();while(fine){print();one();two();search();if(key==113||key==81){printf("\nQuit?(y or Y)");while(!Test_Ascii_Key(89)&&!Test_Ascii_Key(121)); break;}}if(A>B)outtextxy(400,200, " You win!");else if(A<B)outtextxy(400,200," I win!");else outtextxy(400,200," It's a draw!");printf("\n You:%d I:%d",A,B);getch();}第3章课程设计总结回想这次C程序课程设计,至今我仍有许多感慨,自从知道题目到完成整个编程,从理论到实践,在这些日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

相关文档
最新文档