c语言流星雨的实现
流星雨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;但要保证所有流星的列位置不能相同。
C语言课程设计流星雨
C语言课程设计流星雨的设计功能说明:程序模拟一组流星飞向地面的情景。
地面用多行#来表示,流星用大写字母不表示。
程序产生一组流星(比如10个),从屏幕顶部下降飞向地面。
一组流星中,每个流星的字符颜色是随机的,下降的位置是随机的,下降的速度也是随机的。
一个流星下落只能去掉一个#号,当最后一行地面有#被去掉时,程序终止。
C语言程序源代码:#include<stdio.h>#include<windows.h>#include<time.h>#include<stdlib.h>int main(){void load(char liuxin[25][80],char ground[5][80],int heng[10],int lie[10]);void echo(char out[25][80],int lie[10],int color[10]);void make(char out[25][80],char liuxin[25][80],char mark[10],int lie[10],int heng[10],int color[10],int speed[10],int exist[10]);void fall(char out[25][80],char liuxin[25][80],int speed[10],char ground[5][80],int exist[10],int heng[10],int lie[10]);void panduan(char ground[5][80]);void con(char out[25][80],char liuxin[25][80],char ground[5][80]);int exist_or(char liuxin[25][80]);char out[25][80],liuxin[25][80],ground[5][80],mark[10];int exist[10],lie[10],heng[10],color[10],speed[10];load(liuxin,ground,heng,lie);srand((int)time(0));con(out,liuxin,ground);echo(out,lie,color);while(1){make(out,liuxin,mark,lie,heng,color,speed,exist);//产生一组10个不同颜色不同字母不同下落速度的流星雨while(1){con(out,liuxin,ground);echo(out,lie,color);panduan(ground);Sleep(1);fall(out,liuxin,speed,ground,exist,heng,lie);if(exist_or(liuxin)==0) break;}}return 0;}void load(char liuxin[25][80],char ground[5][80],int heng[10],int lie[10]) //初始化流行数组和地面{int i1,i2;for(i1=0;i1<25;i1++)for(i2=0;i2<80;i2++)liuxin[i1][i2]=' ';for(i1=0;i1<5;i1++)for(i2=0;i2<80;i2++)ground[i1][i2]='#';for(i1=0;i1<10;i1++){heng[i1]=0;lie[i1]=i1;}}void echo(char out[25][80],int lie[10],int color[10]) //将out数组输出到屏幕上{int i1,i2,i3=0;COORD coord;coord.X=0;coord.Y=0;SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );for(i1=0;i1<25;i1++){i3=0;for(i2=0;i2<80;i2++){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSI TY);if(i2==lie[i3]){if(out[i1][i2]!=' ' && out[i1][i2]!='#')switch(color[i3]){case 0: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);brea k;case 1: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);b reak;case 2: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);br eak;}i3+=1;}printf("%c",out[i1][i2]);}}}void make(char out[25][80],char liuxin[25][80],char mark[10],int lie[10],int heng[10],int color[10],int speed[10],int exist[10]){int i1,i2,t,change,base=1;for(i1=0;i1<10;i1++){heng[i1]=0;mark[i1]=(abs(rand())%26+65);color[i1]=abs(rand())%3;while(1){base=0;t=(abs(rand())%80);for(i2=0;i2<10;i2++)if(t==lie[i2]) base=1;if(base==0) break;}lie[i1]=t;speed[i1]=(abs(rand())%4)+1;liuxin[0][lie[i1]]=mark[i1];exist[i1]=1;}for(i1=0;i1<10;i1++)for(i2=0;i2<9;i2++){if(lie[i2]>lie[i2+1]){change=lie[i2];lie[i2]=lie[i2+1];lie[i2+1]=change;}}}void fall(char out[25][80],char liuxin[25][80],int speed[10],char ground[5][80],int exist[10],int heng[10],int lie[10]){int i1,i2;for(i1=0;i1<10;i1++){if(exist[i1]==1){for(i2=1;i2<=speed[i1];i2++){liuxin[heng[i1]+1][lie[i1]]=liuxin[heng[i1]][lie[i1]];liuxin[heng[i1]][lie[i1]]=' ';heng[i1]+=1;if(heng[i1]>=20){if(ground[heng[i1]-20][lie[i1]]=='#'){liuxin[heng[i1]][lie[i1]]=' ';ground[heng[i1]-20][lie[i1]]=' ';exist[i1]=0;break;}}}}}}int exist_or(char liuxin[25][80]) //判断是否还有流星,如果没有就开始新的make函数{int i1,i2,t=0;for(i1=0;i1<25;i1++)for(i2=0;i2<80;i2++){if(liuxin[i1][i2]!=' '){t=1;break;}}return t;}void panduan(char ground[5][80]) //判断最后一行是否有空格{int i,a=0;for(i=0;i<80;i++){if(ground[4][i]==' ') getchar();}}void con(char out[25][80],char liuxin[25][80],char ground[5][80]) //将流行数组与地面数组整合到out数组中{int i1,i2;for(i1=0;i1<25;i1++)for(i2=0;i2<80;i2++)out[i1][i2]=liuxin[i1][i2];for(i1=20;i1<25;i1++)for(i2=0;i2<80;i2++)if(ground[i1-20][i2]=='#')out[i1][i2]=ground[i1-20][i2];}。
c语言星空代码
c语言星空代码C语言星空代码,是一段代码用来输出一颗星星,颇受程序员喜爱。
在程序执行过程中,输出的结果和一颗闪烁的星星很相似,因此也被称为星空代码。
下面将介绍一下C语言星空代码的实现逻辑和编写方法。
实现逻辑C语言星空代码的实现逻辑比较简单。
程序会输出一个很长的字符串,其中每个字符都代表星星的一颗点。
根据不同的字符,输出的效果也不同。
一般情况下,我们用空格来表示黑暗的夜空,用“*”来表示星星的一颗点。
如果打印垂直方向的星星,则需要在ASCII码中选择输出一个竖线“|”,表示星星正立。
而打印倾斜的星星,则需要输出ASCII码中“\”或“/”符号。
编写方法编写C语言星空代码,首先需要确定输出的字符串长度。
一般情况下,我们选用宽度为80个字符,高度为25行的终端屏幕作为输出界面。
因此,字符串长度应该是80*25=2000个字符。
这个字符串中,每个字符都代表星星的一颗点,可以用字符数组存储。
在程序中,我们可以用两层循环,根据不同的情况输出星星。
首先,我们需要定义一个字符数组并初始化。
可以使用下面的语句进行初始化:char star[2000] = " ";其中,双引号内的内容就是2000个空格,用来表示黑暗的夜空。
接下来,我们需要在数组上添加星星。
可以使用一些特殊的字符来表示不同的星星情况,例如空格,竖线,反斜杠和斜杠等。
然后,根据不同的字符,使用条件判断语句将不同的字符添加到数组中。
可以通过调整循环中计数器的值,来产生渐变的效果,让星星闪烁。
最后,我们需要在终端屏幕中输出这个字符数组。
可以使用for循环将数组中的字符逐一输出,或者使用printf语句输出整个字符串。
代码示例下面是一段C语言星空代码的示例,可以输出闪烁的星星:```#include <stdio.h>#include <unistd.h>int main(){int i, j;char star[2000] = " "; while (1) {for (i = 0; i < 80; i++) {for (j = 0; j < 25; j++) {int index = j * 80 + i;if ((i + j) % 2 == 0) {star[index] = '*';}}}system("clear");printf("%s", star);usleep(200000);for (i = 0; i < 80; i++) {for (j = 0; j < 25; j++) {int index = j * 80 + i;if ((i + j) % 2 == 0) {star[index] = ' ';}}}printf("%s", star);usleep(200000);}return 0;}```这段代码使用双循环,将所有奇数位置(i+j为奇数)的字符改为星星,偶数位置则为黑色背景。
C语言C编程学习程序员大神!绘制神奇代码之星空动态
C语⾔C编程学习程序员⼤神!绘制神奇代码之星空动态C语⾔是⾯向过程的,⽽C++是⾯向对象的C和C++的区别:C是⼀个结构化语⾔,它的重点在于算法和数据结构。
C程序的设计⾸要考虑的是如何通过⼀个过程,对输⼊(或环境条件)进⾏运算处理得到输出(或实现过程(事务)控制)。
C++,⾸要考虑的是如何构造⼀个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。
所以C与C++的最⼤区别在于它们的⽤于解决问题的思想⽅法不⼀样。
之所以说C++⽐C更先进,是因为“ 设计这个概念已经被融⼊到C++之中 ”。
C与C++的最⼤区别:在于它们的⽤于解决问题的思想⽅法不⼀样。
之所以说C++⽐C更先进,是因为“ 设计这个概念已经被融⼊到C++之中 ”,⽽就语⾔本⾝⽽⾔,在C中更多的是算法的概念。
那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,⼀样不⾏。
⽽且,“C加上好的设计”也能写出⾮常好的东西。
今天分享⼀个好玩的:星空要⽤C/C++绘制是动态的哦。
在今天之前,你能想象⽤C/C++⼏⼗⾏代码就能做出上⾯这个轨范吗?代码实现在EasyX的⽂档中,就有这么⼀个Demo轨范。
我们先来分析⼀下这段代码。
看过之前C说话专题的同窗们必定可以独⽴看明⽩这段代码。
代码构造⼤要如下:1. 星星构造体经由过程构造体保留每克星星的位置信息、颜⾊信息和挪动信息。
位置信息EasyX坐标系中的点坐标位置。
颜⾊信息所有的星星都是⽩⾊,不合的是敞亮程度不合。
近处的星星⽃劲亮,远处的星星⽃劲暗。
挪动速度每⼀次轮回,所有的星星都市向右挪动,经由过程这个参数来记实每个星星每次向右挪动的间隔。
近处的星星挪动得快,远处的星星挪动得慢。
2. 星星初始化⽤⼀个数组来保留所有的星星。
每个星星都⽤InitStar()函数随机出⼀组特征值。
把持这些特征值将每颗星星画在画布上。
这⾥使⽤了EasyX的画点接⼝:void putpixel(int x, int y, COLORREF color);3. 星星挪动每20毫秒轮回⼀次,每⼀次轮回中,每颗星星都向右挪动。
C语言+EasyX实现数字雨效果
C语⾔+EasyX实现数字⾬效果本⽂实例为⼤家分享了C语⾔ EasyX实现数字⾬的具体代码,供⼤家参考,具体内容如下/////////////////////////////////////////////////////////////////////// 程序名称:数字⾬// 编译环境:VC6.0 EasyX// 作 者:flx413// 时间:2016-5-2/////////////////////////////////////////////////////////////////////#include <stdio.h>#include <windows.h>#include <graphics.h>#include <stdlib.h>#include <time.h>#define SCREEN_WIDTH 1366#define SCREEN_HEIGHT 768#define DEF_RAIN_NUM 91 //⾬的列数//数字⾬开始的位置int g_nRainPos[DEF_RAIN_NUM] = { 0 };//数字⾬的字符串char g_strRain[DEF_RAIN_NUM][10] = { 0 };//随机产⽣⼀个字母char CreateRandomNum() {char nRandomNum = 0;while( 1 ) {nRandomNum = rand() % 123; //随机产⽣0~122的⼀个字符if( ( nRandomNum >= 65 && nRandomNum <= 90 ) || nRandomNum >= 97 ) {return nRandomNum;}}}//随机产⽣数字⾬的开始位置void InitPos() {for( int i = 0; i < DEF_RAIN_NUM; i++ ) {g_nRainPos[i] = rand() % SCREEN_HEIGHT;}}//初始化数字⾬void InitNumRain() {for( int i = 0; i < DEF_RAIN_NUM; i++ ) {for( int j = 0; j < 10; j++ ) {g_strRain[i][j] = CreateRandomNum();}}}//显⽰⾬void ShowNumRain() {for( int i = 0; i < DEF_RAIN_NUM; i++ ) {//设置字体颜⾊settextcolor( RGB( 255, 255, 255 ) ); //⽩⾊for( int j = 0; j < 10; j++ ) {outtextxy( i * 15, g_nRainPos[i] - 15 * j, g_strRain[i][j] );settextcolor( RGB( 0, 255 - 28 * j, 0 ) );}}for( i = 0; i < DEF_RAIN_NUM; i++ ) {g_nRainPos[i] += 15; //屏幕刷新后⾬的位置下降15}for( i = 0; i < DEF_RAIN_NUM; i++ ) {if( g_nRainPos[i] - 10 * 15 >= SCREEN_HEIGHT ) {g_nRainPos[i] = 0;}}}int main() {srand((unsigned)time(NULL));initgraph( SCREEN_WIDTH, SCREEN_HEIGHT );InitPos();InitNumRain();BeginBatchDraw();while( 1 ) {InitNumRain();ShowNumRain();FlushBatchDraw();Sleep( 100 ); //延时0.1秒cleardevice(); //清空屏幕}EndBatchDraw();closegraph();return 0;}效果图:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
c语言代码动态流星
c语言代码动态流星C语言是一种高级编程语言,它被广泛应用于计算机科学和软件开发领域。
C语言的特点是简单、高效、可移植性强,因此它被广泛应用于操作系统、编译器、数据库、网络协议等领域。
动态流星是一种非常有趣的效果,它可以让屏幕上的星星像流星一样闪烁。
下面是一个简单的C语言代码,可以实现动态流星效果:```#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>int main(){srand(time(NULL));int x = rand() % 80;int y = rand() % 25;int speed = rand() % 5 + 1;int length = rand() % 10 + 5;int i;for (i = 0; i < length; i++){COORD pos = {x, y + i};SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE ), pos);printf("*");Sleep(speed);printf(" ");}return 0;}```这段代码首先使用了srand()函数和time()函数来生成随机数种子,然后使用rand()函数来生成随机数。
接着,代码使用了SetConsoleCursorPosition()函数来设置光标位置,然后使用printf()函数来输出星星。
最后,代码使用了Sleep()函数来控制星星的速度。
这段代码的实现非常简单,但是它可以让屏幕上的星星像流星一样闪烁,非常有趣。
如果你想要实现更复杂的动态流星效果,可以尝试使用更高级的图形库,如OpenGL或DirectX。
总之,C语言是一种非常强大的编程语言,它可以用来实现各种各样的应用程序和效果。
流星雨c语言程序设计详细内容
{
base=0;
t=((rand())%80);
for(i2=0;i2<10;i2++)
if(t==lie[i2]) base=1;
if(base==0) break;
}
i3=0;
for(i2=0;i2<80;i2++)
{
if(i2==lie[i3])
{
if(out[i1][i2]!=' '&&out[i1][i2]!='#')
switch(color[i3])//颜色函数//
}
i3+=1;
}
printf("%c",out[i1][i2]);
}
}
}
void make(char out[25][80],char liuxin[25][80],char mark[10],int lie[10],int heng[10],int color[10],int speed[10],int exist[10])
{
int i1,i2;//定义整形变量//
for(i1=0;i1<10;i1++)//for循环对exist数组赋值//
{
if(exist[i1]==1)//if函数表条件//
{
for(i2=1;i2<=speed[i1];i2++)
{
void echo(char out[25][80],int lie[10],int color[10]);
void make(char out[25][80],char liuxin[25][80],char mark[10],int lie[10],int heng[10],int color[10],int speed[10],int exist[10]);
流星雨代码——精选推荐
流星⾬代码1.流星⾬代码<!doctype html><html><head><meta charset="gbk-2312"/><title>流星⾬</title><meta name="keywords" content="关键词,关键字"><meta name="description" content="描述信息"><style>body {margin: 0;overflow: hidden;}</style><input value="全屏" type='button' οnclick='toggleFullScreen();' /></head><body><!--<canvas>画布画板画画的本⼦--><canvas width=400 height=400 style="background:#000000;" id="canvas"></canvas><!--javascript画笔--><script>//获取画板//doccument 当前⽂档//getElement 获取⼀个标签//ById 通过Id名称的⽅式//var 声明⼀⽚空间//var canvas 声明⼀⽚空间的名字叫做canvasvar canvas = document.getElementById("canvas");//获取画板权限上下⽂var ctx = canvas.getContext("2d");//让画板的⼤⼩等于屏幕的⼤⼩/*思路:1.获取屏幕对象2.获取屏幕的尺⼨3.屏幕的尺⼨赋值给画板*///获取屏幕对象var s = window.screen;//获取屏幕的宽度和⾼度var w = s.width;var h = s.height;//设置画板的⼤⼩canvas.width = w;canvas.height = h;//设置⽂字⼤⼩var fontSize = 14;//计算⼀⾏有多少个⽂字取整数向下取整var clos = Math.floor(w/fontSize);//思考每⼀个字的坐标//创建数组把clos 个 0 (y坐标存储起来)var drops = [];var str = "qwertyuiopasdfghjklzxcvbnm1234567890!@#¥%……&*()-=+";//往数组⾥⾯添加 clos 个 0for(var i = 0;i<clos;i++) {drops.push(0);}//绘制⽂字function drawString() {//给矩形设置填充⾊ctx.fillStyle="rgba(0,0,0,0.05)"//绘制⼀个矩形ctx.fillRect(0,0,w,h);//添加⽂字样式ctx.font = "600 "+fontSize+"px 微软雅⿊";//设置⽂字颜⾊ctx.fillStyle = "#00ff00";for(var i = 0;i<clos;i++) {//x坐标var x = i*fontSize;//y坐标var y = drops[i]*fontSize;//设置绘制⽂字ctx.fillText(str[Math.floor(Math.random()*str.length)],x,y);if(y>h&&Math.random()>0.99){drops[i] = 0;}drops[i]++;}}function toggleFullScreen() {if (!document.fullscreenElement && // alternative standard method!document.mozFullScreenElement && !document.webkitFullscreenElement) {// current working methods if (document.documentElement.requestFullscreen) {document.documentElement.requestFullscreen();} else if (document.documentElement.mozRequestFullScreen) {document.documentElement.mozRequestFullScreen();} else if (document.documentElement.webkitRequestFullscreen) {document.documentElement.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);}} else {if (document.cancelFullScreen) {document.cancelFullScreen();} else if (document.mozCancelFullScreen) {document.mozCancelFullScreen();} else if (document.webkitCancelFullScreen) {document.webkitCancelFullScreen();}}}//定义⼀个定时器,每隔30毫秒执⾏⼀次setInterval(drawString,30);</script></body></html>。
python流星雨代码
python流星雨代码Python流星雨代码Python是一种现代化的高级编程语言,尤其在数据科学和人工智能领域中广泛使用。
本文将介绍Python中流星雨代码的实现过程和应用范围。
1.流星雨代码的作用流星雨代码是一种产生视觉效果的代码,可以在终端中创建纷至沓来的随机字符下落,形成流星雨的效果。
流星雨代码通常应用于个人网站、个人桌面上、个人博客等,可以增加页面的吸引力和可读性。
2.实现过程流星雨代码的核心是利用Python的随机函数来产生随机字符和随机位置。
通过计算机循环,将每个字符下落的位置随机化,然后将其打印在终端上。
以下是一个简单的流星雨代码样例:import random import timeWIDTH = 80 HEIGHT = 25class Drop: def __init__(self): self.x = random.randint(0, WIDTH) self.y = random.randint(0, HEIGHT) self.char =chr(random.randint(33, 126))def fall(self): self.y += 1 self.x = self.x + random.randint(-1, 1)if self.y > HEIGHT:self.__init__()def draw(self, canvas):canvas[self.y][self.x] = self.chardef loop(): canvas = [[' ' for _ inrange(WIDTH)] for _ in range(HEIGHT)] drops = []while True: drops.append(Drop())for drop in drops:drop.fall() drop.draw(canvas)for row in canvas: for char in row: print(char, end='')print()time.sleep(0.1)print('\033[1;1H') #回到终端顶端位置如果想要修改颜色或者效果,可以直接修改代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:流星雨的实现学院:班级::学号:指导教师:时间:目录一课程设计目的 (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、系统运行结果六设计总结七教师评语。