我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用C语言制作表白神器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用C语言制作表白神器

今天小编给大家分享一下怎么用C语言制作表白神器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

程序说明

这是一个表白神器,可以自己替换上图片识别。

程序默认是识别 640×480 尺寸,可以自己调整。

也有现成的程序可以联系我获取,给程序加了图标和更方便的替换 img 方式。

操作说明

需要提供一张图片在项目根目录下进行识别!

或者可以不用掩码图片的方案:

// 初始化图片    IMAGE img;    loadimage(&img, IMGNAME);    SetWorkingImage(&img);    // 设置 img为绘制设备    COLORREF color;            // 记录像素颜色    BYTE r, b, g;            // 记录像素RGB

将上方的代码改为:

// 初始化图片    IMAGE img(SCREEN_WIDTH, SCREEN_HEIGHT);    //loadimage(&img, IMGNAME);    SetWorkingImage(&img);    // 设置 img为绘制设备    setbkcolor(WHITE);    cleardevice();    settextcolor(BLACK);    settextstyle(120, 55, _T("黑体"));    outtextxy(100, 50, _T("我想和你"));    outtextxy(100, 250, _T("有一个家"));    COLORREF color;            // 记录像素颜色    BYTE r, b, g;            // 记录像素RGB

程序效果

怎么用C语言制作表白神器

完整源码

