ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:38.14KB ,
资源ID:11727760      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11727760.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(黑白棋课程设计方案.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

黑白棋课程设计方案.docx

1、黑白棋课程设计方案攀枝花学院课程设计题 目: 黑白棋游戏 院 (系): 数学与计算机学院 年级专业: 2014级软件工程 姓 名: 田坤林 学 号: 201410804095 指导教师: 陈斌 二一五年一月十日攀枝花学院教务处制攀枝花学院本科学生课程设计任务书题目黑白棋游戏程序设计1、课程设计的目的通过完成一个完整项目,经历策划、设计、开发、测试、验收各阶段,达到:(1)巩固和实践计算机图形学课程中的理论和算法;(2)培养项目策划、架构设计、软件开发和科研设计的能力;(3)培养认真学习、积极探索的工作态度和良好的合作精神。2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)开发工具:

2、TC或Visual C+开发人数:1人实现内容:设计开发一个黑白棋游戏程序功能要求:(1)尽量使用图形用户界面方式实现(不作硬性要求)(2)可以实现人机对战,自动判断胜负(3)界面美观3、主要参考文献1 钦科技.Visual C+游戏设计M.北京:科海电子出版社,2003.1.2 何健辉.游戏软件设计与开发大揭秘M.北京:人民邮电出版社.2000.3 坂本千寻.Visual C+专业游戏程序设计M.北京:中国铁道出版社,2004.4 肖永亮等.计算机游戏程序设计M.北京:电子工业出版社,2005.等。4、课程设计工作进度计划1、设计动员,布置任务,选题(1天) 2、查阅资料,分析、讨论与设计(

3、1天)3、编写程序,进行调试(4天)4、完成模块联调,进行测试(2天)5、成果验收,完成设计报告(2天)指导教师(签字)日期年 月 日教研室意见:年 月 日学生(签字): 接受任务时间: 2015 年 1 月 6 日注:任务书由指导教师填写。课程设计(论文)指导教师成绩评定表题目名称评分项目分值得分评价内涵工作表现20%01学习态度6遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。02科学实践、调研7通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。03课题工作量7按期圆满完成规定的任务,工作量饱满。能力水平35%04综合运用知识的能力10能运用所学知识和技能去发现与解

4、决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。05应用文献的能力5能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。06设计(实验)能力,方案的设计能力5能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。07计算及计算机应用能力5具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。08对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)10具有较强的数据收集、分析、处理、综合的能力。成果质量45%09插图(或图纸)质量、篇幅、设计

5、(论文)规范化程度5符合本专业相关规范或规定要求;规范化符合本文件第五条要求。10设计说明书(论文)质量30综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。11创新10对前人工作有改进或突破,或有独特见解。成绩指导教师评语指导教师签名: 年月日摘 要黑白棋,又叫反棋(Reversi)、奥赛罗棋(Othello)、苹果棋或翻转棋。黑白棋在西方和日本很流行。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。棋子:黑白棋棋子每颗由黑白两色组成,一面白,一面黑,共64个(包括棋盘中央的4个)。棋子呈圆饼形。 棋盘:黑白棋棋盘由64格的正方格组成,游戏进行时棋

6、子要下在格内。棋盘可分为“角”、“边”以及黑白棋“中腹”。现今的棋盘多以8x8较为普遍。棋钟:正式的比赛中可以使用棋钟对选手的时间进行限制。非正式的对局中一般不使用棋钟。 黑白棋的棋盘是一个有8*8方格的棋盘。下棋时将棋下在空格中间,而不是像围棋一样下在交叉点上。开始时在棋盘正中有两白两黑四个棋子交叉放置,黑棋总是先下子。 下子的方法把自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜八个方向内有一个自己的棋子,则被夹在中间的全部翻转会成为自己的棋子。并且,只有在可以翻转棋子的地方才可以下子。如果玩家在棋盘上没有地方可以下子,则该玩家对手可以连下。双方都没有棋子可以下时棋局结束,以

7、棋子数目来计算胜负,棋子多的一方获胜。在棋盘还没有下满时,如果一方的棋子已经被对方吃光,则棋局也结束。将对手棋子吃光的一方获胜。 每个“翻转棋”游戏开始时,棋盘上已经交叉放好了四颗棋子。其中两颗是黑棋,另两颗是白棋。黑棋总是先走。 当您的棋子在某一直线方向包围了对手的棋子时,就可以翻转这些棋子的颜色,使它们成为您方的颜色。例如,如果您执黑棋,并且看到在一排白棋的某一端是一颗黑棋,那么当您将一颗黑棋放在这一排的另一端时,所有的白棋都将翻转并变为黑棋! 所有的直线方向均有效:水平、垂直和斜线方向。 走棋的唯一规则是只能走包围并翻转对手的棋子。每一回合都必须至少翻转一颗对手的棋子。 按规则不能再走棋

