1、 游戏算法实践报告 姓 名 专 业 班 级 指导教师 2013 年 1 月 16 日 2 目录 1 问题定义与描述 3 1.1 问题定义 3 1.2 问题描述 3 2 关键技术 . 3 3 数据的组织 . 3 3.1 数据类型定义 . 3 3.2 数据存储结构 . 3 4 总体设计 . 4 4.1 系统模块图 . 4 4.2 二维数组的基本操作 4 5.详细设计 5 5.1 主函数流程图 5 5.2 双方走棋函数流程图 . 6 5.3 计算分数函数流程图 . 8 6 测试结果及分析 9 7 心得体会 . 9 附录:程序代码 . 9 3 1 1 问题定义与描述问题定义与描述 1.1 问题定义 黑
2、白棋游戏 1.2 问题描述 将黑白棋8X8的棋盘转化为一个二维数组,将棋的各种操作转化为二维数组的操作 2 2 关键技术关键技术 二维数组,判断情况的选择 3 3 数据的组织数据的组织 棋盘各个格子的地址 x、y,双方棋子放置的地址 i、j,双方新棋子放置的地址 ii、jj, 棋子活动的地址 kk,将要被连成一行的棋子 k,图形、颜色文件的调用等 3.1 数据类型定义 #define LEFT 0x4b00 /*光标左键值*/ #define RIGHT 0x4d00 /*光标右键值*/ #define DOWN 0x5000 /*光标下键值*/ #define UP 0x4800 /*光标上
3、键值*/ #define ESC 0x011b /* ESC 键值*/ #define ENTER 0x1c0d /* 回车键值*/ int a88=0,key,score1,score2;/*具体分数以及按键与存放棋子的变量*/ char playone3,playtwo3;/*两个人的得分转换成字符串输出*/ 3.2 数据存储结构 二维数组以顺序存储的形式实现 4 4 4 总体设计总体设计 4.1 系统模块图系统模块图 图 4.1 系统模块图 4.2 二维数组的基本操作二维数组的基本操作 向上:纵坐标-1 向下:纵坐标+1 向左:横坐标-1 向右:横坐标+1 左上:横-1,纵-1 左下:横
4、-1,纵+1 右上:横+1,纵-1 右下:横+1,纵+1 确定落子:返回 1 值,结束循环,跳入 player2,反之亦然 统计分数:落子后 score+,结束循环,跳入 score2,反之亦然 5 5.详细设计详细设计 5.1 主函数流程图主函数流程图 图 5.1 主函数流程图 6 5.2 双方走棋双方走棋函数流程图函数流程图 7 图 5.2 双方走棋函数流程图 8 5.3 计算分数计算分数函数流程图函数流程图 图 5.3 计算分数函数流程图 9 6 6 测试结果及分析测试结果及分析 图 6 运行程序,初始状态如图所示 7 7 心得体会心得体会 数据结构的课程设计学习让我初步体会到编程需要的
5、耐心、细致,在调整程序时更深 刻地体会到函数调用名必须一致,C 语言对大写小写十分敏感,以前没用过这么复杂的程 序,这次更有了深刻的体会。与此同时更加熟悉了二维数组在游戏编程中的应用和 C 语言 的图形文件的使用方法,不止迷宫的边界,棋盘的操作也是靠二维数组完成的。 附录:程序代码附录:程序代码 /*3.3.4 源程序*/ 10 #include “graphics.h“ /*图形系统头文件*/ #include “stdio.h“ #define LEFT 0x4b00 /*光标左键值*/ #define RIGHT 0x4d00 /*光标右键值*/ #define DOWN 0x5000
6、/*光标下键值*/ #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(in