#include <graphics.h> #define MAX_STAR 500// 雪花数量上限#define SCREEN_WIDTH 640// 屏幕宽度#define SCREEN_HEIGHT 480// 屏幕高度#define MAX_STEP 3// 雪花每次移动最高步长#define MAX_RADIUS 3// 雪花最大半径#define IMGNAME _T("img.jpg")// 图片名字 using namespace std; // 图片转数组(这个有很大优化空间的,需要识别彩色照片可以看这)int imgList[SCREEN_HEIGHT][SCREEN_WIDTH] = { 0 }; // 雪花状态enum STATUS{STOP = 0,// 不动UP,// 向上DOWN,// 向下LEFT,// 向左RIGHT,// 向右RANDOM,// 随机ALL_STATUS// 记录状态总数};struct STAR{int x;// 雪花的 x 坐标int y;// 雪花的 y 坐标enum STATUS stat;// 雪花状态unsigned radius;// 雪花的半径int step;// 雪花每次移动的步长int color;// 雪花的颜色};struct SqList{struct STAR* elems; // 顺序表的基地址int length;// 顺序表的长度int size;// 顺序表的空间}; // 顺序表的接口bool initList(SqList& L);bool listAppend(SqList& L, struct STAR e);bool listDelete(SqList& L, int i);void destroyList(SqList& L); bool initList(SqList& L){L.elems = new struct STAR[MAX_STAR];if (!L.elems) return false;L.length = 0;L.size = MAX_STAR;return true;}bool listAppend(SqList& L, struct STAR e){if (L.length == L.size) return false;// 存储空间已满L.elems[L.length] = e;L.length++;// 表长加 1return true;}bool listDelete(SqList& L, int i){if (i < 0 || i >= L.length) return false;if (i == L.length - 1){// 删除最后一个元素L.length--;return true;}for (int j = i; j < L.length - 1; j++){L.elems[j] = L.elems[j + 1];// 删除位置的后续元素一次往前移}L.length--;return true;}void destroyList(SqList& L){if (L.elems) delete[]L.elems;// 释放存储空间L.length = 0;L.size = 0;} void MoveStar(SqList& L, int i){// 留下雪痕if (L.elems[i].stat == DOWN){if (imgList[L.elems[i].y][L.elems[i].x] == 1){L.elems[i].y += L.elems[i].step;L.elems[i].x -= 2;}}if (L.elems[i].stat == UP){if (imgList[L.elems[i].y][L.elems[i].x] == 1){L.elems[i].y -= L.elems[i].step;L.elems[i].x -= 2;}}if (L.elems[i].stat == LEFT){if (imgList[L.elems[i].y][L.elems[i].x] == 1) L.elems[i].x -= L.elems[i].step;}if (L.elems[i].stat == RIGHT){if (imgList[L.elems[i].y][L.elems[i].x] == 1) L.elems[i].x += L.elems[i].step;} if (L.elems[i].stat == STOP) return;// 擦除原来的雪花setfillcolor(BLACK);solidcircle(L.elems[i].x, L.elems[i].y, L.elems[i].radius);if (L.elems[i].stat == DOWN){L.elems[i].y += L.elems[i].step;L.elems[i].x -= 2;if (L.elems[i].x < 0) L.elems[i].x = SCREEN_WIDTH;if (L.elems[i].y > SCREEN_HEIGHT) L.elems[i].y = 0;//if(L.elems[i].y>SCREEN_HEIGHT) listDelete(L, i);// 这段代码可以让飘出屏幕外的雪花消亡}else if (L.elems[i].stat == UP){L.elems[i].y -= L.elems[i].step;L.elems[i].x -= 2;if (L.elems[i].x < 0) L.elems[i].x = SCREEN_WIDTH;if (L.elems[i].y < 0) L.elems[i].y = SCREEN_HEIGHT;//if(L.elems[i].y<0) listDelete(L, i);}else if (L.elems[i].stat == LEFT){L.elems[i].x -= L.elems[i].step;if (L.elems[i].x > 0) L.elems[i].x = SCREEN_WIDTH;//if(L.elems[i].x<0) listDelete(L, i);}else if (L.elems[i].stat == RIGHT){L.elems[i].x += L.elems[i].step;if (L.elems[i].x > SCREEN_HEIGHT) L.elems[i].x = 0;//if(L.elems[i].x>SCREEN_WIDTH) listDelete(L, i);}setfillcolor(L.elems[i].color);solidcircle(L.elems[i].x, L.elems[i].y, L.elems[i].radius);}  void initStar(struct STAR& _star){int rgb = 0;//rand() 得到随机数范围 0 - 32767 RAND_MAX_star.x = rand() % SCREEN_WIDTH;// x 范围 0 - SCREEN_WIDTH_star.y = rand() % SCREEN_HEIGHT;// y 范围 0 - SCREEN_HEIGHT//_star.stat = STATUS(rand() % 6);// 雪花状态:随机_star.stat = DOWN;// 雪花状态:向下_star.radius = 1 + rand() % MAX_RADIUS; // 半径控制 1 - MAX_RADIUS_star.step = rand() % MAX_STEP + 1;// 步长 1 - MAX_STEPrgb = 255 * _star.step / MAX_STEP;// RGB:0 - 255_star.color = RGB(rgb, rgb, rgb);}  int main(){bool quit = false;struct STAR star;SqList starList; // 初始化屏幕initgraph(SCREEN_WIDTH, SCREEN_HEIGHT); // 初始化图片IMAGE img;loadimage(&img, IMGNAME);SetWorkingImage(&img);// 设置 img为绘制设备COLORREF color;// 记录像素颜色BYTE r, b, g;// 记录像素RGB for (int y = 0; y < SCREEN_HEIGHT; y++){for (int x = 0; x < SCREEN_WIDTH; x++){color = getpixel(x, y);// 获取像素颜色r = GetRValue(color);b = GetBValue(color);g = GetGValue(color);if (r < 200 && b < 200 && g < 200){// 判断需留下“雪痕”的数组位置imgList[y][x] = 1;}}} SetWorkingImage();// 设置回默认绘制设备cleardevice(); // 初始化保存雪花状态的顺序表initList(starList); for (int i = 0; i < MAX_STAR; i++){initStar(star);listAppend(starList, star);} for (int i = 0; i < starList.length; i++){setfillcolor(starList.elems[i].color);solidcircle(starList.elems[i].x, starList.elems[i].y,starList.elems[i].radius);} while (quit == false){for (int i = 0; i < starList.length; i++){MoveStar(starList, i);} if (starList.length == 0){// 若设置雪花离开屏幕后消亡,则会触发此退出quit = true;}Sleep(50);}system("pause");closegraph();return 0;}

以上就是“怎么用C语言制作表白神器”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用C语言制作表白神器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用C语言制作表白神器

今天小编给大家分享一下怎么用C语言制作表白神器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。程序说明这是一个表白神器,可以自
2023-07-05

C语言制作表白神器的示例代码

这篇文章主要为大家详细介绍了如何利用C语言制作一个简单的表白神器,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
2023-03-07

c语言编译器手机版怎么表白

