c语言表白程序代码

  双十一要到了,好激动啊!!!

    

  是时候准备出手了!

    

      花了一天的时间写的表白代码。

    

  表示自己弱弱的.....

    

        看了网上好多都是js写的,感觉碉堡了!js用的不熟,前端不好,java,Python写起来一定很顺手吧,但是还是决定用c写一下,简单的界面,大神路过不喜勿喷。下面和大家一起分享一下!

        

代码如下:

  顺便所以下:如果在windows上运行该代码,需要pthread库,我用的Dev c++写的,自己装上了这个库!

        运行程序下载:http://files.cnblogs.com/files/hujunzheng/love.zip

该程序主要包含windows编程,以及简单的线程,数学逻辑处理(弱弱的说一句,数学不好,动态心形图案借鉴的哦)。 简单介绍一下一些函数的功能。
1.GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台输出句柄
2.SetConsoleScreenBufferSize(o, size); // 重新设置缓冲区大小
3.SMALL_RECT rc = {0, 0, 100-1, 40-1}; // 重置窗口位置和大小
SetConsoleWindowInfo(o, true, &rc);
4.SetConsoleTitle("LOVE");//设置控制台标题
5.system("color ec"); // 设置为红色,显得浪漫温馨点
6.SetConsoleTextAttribute(o, hjzgg_color[color_index]);//设置下个即将输出字体的前景色和背景色
7.SetConsoleCursorPosition(o, coord);//设置控制台光标的位置
8.WriteConsole(o, one_word, 2, NULL, 0);//在控制台光标的位置处连续输出一定长度的字符串
9.pthread_mutex_lock(&mutex);//给线程上锁,利用互斥变量
10.pthread_mutex_unlock(&mutex);给线程解锁
11.pthread_create(&tid[1], NULL, first_init_down, NULL); //创建线程
12.pthread_join(tid[0], NULL);//用来等待一个线程的结束
13.pthread_cond_timedwait(&cond, &mutex, &outtime);//线程进入等待,一定时间后自行苏醒

 

