池塘夜降彩色雨代码数据结构课程设计样本
- 格式:doc
- 大小:47.50 KB
- 文档页数:25
课程设计报告课程名称:专业:班级:姓名:学号:成绩:完成日期:年月日任务书摘要本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。
所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。
关键词:黑白棋编程设计目录1.引言 (3)2.课题分析 (6)3.具体设计过程 (7)3.1设计思路 (7)3.2程序设计流程图 (8)3.3.函数实现说明 (12)4.程序运行结果 (14)5.软件使用说明 (18)6.结论 (21)参考文献 (23)1.引言数据结构在计算机科学界至今没有标准的定义。
个人根据各自的理解的不同而有不同的表述方法:Sartaj Sahni在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。
这些联系可以通过定义相关的函数来给出。
”他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是 ADT(抽象数据类型Abstract Data Type)的物理实现。
”Lobert L.Kruse在《数据结构与程序设计》一书中,将一个数据结构的设计过程分成抽象层、数据结构层和实现层。
其中,抽象层是指抽象数据类型层,它讨论数据的逻辑结构及其运算,数据结构层和实现层讨论一个数据结构的表示和在计算机内的存储细节以及运算的实现。
/**********包涵到头文件*********/#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <dos.h>#include <graphics.h>#include <bios.h>/**********宏定义*********//*********键盘控制键盘扫描码**********/ #define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define L_SHEFT 0x01#define SPACE 0x3920#define LOWERF 0x2166#define UPPERF 0x2146#define LOWERA 0x1e61#define UPPERA 0x1e41#define LOWERQ 0x1071#define UPPERQ 0x1051#define ENTER 0x1c0d#define ONE 0x4f31#define TWO 0x5032#define THREE 0x5133#define FOUR 0x4b34#define FIVE 0x4c35#define SIX 0x4d36#define SEVEN 0x4737#define EIGHT 0x4838#define NINE 0x4939#define O 0x5230#define PLUS 0x4e2b#define JIAN 0x4a2d/**********全局变量*********/int rain_Num;int rain_v;int rain_wind;int rain_len;int key;int big;int m;int curx;int cury;int thunder[6][2]={{10,20},{-10,0},{10,20},{-25,-25},{15,0},{0,-15}}; /**********定义结构*************/struct rainDrop *head;/*********雨滴雨圈雷电数据结构体链表**********/struct rainDrop{int startX,curX,startY,curY;int flag;int endX;int endY;int rainColor;int status;int flagR;int curR;int thunderX1,thunderX2,thunderY1,thunderY2;int a,b;struct rainDrop *next;};/*********初始化画布**********//*********参数void**********//*********return无**********/void initgraphics(void){int gmode,gdriver;gdriver=DETECT;initgraph(&gdriver,&gmode,"");}/*********创建初始化头结点**********//*********返回指针p**********/struct rainDrop *creatDrop(void){struct rainDrop *p;p=(struct rainDrop *)malloc(sizeof(struct rainDrop));p->startX=random(640);p->startY=random(430);p->flag=430+rand()%50;p->curX=p->startX-(rain_wind*5);p->curY=p->startY+rain_len;p->rainColor=random(15);p->status=0;p->flagR=random(10);p->curR=random(2);p->thunderX1=random(300);p->thunderY1=random(20);p->next=NULL;return(p);}/*********重新生成链表数据**********/void recreatDrop(struct rainDrop *p){p->startX=random(640);p->startY=random(430);p->flag=430+rand()%50;p->curX=p->startX-(rain_wind*5);p->curY=p->startY+rain_len;p->rainColor=random(15);p->status=0;p->flagR=random(10);p->curR=random(3);}/*********创建整个链表**********/void creatRain(void){struct rainDrop *p1,*p2;/*定义两个指针*/int i;p1=p2=creatDrop();head=p1; /*赋值头指针*/for(i=0;i<rain_Num;i++) /*循环创建整个雨滴链表*/ {p2=creatDrop();p1->next=p2;p1=p2;}}/*********生成下一个雨滴的坐标位置**********/void updateRainLineData(struct rainDrop *p){if(big==2)/*加速为2个雨滴距离下落*/{p->startX=p->curX;p->startY=p->curY;p->curX=p->startX-(rain_wind*5);p->curY=p->startY+rain_len;p->startX=p->curX;p->startY=p->curY;p->curX=p->startX-(rain_wind*5); p->curY=p->startY+rain_len;p->startX=p->curX;p->startY=p->curY;}if(big==1)/*加速为一个雨滴的距离下落*/ {p->startX=p->curX;p->startY=p->curY;p->curX=p->startX-(rain_wind*5); p->curY=p->startY+rain_len;p->startX=p->curX;p->startY=p->curY;}else /*正常速度下落*/{p->startX=p->curX;p->startY=p->curY;}p->curX=p->startX-(rain_wind*5);p->curY=p->startY+rain_len;}/********雨雪选择函数***********/ selectWinter(){m=1;}selectSumm(){m=6;}/********分屏函数***********/splitScreen(struct rainDrop *p){curx=p->curX/200;cury=p->curY/110;switch(curx){case 0:switch(cury){case 0:case 1:selectSumm();break;case 2:selectWinter();break;case 3:selectSumm();break;}break;case 1:switch(cury){case 0:case 1:selectWinter();break;case 2:selectSumm();break;case 3:selectWinter();break;}break;case 2:switch(cury){case 0:case 1:selectSumm();break;case 2:selectWinter();break;case 3:selectSumm();break;}break;case 3:switch(cury){case 0:case 1:selectWinter();break;case 2:selectSumm();break;case 3:selectWinter();break;}break;}}/********画出彩色雨滴***********/void drawRainLine(struct rainDrop *p,int m){setcolor(p->rainColor); /*将雨滴赋予颜色*/if (m>=3&&m<=11) /*月份*/line(p->startX,p->startY,p->curX,p->curY);/*画雨滴*/ else /*雪*/{setcolor(WHITE);setfillpattern(2,WHITE);sector(p->curX,p->curY,0,360,5,4);}}/********清除上一滴的雨滴***********/void clearRainLine(struct rainDrop *p,int m){setcolor(BLACK);/*将雨滴赋予黑色*/if (m>=3&&m<=11)line(p->startX,p->startY,p->curX,p->curY); else{setfillpattern(2,BLACK);sector(p->curX,p->curY,0,360,5,4);}}/********雨滴入数的声音***********/getsound(){int freq;for(freq=300;freq<5000;freq+=50){sound (freq);delay(400);}nosound();}/*********雷电声音**********/thunderesound(){int freq;for(freq=1000;freq<2000;freq+=50){sound (freq);delay(5000);}nosound();}/*********下雨**********/void rainDropDown(struct rainDrop *p,int m){if(p->curY>=p->flag){clearRainLine(p,m);p->status=1;getsound();}else{clearRainLine(p,m);updateRainLineData(p);drawRainLine(p,m);}}/********雨圈生长变大***********/void updateRainCircleData(struct rainDrop *p){p->curR+=1;}/*********画出雨圈**********/void drawRainCircle(struct rainDrop *p){setcolor(p->rainColor);ellipse(p->curX,p->curY,0,360,10+p->curR*3,p->curR); }/*******清理雨圈************/void clearRainCircle(struct rainDrop *p){setcolor(BLACK);setfillpattern(2,BLUE);sector(p->curX,p->curY,0,360,10+p->curR*3,p->curR); }/*******入水水圈生成结束重新刷新雨点************/void fallToWater(struct rainDrop *p){if(p->curR>=p->flagR){clearRainCircle(p);recreatDrop(p);}else{clearRainCircle(p);updateRainCircleData(p);drawRainCircle(p);}}/********画出雷电 ***********/int drawthurder(struct rainDrop *p){int i,j,k,x,y;setbkcolor(BLACK);p->thunderX1=random(300);p->thunderY1=random(20);setcolor(WHITE);for(k=0;k<2;k++){x=random(100);y=random(100);p->thunderX1+=x;p->thunderY1+=y;p->a=p->thunderX1;p->b=p->thunderY1;for(i=0;i<6;i++)for(j=0;j<2;j++){setfillpattern(0,WHITE);p->thunderX2=p->thunderX1-thunder[i][j];j++;p->thunderY2=p->thunderY1+thunder[i][j];line(p->thunderX1,p->thunderY1,p->thunderX2,p->thunderY2);p->thunderX1=p->thunderX2;p->thunderY1=p->thunderY2;}floodfill(p->a-3,p->b+12,WHITE);setfillpattern(0,0);bar(p->a-20,p->b-10,p->a+40,p->b+40);}}/******* 函数实现释放链表收起画布 ***********/void rainfree(void){char mark;struct rainDrop *p,*q;p=head;while(p!=NULL){q=p;p=p->next;free(q);}closegraph();}/********键盘控制***********/keyboardCon(struct rainDrop *p){key=bioskey(0);if(key==LEFT)rain_wind+=1;if(key==TWO){m=1;}if(key==RIGHT)rain_wind-=1;if(key==DOWN){rain_len-=1;}if(key==UP)rain_len+=1;if(key==SPACE){rainfree();exit(0);}if(key==PLUS&&big<2)big+=1;if(key==JIAN)big-=1;if(key==ONE){splitScreen(p);}if(key==THREE)m=6;}/********软件介绍信息 ***********/output(){outtextxy(100,10,"Pond night rain fall color---thank you! "); outtextxy(500,400,"09060641 ");}/********河水***********/river(){setfillpattern(0, BLUE);bar(0,440,640,500);}/********下雨 ***********/void rain(int m){struct rainDrop *p;p=head;while(!(key==ESC)){keyboardCon(p);while(!kbhit()){if(p==NULL)p=head;else{if(p->status==0)rainDropDown(p,m);elsefallToWater(p);}delay(rain_v);output();if(key==ENTER){drawthurder(p);drawthurder(p);thunderesound();}key=NULL;p=p->next;}}}/********软件开始简介***********/void Introduction(){printf("******************************\n");printf("******************************\n");printf("Pond night rain fall color!\n");printf("\tclass:09060641\n");printf("******************************\n");printf("******************************\n");}/*********过滤函数*************/filter(){int i;i=0;while(i>=6){if(rain_Num<0&&rain_Num>50){printf("error\nNote Please enter less than fifty greater than zero\nrain_num: ");scanf("%d",&rain_Num);}elsei+=1;if(rain_v<0&&rain_v>10){printf("error\nNote Please enter less than fifty greater than zero\nrain_v: ");scanf("%d",&rain_v);}elsei+=1;if(rain_len<0&&rain_len>50){printf("error\nNote Please enter less than ten greater than zero\nrain_len: ");scanf("%d",&rain_len);}elsei+=1;if(rain_wind<0&&rain_wind>10){printf("error\nNote Please enter less than ten greater than zero\nrain_wind: ");scanf("%d",&rain_wind);}elsei+=1;if(m<0&&m>10){printf("error\nNote Please enter less than 12 greater than zero\nmonth: ");scanf("%d",&m);}elsei+=1;}}/********全局变量的输入及其判定***********/void input(){printf("rain_num: \nNote Please enter less than fifty greater than zero");scanf("%d",&rain_Num);printf("rain_v:\nNote Please enter less than fifty greater than zero"); scanf("%d",&rain_v);printf("rain_wind:\nNote Please enter less than ten greater than zero");scanf("%d",&rain_wind);printf("rain_length:\nNote Please enter less than fifty greater than zero");scanf("%d",&rain_len);printf("the month of the year:\nNote Please enter less than 12 greater than 1");scanf("%d",&m);filter();big=1;}/********程序入口主函数**********/main(){Introduction(); input();initgraphics(); creatRain();river();rain(m); }。
数字雨代码数字雨代码是一种程序设计中常见的视觉效果,其中在屏幕上以流淌的数字雨的形式显示出代码片段。
这种效果常常被用在电影和电视剧中,用来表现黑客入侵、计算机技术等场景。
数字雨代码的显示形式多样,有时呈现为绿色的数字雨,有时则是白色或其他颜色。
代码实现数字雨代码的实现其实并不复杂,主要是通过在屏幕上按行显示字符并让其不断向下移动来模拟流淌的雨滴效果。
在以下简单的代码片段中展示了一个基本的数字雨代码:import osimport randomimport timeWIDTH, HEIGHT = os.get_terminal_size()speed =0.1drops = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c ', 'd', 'e', 'f', ' ', '\']def digital_rain():columns = []for _ in range(WIDTH):columns.append('')while True:for i in range(WIDTH):if random.random() >0.90or len(columns[i]) > HEIGHT:columns[i] = columns[i][:-1]columns[i] = drops[random.randint(0, len(drops)-1)] + colum ns[i]os.system('cls'if =='nt'else'clear')for line in columns:print(line)time.sleep(speed)digital_rain()这段代码用Python语言实现了一个简单的数字雨效果,每次按行生成随机字符并向下滚动,模拟出数字雨的效果。
数据结构课程设计报告学院专业:软件工程班级:学号:学生姓名:指导老师:彭伟民日期: 2016.01.01目录1猴子吃桃子问题 (3)1.1 需求分析 (3)1.2 程序设计思想 (3)1.3 程序源代码 (3)1.4 程序运行结果 (5)2进制数转化问题 (5)2.1 需求分析 (5)2.2 程序设计思想 (6)2.3 程序源代码 (6)2.4 程序运行结果 (7)3长整数运算 (8)3.1 需求分析 (8)3.2 程序设计思想 (8)3.3 程序源代码 (8)3.4 程序运行结果 (12)4学生成绩管理系统 (13)4.1 需求分析 (13)4.2 程序设计思想 (13)4.3 程序源代码 (14)4.4 程序运行结果 (20)5哈夫曼编码应用 (22)5.1 需求分析 (22)5.2 程序设计思想 (22)5.3 程序源代码 (23)5.4 程序运行结果 (24)6学校超市选址问题 (26)6.1 需求分析 (26)6.2 程序设计思想 (26)6.3 程序源代码 (26)6.4 程序运行结果 (30)7学生成绩管理系统 (30)7.1 需求分析 (30)7.2 程序设计思想 (30)7.3 程序源代码 (30)7.4 程序运行结果 (36)8排序综合 (37)8.1 需求分析 (37)8.2 程序设计思想 (38)8.3 程序源代码 (38)8.4 程序运行结果 (46)9课程设计总结 (47)1猴子吃桃子问题1.1需求分析有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
用多种方法实现求出原来这群猴子共摘了多少个桃子。
1.2程序设计思想已知第十天只余下1个桃子,第一天开始每天都吃当前桃子一半再多一个,那么就只需要从第十天开始倒推即可,用链表、数组、递推、常规方法都可以采用这种思路实现计算第一天桃子数量。
1.3程序源代码#include<iostream>using namespace std;//有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。
java数字雨课程设计一、教学目标本课程旨在通过Java编程语言实现数字雨效果,让学生掌握Java编程的基本语法和逻辑控制结构,提高学生的编程能力和逻辑思维能力。
1.理解Java编程语言的基本语法。
2.掌握Java中的循环结构和条件结构。
3.学习Java中的基本数据类型和数组。
4.能够使用Java编写简单的程序。
5.能够运用循环结构和条件结构实现复杂逻辑。
6.能够独立完成数字雨效果的编程实现。
情感态度价值观目标:1.培养学生对编程的兴趣和热情。
2.培养学生解决问题的能力和团队合作精神。
二、教学内容本课程的教学内容主要包括Java编程语言的基本语法、循环结构、条件结构、基本数据类型和数组。
1.Java编程语言的基本语法:介绍Java编程语言的基本规则和语法,包括变量声明、数据类型、运算符、表达式等。
2.循环结构:学习for循环和while循环的用法,并通过示例让学生掌握循环控制语句的运用。
3.条件结构:学习if语句和switch语句的用法,培养学生编写分支结构的程序能力。
4.基本数据类型和数组:学习Java中的基本数据类型,包括整型、浮点型、字符型和布尔型;学习数组的声明、初始化和操作。
三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。
1.讲授法:通过讲解Java编程语言的基本语法、循环结构和条件结构,让学生掌握编程的基本概念和原理。
2.案例分析法:通过分析具体的数字雨案例,让学生理解循环结构和条件结构在实际编程中的应用。
3.实验法:让学生动手编写代码,实现数字雨效果,培养学生的实际编程能力和解决问题的能力。
四、教学资源本课程的教学资源包括教材、多媒体资料和实验设备。
1.教材:选用权威、实用的Java编程教材,为学生提供系统、全面的学习材料。
2.多媒体资料:制作精美的PPT和教学视频,帮助学生更好地理解和掌握编程知识。
3.实验设备:提供充足的计算机设备,让学生在实验环节亲自动手编写代码,提高实际编程能力。
池塘夜降彩色雨课程设计一、课程目标知识目标:1. 学生能够理解并掌握课程中涉及的自然科学知识,如水的循环、生态系统的概念以及物种多样性等。
2. 学生能够描述池塘生态系统的基本结构和功能,以及彩色雨现象的科学原理。
技能目标:1. 学生通过观察、实验和资料分析,培养科学探究和问题解决的能力。
2. 学生能够运用所学的知识,设计并实施简单的生态系统模型,提高动手操作和团队协作能力。
情感态度价值观目标:1. 学生培养对自然科学的热爱和好奇心,激发探索未知世界的兴趣。
2. 学生通过了解池塘生态系统的平衡与稳定,增强环保意识和生态保护的责任感。
3. 学生在小组合作中,学会尊重他人意见,培养团结协作和共同进步的精神。
本课程针对五年级学生设计,结合学生好奇心强、动手能力逐渐提高的特点,注重培养他们的科学素养和环保意识。
课程以实践性、探究性为主,旨在让学生在轻松愉快的氛围中学习自然科学知识,提高综合运用所学知识解决问题的能力。
通过分解课程目标为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容本章节教学内容围绕“池塘夜降彩色雨”主题,结合教材中关于水循环、生态系统和生物多样性的相关知识,制定以下教学大纲:1. 水的循环过程及其在生态系统中的作用- 水循环的基本概念和环节- 水循环在池塘生态系统中的重要性2. 池塘生态系统的结构与功能- 池塘生态系统的组成- 物种多样性与生态系统稳定性- 生态系统中各生物群落的相互关系3. 彩色雨现象的科学原理- 彩色雨的成因及影响因素- 彩色雨与生态系统的关系4. 实践活动:制作生态系统模型- 设计并实施池塘生态系统的简化模型- 观察和记录模型中的生物行为和相互作用教学内容按照以下进度安排:第一课时:水的循环过程及其在生态系统中的作用第二课时:池塘生态系统的结构与功能第三课时:彩色雨现象的科学原理第四课时:实践活动:制作生态系统模型教学内容与教材紧密关联,旨在帮助学生系统地掌握自然科学知识,通过实践活动提高学生的动手能力和探究精神。
java数字雨代码
Java数字雨代码是一种经典的计算机图形动画效果,它模仿了科幻电影中的数字雨效果。
Java数字雨代码使用了Java编程语言和图形库,实现了字符雨滴不断落下、变形、融合的效果,形成了一种独特的视觉效果。
Java数字雨代码可以用于游戏、电影、电视剧等多种媒介中,为作品增添美感和科技感。
Java数字雨代码的实现涉及到多个方面的知识,包括Java语言、图形库、动画效果、数据结构等。
在Java语言方面,需要使用Java 的基础语法和面向对象编程思想,如循环语句、条件语句、类、对象等。
在图形库方面,常用的有Java AWT、Java Swing、JavaFX等,它们提供了丰富的绘图和动画效果的API。
在动画效果方面,需要用到Java定时器、线程等技术,来实现数字雨滴的落下、变形、融合等动态效果。
在数据结构方面,可以使用数组、链表等数据结构来存储和操作数字雨滴的位置、状态等信息。
Java数字雨代码的实现过程可以分为以下几个步骤:首先,创建一个窗口和面板,用于绘制数字雨效果;然后,定义数字雨滴的属性和状态,如位置、速度、颜色等;接着,使用Java定时器或线程来控制数字雨滴的动画效果,包括落下、变形、融合等;最后,将数字雨滴绘制到面板上,并实现连续不断的效果。
Java数字雨代码是一种有趣、有用的编程技术,可以提高Java 编程的能力和创造力,也可以为游戏、动画、电影等作品增添独特的魅力。
上海应用技术学院课程设计报告课程名称《数据结构课程设计》设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级姓名学号指导教师日期一.目的与要求1. 巩固和加深对常见数据结构的理解和掌握2. 掌握基于数据结构进行算法设计的基本方法3. 掌握用高级语言实现算法的基本技能4. 掌握书写程序设计说明文档的能力5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力表。
3、输出功能:void print(LinkList *head);通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。
知道不满足循环语句,程序再次回到菜单选择功能界面。
4、删除功能:LinkList *Delete(LinkList *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。
5、插入功能:LinkList *Insert(LinkList *head);输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。
链表长度加一,重新存储。
(5) 程序的输入与输出描述输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;输出:调用void print(LinkList *head)函数,输出学生的记录。
(6) 程序测试主菜单:成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)(7) 尚未解决的问题或改进方向尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。
一.需求分析A.要求:1.本程序要求彩色的雨点从天而降,当碰到虚拟的地面时,产生一个水波,同时有声音产生。
对于每一次运行,都能设计雨点的多少和下降的速度,不同的设计呈现出不同的效果。
2.可以随机的对雨点的位置进行设置,随时对雨点的下落位置进行定位。
3.多个雨点按照各自的随机参数和存在状态,同时演示在屏幕上,可以适当的控制雨点的密度、最大水圈和状态变化的时间间隔等参数。
B.进一步要求:1.主要的数据类型有两个带头结点的双向循环链表,如下:typedef struct < //单个雨滴colorref color;//雨滴颜色bool visibility; //可见性float radius; //半径float x;//雨滴中心位置x float y;//雨滴中心位置y float xvelocity;//雨滴速率vx float yvelocity;//雨滴速率vy > droplet; struct dropletchain ; typedef struct ripple; struct ripplechain ;对链表的操作混杂在类ccraindlg(mfc 的对话框类)中。
演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”下,用户可由键盘输入各选择项以及输入数据。
每次的排序结果都可以进行显示,便于用户检验排序的正确与否。
C.测试过程:二.概要设计1.采用方便的用户输入界面,直接输入两个变量值,一个是雨点的数量,一个是雨点延迟时间,雨点的数量越多,运行的时间越多,所要用的内存也相对要多;同理输入的雨点的延迟时间越长,程序运行中所需要的保存状态的内存量就大,而其运行的时间也相对多点。
不管是用何种方式,运行的硬件的条件不变。
2.抽象数据类型如下:ADT graphList {数据对象:D={ai | ai ∈Charset , I = 1,2,3,···,n, n≥0}数据关系:R1={<ai-1,ai> | ai-1,ai∈D,ai-1<ai, I =2,···,n}基本操作:void initgr(void)初始条件:已经有雨点存在或者是水纹存在操作结果:图形显示void main()操作结果:创建主函数void background(void)操作结果:绘制背景图void rain(void)操作结果:创建下雨函数struct drop *creatDrop(void)操作结果:创建雨点void recreatDrop(struct drop *p)操作结果:雨点重新创建void creatRain(void)操作结果:创建雨点链表void drop(struct drop *p)操作结果:创建雨点下落过程的函数void drawdrop(struct drop *p)操作结果:画雨点函数void cleardrop(struct drop *p)操作结果:清除雨点函数void wave(struct drop *p)操作结果:创建水纹产生函数void draw(struct drop *p)操作结果:画水纹函数void clear(struct drop *p)操作结果:清除水纹函数void release (void)操作结果:清楚雨点链表函数}ADT graphList3.要求雨点的状态以图的形式显示出来,所以要用到图形函数,在此需要设计一个结构。
/**********包涵到头文件*********/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
#include <graphics.h>
#include <bios.h>
/**********宏定义*********/
/*********键盘控制键盘扫描码**********/ #define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
#define L_SHEFT 0x01
#define SPACE 0x3920
#define LOWERF 0x2166
#define UPPERF 0x2146
#define LOWERA 0x1e61
#define UPPERA 0x1e41
#define LOWERQ 0x1071
#define UPPERQ 0x1051
#define ENTER 0x1c0d
#define ONE 0x4f31
#define TWO 0x5032
#define THREE 0x5133
#define FOUR 0x4b34
#define FIVE 0x4c35
#define SIX 0x4d36
#define SEVEN 0x4737
#define EIGHT 0x4838
#define NINE 0x4939
#define O 0x5230
#define PLUS 0x4e2b
#define JIAN 0x4a2d
/**********全局变量*********/ int rain_Num;
int rain_v;
int rain_wind;
int rain_len;
int key;
int big;
int m;
int curx;
int cury;
int
thunder[6][2]={{10,20},{-10,0},{10,20},{-25,-25},{15,0},{0,-15}}; /**********定义结构*************/
struct rainDrop *head;
/*********雨滴雨圈雷电数据结构体链表**********/
struct rainDrop
{
int startX,curX,startY,curY;
int flag;
int endX;
int endY;
int rainColor;
int status;
int flagR;
int curR;
int thunderX1,thunderX2,thunderY1,thunderY2;
int a,b;
struct rainDrop *next;
};
/*********初始化画布**********/
/*********参数void**********/
/*********return无**********/
void initgraphics(void)
{
int gmode,gdriver;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"");
}
/*********创立初始化头结点**********/
/*********返回指针p**********/
struct rainDrop *creatDrop(void)
{
struct rainDrop *p;
p=(struct rainDrop *)malloc(sizeof(struct rainDrop));
p->startX=random(640);
p->startY=random(430);
p->flag=430+rand()%50;
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;
p->rainColor=random(15);
p->status=0;
p->flagR=random(10);
p->curR=random(2);
p->thunderX1=random(300);
p->thunderY1=random(20);
p->next=NULL;
return(p);
}
/*********重新生成链表数据**********/ void recreatDrop(struct rainDrop *p)
{
p->startX=random(640);
p->startY=random(430);
p->flag=430+rand()%50;
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;
p->rainColor=random(15);
p->status=0;
p->flagR=random(10);
p->curR=random(3);
}
/*********创立整个链表**********/ void creatRain(void)
{
struct rainDrop *p1,*p2;/*定义两个指针*/
int i;
p1=p2=creatDrop();
head=p1; /*赋值头指针*/
for(i=0;i<rain_Num;i++) /*循环创立整个雨滴链表*/
{
p2=creatDrop();
p1->next=p2;
p1=p2;
}
}
/*********生成下一个雨滴的坐标位置**********/
void updateRainLineData(struct rainDrop *p)
{
if(big==2)/*加速为2个雨滴距离下落*/
{
p->startX=p->curX;
p->startY=p->curY;
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;
p->startX=p->curX;
p->startY=p->curY;
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;
p->startX=p->curX;
p->startY=p->curY;
}
if(big==1)/*加速为一个雨滴的距离下落*/ {
p->startX=p->curX;
p->startY=p->curY;
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;
p->startX=p->curX;
p->startY=p->curY;
}
else /*正常速度下落*/
{
p->startX=p->curX;
p->startY=p->curY;
}
p->curX=p->startX-(rain_wind*5);
p->curY=p->startY+rain_len;。