欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言制作表白神器的示例代碼

 更新時間:2023年03月07日 10:34:36   作者:編程小魚六六六  
這篇文章主要為大家詳細介紹了如何利用C語言制作一個簡單的表白神器,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下

程序說明

這是一個表白神器,可以自己替換上圖片識別。

1.程序默認是識別 640×480 尺寸,可以自己調(diào)整。

2.也有現(xiàn)成的程序可以聯(lián)系我獲取,給程序加了圖標和更方便的替換 img 方式。

操作說明

需要提供一張圖片在項目根目錄下進行識別!

或者可以不用掩碼圖片的方案:

// 初始化圖片
    IMAGE img;
    loadimage(&img, IMGNAME);
    SetWorkingImage(&img);    // 設(shè)置 img為繪制設(shè)備
    COLORREF color;            // 記錄像素顏色
    BYTE r, b, g;            // 記錄像素RGB

將上方的代碼改為:

// 初始化圖片
    IMAGE img(SCREEN_WIDTH, SCREEN_HEIGHT);
    //loadimage(&img, IMGNAME);
    SetWorkingImage(&img);    // 設(shè)置 img為繪制設(shè)備
    setbkcolor(WHITE);
    cleardevice();
    settextcolor(BLACK);
    settextstyle(120, 55, _T("黑體"));
    outtextxy(100, 50, _T("我想和你"));
    outtextxy(100, 250, _T("有一個家"));
    COLORREF color;            // 記錄像素顏色
    BYTE r, b, g;            // 記錄像素RGB

程序效果

完整源碼

/*	*************************
 *	程序名稱:	表白程序
 *	編譯環(huán)境:	VC2019,EasyX_20210224
 *	********* 說明 **********
 *	需要自己提供一張大小為 640×480 的圖片(img.jpg)在項目根目錄下
 *	大小可以在程序內(nèi)更改,圖片名字也可以。
 *	*************************/
#include <graphics.h>
 
#define MAX_STAR 500			// 雪花數(shù)量上限
#define SCREEN_WIDTH 640		// 屏幕寬度
#define SCREEN_HEIGHT 480		// 屏幕高度
#define MAX_STEP 3				// 雪花每次移動最高步長
#define MAX_RADIUS 3			// 雪花最大半徑
#define IMGNAME _T("img.jpg")	// 圖片名字
 
using namespace std;
 
// 圖片轉(zhuǎn)數(shù)組(這個有很大優(yōu)化空間的,需要識別彩色照片可以看這)
int imgList[SCREEN_HEIGHT][SCREEN_WIDTH] = { 0 };
 
// 雪花狀態(tài)
enum STATUS
{
	STOP = 0,	// 不動
	UP,			// 向上
	DOWN,		// 向下
	LEFT,		// 向左
	RIGHT,		// 向右
	RANDOM,		// 隨機
	ALL_STATUS	// 記錄狀態(tài)總數(shù)
};
struct STAR
{
	int x;				// 雪花的 x 坐標
	int y;				// 雪花的 y 坐標
	enum STATUS stat;	// 雪花狀態(tài)
	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++;								// 表長加 1
	return 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];		// 刪除位置的后續(xù)元素一次往前移
	}
	L.length--;
	return true;
}
void destroyList(SqList& L)
{
	if (L.elems) delete[]L.elems;			// 釋放存儲空間
	L.length = 0;
	L.size = 0;
}
 