#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <tchar.h>
#include <pthread.h> 
#include <time.h>
#include <string.h>
#include <sys/time.h>pthread_mutex_t mutex;//互斥信号量
pthread_cond_t cond;//条件变量 
HANDLE o = GetStdHandle(STD_OUTPUT_HANDLE);
_TCHAR buffer[25][80] = { _T(' ') };
_TCHAR ramp[] = _T(".:-=+*#%@");WORD hjzgg_color[7]={BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|FOREGROUND_RED | BACKGROUND_RED|BACKGROUND_GREEN, //red on yellow
    BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|FOREGROUND_GREEN | BACKGROUND_RED|BACKGROUND_GREEN,BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|FOREGROUND_BLUE | BACKGROUND_RED|BACKGROUND_GREEN,BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE | BACKGROUND_RED|BACKGROUND_GREEN,BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN | BACKGROUND_RED|BACKGROUND_GREEN,BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE | BACKGROUND_RED|BACKGROUND_GREEN,BACKGROUND_INTENSITY|FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE | BACKGROUND_RED|BACKGROUND_GREEN};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;
}char flower1[11][22]={//一行20个字符 
"         {@}        ",
"      {@} * {@}     ",
"   {@} * {@} * {@}  ",
"{@}* {@} * {@} * {@}",
" \\ {@} * {@} * {@} /",
"    \\ \\ \\ L / / /   ",
"     \\\\ \\ O / //    ",
"       \\\\ V //      ",
"        \\\\E//       ",
"         >=<        ",
"        //*\\\\       "
};char flower2[9][28]={//一行27个字符 
".....@---------------@.....",
"-- @ @ @ --------- @ @ @ --",
".@ @\\@/@ @-------@ @\\@/@ @.",
".\\@|@|@|@/-....--\\@|@|@|@/.",
". \\\\\\|/// --..--- \\\\\\|/// -",
" - \\\\|// --..----- \\\\|//.--",
" -- \\|/--..---.---- \\|/---.",
" -- =&= ---..------ =&= ---",
" -- /|\\ --------.---/|\\ -.-"
} ;char piercing_arrow[][34]={//一行33个字符 
"      ☆☆ ☆☆  ☆☆ ☆☆       ",
"     ★★      ★       ★★     ",
"    ☆☆   快乐每一天    ☆☆    ",
"     ★★               ★★     ",
">>>---------I LOVE YOU --------->",
"        ★★         ★★        ",
"          ☆☆     ☆☆          ",
"            ★★  ★★           ",
"               ☆☆              "
};char love_word[][6][60]={//一共5个部分, 三行情书 
    { "你  如  水  的  眸  光  笼  着  江  南  的  烟  雨","映  入  我  那  一  寸  一  寸  消  融  的  心","从  那  一  刻  我  不  在  属  于  自  己"},{"我  默  默  收  集  你  的  所  有","不  知  还  要  多  久","却  不  曾  厌  倦"},{"当  初 ,初  见  只  道  是  寻  常","寻  觅 ,何  枝  可  化  深  千  亿","犹  道 ,碧  桃  影  里  碧  三  声" } ,{"在  这  个  年  纪  远  远  地  看  着  你","日  光  美  好  的  一  泻  千  里","温  暖  着  一  个  卑  微  而  简  单  的  心"} ,{"你  的  一  纸  信  笺","压  在  书  底","压  过  了  青  春  的  夏  季","从  爱  你  的  花  季","一  直  等  到","爱  你  的  暮  年"} 
} ;void init_screen(){COORD size = {100, 40};SetConsoleScreenBufferSize(o, size); // 重新设置缓冲区大小SMALL_RECT rc = {0, 0, 100-1, 40-1}; // 重置窗口位置和大小SetConsoleWindowInfo(o, true, &rc);SetConsoleTitle("LOVE");system("color ec"); // 设置为红色,显得浪漫温馨点
}void* show_love_word(void* arg){srand((unsigned)time(NULL));//随机每束花是否显示 while(true) {int word_index = rand()%5;int col = 70;int row_index = 3;if(word_index == 4)row_index = 6;//显示word int color_index = rand()%4; for(int i=0; i<row_index; ++i){int row = 1;for(int j=0; love_word[word_index][i][j]; j+=2){char one_word[2];//得到一个汉字 sprintf(one_word, "%c%c", love_word[word_index][i][j], love_word[word_index][i][j+1]);COORD coord = {col, row};pthread_mutex_lock(&mutex);SetConsoleTextAttribute(o, hjzgg_color[color_index]);SetConsoleCursorPosition(o, coord);WriteConsole(o, one_word, 2, NULL, 0);coord.Y += 1;if(love_word[word_index][i][j+2]){SetConsoleCursorPosition(o, coord);WriteConsole(o, "__", 2, NULL, 0);}SetConsoleTextAttribute(o, hjzgg_color[0]);pthread_mutex_unlock(&mutex);++row;Sleep(100);}col+=4;}Sleep(2000);//擦除Wordcol-=4;for(int i=row_index-1; i>=0; --i) {char hjzgg_word[60];memcpy(hjzgg_word, love_word[word_index][i], sizeof(love_word[word_index][i]));int len_hjzgg_word = strlen(hjzgg_word);int len_word = len_hjzgg_word;bool is_first = true;while(len_word >= 0) {int row = 1;for(int j=0; j<len_hjzgg_word; j+=2){char one_word[2];//得到一个汉字 sprintf(one_word, "%c%c", hjzgg_word[j], hjzgg_word[j+1]);COORD coord = {col, row};pthread_mutex_lock(&mutex);SetConsoleTextAttribute(o, hjzgg_color[color_index]);SetConsoleCursorPosition(o, coord);WriteConsole(o, one_word, 2, NULL, 0);coord.Y += 1;if(j+2 == len_word){SetConsoleCursorPosition(o, coord);WriteConsole(o, "__", 2, NULL, 0);++row;}SetConsoleTextAttribute(o, hjzgg_color[0]);pthread_mutex_unlock(&mutex);++row;}if(is_first){is_first = false;hjzgg_word[len_hjzgg_word++] = ' ';hjzgg_word[len_hjzgg_word++] = ' ';} else {len_hjzgg_word-=2;}hjzgg_word[--len_word] = ' ';hjzgg_word[--len_word] = ' ';Sleep(20);}col-=4;}Sleep(1000);}
}void* first_init_top(void* arg){char tmp[80];for(int ld=0; ld < 12; ++ld){COORD coord_top = { 0, ld};memset(tmp, ' ', sizeof(tmp));int cc = 0;while(cc < 60){while(buffer[ld][cc]==' ') ++cc;tmp[cc] = buffer[ld][cc];++cc;pthread_mutex_lock(&mutex);SetConsoleCursorPosition(o, coord_top);WriteConsole(o, tmp, 60, NULL, 0);pthread_mutex_unlock(&mutex);Sleep(15);}}
}void* screen_down_flower(void* arg){//从第26行开始打印 srand((unsigned)time(NULL));//随机每束花是否显示 int flower_row[3] = {11, 9, 11};int flower_col[3] = {20, 27, 20};int flower_begin_col[3] = {5, 33, 70};int flower_begin_row[3] = {26, 28, 26};struct timeval now;struct timespec outtime;pthread_mutex_lock(&mutex);while(true){int k = 0;while(k < 3){char flower[50][50] = {' '};int color_index = rand()%7;SetConsoleTextAttribute(o, hjzgg_color[color_index]);if(k==0 || k==2){for(int i=0; i<flower_row[k]; ++i)for(int j=0; j<flower_col[k]; ++j)flower[i][j] = flower1[i][j];} else {for(int i=0; i<flower_row[k]; ++i)for(int j=0; j<flower_col[k]; ++j)flower[i][j] = flower2[i][j];}for(int i=flower_begin_row[k], j=0; j<flower_row[k]; ++j, ++i){COORD coord = {flower_begin_col[k], i};SetConsoleCursorPosition(o, coord);WriteConsole(o, flower[j], flower_col[k], NULL, 0);}++k;SetConsoleTextAttribute(o, hjzgg_color[0]);//重新设置为原来的原色 gettimeofday(&now, NULL);outtime.tv_sec = now.tv_sec;outtime.tv_nsec = now.tv_usec * 100000;pthread_cond_timedwait(&cond, &mutex, &outtime);} }pthread_mutex_unlock(&mutex);
} void* first_init_down(void* arg){char tmp[80];for(int rd=24; 12 <= rd; --rd){COORD coord_down = { 0, rd };SetConsoleCursorPosition(o, coord_down);memset(tmp, ' ', sizeof(tmp));int cc = 60;while(cc >= 0){while(buffer[rd][cc]==' ') --cc;tmp[cc] = buffer[rd][cc];--cc;pthread_mutex_lock(&mutex);SetConsoleCursorPosition(o, coord_down);WriteConsole(o, tmp, 60, NULL, 0);pthread_mutex_unlock(&mutex);Sleep(15);}}
}
//一箭穿心图案
void show_piercing_arrow(){for(int i=0; i<9; ++i) {pthread_mutex_lock(&mutex);COORD coord_down = { 13, i+7 };SetConsoleCursorPosition(o, coord_down);WriteConsole(o, piercing_arrow[i], 33, NULL, 0);pthread_mutex_unlock(&mutex);}
}void first_init(){show_piercing_arrow();pthread_t tid[4];
//    screen_down_flowerpthread_create(&tid[2], NULL, screen_down_flower, NULL); 
//  show_love_wordpthread_create(&tid[3], NULL, show_love_word, NULL); 
//    心型 init_first pthread_mutex_init(&mutex, NULL);pthread_cond_init(&cond, NULL);pthread_create(&tid[0], NULL, first_init_top, NULL); pthread_create(&tid[1], NULL, first_init_down, NULL); pthread_join(tid[0], NULL);pthread_join(tid[1], NULL);
}int main() {init_screen();bool first = true;for (float t = 0.0f;; t += 0.1f) {int sy = 0;float s = sinf(t);float a = s * s * s * s * 0.2f;for (float z = 1.3f; z > -1.2f; z -= 0.1f) {_TCHAR* p = &buffer[sy++][0];float tz = z * (1.2f - a);for (float x = -1.5f; x < 1.5f; x += 0.05f) {float tx = x * (1.2f + a);float v = f(tx, 0.0f, tz);if (v <= 0.0f) {float y0 = h(tx, tz);float ny = 0.01f;float nx = h(tx + ny, tz) - y0;float nz = h(tx, tz + ny) - y0;float nd = 1.0f / sqrtf(nx * nx + ny * ny + nz * nz);float d = (nx + ny - nz) * nd * 0.5f + 0.5f;*p++ = ramp[(int)(d * 5.0f)];}else*p++ = ' ';}}if(first){first = false;first_init();}else {pthread_mutex_lock(&mutex);for (sy = 0; sy < 25; sy++) {COORD coord = { 0, sy };SetConsoleCursorPosition(o, coord);WriteConsole(o, buffer[sy], 60, NULL, 0);}pthread_mutex_unlock(&mutex);}Sleep(33);}return 0;
}

 