8、时,这一回合弃权。计算机会自动将控制权交给对方。关键词 黑白棋 反棋(Reversi)奥赛罗棋(Othello)苹果棋 翻转棋1 需求分析1.1 需求概述(1)收集资料,全面分析课题,分解问题,形成中体编程思路;(2)深入分析各个小问题,编写个部分程序模块;(3)对于设计中用到的关键函数,要联系实际 问题进行具体介绍;(4)上机调试,确保程序能正确运行;(5)设计完成后提交课程设计报告;1.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:硬件要求:一台计算机。软件配置:WINDOWS、C/VC+6.0。1.3 功能描述 编写一个黑白棋游戏的C程序,包括以下功能:初始状态:

9、在一个8*8的棋盘中央交叉排放黑白棋子各两枚,白棋先走。(1)每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围住的对方棋子将成为自己的棋子。包围的方向可以是上下左右以及斜线8个方向,只要能连成一线即可。(2)当轮到某一个棋手下子,但是他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走为止。(3)当棋盘上一方的棋子为0或者下满64格,游戏结束,棋子少者输。2 概要设计2.1 程序设计思路(1) 首先设计程序进入界面。(2) 在说明玩家和电脑各自的棋子。(3) 详细说明黑白棋的规则。并指引玩家开始游戏。(4) 初始棋盘。(5) 设计黑白棋程序的主体。

10、2.2 程序流程图 2 3 详细设计3.1 程序源代码3.1.1 代码功能#include #include /定义了一批C语言字符分类函数/#define SIZE 8 /定义SIZE的值为8/void display(char boardSIZE); /显示,输出函数/int valid_moves(char boardSIZE,int movesSIZE,char player); /该函数将前一数组各项复制到后一数组当中。主要用于黑白棋的人工智能。/void make_move(char boardSIZE,int row,int col,char player); /该函数用于玩家的

11、下棋位置行列的输入/void computer_move(char boardSIZE,int movesSIZE,char player);int get_score(char boardSIZE,char player); /计算比赛结果/int best_move(char boardSIZE,int movesSIZE,char player);3.1.2 所有源代码#include #include #define SIZE 8void display(char boardSIZE);int valid_moves(char boardSIZE,int movesSIZE,char

12、player);void make_move(char boardSIZE,int row,int col,char player);void computer_move(char boardSIZE,int movesSIZE,char player);int get_score(char boardSIZE,char player);int best_move(char boardSIZE,int movesSIZE,char player);int main()char boardSIZESIZE=0;int movesSIZESIZE=0;int row=0;int col=0;int

13、 no_of_games=0;int no_of_moves=0;int invalid_moves=0;int comp_score=0;int user_score=0;char y=0;char x=0;char again=0;int player=0;printf(n黑白棋-奥赛罗棋-made by 田坤林nn);printf(欢迎来到黑白棋的世界!棋子有些奇怪哦,牢记住自己的棋子样子吧!n);printf( 你的棋子是这样子的哦 - (o)n 电脑则是这这这样子的 - (*).n);printf(想在哪个方格落棋的话,请先输入方格的行数,n 然后再输入方格的列数哦!n);print

