个人小作品集

  所有的个人小程序就全部放在这里吧,免得占位置,看着乱。

  1.网页登录界面。

  让我觉得开心的部分主要是怎样模糊背景而登陆界面的部分不会受到影响,我查了小会儿资料,都没有解决方案,有的说因为背景图片的模糊,其他元素会继承父级元素的效果,所以没办法。我觉得应该不会吧...我就想干脆这样来,把背景图片部分单独作为一个块级元素,然后登录界面用绝对位置来定位,也就相当于是重叠在图片的上方,这样就不会受到背景图片的模糊效果的影响了,实际上也确实是可行的。

  先看看效果:

  其实效果虽然少,但还是有一些的,因为是截图,所以就看不到其他效果了,嘛...其他的应该都很简单,比如过渡、提示效果、下拉效果等等,毕竟登录界面,也不用太花哨,不过又总觉得少了什么,所以加了背景,但又好像变得花哨了。

  ">"按钮用了JS来实现展开和关闭,其实感觉还不如左拉+过渡效果好看,不过将就了。对了,还有图片也在文件里面,背景图片来自搜狗壁纸(具体源也不知道是哪的),登录的背景图片来自P站画师,但具体记不得画师的ID了,emmm...我是来推荐壁纸的。

  2.计算机想 - 人猜:

  暑假的时候写过两个相反的人机猜谜游戏,一个是计算机想一个0~100以内的数字,然后让人来猜,很简单;第二个是,人想一个0~100以内的数字,然后让计算机来猜,也不难。

  code:

//猜数字游戏
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>

