#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
struct spaceship { // create the ship
int x, y;
char callsign[51];
};
void shiprandloc(spaceship *ship, int maxrange) { //randomize location
ship->x = rand() % maxrange;
ship->y = rand() % maxrange;
}
int shipdetcol(spaceship *ship1, spaceship *ship2, float colrange) { //if they collide return a 1
colrange < 10;
return 1;
}
int main()
{
int maxloc = 100, maxcol = 10;
int numloops;
cout << "Enter the Number of Collisions to Simulate: ";
cin >> numloops;
for (int i = 0; i < numloops; i++) {
int loopcnt = 0;
spaceship *ship1, *ship2;
ship1 = new spaceship;
ship2 = new spaceship;
strcpy_s(ship1->callsign, "Red1");
strcpy_s(ship2->callsign, "Blue1");
shiprandloc(ship1, maxloc);
shiprandloc(ship2, maxloc);
d = sqrt((ship1->x - ship2->x)*(ship1->y - ship2->y)); //find distance between the two ships.
while (!shipdetcol(ship1, ship2, maxcol)) {
++loopcnt;
}
delete ship1, ship2;
}
return 0;
}
用于检查距离的平方根函数不起作用,并且碰撞发生碰撞时返回1,如果未击中则返回0。我想念什么?
答案 0 :(得分:1)
这是人类想象中的野兽
delete ship1, ship2;
删除ship2
,但不删除ship1
。这里的逗号被视为序列(逗号)运算符,这种表达的结果是最后一个子表达式的结果。
您的函数始终返回1。您可能表示这样的意思
int shipdetcol(spaceship &ship1, spaceship &ship2, float colrange)
{
return colrange > sqrt(abs(((ship1.x - ship2.x)*(ship1.y - ship2.y)));
}
请注意,您需要坐标之间差的绝对值。
最后,它是C ++,所以不要使用:
#include <string.h>
#include <math.h>
使用
#include <cstring>
#include <cmath>
不使用
char callsign[51];
使用
#include <string>
std::string callsign;
现在您可以这样做:
ship1 = new spaceship { 0, 0, "Red1"};
答案 1 :(得分:0)
sqrt((ship1->x - ship2->x)*(ship1->y - ship2->y));
您的sqrt会尝试取一个数字的平方根,但是如果为负,will cause a domain error to occur.因此,您应该检查任何减法是否得出负数,因为它可能会使a的乘法结果也是负数,弄乱了结果。
在这里:
colrange < 10;
return 1;
您的代码不会检查 IF 排列是否小于10,它只是在编写表达式。应该是:
if(colrange<10){
return 1;
}
else
{
return 0;
}