程序员的知识教程库

网站首页 > 教程分享 正文

讲给孩子听的C++游戏编程——跟随鼠标画圆

henian88 2024-09-10 14:18:35 教程分享 6 ℃ 0 评论


跟随鼠标位置画圆

我们要把看似复杂的大任务,分解成步骤清晰的小任务

  1. 要知道这次鼠标的位置(x,y)
  2. 根据这次的鼠标位置画圆,擦除之前位置的圆
  3. 以上两步不断重复——循环

获取一次鼠标位置

话不多说,我们先上代码。以下代码可以获取小绿旗被按下的那刻,鼠标的位置

#include<iostream>
#include<windows.h>
#include<graphics.h>
#include<conio.h>
#include<stdio.h>

int main(){
    POINT p;
    GetCursorPos(&p);  //GetCursorPos函数会获得鼠标的位置,然后存进这个参数里
    printf("X: %d Y: %d \n", p.x, p.y);
    _getch();
    return 0 ;
}

接下来让我们一起来来认识上面那段代码中的新朋友吧

结构体

什么是结构体:

概念都源自生活。生活里,有些东西很简单,比如数字8,字母A;但是更多的东西是由许多部分构成的。以一个纸上的点为例,如果要描述这个点,我们可能会用到点的位置,点的颜色,这些叫做点的属性,因为点有多个属性,所以我们可以把点当做一个结构体

在下面 的代码里,我们自己定义了一个结构体,取名为POINT,这个结构体的属性有整数x和整数y(红框部分)。结构体被定义出来之后,就像月饼模具

要想真的做出月饼来,我们需要用模具压一下。代码里的蓝框部分就是用POINT这个模板,制作一个实实在在的p。之后我们就可以通过p.x, p.y来获得p的x属性和y属性了


&p的含义

先打印&p来看一看


这段奇怪的数字和字母的组合,是p这个变量在计算机内存中的地址,也就是说 ,&p 是p这个变量在内存中的地址

  • &是一个运算符号,用来获得变量的地址,所以也叫取址符
  • 只要我们定义了一个变量,它都是有地址的。计算机是通过这个地址找到这个变量的。

所以,GetCursorPos(&p)是获取鼠标的位置,然后通过找到P的地址,把鼠标位置的值传给p,使得p.x的值是鼠标的x坐标,p.y的值是鼠标的y坐标

持续获取鼠标位置

知道了怎么获得鼠标位置,接下来只要我们把获得鼠标位置的代码放到while循环里面,程序就会一直去获得鼠标位置。鼠标移来移去的动作都被while循环时刻监视着。

// 如何获取鼠标位置
#include<iostream>
#include<windows.h>
#include<graphics.h>
#include<conio.h>
#include<stdio.h>

int main(){
    POINT p;
    while(1){
        GetCursorPos(&p);
        printf("X: %d Y: %d \n", p.x, p.y);
    }
    _getch();
    return 0 ;
}

画圆

之前的课程我们已经学过画圆的方式,就不多说了

initgraph(width, height);
fillcircle(x, y, r);
  • 想让圆心的坐标等于鼠标的坐标,怎么办?答案:fillcircle(p.x, p.y, r) //其中r要在之此前声明好

完整的代码

现在我们把前面的代码整理在一起,下面的不到20行代码,就实现了小球跟随鼠标移动的功能,怎么样,是不是也想动手试一试呢?

#include<iostream>
#include<windows.h>
#include<graphics.h>
#include<conio.h>
#include<stdio.h>

int main() {
    initgraph(600, 600);
    int r = 10;
    POINT p;
    while (1) {
        cleardevice();
        GetCursorPos(&p);
        fillcircle(p.x, p.y, r);
        Sleep(10);
    }
    _getch();
    return 0;
}

这就是实现鼠标跟随的最基本方式了,通过更深入的学习,我们可以利用鼠标跟随和其他方式做出下面的动画效果。这就是今天的内容,欢迎关注我们,了解更多内容

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表