c语言编译器手机版不能直接用于表白,因为它是一个编程工具。其他可以用来表达爱意的手机表白方法包括:短信/微信、电话、语音消息、社交媒体、电子邮件和手写信。C语言编译器手机版表白指南如何使用C语言编译器手机版表白?C语言编译器手机版不能直
c语言编译器手机版怎么表白
2024-04-05

怎么用Python制作表白图片

本篇内容主要讲解“怎么用Python制作表白图片”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python制作表白图片”吧!在Python中一般使用Turtle来绘制对就是之前画樱花树的那
2023-06-01

Go语言空白表示符_怎么用

这篇文章主要介绍了Go语言空白表示符_怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在GO语言中,导入了包,却不在代码中使用它,是非法的。当这么做时,编译器是会报错的。
2023-06-20

c语言八进制怎么表示

在C语言中,可以使用前缀"0"来表示一个八进制数。例如,八进制数23可以表示为023。在使用八进制数时,可以使用以下规则:八进制数的每一位的有效范围是0-7。如果八进制数超出了有效范围,编译器将报错。八进制数可以进行算术运算,包括加法、
2023-10-26

c语言怎么让制表对齐

c语言中可通过以下两种方法对齐制表符:使用printf()函数的%n和%*c格式说明符计算字节偏移量并插入制表符。使用snprintf()函数将数据写入缓冲区,计算偏移量,写入制表符字符,然后使用printf()函数打印缓冲区内容。如何在
c语言怎么让制表对齐
2024-05-14

c语言二进制怎么表示

c语言中,二进制数用0和1表示,有两种表示方法:1. 二进制字面量,用0b或0b前缀;2. 整数转换为二进制,用%b格式说明符。c语言还提供位运算符对二进制数进行操作,包括按位与、按位或、按位异或、按位非、左移和右移。C 语言中二进制的表示
c语言二进制怎么表示
2024-05-21

怎么用c语言制作心形图案

在C语言中,可以使用循环和条件语句来制作心形图案。以下是一个示例代码:c#include int main() {int i, j;// 控制行数for (i = 0; i // 控制每行的列数for (j = 0; j // 在心形的上半
2023-10-20

怎么用HTML+CSS+JavaScript实现在线表白神器

这篇文章主要介绍了怎么用HTML+CSS+JavaScript实现在线表白神器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用HTML+CSS+JavaScript实现在线表白神器文章都会有所收获,下面我们
2023-06-27

c语言中的16进制怎么表示

c 语言中的 16 进制表示格式为:0x[十六进制数字]。常用场景包括表示颜色值、十六进制文件格式和硬件寄存器的值。需要注意,十六进制数字可以是大写或小写,但通常使用大写,并且可以包含数字和字母 a-f。C 语言中的 16 进制表示在 C
c语言中的16进制怎么表示
2024-05-10

C语言中的链表有什么作用

这篇文章主要介绍“C语言中的链表有什么作用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言中的链表有什么作用”文章能帮助大家解决问题。首先,指针计算机中的所有内容都是数字。在C语言中创建变量时,
2023-06-16

C语言中链表的作用是什么

C语言中链表的作用是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。首先,指针计算机中的所有内容都是数字。在C语言中创建变量时,编译器仅按地址处理它,但是在您
2023-06-16

使用C语言怎么制作一个扫雷游戏

本篇文章给大家分享的是有关使用C语言怎么制作一个扫雷游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底
2023-06-14

C语言中单链表怎么用

这篇文章将为大家详细讲解有关C语言中单链表怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、单链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序
2023-06-29

C语言怎么实现顺序表的操作

这篇文章主要介绍了C语言怎么实现顺序表的操作的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现顺序表的操作文章都会有所收获,下面我们一起来看看吧。线性表线性表(linear list)是n个具有相同特
2023-06-30

怎么使用C语言实现Hash表

这篇“怎么使用C语言实现Hash表”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用C语言实现Hash表”文章吧。什么是
2023-07-05

C语言操作符++和--怎么使用

本篇内容介绍了“C语言操作符++和--怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、++与--操作符的本质++ 和 -- 操作符
2023-06-30

C语言的线性表之顺序表怎么用

这篇文章给大家分享的是有关C语言的线性表之顺序表怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。线性表 —— 顺序表 (C语言) 概念线性表的顺序表示指的是用一组地址连续的存储单元依次
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录