當前位置:首頁 » 編程語言 » c語言雪花下落
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言雪花下落

發布時間: 2022-02-12 18:16:33

㈠ 如何設計一個雪花飄落的c語言程序

把 雪花的運動 分成兩部分 垂直下落 一般保持 勻速就可以 當然也可以 搞一些 其他的 運動形式
第二部分 是 水平運動 這部分稍微復雜些 :由兩塊 組成 一塊 是水平方向的 勻速 另一塊 則是 由 正弦或餘弦函數構成的 左右擺動
我在flash中 用過 效果 還可以~~

㈡ 急用C語言的雪花代碼 請高手指教謝謝了~~!

# include <dos.h> # include <time.h> # include <conio.h> # include <stdio.h> # include <stdlib.h> # include <graphics.h> struct Snow //雪的結構體 { int x; int y; int size; int speed; }snow[200]; int snownum=0; //初始化雪花數量 void *save1,*save2,*save3,*save4; //儲存各個元素 void Copy() //儲存元素主程序 { setcolor(0); setfillstyle(1,15); fillellipse(200,200,2,2); //大雪花 fillellipse(200,210,2,1); //中雪花 fillellipse(210,200,1,1); //小雪花 save1=malloc(imagesize(196,196,204,204)); //儲存大雪花 save2=malloc(imagesize(196,196,204,204)); //儲存中雪花 save3=malloc(imagesize(196,196,204,204)); //儲存小雪花 save4=malloc(imagesize(196,196,204,204)); //儲存背景色的圖塊 getimage(196,196,204,204,save1); getimage(196,208,204,212,save2); getimage(208,198,212,202,save3); getimage(96,96,104,104,save4); cleardevice(); } void DrawSnow() //下雪主程序 { int i; randomize(); while(!kbhit()) { if(snownum!=120) //初始設置雪花屬性 { snow[snownum].speed=2+random(3); snow[snownum].x=20+random(600); snow[snownum].y=0; snow[snownum].size=random(3); snownum++; } for(i=0;i<snownum;i++) putimage(snow[i].x,snow[i].y,save4,0); for(i=0;i<snownum;i++) { snow[i].y+=snow[i].speed; switch(snow[i].size) //選擇下落的雪花大小 {case 0: putimage(snow[i].x,snow[i].y,save1,0); break; case 1: putimage(snow[i].x,snow[i].y,save2,0); break; case 2: putimage(snow[i].x,snow[i].y,save3,0); break; } if(snow[i].y>500) //雪花落下後重新計算雪花屬性 { snow[i].speed=3+random(3); snow[i].x=20+random(600); snow[i].y=0; snow[i].size=random(3); } } delay(5000); } } void main() {int driver=DETECT,mode; initgraph(&driver,&mode,""); Copy(); DrawSnow(); }

㈢ 編寫一個c語言程序,列印輸出下列雪花圖案。。急求!謝謝!!!

#include<stdio.h>
voidmain()
{
for(inti=1;i<=13;i++)
{
switch(i)
{
case1:
printf("* ");
break;
case2:
printf(" ");
break;
case3:
printf("**** ");
break;
case4:
printf(" ");
break;
case5:
printf("*** ");
break;
case6:
printf(" ");
break;
case7:
printf("****** ");
break;
case8:
printf(" ");
break;
case9:
printf("*** ");
break;
case10:
printf(" ");
break;
case11:
printf("**** ");
break;
case12:
printf(" ");
case13:
printf("* ");
break;
default:
break;

}
}
return;
}

一行一行寫的,VS 2008下編譯調試測試通過,求採納!

㈣ 易語言雪花飄落

找一張圖片,設置成啟動窗口的底圖,然後透明色改成底圖的底色

㈤ 我需要一個用C語言編寫的程序,屏幕往下飄雪 ,帶注釋的,

這個你自己好好的練練吧,給你兩個思路:
如果是做屏保,首先創建一個窗口,全屏最大化的,然後把桌面的圖像復制下來,粘貼到你自己的窗口裡面,再在上面畫雪花。

㈥ 怎樣用C語言設計一個屏幕飄雪加上新年祝福的程序

你就字元「*」代表雪花,雪花要從屏幕上方不停的向下移動,但是雪花的起始位置的橫坐標最好隨機, 再在屏幕上不同時間顯示不同的中文祝福語如「新年快樂」還可以給字體弄上不同顏色。

㈦ 請問下,我用標准c能怎麼寫出那個桌面飄著雪花的程序來不是屏幕保護的那個

TAG標簽 網站地圖 RSS訂閱...真正的windows屏幕保護程序(雪花飄)(win32) 時間:...VC提供了一個支持屏幕保護的開發庫scrnsave.lib,這個...

㈧ 求助:使用Turbo C和VC6.0,模擬雪花自由下落的過程,並在屏幕中顯示「HAPPY NEW YEAR」

我電腦裡面只有這樣的源碼,別人寫的,文檔的話,我看看晚上能不能回去幫你弄一下,現在在公司--#,畢竟opengl我也不熟,只能臨時抱佛腳了。

