C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
C语言课程设计
课程设计成绩评价表
指导老师评阅成绩表
学习与工作态度(30%)
选题的价值与意义(10%)
文献综述(10%)
研究水平与设计能力(20%)
课程设计说明说(论文)撰写质量(20%)
学术水平与创新(10%)
总分
指导老师签名:
年月日
课程设计答辩记录及评价表
学生
讲述情况
教师主要
提问记录
学生回答
问题情况
答辩评分
评分项目
分值
评价参考标准
评分
总分
优
良
中
及格
差
选题的价值与意义
10
9
8
7
6
4
文献综述
10
9
8
7
6
4
研究水平与设计能力
20
19
17
15
13
10
课程设计说明书(论文)撰写质量
20
19
17
15
13
10
学术水平与创新
10
9
8
7
6
4
答辩效果
30
28
25
22
19
15
是否同意论文(设计)通过答辩
□同意□不同意
答辩小组成员签名
答辩小组组长签名:
年月日
课程设计成绩评定表
成绩汇总
评分项目
评分
比例
分数
课程设计总分
指导老师评分
50%
答辩小组评分
50%
封面
成都信息工程学院
课程设计
题目:
五子棋游戏的设计与实现
作者姓名:
班级:
学号:
指导教师:
日期:
作者签名:
五子棋游戏的设计与实现
摘要
此五子棋游戏并不是想以往的人机对弈的玩法,它主要是模拟的真人玩法,是两人亲自对弈。
该游戏主要是利用Win-TC编译器来编译的,该项游戏编程中利用了头文件,库函数,各种实用函数,宏定义等方式来编译的。
而且对其整体的设计思路还进行了具体的分析。
同时还进行了游戏展示。
关键词:
C语言;五子棋;游戏;函数;头文件;
目录
1.引言
该项课程设计中利用了头文件,库函数,各种实用函数,宏定义等方式来编译的。
而且对其整体的设计思路还进行了具体的分析。
同时还进行了游戏展示。
1.1课程设计的目的
本程序旨在进一步训练自己的游戏开发技巧,能够掌握C语言图像模式下的编程。
本程序涉及很多图形函数,包括坐标定位,颜色设置(背景色和文本颜色设置)、线条颜色、填充颜色;直线风格、文本风格、填充风格;画线、画图、画矩形函数;图形系统的初始化和关闭;图形屏幕和文字屏幕的清除;从键盘获得取键值等等。
通过该程序的训练,使自己能对C语言有一个更深刻的了解,掌握五子棋会游戏开发的基本原理,从而为以后的程序开发奠定基础。
1.2课程设计的要求
本课程设计中要用到以下知识点:
a.在画图,定义数组大小,以及定义光标移动键时要用到:
宏定义,for循环等。
b.在判断下棋位置时要用到:
switch选择结构
c.贯穿整个游戏设计时用到:
画图函数,Done下棋函数,欢迎界面等函数。
1.3功能描述
本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。
程序能实现界面的初始化功能、下棋功能、胜负判断功能和帮助功能。
初始化功能。
程序初始化屏幕和棋盘,默认Player1先行。
实现下棋操作。
程序能实现下棋操作,在下棋过程中可以随时退出。
判断胜负。
程序对下棋的结果进行判断,分出胜负,并显示获胜信息。
显示帮助信息。
程序能提示玩家轮到哪方下棋了。
2.开发环境
该项游戏使用的开发工具是Win-TC
2.1Win-TC的基本介绍
Win-TC是一个TC2Windows平台开发工具。
该软件以TC2为内核,提供Windows平台的开发界面。
支持Windows平台下的功能,例如剪切,复制,粘贴等功能。
3.游戏总体设计
3.1功能模块设计
3.1.1系统模块图
本程序包括4个子模块,分别是初始化模块、功能控制模块、下棋操作模块和帮助模块,如图3.1.1所示。
各个模块的功能描述如下。
a.初始化模块。
该模块主要是用于初始化屏幕信息,包括显示欢迎信息、操作方法和初始化棋盘。
b.功能控制模块。
该模块是各个功能函数的集合,主要是被其他模块调用,包括画棋子、胜负判断和行棋转换等功能;
c.下棋操作模块。
该模块用于执行下棋操作。
d.帮助模块。
该模块主要用于显示帮助信息,提示轮到哪方下棋。
图3.1.1系统功能图
3.2流程图分析
3.2.1.任务执行流程图
游戏初始化是Player1先行。
当Player1行棋后,程序判断Player1是否获胜,如果获胜则显示获胜信息,否则交换行棋;交换行棋后,Player2行棋,当Player2行棋后,程序判断Player2是否获胜,如果获胜,则显示获胜信息,否则交换行棋。
程序以一方获胜或者按Esc键作为结束标志。
任务执行流程图如图3.2.1所示。
3.2.2.下棋函数(Done()函数)流程图
下棋操作函数(Done()函数)是本程序的核心部分,它调用功能模块中的函数来实现各种操作。
首先获取key值(UP、DOWN、LEFT、RIGHT、SPACE、ESC),如果获取的key值为ESC,则退出程序;如果key值为UP、DOWN、LEFT或RIGHT,表示移动棋子,程序首先在移动方向上判断棋子下一步是否超出边界,如果超出边界则什么也不用做(表示当前位置已经处于棋盘边界了),否则根据status[i][j]值来执行操作(如果status[i][j]为0,则画棋子显示运行轨迹;如果status[i][j]为flag值,则表示(i,j)位置已有棋子了);如果key值为SPACE,表示落子操作,则在落子后,判断当前行棋方是否获胜,如果获胜则显示获胜信息,否则交换行棋方。
Done()函数的流程图如图3.2.2所示。
3.3数据结构设计
本程序没有自定义结构体,只定义了一些全局变量和数组。
另外,该程序还涉及坐标位置的偏移,这方面的内容也在此说明。
3.3.1.定义数组
定义了数组status[N][N],该数组存储整型类型的值,最多可以存储到status[19][19](实际上棋盘只画了18*18个位置)。
数组status存储给定坐标(实际是反映映射位置的状态值)的状态值。
状态值有3个,分别是0、1和2.0表示给定坐标映射的位置没有棋子,1表示给定坐标映射的位置是Player1的棋子,2表示给定坐标映射的位置是Player2的棋子。
3.3.2.全局变量
step_x和step_y
这两个变量时整型类型的,表示行走时棋子处的坐标,分别表示x和y的坐标。
key
该变量是整型类型的,表示按下的键盘的键值,本程序中可以获取的值有0x4b00(LEFT)、0x4d00(RIGHT)、0x5000(DOWN)、0x4800(UP)、0x011b(ESC)和0x3920(SPACE)。
flag
该变量也是整型类型的,用以表示是哪个玩家。
flag为1是表示Player1,为2时则表示Player2.
3.3.3.坐标位置偏移
坐标位置偏移主要是用于函数DrawBoard()和函数DrawCircle()中。
这里定义了OFFEST_x(大小是4)、OFFSET_y(大小是3)和OFFSET(大小是20)3个偏移量,分别表示x、y坐标偏移和放大倍数。
3.4核心代码的分析
该程序中的精髓是main()函数
voidmain()
{
voidDrawBoard();/*画棋盘*/
voidDrawCircle(intx,inty,intcolor);/*画棋子*/
voidAlternation();
voidJudgePlayer(intx,inty);/*判断行棋方*/
voidDone();/*控制下棋的函数*/
intResultCheck(intx,inty);
voidWelcome();/*表示欢迎信息的函数*/
voidShowMessage();
intgdriver;
intgmode;
clrscr();
Welcome();
gdriver=DETECT;
gmode=0;
initgraph(&gdriver,&gmode,"");
player=1;
DrawBoard();
ShowMessage();
do
{
step_x=0;
step_y=0;
JudgePlayer(step_x-1,step_y-1);
do
{
while(bioskey
(1)==0);
key=bioskey(0);
Done();
}
while(key!
=SPACE&&key!
=ESC);
}
while(key!
=ESC);
closegraph();
}
4.程序实现
4.1程序结果的展示
4.1.1.欢迎界面
4.1.2游戏开始界面
4.1.3.行棋时的界面
4.1.4.胜利界面
结论
经过合理的设计与分析,和多次的调试此程序可以正常的运行。
并且达到了预期的效果。
通过此次的游戏设计,对五子棋游戏的设计有了更深的了解,对一些编程语言有了更好的掌握。
参考文献
[1]谭浩强C语言程序设计(第三版)清华大学出版社
[2]谭浩强C程序设计题解与上机指导清华大学出版社
[3]王岳斌等C程序设计案例教程清华大学出版社