C语言小功能

时间:2022-08-24 21:25:34
//C语言  时钟
#include <stdio.h>
#include <windows.h>

int main()
{

SYSTEMTIME time1;

while(1)
{
GetLocalTime(&time1);

printf("\t\t**********************************************");
printf("\n\n\n\t\t\t当前时间:%d 时 %d 分 %d 秒\n\n\n",time1.wHour,time1.wMinute,time1.wSecond);
printf("\t\t**********************************************");
Sleep(1000);
system("cls");
}
getchar();
return 0;

}



//C语言实现游戏-飞机大战

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define N 35  //宏定义,N是宏参,35是宏值


int str[22][N]={0},width=24,plane=10;//N是变量 width是界面宽度 plane是飞机列变量
int density=30;//敌机的密度
void show(int a[][N])//显示我们能看到的飞机及分隔线
{
system("cls");
int i,j;//遍历二维数组的变量
for(i=0;i<22;i++)//行的遍历
{
a[i][width-1]=4;
for(j=0;j<width;j++)//列的遍历
{
if(a[i][j]==0)printf(" ");  //打印出空白
if(a[i][j]==1)printf("\5");//我机的符号
if(a[i][j]==2)printf(".");//子弹的符号
if(a[i][j]==3)printf("\4");//敌机的符号
if(a[i][j]==4)printf("|");//分隔线
}
printf("\n");
}
Sleep(100);
}
void move_bul(int a[][N])//子弹移动功能
{
int i,j;//循环变量
for(i=0;i<22;i++)//行的遍历
{
for(j=0;j<width;j++)
{
if(i==0&&a[i][j]==2)//当行为0并且是子弹时,清空
a[i][j]=0;
if(a[i][j]==2)
{
//if(a[i-1][j]==3);//碰到了敌机  
a[i][j]=0,a[i-1][j]=2;//子弹在1-19之前要不断的清空和-1
}
}
}
}
void move_plane(int a[][N])//敌机的移动功能
{
int i,j;
for(i=21;i>=0;i--)//防止溢出
{
for(j=0;j<width;j++)
{
if(i==21&&a[i][j]==3)
a[i][j]=0;
if(a[i][j]==3)
a[i][j]=0,a[i+1][j]=3;
}
}
}
int main()
{
int i,j=0;//循环变量
str[21][plane]=1;
str[0][10]=3;
while(1)
{
if(kbhit())//是否按下键盘
switch(getch())
{
case 'a':
case 'A':
if(plane>0)str[21][plane]=0,str[21][--plane]=1;
break;
case 'd':
case 'D':
if(plane<width-2)str[21][plane]=0,str[21][++plane]=1;
break;
case 'w':
case 'W':
str[20][plane]=2;
break;
}
if(++j%density==0)//当j值为30时,条件为真
{
j=0;//j值回到0值
srand(time(NULL));//随机种子,每次执行的结果都不一样
str[0][rand()%width]=3;//0行中的0-23的随机列数
}
move_bul(str);
move_plane(str);
show(str);
}
return 0;
}



//C语言模拟登陆程序
#include <stdio.h>
#include <string.h>//C中字符串处理相关函数的头文件
#include <stdlib.h>
#include <conio.h>

#define LEN20

int main()
{
char password[LEN]; //用于存放密码
char confirmation[LEN];//用于保存确认密码
int tryAgain = 0;//重试的次数

//1.创建管理系统
do
{
printf("----------创建密码---------\n");
printf("请输入你的管理密码:");
scanf("%s", password);
printf("请确认你的管理密码:");
scanf("%s", confirmation);
}while(strcmp(password, confirmation));
/*
strcmp() string compare字符串比较函数,如果第一字符串比第二个字符串大返回1,
如果第一字符串比第二个字符串小返回-1,两个字符串相等返回0
*/
printf("密码设置成功!你的密码为%s\n", password);

printf("按任意键开始登录系统.....\n");
getch();//阻塞函数,可以让程序停留在此,直到我们按下键盘上的某个按键
system("cls");//清屏

//2.登录系统
printf("----------登录系统---------\n");
printf("请输入密码:");
while(scanf("%s", confirmation), strcmp(password, confirmation))
{
tryAgain++;//累加密码重试的次数
//密码重试的次数限制在三次以内
if(tryAgain < 3)
printf("错误%d次!请重新输入:", tryAgain);
else
break;//输入密码次数大于等于三次,退出循环
}

//3.输出结果
system("cls");
//两种情况 :1输入了三次错误的密码 2输入了正确的密码
printf("----------输出结果---------\n");
if(tryAgain >= 3)
{
printf("对不起,3次密码错误,系统退出!\n");
exit(-1); //退出程序
}
else
{
printf("欢迎你,管理员!\n");
}


return 0;
}