㈨ 用c語言編寫一個程序,輸出下列雪花圖案!

#include"stdio.h"
#defineROW14
#defineCOL12
intmain()
{
charch[ROW][COL]; //多定義一行一列,0行和0列不用
inti,j;
for(i=0;i<ROW;i++)
for(j=0;j<COL;j++)
ch[i][j]=''; //初始化為空格

ch[1][4]=ch[13][4]='*';

for(i=2;i<=8;i+=2)
{
ch[3][i]='*';
ch[11][i]='*';
}
for(i=3;i<=7;i+=2)
{
ch[5][i]='*';
ch[9][i]='*';
}
for(i=1;i<=11;i+=2)
{
ch[7][i]='*';
}

printf("");
for(i=1;i<COL;i++)
printf("%d",i);
printf(" ");
for(i=1;i<ROW;i++)
{
printf("%-2d",i);
for(j=1;j<COL;j++)
{
printf("%c",ch[i][j]);
}
printf(" ");
}
return0;
}

㈩ 怎麼用C語言寫下雪的動畫效果

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

/*
*清除屏幕的shell命令/控制台命令,還有一些依賴平台的實現
*如果定義了__GNUC__就假定是使用gcc編譯器,為Linux平台
*否則認為是Window平台
*/
#ifdefined(__GNUC__)
//下面是依賴Linux實現
#include<unistd.h>
#definesleep_ms(m)
usleep(m*1000)

//向上移動游標函數Linux
staticvoid__curup(intheight)
{
inti=-1;
while(++i<height)
printf("33[1A");//先回到上一行
}
#else

//創建等待函數1s60幀相當於16.7ms=>1幀,我們取16ms
//咱么的這屏幕推薦1s25幀吧40ms
//這里創建等待函數以毫秒為單位,需要依賴操作系統實現
#include<Windows.h>
#definesleep_ms(m)
Sleep(m)

//向上移動游標
staticvoid__curup(intheight)
{
COORDcr={0,0};
//GetStdHandle(STD_OUTPUT_HANDLE)獲取屏幕對象,設置游標
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cr);
}
#endif/*__GNUC__跨平台的代碼都很醜陋*/

//定義初始屏幕的寬高像素宏
#define_INT_WIDTH(100)
#define_INT_HEIGHT(50)
//屏幕刷新幀的速率
#define_INT_FRATE(40)
//雪花飄落的速率,相對於屏幕刷新幀的倍數
#define_INT_VSNOW(10)

