数据结构实验报告
题目: 0.3 海龟作图
学 院 计算机
专 业 计算机科学与技术
年级班别 200 7
级
1
班
学 号 3207006371
学生姓名 杨颖
指导教师 吴伟民
成 绩 ____________________
2009 年 6 月
一、实验题目:0.3 海龟作图
二、实验要求
(1)设计并实现海龟抽象数据类型 Turtle,并以此为基础设计一个演示海龟
作图的程序。
(2)利用上述定义的海龟实现作图命令,画出任意长度的线段、任意大小的
矩形和圆。
【实现提示】
海龟的相关类型说明为:
#define UP 0
#define DOWN 1
Typedef int penState; //取值 UP 或者 DOWN
Typedef struct{float v,h;}aPoint;
Typedef struct{
Int heading; //龟头(画笔)方向,简称龟头朝向
penState pen; //画笔状态:UP 抬笔,DOWN 落笔
Int color; //画笔当前颜色
aPoint Pos; //海龟当前位置
}newTurtle;
三、编程环境
WIN-TC
四、抽象数据类型定义以及各基本操作的简要描述
(1).题目
设置海龟类型的基本操作为:
Void StartTurtleGraphics()
//显示作图窗口,并在窗口内写出本人姓名、上机号和实习题号。
Void StartTurtle()
//令海龟处于作图的初始状态。即显示作图窗口,并将海龟定位在窗口正中;置
画笔状态为//落笔、龟头朝向为 0 度(正东方向)。
Void PenUp()
//改变画笔状态为抬笔。从此时起,海龟移动将不在屏幕上作图。
Void PenDown()
//改变画笔状态为落笔。从此时起,海龟移动将在屏幕上作图。
int TurtleHeading()
//返回海龟当前朝向位置。
aPoint *TurtlePos()
//返回海龟的当前位置。
Viod Move(int steps)
//依照海龟头的当前朝向,向前移动海龟 steps 步。
Void Turn(int degrees)
//改变海龟头的当前朝向,逆时针旋转 degrees 度。
Void MoceTTo(aPoint newPos)
//将海龟移动到新的位置 newPos。如果是落笔状态,则同时作图。
Void TurnTTo(float angle)
//改变海龟头的当前朝向为,从正东方向起的 angle 度。
Void SetTurtleColor(int color)
//设置海龟画笔的颜色为 color。
(2).存储结构定义
#include "graphics.h"
#include "math.h"
#include "stdio.h"
#include "conio.h"
#include "bios.h"
#include "dos.h"
#include "io.h"
#define BOOL enum bool
#define ENTER 0x1c
#define PEN_DOWN 0x50
#define PEN_UP 0x48
#define LEFT 0x4b
#define RIGHT 0x4d
#define F_11 0x57
#define F_10 0x44 /*清除*/
#define F_6 0x40 /*改变颜色*/
#define F_8 0x42 /*改变龟头转动的度数*/
#define ESC 0x01
#define noname1 0x4a
#define noname2 0x4e
#define UP 0
#define DOWN 1
#define Pen_Up 0x49 /*抬笔*/
#define Pen_Down 0x51 /*落笔*/
#define CHOOSE enum choose
char STATE[128],PRESS[128];
float Radius=100.00;
void interrupt far (*oldfunc)(); /*取得中断向量入口*/
enum bool {FALSE, TRUE};
enum choose{LIST, IN_ERROR, PEN_UP_DONE, PEN_DOWN_DONE,
NEW_COLOR_DONE, NEW_POSITION_DONE,
Draw_DONE,FORWARD_DONE, BACKWARD_DONE,
NEW_ANGLE_DONE, NEW_DEGREES_DONE,
CLEAR_DONE, DRAW_DONE, INPUT_COLOR,INPUT_POSITION,
INPUT_HEAD, INPUT_STEPS};
typedef int penState;
typedef struct
{float v,h;}aPoint;
typedef struct
{
float heading;
penState pen;
int color;
aPoint Pos;
}newTurtle;
newTurtle turtle; /*声明海龟类型*/
unsigned char TEM[4];
unsigned char TEM1[4];
typedef struct node
{
int color;
int x1, x2, y1, y2;
}NODE;
五、算法设计(程序清单)
---------------------------------turtle.h--------------------------------------
#include"Define.h" /*海龟类型*/
void HuaChuangKou() /*画窗口*/
{
setcolor(5);
setfillstyle(SOLID_FILL,0);
bar(51, 250, 171, 275);
rectangle(51, 250, 171, 275);
while(bioskey(1)==0)
{
setcolor(5);
line(93, 270, 98, 270);
setcolor(5);
line(93, 270, 98, 270);
}
window(66, 17, 66, 17);
}
void GuanChuangKou() /*关闭窗口*/
{
setfillstyle(SOLID_FILL,0);
bar(51, 250, 171, 275);
}
int GET_history()
{ int i, j;
union REGS regs;
unsigned char t;
regs.h.ah=0x07;
IN_AGAIN:
for(i=0;i<4;i++)
TEM[i]=48; /*用于比较来寻找菜单号的数组全部置零*/
for(i=0;i<4;i++)
{IN:
while(bioskey(1)==0);
if(bioskey(1)==0x1c0d) /*若输入是回车*/
{ bioskey(0); goto OUT;}
int86(0x21, ®s, ®s); /*使用 int86() 函数进行 BIOS 接口的系
统调用*/
t=regs.h.al; /*接收出口信息*/
if(t>57 || t<48) goto IN;
else
{for(j=3;j>0;j--)TEM[j]=TEM[j-1];
TEM[0]=t;
printf("%c", t);
}
}
while(bioskey(1)==0);
if(bioskey(1)!=0x1c0d) /*若不是回车且超出输入窗口的范围时*/
{bioskey(0);
GuanChuangKou(); /*关闭窗口*/
HuaChuangKou(); /*重开窗口*/
goto IN_AGAIN; /*再次输入*/
}
OUT:return YY(0);
}