c语言流星雨的实现
题目:流星雨的实现学院:班级::学号:指导教师:时间:目录一课程设计目的 (3)二设计容与要求 (3)三概要设计 (3)四详细设计 (5)五运行界面 (6)六设计总结 (16)七教师评语 (17)一课程设计目的程序模拟一组流星飞向地面的情境,地面用多行#来表示,流星用大写字母表示。
二设计容与要求1 容:程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。
2 一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。
一个流星下落只能去掉一个#号,当最后一行地面有#被去掉时,程序终止。
三概要设计○1首先定义二维数组screen表示地面和天空,此数组是一个24行81列的字符数组。
上面的行表示天空,数组单元的值是空格;最下面的几行(如5行)表示地面,数组单元的值是’#’;整个屏幕的大小是80*25,即25行80列,为了在输出最后一行时不换行滚屏,程序只能利用上面的24行空间。
把数组定义成81列的目的是,每行的最后字符赋值成’\0’,就可以按照字符串的方式输出每行文本了。
○2编写的程序在下降过程中,程序必须知道流星的字符、颜色、位置、速度,因此程序需要定义以下几个数组变量:存放流星字符的数组,存放流星字符颜色的数组,存放流星行位置的数组,存放流星列位置的数组,存放流星下降速度的数组。
○3输出时程序首先输出地面和天空,即输出定义的二维数组screen中的字符串,前21行是空行,后3行是#号。
这样screen[24][81]的字符矩阵就与整个屏幕对应起来。
然后随时机产生一组流星数据,包括字符、颜色、位置和速度。
速度用一次下降多少行来表示,最大的速度是4。
由于要随机产生这些数据,因此需要调用random函数。
(random函数的原型是 int random(int num);这个函数产生一个0—num-1之间的一个随机数。
流星字符可以这样产生:random(26)+’A’; 流星字符的颜色可以这样产生:random(16)+1;流星下降的位置可以这样产生:random(4)+1;流星的行位置一开始都是1;流星的列位置可以这样产生:random(80)+1;但要保证所有流星的列位置不能相同。
调用random之前,用randomize()库函数进行初始化。
两个库函数都在stdlib.h文件中。
)设置后,每个流星按照自己的速度下落,所谓的下落就是逐行移动流星字符:在下一行新的位置上显示流星字符,在原来的位置上显示空格以便擦除流星字符,然后再延迟等待几十毫秒。
这样循环往复就构成了流星下落的动画。
但要注意,流星的速度各不相同,而一次下落多行的流星也要逐行下落。
如果流星的新位置所对应的screen的单元格的值是’#’,则表示撞到了地面。
这种情况下在流星的新位置上输出空格,擦除#号,并且对screen相应的单元赋值为空格,流星字符也要赋值为空格,以表示流星消失。
○4当screen[23]中任何一个单元格是空格时,程序终止。
四详细设计模块一:输入天空和地面,天空和地面都是静止的。
模块二:产生一组流星,流星的表示。
模块三:流行的颜色,位置,速度。
模块四:若碰到#号,流星和#号同时消失。
模块五:若第24行的流星被碰到,程序终止。
五运行界面1 程序框图2 程序清单#include <stdio.h> #include <stdlib.h> #include <time.h>#include <windows.h> #include <conio.h>#define ROW 24#define COL 81#define REAL 100#define NUM 10#define SPEED 4int random(int num);static void setSky();static void display();int check_last_row();void word_n_down();int word_one_down(int begin,int position,int speed ,int word,int *word_end);void gotoxy(int x,int y);char sky_ground[REAL][COL];int test = 0;int cycle_end = 0;int word_end[NUM];int list = 0;int begin[NUM];int position[NUM];int word[NUM];int speed[NUM];int main(){int end_flag = 0;time_t t;srand((unsigned) time(&t));setSky();while(!(end_flag = check_last_row())) {for(int a=0;a<NUM;a++)word_end[a] = 0;list = 0;cycle_end = 0;word_n_down();}system("pause");return 0;}static void setSky(){for(int b=0;b<REAL;b++){for(int c=0;c<COL-1;c++) {sky_ground[b][c] = ' ';}sky_ground[b][COL-1] = '\0'; }for(int d=ROW-5;d<ROW;d++) {for(int e=0;e<COL-1;e++) {sky_ground[d][e] = '#';}sky_ground[d][COL-1] = '\0'; }}static void display()gotoxy(0,0);for(int f=0;f<ROW;f++){printf("%s",sky_ground[f]); }}int random(int num){return(rand() % num);}int check_last_row(){for(int g=0;g<COL;g++){if(sky_ground[23][g] == ' ') return 1;}return 0;}void word_n_down(){for(int h=0;h<NUM;h++){begin[h] = random(ROW-5); position[h] = random(COL-2); word[h] = random(26) + 'A'; speed[h] = random(SPEED)+1; }while(1){if(cycle_end >= NUM)break;test = list-1;if(test < 0)test = 0;if(check_last_row()){system("pause");exit(0);}for(int i=0;i<NUM;i++)word_one_down(begin[i],position[i],speed[i],word[i],&word_end[i]);list ++;display();Sleep(200);}}int word_one_down(int begin,int position,int speed,int word,int *word_end){if((*word_end) == 0){if(begin+list*speed >= ROW)return 0;sky_ground[begin+test*speed][position] = ' ';if(begin+list*speed >= 19){for(int z=19;z<ROW;z++){if(sky_ground[z][position] == '#')sky_ground[z][position] = ' ';*word_end = 1;cycle_end ++;break;}}}else{sky_ground[begin+list*speed][position] = word;}}return 0;}void gotoxy(int x,int y){COORD coord;coord.X=x;coord.Y=y;SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );3、系统运行结果六设计总结七教师评语。
流星雨C语言代码
流星雨C语言代码#include#define ID_TIMER 1#define STRMAXLEN 25 //一个显示列的最大长度#define STRMINLEN 8 //一个显示列的最小长度LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// typedef struct tagCharChain //整个当作屏幕的一个显示列,这是个双向列表{struct tagCharChain *prev; //链表的前个元素TCHAR ch; //一个显示列中的一个字符struct tagCharChain *next; //链表的后个元素}CharChain, *pCharChain;typedef struct tagCharColumn{CharChain *head, *current, *point;int x, y, iStrLen; //显示列的开始显示的x,y坐标,iStrLen是这个列的长度int iStopTimes, iMustStopTimes; //已经停滞的次数和必须停滞的次数,必须停滞的次数是随机的}CharColumn, *pCharColumn;int main(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[] = TEXT ("matrix") ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style = CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc = WndProc ;wndclass.cbClsExtra = 0 ;wndclass.cbWndExtra = 0 ;wndclass.hInstance = hInstance ;wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH) ;wndclass.lpszMenuName = NULL ;wndclass.lpszClassName = szAppName ;if(!RegisterClass (&wndclass)){MessageBox (NULL, TEXT ("此程序必须运行在NT下!"), szAppName, MB_ICONERROR) ;return 0;}hwnd = CreateWindow (szAppName, NULL,WS_DLGFRAME | WS_THICKFRAME | WS_POPUP,0, 0,GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN),NULL, NULL, hInstance,NULL) ;ShowWindow (hwnd, SW_SHOWMAXIMIZED) ; //最大化显示UpdateWindow (hwnd) ;ShowCursor(FALSE); //隐藏鼠标光标srand ((int) GetCurrentTime ()) ; //初始化随机数发生器while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}ShowCursor(TRUE); //显示鼠标光标return msg.wParam ;}TCHAR randomChar() //随机字符产生函数{return (TCHAR)(rand()%(126-33)+33); //33到126之间}int init(CharColumn *cc, int cyScreen, int x) //初始化{int j;cc->iStrLen = rand()%(STRMAXLEN-STRMINLEN) + STRMINLEN; //显示列的长度cc->x = x+3 ; //显示列的开始显示的x坐标cc->y =rand()%3?rand()%cyScreen:0; //显示列的开始显示的y 坐标cc->iMustStopTimes = rand()%6 ;cc->iStopTimes = 0 ;cc->head = cc->current =(pCharChain)calloc(cc->iStrLen, sizeof(CharChain)); //生成显示列for(j=0; jiStrLen-1; j++){cc->current->prev = cc->point; //cc->point一个显示列的前个元素cc->current->ch = '\0';cc->current->next = cc->current+1; //cc->current+1一个显示列的后个元素cc->point = cc->current++; //cc->point = cc->current; cc->current++;}cc->current->prev = cc->point; //最后一个节点cc->current->ch = '\0';cc->current->next = cc->head;cc->head->prev = cc->current; //头节点的前一个为此链的最后一个元素cc->current = cc->point = cc->head; //free掉申请的内存要用current当参数cc->head->ch = randomChar(); // 对链表头的元素填充return 0;}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){HDC hdc ;//ctn 用来确定一个显示链是否向下前进,如果等待次数超过必须等待的次数,ctn就代表要向下前进int i, j, temp, ctn; //j为一个显示链中除链表头外的在屏幕上显示的y坐标,temp绿色过度到黑色之用static HDC hdcMem;HFONT hFont;static HBITMAP hBitmap;static int cxScreen, cyScreen; //屏幕的宽度高度.static int iFontWidth=10, iFontHeight=15, iColumnCount; //字体的宽度高度, 列数static CharColumn *ccChain;switch (message){case WM_CREATE:cxScreen = GetSystemMetrics(SM_CXSCREEN) ; //屏幕宽度cyScreen = GetSystemMetrics(SM_CYSCREEN) ;SetTimer (hwnd, ID_TIMER, 10, NULL) ;hdc = GetDC(hwnd);hdcMem = CreateCompatibleDC(hdc);hBitmap = CreateCompatibleBitmap(hdc, cxScreen, cyScreen);SelectObject(hdcMem, hBitmap);ReleaseDC(hwnd, hdc);//创建字体hFont = CreateFont(iFontHeight, iFontWidth-5, 0, 0, FW_BOLD, 0, 0, 0,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DRAFT_QUALITY, FIXED_PITCH | FF_SWISS, TEXT("Fixedsys"));SelectObject(hdcMem, hFont);DeleteObject (hFont) ;SetBkMode(hdcMem, TRANSPARENT); //设置背景模式为透明iColumnCount = cxScreen/(iFontWidth*3/2); //屏幕所显示字母雨的列数ccChain = (pCharColumn)calloc(iColumnCount, sizeof(CharColumn));for(i=0; i{init(ccChain+i, cyScreen, (iFontWidth*3/2)*i);}return 0 ;case WM_TIMER:hdc = GetDC(hwnd);PatBlt (hdcMem, 0, 0, cxScreen, cyScreen, BLACKNESS) ; //将内存设备映像刷成黑色for(i=0; i{ctn = (ccChain+i)->iStopTimes++ > (ccChain+i)->iMustStopTimes;//(ccChain+i)->point = (ccChain+i)->head; //point用于遍历整个显示列//第一个字符显示为白色SetTextColor(hdcMem, RGB(255, 255, 255));TextOut(hdcMem, (ccChain+i)->x, (ccChain+i)->y, &((ccChain+i)->point->ch), 1);j = (ccChain+i)->y;(ccChain+i)->point = (ccChain+i)->point->next;//遍历整个显示列,将这个显示列里的字符从下往上显示temp = 0 ; //temp绿色过度到黑色之用while((ccChain+i)->point != (ccChain+i)->head && (ccChain+i)->point->ch){SetTextColor(hdcMem, RGB(0, 255-(255*(temp++)/(ccChain+i)->iStrLen), 0));TextOut(hdcMem, (ccChain+i)->x, j-=iFontHeight, &((ccChain+i)->point->ch), 1);(ccChain+i)->point = (ccChain+i)->point->next;}if(ctn)(ccChain+i)->iStopTimes = 0 ;else continue;(ccChain+i)->y += iFontHeight; //下次开始显示的y坐标为当前的y坐标加上一个字符的高度//如果开始显示的y坐标减去整个显示列的长度超过了屏幕的高度if( (ccChain+i)->y-(ccChain+i)->iStrLen*iFontHeight > cyScreen){free( (ccChain+i)->current );init(ccChain+i, cyScreen, (iFontWidth*3/2)*i);}//链表的头为此链表的前个元素,因为下次开始显示的时候就相当与在整个显示列的开头添加个元素,然后在开始往上显示(ccChain+i)->head = (ccChain+i)->head->prev;(ccChain+i)->head->ch = randomChar();}BitBlt(hdc, 0, 0, cxScreen, cyScreen, hdcMem, 0, 0, SRCCOPY);ReleaseDC(hwnd, hdc);return 0;case WM_RBUTTONDOWN:KillTimer (hwnd, ID_TIMER) ;return 0;case WM_RBUTTONUP:SetTimer (hwnd, ID_TIMER, 10, NULL) ;return 0;//处理善后工作case WM_KEYDOWN:case WM_LBUTTONDOWN:case WM_DESTROY:KillTimer (hwnd, ID_TIMER) ;DeleteObject(hBitmap);DeleteDC(hdcMem);for(i=0; i{free( (ccChain+i)->current );}free(ccChain);PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ; }。
c语言流星雨课程设计
c语言流星雨课程设计一、教学目标本课程的目标是让学生掌握C语言的基本语法和编程技巧,能够独立完成简单的C语言程序设计。
具体分为以下三个部分:1.知识目标:使学生了解C语言的基本语法、数据类型、运算符、控制结构、函数等基本概念,理解程序设计的基本原理和方法。
2.技能目标:培养学生具备使用C语言进行程序设计的能力,能够熟练使用C语言编写和调试程序,掌握基本的编程技巧和算法。
3.情感态度价值观目标:培养学生对计算机科学的兴趣和热情,提高学生独立思考和解决问题的能力,培养学生的创新精神和团队合作意识。
二、教学内容教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等基本概念,以及基本的编程技巧和算法。
具体安排如下:1.第一章:C语言概述,介绍C语言的基本概念、特点和应用领域,学习C语言的编译环境和基本操作。
2.第二章:数据类型和运算符,学习C语言的数据类型、常量和变量,掌握各种运算符的用法和优先级。
3.第三章:控制结构,学习C语言的条件语句、循环语句和跳转语句,掌握程序的控制流程。
4.第四章:函数,学习C语言的函数定义、声明和调用,掌握函数的参数传递和返回值。
5.第五章:编程技巧和算法,学习C语言的常用编程技巧和基本算法,能够独立完成简单的程序设计。
三、教学方法本课程采用多种教学方法,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解C语言的基本概念、语法和编程技巧,引导学生掌握课程内容。
2.案例分析法:分析典型的C语言程序案例,让学生了解编程的实际应用,提高学生的编程能力。
3.实验法:上机实验,让学生动手编写和调试C语言程序,培养学生的实际编程能力。
4.讨论法:学生进行小组讨论,分享学习心得和编程经验,提高学生的团队合作意识。
四、教学资源1.教材:《C语言程序设计》,选用国内外知名出版社出版的教材,保证课程内容的科学性和系统性。
2.参考书:推荐学生阅读一些经典的C语言编程书籍,丰富学生的知识体系。
c语言流星雨课程设计
c语言流星雨课程设计一、课程目标知识目标:1. 学生能理解C语言中随机数的生成原理,掌握rand()和srand()函数的使用方法。
2. 学生能运用C语言的基本语法,实现流星雨动画的基本效果。
3. 学生了解C语言中循环和条件语句在动画中的应用。
技能目标:1. 学生能够运用所学知识,独立编写并调试简单的C语言程序,实现流星雨动画效果。
2. 学生通过实践,掌握C语言编程的基本技巧,提高解决问题的能力。
情感态度价值观目标:1. 学生通过课程学习,培养对编程的兴趣和热情,增强对计算机科学的认识。
2. 学生在合作学习中,培养团队精神和沟通能力,学会相互鼓励和帮助。
3. 学生在课程实践过程中,培养耐心和细心的品质,体会编程带来的成就感。
课程性质:本课程为C语言编程入门课程,通过实现流星雨动画,让学生在实践中掌握C语言的基本语法和应用。
学生特点:本课程面向初学C语言的学生,他们对编程有一定的好奇心,但可能缺乏实际编程经验。
教学要求:教师需引导学生掌握C语言基本知识,关注学生在实践中的个体差异,鼓励学生主动思考和解决问题。
在教学过程中,注重培养学生的编程兴趣和团队协作能力。
通过课程目标的实现,使学生在知识、技能和情感态度价值观方面得到全面提升。
二、教学内容1. C语言基本语法回顾:变量声明与赋值、数据类型、运算符、表达式。
2. 控制结构:顺序结构、分支结构(if-else)、循环结构(for、while)。
3. 函数:函数定义、函数调用、全局变量与局部变量。
4. 随机数生成:rand()和srand()函数的使用,随机数的应用。
5. 图形编程:了解C语言中的图形编程库(如curses),绘制基本图形。
6. 动画实现:利用循环和延时,实现流星雨动画效果。
7. 键盘输入:捕捉用户按键,实现动画的暂停与退出。
教学内容安排与进度:第一课时:回顾C语言基本语法,介绍课程目标和教学内容。
第二课时:讲解控制结构,重点强调循环结构在动画中的应用。
流星雨C语言代码
TCHAR randomChar() //随机字符产生函数
{
return (TCHAR)(rand()%(126-33)+33); //33到126之间
}
int init(CharColumn *cc, int cyScreen, int x) //初始化
cc->current = cc->point = cc->head; //free掉申请的内存要用current当参数
cc->head->ch = randomChar(); // 对链表头的 元素填充
return 0;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
NULL, NULL, hInstance,
NULL) ;
ShowWindow (hwnd, SW_SHOWMAXIMIZED) ; //最大化显示
UpdateWindow (hwnd) ;
typedef struct tagCharColumn
{
CharChain *head, *current, *point;
int x, y, iStrLen; //显示列的开始显示的x,y坐标,iStrLen是这个列的长度
int iStopTimes, iMustStopTimes; //已经停滞的次数和必须停滞的次数,必须停滞的次数是随机的
//创建字体
hFont = CreateFont(iFontHeight, iFontWidth-5, 0, 0, FW_BOLD, 0, 0, 0,
烟花雨代码c语言
烟花雨代码c语言对于C语言初学者来说,烟花雨可能是一个比较有趣的项目。
下面是一个简单的烟花雨代码:```#include <stdio.h>#include <graphics.h>#include <conio.h>#include <time.h>#include <stdlib.h>int main(){int gd = DETECT, gm, i, j, c, r, x, y, k;initgraph(&gd, &gm, '');while(!kbhit()){srand(time(NULL));c = rand()%15 + 1; // 随机颜色r = rand()%150 + 50; // 随机半径x = rand()%620 + 50; // 随机横坐标y = rand()%380 + 50; // 随机纵坐标setcolor(c);circle(x, y, r);for(i=0; i<20; i++){k = rand()%20 + 1; // 随机距离setcolor(BLACK);circle(x, y, r+i);for(j=1; j<=k; j++){setcolor(c);circle(x, y, r+i);}}setcolor(BLACK);circle(x, y, r+i);}closegraph();return 0;}```这个程序使用了graphics.h和conio.h库,因此你需要在编译器中设置这些库的路径。
如果你使用的是Dev-C++编译器,可以通过在“Tools”菜单下选择“Compiler Options”并在“Directories”选项卡下添加库的路径来实现。
这个程序使用了一个无限循环,在每次循环中,程序会随机生成一个颜色、半径、横坐标和纵坐标,然后在屏幕上画一个圆形。
简单浪漫的C语言代码
简单浪漫的C语言代码C语言,作为计算机科学领域最为经典的语言之一,无论是在工程上还是在教学上都有着极大的影响力。
很多人认为,C语言的代码冗长且复杂,很难产生浪漫和柔软的感觉,但事实上,C语言也可以写出简单浪漫的代码,让人无法拒绝的韵味。
下面就介绍几个简单浪漫的C语言代码。
1.模拟心跳```c #include <stdio.h> #include <stdlib.h>#include <time.h> #include <unistd.h>#define MAX 100int main() { srand(time(NULL)); intcount = 0; while(1) { printf("#"); usleep((rand()%MAX)*1000); printf("#"); usleep((rand()%MAX)*1000); count++;if(count%60 == 0){ printf("\n"); } }return 0; } ```这段代码通过打印“#”字符来模拟心跳的跳动,加入了随机延迟,让它们的跳动速度变成了不规律的,更加具有人类般的柔软性。
同时,更加可爱的是,每打印60个“#”字符后,它会自动地换行,给人一种温暖而富有生气的感觉。
2.漂亮的打印矩形```c #include <stdio.h> #include <stdlib.h>#include <unistd.h>#define ROW 10 #define COL 40int main() { for(int i = 0; i < ROW; i++){ for(int j = 0; j < COL; j++){ if(i == 0 || i == ROW-1 || j == 0 ||j == COL-1){ printf("*"); } else{ printf(""); } } printf("\n"); usleep(100000); } return 0; } ```这段代码可以打印一个非常简单的矩形,但是通过在矩形外围的边框打印“*”字符,它变得非常漂亮。
零基础入门CC++实现你的浪漫表白:浪漫流星雨表白程序
零基础⼊门CC++实现你的浪漫表⽩:浪漫流星⾬表⽩程序想要讨⼥朋友欢⼼也巩固⾃⼰所学的知识,各位⼩伙伴有⾃⼰的想法了吗?准备好想要怎样实施了吗?有什么美好的计划了吗?如果没有的话那么别慌,我知道,在座的各位肯定都是有⾃⼰的⼼仪的姑娘,那么今天就教⼤家⼀招,做⼀个表⽩程序去进⾏表⽩,别等了,赶紧打开你的IED,跟着代码敲起来,不然的话,喜欢的⼈都跟别⼈跑了!直接源码分享:c#include<stdio.h>#include<graphics.h> //图形库:easyX201905#include<conio.h>#include<time.h>#define MAXSTAR 1314#define MAXMETEOR 520//结构体//⼏个星星:1000struct Star{int x, y;int color;int step;}star[MAXSTAR];//流星结构struct Meteor{int x, y;int style;int step;}meteor[MAXMETEOR];IMAGE img1, img2;//1.定义图⽚变量void printText(){//设置⽂字颜⾊settextcolor(RGB(255, 0, 255));//三原⾊:红,绿,蓝//调整字体⼤⼩settextstyle(50, 0, "华⽂⾏楷");//你的⽂采:发到公屏上/*海底⽉是天上⽉,眼前⼈是⼼上⼈春分⼗⾥,我喜欢你终是庄周圆了梦这是我的⼿背,这是我的脚背,你是我的宝贝。
⼀粥⼀饭/不及你/颦颦⼀笑问君能有⼏多愁?家⼈未⼊眼帘⼈消瘦我喜欢你,像风⾛了⼋万⾥,不问归期⽩酒清欢⽆别事,我在等风也在等你就承认⼀笑倾城⼀见⾃难忘问君能有⼏多愁?佳⼈未⼊眼帘⼈消瘦ABCDEFGHIJKLMNOPQRSTVWXYZ*///在指定位置输出字符串outtextxy(450, 20, "七⼣到了,炮姐我喜欢你");//设置⽂字颜⾊settextcolor(RGB(0, 255, 255));//三原⾊:红,绿,蓝//调整字体⼤⼩settextstyle(40, 0, "华⽂⾏楷");outtextxy(200, 100, "终是庄周圆了梦");outtextxy(200, 150, "春分⼗⾥,我喜欢你");outtextxy(200, 200, "⼀粥⼀饭不及你颦颦⼀笑");outtextxy(200, 250, "就承认⼀笑倾城⼀见⾃难忘");outtextxy(200, 300, "海底⽉是天上⽉,眼前⼈是⼼上⼈");outtextxy(200, 350, "⽩酒清欢⽆别事,我在等风也在等你");outtextxy(200, 400, "ABCDEFGHIJKLMNOPQRSTVWXYZ");outtextxy(200, 450, " 我喜欢你,像风⾛了⼋万⾥,不问归期");outtextxy(200, 500, "问君能有⼏多愁?佳⼈未⼊眼帘⼈消瘦");outtextxy(200, 550, "这是我的⼿背,这是我的脚背,你是我的宝贝。
C语言实现流星雨效果流程
C语⾔实现流星⾬效果流程⽬录⼀、头⽂件⼆、结构体三、初始化四、绘制函数五、移动函数六、界⾯设计七、主函数总结视频讲解感谢序再亮眼的流星,也会⼀闪⽽过。
嗨!这⾥是狐狸~~没错,我⼜来了,上次的“烟花”表⽩程序你学废了吗,这次我次我⼜来给⼤家⽀招啦,学会了“烟花”,我们⼀起来看“流星⾬”吧直接上界⾯上次忘记说了,因为我们是⽤C语⾔写的所以是控制台程序,创造不出来界⾯,那怎么办呢,我们就要⽤Windows的远房表亲EasyX图形库来建界⾯了,上次忘记说了,望谅解我们今天就和往常⼀样⼀步⼀步的教⼤家如何去完成这个“流星⾬”表⽩程序吧!⼀、头⽂件最近总是被吐槽为什么没有头⽂件,原因是呢,我觉得我分享项⽬最主要的⽬的是让⼤家学知识,头⽂件这些没营养的,开始就没有考虑,但鉴于需要的⼩伙伴太多了,我就发出来吧#include<stdio.h>#include<easyx.h> //第三⽅图形库,需要安装#include<time.h>#include<conio.h>#include<mmsystem.h>#pragma comment(lib,"winmm.lib")⼆、结构体⽼朋友结构体他⼜来了,不⽤多说,直接看struct Star //⼩星星{int x;int y;int r;int speed; //速度COLORREF color; //颜⾊};struct Meteor{int x;int y;int speed;};三、初始化初始化星星以及流星,要⽤到随机函数哦,让星星和流星看起来更⾃然。
//初始化星星void initStar(int i){star[i].x = rand() % getwidth();star[i].y = rand() % getheight();star[i].r = rand() % 3 + 1;star[i].speed = rand() % 5; //0 1 2 3 4star[i].color = RGB(rand() % 256, rand() % 256, rand() % 256);}//初始化流星void initMeteor(int i){//[0,2400)//[-1200,1200)meteor[i].x = rand() % (2 * getwidth()) - getwidth(); //[-1200,1200)meteor[i].y = 20 - 200;meteor[i].speed = rand()%15+1;}四、绘制函数绘制星星以及流星,简单的贴图就⾏啦绘制星星void drawStar(){for (size_t i = 0; i < STAR_NUM; i++){//putpixel(star[i].x, star[i].y, star[i].color);setfillcolor(star[i].color);solidcircle(star[i].x, star[i].y, star[i].r);}}//绘制流星void drawMeteor(){for (size_t i = 0; i < METEOR_NUM; i++){putimage(meteor[i].x, meteor[i].y, img + rand() % 2,SRCPAINT);}}五、移动函数不仅流星要动,星星也要跟着动,怎么动才能更⾃然,⾃⼰也可以优化⼀下。
c语言程序设计 《图形动画,一起去看流星雨》
/* Note:Your choice is C IDE */#include "stdio.h"#include"graphics.h"main(){int size,size2,i,size3,size4;void *buffer,*buffer2,*buffer3,*buffer4;int driver=DETECT,mode;initgraph(&driver,&mode,"");setcolor(15);rectangle(0,280,639,479);setfillstyle(0,1);floodfill(1,290,15);setcolor(15);arc(10,0,270,360,10);arc(30,0,180,270,10);arc(10,20,0,90,10);arc(30,20,90,180,10);setfillstyle(1,14);floodfill(20,10,15);/*xingxing*/setcolor(12);circle(30,400,15);line(30,415,10,435);line(30,415,50,435);line(20,425,20,460);line(40,425,40,465);/*ren*/circle(70,400,15);line(70,415,50,435);line(70,415,100,435);line(60,425,60,460);line(80,425,80,465);setcolor(15);arc(10,70,270,360,10);arc(30,70,180,270,10);arc(10,90,0,90,10);arc(30,90,90,180,10);setfillstyle(1,14);floodfill(20,80,15);setcolor(15);arc(110,0,270,360,10);arc(130,0,180,270,10);arc(110,20,0,90,10);arc(130,20,90,180,10); setfillstyle(1,0);floodfill(120,110,15);size=imagesize(9,0,31,21); buffer=malloc(size);getimage(9,0,31,21,buffer);size2=imagesize(109,0,131,21); buffer2=malloc(size2); getimage(109,0,131,21,buffer2);size3=imagesize(1,383,101,475); buffer3=malloc(size3); getimage(1,383,101,475,buffer3);size4=imagesize(4,69,31,91); buffer4=malloc(size4); getimage(4,69,31,91,buffer4);do{putimage(20,30,buffer2,0);delay(10000);putimage(20,30,buffer,0);delay(100000000);putimage(20,30,buffer2,0);delay(10000);putimage(20,30,buffer,0);delay(10000000);putimage(220,130,buffer2,0);delay(10000);putimage(220,130,buffer,0);delay(10000000);putimage(210,100,buffer2,0);delay(10000);putimage(210,100,buffer,0);delay(100000000);putimage(150,90,buffer2,0);delay(10000);putimage(150,90,buffer,0);delay(10000000 );putimage(350,70,buffer2,0);delay(10000);putimage(350,70,buffer,0);delay(100000000);putimage(300,100,buffer2,0);delay(10000);putimage(300,100,buffer,0);delay(100000000);putimage(500,40,buffer2,0);delay(10000);putimage(500,40,buffer,0);delay(10000000);putimage(600,20,buffer2,0);delay(10000);putimage(600,20,buffer,0);delay(100000000);}while(!kbhit());for(i=0;i<100 ;i+=10){putimage(9+i,384-i,buffer3,0);delay(10000);}getch();getch();do{for(i=0;i<100;i++){putimage(10+i+i+i+i+i+i,30+i,buffer4,0);delay(100);putimage(30+i+i ,70+i,buffer4,0);delay(10000);}} while(!kbhit());cleardevice();for(i=0;i<680;i++){setfillstyle(1,12);floodfill(1,1,15);rectangle(0,0,3+i,479+i);delay(1000);setfillstyle(1,12);floodfill(638,1,15);rectangle(637-i,0,639,479);delay(1000);}setcolor(4);settextstyle(1,0,14);outtextxy(100,100,"WE WILL BE TOGETHER FOR EVER");getch();getch();getch();setcolor(9);cleardevice();for(i=0;i<400;i++){circle(320,240,i++);delay(1000);}getch();cleardevice();setbkcolor(15);setcolor(4);for(i=0;i<400;i++){arc(0,0,270,360,i);arc(0,480,0,90,i);arc(640,480,90,180,i);arc(639,0,180,270,i);delay(1000);}getch();cleardevice();setcolor(4);setbkcolor(12);outtextxy(100,100,"Zhu Zhang Lao Shi : Wan Shi ru yi");getch();outtextxy(100,150," Xin Xiang Shi Cheng ");getch();outtextxy(100,200," Xiao Kou Chang Kai ");getch();outtextxy(100,250," yi sheng ping an ");getch();outtextxy(100,300,"zui hou dui ni de jiao dao ");getch();outtextxy(100,350," biao shi zheng xin de xie yi ");getch();closegraph();}。
c语言_流星雨的实现
题目:流星雨的实现学院:班级:姓名:学号:指导教师:时间:目录一课程设计目的 (3)二设计内容与要求 (3)三概要设计 (3)四详细设计 (5)五运行界面 (6)六设计总结 (15)七教师评语 (17)一课程设计目的程序模拟一组流星飞向地面的情境,地面用多行#来表示,流星用大写字母表示。
二设计内容与要求1 内容:程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。
2 一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。
一个流星下落只能去掉一个#号,当最后一行地面有#被去掉时,程序终止。
三概要设计○1首先定义二维数组screen表示地面和天空,此数组是一个24行81列的字符数组。
上面的行表示天空,数组单元的值是空格;最下面的几行(如5行)表示地面,数组单元的值是’#’;整个屏幕的大小是80*25,即25行80列,为了在输出最后一行时不换行滚屏,程序只能利用上面的24行空间。
把数组定义成81列的目的是,每行的最后字符赋值成’\0’,就可以按照字符串的方式输出每行文本了。
○2编写的程序在下降过程中,程序必须知道流星的字符、颜色、位置、速度,因此程序需要定义以下几个数组变量:存放流星字符的数组,存放流星字符颜色的数组,存放流星行位置的数组,存放流星列位置的数组,存放流星下降速度的数组。
○3输出时程序首先输出地面和天空,即输出定义的二维数组screen中的字符串,前21行是空行,后3行是#号。
这样screen[24][81]的字符矩阵就与整个屏幕对应起来。
然后随时机产生一组流星数据,包括字符、颜色、位置和速度。
速度用一次下降多少行来表示,最大的速度是4。
由于要随机产生这些数据,因此需要调用random函数。
(random函数的原型是 int random(int num);这个函数产生一个0—num-1之间的一个随机数。
流星字符可以这样产生:random(26)+’A’; 流星字符的颜色可以这样产生:random(16)+1;流星下降的位置可以这样产生:random(4)+1;流星的行位置一开始都是1;流星的列位置可以这样产生:random(80)+1;但要保证所有流星的列位置不能相同。
