D.V.D
Make a wish
- Reaction score
- 73
So I made a program that draws little squares that bounce of walls for eternity. Its not a very intensive program, when it's running, the CPU usage is 5-7% with other stuff running. The program runs through a main loop where box positions are updated and when the box hits a wall, its angle is changed and the loop steps back a index so it can rerun the index of the knocked back box to make it move. The problem is, when the box hits a wall, it stops for a moment before moving again. The other boxes are still moving however and there seems to be some times where every box stops moving for a moment before it hits a wall. I can't seem to find the problem for this as each box should be moved at the same pace. The actual window is a non modified visual studio C++ template for a window with my steup function called when paint is enabled. Here's the code:
Box Class.h
Box Class.cpp
Bouncy Boxes.h
Bouncy Boxes.cpp
Box Class.h
Code:
#include "stdafx.h"
#include <cmath>
class Box {
public:
// Box Image
COLORREF col;
int radius;
// Box Properties
float angle;
int speed;
int x;
int y;
/*
Box (int,int,int,float,COLORREF col);
~Box ();
void draw (HDC);
*/
};
Box CreateBox (int,int,int,float,COLORREF col);
void DrawBox (HDC,Box);
void ClearBox (HDC,Box);
Box Class.cpp
Code:
#include "stdafx.h"
#include "Box Class.h"
COLORREF BOX_CLASS_CLEAR = RGB(255,255,255);
Box CreateBox (int newx,int newy,int newspeed,float newang,COLORREF col) {
Box New = Box();
New.x=newx;
New.y=newy;
New.speed=newspeed;
New.angle=newang;
New.radius=4;
return New;
}
void ClearBox (HDC hdc,Box b) {
COLORREF clear = RGB(255,255,255);
for (short i=0; i < b.radius; i++) {
for (short t=0; t < b.radius; t++) {
SetPixel(hdc,b.x+i,b.y+t,clear);
}
}
}
void DrawBox (HDC hdc,Box b) {
for (short i=0; i < b.radius; i++) {
for (short t=0; t < b.radius; t++) {
SetPixel(hdc,b.x+i,b.y+t,b.col);
}
}
}
Bouncy Boxes.h
Code:
#include "stdafx.h"
#include "Box Class.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctime>
void setup (HDC);
void moveboxes (HDC);
Bouncy Boxes.cpp
Code:
#include "stdafx.h"
#include "Bouncy Boxes.h"
const int NUM_BOXES=5;
Box BOX_LIST [NUM_BOXES];
const int mapx=300;
const int mapy=300;
float DEGTORAD = 0.0019;
void setup (HDC hdc) {
COLORREF col = RGB(100,0,0);
srand(time(0));
for (short i=0; i < NUM_BOXES; i++) {
BOX_LIST[i]=CreateBox (rand()&300,rand()&300,3,rand()&360,col);
}
for (short i=0; i < 20; ) {
moveboxes(hdc);
Sleep(10);
}
}
void moveboxes (HDC hdc) {
int newx,newy;
for (short i=0; i < NUM_BOXES; i++) {
newx=int(BOX_LIST[i].x+BOX_LIST[i].speed*cos(float(BOX_LIST[i].angle*DEGTORAD)));
newy=int(BOX_LIST[i].y+BOX_LIST[i].speed*sin(float(BOX_LIST[i].angle*DEGTORAD)));
if (newx-1 < 0 || newy-1 < 0 ) {
BOX_LIST[i].angle+=45;
i-=1;
return;
}
else if ( newx-1 > mapx || newy-1 > mapy) {
BOX_LIST[i].angle+=45;
i-=1;
return;
}
else {
ClearBox(hdc,BOX_LIST[i]);
BOX_LIST[i].x=newx;
BOX_LIST[i].y=newy;
DrawBox(hdc,BOX_LIST[i]);
}
}
}