C语言课设心得之实用工具小总结
前言:
适用于C语言课设。本文章分享的这些工具都是easyX和Visual Studio头文件里的工具。
目录
1.MessageBox(hWnd, lpText, lpCaption, uType)需要windows.h头文件
2.InputBoxInputBox(接收用户输入的字符的数组, 长度, 窗口内容, 窗口标题)
3.读取图像
4.播放音乐mciSendString(指令, 0, 0, 0);
5.宽窄字符转换器
6.读取键盘鼠标操作
1.MessageBox(hWnd, lpText, lpCaption, uType)需要windows.h头文件
第一个参数是窗口句柄,我们C语言课设一般来说用不到,填写NULL就行
第二个参数是窗口内容
第三个参数是窗口标题
第四个内容是窗口一些属性,可以写很多个,用 | 这个符号来分割(就是或运算“||”的这个竖杠)
第二三个参数,需要传入宽字符字符串数组,也就是WCHAR数组,如果我们没有用多字符集的话,可以通过
_T("你要呈现的字符")
或者
L“你要呈现的字符”
来转换char数组为WCHAR数组
比如我们这么写
MessageBox(NULL, _T("你醒了!"),
_T("游戏剧情"), MB_SETFOREGROUND);
呈现出来的是上图。
其中第四个参数的意思是窗口置顶,不然的话窗口生成之后是在你的主程序下方(看不见,还得在下方任务栏找)的。第四个参数有好多,都是MB_xxx形式,大家的ide会有提示,参数的名字就是它的功能,比如MB_OKCANCEL就是窗口设置两个按钮,一个是“ok”一个是“cancel”。其他的按钮大家可以在写代码的时候自己调试,探索,非常简单易懂。
这个小工具最适合的就是弹窗告诉用户一些信息,如果想要实现接收用户输入的内容的话,可以用下方的工具
2.InputBoxInputBox(接收用户输入的字符的数组, 长度, 窗口内容, 窗口标题)
同样地,除了长度是int型,其他都是宽字符数组。
这个长度的意思代表的就是,在窗口可输入的字符串长度。如果我们填20,那在窗口么输入的字符串长度最长只能是20 - 1个字符(无论是中文还是英文还是其他字符)
WCHAR string[50];
InputBox(string, 20, _T("请输入您的用户名(不能有空格)"), L"欢迎游玩!!这个是登录界面");
这样一来,我们的string就会接收到用户输入的字符了!
我们可以用MessageBox弹窗中展示我们输入的用户名了!
3.读取图像
EasyX只接受jpg格式的图像
IMAGE img_item; // 创建IMAGE类型变量
loadimage(&img_item, _T(".\Pictures\item.jpg"));
第二个参数是宽字符数组,里面的信息是img_item变量需要存储的jpg图片所在地址。这里我用的是相对路径,绝对路径的话就是从你的图片存在哪个盘一直写到你的文件本名,非常麻烦,移植性也非常差,推荐大家都用相对路径。
".\Pictures\item.jpg"解读:“.”代表了你的exe程序所在的目录,也就是根目录,我们平时用到的路径只有一个“”这里用“\”是转义,否则会引发歧义,无法进入路径。\Pictures是根目录下的一个文件夹,名字叫“Pictures”,然后item.jpg就是你的图像本身了。
如果我们要贴图也很简单
putimage(0, 0, &img_item);
0,0代表了图片左上角和窗口的哪个坐标对齐,如果是100,30,那就是在x=100,y=30的地方开始从图片的左上角往下绘制,大家可以根据需求来灵活掌握。
注意:
我们贴图的时候,不是说item图片通过IMAGE变量贴在了屏幕上,它就是一个可控制的个体了,NONONO!贴上去的仅仅就是那些破像素点,你如果想通过后续操作,让图片动起来,那就太天真了!每一次item的put都是像素的张贴,而不是对应图像从原来的位置移动到了新的位置,所以如果你想让图片在视觉上移动,那你需要在item贴图到下一位置之前,清除之前位置的item图片。
我自己的课设,偷了个懒:背景是纯色,每一个可移动的个体,它的背景也是同样的纯色,又因为人物是固定坐标移动,所以每次移动之后,原位置贴一块背景纯色块就解决问题了。这节省了做遮罩图的精力和时间,实现了同等的功能。
大家根据自己的游戏需求,动一动自己的脑筋,相信大家也能找到诀窍的!遮罩图可以看看b站河海大学的课程(搜“EasyX”),有讲到,不过图片还是得自己做,用PS。
4.播放音乐mciSendString(指令, 0, 0, 0);
后三个参数我们用不到,都写0即可。第一条指令我们也是固定用那么几条,看下面代码:
mciSendString(L"open .\Musics\VICTORY.mp3 alias v", 0, 0, 0); mciSendString(L"play v", 0, 0, 0); // mciSendString(L"play v repeat", 0, 0, 0); mciSendString(L"close v", 0, 0, 0);
open是打开音乐文件,格式可以是mp3,wav等等。
alias + 一串字符,这个意思就是给我们读取的音乐起一个别名,方便后面的操作,比如第一行代码的v换成C,那么第二行第三行的v也都要换成C。
play顾名思义,如果要循环播放,写成注释那样即可
close单次播放的音乐,播放完最好close一下,方便下一次的播放。(跟文件差不多,用完就close,避免很多奇怪的错误)
5.宽窄字符转换器
我也是从网上找的,不过网上找的代码有一部分参数不太对,我给调好了,大家改个变量名就行
宽字符:WCHAR 窄字符:char
宽字符转窄字符
// WCHAR转换为CHAR // 假设我们有一个char name_string[50]和一个WCHAR string_trans[50](长度最好一样) memset(name_string, 0, wcslen(string_trans) * 5 + 1); WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, string_trans, wcslen(string_trans) , name_string, sizeof(*name_string) * 50 / sizeof(name_string[0]), NULL, NULL);
窄字符转宽字符
// CHAR转换为WCHAR
memset(string_trans, 0, sizeof(string_trans));
MultiByteToWideChar(CP_ACP, 0, step_string, strlen(name_string) + 1, string_trans,
sizeof(string_trans) / sizeof(string_trans[0]));
6.读取键盘鼠标操作
这俩我放到一起写了,由于操作是一直有的,所以我们需要把键盘鼠标判断的代码放进while循环,具体一些小贴士我会只写写在下面代码里,作为注释。
void play()
{
MOUSEMSG m{}; // 记录鼠标消息
char input; // 按键输入
while(1)
{
if (MouseHit()) // 判断鼠标是否点击
{
m = GetMouseMsg();
if (m.uMsg == WM_LBUTTONDOWN) // 如果点击左键
// 输入WM之后,ide就会展开,这些参数同样是顾名思义,挺好理解的
{
// 游戏反馈
}
}
if (_kbhit())
{
input = _getch();
// 如果写的是getchar()的话,按下s之后需要回车才能把键盘输入真正传给input变量,而_getch()只会判断按下了什么键,然后直接把识别到的按下的键返回
if (input == 's' || input == 80)// s键或者↓键
if (input == 'w' || input == 72)// w键或者↑键
if (input == 'd' || input == 77)// d键或者→键
if (input == 'a' || input == 75)// a键或者←键
// 还有很多键位的ASCII码,大家的课设指导书结尾都会列出来,大家自行查询
}
}
}
文章到这里就告一段落啦!感谢大家阅读!
特别鸣谢:
我的祖国
CSDN各位大佬的小教程帮助我完成了课设
C语言课设课及指导老师
河海大学童老师的网课
和我讨论的同学们,太多了,不列举了哈哈
需要视频教程的话,可以反馈给我,感谢!
我的b站UID:23415007