/************************************
* 功能:移動雪花,并在指定區(qū)域留下雪痕
* 輸入?yún)?shù):
* L - 雪花對象
* i - 雪花在全局數(shù)組中的下標
* 返回值:無
************************************/
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);
}
 
 
/************************************
* 功能:初始化雪花
* 輸入?yún)?shù):
* i - 雪花在全局數(shù)組中的下標
* 返回值:無
************************************/
void initStar(struct STAR& _star)
{
	int rgb = 0;
	//rand() 得到隨機數(shù)范圍 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);		// 雪花狀態(tài):隨機
	_star.stat = DOWN;						// 雪花狀態(tài):向下
	_star.radius = 1 + rand() % MAX_RADIUS; // 半徑控制 1 - MAX_RADIUS
	_star.step = rand() % MAX_STEP + 1;		// 步長 1 - MAX_STEP
	rgb = 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);	// 設(shè)置 img為繪制設(shè)備
	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)
			{							// 判斷需留下“雪痕”的數(shù)組位置
				imgList[y][x] = 1;
			}
		}
	}
 
	SetWorkingImage();	// 設(shè)置回默認繪制設(shè)備
	cleardevice();
 
	// 初始化保存雪花狀態(tài)的順序表
	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)
		{	// 若設(shè)置雪花離開屏幕后消亡,則會觸發(fā)此退出
			quit = true;
		}
		Sleep(50);
	}
	system("pause");
	closegraph();
	return 0;
}

示例資源(img.jpg)

到此這篇關(guān)于C語言制作表白神器的示例代碼的文章就介紹到這了,更多相關(guān)C語言表白神器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實現(xiàn)歌手大獎賽計分程序

    C語言實現(xiàn)歌手大獎賽計分程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)歌手大獎賽計分程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 關(guān)于c++ 智能指針及 循環(huán)引用的問題

    關(guān)于c++ 智能指針及 循環(huán)引用的問題

    下面小編就為大家?guī)硪黄P(guān)于c++ 智能指針及 循環(huán)引用的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++實現(xiàn)字符串切割的兩種方法

    C++實現(xiàn)字符串切割的兩種方法

    這篇文章主要介紹了C++實現(xiàn)字符串切割的兩種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C++11中模板隱式實例化與顯式實例化的定義詳解分析

    C++11中模板隱式實例化與顯式實例化的定義詳解分析

    實例化是為在程序中的函數(shù)模板本身并不會生成函數(shù)定義,它只是一個用于生成函數(shù)定義的方案。編譯器使用模板為特定類型生成函數(shù)定義時,得到的是模板實例。這即是函數(shù)模板的實例化。而函數(shù)模板實例化又分為兩種類型:隱式實例化和顯式實例化
    2022-04-04
  • C語言深度解剖篇之關(guān)鍵字以及補充內(nèi)容

    C語言深度解剖篇之關(guān)鍵字以及補充內(nèi)容

    C語言的關(guān)鍵字共有32個,根據(jù)關(guān)鍵字的作用,可分其為數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲類型關(guān)鍵字和其它關(guān)鍵字四類,這篇文章主要給大家介紹了關(guān)于C語言深度解剖篇之關(guān)鍵字以及補充內(nèi)容的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++ deque容器的具體使用

    C++ deque容器的具體使用

    deque又稱雙端隊列容器。deque容器中存儲元素并不能保證所有元素都存儲到連續(xù)的內(nèi)存空間中,本文詳細的介紹了C++ deque容器的使用,感興趣的可以了解一下
    2021-05-05
  • C語言庫函數(shù)getchar()新見解

    C語言庫函數(shù)getchar()新見解

    用getchar()函數(shù)讀取字符串時,字符串會存儲在輸入緩沖區(qū)中,包括輸入的回車字符,下面這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar()的用法以及案例的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • C++ Custom Control控件向父窗體發(fā)送對應(yīng)的消息

    C++ Custom Control控件向父窗體發(fā)送對應(yīng)的消息

    這篇文章主要介紹了C++ Custom Control控件向父窗體發(fā)送對應(yīng)的消息的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • 推薦幾款C/C++的編譯器、編譯環(huán)境(非常全面的比較)

    推薦幾款C/C++的編譯器、編譯環(huán)境(非常全面的比較)

    這篇文章主要介紹了C/C++編譯器的一些易混淆概念,這里腳本之家小編特為大家分享一下,需要的朋友可以參考下
    2021-06-06
  • C++ 基礎(chǔ)編程之十進制轉(zhuǎn)換為任意進制及操作符重載

    C++ 基礎(chǔ)編程之十進制轉(zhuǎn)換為任意進制及操作符重載

    這篇文章主要介紹了C++ 基礎(chǔ)編程之十進制轉(zhuǎn)換為任意進制及操作符重載的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論