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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

C语言课设下棋范本.docx

1、C语言课设下棋范本辽 宁 工 业 大 学 C语言程序设计 课程设计(论文)题目: 黑白棋游戏 院(系): 软件学院 专业班级: 计算机信息管理000班 学 号: 000000000 学生姓名: 000000 指导教师: 教师职称: 起止时间:2009.12.14至2009.12.26课程设计(报告)任务及评语院(系):软件学院 教研室:软件教研窒学 号091403059学生姓名于秀影专业班级计算机信息管理092班程序设计(报告)题目黑白棋游戏程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。(2)较熟练地编写C语言应用程序。(3)了解C语言的常用标准函数、编程技巧、异常

2、处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2009 年 12月31日目 录第1章 课程设计的目的与要求 11.1 课程设计目的 11.2 课程设计的实验环境 11.3 课程设计的预备知识 11.4 课程设计要求 1第2

3、章 课程设计内容 22.1程序功能介绍 22.2程序整体设计说明 22.2.1设计思路 22.2.2数据结构设计及用法说明 22.2.3程序结构(流程图) 32.2.4各模块的功能及程序说明 32.2.5程序结果 62.3程序源代码及注释 8第3章 课程设计总结 17参考资料. 18第1章 课程设计的目的与要求1.1 课程设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完程序设计语言(C)课程后进行的一次全面的综合练习。本课程设计的目的和任务: 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 2. 掌握C语言编程和程序调试的基本技能 3. 利用C语言进行基本的

4、软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力1.2 课程设计的实验环境硬件要求能运行Windows 2000/XP操作系统的微机系统。C语言程序设计及相应的开发环境。1.3 课程设计的预备知识熟悉C语言及C语言开发工具。1.4 课程设计要求1分析课程设计题目的要求2. 写出详细设计说明3. 编写程序代码,调试程序使其能正确运行4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告第2章 课程设计内容2.1程序功能介绍黑白棋游戏是一个深受人们喜爱的游戏,有人机对弈和人人对以两种情况,人与人对弈一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结

5、束前让自己棋子的数目多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。2.2程序整体设计说明2.2.1设计思路(1) 每个棋手下棋时,摆子的位置必须是以自己的棋子能包围住对方一个或多个棋子,被包围住的对方棋子将成为自己的棋子。包围的方向可以是上下左右以及斜线8个方向,只要能连成一线即可。(2) 当轮到某一个棋手下子,但是他没有可以包围对方棋子的位置时,他必须停步,让对方走棋,直到他可以走为止。(3) 当棋盘上一方的棋子为0或者下满64格,游戏结束,棋子少者输2.2.2数据结构设计及用法说明 在黑白棋的程序设计中主要应用了模块,利用主调函数和被调函数实现程序的运行。例如:在住

6、函数中调用了函数DrawQp();以实现绘制棋盘的功能。在这个程序中多处运用这种调用关系,以实现程序的运行。我首先使用了最简单的顺序结构程序设计。这是最基本的数据结构设计。按照我的设计思路按书写顺序依次执行主函数,接下来是各个被调函数,在对这些函数进行简单的连接。但程序都不会是简单的顺序结构,而是顺序、选择、循环三种结构的组合。所以在本程序的设计中,我大量的使用了选择结构和循环结构程序设计,进行选择结构程序设计需要考虑两个方面的问题:一是在C语言中如何表示条件,二是在C语言中用什么语句来实现选择结构。我使用了if语句实现选择结构,if语句一般用来实现单分支和双分支选择结构,有三种形式。例如在p

7、laytoplay模块中就大量的运用了if语句。而循环语句是一种算法多次执行,直到运行结束。在运用循环结构时,难在掌握好循环体,比如在Qpchange模块中就运用了大量的for循环嵌套,并配合break、continue使用进行循环。使程序更简洁,易读性加强。2.2.3程序结构(流程图)可参考流程图2.2.3-1图2.2.3-1流程图2.2.4各模块的功能及程序说明(1)main()主函数 首先初始化图形模式,然后通过调用函数先画出棋盘,再开始游戏,一旦游戏结束则关闭图形模式,程序结束。 (2)DrawQp()画棋盘函数 先设置背景色,然后通过循环利用水平和垂直直线画出棋盘,再利用填充圆画出初

