Jump to content



Photo
- - - - -

Breakout Game


  • Please log in to reply
No replies to this topic

#1 GodOfCows

GodOfCows

    Casio Addict

  • Members
  • PipPipPip
  • 79 posts
  • Gender:Male

  • Calculators:
    fx-9860gii, fx-9750gii, TI-92, TI-89, TI-83 Plus

Posted 07 January 2019 - 08:50 PM

This is currently my version of the Breakout game on the FX-9860GII. It is super simple right now, I plan on adding a rotating map list and power ups. The code has redundancy because some parts are either left over or have not been implemented yet or just poorly written. 

 

The map is a 10x5 with fixed block sizes but I think I might add another size (vertical block)

 

I'd add the executable but I don't know how.

 

Also, I have not heavily commented yet, so the code might not be easy to figure out its function

 

video:https://youtu.be/sOmuUH4pjUA

/*****************************************************************/
/*                                                               */
/*   CASIO fx-9860G SDK Library                                  */
/*                                                               */
/*   File name : [ProjectName].c                                 */
/*                                                               */
/*   Copyright (c) 2006 CASIO COMPUTER CO., LTD.                 */
/*                                                               */
/*****************************************************************/
#include "fxlib.h"
#include "stdio.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
//
//****************************************************************************


/********************
*********************
Variables
*********************
********************/

//Global variables
unsigned short score, level, highscore, life, powerups, destroyed;


struct objects {
	unsigned char x, y, xx, yy, active, type;

} object[100]; 

struct ball { 
	unsigned short x, y, xx, yy, up, left, life;
} ball; 

unsigned char index; 
//Map data:

struct player {
	unsigned short x, y, xx, direction, middle; //direction = 0 (left), 1 (right), 2 (not moving)
} player;

//Maps

const char map1[] = { //all maps are 15 wide, 6 down

1,1,1,1,1,1,1,1,1,1,
1,0,1,1,1,1,1,0,1,1,
1,1,0,0,1,0,0,1,1,1,
1,0,1,1,1,1,1,0,1,1,
1,1,1,1,1,1,1,1,1,1

};

/********************
*********************
End of Variables
*********************
********************/

//prototype functions; The F### is the id of the function, just search that and it will take you to the beginnding of it (esear for me)
void intro(); //F1
void load_next_level(unsigned char*);  //F2
void draw_ball(); //F3
void initialize_objects(); // F4
void initialize_ball(); // F5
void object_generate(unsigned short, unsigned short, unsigned short, unsigned short); // F6
void draw_objects(); // F7
void draw_player(); //F8
void move_ball(); //F9
void initialize_game(); //F10
int move_player(); //F11
void game_loop(); //F12
void control(); //F13
//end of prototype functions

/***************
****************
Intro 
****************
***************/

void intro() //F1
{
	Bdisp_AllClr_DDVRAM(); 
	PrintXY(0,0,"Breakout Game",0);
	PrintXY(0,20,"Made By: GodOfCows",0);
	Bdisp_PutDisp_DD();
	Sleep(2000);
	Bdisp_AllClr_DDVRAM();
}

/***************
****************
End of the intre
****************
***************/

/**************
***************
Draw Level Number 
***************
**************/

void load_next_level(unsigned char* map) //F2
{
unsigned char i, x, y, xx, yy;
unsigned char string[20];
Bdisp_AllClr_DDVRAM();
initialize_objects();
initialize_ball();

KillTimer(1);
sprintf(&string, "Current Score: %d", score);
PrintXY(0,0,"Next Level, Coming Up!", 0);
PrintXY(0,20,string,0);
Bdisp_PutDisp_DD();
Sleep(2000);
Bdisp_AllClr_DDVRAM();

x = 8;
y = 0;
xx = 16;
yy = 5;
for (i = 0; i < 50; i++)///
{
if (map[i])
object_generate(x,y,xx,yy);

//
//add in special abilities here
//

x+=10;
xx+=10;
if (i == 9 || i == 19 || i == 29 || i == 39 || i == 49)
{
y+=7;
yy+=7;
x = 8;
xx = 16;
}

}

draw_objects();
SetTimer(1,50,game_loop);
} 
/*************
**************
End of draw level number function
**************
*************/

/*************
**************
Draw Ball function 
**************
*************/

void draw_ball(unsigned short x, unsigned short y, unsigned char put) //F3
{ 

	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);
	}
}

/************
*************
End of Draw Ball
*************
************/

/***********
************
Initializing functions 
************
***********/

void initialize_objects() //F4
{
	unsigned char i;
	index = 0;
	for (i = 0; i <= 100; i++)
	{
		object[i].x = object[i].y = object[i].xx = object[i].yy = object[i].active = object[i].type = 0; //all variables in the structure set to zero
	}
} //end of initialize_objects()

//////////

void initialize_ball() //F5
{
ball.x = 63;
ball.y = 51;
ball.xx = 65;
ball.yy = 53;
ball.up = 1;
ball.left = 0;
ball.life = 1;
} //end of initialize_ball

/***********
************
End of Initializing functions
************
***********/

/**********
***********
Object Generate
***********
**********/

void object_generate(unsigned short x, unsigned short y, unsigned short xx, unsigned short yy) //F6
{ 
	
	object[index].x = x;
	object[index].y = y;
	object[index].xx = xx;
	object[index].yy = yy;
	object[index].active = 1;
	index++;

}

/*********
**********
End of object_generate
**********
*********/

/*********
**********
Draw Objects
**********
*********/