//C语言实现打地鼠
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>

HANDLE g_hout; //标准输出句柄
int g_map[4][4];//游戏区域,其中若值为1表示地鼠
int g_score;//分数

//画出我们地鼠活动的区域
void DrawMap()
{
int i, j;
COORD pos = {4, 3}; //地图的左上角的坐标
//分四行打印,每行打印4个地鼠洞
for(i = 0; i < 4; ++i)
{
SetConsoleCursorPosition(g_hout, pos);
for(j = 0; j < 4; ++j)
{
printf("○");
}
++pos.Y;
}
}
//显示右侧的游戏信息
void ShowInfo()
{
COORD pos = {15, 3};
SetConsoleCursorPosition(g_hout, pos);
printf("打地鼠游戏-------------------");
++pos.Y;
SetConsoleCursorPosition(g_hout, pos);
printf("Score: %d", g_score);
}
//生成指定数量的地鼠
void CreateMouse(int count)
{
int n = 0, r, c;
COORD pos;
do
{
r = rand() % 4;//保证获取的值介于0~3之间
c = rand() % 4;
if(!g_map[r][c])
{
g_map[r][c] = 1;//将其设为地鼠
//打印出这只地鼠
//根据数组的下标计算出对应的坐标值
pos.X = 4 + c * 2;
pos.Y = 3 + r;
SetConsoleCursorPosition(g_hout, pos);
printf("☆");//打印出地鼠
++n;//把产生的地鼠的数量加1
}
}while(n < count);
}
//打地鼠,参数为鼠标点击时的坐标
void WhackMouse(COORD pos)
{
int r, c;
DWORD len;
//根据坐标值计算对应的数组下标
if (pos.X % 2)
--pos.X;
r = pos.Y - 3;
c = (pos.X - 4) / 2;
//判断数组的下标值是否合法
if (r < 0 || r >= 4 || c < 0 || c >= 4)
return;
//下标值合法
//EnterCriticalSection(&cs);//进入临界区
//再判断该位置是否是地鼠
if (g_map[r][c])
{
//是地鼠,将其显示为红色
FillConsoleOutputAttribute(g_hout, FOREGROUND_RED | FOREGROUND_INTENSITY, 2, pos, &len);
g_map[r][c] = 0;//将其设为不是地鼠
Sleep(200);//睡眠一会让红色的地鼠停留一会
g_score += 100;//分数增加
ShowInfo();//显示分数
}
//LeaveCriticalSection(&cs);//离开临界区
}

//线程处理函数
LRESULT WINAPI ThreadProc(LPVOID lpParam)
{
int count;//下一次准备出现多少只地鼠
while(1)
{
count = rand() % 8 + 1;//随机得出地鼠的数量(1~8只)
CreateMouse(count);//产生一批地鼠
Sleep(1000);//睡眠1秒
memset(g_map, 0, sizeof(g_map));
DrawMap();//重新画出老鼠洞
Sleep(1000);//睡眠1秒
}
}

int main()
{
COORD pos = {0, 20};
HANDLE hThread;
HANDLE hin;
INPUT_RECORD ir;//输入事件
DWORD inLen; //获取输入事件的记录数
g_hout = GetStdHandle(STD_OUTPUT_HANDLE);
hin = GetStdHandle(STD_INPUT_HANDLE);
srand((unsigned)time(0));//初始化随机种子
DrawMap();
ShowInfo();
//CreateMouse(8);
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);
CloseHandle(hThread);//