8、始棋子。 (3)SetPlayColor()设置棋子的颜色 目的是为判断棋手和棋盘的变化,根据函数参数的值来设计填充棋子的当前颜色,值为1代表白棋,值为2代表黑棋。 (4)MoveColor()恢复原来棋子的状态 棋手要通过移动光标键走到落子的位置,在经过的路程上显示当前棋子,则会覆盖原来的棋盘状态,所以一旦棋子走过后,就应恢复原来的状态。 (5)playbplay()人人对战函数 这是游戏进行的函数,主要是接收棋手的按键消息,其处理过程如下: 1)按Esc键程序可以随时结束。 2)按上下左右光标键,则改变棋子移动的坐标值。 3)按回车键后判断: 如落子的位置已经有棋则无效,继续压键。 1如落

9、子位置是空格,可以将棋子落入格内,调用函数QpChange()判断是否引起棋盘的变化,函数值为1有变化,为0没变化。如果棋盘有变化,说明将包围的对方棋子吃掉,统计当前分数,如果棋盘没有变化,则说明落子的位置无法包围对方的棋子也视为无效棋,可以继续寻找合适的位置,但开始统计其落子次数,一旦尝试次数超过当前棋盘的空格数,则说明他无棋可走,则放弃此步,让对方下棋。 2如果棋子变化后,格子已占满64格或一方棋子为0,则游戏结束,显示胜利方信息。按任意键程序结束。 3重复上述步骤,直到游戏结束。 (6) QpChange()判断棋盘变化当棋手按回车键落子后,就要分别往8个方向判断是否包围住对方棋子,如果

10、是,则改变棋盘,也就是棋盘上黑白棋子的个数要发生变化。表示黑白棋的图形用屏幕上的像素坐标,而棋子的状态是数组元素a,所以要根据落子的坐标x和y计算出对应数组元素a的下标i和j。i代表行,j代表列,对于88的棋盘,它们的值为0-7,如果j6,往右边判断,从当前位置开始,用循环语句判断右边是否有一个或连续多个对方的棋子,遇到自己的棋子或空格则结束循环,如果循环结束不是遇到空白,且列坐标小于8,则说明这些位置的棋子是被自己包围的对方棋子,将它们吃掉也就是改变为自己的棋子,如果有棋子发生了变化,给棋盘变化标志值yes赋值为1,同样的方法向左、上、下等8个方向进行判断,并作相应的变化。如果所有方向都判断

11、过,并且没有引起棋盘的变化,则棋盘变化标志值yes为0,返回yes,结束本函数。 (7)DoScore ()处理分数 根据当前数组元素的值判断分数,也就是各方棋子的个数,如果数组元素值为1,白棋棋子数累加;如果数组元素值为2,则黑棋棋子数累加。 (8)PrintScore()输出成绩 利用设置实体填充模式填充矩形条消除掉前次的成绩,再利用索赔sprintf()函数将整数转换为字符串的形式,再利用outtextxy0函数将成绩输出。 (9)playWin()输出胜利者结果 根据分数值score1和score2的大小得出下棋的结果,输出赢者信息。 2.2.5程序结果运行结果可参照结果运行图2.2.

12、5-1,图2.2.5-2,图2.2.5-3,图2.2.5-4,图2.2.5-5:图2.2.5-1结果运行1图2.2.5-2结果运行2图2.2.5-3结果运行3图2.2.5-4结果运行4图2.2.5-5结果运行52.3程序源代码及注释#include graphics.h /*图形系统头文件*/#define LEFT 0x4b00 /*光标左键值*/#define RIGHT 0x4d00 /*光标右键值*/#define DOWN 0x5000 /*光标下键值*/#define UP 0x4800 /*光标上键值*/#define ESC 0x011b /* ESC键值*/#define E

13、NTER 0x1c0d /* 回车键值*/int a88=0,key,score1,score2;/*具体分数以及按键与存放棋子的变量*/char playone3,playtwo3;/*两个人的得分转换成字符串输出*/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 DoSc

