所有的个人小程序就全部放在这里吧,免得占位置,看着乱。
1.网页登录界面。
最近花了点时间写了这个登录界面,比较开心的是独立解决了制作过程中几个小难点,想要的...(垃圾东西,应该没人要...233,但是我唯一的作品啊,github空空的都不好意思了,所以还是上传了)请点击Github,主要还是靠图片支撑才看起来貌似有那么点东东→_→, hh..
让我觉得开心的部分,主要是怎样模糊背景而登陆界面的部分不会受到影响,我查了小会儿资料,都没有解决方案,有的说因为背景图片的模糊,其他元素会继承父级元素的效果,所以没办法。我觉得应该不会吧...我就想干脆这样来,把背景图片部分单独作为一个块级元素,然后登录界面用绝对位置来定位,也就相当于是重叠在图片的上方,这样就不会受到背景图片的模糊效果的影响了,实际上也确实是可行的。
先看看效果:
其实效果虽然少,但还是有一些的,因为是截图,所以就看不到其他效果了,嘛...其他的应该都很简单,比如过渡、提示效果、下拉效果等等,毕竟登录界面,也不用太花哨,不过又总觉得少了什么,所以加了背景,但又好像变得花哨了。
">"按钮用了JS来实现展开和关闭,其实感觉还不如左拉+过渡效果好看,不过将就了。对了,还有图片也在文件里面,背景图片来自搜狗壁纸(具体源也不知道是哪的),登录的背景图片来自P站画师,但具体记不得画师的ID了,emmm...对,我是来推荐壁纸的。最近P站也登不上去了...
2.计算机想 - 人猜:
暑假的时候写过两个相反的人机猜谜游戏,一个是计算机想一个0~100以内的数字,然后让人来猜,很简单;第二个是,人想一个0~100以内的数字,然后让计算机来猜,也不难。
嘛...说无聊也挺无聊的,毕竟自己知道程序的运作,该怎么猜完全是很明白的...所以有点没意思。
但也算是学习过程的经验积累吧...
留下代码吧:
//猜数字游戏
#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("游戏规则:\n计算机随机生成一个 1 ~ 100 的数字\n玩家通过输入数字来猜计算机给出的数\n计算机只会根据您提问的数字来判断比给出的数大还是小来进行提示\n共有 7 次机会可以猜!快来试试吧!\n");
while(i--)
{
puts("请输入数字:");
scanf("%d",&x);
if(x == num)
{
flag = 1;
break;
}
if(x < num)
printf("提示%d:小了\n\n",7 - i);
if(x > num)
printf("提示%d:大了\n\n",7 - i);
}
if(flag)
puts("恭喜您猜对了!");
if(!flag)
printf("抱歉您的机会已用完!\n正确答案是: %d\n",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\n", 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("现在请在内心里确定好一个数字,如果我给出的数字\n大于给予“大了”的提示,小于给予“小了”的提示\n答对了输入“对了”即可,一共7次机会可以猜\n");
puts("按 1 键退出游戏\n");
do
{
if(!NumGame(0, 100, 7))
printf("master!原谅我太笨了~ ╥﹏╥...\n");
else
printf("我肯定猜对了! <( ̄︶ ̄)> master! 快夸夸我吧~!\n");
}
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的文件位置):
#include<windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrecInstance, PSTR szCmdLine,int iCmdShow)
{
MessageBox(NULL, TEXT("确定运行 MATLAB 吗?"), TEXT("MATLAB.exe"), MB_YESNO | MB_ICONQUESTION);
ShellExecuteA(NULL, "open", "C:\\Program Files\\MATLAB\\R2017a\\bin\\matlab.exe", NULL, NULL, SW_SHOWNORMAL);
return 0;
}
第二种:
#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); //最后两个参数是,确定/取消按钮参数|显示问号的图标
/** 需要注意的是中文编码问题...我用Code::Blocks不管怎么改编码方式,MessageBox()中的中文总是乱码,比如修改编译器工作环境的编码或者用TEXT()来输出字串都没有用,VC就不会有问题...
但通常如果使用Unicode编码应该用TEXT()或者_T()(使用该函数记得加上头文件"tchar.h")来输出就能解决了 */ if(nRet == IDOK) //IDOK即点击确定的返回值,至于yes,no等按钮的返回值,我改天翻文档查查...
{
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 |
第三种(还没写233,有空补上~)