easyx(键盘操作,音频输出)

键盘操作

获取键盘信息

getch()

getch需要包括头文件  #include  ,且getch是有返回值的。

比如说要获得键盘上的上下左右按键,那么就有不同于acsii码表的一组数值

  • 上:72
  • 下:80
  • 左:75
  • 右:77

所以用getch获取键盘信息可以这么用


while(1)
{
cleardevice();
setfillcolor(RED);
fillcircle(x,y,20);

int key = _getch();


switch (key)
		{
			//上键
		case 72:
		case'w':
		case'W':
			y-=10;
			printf("上键\n");
			break;
			//左键
		case 75:
		case 'a':
		case 'A':
			x-=10;
			printf("左键\n");
			break;
			//下键
		case 80 :
		case 's':
		case 'S':
			y+=10;
			printf("下键\n");
			break;
			//右键
		case 77 :
		case 'd':
		case 'D':
			x+=10;
			printf("右键\n");
			break;
		}
}

表达出来的效果就是:

easyx(键盘操作,音频输出)_第1张图片

easyx(键盘操作,音频输出)_第2张图片

 GetAsyncKeyState()

与getch不同的是,getch只能控制直走不能斜着走,而此函数可以斜着走;

    • 上:VK_UP
    • 下:VK_DOWN
    • 左:VK_LEFT
    • 右:VK_RIGHT

代码表示

int x=0,y=0;
while(1)
{
   setfillcolor(RED);
   fillcircle(x,y,20);
   cleardevice();




if (GetAsyncKeyState(VK_UP))//上键
		{
			y -= 5;
		}
		if (GetAsyncKeyState(VK_DOWN))//下键
		{
			y += 5;
		}
		if (GetAsyncKeyState(VK_LEFT))//左键
		{
			x -= 5;
		}
		if (GetAsyncKeyState(VK_RIGHT))//右键
		{
			x += 5;
		}
}

在每次循环用cleardevice后,发现会导致每一次移动小球都会使得屏幕闪动,那么此时就要创建一个缓冲区

BeginBatchDraw和EndBatchDraw—缓冲区(批量绘图)

这俩个函数分别放在绘图之前和绘图之后,这样就会有一个缓冲区;

原理:在每次进行小球的运动操作时,都会现在缓冲区内进行变化然后再输出到当前屏幕内;

音频播放

头文件包含

#include

#include//必须在graphics.h后面

#pragma comment(lib,"WINMM.LIB")  //静态库

打开,播放音乐 mciSendString()

打开:mciSendString("open  音乐文件",NULL,0,NULL);

播放:mciSendString("paly 音乐文件",NULL,0,NULL);

关闭:mciSendString("close 音乐文件",NULL,0,NULL);

当音乐文件比较长时,可以在打开音频的音乐文件后面加上alias  新名字,下次再次提及到这个音乐文件的时候可以用新名字代替;

如:

    mciSendString("open C:\\Users\\HUAWEI\\Music\\入睡.mp3 alias BGM", NULL, 0, NULL);
    mciSendString("play BGM repeat", NULL, 0, NULL);

你可能感兴趣的:(计算机外设)