14、f(n祝你好运哦,按回车键就开始咯。n);scanf(%c,&again);do player=+no_of_games%2; no_of_moves=4; for(row=0;rowSIZE;row+) for(col=0;col=0&y=0&xSIZE&ySIZE&movesxy) make_move(board,x,y,o); no_of_moves+; break; else printf(莫法这样子下的哦,换个地方试试。n); else if(+invalid_moves2) fflush(stdin); printf(n哦啊,我竟走投无路了,哎,你来吧!); scanf(%c,&a

15、gain); else printf(n(*_*) ,我们都没法落子了,Game Over!看看谁的棋子多谁就赢啦.n); else if(valid_moves(board,moves,*) invalid_moves=0; computer_move(board,moves,*); no_of_moves+; else if(+invalid_moves2) printf(n哦啊,我竟走投无路了,哎,你来吧!n); else printf(n(*_*) ,我们都没法落子了,Game Over!看看谁的棋子多谁就赢啦.n); while(no_of_movesSIZE*SIZE&invali

16、d_moves2); display(board); comp_score=user_score=0; for(row=0;rowSIZE;row+) for(col=0;colSIZE;col+) comp_score+=boardrowcol=*; user_score+=boardrowcol=o; printf(The final score is:n); printf(Computer %dn User %dnn,comp_score,user_score); fflush(stdin); printf(你想再来一发么? (y/n): ); scanf(%c,&again);whil

17、e(tolower(again)=y);printf(n嘻嘻,下次再见咯!n);void display(char boardSIZE)int row=0;int col=0;char col_label=a;printf(n );for(col=0;colSIZE;col+) printf( %c,col_label+col);printf(n);for(row=0;rowSIZE;row+) printf( +); for(col=0;colSIZE;col+) printf(-+); printf(n%2d|,row+1); for(col=0;colSIZE;col+) printf(

18、 %c |,boardrowcol); printf(n);printf( +);for(col=0;colSIZE;col+) printf(-+);printf(n);int valid_moves(char boardSIZE,int movesSIZE,char player)int rowdelta=0;int coldelta=0;int row=0;int col=0;int x=0;int y=0;int no_of_moves=0;char opponent=(player=o)?*:o;for(row=0;rowSIZE;row+) for(col=0;colSIZE;co

19、l+) movesrowcol=0;for(row=0;rowSIZE;row+) for(col=0;colSIZE;col+) if(boardrowcol!= ) continue; for(rowdelta=-1;rowdelta=1;rowdelta+) for(coldelta=-1;coldelta=1;coldelta+) if(row+rowdelta=SIZE| col+coldelta=SIZE| (rowdelta=0&coldelta=0) continue; if(boardrow+rowdeltacol+coldelta=opponent) x=row+rowde

20、lta; y=col+coldelta; for(;) x+=rowdelta; y+=coldelta; if(x=SIZE|y=SIZE) break; if(boardxy= ) break; if(boardxy=player) movesrowcol=1; no_of_moves+; break; return no_of_moves;void make_move(char boardSIZE,int row,int col,char player)int rowdelta=0;int coldelta=0;int x=0;int y=0;char opponent=(player=

21、o)?*:o;boardrowcol=player;for(rowdelta=-1;rowdelta=1;rowdelta+) for(coldelta=-1;coldelta=1;coldelta+) if(row+rowdelta=SIZE| col+coldelta=SIZE| (rowdelta=0&coldelta=0) continue; if(boardrow+rowdeltacol+coldelta=opponent) x=row+rowdelta; y=col+coldelta; for(;) x+=rowdelta; y+=coldelta; if(x=SIZE|y=SIZ

22、E) break; if(boardxy= ) break; if(boardxy=player) while(boardx-=rowdeltay-=coldelta=opponent) boardxy=player; break; int get_score(char boardSIZE,char player)int score=0;int row=0;int col=0;char opponent=player=o?*:o;for(row=0;rowSIZE;row+) for(col=0;colSIZE;col+) score-=boardrowcol=opponent; score+

23、=boardrowcol=player; return score;int best_move(char boardSIZE,int movesSIZE,char player)int row=0;int col=0;int i=0;int j=0;char opponent=player=o?*:o;char new_boardSIZESIZE=0;int score=0;int new_score=0;for(row=0;rowSIZE;row+) for(col=0;colSIZE;col+) if(!movesrowcol) continue; for(i=0;iSIZE;i+) fo

24、r(j=0;jSIZE;j+) new_boardij=boardij; make_move(new_board,row,col,player); new_score=get_score(new_board,player); if(scorenew_score) score=new_score; return score;void computer_move(char boardSIZE,int movesSIZE,char player)int row=0;int col=0;int best_row=0;int best_col=0;int i=0;int j=0;int new_scor

25、e=0;int score=100;char temp_boardSIZESIZE;int temp_movesSIZESIZE;char opponent=player=o?*:o;for(row=0;rowSIZE;row+) for(col=0;colSIZE;col+) if(movesrowcol=0) continue; for(i=0;iSIZE;i+) for(j=0;jSIZE;j+) temp_boardij=boardij; make_move(temp_board,row,col,player); valid_moves(temp_board,temp_moves,op

26、ponent); new_score=best_move(temp_board,temp_moves,opponent); if(new_scorescore) score=new_score; best_row=row; best_col=col; make_move(board,best_row,best_col,player); 结束语通过本次黑白棋程序设计,我觉得对自己有很大的提高,程序员的工作可以说很不简单,忙起来还真的有得让你忙个不完的。得益的是这让我克服了平时爱偷懒的毛病,这在我以后的学习和工作中的心理定位和调节有很大的帮助。从敲代码到运行成功,我感受到编程是一项非常繁琐周密的活动,它不仅需要一个人周密思考问题的能力,处理问题的能力,而且还需要有足够的耐心和严谨的作风,不得有半点马虎。代码里,一丁点小错误就会致使整个程序没有办法运行而让我头疼。但经过不

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1