2017-02-09 2 views
-1

Я хочу сделать игру для пинг-понга, я застрял в движении мяча, я не хочу, чтобы он вышел из границ, который в случае 640 на 480. .... я не хочу, чтобы выйти из этой границы, но вместо того, чтобы двигаться снова, как и в случае столкновения ... Ниже приведен кодКак перемещать объект внутри определенной границы в C++

#include <iostream> 
#include <graphics.h> 
#include <stdio.h> 
#include <conio.h> 

int main() 
{ 
    int gd = DETECT, gm; 
    initgraph(&gd, &gm, "C:\\TC\\BGI"); 
    int x = 0, y = 0, i; 
    setcolor(RED); 
    setfillstyle(SOLID_FILL, YELLOW); 
    circle(x, y, 20); 
    floodfill(x, y, RED); 
loop1: 
    for (i = 0; i <= 45; i++) { 
     cleardevice(); 
     setcolor(RED); 
     setfillstyle(SOLID_FILL, YELLOW); 
     circle(x, y, 20); 
     floodfill(x, y, RED); 
     if (y == 460) { 
      break; 
     } 
     else { 
      x += 10; 
      y += 10; 
     } 
     delay(10); 
    } 

    for (i = 0; i <= 46; i++) { 
     cleardevice(); 
     setcolor(RED); 
     setfillstyle(SOLID_FILL, YELLOW); 
     circle(x, y, 20); 
     floodfill(x, y, RED); 
     if (x == 620) { 
      break; 
     } 
     else { 
      x += 10; 
      y -= 10; 
     } 
     delay(10); 
    } 

    for (i = 0; i <= 45; i++) { 
     cleardevice(); 
     setcolor(RED); 
     setfillstyle(SOLID_FILL, YELLOW); 
     circle(x, y, 20); 
     floodfill(x, y, RED); 
     if (y == 20) { 
      break; 
     } 
     else { 
      x -= 10; 
      y -= 10; 
     } 
     delay(10); 
    } 

    for (i = 0; i <= 45; i++) { 
     cleardevice(); 
     setcolor(RED); 
     setfillstyle(SOLID_FILL, YELLOW); 
     circle(x, y, 20); 
     floodfill(x, y, RED); 
     if (x == 20) { 
      goto loop1; 
     } 
     else { 
      x -= 10; 
      y += 10; 
     } 
     delay(10); 
    } 
    getch(); 
    closegraph(); 
} 
+1

озеро отступов, использование 'goto' и включение всех графического кода делает этот пример довольно трудно понять. Чем проще ваш пример, тем больше вероятность того, что кто-то найдет время, чтобы понять это. Вы должны правильно отступать и сводить свой пример к важным компонентам. Кроме того, использование локальных файлов ('' C: \\ TC \\ BGI '') делает этот пример недоступным для других, что еще больше обескураживает помощь. –

+0

Это худшее использование 'goto', которое вы могли бы иметь. Развернувшись вверх к метке, из цикла 'for' вернитесь в цикл' for', используя целое число 'i' в качестве счетчика циклов. В обоих циклах вы снова и снова вскакиваете. [Спагетти код] (https://en.wikipedia.org/wiki/Spaghetti_code) – PaulMcKenzie

ответ

0

простой способ для эффекта столкновения в граничит, заключается в том, что вы отрицаете y-компонент движения Понга, когда он «попадает» в верхнюю или нижнюю границу и отрицает x-компонент, когда он «попадает» в левую или правую границу.

Короткий пример кода:

int speedvector[2]; 
speedvector[0] = 10; 
speedvector[1] = 10; 

int pongposition[2]; 
pongposition[0] = 100; 
pongposition[1] = 100; 

Main game loop: 

while(gameon){ 
    if(pongposition[0] < 0 || pongposition[0] > 640){ 
    speedvector[0] = -speedvector[0]; 
    } 
    if(pongposition[1] < 0 || pongposition[1] > 480){ 
    speedvector[1] = -speedvector[1]; 
    } 
    pongposition[0] += speedvector[0]; 
    pongposition[1] += speedvector[1]; 
} 
Смежные вопросы