




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
辽 宁 工 业 大 学 C语言程序设计 课程设计(论文)题目: 黑白棋游戏 院(系): 软件学院 专业班级: 计算机信息管理 学 号: 000000000 学生姓名: 000 0 指导教师: 000 00 教师职称: 助 教 起止时间: 2008.12.22至2009.1.2 课程设计(报告)任务及评语院(系):软件学院 教研室:软件教研窒学 号000000学生姓名0000专业班级计算机信息管理000程序设计(报告)题目黑白棋游戏程序设计(报告)任务程序设计的任务与要求:(1)掌握C语言编程的基础知识。(2)较熟练地编写C语言应用程序。(3)了解C语言的常用标准函数、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2009 年 1 月 13 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1程序功能介绍22.2程序整体设计说明32.2.1设计思路32.2.2数据结构设计及用法说明42.2.3程序结构(流程图)62.2.4各模块的功能及程序说明82.2.5程序结果82.3程序源代码及注释9第3章 课程设计总结21参考资料22第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程序功能介绍 只有在可以吃到对方棋子的方格里落子。吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。夹子的方向包含:水平、竖直、斜对角。1 点击“新游戏”,将从新初始化棋局。2 打开游戏存档,默认是.bwc文件3 保存当前游戏,默认扩展名为.bwc4 后退一步,即悔棋5 前进一步,只有在前面的操作存在后退的基础上,该按钮才有效。6 “与或图”按钮,当选择与或法与电脑博弈时会显示与或图。7 点击设置按钮后,会出现以下对话框,可以修改设置,点击确定按钮后生效。2.2程序整体设计说明程序设计的组成框图:吃子规则:采用夹吃的原则,左图用红色标记的是黑方可落子的位置。当黑方落子之后,则夹在两黑子中间的白子都将变为黑子。右图是落子后的棋盘布局,蓝色标记的是白方可落子的位置。夹子的方向包含:水平、竖直、斜对角2.2.1设计思路从程序表面看,这是一个二维平面图,所以数据用二维数组来表示,数组两个下标可以表示棋盘上的位置,数组元素的值代表棋格上的状态,共有三种情况,分别是0代表空格,1代表白棋,2代表黑棋。这样程序的主要工作是接收棋手按键操作,棋手用Up、Down、Left、Right控制光标移动,回车键表示落子。如果无棋可走则显示停步信息。一旦接收到回车键或空格键,说明棋手落子,先判断是否是有效位置,也就是说已经有棋子的位置不能重叠落子,然后再判断该位置能否吃掉对方的棋子(根据黑白棋的游戏规则,只能将棋子落子能吃掉对方棋子的位置上),如果条件满足则在该位置落子,落子时执行这样几个步骤,先调用画棋子函数,将棋盘的相应位置上画上棋子,再调用吃棋子函数,将对手的棋子变成自己颜色的棋子,然后根据吃掉对手棋子的个数,给自己加上相应的分数和给对手减去相应的分数,再将数组中的相应元素赋值,标志该位置已经落子,最后将落子的权限交给对手。2.2.2数据结构设计及用法说明 在主函数中,通过调用绘制棋盘、棋手对战,判断棋盘变化、改变棋子颜色等函数的调用来实现主函数的相应的功能 ,以下是有关于主函数的流程图。 绘制棋盘和初始棋子rawQp棋手对战 playtoplay判断棋盘变化(能否分出胜负)QpChange计算棋手的成绩输出胜利者信息Y1DrawQp绘制棋盘和初始棋子在界面上绘制320*320的棋盘,并在棋盘中绘制8*8的格子,初始棋子2SetPlay设置棋子第一次的颜色先走棋者持白子,后走棋黑子,每次交替3Playtoplay人人对战函数俩棋手交替走棋,定义键盘操作等4MoveColor恢复原来棋盘状态棋子由初始位置到落子位置的路径不改变颜色5QpChange判断棋盘的变化改变棋子的颜色走棋后判断棋盘的变化情况,根据变化情况判断是否可以输出分数6DoScore处理分数根据棋盘上旗子的多少进行分数的处理2.2.3程序结构(流程图)(1)落棋位置判断:(2)输出成绩:(3)输出最后的胜利者结果:2.2.4各模块功能及程序说明落棋位置的判断模块:判断落子后棋盘的变化,判断棋手的落棋位置和次数,两方交换走棋。成绩输出模块:判断输出哪个棋手的分,在不同的位置输出,清空成绩,判断哪方胜利。输出胜利者信息模块:开始判断最后的结果,将两人分数分别输出。2.2.5程序结果一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己棋子的数目多于对方。按键盘上的方向键可以上下左右移动棋子,按回车键可以摆放棋子。下到最后谁的棋子多,谁赢。2.3程序源代码及注释size=12px#include graphics.h /*图形系统头文件*/ #define LEFT 0x4b00 /*光标左键值*/ #define RIGHT 0x4d00 /*光标右键值*/ #define DOWN 0x5000 /*光标下键值*/ #define UP 0x4800 /*光标上键值*/ #define ESC 0x011b /* ESC键值*/ #define ENTER 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 DoScore(void);/*处理分数*/ void PrintScore(int n);/*输出成绩*/ void playWin(void);/*输出胜利者信息*/ /*主函数*/ void main(void) Int00wq1 initgraph(&gd,&gr,c:tc); /*初始化图形系统*/ Drap();/*画棋盘*/ playtoplay();/*人人对战*/ getch(); closegraph();/*关闭图形系统*/ void DrawQp()/*画棋盘*/ int i,j; score1=score2=0;/*棋手一开始得分都为0*/ setbkcolor(BLUE); for(i=100;i=64-score1-score2) /*如果尝试超过空格数则停步*/ MoveColor(x,y); fillellipse(x,y,15,15); break; else continue;/*如果按键无效*/ DoScore();/*分数的改变*/ break;/*棋盘变化了,则轮对方走棋*/ else/*已经有棋子就继续按键*/ continue; else /*四个方向按键的判断*/ if(key=LEFT&x120)/*左方向键*/ MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); x-=40; fillellipse(x,y,15,15); else if(key=RIGHT&x80)/*右方向键*/ MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); x+=40; fillellipse(x,y,15,15); else if(key=UP&y120)/*上方向键*/ MoveColor(x,y); fillellipse(x,y,15,15); SetPlayColor(t); y-=40; fillellipse(x,y,15,15); else if(key=DOWN&y400)/*下方向键*/ 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)/*格子已经占满或一方棋子为0判断胜负*/ playWin();/*输出最后结果*/ break; t=t%2+1; /*一方走后,改变棋子颜色即轮对方走*/ cc=0; /*计数值恢复为0*/ /*endwhile*/ void SetPlayColor(int t)/*设置棋子颜色*/ if(t%2=1) setfillstyle(SOLID_FILL,15);/*白色*/ else setfillstyle(SOLID_FILL,8);/*灰色*/ void MoveColor(int x,int y)/*走了一步后恢复原来格子的状态*/ if(y100)/*如果是从起点出发就恢复蓝色*/ setfillstyle(SOLID_FILL,BLUE); else/*其他情况如果是1就恢复白色棋子,2恢复黑色棋子,或恢复蓝色棋盘*/ switch(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); /*蓝色*/ int QpChange(int x,int y,int t)/*判断棋盘的变化*/ int i,j,k,kk,ii,jj,yes; yes=0; i=(x-120)/40; /*计算数组元素的行下标*/ j=(y-120)/40; /*计算数组元素的列下标*/ SetPlayColor(t);/*设置棋子变化的颜色*/ /*开始往8个方向判断变化*/ if(j6)/*往右边*/ for(k=j+1;k8;k+) if(ak=aj|ak=0)/*遇到自己的棋子或空格结束*/ break; if(ak!=0&k8) for(kk=j+1;kk1)/*判断左边*/ for(k=j-1;k=0;k-) if(ak=aj|!ak) break; if(ak!=0&k=0) for(kk=j-1;kkk&k=0;kk-) akk=aj; fillellipse(120+i*40,120+kk*40,15,15); if(kk!=j-1) yes=1; if(i6)/*判断下边*/ for(k=i+1;k8;k+) if(akj=aj|!akj) break; if(akj!=0&k8) for(kk=i+1;kk1)/*判断上边*/ for(k=i-1;k=0;k-) if(akj=aj|!akj) break; if(akj!=0&k=0) for(kk=i-1;kkk&k=0;kk-) akkj=aj; fillellipse(120+kk*40,120+j*40,15,15); if(kk!=i-1) yes=1; if(i1&j=0&kk=0&kkk&k=0;ii-,jj+) aiijj=aj; fillellipse(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=aj|!akkk) break; if(akkk!=0&k=0) for(ii=i+1,jj=j-1;ii1&j1)/*左上*/ for(k=i-1,kk=j-1;k=0&kk=0;k-,kk-) if(akkk=aj|!akkk) break; if(akkk!=0&k=0&kk=0) for(ii=i-1,jj=j-1;iik&k=0;ii-,jj-) aiijj=aj; fillellipse(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=aj|!akkk) break; if(akkk!=0&kk8&k8) for(ii=i+1,jj=j+1;iiK&K aiijj=aj; fillellipse(120+ii*40,120+jj*40,15,15); if(ii!=i+1) yes=1; return yes;/*返回是否改变过棋子颜色的标记*/ void DoScore()/*处理分数*/ int i,j; score1=score2=0;/*重新开始计分数*/ for(i=0;i8;i+) for(j=0;jscore1)/*开始判断最后的结果*/ outtextxy(100,50,black win!); else if(score2outtextxy(100,50,white win!); else outtextxy(60,50,you all win!); 第3章 课程设计总结通过本次C程序课程设计,我觉得对自己提高很大:克服了的偷懒的毛病,这在我以后的学习和工作中的心理定位与调节有很大的帮助。我感受到了编程是一项非常烦琐周密的活动,他不但需要一个人周密的思考问题的能力,处理问题的能力,还需要有足够的耐心和严谨治学的作风,来不得半点马虎。通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道如何去查找资料和整合处理这些资料的能力,这为以后的大学毕业设计论文打下了一个初步的基础使我收益最大的是享受到了一种成功的喜悦,在这两个星期之中从开始的确定论文题目,然后是上网和上图书馆查找资料,编写C语言原程序,然后是进行编译,这个环节是一个非常痛苦和艰难的,常常会因为一小点的错误而在编译失败与再次修改的漫漫循环之路中,但失败的越多,对人的考验就越多,在编译运行成功之后的享受成功的喜悦也就越多,另外在调试程序的过程中不断的思考和运用已经学到的知识,这对于自己是有很大的提高的。 这个黑白棋游戏原程序的最大特点是采用了在主函数中调用子函数思想,每一种功能都是用子函数的办法来进行处理,简洁,清晰,方便,不容易出现错误。 在输入错误时本来想用一种警告的铃声来提醒用户,由于所学的知识不多,自己的编程经验不足,按现有的知识水平有些东西暂时还无法解决,还有待于在以后的学习中不断提高和改进!好条件。在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。但是最后在同学和老师的鼓励下,我克服了这个最大的困难!完成了我的课程设计!最后感谢我的课程设计老师,胡老师对我的指导与帮助,在您的帮助下我顺利的完成了我的第一个C语言课程设计。参考资料1郑影,计算机网络设备与管理基础教程.中国科技信息出版社,2001-10-1:73-862 郑影.网络设备与管理实用实训教程.清华大学出版社,2002-6-1:98-1563 李
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字媒体在塑造消费主义态度中的作用-洞察及研究
- 神牡安神胶囊对α-受体能的调控机制研究-洞察及研究
- 2025-2030工业互联网平台商业模式创新与制造业转型升级路径研究报告
- 2025-2030工业云计算边缘节点设备可靠性提升技术路径报告
- 2025-2030工业5G专网部署模式与垂直行业适配性研究
- 2025-2030工业5G专网建设标准制定与设备供应商准入资质研究
- 成本控制优化-洞察及研究
- 监理服务行业品牌竞争力分析-洞察及研究
- 字典树在数据库索引中的应用实践-洞察及研究
- 益生菌在肥胖防治中的应用研究-洞察及研究
- 二手车国庆节活动方案
- 人教版八年级上册地理教学计划及进度表
- 第5单元 专题训练(3) 微观反应示意图2024-2025学年九年级上册化学配套教学设计(人教版)
- 2025高考物理步步高同步练习必修3练透答案
- 分包单位与班组签订合同
- DZ∕T 0215-2020 矿产地质勘查规范 煤(正式版)
- 2024年初中升学考试九年级数学专题复习新课标要求-中考33讲
- (高清版)DZT 0289-2015 区域生态地球化学评价规范
- 冲压车间给员工培训课件
- 八年级上册数学课件综合与实践《哪个城市夏天更热》北师大版
- 过敏性鼻炎的症状和治疗方法
评论
0/150
提交评论