课程设计报告

发布 2022-10-01 04:43:28 阅读 1603

五子棋游戏。

姓名:班级:

学号:完成时间:

完成地点:目录。

一、设计题目(问题)描述和要求 - 1 -

1. 题目:五子棋游戏 - 1 -

2. 问题描述: -1 -

二、系统分析与模块设计 - 1 -

三、系统设计 - 3 -

1. 系统总体框架 - 3 -

2. 模块结构功能分析及框图 - 3 -

3. 系统关键算法流程图 - 4 -

四、关键部分源程序** - 8 -

五、系统测试 - 8 -

六、小结 - 8 -

七、参考资料 - 9 -

用c语言编写一个五子棋游戏程序。要求:

1.能够在电脑屏幕上显示棋盘。

2.两个玩家交替行棋。

3.五子相连盘定赢棋。

1.确定软件功能:让两个玩家各自通过 w(上)、s(下)、a(左)、d(右)、空格(行棋)和上、下、左、右、enter(行棋)来进行游戏。当五子相连的时候判定赢棋一方。

2.定义和性数据结构:定义char gchessboard[19][19];表示棋盘。棋盘上每个交叉点有三种状态:

o表示甲方棋子,x表示乙方棋子,位置空闲。当前光标位置表示struct point

int x;

int y;

3.对软件进行功能模块划分:

1)定义核心数据结构。

2)初始化:画棋盘、显示器盘信息、棋盘置空。

3)设置接收键(退出键、落子键、光标移动键、忽略无效按键):接收,处理用户输入,直至: 分出胜负。按退出键。

4)移动光标:更新全局变量gcursor、移动光标至新位置。

5)落子与判定胜负:判断落子键有效性、更新数组与棋盘显示、判断是否走成五子相连。

1.定义核心数据结构。

棋盘交叉点坐标的数据结构。

struct point

int x,y;

定义全局变量。

int gplayorder

struct point gcursor

char gchessboard[19][19]

定义画棋盘所需的制表符、棋盘左上角点在屏幕上的位置、1号玩家的操作键键码、2号玩家的操作键键码、棋盘上交叉点的状态, 即该点有无棋子等一些符号常量。

2.初始化模块。

程序的初始化模块是用函数init来实现的。

在初始化图象部分调用了函数drawmap。函数drawmap的功能是根据gchessboard棋盘状态在屏幕上画一个19x19的棋盘。

在函数drawmap中又调用了函数drawcross,用来画棋盘上的交叉点。

3.设置接收键。

统程序在主函数中进入循环后,调用函数getkey来获取用户的按键。

函数getkey的作用就是等待用户按键,然后返回该按键值。

按键如果是字母,getkey函数将把按键值的低字节处理成大写字母。

这样无论用户是按'a'还是'a',返回的按键值是一样的。

获取到按键值后,主函数要调用函数chesskey来分析按键类型,根据按键类型采取不同的反应动作。

4.移动光标。

移动光标用函数movecursor来实现,它根据按键类型来设置光标的位置。当按键不是当前走棋方的光标移动键时,不能移动光标。

5.落子与判定胜负。

当玩家按下落子键,主函数先调用函数chessgo来执行落子命令若是当前玩家在棋盘上的空格点落子,则函数chessgo返回true, 且主函数继续调用函数judgewin来判断当前玩家是否赢棋。

3、关键算法流程图。

定义核心数据结构。

* 棋盘交叉点坐标的数据结构。

struct point

int x,y;

* 定义全局变量。

int gplayorder指示当前行棋方。

struct point gcursor光标在棋盘上的位置 */

char gchessboard[19][19用于记录棋盘上各点的状态*/

* 定义符号常量。

*定义画棋盘所需的制表符*/

#define crossru 0xbf /*右上角点*/

#define crosslu 0xda /*左上角点*/

#define crossld 0xc0 /*左下角点*/

#define crossrd 0xd9 /*右下角点*/

#define crossl 0xc3 /*左边*/

#define crossr 0xb4 /*右边*/

#define crossu 0xc2 /*上边*/

#define crossd 0xc1 /*下边*/

#define cross 0xc5 /*十字交叉点*/

*定义棋盘左上角点在屏幕上的位置*/

#define mapxoft 5

#define mapyoft 2

*定义1号玩家的操作键键码*/

#define play1up 0x1157/*上移--'w'*/

#define play1down 0x1f53/*下移--'s'*/

#define play1left 0x1e41/*左移--'a'*/

#define play1right 0x2044/*右移--'d'*/

#define play1do 0x3920/*落子--空格键*/

*定义2号玩家的操作键键码*/

#define play2up 0x4800/*上移--方向键up*/

#define play2down 0x5000/*下移--方向键down*/

#define play2left 0x4b00/*左移--方向键left*/

#define play2right 0x4d00/*右移--方向键right*/

#define play2do 0x1c0d/*落子--回车键enter*/

*若想在游戏中途退出, 可按 esc 键*/

#define escape 0x011b

*定义棋盘上交叉点的状态, 即该点有无棋子 */

*若有棋子, 还应能指出是哪个玩家的棋子 */

#define chessnull 0 /*没有棋子*/

#define chess1 'o'/*一号玩家的棋子*/

#define chess2 'x'/*二号玩家的棋子*/

*定义按键类别*/

#define keyexit 0 /*退出键*/

#define keyfallchess 1 /*落子键*/

#define keymovecursor 2 /*光标移动键*/

#define keyinvalid 3 /*无效键*/

*定义符号常量: 真, 假 --真为1, 假为0 */

#define true 1

#define false 0

初始化。*界面初始化,数据初始化*/

void init(void)

int i,j;

char *msg=

/*先手方为1号玩家*/

gplayorder = chess1;

/*棋盘数据清零, 即棋盘上各点开始的时候都没有棋子*/

for(i=0;i<19;i++)

课程设计报告格式 课程设计

洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每...

课程设计总结,课程设计报告

课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动...

课程设计 课程设计报告格式

学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...