如何在控制台中移动坐标 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的主要内容,如果未能解决你的问题,请参考以下文章
为啥网格在编辑模式下没有跟随骨架,如何获得骨架变形的网格上的点坐标?