I got board so I made a program that can generate boxes and test collision for a ball. I know it's pretty boring but I wanted to know how games could generate objects willy nilly and interact with the enviroment. I am going to try and make a breakout type game with this. Also, I know the code is terrible optimized and poorly written (I'm lazy)
https://www.youtube....h?v=N_LhlV61BuI
/*****************************************************************/
/* */
/* CASIO fx-9860G SDK Library */
/* */
/* File name : [ProjectName].c */
/* */
/* Copyright (c) 2006 CASIO COMPUTER CO., LTD. */
/* */
/*****************************************************************/
#include "fxlib.h"
//****************************************************************************
// AddIn_main (Sample program main function)
//
// param : isAppli : 1 = This application is launched by MAIN MENU.
// : 0 = This application is launched by a strip in eACT application.
//
// OptionNum : Strip number (0~3)
// (This parameter is only used when isAppli parameter is 0.)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
struct objects {
unsigned char x, y, xx, yy, active;
} object[100]; //The boxes and their two opposite corners
struct ball {
unsigned short x, y, xx, yy, up, left;
} ball; //balls two opposite corners and what directions it is going
unsigned char index; //To know how many boxes have been made
void object_generate(unsigned short, unsigned short, unsigned short, unsigned short);// Sets the boxes cordinates and increases the index
void draw_objects(); //Draws all boxes that have been generated
void initialize_objects(); //Sets all boxes active variable and index to 0;
void move_ball(); //The heart of the program, moves the ball and sees if it has collided with a box and if so, delete and change direction
void draw_ball(); //Draw the ball
void initialize_ball(); //Setup the ball
void object_generate(unsigned short x, unsigned short y, unsigned short xx, unsigned short yy)
{
object[index].x = x;
object[index].y = y;
object[index].xx = xx;
object[index].yy = yy;
object[index].active = 1;
index++;
}
void draw_objects()
{
unsigned char i;
unsigned short x, y; //cordinates to draw the boxes
for (i = 0; i <= index; i++)
{
if (object[i].active)
{
for (x = 0; x <= object[i].xx-object[i].x; x++) //draw the top and bottom
{
/*
Bdisp_SetPoint_VRAM(object[i].x+x,object[i].y,0);// top
Bdisp_SetPoint_VRAM(object[i].x+x,object[i].yy,0);// bottom
*/ //If I needed to call draw_box multiple times I would delete this to erease the last iteration
Bdisp_SetPoint_VRAM(object[i].x+x,object[i].y,1);// top
Bdisp_SetPoint_VRAM(object[i].x+x,object[i].yy,1); // bottom
}
for (y = 0; y <= object[i].yy-object[i].y; y++)
{
/*
Bdisp_SetPoint_VRAM(object[i].x,object[i].y+y,0); //left
Bdisp_SetPoint_VRAM(object[i].xx,object[i].y+y,0); //bottom
*/ // same as above
Bdisp_SetPoint_VRAM(object[i].x,object[i].y+y,1); //left
Bdisp_SetPoint_VRAM(object[i].xx,object[i].y+y,1); //right
}
}
}
Bdisp_PutDisp_DD();
}
void initialize_objects()
{
unsigned char i;
index = 0;
for (i = 0; i <= 100; i++)
{
object[i].active = 0; //effectively turns of the box collission and wont be draw if draw_box is called again
}
}
void draw_ball(unsigned short x, unsigned short y, unsigned char put)
{
if (put)
{
Bdisp_SetPoint_VRAM(x,y,1);Bdisp_SetPoint_VRAM(x+1,y,1);Bdisp_SetPoint_VRAM(x+2,y,1);
Bdisp_SetPoint_VRAM(x,y+1,1);Bdisp_SetPoint_VRAM(x+1,y+1,1);Bdisp_SetPoint_VRAM(x+2,y+1,1);
Bdisp_SetPoint_VRAM(x,y+2,1);Bdisp_SetPoint_VRAM(x+1,y+2,1);Bdisp_SetPoint_VRAM(x+2,y+2,1);
} else
{
Bdisp_SetPoint_VRAM(x,y,0);Bdisp_SetPoint_VRAM(x+1,y,0);Bdisp_SetPoint_VRAM(x+2,y,0);
Bdisp_SetPoint_VRAM(x,y+1,0);Bdisp_SetPoint_VRAM(x+1,y+1,0);Bdisp_SetPoint_VRAM(x+2,y+1,0);
Bdisp_SetPoint_VRAM(x,y+2,0);Bdisp_SetPoint_VRAM(x+1,y+2,0);Bdisp_SetPoint_VRAM(x+2,y+2,0);
}
} //Ya ya, I know casio default library is terrible for drawing, but hey, im lazy!
void initialize_ball()
{
ball.x = 1;
ball.y = 1;
ball.xx = 3;
ball.yy = 3;
ball.up = 0;
ball.left = 0;
} //setup the ball
void move_ball()
{
unsigned char i, x, y;
if (ball.x <= 2)
ball.left = 0;
if (ball.xx >= 125)
ball.left = 1;
if (ball.y <= 3)
ball.up = 0;
if (ball.yy >= 60)
ball.up = 1;
//if bal hits the wall or sides change direction
for (i = 0; i <= index; i++) //collision detection
{
if (object[i].active) //if box isn't active, no need to see if its colliding
{
if (!(ball.xx < object[i].x) && !(ball.x > object[i].xx) && !(ball.yy < object[i].y) && !(ball.y > object[i].yy)) // colliding
{
object[i].active = 0;
if (ball.yy <= object[i].y || ball.y >= object[i].yy)
if (ball.x >= object[i].x || ball.xx <= object[i].xx) //top or bottom
{
if (ball.up)
ball.up = 0;
else ball.up = 1;
}
if (ball.xx <= object[i].x || ball.x >= object[i].xx)
if (ball.y <= object[i].yy || ball.yy >= object[i].y)// sides
{
if (ball.left)
ball.left = 0;
else ball.left = 1;
}
for (x = 0; x <= object[i].xx-object[i].x; x++)//erease the box we just hit
{
Bdisp_SetPoint_VRAM(object[i].x+x,object[i].y,0); //top/bottom
Bdisp_SetPoint_VRAM(object[i].x+x,object[i].yy,0);
}
for (y = 0; y <= object[i].yy-object[i].y; y++)
{
Bdisp_SetPoint_VRAM(object[i].x,object[i].y+y,0); //sides
Bdisp_SetPoint_VRAM(object[i].xx,object[i].y+y,0);
}
}
}
}
draw_ball(ball.x,ball.y,0); //erease the ball
if (ball.up)
{
ball.y--;
ball.yy--;
} else {
ball.y++;
ball.yy++;
}
if (ball.left)
{
ball.x--;
ball.xx--;
} else {
ball.x++;
ball.xx++;
} //change the cordinates based on direction
draw_ball(ball.x,ball.y,1); //draw ball at new cordinates
Bdisp_PutDisp_DD();
} //end of move_ball
void ticker()
{
move_ball();
}//this function serves no purpuse in this iteration of the program
void control()
{
unsigned short key;
while (1)
{
draw_ball(ball.x,ball.y,0);
GetKey(&key);
initialize_objects();
//This is the main feature of the program, this can easily be made to be mapped to a array to make a breakout game of sorts, which I plan to do
//it generates a box which the ball can interact with
object_generate(20,20,30,30);
object_generate(100,20,110,30);
object_generate(10,50,20,55);
object_generate(30,5,35,10);
object_generate(50,30,55,35);
draw_objects(); //draw the boxes that we just made
}//end of while
}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
Bdisp_AllClr_DDVRAM();
initialize_objects();
initialize_ball();
//This is the main feature of the program, this can easily be made to be mapped to a array to make a breakout game of sorts, which I plan to do
//it generates a box which the ball can interact with
object_generate(20,20,30,30);
object_generate(100,20,110,30);
object_generate(10,50,20,55);
object_generate(30,5,35,10);
object_generate(50,30,55,35);
draw_objects(); //draw the boxes that we just made
while(1){
SetTimer(1,25,ticker);
control();
}
return 1;
}
//****************************************************************************
//************** ****************
//************** Notice! ****************
//************** ****************
//************** Please do not change the following source. ****************
//************** ****************
//****************************************************************************
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
//****************************************************************************
// InitializeSystem
//
// param : isAppli : 1 = Application / 0 = eActivity
// OptionNum : Option Number (only eActivity)
//
// retval : 1 = No error / 0 = Error
//
//****************************************************************************
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section



