键盘、鼠标控制小球

题目:按下控制键时小球会惯性运动,通过鼠标来停住小球。

待解决问题:GetMouseMsg调用时会出现阻塞,在鼠标不动的情况下,小球有时会无缘无故停住。

// 鼠标控制.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "easyx.h"
#include "conio.h"

void main( )
{
	int i=320;//预设圆心x,y坐标
	int j=240;

	char c;//储存按键ASCII码

	MOUSEMSG m;//储存鼠标信息

	//初始化图形窗口
	initgraph(640,480);

	//预设画笔颜色
	setlinecolor(YELLOW);
	//预设填充颜色
	setfillcolor(BLUE);
	//画圆
	fillcircle(i,j,20);
	while(true)
	{
	//获取键盘信息
	while(!kbhit())
	{
		c=getch();//获取按键ASCII码
		//擦除旧圆
		setlinecolor(BLACK);
		setfillcolor(BLACK);
		fillcircle(i,j,20);

		//判断按键
		switch(c)
		{
		case 'a': 
			while(true)
			{
			m=GetMouseMsg();
			//擦除旧圆
			setlinecolor(BLACK);
			setfillcolor(BLACK);
			fillcircle(i,j,20);
			i=i-5;
			//边界检测
			if(i-20<=0 || i+20>=640 || j-20<=0 || j+20>=480)
			{
				i=320;
				j=240;
			}
			//重新绘制新圆
			setlinecolor(YELLOW);
			setfillcolor(BLUE);
			fillcircle(i,j,20);
			Sleep(13);
				if(m.uMsg==WM_LBUTTONDOWN)
					break;
			}
			break;
		case 'd': 		
			while(true)
			{

			m=GetMouseMsg();
			//擦除旧圆
			setlinecolor(BLACK);
			setfillcolor(BLACK);
			fillcircle(i,j,20);
			i=i+5;
			//边界检测
			if(i-20<=0 || i+20>=640 || j-20<=0 || j+20>=480)
			{
				i=320;
				j=240;
			}
			//重新绘制新圆
			setlinecolor(YELLOW);
			setfillcolor(BLUE);
			fillcircle(i,j,20);
			Sleep(15);
				if(m.uMsg==WM_LBUTTONDOWN)
					break;
			}
			break;
		case 'w': 	
			while(true)
			{

			m=GetMouseMsg();
			//擦除旧圆
			setlinecolor(BLACK);
			setfillcolor(BLACK);
			fillcircle(i,j,20);
			j=j-5;
			//边界检测
			if(i-20<=0 || i+20>=640 || j-20<=0 || j+20>=480)
			{
				i=320;
				j=240;
			}
			//重新绘制新圆
			setlinecolor(YELLOW);
			setfillcolor(BLUE);
			fillcircle(i,j,20);
			Sleep(15);

				if(m.uMsg==WM_LBUTTONDOWN)
					break;
			}
			break;
		case 's': 	
			while(true)
			{
			m=GetMouseMsg();
			//擦除旧圆
			setlinecolor(BLACK);
			setfillcolor(BLACK);
			fillcircle(i,j,20);
			j=j+5;
			//边界检测
			if(i-20<=0 || i+20>=640 || j-20<=0 || j+20>=480)
			{
				i=320;
				j=240;
			}
			//重新绘制新圆
			setlinecolor(YELLOW);
			setfillcolor(BLUE);
			fillcircle(i,j,20);
			Sleep(15);
				if(m.uMsg==WM_LBUTTONDOWN)
					break;
			}
			break;
		case 27 : exit(0);
		}
	}
	}
	getch();
	//关闭图形窗口
	closegraph();
}


 

你可能感兴趣的:(EasyX游戏编程,Easyx游戏编程)