int main()
{
    int i = 7, num, flag = 0, x;

    srand(time(0));
    num = rand() % 100 + 1;
    puts("游戏规则:
计算机随机生成一个 1 ~ 100 的数字
玩家通过输入数字来猜计算机给出的数
计算机只会根据您提问的数字来判断比给出的数大还是小来进行提示
共有 7 次机会可以猜!快来试试吧!
");
    while(i--)
    {
        puts("请输入数字:");
        scanf("%d",&x);
        if(x == num)
        {
            flag = 1;
            break;
        }
        if(x < num)
            printf("提示%d:小了

",7 - i);
        if(x > num)
            printf("提示%d:大了

",7 - i);
    }
    if(flag)
        puts("恭喜您猜对了!");
    if(!flag)
        printf("抱歉您的机会已用完!
正确答案是: %d
",num);
    getch();
    return 0;
}

  3.人想 - 计算机猜:

/*
 *    练习 - 递归实现人机猜谜
 */

#include <stdio.h>
#include <string.h>
#include <conio.h>

#define bool int
#define true 1
#define false 0

bool NumGame(int Min, int Max, int i)
{
    int Mid;
    char JugCon[5];

    if(i == 0)
        return false;

    Mid = (Min + Max)/2;
    printf("第 %d 次    计算机: %d
", 8 - i, Mid);
    printf("请给予提示:");
    scanf("%s", JugCon);
    
    if(strcmp(JugCon, "大了") == 0)
        Mid = NumGame(Min, Mid, --i);
    else if(strcmp(JugCon, "小了") == 0)
        Mid = NumGame(Mid, Max, --i);
    else if(strcmp(JugCon, "对了") == 0)
        return true;
    else
        return false;

    return true;
}


int main(void)
{
    char c;

    puts("现在请在内心里确定好一个数字,如果我给出的数字
大于给予“大了”的提示,小于给予“小了”的提示
答对了输入“对了”即可,一共7次机会可以猜
");
    puts("按 1 键退出游戏
");
    do
    {
        if(!NumGame(0, 100, 7))
            printf("master!原谅我太笨了~    ╥﹏╥...
");
        else
            printf("我肯定猜对了! <( ̄︶ ̄)> master! 快夸夸我吧~!
");
    }
    while((c = getch()) != '1');

    return 0;
}

   4.windows编程 - 简易的界面:

  这东西是还不认识数据结构的时候写的= =,当时特别想写带界面的东西,就看了一些windows编程,后来发现基本没什么用= =,因为也就只是一个界面,其他什么功能也没有,而且也没学到多少,就是了解了一堆API...而且实现起来还很麻烦...

#include<windows.h>

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rect;
    HFONT hfont, ohfont;
    static HWND hwndedit, hedit, hwndButton;
    
    switch(message)
    {
        case WM_CREATE:                                //应用程序建立一个窗口
                        hwndedit = CreateWindow( TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 90, 60, 150, 30, hwnd, NULL, NULL, NULL);
                        hedit = CreateWindow( TEXT("edit"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 90, 100, 150, 30, hwnd, NULL, NULL, NULL);
                        hwndButton = CreateWindow( TEXT("button"), TEXT("安全登录"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON , 90, 200, 80, 28, hwnd, NULL, NULL, NULL);
            return 0;
        case WM_COMMAND:                            //处理点击按钮、菜单等控件时的触发消息
                        if( (HWND)lParam == hwndButton )
                        {
                            MessageBox( hwnd, TEXT("登录测试成功!"), TEXT("测试"), MB_ICONINFORMATION | MB_OK);
                        }
            return 0;
        case WM_PAINT:                                //重新自我绘制
                        hdc = BeginPaint (hwnd, &ps) ;
                        GetClientRect (hwnd, &rect) ;
                        hfont = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "微软雅黑");
                        ohfont=SelectObject(hdc,hfont);
                        TextOut(hdc, 20, 60, "账户:", 5);
                        TextOut(hdc, 20, 100, "密码:", 5);
                        EndPaint(hwnd, &ps);
            return 0;    
        case WM_DESTROY:                            //当窗口关闭时产生的原因
                        PostQuitMessage(0);            //产生WM_QUIT消息
            return 0;
        case WM_CLOSE:
                        DestroyWindow(hwnd);
            return 0;
    }
    return DefWindowProc(hwnd,message,wParam,lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    static TCHAR szAppName[]    =    TEXT ("DARKCHII");
    HWND hwnd;
    HBRUSH hbrh;
    MSG msg;
    WNDCLASS wndclass;
    hbrh=CreateSolidBrush(RGB(255,255,255));

    wndclass.cbClsExtra            =    0;
    wndclass.cbWndExtra            =    0;
    wndclass.hbrBackground        =    hbrh;
    wndclass.hCursor            =    LoadCursor(NULL, IDC_ARROW);
    wndclass.hIcon                =    LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hInstance            =    hInstance;
    wndclass.lpfnWndProc        =    WndProc;
    wndclass.lpszClassName        =    szAppName;
    wndclass.lpszMenuName        =    NULL;
    wndclass.style                =    CS_HREDRAW|CS_VREDRAW;
    
    if(!RegisterClass (&wndclass))
    {
        MessageBox(NULL,TEXT("注册窗口失败!"),szAppName,MB_ICONERROR);
        return 0;
    }

    hwnd = CreateWindow(szAppName,
            "DarkChii",
            WS_OVERLAPPEDWINDOW,
            640,                    //窗口的初始位置左边距
            180,                    //窗口的初始位置顶边距
            280,
            380,
            NULL,
            NULL,
            hInstance,
            NULL);

    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

  运行效果:

  5.一个简单的打开程序代码,写这个的原因是因为我遇到几个程序都是只能在exe程序自己所在位置的文件夹里打开,不然就会提醒丢失各种dll文件,然而到那里去找又都在,实际上是因为exe文件必须和那些dll文件在同一个文件夹下才能打开,但这样子就麻烦了,不能每次都去硬盘里找它吧,于是,直接用代码写一个链接到exe文件所在的文件位置来打开,然后把这个代码的生成exe程序弄到桌面上就可以愉快的打开了。代码很简单,我的想法有三种,第一个简单,但不论点确定还是取消还是右上角,程序都会打开,所以我又想了第二种,用MessageBox的返回值来判断,返回值对应“OK”的返回值,那么就说明点击的是确定,否则为了方便就不执行任何操作。第三种是获取消息,case WM_CAMMAND来处理鼠标点击、菜单控件等事件,然后if判断就好了。代码如下:

  第一种(这里以我的matlab为例,显然ShellExecuteA函数中是matlab.exe的文件位置):

#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstance, PSTR szCmdLine,int iCmdShow)
{
    ShellExecuteA(NULL, "open", "C:\Program Files\MATLAB\R2017a\bin\matlab.exe", NULL, NULL, SW_SHOWNORMAL);

    return 0;
}

  第二种:

#if defined(UNICODE) && !defined(_UNICODE)
    #define _UNICODE
#elif defined(_UNICODE) && !defined(UNICODE)
    #define UNICODE
#endif

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstance, PSTR szCmdLine,int iCmdShow)
{
    UINT nRet = MessageBox(NULL, TEXT("确定运行 MATLAB 吗?"), TEXT("MATLAB.exe"), MB_OKCANCEL | MB_ICONQUESTION);
    if(nRet == IDOK)
    {
        ShellExecuteA(NULL, "open", "C:/Program Files/MATLAB/R2017a/bin/matlab.exe", NULL, NULL, SW_SHOWNORMAL);// 可以不用双斜杠来连接路径
    }

    return 0;
}

  补充各种按钮的返回值参数:

IDOK
OK
IDCANCEL
CANCEL
IDABORT
ABORT
IDRETRY
RETRY
IDIGNORE
IGNORE
IDYES
YES
IDNO
NO

  6.pixiver是一个爬取P站排行榜上的图片的爬虫。

  7.libhttp项目是我用C++编写的web client工具,类似python中的request包的功能。虽然比起request,它还是只是个还未出生的小婴儿2333。

  8.Jiro-Translator是我用python3写的一款翻译工具。

原文地址:https://www.cnblogs.com/darkchii/p/7620333.html