/*
*錯誤處理宏,msg必須是""括起來的字元串常量
*__FILE__:文件全路徑
*__func__:函數名
*__LINE__:行數行
*__VA_ARGS__:可變參數宏,
*##表示直接連接,例如a##b<=>ab
*/
#definecerr(msg,...)
fprintf(stderr,"[%s:%s:%d]"msg" ",__FILE__,__func__,__LINE__,##__VA_ARGS__);

/*
*屏幕結構體,具有寬高
*frate:繪制一幀的周期,單位是毫秒
*width:屏幕的寬,基於窗口的左上角(0,0)
*height:屏幕的高
*pix:用一維模擬二維主要結構如下
*0001001010
*0101010120
*...
*=>0表示沒像素,1表示1個像素,2表示2個像素....
*/
structscreen{
intfrate;//也可以用unsigned結構
intwidth;
intheight;
char*pix;
};

/*
*創建一個屏幕結構指針返回
*
*intfrate:繪制一幀的周期
*intwidth:屏幕寬度
*intheight:屏幕高度
*return:指向屏幕結構的指針
**/
structscreen*screen_create(intfrate,intwidth,intheight);

/*
*銷毀一個屏幕結構指針,並為其置空
*structscreen**:指向屏幕結構指針的指針,二級銷毀一級的
**/
voidscreen_destory(structscreen**pscr);

/**
*屏幕繪制函數,主要生成一個雪花效果
*
*structscreen*:屏幕數據
*return:0表示可以繪制了,1表示圖案不變
*/
intscreen_draw_snow(structscreen*scr);

/**
*屏幕繪制動畫效果,繪制雪花動畫
*
*structscreen*:屏幕結構指針
*/
voidscreen_flash_snow(structscreen*scr);

//主函數,主業務在此運行
intmain(intargc,char*argv[])
{
structscreen*scr=NULL;

//創建一個屏幕對象
scr=screen_create(_INT_FRATE,_INT_WIDTH,_INT_HEIGHT);
if(NULL==scr)
exit(EXIT_FAILURE);

//繪制雪花動畫
screen_flash_snow(scr);

//銷毀這個屏幕對象
screen_destory(&scr);

return0;
}

/*
*創建一個屏幕結構指針返回
*
*intfrate:繪制一幀的周期
*intwidth:屏幕寬度
*intheight:屏幕高度
*return:指向屏幕結構的指針
**/
structscreen*
screen_create(intfrate,intwidth,intheight)
{
structscreen*scr=NULL;

if(frate<0||width<=0||height<=0){
cerr("[WARNING]checkisfrate<0||width<=0||height<=0err!");
returnNULL;
}

//後面是為scr->pix分配的內存width*height
scr=malloc(sizeof(structscreen)+sizeof(char)*width*height);
if(NULL==scr){
cerr("[FATALG]Outofmemory!");
returnNULL;
}
scr->frate=frate;
scr->width=width;
scr->height=height;
//減少malloc次數,malloc消耗很大,內存泄露呀,內存碎片呀
scr->pix=((char*)scr)+sizeof(structscreen);

returnscr;
}

/*
*銷毀一個屏幕結構指針,並為其置空
*structscreen**:指向屏幕結構指針的指針,二級銷毀一級的
**/
void
screen_destory(structscreen**pscr)
{
if(NULL==pscr||NULL==*pscr)
return;
free(*pscr);
//避免野指針
*pscr=NULL;
}

//構建開頭的雪花,下面宏表示每_INT_SHEAD個步長,一個雪花,需要是2的冪
//static可以理解為private,宏,位操作代碼多了確實難讀
#define_INT_SHEAD(1<<2)
staticvoid__snow_head(char*snow,intlen)
{
intr=0;

//數據需要清空
memset(snow,0,len);
for(;;){
//取餘一個技巧2^3-1=7=>111,並就是取余數
intt=rand()&(_INT_SHEAD-1);
if(r+t>=len)
break;
snow[r+t]=1;
r+=_INT_SHEAD;
}
}
#undef_INT_SHEAD

//通過上一個scr->pix[scr->width*(idx-1)]=>scr->pix[scr->width*idx]
//下面的宏規定雪花左右搖擺0向左一個像素,1表示不變,2表示向右一個像素
#define_INT_SWING(3)
staticvoid__snow_next(structscreen*scr,intidx)
{
intwidth=scr->width;
char*psnow=scr->pix+width*(idx-1);
char*snow=psnow+width;
inti,j,t;//i索引,j保存下一個瞬間雪花的位置,t臨時補得,解決雪花重疊問題


//為當前行重置
memset(snow,0,width);
//通過上一次雪花位置計算下一次雪花位置
for(i=0;i<width;++i){
for(t=psnow[i];t>0;--t){//雪花可以重疊
//rand()%_INT_SWING-1表示雪花橫軸的偏移量,相對上一次位置
j=i+rand()%_INT_SWING-1;
j=j<0?width-1:j>=width?0:j;//j如果越界了,左邊越界讓它到右邊,右邊越界到左邊
++snow[j];
}
}
}

/**
*屏幕繪制函數,主要生成一個雪花效果
*
*structscreen*:屏幕數據
*return:0表示可以繪制了,1表示圖案不變
*/
int
screen_draw_snow(structscreen*scr)
{
//靜態變數,默認初始化為0,每次都共用
staticint__speed=0;
intidx;

if(++__speed!=_INT_VSNOW)
return1;

//下面就是到了雪花飄落的時刻了既__speed==_INT_VSNOW
__speed=0;

//這里重新構建雪花界面,先構建頭部,再從尾部開始構建
for(idx=scr->height-1;idx>0;--idx)
__snow_next(scr,idx);

//構建頭部
__snow_head(scr->pix,scr->width);

return0;
}

//buf保存scr中pix數據,構建後為(width+1)*height,後面宏是雪花圖案
#define_CHAR_SNOW『*『
staticvoid__flash_snow_buffer(structscreen*scr,char*buf)
{
inti,j,rt;
intheight=scr->height,width=scr->width;
intfrate=scr->frate;//刷新的幀頻率

//每次都等一下
for(;;sleep_ms(frate)){
//開始繪制屏幕
rt=screen_draw_snow(scr);
if(rt)
continue;

for(i=0;i<height;++i){
char*snow=scr->pix+i*width;
for(j=0;j<width;++j)
buf[rt++]=snow[j]?_CHAR_SNOW:『『;
buf[rt++]=『 『;
}
buf[rt-1]=『『;

//正式繪制到屏幕上
puts(buf);

//清空老屏幕,屏幕游標回到最上面
__curup(height);
}
}
#undef_CHAR_SNOW

/**
*屏幕繪制動畫效果,繪制雪花動畫
*
*structscreen*:屏幕結構指針
*/
void
screen_flash_snow(structscreen*scr)
{
char*buf=NULL;
//初始化隨機數種子,改變雪花軌跡
srand((unsigned)time(NULL));

buf=malloc(sizeof(char)*(scr->width+1)*scr->height);
if(NULL==buf){
cerr("[FATAL]Outofmemory!");
exit(EXIT_FAILURE);
}

__flash_snow_buffer(scr,buf);

//1.這里理論上不會執行到這,沒加控制器.2.對於buf=NULL,這種代碼可以省掉,看編程習慣
free(buf);
buf=NULL;
}