1、机械电子工程教研室 软件技术基础 实验安排 4月 20日 晚上 18:30-22:40 地点:西苑 3#504 512 安排:两人一组 结果:程序代码,调试成功。 机械电子工程教研室 软件技术基础 计算机 软件技术基础 机械电子工程教研室 软件技术基础 工程的概念 含有多个 C源文件 . 将一类完成一个特定任务的凼数放在一个 C文件中,便于管理。 再编写 .H文件,声明在 .C文件中实现了的凼数,方便其他文件调用。 机械电子工程教研室 软件技术基础 工程的概念 / C File GUI.C void GUI_DrawPiont(int x, int y) printf(“Draw Piontn
2、“); void GUI_DrawLine(int beginx, int beginy, int endx, int endy) printf(“Draw Linen“); void GUI_DrawCircle(int x, int y, int radius) printf(“Draw Circlen“); 机械电子工程教研室 软件技术基础 工程的概念 / H File GUI.H #ifndef _GUI_H_ #define _GUI_H_ void GUI_DrawPiont(int x, int y); void GUI_DrawLine(int beginx, int begi
3、ny, int endx, int endy); void GUI_DrawCircle(int x, int y, int radius); #endif / C File main.c #include “GUI.H” Int main() int x, y; x = 10, y = 10; GUI_DrawPiont(x, y); 机械电子工程教研室 软件技术基础 Why EasyX Turbo C 的环境实在太老了 , 很丌方便 VC下叧能做一些文字性的练习题 , 想画条直线画个圆都很难 , 还要注册窗口类 、 建消息循环等等, 初学者会受严重打击的 。 初学编程想要绘图就得用 TC,
4、 很是无奈 。 还有计算机图形学 , 这门课程的重点是绘图算法, 而丌是 Windows 编程 。 EasyX, 就是 VC方便的开发平台和 TC简单的绘图功能相结合 。 机械电子工程教研室 软件技术基础 资源 http:/ 其他类似的库 EGE 机械电子工程教研室 软件技术基础 安装 EasyX绘图库支持 Visual C+ 6.0/2008/2010。下载的压缩包解压缩后 , 执行 Setup.hta 即可 。 本质是 , 查找 Visual C+ 开发系统的安装目录 ,并将相关文件分别拷贝至开发系统的 LIB目录和INCLUDE目录 。 成功安装后 , 使用方法和 TC/BC 里面的 g
5、raphics.h 没太大区别 机械电子工程教研室 软件技术基础 使用 EasyX 在使用上 , 基本和 TC / BC 里面的 graphics.h 没太大区别 #include “stdafx.h“ #include #include int main(int argc, char* argv) initgraph(640, 480); circle(100, 100, 60); getch(); closegraph(); return 0; 机械电子工程教研室 软件技术基础 EasyX 原理 基于 Windows图形编程 , 将 Windows下的复杂程序过程进行封装 , 将 Wind
6、ows下的编程过程隐藏 , 给用户提供一个简单熟悉的接口 。 用户对于图形库中函数的调用 , 最终都会由 Windows的底层 API实现 。 通过学习 Windows程序设计 , 我们也可以实现这样一个类似的库 。 EasyX不开源 , EGE开源 , 可供参考 。 机械电子工程教研室 软件技术基础 基本概念 颜色 EasyX 使用 24bit 真彩色 常量 值 颜色 常量 值 颜色 BLACK 0 黑 DARKGRAY 0x555555 深灰 BLUE 0xAA0000 蓝 LIGHTBLUE 0xFF5555 亮蓝 GREEN 0x00AA00 绿 LIGHTGREEN 0x55FF55
7、 亮绿 CYAN 0xAAAA00 青 LIGHTCYAN 0xFFFF55 亮青 RED 0x0000AA 红 LIGHTRED 0x5555FF 亮红 MAGENTA 0xAA00AA 紫 LIGHTMAGENTA 0xFF55FF 亮紫 BROWN 0x0055AA 棕 YELLOW 0x55FFFF 黄 LIGHTGRAY 0xAAAAAA 浅灰 WHITE 0xFFFFFF 白 机械电子工程教研室 软件技术基础 基本概念 颜色 用 16 进制的颜色表示 , 形式为: 用 RGB 宏合成颜色 。 0xbbggrr (bb=蓝, gg=绿, rr=红 ) RGB 宏用于通过红、绿、蓝颜色
8、分量合成颜色。 COLORREF RGB( BYTE byRed, / 颜色的红色部分 BYTE byGreen, / 颜色的绿色部分 BYTE byBlue / 颜色的蓝色部分 ); setcolor(0xff0000); setcolor(BLUE); setcolor(RGB(0, 0, 255); 机械电子工程教研室 软件技术基础 基本概念 坐标 在 EasyX 中,坐标分两种: 逻辑坐标和物理坐标 。 物理坐标 : 物理坐标是描述设备的坐标体系。坐标原点在屏幕的左上角, X 轴向右为正, Y 轴向下为正,度量单位是象素。坐标原点、坐标轴方向、缩放比例都丌能改变。 逻辑坐标: 逻辑坐标
9、是在程序中用于绘图的坐标体系。坐标默认的原点在屏幕的左上角, X 轴向右为正, Y 轴向下为正,度量单位是象素。 坐标原点可以通过 setorigin() 凼数修改; 坐标轴方向可以通过 setaspectratio() 凼数修改; 缩放比例可以通过 setaspectratio() 凼数修改。 凡是没有注明的坐标,均指逻辑坐标。 机械电子工程教研室 软件技术基础 基本概念 设备 设备:简单来说,就是绘图表面。 在 EasyX 中,设备分两种,一种是默认的绘图窗口,另一种是 IMAGE 对象。通过 SetWorkingImage() 凼数可以设置当前用于绘图的设备。 设置当前用于绘图的设备后,
10、所有的绘图凼数都会绘制在该设备上。 机械电子工程教研室 软件技术基础 函数 绘图环境相关函数 颜色模型 图形颜色及样式设置相关函数 图形绘制相关函数 文字输出相关函数 图像处理相关函数 鼠标相关函数 其它函数 机械电子工程教研室 软件技术基础 绘图环境相关 凼数或数据 描述 cleardevice 清除屏幕内容。 initgraph 初始化绘图窗口。 closegraph 关闭图形窗口。 getaspectratio 获取当前缩放因子。 setaspectratio 设置当前缩放因子。 graphdefaults 恢复绘图环境为默认值。 setorigin 设置坐标原点。 setcliprgn
11、 设置当前绘图设备的裁剪区。 clearcliprgn 清除裁剪区的屏幕内容。 机械电子工程教研室 软件技术基础 图形颜色及样式设置相关函数 凼数或数据 描述 getbkcolor 获取当前绘图背景色。 getfillcolor 获取当前填充颜色。 getfillstyle 获取当前填充样式。 getlinecolor 获取当前画线颜色。 getlinestyle 获取当前画线样式。 getrop2 获取前景的二元光栅操作模式。 setbkcolor 设置当前绘图背景色。 setfillcolor 设置当前填充颜色。 setfillstyle 设置当前填充样式。 setlinecolor 设置
12、当前画线颜色。 setlinestyle 设置当前画线样式。 setrop2 设置前景的二元光栅操作模式。 机械电子工程教研室 软件技术基础 图形绘制相关函数 凼数或数据 描述 arc 画椭圆弧。 circle 画圆。 clearrectangle 清空矩形区域。 ellipse 画椭圆。 polygon 画多边形。 fillcircle 画填充圆(有边框)。 fillellipse 画填充椭圆(有边框)。 fillpolygon 画填充多边形(有边框)。 fillrectangle 画填充矩形(有边框)。 floodfill 填充区域。 getheight 获取绘图区的高度。 getpixe
13、l 获取点的颜色。 getw idth 获取绘图区的宽度。 getx 获取当前 x 坐标。 gety 获取当前 y 坐标。 line 画线。 linerel 画线。 lineto 画线。 moverel 移动当前点。 moveto 移动当前点。 pie 画填充椭圆扇形。 putpixel 画点。 rectangle 画空心矩形。 solidrectangle 画无边框填充矩形。 机械电子工程教研室 软件技术基础 文字输出相关函数 凼数或数据 描述 getfont 获取当前字体样式。 gettextcolor 获取当前字体颜色。 LOGFONT 保存字体样式的结构体。 outtext 在当前位置
14、输出字符串。 outtextxy 在指定位置输出字符串。 drawtext 在指定区域内以指定格式输出字符串。 setbkmode 设置输出文字时的背景模式。 setfont 设置当前字体样式。 settextcolor 设置当前字体颜色。 textheight 获取字符串实际占用的像素高度。 textwidth 获取字符串实际占用的像素宽度。 机械电子工程教研室 软件技术基础 图像处理相关函数 凼数或数据 描述 IMAGE 保存图像的对象。 loadimage 读取图片文件。 saveimage 保存绘图内容至图片文件。 getimage 从当前绘图设备中获取图像。 putimage 在当前
15、绘图设备上绘制指定图像。 GetWorkingImage 获取指向当前绘图设备的指针。 rotateimage 旋转 IMAGE 中的绘图内容。 SetWorkingImage 设定当前绘图设备。 Resize 调整指定绘图设备的尺寸。 GetImageBuffer 获取绘图设备的显存指针。 GetImageHDC 获取绘图设备句柄。 机械电子工程教研室 软件技术基础 鼠标处理相关函数 凼数或数据 描述 FlushMouseMsgBuffer 清空鼠标消息缓冲区。 GetMouseMsg 获取一个鼠标消息。如果当前鼠标消息队列中没有,就一直等待。 MouseHit 检测当前是否有鼠标消息。 M
16、OUSEMSG 保存鼠标消息的结构体。 机械电子工程教研室 软件技术基础 用户键盘输入 kbhit() 检查当前是否有键盘输入,若有则返回一个非 0值,否则返回 0 机械电子工程教研室 软件技术基础 用户键盘输入 getch() Get a character from the console without echo The getch function reads a single character from the console without echoing. Neither function can be used to read CTRL+C. When reading a f
17、unction key or an arrow key, getch must be called twice; the first call returns 0 or 0xE0, and the second call returns the actual key code. Return Value getch return the character read. There is no error return. 机械电子工程教研室 软件技术基础 用户键盘输入 特殊按键 ASCII值 #define ESC 0x1b #define KEY_UP 0x48 #define KEY_DOW
18、N 0x50 #define KEY_RIGHT 0x4d #define KEY_LEFT 0x4b 机械电子工程教研室 软件技术基础 贪食蛇游戏设计 按键输入的问题 定时移动的问题 分析问题,找出哪些是我们暂时还不了解,不清楚的地方,但又会制约整个问题解决的地方先加以试验和测试。 机械电子工程教研室 软件技术基础 贪食蛇游戏设计 需求分析 概要设计 详细设计 编码 测试 用户手册 机械电子工程教研室 软件技术基础 需求分析 产品描述: 贪食蛇是一个经典的小游戏。玩家使用方向键操控一条长长的蛇不断吞下豆子,同时蛇身随着吞下的豆子不断变长,当蛇头撞到蛇身或障壁时游戏结束。 功能说明: 初始化游
19、戏界面,显示游戏名称三秒。 在程序中用格子初始蛇长及蛇的位置, 并以默认速度开始自动移动。用户 用 方向键 控制 蛇 为上下左右 移动 。 移动过程中每吃到一次食物,蛇的长度加 1,玩家得分增加,分数增加的多少和蛇的移动速度有关在蛇的长度达到一定时,移动速度加快。 移动过程中如果蛇头碰到自己或者围墙,显示用户得分,显示选择界面,询问用户是否结束游戏和继续游戏。 机械电子工程教研室 软件技术基础 需求分析 性能要求: 在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。游戏主界面应该力求美观,赏心悦目。游戏控制模块应做到
20、易懂、易操作,而且准确率高 ,不易出错。 运行环境: windows XP系统 /windows 2000以上系统中进行,程序设计要求在 visual C+6.0平台中 利用 EasyX图形库 进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低 ,目前一般配置的计算机都可进行。 机械电子工程教研室 软件技术基础 游戏采用模块化设计 。 整个系统分为: 初始化模块 游戏控制模块 食物模块 蛇模块 画图模块 退出选择模块 概要设计 机械电子工程教研室 软件技术基础 初始化模块: 图形库初始化 ,屏幕初始化用于显示游戏信息“贪吃蛇” ;初始化游戏运行画面,包括颜色边框等;初始化蛇的数据及状态。 游戏控制模块 处理按键 , 各种逻辑关系 食物模块 根据逻辑生成食物 蛇模块 定时移动 , 增加长度 , 前进方向 概要设计