14、ore(void);/*处理分数*/void PrintScore(int n);/*输出成绩*/void playWin(void);/*输出胜利者信息*/*主函数*/void main(void) int gd=DETECT,gr; initgraph(&gd,&gr,c:tc); /*初始化图形系统*/ DrawQp();/*画棋盘*/ playtoplay();/*人人对战*/ getch(); closegraph();/*关闭图形系统*/void DrawQp()/*画棋盘*/ int i,j; score1=score2=0;/*棋手一开始得分都为0*/ setbkcolor(B

15、LUE); for(i=100;i=64-score1-score2) /*如果尝试超则停步*/ MoveColor(x,y);fillellipse(x,y,15,15);break elsecontinue;/*如果按键无效*/ DoScore();/*分数的改变*/break;/*棋盘变化了,则轮对方走棋*/else/*已经有棋子就继续按键*/continue; else /*四个方向按键的判断*/if(key=LEFT&x120)/*左方向键*/MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x-=40;fillellipse

16、(x,y,15,15); elseif(key=RIGHT&x80)/*右方向键*/ MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);x+=40;fillellipse(x,y,15,15); elseif(key=UP&y120)/*上方向键*/ MoveColor(x,y);fillellipse(x,y,15,15);SetPlayColor(t);y-=40;fillellipse(x,y,15,15); elseif(key=DOWN&y1&j=0&kk=0&kkk&k=0;ii-,jj+) aiijj=aij;fillel

17、lipse(120+ii*40,120+jj*40,15,15); if(ii!=i-1)yes=1; if(i1)/*左下*/ for(k=i+1,kk=j-1;k=0;k+,kk-)if(akkk=aij|!akkk)break; if(akkk!=0&k=0) for(ii=i+1,jj=j-1;iik&k1&j1)/*左上*/ for(k=i-1,kk=j-1;k=0&kk=0;k-,kk-)if(akkk=aij|!akkk)break; if(akkk!=0&k=0&kk=0) for(ii=i-1,jj=j-1;iik&k=0;ii-,jj-) aiijj=aij;fillell

18、ipse(120+ii*40,120+jj*40,15,15); if(ii!=i-1)yes=1; if(i6&j6)/* 右下*/ for(k=i+1,kk=j+1;kk8&kk8;k+,kk+)if(akkk=aij|!akkk)break; if(akkk!=0&kk8&k8) for(ii=i+1,jj=j+1;iik&kscore1)/*开始判断最后的结果*/ outtextxy(100,50,black win!); else if(score2score1)outtextxy(100,50,white win!); elseouttextxy(60,50,you all win

19、!);第3章 课程设计总结这次实训是老师给了范例程序,经过自己的改写,实现要求。先做简单的输出,一步步的再做其它图案,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。. 我首先分析了程序的功能要求,划分程序功能模块。然后画出系统流程图并进行代码的编写。然后定义数据结构和各个功能子函数。最后程序的功能调试。完成系统总结报告以及使用说明书在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对数组和循环有了深刻的理解。. 由于课

20、程设计的时间较短,自身的知识水平有限,该系统的开发还有许多不尽如人意的地方,比如用户界面不够美观,出错处理不够完善等问题。这些都有待进一步的改善。但是,在这次课程设计中,我通过自己的努力以及老师和同学们的帮助,基本解决了所遇到的困难,按期完成了任务。计时在此希望以后应多进行这样的实训,加长设间,培养学生独立思考问题的能力,提高实际操作水平。 参考资料1 蔡明志.数据结构:使用C语言.北京.希望电脑公司C语言技术丛书.2005:38-462 吕凤翥.C语言程序设计习题解答与上机指导.北京:清华大学出版社,2006:65-703 张贤德.常用C语言用法速查手册.科学出版社,龙门.龙门书局.2003

21、:105-111 4 彭光泽.C语言入门.北京.电子科技大学出版社.2001:34-40 5 吴京.C语言基础教程.上海.科学出版社.2006:75-836 赵国玲,卫林.程语言基础C语言.北京.机械工业出版社.2003:90-967 龙昭华.语言程序设计.延边.延边出版社.1998:72-778 吕凤翥.C语言程序设计教师使用参考书.北京.清华大学出版社.2004:88-949张先亮,梁大伟.精通C语言高级教程.深圳.海洋出版社. 2004:102-10910孙玉芳,文强.C语言.北京.中国铁道出版社.2003:121-12711马秋菊.C语言程序设计道学靠道教.中国水利水电出版社.2006:231-23812赵欣胜,亢慧娟,刘晨宏.北京:北京科学出版社。2004:115-12113严桂兰.Turbo C语言程序设计.北京:电子工业出版社.1991:99-10714杨传杰.C语言实际应用.安徽科学技术.1994:100-10915 彭光泽 .应用:北京.ANSI C.子科技大学出版社.2002:66-73

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2