转载于:https://www.cnblogs.com/hujunzheng/p/4922219.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tiny4412移植tslib库

1、将tslib-1.4.tar.gz拷贝到虚拟机某个路径进行解压 2、进入解压路径tslib 3、执行#./autogen.sh 如果提示&#xff1a;./autogen.sh: 4: ./autogen.sh: autoreconf: not found 原因&#xff1a;没有安装automake工具, 解决办法:需要安装此工具&#xff1a; apt-get instal…

移植QT到tiny4412开发板

目录&#xff08;一&#xff09; 环境准备&#xff08;二&#xff09; Qt源代码下载&#xff08;三&#xff09; 移植tslib库&#xff08;四&#xff09;操作流程1.解压qt源码包2.配置编译环境3.生成Makefile4.编译安装5.安装一些库用来支持 qt6. 添加以下内容到开发板目录下的…

eclipse导入web项目之后项目中出现小红叉解决办法

项目中有小红叉我遇到的最常见的情况&#xff1a; 1、项目代码本身有问题。&#xff08;这个就不说了&#xff0c;解决错误就OK&#xff09; 2、项目中的jar包丢失。&#xff08;有时候eclipse打开时会出现jar包丢失的情况&#xff0c;关闭eclipse重新打开或者重新引入jar包就O…

