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

问题描述 投票:0回答:1

我正在做面向对象的编程任务,要求我为孩子们创建一个捉数字游戏,以便他们在享受游戏的同时也学习计数。

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

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

以下是我的代码!类Point.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')

c++ oop dev-c++
1个回答
0
投票

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,因为这将使它们不显示/导致异常,具体取决于您构造代码和播放区域的方式。

希望这有助于解决您的运动问题,但是如果您需要更多信息,请告诉我:)


0
投票

@@ GMasucci您能帮我吗?我必须开发一个游戏。细节在这里捕捉数字的游戏Childers更喜欢计算机游戏,而不是学习数学。因此,要教小学生,我们的动机是设计一款游戏,使他们在享受游戏的同时也学习计数以下是工作示例:假设下面的图片是您的计算机屏幕。您的儿童应用程序必须满足以下最低要求。额外的功能将不胜感激。所有上述要求都是强制性的。•第一个数字(对象)在屏幕坐标为(0,0)的屏幕角处从零开始。•对于第二个数字,请生成1到100之间的随机数以及随机坐标。•十个点随机生成为假数。如果您触摸这些数字,您将会输掉。•现在,儿童使用箭头键向左,向上,向下向右移动第一个数字以到达第二个数字。•当第一个数字到达第二个数字的坐标时。将两个数字相加。现在,结果值变为第一个数字,并再次生成第二个数字,如步骤2所示。•当孩子们完成加分500分时,游戏将结束。•对于每个加法,请提供一个可以加数字的时间。如果时间到了,而您没有到达座标,那么您将输掉比赛。如果您已经访问过该坐标,则无法上,下,左或下。使用我们在上两个讲座中讨论的Point类的概念(对象)来完成这项任务。

您的.h应该包含这些功能才能满足上述要求

© www.soinside.com 2019 - 2024. All rights reserved.