while(1)
{
ReadConsoleInput(hin, &ir, 1, &inLen);//获取输入事件记录
//如果是鼠标事件并且是鼠标左键按下的状态
if(ir.EventType == MOUSE_EVENT &&
ir.Event.MouseEvent.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
{
WhackMouse(ir.Event.MouseEvent.dwMousePosition);
}
else if(ir.EventType == KEY_EVENT)//如果是键盘事件
{
if(ir.Event.KeyEvent.wVirtualKeyCode == 'q' ||
ir.Event.KeyEvent.wVirtualKeyCode == 'Q')
break;
}






}

//SetConsoleCursorPosition(g_hout, pos);
//system("pause");

return 0;
}



//C语言实现 推相子   wasd前后左右   #墙   *箱子   !箱子目标位置   $箱子已到目标位置 
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int i,j;
void draw_map(int map[10][12]); //声明画图函数
int main()
{
char input;
int count=0; //定义记分变量
/*下面定义一个二维数组,其中的元素是不同图像的ID号,在后面的函数中将讲解不同数字分别代表的图像元素*/
int map[10][12] = {
{2,2,2,2,2,1,1,1,1,1,2,2},
{1,1,1,1,2,1,0,0,0,1,1,2},
{1,0,0,1,1,1,0,1,0,0,1,2},
{1,0,4,3,3,3,3,3,1,0,1,1},
{1,0,0,1,1,3,3,3,4,0,0,1},
{1,0,0,0,0,4,1,1,4,1,0,1},
{1,0,4,1,4,0,0,0,4,0,0,1},
{1,1,0,6,0,1,1,1,4,1,0,1},
{2,1,1,1,1,1,2,1,0,0,0,1},
{2,2,2,2,2,2,2,1,1,1,1,1}
};
while (1) //死循环,等待用户命令
{
system("CLS");
for (i=0;i<12;i++)
{
printf("%d",i);
}
printf("\n");
/*for (i=1;i<10;i++)
{
printf("%d\n",i);
}*/
printf("\n");
draw_map(map);
printf("当前得分:%d\n",count);
//找初始位置
for (i=0;i<10;i++)
{
for (j=0;j<12;j++)
{
if (map[i][j]==6||map[i][j]==9)
break;
}
if (map[i][j]==6||map[i][j]==9)
break;
}
printf("您的当前坐标(%d,%d)",i,j);
input = getch(); //用getch()函数无需回车确认地获取用户输入,用于控制行走方向。
switch (input)
{
case 'w':
//如果人前面是空地。 //0代表空地 6代表人 //3代表目的地
if(map[i-1][j]==0)
{
map[i-1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
else
map[i][j]=0; //否则原地ID修改为空地ID 。
}
//如果人前面是目的地。
else if((map[i-1][j]==3)||(map[i-1][j]==9))
{
map[i-1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9) //如果原地也是目的地(ID为)。
map[i][j]=3; //人走后把原地ID修改回目的地ID。
else
map[i][j]=0; //否则原地ID修改为为空地ID
}
//如果人前面是箱子。//4代表箱子 //7箱子进入目的地
else if(map[i-1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i-2][j]==0)
{
map[i-2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
//下面是对箱子原地进行判断
if(map[i-1][j]==7) //如果箱子原地为目的地。
map[i-1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i-1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
//下面是对人原地进行判断
if(map[i][j]==9) //如果之前是目的地。
map[i][j]=3; //人走了之后修改回目的地ID。
else
map[i][j]=0; //否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i-2][j]==3)
{
map[i-2][j]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i-1][j]==7)
map[i-1][j]=9;
else
map[i-1][j]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i-1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i-2][j]==0)
{
count--;
map[i-2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i-1][j]=9; //人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i-2][j]==3)
{
map[i-2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。
map[i-1][j]=9; //人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case 's':
//如果人前面是空地。
if(map[i+1][j]==0)
{
map[i+1][j]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
else
map[i][j]=0; //否则原地ID修改为空地ID 。
}
//如果人前面是目的地。
else if(map[i+1][j]==3)
{
map[i+1][j]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9) //如果原地也是目的地(ID为)。
map[i][j]=3; //人走后把原地ID修改回目的地ID。
else
map[i][j]=0; //否则原地ID修改为为空地ID
}
//如果人前面是箱子。
else if(map[i+1][j]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i+2][j]==0)
{
map[i+2][j]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
//下面是对箱子原地进行判断
if(map[i+1][j]==7) //如果箱子原地为目的地。
map[i+1][j]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i+1][j]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
//下面是对人原地进行判断
if(map[i][j]==9) //如果之前是目的地。
map[i][j]=3; //人走了之后修改回目的地ID。
else
map[i][j]=0; //否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i+2][j]==3)
{
map[i-2][j]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
count++;
//下面是对箱子原先位置的判断,同上。
if(map[i+1][j]==7)
map[i+1][j]=9;
else
map[i+1][j]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i+1][j]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i+2][j]==0)
{
count--;
map[i+2][j]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i+1][j]=9; //人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i+2][j]==3)
{
map[i+2][j]=7; //把箱子推入了另一目的地,自然,ID也应是。
map[i+1][j]=9; //人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case 'a':
//如果人前面是空地。
if(map[i][j-1]==0)
{
map[i][j-1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
else
map[i][j]=0; //否则原地ID修改为空地ID 。
}
//如果人前面是目的地。
else if(map[i][j-1]==3)
{
map[i][j-1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9) //如果原地也是目的地(ID为)。
map[i][j]=3; //人走后把原地ID修改回目的地ID。
else
map[i][j]=0; //否则原地ID修改为为空地ID
}
//如果人前面是箱子。
else if(map[i][j-1]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i][j-2]==0)
{
map[i][j-2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
//下面是对箱子原地进行判断
if(map[i][j-1]==7) //如果箱子原地为目的地。
map[i][j-1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i][j-1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
//下面是对人原地进行判断
if(map[i][j]==9) //如果之前是目的地。
map[i][j]=3; //人走了之后修改回目的地ID。
else
map[i][j]=0; //否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i][j-2]==3)
{
count++;
map[i][j-2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
//下面是对箱子原先位置的判断,同上。
if(map[i][j-1]==7)
map[i][j-1]=9;
else
map[i][j-1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i][j-1]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j-2]==0)
{
count--;
map[i][j-2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i][j-1]=9; //人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j-2]==3)
{
map[i][j-2]=7; //把箱子推入了另一目的地,自然,ID也应是。
map[i][j-1]=9; //人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
case 'd':
//如果人前面是空地。
if(map[i][j+1]==0)
{
map[i][j+1]=6+0; //人往前走一步,ID为人的ID()加上空地的ID()。
if(map[i][j]==9) //如果当前人站的位置为目的地,则ID为(即人的ID()加上目的地ID())。
map[i][j]=3; //将人往前走一步后原地的ID修改为空地ID()。
else
map[i][j]=0; //否则原地ID修改为空地ID 。
}
//如果人前面是目的地。
else if(map[i][j+1]==3)
{
map[i][j+1]=6+3; //人往前走一步,ID为人ID+目的地ID=9。
if(map[i][j]==9) //如果原地也是目的地(ID为)。
map[i][j]=3; //人走后把原地ID修改回目的地ID。
else
map[i][j]=0; //否则原地ID修改为为空地ID
}
//如果人前面是箱子。
else if(map[i][j+1]==4)
{
//如果人前面是箱子,而箱子前面是空地。
if (map[i][j+2]==0)
{
map[i][j+2]=4; //人推箱子往前走一步,把空地ID修改为箱子ID()
//下面是对箱子原地进行判断
if(map[i][j+1]==7) //如果箱子原地为目的地。
map[i][j+1]=9; //人站在箱子的原地(目的地)时该地ID应该为人的ID+目的地ID=9。
else
map[i][j+1]=6; //否则,人站在了原来的空地上,ID应该为+0=6。
//下面是对人原地进行判断
if(map[i][j]==9) //如果之前是目的地。
map[i][j]=3; //人走了之后修改回目的地ID。
else
map[i][j]=0; //否则就是空地。
}
//如果人的前面是箱子,而箱子前面是目的地。
else if (map[i][j+2]==3)
{
count++;
map[i][j+2]=7; //ID为(目的地ID()+箱子ID()=7),表示已经把箱子推入了目的地。
//下面是对箱子原先位置的判断,同上。
if(map[i][j+1]==7)
map[i][j+1]=9;
else
map[i][j+1]=6;
//下面是对人原先位置进行判断,同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
//如果人前面是已经进入某目的地的箱子(ID=7)。
else if(map[i][j+1]==7)
{
//如果人前面是已经进入某目的地的箱子,而箱子前面是空地。
if(map[i][j+2]==0)
{
count--;
map[i][j+2]=4; //把箱子重新推到空地上,ID=箱子ID+空地ID=4。
map[i][j+1]=9; //人自然而然的就站在了原先的目的地上了。
//下面是对人原先地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
//如果人前面是已经进入某目的地的箱子,而箱子前面是另一目的地。
if(map[i][j+2]==3)
{
map[i][j+2]=7; //把箱子推入了另一目的地,自然,ID也应是。
map[i][j+1]=9; //人站在了目的地上。
//下面是对人原先站立地进行判断,方法同上。
if(map[i][j]==9)
map[i][j]=3;
else
map[i][j]=0;
}
}
break;
}
if(count==8) //如果分数达到分
{
system("CLS"); //清屏
draw_map(map);
break; //退出死循环
}
}
printf("\n恭喜你,过关了!!\n"); //过关提示
return 0;
}
void draw_map(int map[10][12])
{

for(i=0;i<10;i++)
{
for(j=0;j<12;j++)
{
switch(map[i][j])
{
case 0:
printf(" "); //数字代表道路
break;
case 1:
printf("#"); //数字代表墙壁
break;
case 2:
printf(" "); //数字是游戏边框的空白部分
break;
case 3:
printf("!"); //数字代表目的地
break;
case 4:
printf("*"); //数字代表箱子
break;
case 7:
printf("$"); //数字代表箱子进入目的地
break;
case 6:
printf("@"); //数字代表人
break;
case 9:
printf("@"); //数字代表人进入目的地
break;
}
}
printf("\n"); //分行输出
}
}


/*******************************
圣诞树
*******************************/
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
#include<Windows.h>
#define X 25 //画面长度
int background[20][2 * X] = { 0 };
int SNOW = 30; //雪花密度
/*******************************
画树
*******************************/
void tree()
{
int i, j, x, y;
for (i = 0; i < 3; i++)
{
y = i;
for (j = 0; j < 2 * i + 1; j++)
{
background[y][(X - i) + j] = 1;
}
}
for (i = 0; i < 5; i++)
{
y++;
for (j = 0; j < 2 * (i + 1) + 1; j++)
{
background[y][(X - (i + 1)) + j] = 1;
}
}
for (i = 0; i < 7; i++)
{
y++;
for (j = 0; j < 2 * (i + 3) + 1; j++)
{
background[y][(X - (i + 3)) + j] = 1;
}
}
for (i = 0; i < 5; i++)
{
y++;
for (j = 0; j < 3; j++)
{
background[y][X + (2 * j - 2)] = 2;
}
}
}
/*******************************
画雪花
*******************************/
void snow()
{
int i;
srand(time(NULL));
for (i = 0; i < SNOW; i++)
{
int x, y;
x = rand() % (2 * X);
y = rand() % 20;
if ((background[y][x] == 0))
{
background[y][x] = 3;
}
}
}
/*******************************
打印
*******************************/
void display()
{
int x, y;
for (y = 0; y < 20; y++)
{
for (x = 0; x < 2 * X; x++)
{
if (background[y][x] == 0)
{
printf(" ");
}
if (background[y][x] == 1)
{
printf("0");
}
if (background[y][x] == 2)
{
printf("|");
}
if (background[y][x] == 3)
{
printf("*");
}
}
printf("\n");
}
}
/*******************************
清除雪花
*******************************/
void clear_snow()
{
int i, j;
for (i = 0; i < 20; i++)
{
for (j = 0; j < 2 * X; j++)
{
if (background[i][j] == 3)
{
background[i][j] = 0;
}
}
}
}
int main()
{
tree();
while (1)
{
snow();
display();
Sleep(1);
system("cls");
clear_snow();
}
return 0;
}

//C语言  实现爱心
#include <stdio.h>
#include <math.h>
static float x;
static float z;
static float y;
float f(float x, float y, float z) {
float a = x * x + 9.0f / 4.0f * y * y + z * z - 1;
return a * a * a - x * x * z * z * z - 9.0f / 80.0f * y * y * z * z * z;
}
float h(float x, float z) {
for (float y = 1.0f; y >= 0.0f; y -= 0.001f)
if (f(x, y, z) <= 0.0f)
return y;
return 0.0f;
}
int main() {
for (float z = 1.5f; z > -1.5f; z -= 0.05f) {
for (float x = -1.5f; x < 1.5f; x += 0.025f) {
float v = f(x, 0.0f, z);
if (v <= 0.0f) {
float y0 = h(x, z);
float ny = 0.01f;
float nx = h(x + ny, z) - y0;
float nz = h(x, z + ny) - y0;
float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);
float d = (nx + ny - nz) * nd * 0.5f + 0.5f;
putchar(".:-=+*#%@"[(int)(d * 5.0f)]);
}
else
putchar(' ');
}
putchar('\n');
}
}




// LOVE 字符
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
#include <time.h>
//3维数组,存放LOVE字符
char LETTER[][5][5] = {
{
0, 1, 0, 0, 0,
0, 1, 0, 0, 0,
0, 1, 0, 0, 0,
0, 1, 0, 0, 0,
0, 1, 1, 1, 0
},
{
0, 0, 1, 0, 0,
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 0, 1, 0, 0
},
{
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 1, 0, 1, 0,
0, 0, 1, 0, 0
},
{
0, 1, 1, 1, 0,
0, 1, 0, 0, 0,
0, 1, 1, 1, 0,
0, 1, 0, 0, 0,
0, 1, 1, 1, 0
}
};
int status = 1;//控制线程函数的运行状态
int speed = 500;//字符变换的速度
HANDLE hout;//控制台标准输出句柄
CONSOLE_SCREEN_BUFFER_INFO csbi;//控制台屏幕缓冲区信息结构体
char *symbol[] = {"☆", "★", "△", "※", "▲", "■"};//□ ◆用这些特殊字符组成LOVE中的各个字母
WORD attr[] = {
FOREGROUND_RED | FOREGROUND_INTENSITY, //红色
FOREGROUND_GREEN | FOREGROUND_INTENSITY,//绿色
FOREGROUND_BLUE | FOREGROUND_INTENSITY,//蓝色
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY//白色
};
//在屏幕上画出LOVE
void DrawLove()
{
int i, j, c;
COORD pos;//光标的坐标
DWORD dwLen;
for(c = 0; c < sizeof LETTER / sizeof LETTER[0]; ++c)
{
for(i = 0; i < 5; ++i)
{
pos.X = c * 5 * 2;
pos.Y = i;
SetConsoleCursorPosition(hout, pos);
for(j = 0; j < 5; ++j)
{
if(LETTER[c][i][j])
{
//获取当前屏幕缓冲区信息
GetConsoleScreenBufferInfo(hout, &csbi);
printf("%s", symbol[rand() %
(sizeof symbol / sizeof symbol[0])]);
//用指定的颜色填充字符
FillConsoleOutputAttribute(hout, attr[rand() %
(sizeof attr / sizeof attr[0])], 2,
csbi.dwCursorPosition, &dwLen);
}
else
{
printf(" ");//打印两个空格
}
}
}
}
}
//线程的处理函数
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
while(1)
{
if(status)
{
DrawLove();
Sleep(speed);
}
}
return 0;
}
int main()
{
HANDLE hThread;
int inChar;
hout = GetStdHandle(STD_OUTPUT_HANDLE);
srand((unsigned)time(0));
hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);
CloseHandle(hThread);
while(1)
{
inChar = getch();
if('q' == inChar)
{
break;
}
else if('w' == inChar && speed > 50)
speed -= 50;
else if('s' == inChar && speed < 500)
speed += 50;
else if('p' == inChar)
status = 0;
else if('c' == inChar)
status = 1;
}
return 0;
}

//C语言  爱心 
#include <stdio.h>
#include <math.h>

int main()
{

float x,y,a;

for(y = 1.5f;y> -1.5f;y -= 0.1f){
for(x = -1.5f;x<1.5f;x += 0.05f){
a = x*x + y*y - 1;
printf(a*a*a - x*x*y*y*y <=0.0f ? "*":" ");
}
printf("\n");
}
return 0;

}


//万年历
#include <stdio.h>
#include <windows.h>
long int f(int year, int month)
{
if (month<3) return year - 1;
else return year;
}/*f(年,月)=年-1,如月<3;否则,f(年,月)=年*/
long int g(int month)
{
if (month<3) return month + 13;
else return month + 1;
}/*g(月)=月+13,如月<3;否则,g(月)=月+1*/
long int n(int year, int month, int day)
{
return 1461L * f(year, month) / 4 + 153L * g(month) / 5 + day;
}/*N=1461*f(年、月)/4+153*g(月)/5+日*/
int w(int year, int month, int day)
{
return(int)((n(year, month, day) % 7 - 621049L % 7 + 7) % 7);
}/*w=(N-621049)%7(0<=w<7)*/
int date[12][6][7];
int day_tbl[][12] = { { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
int main()
{
int sw, leap, i, j, k, wd, day;
int year;/*年*/
char title[] = "SUN MON TUE WED THU FRI SAT";
system("cls");
printf("Please input the year whose calendar you want to know: ");/*输入年*/
scanf("%d%*c", &year);/*输入年份值和掠过值后的回车*/
sw = w(year, 1, 1);
leap = year % 4 == 0 && year % 100 || year % 400 == 0;/*判闰年*/
for (i = 0; i<12; i++)
for (j = 0; j<6; j++)
for (k = 0; k<7; k++)
date[i][j][k] = 0;/*日期表置0*/
for (i = 0; i<12; i++)/*一年十二个月*/
for (wd = 0, day = 1; day <= day_tbl[leap][i]; day++)
{/*将第i+1月的日期填入日期表*/
date[i][wd][sw] = day;
sw = ++sw % 7;/*每星期七天,以0至6计数*/
if (sw == 0) wd++;/*日期表每七天一行,星期天开始新的一行*/
}
printf("\n|==================The Calendar of Year %d =====================|\n|", year);
for (i = 0; i<6; i++)
{/*先测算第i+1月和第i+7月的最大星期数*/
for (wd = 0, k = 0; k<7; k++)/*日期表的第六行有日期,则wd!=0*/
wd += date[i][5][k] + date[i + 6][5][k];
wd = wd ? 6 : 5;
printf("%2d %s %2d %s |\n|", i + 1, title, i + 7, title);
for (j = 0; j<wd; j++)
{
printf(" ");/*输出四个空白符*/
/*左栏为第i+1月,右栏为第i+7月*/
for (k = 0; k<7; k++)
if (date[i][j][k])
printf("%4d", date[i][j][k]);
else printf(" ");
printf(" ");/*输出十个空白符*/
for (k = 0; k<7; k++)
if (date[i + 6][j][k])
printf("%4d", date[i + 6][j][k]);
else printf(" ");
printf(" |\n|");
}
/*scanf("%*c");/*键入回车输出下一个月的日历*/
}
puts("=================================================================|");
getchar();
return 0;
}