windows下实现Git在局域网使用

1.首先在主机A上创建一个文件夹用于存放你要公开的版本库。然后进入这个文件夹&#xff0c;右键->Git create repository here&#xff0c;弹出的窗口中勾选Make it Bare&#xff01;之后将这个文件夹完全共享&#xff08;共享都会吧&#xff1f;注意权限要让使用这个文件夹…

lintcode 滑动窗口的最大值(双端队列)

题目链接&#xff1a;http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组&#xff0c;和一个大小为 k 的滑动窗口, 从左到右在数组中滑动这个窗口&#xff0c;找到数组中每个窗口内的最大值。 样例 给出数组 [1…

适用于Linux的Windows子系统WSL

以前使用的都是在虚拟机里安装linux&#xff0c;最近才发现在win10提供了WSL(Windows Subsystem for Linux) &#xff0c;简单来说就是可以在win10里面直接使用Linux。 &#xff08;一&#xff09;首先打开Microsoft Store , 搜索 Linux &#xff08;二&#xff09;选择自己需…

jsp通过易宝方式实现在线支付

项目下载地址: https://github.com/hjzgg/OnlinePayment 参考&#xff1a;http://blog.csdn.net/jadyer/article/details/7380259?utm_sourcetuicool&utm_mediumreferral 效果图1&#xff1a;请求界面 效果图2&#xff1a;地支付请求和易宝之间建立连接之后跳转到相应的银…

nand flash和nor flash的这几点区别你知道吗?

这篇文章讲解nand flash和nor flash的特点和区别&#xff0c;不涉及存储原理的讲解 &#xff08;一&#xff09;Flash简介 FLASH是一种存储芯片&#xff0c;全名叫Flash EEPROM Memory&#xff0c;通地过程序可以修改数据&#xff0c;即平时所说的“闪存”。Flash又分为NAND f…

windows8建立局域网的方法

win8建立局域网的方法&#xff1a;1、首先笔记本有无线网卡且支持 虚拟WIFI ;2、按winX键&#xff0c;选择"命令提示符(管理员)A"; 3、输入"netsh wlan set hostednetwork modeallow ssid网络名称 key我的密码" ; 4、接着输入"netsh wlan start hoste…

