日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python输入一个人的名字_怎样用c语言做到输入一个人的名字才会输出一个心?

發布時間:2023/12/20 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python输入一个人的名字_怎样用c语言做到输入一个人的名字才会输出一个心? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搞事開始。

首先,我們先進行如下聲明

#include #include #include #include HDC offscreen;

long double param;

COLORREF C_TRANSPARENT=RGB(1,2,3);

COLORREF C_RED=RGB(255,0,0);

這里并沒有什么值得注意的地方。

offscreen是我們繪制心形的一個小的“畫布”;而param則是繪制心形所用到的參數。

接下來,既然需要顯示一個心,那么,我們需要一個繪制心形的“畫布”。

因此,我們需要準備一個窗體。

HWND InitWindow(){

RECT rect;

HWND desktop=GetDesktopWindow();

GetWindowRect(desktop,&rect);

int width=rect.right-rect.left;

int height=rect.bottom-rect.top;

int mysize=(width

WNDCLASSEXW wndclass = { 0 };

wndclass.cbSize=sizeof(WNDCLASSEXW);

wndclass.lpfnWndProc = (WNDPROC)DefWindowProc;

wndclass.hInstance = GetModuleHandle(NULL);

wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

wndclass.lpszClassName = L"Heart";

if (RegisterClassExW(&wndclass) == NULL)

return NULL;

HWND hWnd = CreateWindowExW(

WS_EX_LAYERED|WS_EX_TOPMOST|WS_EX_TRANSPARENT|WS_EX_TOOLWINDOW,

L"Heart", L"title",

WS_POPUP|WS_VISIBLE,

width/2-mysize/2,height/2-mysize/2,mysize,mysize,

NULL, NULL, GetModuleHandle(NULL), NULL

);

if (!hWnd)

return NULL;

SetLayeredWindowAttributes(hWnd,C_TRANSPARENT,200,LWA_ALPHA | LWA_COLORKEY);

return hWnd;

}

這里,我們將C_TRANSPARENT指定為“透明色”。這也是為了后期的效果。

再接下來,我們編寫在窗體上繪制心形的函數。這一部分是簡單的,因為只是把offscreen上的圖形復制到窗體上。甚至可以直接從隨便什么地方抄到。

void ShowImage(HWND hWnd,HDC offscreen){

RECT rect;

GetWindowRect(hWnd,&rect);

HDC dc=GetWindowDC(hWnd);

BitBlt(dc,0,0,rect.right-rect.left,rect.bottom-rect.top,offscreen,0,0,SRCCOPY);

}

然后,為整個窗體編寫事件循環。

void RunWindow(HWND hWnd){

MSG msg;

while (1) {

while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE)

{

if (GetMessage(&msg, NULL, 0, 0))

{

if(msg.message==WM_PAINT){

ShowImage(msg.hwnd,offscreen);

continue;

}

TranslateMessage(&msg);

DispatchMessage(&msg);

}

else {

return;

}

}

if (!IsWindow(hWnd))break;

Sleep(50);

}

}

好了,廢話說完,接下來我們進入正題,即心形的構造。

首先,因為“名字”這個東西并不是很適合數值化。因此,我們對名字進行哈希變換,并與內置的哈希值進行比對,從而得到某個value值。

這里我們用到了Windows內置的Hash算法

void CalcPara(void* data,size_t cbdata){

const BYTE key[]=

{0x95,0x34,0xf3,0x1b,0xde,0x49,0xd1,0x40,0x95,0x26,0x8b,0xd6,0xc1,0x38,0xc1,0x2e,0xef,0x2f,0x35,0xc1};

HCRYPTPROV prov;

CryptAcquireContextA(&prov,NULL,NULL,PROV_RSA_AES,CRYPT_SILENT|CRYPT_VERIFYCONTEXT);

HCRYPTHASH hash;

CryptCreateHash(prov,CALG_SHA1,0,0,&hash);

CryptHashData(hash,(BYTE*)data,cbdata,NULL);

DWORD hashsize;

DWORD tmp=sizeof(DWORD);

CryptGetHashParam(hash,HP_HASHSIZE,(BYTE*)&hashsize,&tmp,0);

BYTE* hval=(BYTE*)malloc(hashsize);

memset(hval,0,hashsize);

tmp=hashsize;

CryptGetHashParam(hash,HP_HASHVAL,(BYTE*)hval,&tmp,0);

if(tmp

int diff=hashsize<20?20-hashsize:hashsize-20;

for(int i=0;i<(hashsize<20?hashsize:20);i++)

if(hval[i]!=key[i])

diff++;

param=diff/2;

if(param>2)

param=2;

}

接下來,我們開始對圖形進行繪制。

定義如下函數。

int GenFigure(long double x,long double y){

return 17*x*x+16*y*abs(x)+17*y*y +param/abs(10*x+sin(15*y))< 8;

}

有關此函數的內容會在文末的參考文獻中予以列出。

接下來,我們用這樣的函數對某個bitmap中的每一個像素進行初始化。

void InitBitmap(HWND hWnd,int (*figure)(long double,long double)){

RECT rect;

GetWindowRect(hWnd,&rect);

int width=rect.right-rect.left;

int height=rect.bottom-rect.top;

HDC dc=GetWindowDC(hWnd);

offscreen=CreateCompatibleDC(dc);

HBITMAP bitmap=CreateCompatibleBitmap(dc,width,height);

SelectObject(offscreen,bitmap);

for(int i=0;i

for(int j=0;j

if(figure((long double)(i)*2/width-1,(long double)(j)*2/height-1))

SetPixel(offscreen,i,j,C_RED);

else

SetPixel(offscreen,i,j,C_TRANSPARENT);

}

最后,把這一切整合起來,就得到了“繪制心型”的程序。

int main()

{

wchar_t name[64];

memset(name,0,64*sizeof(wchar_t));

scanf("%S",name);

HWND chwnd=GetConsoleWindow();

#ifndef _DEBUG

ShowWindow(chwnd,SW_HIDE);

#endif

CalcPara(name,64*sizeof(wchar_t));

HWND hwnd=InitWindow();

RECT rect;

int width,height;

InitBitmap(hwnd,&GenFigure);

RunWindow(hwnd);

}

這樣,我們得到了一個“輸入正確的名字則繪制心形”的程序。

運行效果如圖。

輸入錯誤的名字

輸入正確的名字

至此,我該滾去寫作業了。

總結

以上是生活随笔為你收集整理的python输入一个人的名字_怎样用c语言做到输入一个人的名字才会输出一个心?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。