我正在进行面向对象的编程任务,其中我被要求创建一个为儿童捕捉数字的游戏,以便在他们享受时他们也学习计数。
在这里,我应该创建一个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)
{
}
}
它现在给我一个错误,即操作符不匹配==(操作数类型&#39;点&#39;和&#39; int&#39;)
答案 0 :(得分: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,因为它会使它们脱离显示/导致异常,具体取决于你如何构造代码和游戏区域。
希望这有助于解决您的运动问题,但如果您需要更多信息,请告知我们。)