void draw_objects() //F7
{
	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(); 
}

/*********
**********
End of Draw Objects
**********
*********/



/*********
**********
Draw Player
**********
*********/

void draw_player(unsigned char erease) //F8
{
	if (!erease)
	{
	Bdisp_SetPoint_VRAM(player.x-1,player.y,0);
	Bdisp_SetPoint_VRAM(player.x,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+1,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+2,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+3,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+4,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+5,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+6,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+7,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+9,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+10,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+11,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+12,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+13,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+14,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+15,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+16,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+17,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+18,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+19,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+20,player.y,0);
	Bdisp_SetPoint_VRAM(player.x+21,player.y,0);

	}	
	
	if (erease)
	{
	Bdisp_SetPoint_VRAM(player.x,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+1,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+2,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+3,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+4,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+5,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+6,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+7,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+8,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+9,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+10,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+11,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+12,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+13,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+14,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+15,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+16,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+17,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+18,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+19,player.y,1);
	Bdisp_SetPoint_VRAM(player.x+20,player.y,1);
	}	
	
}

/*********
**********
End of draw player
**********
*********/


/*********
**********
Move Ball
**********
*********/

void move_ball() //F9
{
	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 >= 63)
	{
		ball.life = 0;
	}

//Hit play?
if (ball.xx > player.x && ball.xx < player.middle && ball.yy == player.y+1)
{
	ball.left = 1;
	ball.up = 1;
} else if (ball.x > player.middle && ball.x < player.xx && ball.yy == player.y+1)
{
	ball.left = 0;
	ball.up = 1;
} else if (ball.x > player.x && ball.xx < player.xx && ball.yy == player.y+1)
{
	ball.up = 1;
}

for (i = 0; i <= index; i++)
{
	if (object[i].active) 
	{

		
		if (!(ball.xx < object[i].x) && !(ball.x > object[i].xx) && !(ball.yy < object[i].y) && !(ball.y > object[i].yy)) 
		{
			score+=10;
			destroyed++;
			if (score > highscore)
				highscore = score;

			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) 
			{
				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)
			{
				if (ball.left)
					ball.left = 0;
				else ball.left = 1;
			}

for (x = 0; x <= object[i].xx-object[i].x; x++)
			{
				Bdisp_SetPoint_VRAM(object[i].x+x,object[i].y,0); 
				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); 
				Bdisp_SetPoint_VRAM(object[i].xx,object[i].y+y,0);

			}




		}



}
}

draw_ball(ball.x,ball.y,0); 

if (ball.up)
{
	ball.y--;
	ball.yy--;
} else {
	ball.y++;
	ball.yy++;
}

if (ball.left)
{
	ball.x--;
	ball.xx--;
} else {
	ball.x++;
	ball.xx++;
} 
draw_ball(ball.x,ball.y,1); 
Bdisp_PutDisp_DD();
} 

/*********
**********
End of Move Ball
**********
*********/

/***********
************
Initialize Game
************
***********/

void initialize_game() //F10
{
	Bdisp_AllClr_DDVRAM();
	initialize_objects();
	initialize_ball();
	destroyed = 0;
	player.x = 58;
	player.middle = player.x+10;
	player.y = 60;
	player.xx = 78;
	player.direction = 2;
	score = highscore = powerups = 0;
	level = 1;
	life = 5;

}

/***********
************
End of Initialize Game
************
***********/


/***********
************
Move Player
************
***********/

int move_player() //F11
{
	if (player.direction == 2)
		return 0;
	else if (player.direction == 0 && player.x >= 4)
	{
		draw_player(0);
		player.x-=4;
		player.xx-=4;
		player.middle-=4;
		player.direction = 2;
		draw_player(1);
	} else if (player.direction ==  1 && player.xx < 123)
	{
		draw_player(0);
		player.x+=4;
		player.xx+=4;
		player.middle+=4;
		player.direction = 2;
		draw_player(1);
	} 

}
/***********
************
End of Move Player 
************
***********/

/***********
************
Game Loop
************
***********/

void game_loop() //F12
{
unsigned char string[20];
move_ball();
move_player();
draw_player(0);
draw_player(1);
if (ball.life == 0)
{
	Bdisp_AllClr_DDVRAM();
	initialize_ball();
	draw_objects();
	life--;

}
if (destroyed == index)
{
	destroyed = 0;
	level++;
	load_next_level(&map1); //replace later
}


if (!life)
{
	KillTimer(1); //KILL GAME LOOP // WHERE WE LEFT OFF
	Bdisp_AllClr_DDVRAM();
	PrintXY(0,0,"Game Over!", 0);
	sprintf(&string, "Your Score: %d", score);
	PrintXY(0,20,string,0);
	Bdisp_PutDisp_DD();
	Sleep(3000);
	initialize_game();
	SetTimer(1,50,game_loop);
}

}

/***********
************
End of Game Loop
************
***********/

void control() //F13
{
unsigned int key;


while (1)
{
	GetKey(&key);


switch (key) 
{
	case KEY_CTRL_LEFT:
	if (player.x != 0)
	{
player.direction = 0;
	}
	break;

	case KEY_CTRL_RIGHT:
	if (player.xx != 126)
	{
player.direction = 1;
	}

	break;
}


} //while end



} //void end


int AddIn_main(int isAppli, unsigned short OptionNum)
{

    while(1){
        intro();
       	initialize_game();
       	load_next_level(&map1);
       	SetTimer(1,50,game_loop);
        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







0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users