All pastes #945741 Raw Edit

Someone

public c v1 · immutable
·published 2008-03-17 04:26 UTC
rendered paste body
// C Source File// Created 11/16/2007 08:39:39 PM// Delete or comment out the items you do not need.#define COMMENT_STRING         "Moon Buggy for the TI 89"#define COMMENT_PROGRAM_NAME   "Moon Buggy"#define COMMENT_AUTHORS        "Jeremy Salwen"#include <tigcclib.h>#include <stdlib.h>#define GROUND_HEIGHT LCD_HEIGHT-5;#define GROUND_INC 1#define BUGGY_X LCD_WIDTH-16volatile int counter=0;INT_HANDLER old_int_handler;static unsigned char lasersprite[] = {	0b11111110,};static unsigned char chasislight[] ={	0b00100000,};static unsigned char chasisdark[] = {	0b11000000,};static unsigned char wheel1light[] = {	0b00010000,	0b00010000,	0b00010000,	0b00010000,	0b00010000,	0b00010000,	0b00010000,	0b00011000,};static unsigned char wheel1dark[] = {	0b00001000,	0b00001000,	0b00001000,	0b00001000,	0b00001000,	0b00001000,	0b00001000,};static unsigned char wheel3light[] ={	0b1000001,};static unsigned char wheel3dark[] = {	0b01111110,};static unsigned char wheel2light[] = {	0b00100000,	0b01000000,	0b00000000,	0b00010000,	0b00001000,	0b00001000,	0b00000100,	0b00001000,};static unsigned char wheel2dark[] = {	0b00000000,	0b00100000,	0b00110000,	0b00010000,	0b00010000,	0b00001000,	0b00001000,	0b00000100,};static unsigned char wheel4light[] = {	0b00000100,	0b00001000,	0b00000100,	0b00010000,	0b00001000,	0b00010000,	0b00010000,	0b00100000,};static unsigned char wheel4dark[] = {	0b00000000,	0b00000100,	0b00001000,	0b00001000,	0b00010000,	0b00010000,	0b00100000,	0b00100000,};static unsigned int wheeloutlinelight[] = {	0b0000000001000000,	0b1000000000000000,	0b1000000000100000,	0b0100000000010000,	0b1000000000010000,	0b0100000000010000,	0b0100000000100000,	0b1000000000010000,	0b0100000000100000,};static unsigned int wheeloutlinedark[] = {	0b0100000000100000,	0b0100000000010000,	0b1000000000010000,	0b1000000000010000,	0b1000000000010000,	0b1000000000010000,	0b0100000000100000,	};static unsigned long buggytoplight[] = {	0b00000000000000111100000000000000,	0b00000000000000101011111011110000,	0b00000000000001000000000000001000,	0b00000000000001000000101001010000,	0b00000000000000100001101001011000,	0b00000000000000011010101011010000,	0b00000000000000100101011111101000,};static unsigned long buggytopdark[] ={	0b00000000000000011000000000000000,	0b00000000000000100100000000000000,	0b00000000000000100111111111110000,	0b00000000000000100111010110101000,	0b00000000000000100110010110100000,	0b00000000000000100101010100101000,	0b00000000000000011000000000000000,};//for holes in the groundtypedef struct segment {	short x;	short width;} segment;typedef struct point {	short x;	short y;} point;typedef struct rock {	point loc;	short health;} rock;typedef struct llnode {	struct llnode *next;	union data {		segment hole;		point location;	};} llnode;typedef struct rocknode {	llnode node;	short health;} rocknode;typedef struct world {	llnode *holesstart;	llnode *holesend;	llnode *lasersstart;	llnode *lasersend;	llnode *rocksstart;	llnode *rocksend;	short buggyHeight;	short scrollSpeed;} world;BOOL collision(point *object1, point *object2, point *object1dim, point *object2dim) {	if(object1->x+object1dim->x<object2->x) {		return FALSE;	}	if(object1->x>object2->x+object2dim->x) {		return FALSE;	}	if(object1->y+object1dim->y>object2->y) {		return FALSE;	}	if(object1->y<object2->y+object2dim->y) {		return FALSE;	}	return TRUE;}void removeNext(llnode *node) {	llnode *twoahead=node->next->next;	free(node->next);	node->next=twoahead;}void lose(world *w) {	}void collideCarAndRocks(world *w) {	llnode *rocktmp=w->rocksstart;	while(rocktmp!=NULL) {		if(collion(&(point){BUGGY_X,w->buggyHeight},&rocktmp->location,) {			lose(w);		}		rocktmp=rocktmp->next;	}}void collideLasersAndRocks(world *w) {  //TODO:optimize this	llnode *rocktmp=w->rocksstart;	llnode *rocklast=NULL;	llnode *lasertmp=w->lasersstart;	llnode *laserlast=NULL;	box rockbox;	box laserbox;	while(rocktmp!=NULL) {		while(lasertmp!=NULL) {			rockbox.upperleft=rocktmp->location;			rockbox.lowerright.x=rockbox.upperleft.x+ROCK_WIDTH;			rockbox.lowerright.y=rockbox.upperleft.y+ROCK_HEIGHT;			laserbox.upperleft=lasertmp->location;			laserbox.lowerright.x=laserbox.upperleft.x+LASER_WIDTH;			laserbox.lowerright.y=laserbox.upperleft.y+LASER_HEIGHT;			if(collision(&laserbox,&rockbox)) {				if(rocklast==NULL) {					free(rocktmp);				} else {					removeNext(rocklast);				}				if(laserlast==NULL) {					free(rocktmp);				} else {					removeNext(laserlast);				}			}			laserlast=lasertmp;			lasertmp=lasertmp->next;		}	}}void scrollWorld(world *w) {	llnode *tmp=w->holesstart;	while(tmp!=NULL) {		tmp->hole.x+=w->scrollSpeed;		tmp=tmp->next;	}	tmp=w->lasersstart;	while(tmp!=NULL) {		tmp->hole.x-=w->scrollSpeed;		tmp=tmp->next;	}	tmp=w->rocksstart;	while(tmp!=NULL) {		tmp->hole.x+=w->scrollSpeed;		tmp=tmp->next;	}}void cleanup(world *w) {	llnode *tmp;	while(w->holesstart->hole.x>160) {		tmp=w->holesstart->next;		free(w->holesstart);		w->holesstart=tmp;	}	while(w->rocksstart->location.x>160) {		tmp=w->rocksstart->next;		free(w->rocksstart);		w->rocksstart=tmp;	}	while(w->lasersstart->location.x<-6) {		tmp=w->lasersstart->next;		free(w->lasersstart);		w->lasersstart=tmp;	}}/* void renderWorld(world w) { //note:Render sounds more high tech than draw,  everything is XORED, so calling twice has no effect	Sprite16(BUGGY_X,w.buggyHeight,10,buggysprite,LCD_MEM,SPRT_XOR);	llnode *tmp=w.lasersstart;	while(tmp!=NULL) {		point p=tmp->location;		Sprite8(p.x,p.y,4,rocksprite,LCD_MEM,SPRT_XOR);		tmp=tmp->next;	}		tmp=w.rocksstart;	while(tmp!=NULL) {		point p=tmp->location;		Sprite8(p.x,p.y,1,lasersprite,LCD_MEM,SPRT_XOR);		tmp=tmp->next;	}		DrawLine(0,LCD_HEIGHT,LCD_WIDTH,LCD_HEIGHT,A_XOR);	tmp=w.holesstart;	while(tmp!=NULL) {		segment s=tmp->hole;		DrawLine(s.x,LCD_HEIGHT,s.x+s.width,LCD_HEIGHT,A_XOR);		tmp=tmp->next;	}		int b=GROUND_HEIGHT;	SCR_RECT r={{0,b,LCD_WIDTH,LCD_HEIGHT}};	ScrRectFill(&r,ScrRect,A_XOR);}*/void drawBuggy(short x, short y,char mode) {	Sprite32(x+0,y+0,7,buggytoplight,GrayGetPlane(LIGHT_PLANE),A_XOR);	Sprite8(x+15,y+15,1,chasislight,GrayGetPlane(LIGHT_PLANE),A_XOR);	Sprite16(x+0,y+10,9,wheeloutlinelight,GrayGetPlane(LIGHT_PLANE),A_XOR);	Sprite16(x+20,y+10,9,wheeloutlinelight,GrayGetPlane(LIGHT_PLANE),A_XOR);	Sprite32(x+0,y+0,7,buggytopdark,GrayGetPlane(DARK_PLANE),A_XOR);	Sprite16(x+0,y+11,7,wheeloutlinedark,GrayGetPlane(DARK_PLANE),A_XOR);	Sprite16(x+20,y+11,7,wheeloutlinedark,GrayGetPlane(DARK_PLANE),A_XOR);	Sprite8(x+15,y+15,1,chasisdark,GrayGetPlane(DARK_PLANE),A_XOR);	switch(mode) {		case 0:			Sprite8(x+2,y+11,8,wheel1light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+2,y+11,7,wheel1dark,GrayGetPlane(DARK_PLANE),A_XOR);			Sprite8(x+22,y+11,8,wheel1light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+22,y+11,7,wheel1dark,GrayGetPlane(DARK_PLANE),A_XOR);			break;		case 1:			Sprite8(x+2,y+11,8,wheel2light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+2,y+11,8,wheel2dark,GrayGetPlane(DARK_PLANE),A_XOR);			Sprite8(x+22,y+11,8,wheel2light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+22,y+11,8,wheel2dark,GrayGetPlane(DARK_PLANE),A_XOR);			break;		case 2:			Sprite8(x+2,y+14,1,wheel3light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+2,y+14,1,wheel3dark,GrayGetPlane(DARK_PLANE),A_XOR);			Sprite8(x+22,y+14,1,wheel3light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+22,y+14,1,wheel3dark,GrayGetPlane(DARK_PLANE),A_XOR);			break;		case 3:			Sprite8(x+2,y+11,8,wheel4light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+2,y+11,8,wheel4dark,GrayGetPlane(DARK_PLANE),A_XOR);			Sprite8(x+22,y+11,8,wheel4light,GrayGetPlane(LIGHT_PLANE),A_XOR);			Sprite8(x+22,y+11,8,wheel4dark,GrayGetPlane(DARK_PLANE),A_XOR);			break;	}}DEFINE_INT_HANDLER (my_int_handler) {	counter++;	ExecuteHandler(old_int_handler);}// Main Functionvoid _main(void){	old_int_handler=GetIntVec(AUTO_INT_5);	SetIntVec(AUTO_INT_5,my_int_handler);	ClrScr();	GrayOn();	char mode=0;	while(!kbhit()) {		drawBuggy(0,0,mode);		while(counter<2) {			;		}		counter=0;		drawBuggy(0,0,mode);		mode=(mode+1)%4;	}	GrayOff();	SetIntVec(AUTO_INT_5,old_int_handler);	exit(0);	int lastElement=0;	segment segments[80];	int i;	int dy=0;	int buggy=GROUND_HEIGHT-1;	while(!_keytest(RR_ESC)) {	}	// Place your code here.}