如何在控制台中移动坐标 x-y 上的点对象 - C++ OOP

Posted

技术标签:

【中文标题】如何在控制台中移动坐标 x-y 上的点对象 - C++ OOP【英文标题】:How to move a point object on co-ordinates x-y in console - C++ OOP 【发布时间】:2014-03-27 15:06:17 【问题描述】:

我正在做我的面向对象编程作业,其中要求我为孩子们创建一个接数游戏,以便他们在玩的过程中也可以学习数数。

在这里,我应该创建一个 Point 类和一个 x-y 坐标。在这里,我必须创建一个以 P(点对象作为参数)为参数的移位函数。此功能在用户按下键即箭头键时移动第一个点。

问题是我对在 c++ 中用于箭头键的实际关键字(如向上、向下、向左、向右移动)感到困惑,就像我们在普通游戏中用来移动物体或人一样! ???

下面是我的代码! 类点.h

#ifndef POINT_H
#define POINT_H

class Point

public:
    Point();                                    // Default Constructor
    Point(double, double, int);                // Three argument constructor
    void initialize(double, double, int);    
    void shift(Point p);                      // Shift the first point when user press keys
    void setValue(int value);
    int getValue() const;
    void setX();
    double getX() const;
    void setY();
    double gety() const;
    void AddPointValue(Point p2);             /*This function add the TWO points value  

    void displayPoint();                     //This will use to display value of point  
    bool checkCoordinates();
    bool checkTime();                        // Check time remaining
private:
    double x;
    double y;
    int value;
;

#endif

实施文件

#include <iostream>
#include <windows.h>
#include "point.h"



using namespace std;

Point::Point()    // Default Constructor

x = 0;
y = 0;
value = 0;


Point::Point(double x1, double y1, int value1)   // Three argument constructor
x = x1;
y = y1;
value = value1;



void Point::initialize(double init_x, double init_y, int init_value)

x = init_x;
y = init_y;
value = init_value;



void Point::shift(Point p)
if(p == VK_LEFT)


else if(p == VK_RIGHT)


else if(p == VK_UP)


else if(p == VK_DOWN)




它现在给我一个错误,不匹配运算符==(操作数类型'point'和'int')

【问题讨论】:

这可能会有所帮助:***.com/questions/8435923/getting-arrow-keys-from-cin 这是什么操作系统?答案可能因操作系统而异。 你是操作系统吗?如果我做对了,可能是窗户 是的操作系统,非常好,我可以用 Windows 术语来表达我的答案:) 谢谢。我在等:) 【参考方案1】:

point 和 int 的问题是因为您正在尝试将 2d 坐标与 ASCII 值 (VK_*) 进行比较,请将该部分更改为以下内容,它应该更易于维护:

Point Point::shift(Point p, int keyPress)

    Point maxSize = new Point();
    Point minSize = new Point();
    maxSize.x=80;
    maxSize.y=40; 
 //  Assuming a coordinate system of 0,0 (x,y) at top left of the display
    switch (keyPress)
    
      case (VK_LEFT):    // increment the x coord by 1 to go left
        p.x += 1;
        if (p.x < minSize.x) p.x = minSize.x;
        break;
      case (VK_RIGHT):    // decrement the x coord by 1 to go right
        p.x -= 1;
        if (p.x > maxize.x) p.x = maxSize.x;
        break;
      case (VK_UP):    // decrement the y coord by 1 to go up
        p.y -= 1;
        if (p.y < minSize.y) p.y = minSize.y;
        break;
      case (VK_DOWN):    // increment the y coord by 1 to go down
        p.y += 1;
        if (p.y > maxize.y) p.y = maxSize.y;
        break;
    
    return p;

您还必须检查 x 和 y 是否永远不会小于 0,因为这会使它们脱离显示/导致异常,具体取决于您如何构建代码和播放区域。

希望这对您的运动问题有所帮助,但如果您需要更多信息,请告诉我:)

【讨论】:

非常感谢。 “keyPress”在这里是变量还是按键事件? keyPress 将是一个从主游戏循环中读取的变量,将等同于最后按下的键的 VK 值。 那么它的数据类型是什么?会是布尔值吗? 它将是一个int,即使VK键码是十六进制的,你可以使用int:) 现在它在从点到非标量类型 'Point' 请求点 maxSize = new Point(); 的转换上面给我一个错误。 // 在这块代码中

以上是关于如何在控制台中移动坐标 x-y 上的点对象 - C++ OOP的主要内容,如果未能解决你的问题,请参考以下文章

如何围绕 x-y 坐标动态裁剪图像?

为啥网格在编辑模式下没有跟随骨架,如何获得骨架变形的网格上的点坐标?

怎样把百度地图上的点的经纬度 转换成wgs⑻4坐标呢

C ++ OpenGL从点到点反弹对象

Problem C: 平面上的点——Point类 (III)

Problem C: 平面上的点和线——Point类Line类 (III)