内核移植出现:Kernel panic - not syncing: No init found.

今天在升级SDK的时候&#xff0c;升级到kernel时遇到如题所述的问题&#xff0c;花了天时间调通&#xff0c;在这里记录一下。 报错提示&#xff1a;(当时没有记录&#xff0c;错误的提示大概如下) Kernel panic - not syncing: No init found. Try passing init option to k…

32位和64位机器上C语言数据类型的大小

作为嵌入式开发的人员&#xff0c;是必须了解C语言在不同位数机器上占用的字节大小的&#xff0c;下面做下对比 不同位数平台对比&#xff1a; \16位平台32位平台64位平台char1个字节8位1个字节8位1个字节short2个字节16位2个字节16位2个字节int2个字节16位4个字节32位 4个字节…

lintcode最长回文子串(Manacher算法)

题目来自lintcode, 链接&#xff1a;http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ 最长回文子串 给出一个字符串&#xff08;假设长度最长为1000&#xff09;&#xff0c;求出它的最长回文子串&#xff0c;你可以假定只有一个满足条件的最长回文串。…

全排列总结

接触全排列已经好长时间了&#xff0c;一直没有抽空总结一下全排列的相关问题&#xff0c;下面来说一下&#xff01; 排列 一般地&#xff0c;从n个不同元素中取出m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排成一列&#xff0c;叫做从n个元素中取出m个元…

大小端问题傻傻分不清?

先来熟悉一下概念&#xff1a; 大端&#xff1a;数据的高位数据保存在低位地址&#xff0c;数据的低位数据保存在高地址 小端&#xff1a;数据的高位数据保存在高位地址&#xff0c;数据的低位数据保存在低地址为什么会存在大小端的问题&#xff1f; 这是因为在计算机系统中&a…

mount --bind的用处

&#xff08;一&#xff09;mount --bind介绍 mount --bind的作用是将两个目录连接起来&#xff0c;例如&#xff1a;mount ---bind /dir1 /dir2 是将dir1目录挂载到dir2目录上&#xff0c;下面来实际演示一下&#xff1a; 上面的操作中首先创建了dir1 dir2两个目录&#xf…

lintcode 落单的数(位操作)

题目1 落单的数 给出2*n 1 个的数字&#xff0c;除其中一个数字之外其他每个数字均出现两次&#xff0c;找到这个数字。 链接&#xff1a;http://www.lintcode.com/zh-cn/problem/single-number/ 样例 给出 [1,2,2,1,3,4,3]&#xff0c;返回 4 挑战 一次遍历&#xff0c;常数级…

旋转图像

旋转图像 给定一个NN的二维矩阵表示图像&#xff0c;90度顺时针旋转图像。 看个例子 算法1&#xff1a; 如上图所示&#xff0c;设一个N阶二维矩阵&#xff0c;则将矩阵从外向里可以分成N/2个圈&#xff0c;例如&#xff08;1 2 3 4 8 12 16 15 14 13 9 5&#xff09;这是最外边…

嵌入式开发板模拟器:QEMU

前两天看微信公众号时发现了一个嵌入式模拟器&#xff0c;感觉很不错&#xff0c;自己动手安装了一个&#xff0c;折腾了几天&#xff0c;下载一直是个问题&#xff0c;特此记录如下 模拟器大家应该都听说过&#xff0c;有的小伙伴打游戏也会安装模拟器&#xff0c;今天我们介绍…

gcc: weak_alias如何使用

本文主要说明weak和alias是什么和如何使用它 __attribute__是用来说明函数的属性&#xff0c;weak和alias分别是两个属性。 &#xff08;一&#xff09;强符号和弱符号&#xff1a; 强符号&#xff1a;已经初始化的全局变量和未被weak修饰的函数弱符号&#xff1a;未初始化的全…

静态Include和动态Include测试并总结

主要代码 hjzgg.css .center-div{width:auto;margin-left: 40%;margin-right: 40%;display: block;position: absolute;top:0px;left:0px; }.text-div{margin-top: 80px; }.hjzgg-div{color:transparent;font-size:20px;font-weight: bold;letter-spacing:2px;-webkit-animatio…