c语言程序设计 《图形动画,一起去看流星雨》
流星雨C语言代码
![流星雨C语言代码](https://img.taocdn.com/s3/m/a39ea269777f5acfa1c7aa00b52acfc789eb9fe1.png)
流星雨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语言流星雨课程设计](https://img.taocdn.com/s3/m/4417bb2a8f9951e79b89680203d8ce2f00666591.png)
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语言基本语法,介绍课程目标和教学内容。
第二课时:讲解控制结构,重点强调循环结构在动画中的应用。
单片机流星雨代码
![单片机流星雨代码](https://img.taocdn.com/s3/m/eb44237fac02de80d4d8d15abe23482fb4da026f.png)
单片机流星雨代码单片机流星雨代码文章引言:单片机流星雨代码是一种美丽的程序代码,利用它可以将LED流星效果呈现在电路板上。
本文将会介绍如何编写这样的程序代码,并给出详细的流程及代码实现。
正文:一、流星雨的效果实现原理流星雨效果实现原理主要是在程序里给LED灯一次一次地赋值,通过对不同LED灯的亮度和位置进行设置,呈现出一个肆虐的、绚丽的流星雨效果。
二、实现原理与电路设计在单片机中使用PWM波的方式来让LED灯产生不同强度的光线,最终实现流星雨效果。
将这些代码编辑到单片机后,LED灯的接线与电路板的配置也要进行正确的设置,保证了流星雨效果的实现。
三、流星雨代码的实现流程1. 首先,要对单片机进行初始化。
将所需的引脚设置为输出模式,并确保所有输出引脚的状态均为低电平状态。
2. 编写中断程序,配置定时器。
定时器周期性地产生中断,让程序可以重复运行,并实现LED灯的流星雨效果。
3. 设置流星雨效果的参数,如:流星雨强度、流星雨增长速率、流星雨的持续时间、流星雨的最大速度等等。
4. 编写主程序,流星雨效果的实现可以分为两个阶段:流星雨增长阶段和流星雨减弱阶段。
5. 在流星雨增长阶段,程序会根据设定的流星雨强度、速度等参数,将LED灯的亮度逐渐调高,并让LED灯在电路板上移动,呈现出流星雨的效果。
6. 在流星雨减弱阶段,程序会逐步降低LED灯的亮度,并让LED灯停止移动,在指定的时间内消失。
四、程序代码实现代码实现大致如下:// Declaration of the LEDs’ pins#define LED1 1#define LED2 2#define LED3 3#define LED4 4#define LED5 5#define LED6 6// Declaration of other parameters#define MAX_SPEED 20#define MAX_BRIGHTNESS 200#define MAX_DELAY 100static uint8_t curBrightness[6];static uint8_t delays[6];static uint8_t ledPos[6];static uint8_t speeds[6];void preCalcDelays() {for (uint8_t i = 0; i < 6; i++) {delays[i] += rand() % (MAX_DELAY - 1);}}void setup() {pinMode(1, OUTPUT);pinMode(2, OUTPUT);pinMode(3, OUTPUT);pinMode(4, OUTPUT);pinMode(5, OUTPUT);pinMode(6, OUTPUT);preCalcDelays();}void loop() {for (uint8_t i = 0; i < 6; i++) {// Brightness of the current LEDcurBrightness[i] += speeds[i];curBrightness[i] = min(curBrightness[i], MAX_BRIGHTNESS);// The LED is on the edge of the board, change the directionif (ledPos[i] > 9 || ledPos[i] == 0) {ledPos[i] = rand() % 3;speeds[i] = (rand() % (MAX_SPEED - 1)) + 1;}// Select the LEDs to be dimmedif ((rand() % (MAX_SPEED - 1)) + 1 > 12) {curBrightness[i] -= speeds[i];curBrightness[i] = max(curBrightness[i], 0);}// Update the LED with the new position and brightness analogWrite(i, curBrightness[i]);digitalWrite(ledPos[i], HIGH);delay(delays[i]);digitalWrite(ledPos[i], LOW);ledPos[i]++;}}结语:本文从实现原理到编写流程提供了全面的指导,使得想要编写单片机流星雨代码的开发者可以更加顺畅地完成这样的程序编程。
c语言礼花源代码直接复制
![c语言礼花源代码直接复制](https://img.taocdn.com/s3/m/41194696f424ccbff121dd36a32d7375a417c660.png)
c语言礼花源代码直接复制以下是一份C语言礼花源代码,可以直接复制使用: ```#include <stdio.h>void printLine(int num) {for (int i = 0; i < num; i++) {printf('*');}printf('');}void printBlock(int num) {for (int i = 0; i < num; i++) {printLine(num - i);}}void printTriangle(int num) {for (int i = 0; i < num; i++) {printLine(i + 1);}}void printRect(int width, int height) {for (int i = 0; i < height; i++) { printLine(width);}}int main() {int choice;int num, width, height;printf('请选择礼花形状:');printf('1. 倒三角形');printf('2. 正三角形');printf('3. 长方形');scanf('%d', &choice);switch (choice) {case 1:printf('请输入行数:');scanf('%d', &num);printBlock(num);break;case 2:printf('请输入行数:');scanf('%d', &num);printTriangle(num);break;case 3:printf('请输入宽度和高度:');scanf('%d %d', &width, &height);printRect(width, height);break;default:printf('输入错误!');break;}return 0;}```这段代码可以根据用户输入的选项来打印不同形状的礼花。
简单浪漫的C语言代码
![简单浪漫的C语言代码](https://img.taocdn.com/s3/m/d4b1b9366ad97f192279168884868762caaebbb7.png)
简单浪漫的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++实现你的浪漫表白:浪漫流星雨表白程序](https://img.taocdn.com/s3/m/ccd6cf070a4e767f5acfa1c7aa00b52acfc79cfc.png)
零基础⼊门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语言实现流星雨效果流程](https://img.taocdn.com/s3/m/1fcc258850e79b89680203d8ce2f0066f533649a.png)
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语言程序设计 《图形动画,一起去看流星雨》
![c语言程序设计 《图形动画,一起去看流星雨》](https://img.taocdn.com/s3/m/259e12ff04a1b0717fd5dd71.png)
/* 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语言 动画例子
![c语言 动画例子](https://img.taocdn.com/s3/m/7674d45bc381e53a580216fc700abb68a982ad3d.png)
在C语言中制作动画可以通过控制台字符画或者利用图形库(如OpenGL、SDL等)来实现。
以下是一个基于控制台的简单字符动画例子,它会模拟一个小火车移动的效果:
c代码:
上述代码中,我们使用了system("cls")清空控制台屏幕,并根据变量distance来决定火车在控制台中的位置,通过循环和延时模拟火车从左向右移动的过程。
如果想要创建更复杂的动画,例如窗口化图形界面动画,则需要结合OpenGL或SDL这样的图形库来进行开发。
以下是使用OpenGL的一个非常简化的示例框架:
c代码:
请注意,实际的OpenGL动画程序会包含更多的细节,包括初始化、设置视口、投影矩阵以及具体的绘图函数等。
C语言课程设计流星雨
![C语言课程设计流星雨](https://img.taocdn.com/s3/m/778490e8f8c75fbfc77db29a.png)
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];}。
星空效果带流星
![星空效果带流星](https://img.taocdn.com/s3/m/aefd20120b4e767f5acfceb1.png)
主要代码如下,整体的思路无非就是动态复制影片并随机设置流星出现。
看代码基本都是基础代码,这里说下gotoAndPla y()go toAndPlay有三种使用方式,如果还有谁不清楚可以再重新了解下着三种方式。
1.帧之间的跳转:比如:gotoAndPlay(4); 意思是我跳转到第四帧开始播放,这个是最常用的。
2.场景之间跳转:比如:gotoAndPlay("Two", 3);意思是跳转到two场景的第三针进行播放,注意,最好用英文,用中文有时候会出现错误。
3.flash帧标签之间的跳转:比如 gotoAndPlay("fl y");意思是我跳转到fl y帧标签进行播放,这个适合在很多帧的时候进行跳转,不容易看错帧而跳错。
注意,前提是你要再帧上先加个标签。
这就是gotoAndPlay三种用法,至于说参数的传递和下面例子中的随机跳转都在这三种用法中,只是表达方式不同。
var sceneWidth = 550;var sceneHeight = 180;var starNum = 50;var starSpeed = 20;var starTime = 100;var starDistance = true;this.starMc._visib le = 0;this.starFm._visible = 0;for (var i = 0; i mc = this.starMc.duplicateMovieClip("startMc"+i, i+999);mc.gotoAndPlay(random(mc._totalframes+1));mc._x = random(sceneWidth);mc._y = random(sceneHeight);mc._xs cale = mc._ys cale=mc._alpha=random(50)+50;mc._rotation = random(360);mc.onEnterFrame = function() {if (starDistance == true) {if (this._x>0) {this._x -= starSpeed/this._xscale;} else {this._x = sceneWidth;}} else {if (this._x this._x += starSpeed/this._xscale;} else {this._x = 0;}}};}var j = 0;this.onEnterFrame = function() {if (random(starTime) == 0) {mc = this.starFm.duplicateMovieClip("starFm"+j, j);mc._x = random(sceneWidth)+50;mc._xscale = mc._yscale=random(20)+60;j++;}};下载地址:/file/dn6evea0。
c语言星空代码
![c语言星空代码](https://img.taocdn.com/s3/m/dbc081fddb38376baf1ffc4ffe4733687e21fc83.png)
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编程学习程序员大神!绘制神奇代码之星空动态](https://img.taocdn.com/s3/m/54d9fb2630126edb6f1aff00bed5b9f3f90f72b4.png)
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毫秒轮回⼀次,每⼀次轮回中,每颗星星都向右挪动。
流星雨代码——精选推荐
![流星雨代码——精选推荐](https://img.taocdn.com/s3/m/d2c9e815c4da50e2524de518964bcf84b9d52dfa.png)
流星⾬代码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>。
C语言画图及小动画制作(graphisc.h函数入门)
![C语言画图及小动画制作(graphisc.h函数入门)](https://img.taocdn.com/s3/m/2cb1faf9910ef12d2af9e73e.png)
C 语言 graphics.h 的使用
写此教程的目的是为了给 Sarah 一点小小的入门砖。本人非牛,出错在所 难免。敬请原谅。
我的联系方式:qq:617251408
博客:/gracefulphoenix 学了这么长时间的 C 语言,总不能还停留在对话框上。因此想着弄点图形出来。而 C 语言下有个 graphics.h 这个函数,就是干这事的。我们一起探索一下。 然而,毕竟是 DOS 时代的产物,VC 是不支持此图形库的。因此我们要用 TC 去编译。到 网上去下载一个 win-tc2.0,我们开始我们的旅程。 打开 win-tc 的界面:
pattern,int width);
说明: 参数 style 为线型取值,也可以用相应名称表示,如表 1-10 中所示。
参数 pattern 用于自定义线图样,它是 16 位(bit)字,只有当 style=USERBIT_LINE(值
为 1)时,pattern 的值才有意义,使用用户自定义线图样,与图样中“1”位对应的像素显
int main(void) {
initgr(); /* BGI 初始化 */
/*****此部分添加你自己的代码,例如 line(25, 25, 220, 220);
share your knowledge with the world
circle(100, 100, 50); 等等*****/ line(20,20,300,300); getch(); /* 暂停一下,看看前面绘图代码的运行结果 */ closegr(); /* 恢复 TEXT 屏幕模式 */ return 0; }
名称
取值
c语言代码动态流星
![c语言代码动态流星](https://img.taocdn.com/s3/m/d52f49f55ebfc77da26925c52cc58bd6318693a5.png)
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语言程序设计详细内容
![流星雨c语言程序设计详细内容](https://img.taocdn.com/s3/m/f79f5ccfda38376bae1fae06.png)
{
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]);
c语言 流星雨的实现
![c语言 流星雨的实现](https://img.taocdn.com/s3/m/5074be56a21614791711288b.png)
题目:流星雨的实现学院:班级:姓名:学号:指导教师:时间:目录一课程设计目的 (3)二设计内容与要求 (3)三概要设计 (3)四详细设计 (5)五运行界面 (5)六设计总结 (15)七教师评语 (16)一课程设计目的程序模拟一组流星飞向地面的情境,地面用多行#来表示,流星用大写字母表示。
二设计内容与要求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;但要保证所有流星的列位置不能相同。
matlab动画-流星雨
![matlab动画-流星雨](https://img.taocdn.com/s3/m/36d80d05b52acfc789ebc920.png)
clc;%清屏ysy=figure('name','一起去看流星雨');%标题axis([0 80 0 80]);hold on;axis off;set(ysy,'color','k');%设置背景为黑色%%%%%以下是画月亮t6=-pi/3:0.01:0;x6=60+10*cos(t6);y6=60+10*sin(t6);plot(x6,y6,'color',[1 1 0]);%画第一条弧线t7=-pi*2/3:0.01:pi/3;x7=67.5+5*cos(t7);y7=60-sqrt(3)*5/2+5*sin(t7);plot(x7,y7,'color',[1 1 0]);%画第二条弧线fill([x6,x7],[y6,y7],'y');%将月亮填充为黄色%%%%%以下为画五角星line([30,33,34,35,38,36,38,34,30,32,30],[60,60,62.5,60,60,59,56.5,58,56.5,59,60],...'color','b','MarkerEdgeColor','b','linewidth',2);%画五角星fill([30,33,34,35,38,36,38,34,30,32,30],...[60,60,62.5,60,60,59,56.5,58,56.5,59,60],'b');%填充五角星%%%%%以下是画人%%%%%%%男t8=0:0.01:2*pi;x8=40+2*cos(t8);y8=24+4*sin(t8);plot(x8,y8,'b','linewidth',2);%%%%%画头line([40,40.8],[26,26],'color','y');%左眼line([41.4,41.8],[26,26],'color','y');%右眼line(41.3,24.1,'color','y','linestyle','.','erasemode','xor','markersize',5);%鼻line([41,41.8],[22,22],'color','y');%嘴line([39.8,39.8,38.3,38.3,41.7,41.7,40.8,40.8,39.8],[20,19,18.7,0,0.5,18.7,19,20,20],...'color','b','linewidth',2);%躯干line([41.7,41.7],[13.4,16.2],'color','k','linewidth',2)%清除被手臂挡住的线line([40.7,40.7],[0.35,8.7],'color','b','linewidth',2);%用一条线将矩形分开,就是腿line([40,41,44,45,41,40],[18.2,16,18.8,17.8,13.1,15.3],'color','b','linewidth',2);%%胳膊%%%%%%%%女t9=0:0.01:2*pi;x9=50+2*cos(t8);y9=22+4*sin(t8);plot(x9,y9,'color','m','linewidth',2);%%%%%画头line([50,49.2],[24,24],'color','y');%左眼line([48.2,48.6],[24,24],'color','y');%右眼line(48.7,22.1,'color','y','linestyle','.','erasemode','xor','markersize',5);%鼻line([48.2,49.2],[20,20],'color','y');%嘴line([49.8,49.8,48.3,48.3,46.3,48.3,48.3,51.7,51.7,53.7,51.7,51.7,50.8,50.8],...[18,17,16.7,8,4,4,0.5,0,4,4,8,16.7,17,18],'color','m','linewidth',2);%躯干line([48.3,48.3],[14.1,16.1],'color','k','linewidth',2)%清除挡住的线line([49.3,49.3],[0.35,4],'color','m','linewidth',2);%腿line([50,47.8,45.8,45,47.8,50],[16.4,16,18.4,17.8,14,14.4],'color','m','linewidth',2);%%胳膊b1=text(20,70,'哇塞!流星雨来了!','fontsize',16,'color','r');%输入字pause(1);%停顿一秒delete(b1);%删除b1b2=text(22,68,'听说...','fontsize',16,'color','r');pause(1);delete(b2);b3=text(24,66,'在流星雨下许的愿,一定会实现!','fontsize',16,'color','r');pause(2);delete(b3);b4=text(54,28,'愿我们相伴一生!','fontsize',16,'color','r');b5=text(10,30,'愿执子之手,','fontsize',16,'color','r');b6=text(12,22,'与子偕老!','fontsize',16,'color','r');a1=line(5,70,'color','w','linestyle','.','erasemode','xor','markersize',10);%流星1a2=line(5,65,'color','w','linestyle','.','erasemode','xor','markersize',10);%流星2a3=line(5,60,'color','w','linestyle','.','erasemode','xor','markersize',10);%流星3a4=line(5,55,'color','w','linestyle','.','erasemode','xor','markersize',10);%流星4a5=line(5,50,'color','w','linestyle','.','erasemode','xor','markersize',10);%流星5x1=5;%流星1的初始横坐标y1=70;;%流星1的初始纵坐标x2=5;y2=65;x3=5;y3=60;x4=5;y4=55;x5=5;y5=50;dt1=0.4375;%递增量dt2=0.1;%递增量t1=x1;t2=x2;t3=x3;t4=x4;t5=x5;r1=1;%画心形中的小圆半径r2=4;%画心形中的大圆半径c1=39;%小圆1的初始横坐标d1=33;%小圆1的初始纵坐标c2=41;%小圆2的初始横坐标d2=33;%小圆2的初始纵坐标c3=38;%大圆1的初始横坐标d3=33;%大圆1的初始纵坐标c4=42;%大圆2的初始横坐标d4=33;%大圆2的初始纵坐标f1=c1+10;%第二个心形中小圆1的横坐标f2=c2+10;%第二个心形中小圆2的横坐标f3=c3+10;%第二个心形中大圆1的横坐标f4=c4+10;%第二个心形中大圆2的横坐标%第二个心形中的纵坐标跟第一个共用t=0.09;%递增量t10=0:0.01:pi;%设置弧度t11=-pi*11/30:0.01:0;t12=-pi:0.01:-pi*19/30;%流星雨开始及心形移动while t5<80 %循环开始t1=t1+dt1;t2=t2+dt1;t3=t3+dt1;t4=t4+dt1;t5=t5+dt1;x1=t1;x2=t2;x3=t3;x4=t4;x5=t5;y1=y1+dt2;y2=y2+dt2;y3=y3+dt2;y4=y4+dt2;y5=y5+dt2;set(a1,'xdata',[x1,x1],'ydata',[y1,y1]);%流星1的移动set(a2,'xdata',[x2,x2],'ydata',[y2,y2]);%流星2的移动set(a3,'xdata',[x3,x3],'ydata',[y3,y3]);%流星3的移动set(a4,'xdata',[x4,x4],'ydata',[y4,y4]);%流星4的移动set(a5,'xdata',[x5,x5],'ydata',[y5,y5]);%流星5的移动c1=c1+t/3.2;c2=c2+t/3.2;c3=c3+t/3.2;c4=c4+t/3.2;f1=f1-t/3.2;f2=f2-t/3.2;f3=f3-t/3.2;f4=f4-t/3.2;d1=d1+t;d2=d2+t;d3=d3+t;d4=d4+t;c5=c1+r1*cos(t10);d5=d1+r1*sin(t10);f5=f1+r1*cos(t10);c6=c2+r1*cos(t10);d6=d2+r1*sin(t10);f6=f2+r1*cos(t10);c7=c3+r2*cos(t11);d7=d3+r2*sin(t11);f7=f3+r2*cos(t11);c8=c4+r2*cos(t12);d8=d4+r2*sin(t12);f8=f4+r2*cos(t12);plot(c5,d5,'r');%小圆弧1plot(c6,d6,'r');%小圆弧2plot(c7,d7,'r');%大圆弧1plot(c8,d8,'r');%大圆弧2plot(f5,d5,'r');%第二个心形小圆弧1plot(f6,d6,'r');%小圆弧2plot(f7,d7,'r');%大圆弧1plot(f8,d8,'r');%大圆弧2pause(0.01);%停顿0.01秒drawnow;fill([c1-1.1,c2+1.1,c2+1.1,c1-1.1],[d1-4,d1-4,d2+1,d2+1],'k');%除去显示出来的心形1,以便移动fill([f1-1.1,f2+1.1,f2+1.1,f1-1.1],[d1-4,d1-4,d2+1,d2+1],'k');%除去显示出来的心形2,以便移动end;%循环结束plot(c5,d5,'r');plot(c6,d6,'r');plot(c7,d7,'r');plot(c8,d8,'r');%显示最后的心形。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* 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();
}。