Re: Linked Lists advice request
here's what I've got anyway... it's pug ugly, but it sort of works (a bit):
/* SHAPESHIFTER by J McNeill MAY 2007 UNIVERSITY OF YORK, DEPT OF ELECTRONICS */
#include <stdio.h>
#include "graphics_lib.h"
#include <math.h>
#include <conio.h>
//#include "console_lib.h" //for gotoxy (int x, int y)
#define PI 3.14159265
#define RETURN 13
#define LEFTARROW 75
#define RIGHTARROW 77
#define UPARROW 72
#define DOWNARROW 80
#define ROLL 97
#define BANK 122
#define PITCH 44
#define YAW 46
#define LENGTHEN 45
#define SHORTEN 61
#define ROTATIONCW 91
#define ROTATIONACW 93
//common line structure
typedef struct long_line_type {
int start_x, start_y;
int end_x, end_y;
int x;
int y;
int size;
char move;
int radius;
int colour;
struct long_line_type *prev;
struct long_line_type *next;
} line_type;
//triangle structure
struct triangle {
int corner1x;
int corner1y;
int corner2x;
int corner2y;
int corner3x;
int corner3y;
int colour;
float theta;
char move;
int new_x;
int new_y;
int x;
int y;
int corner1xtemp;
int corner1ytemp;
int corner2xtemp;
int corner2ytemp;
int corner3xtemp;
int corner3ytemp;
int centrepoint_x;
int centrepoint_y;
} tangle;
//line structure
typedef struct line_structure {
int start_x, start_y;
int end_x, end_y;
int colour;
struct lines *prev;
struct lines *next;
char move;
int new_start_x;
int new_start_y;
int new_end_x;
int new_end_y;
int mid_point_x;
int mid_point_y;
double theta;
char key_press;
} lin;
//square structure
struct rectangle {
int corner1x;
int corner1y;
int corner2x;
int corner2y;
int corner3x;
int corner3y;
int corner4x;
int corner4y;
int colour;
double theta;
struct rectangle *prev;
struct rectangle *next;
} square;
//circle structure
struct circle {
int cx;
int cy;
int radius;
int colour;
double theta;
} c;
struct circle *c_pointer;
void display_circle(struct circle *c_pointer);
void erase_circle(struct circle *c_pointer);
void get_circle(struct circle *c_pointer);
void c_menu(struct circle *c_pointer);
struct rectangle *square_pointer;
void display_square(struct rectangle *square_pointer);
void erase_square(struct rectangle *square_pointer);
void get_square(struct rectangle *square_pointer);
void square_menu(struct rectangle *square_pointer);
struct line_structure *line_pointer;
void display_line(struct line_structure *line_pointer);
void get_line(struct line_structure *line_pointer);
void erase_line(struct line_structure *line_pointer);
void rot_line(struct line_structure *line_pointer);
void line_menu(struct line_structure *line_pointer);
struct triangle *triangle_pointer;
void display_tangle(struct triangle *triangle_pointer);
void get_tangle(struct triangle *triangle_pointer);
void rotate_tangle(struct triangle *triangle_pointer);
void erase_tangle(struct triangle *triangle_pointer);
void display_temp_tangle(struct triangle *triangle_pointer);
void t_menu(struct triangle *triangle_pointer);
int menu(void);
/*
* THE MAIN FUNCTION - the programme starts executing here
*/
int main()
{
int i;
i = menu();
printf("exiting main(), i = %d\n", i);
return 0;
}
/* ********** functions *********** */
/*************/
/* MAIN MENU */
/*************/
int menu(void)
{
int i, choice1, choice2;
i = choice1 = choice2 = 0;
printf("Welcome to S H @ P E S H I F T E R\n ");
printf("This is a vector drawing programme\n ");
printf("Enter data to plot and draw a shape\n\n");
printf("Menu \n");
printf("Choose a shape: \n");
printf("1: New Line \n");
printf("2: New Circle \n");
printf("3: New Triangle \n");
printf("4: New Square \n");
printf("5: Exit Programme \n");
printf("Enter your choice: ");
while(choice1 < 1 || choice1 > 5) {
scanf("%d", &choice1);
switch(choice1) {
case 1:
printf("You selected draw Line\n");
line_menu(&line);
break;
case 2:
printf("You selected draw Circle\n , choice1 = %d \n", choice1);
c_menu(&circle);
break;
case 3:
printf("You selected draw Triangle\n");
t_menu(&c);
break;
case 4:
printf("You selected draw Square\n");
square_menu(&square);
break;
case 5:
printf("You selected exit (press CTRL-C) \n");
break;
default:
printf("Not recognised in main menu, try again \n");
} //close switch1
} //close while1
return 0;
} //close function
/*****************/
/* LINE MENU */
/*****************/
void line_menu(struct line_structure *line_pointer)
{
char move;
lin line;
setbkcolor(WHITE);
setcolor(BLACK);
printf("Controls:\n");
printf("Use the arrow buttons to move the shape\n");
printf("Use the A & Z, < & >, buttons to warp the shape\n");
printf("Use the + & - buttons to resize the shape\n");
printf("Use the [ & ] buttons to rotate the shape\n");
printf("press any key to continue\n");
getch();
cleardevice();
get_line(&line);
initwindow(600, 400);
display_line(&line);
do
{
move=getch();
if( move == 0 )
move=getch();
switch(move)
{
//move left
case 77:
{
erase_line(&line);
line.start_x++;
line.end_x++;
line.colour;
display_line(&line);
}
break;
//move right
case 75:
{
erase_line(&line);
line.start_x--;
line.end_x--;
line.colour;
display_line(&line);
}
break;
//move up
case 72:
{
erase_line(&line);
line.start_y--;
line.end_y--;
line.colour;
display_line(&line);
}
break;
//move down
case 80:
{
erase_line(&line);
line.start_y++;
line.end_y++;
line.colour;
display_line(&line);
}
break;
//rotate x cw
case 97: //"A"
{
erase_line(&line);
line.start_x++;
line.end_x--;
line.colour;
display_line(&line);
}
break;
//rotate x acw
case 122: // "Z"
{
erase_line(&line);
line.start_x--;
line.end_x++;
line.colour;
display_line(&line);
}
break;
//rotate y cw
case 44: //">"
{
erase_line(&line);
line.start_y++;
line.end_y--;
line.colour;
display_line(&line);
}
break;
//rotate y acw
case 46: //"<"
{
erase_line(&line);
line.start_y--;
line.end_y++;
line.colour;
display_line(&line);
}
break;
//lengthen
case 45: //"-" adds both start/end x/y
{
erase_line(&line);
//display_line(&line);
line.start_x++;
line.start_y++;
line.end_x--;
line.end_y--;
line.colour;
display_line(&line);
}
break;
//shorten
case 61: // "=" adds both, but doesn't erase
{
erase_line(&line);
//display_line(&line);
line.start_x--;
line.start_y--;
line.end_x++;
line.end_y++;
line.colour;
//erase_line(&line);
display_line(&line);
}
break;
//+theta
case 91: // "[" rotation matrix!?!
{
//cleardevice();
//rot_line(&line);
//display_line(&line);
erase_line(&line);
line.new_start_x = line.start_x * cos((line.theta * PI)/180) - line.start_y * sin((line.theta * PI)/180);
line.new_start_y = line.start_x * sin((line.theta * PI)/180) + line.start_y * cos((line.theta * PI)/180);
line.new_end_x = line.end_x * cos((line.theta) * PI/180) - line.end_y * sin((line.theta) * PI/180);
line.new_end_y = line.end_x * sin((line.theta) * PI/180) + line.end_y * cos((line.theta) * PI/180);
line.theta--;
line.new_start_x++;
line.new_start_y++;
//erase_line(&line);
line.colour;
rot_line(&line);
//display_line(&line);
}
break;
//-theta
case 93: // "]" rotation matrix!?!
{
//rot_line(&line);
erase_line(&line);
//display_line(&line);
line.new_start_x = line.start_x * sin((line.theta * PI)/180) - line.start_y * cos((line.theta * PI)/180);
line.new_start_y = line.start_x * cos((line.theta * PI)/180) + line.start_y * sin((line.theta * PI)/180);
line.new_end_x = line.end_x * sin((line.theta * PI)/180) - line.start_y * cos((line.theta * PI)/180);
line.new_end_y = line.end_x * cos((line.theta * PI)/180) + line.start_y * sin((line.theta * PI)/180);
line.theta++;
line.new_start_x++;
line.new_start_y++;
//erase_line(&line);
//display_line(&line);
line.colour;
rot_line(&line);
}
break;
} //switch
}
while(move!=13);
getch();
cleardevice();
printf("Press ctrl-c to close the programme");
getch();
// return 0;
}
/********* LINE DRAWING FUNCTIONS ***********/
//new display line code based on midpoint
void display_line(struct line_structure *line_pointer)
{
setcolor(line_pointer->colour);
line(line_pointer->mid_point_x - line_pointer->start_x,line_pointer->mid_point_y - line_pointer->start_y,line_pointer->mid_point_x + line_pointer->end_x,line_pointer->mid_point_y + line_pointer->end_y);
}
void display_new_line(struct line_structure *line_pointer)
{
setcolor(line_pointer->colour);
line(line_pointer->mid_point_x - line_pointer->new_start_x,line_pointer->mid_point_y - line_pointer->new_start_y,line_pointer->mid_point_x + line_pointer->new_end_x,line_pointer->mid_point_y + line_pointer->new_end_y);
}
void erase_line(struct line_structure *line_pointer)
{
setcolor(0);
line(line_pointer->start_x,line_pointer->start_y,line_pointer->end_x,line_pointer->end_y);
}
void get_line(struct line_structure *line_pointer)
{
printf("Please enter co-ordinates for the start and of your line.\nThe range is (x=0-600; y=0-400): \n start x: ");
scanf("%d", &line_pointer->start_x);
printf(" start y: ");
scanf("%d", &line_pointer->start_y);
printf(" end x: ");
scanf("%d", &line_pointer->end_x);
printf(" end y: ");
scanf("%d", &line_pointer->end_y);
printf("Choose an integer representing a colour from the following options\n");
printf("0\tBLACK\t\t\t8\tDARKGREY\n");
printf("1\tBLUE\t\t\t9\tLIGHTBLUE\n");
printf("2\tGREEN\t\t\t10\tLIGHTGREEN\n");
printf("3\tCYAN\t\t\t11\tLIGHTCYAN\n");
printf("4\tRED\t\t\t12\tLIGHTRED\n");
printf("5\tMAGENTA\t\t\t13\tLIGHTMAGENTA\n");
printf("6\tBROWN\t\t\t14\tYELLOW\n");
printf("7\tLIGHTGREY\t\t15\tWHITE\n\n");
printf("What colour do you want the shape to be?:");
scanf("%d", &line_pointer->colour);
//printf("and a number for the angle (0-360): ");
//scanf("%lf", &line_pointer->theta);
printf("and a number for mid point x (0-600): ");
scanf("%lf", &line_pointer->mid_point_x);
printf("and a number for mid point y (0-400): ");
scanf("%lf", &line_pointer->mid_point_y);
printf("\nPlotting shape now...check graphics window\n");
//printf("%d, %d, %d, %d, <-and there they are. \n", line_pointer->start_x, line_pointer->start_y, line_pointer->end_x, line_pointer->end_y, line_pointer->colour);
}
void rot_line(struct line_structure *line_pointer)
{
setcolor(line_pointer->colour);
line(line_pointer->new_start_x,line_pointer->new_start_y,line_pointer->new_end_x,line_pointer->new_end_y);
}
/****************************/
/*********************/
/* CIRCLE MENU */
/*********************/
void c_menu(struct circle *c_pointer)
{
char move;
setbkcolor(WHITE);
setcolor(BLACK);
c_pointer = &c;
printf("Controls:\n");
printf("Use the arrow buttons to move the shape\n");
printf("Use the A & Z, < & >, buttons to warp the shape\n");
printf("Use the + & - buttons to resize the shape\n");
printf("Use the [ & ] buttons to rotate the shape\n");
printf("press any key to continue\n");
getch();
cleardevice();
get_circle(c_pointer);
//printf("The origin is at (%d,%d), and the radius is (%d).\n");
//printf("It's colour is code %d \n", c.cx, c.cy, c.radius, c.colour);
initwindow(600, 400);
display_circle(c_pointer);
do
{
move=getch();
if( move == 0 )
move=getch();
switch(move)
{
//move left
case 77:
{
erase_circle(&c);
c.cx++;
c.cx++;
c.colour;
display_circle(&c);
}
break;
//move right
case 75:
{
erase_circle(&c);
c.cx--;
c.cx--;
c.colour;
display_circle(&c);
}
break;
//move up
case 72:
{
erase_circle(&c);
c.cy--;
c.cy--;
c.colour;
display_circle(&c);
}
break;
//move down
case 80:
{
erase_circle(&c);
c.cy++;
c.cy++;
c.colour;
display_circle(&c);
}
break;
//rotate x cw
case 97: //"A"
{
erase_circle(&c);
c.cx++;
c.cx--;
c.colour;
display_circle(&c);
}
break;
//rotate x acw
case 122: // "Z"
{
erase_circle(&c);
c.cx--;
c.cx++;
c.colour;
display_circle(&c);
}
break;
//lengthen
case 45: //"-"
{
erase_circle(&c);
c.radius++;
c.colour;
display_circle(&c);
}
break;
//shorten
case 61: // "="
{
erase_circle(&c);
c.radius--;
c.colour;
display_circle(&c);
}
break;
} //switch
}
while(move!=13);
getch();
cleardevice();
printf("Press ctrl-c to close the programme");
getch();
//return 0;
}
/************** CIRCLE DRAWING FUNCTIONS **************/
void display_circle(struct circle *c_pointer)
{
setcolor(c_pointer->colour);
circle(c_pointer->cx, c_pointer->cy, c_pointer->radius);
}
void erase_circle(struct circle *c_pointer)
{
setcolor(0);
circle(c_pointer->cx, c_pointer->cy, c_pointer->radius);
}
void get_circle(struct circle *c_pointer)
{
printf("Please enter co-ordinates for the centre-point of your circle.\nThe range is (x=0-600; y=0-400): \n centre co-ordinate 1x: ");
scanf ("%d", &c_pointer->cx);
printf(" centre co-ordinate 1y: ");
scanf ("%d", &c_pointer->cy);
printf(" radius: ");
scanf ("%d", &c_pointer->radius);
printf("and a number for the colour (0-15): ");
scanf ("%d", &c_pointer->colour);
printf("%d, %d, %d, %d, %d, %d, %d, %d, %d <-and there they are. \n", c_pointer->cx, c_pointer->cy, c_pointer->radius, c_pointer->colour);
}
/****************************/
/*********************/
/* TRIANGLE MENU */
/*********************/
void t_menu(struct triangle *triangle_pointer)
{
char move;
triangle_pointer = &tangle;
setbkcolor(WHITE);
setcolor(BLACK);
printf("Controls:\n");
printf("Use the arrow buttons to move the shape\n");
printf("Use the A & Z, < & >, buttons to warp the shape\n");
printf("Use the + & - buttons to resize the shape\n");
printf("Use the [ & ] buttons to rotate the shape\n");
printf("press any key to continue\n");
getch();
cleardevice();
get_tangle(triangle_pointer);
initwindow(600, 400);
display_tangle(triangle_pointer);
rotate_tangle(triangle_pointer);
do
{
move=getch();
if( move == 0 )
move=getch();
switch(move)
{
//move left
case 77:
{
erase_tangle(&tangle);
tangle.corner1x++;
tangle.corner2x++;
tangle.corner3x++;
tangle.colour;
display_tangle(&tangle);
}
break;
//move right
case 75:
{
erase_tangle(&tangle);
tangle.corner1x--;
tangle.corner2x--;
tangle.corner3x--;
tangle.colour;
display_tangle(&tangle);
}
break;
//move up
case 72:
{
erase_tangle(&tangle);
tangle.corner1y--;
tangle.corner2y--;
tangle.corner3y--;
tangle.colour;
display_tangle(&tangle);
}
break;
//move down
case 80:
{
erase_tangle(&tangle);
tangle.corner1y++;
tangle.corner2y++;
tangle.corner3y++;
tangle.colour;
display_tangle(&tangle);
}
break;
//rotate x cw
case 97: //"A"
{
erase_tangle(&tangle);
tangle.corner1x++;
tangle.corner1y--;
tangle.corner2x--;
tangle.corner2y--;
tangle.corner3x++;
tangle.corner3y++;
tangle.colour;
display_tangle(&tangle);
}
break;
//rotate x acw
case 122: // "Z"
{
erase_tangle(&tangle);
tangle.corner1x--;
tangle.corner1y++;
tangle.corner2x++;
tangle.corner2y++;
tangle.corner3x--;
tangle.corner3y--;
tangle.colour;
display_tangle(&tangle);
}
break;
//rotate y cw
case 44: //">"
{
erase_tangle(&tangle);
tangle.corner1x++;
tangle.corner1y++;
tangle.corner2x++;
tangle.corner2y--;
tangle.corner3x--;
tangle.corner3y--;
tangle.colour;
display_tangle(&tangle);
}
break;
//rotate y acw
case 46: //"<"
{
erase_tangle(&tangle);
tangle.corner1x--;
tangle.corner1y--;
tangle.corner2x--;
tangle.corner2y++;
tangle.corner3x++;
tangle.corner3y++;
tangle.colour;
display_tangle(&tangle);
}
break;
//lengthen
case 45: //"-" adds both start/end x/y
{
erase_tangle(&tangle);
tangle.corner1x++;
tangle.corner1y++;
tangle.corner2x++;
tangle.corner2y--;
tangle.corner3x--;
tangle.corner3y--;
tangle.colour;
display_tangle(&tangle);
}
break;
//shorten
case 61: // "=" adds both, but doesn't erase
{
erase_tangle(&tangle);
tangle.corner1x--;
tangle.corner1y--;
tangle.corner2x--;
tangle.corner2y++;
tangle.corner3x++;
tangle.corner3y++;
tangle.colour;
display_tangle(&tangle);
}
break;
//tangle rotate
case 91: // "["
{
erase_tangle(&tangle);
rotate_tangle(&tangle);
tangle.colour;
display_temp_tangle(&tangle);
}
break;
//-tangle rotate
case 93: // "]"
{
erase_tangle(&tangle);
rotate_tangle(&tangle);
tangle.colour;
display_temp_tangle(&tangle);
}
break;
} //switch
}
while(move!=13);
getch();
cleardevice();
printf("Press ctrl-c to close the programme");
getch();
//return 0;
}
/************* TRIANGLE DRAWING FUNCTIONS ***************/
void display_tangle(struct triangle *triangle_pointer)
{
setcolor(triangle_pointer->colour);
line(triangle_pointer->corner1x, triangle_pointer->corner1y, triangle_pointer->corner2x, triangle_pointer->corner2y);
line(triangle_pointer->corner2x, triangle_pointer->corner2y, triangle_pointer->corner3x, triangle_pointer->corner3y);
line(triangle_pointer->corner3x, triangle_pointer->corner3y, triangle_pointer->corner1x, triangle_pointer->corner1y);
//setfillstyle(SOLID_FILL, WHITE);
//floodfill(tangle.corner1x, tangle.corner1y, tangle.colour);
}
void erase_tangle(struct triangle *triangle_pointer)
{
setcolor(0);
line(triangle_pointer->corner1x, triangle_pointer->corner1y, triangle_pointer->corner2x, triangle_pointer->corner2y);
line(triangle_pointer->corner2x, triangle_pointer->corner2y, triangle_pointer->corner3x, triangle_pointer->corner3y);
line(triangle_pointer->corner3x, triangle_pointer->corner3y, triangle_pointer->corner1x, triangle_pointer->corner1y);
}
void display_temp_tangle(struct triangle *triangle_pointer)
{
setcolor(triangle_pointer->colour);
line(triangle_pointer->corner1xtemp, triangle_pointer->corner1ytemp, triangle_pointer->corner2xtemp, triangle_pointer->corner2ytemp);
line(triangle_pointer->corner2xtemp, triangle_pointer->corner2ytemp, triangle_pointer->corner3xtemp, triangle_pointer->corner3ytemp);
line(triangle_pointer->corner3xtemp, triangle_pointer->corner3ytemp, triangle_pointer->corner1xtemp, triangle_pointer->corner1ytemp);
}
void get_tangle(struct triangle *triangle_pointer)
{
printf("Please enter co-ordinates for the corners of your triangle.\nThe range is (x=0-600; y=0-400): \n corner 1x: ");
scanf ("%d", &triangle_pointer->corner1x);
printf(" corner 1y: ");
scanf ("%d", &triangle_pointer->corner1y);
printf(" corner 2x: ");
scanf ("%d", &triangle_pointer->corner2x);
printf(" corner 2y: ");
scanf ("%d", &triangle_pointer->corner2y);
printf(" corner 3x: ");
scanf ("%d", &triangle_pointer->corner3x);
printf(" corner 3y: ");
scanf ("%d", &triangle_pointer->corner3y);
printf(" centre point x: ");
scanf ("%d", &triangle_pointer->centrepoint_x);
printf(" centre point y: ");
scanf ("%d", &triangle_pointer->centrepoint_y);
//printf("Enter an angle to rotate by:\n");
//scanf ("%d", &triangle_pointer->theta);
printf("and a number for the colour (0-15): ");
scanf ("%d", &triangle_pointer->colour);
printf("%d, %d, %d, %d, %d, %d, %d, %d, %d, %d <-and there they are. \n", triangle_pointer->corner1x, triangle_pointer->corner1y, triangle_pointer->corner2x, triangle_pointer->corner2y, triangle_pointer->corner3x, triangle_pointer->corner3y, triangle_pointer->centrepoint_x, triangle_pointer->centrepoint_y, triangle_pointer->theta, triangle_pointer->colour);
}
void rotate_tangle(struct triangle *triangle_pointer)
{
tangle.corner1xtemp = (cos(tangle.corner1x-tangle.centrepoint_x)*tangle.corner1x+tangle.centrepoint_x);
tangle.corner1ytemp = (-sin(tangle.corner1y-tangle.centrepoint_y)*tangle.corner1x+tangle.centrepoint_y);
tangle.corner2xtemp = (sin(tangle.corner2x-tangle.centrepoint_x)*tangle.corner1x+tangle.centrepoint_x);
tangle.corner2ytemp = (cos(tangle.corner2y-tangle.centrepoint_y)*tangle.corner1x+tangle.centrepoint_y);
tangle.corner3xtemp = (sin(tangle.corner3x-tangle.centrepoint_x)*tangle.corner1x+tangle.centrepoint_x);
tangle.corner3ytemp = (cos(tangle.corner3y-tangle.centrepoint_y)*tangle.corner1x+tangle.centrepoint_y);
}/*
void rotate_tangle(struct triangle *triangle_pointer)
{
tangle.corner1xtemp = cos(tangle.theta) * tangle.corner1x - sin(tangle.theta) * tangle.corner1y;
tangle.corner1ytemp = sin(tangle.theta) * tangle.corner1x + cos(tangle.theta) * tangle.corner1y;
tangle.corner2xtemp = cos(tangle.theta) * tangle.corner2x - sin(tangle.theta) * tangle.corner2y;
tangle.corner2ytemp = sin(tangle.theta) * tangle.corner2x + cos(tangle.theta) * tangle.corner2y;
tangle.corner3xtemp = cos(tangle.theta) * tangle.corner3x - sin(tangle.theta) * tangle.corner3y;
tangle.corner3ytemp = sin(tangle.theta) * tangle.corner3x + cos(tangle.theta) * tangle.corner3y;
}*/
/****************************/
/*********************/
/* SQUARE MENU */
/*********************/
void square_menu(struct rectangle *square_pointer)
{
char move;
//rect square;
square_pointer = □
setbkcolor(WHITE);
setcolor(BLACK);
printf("Controls:\n");
printf("Use the arrow buttons to move the shape\n");
printf("Use the A & Z, < & >, buttons to warp the shape\n");
printf("Use the + & - buttons to resize the shape\n");
printf("Use the [ & ] buttons to rotate the shape\n");
printf("press any key to continue\n");
getch();
cleardevice();
get_square(square_pointer);
initwindow(600, 400);
display_square(square_pointer);
do
{
move=getch();
if( move == 0 )
move=getch();
switch(move)
{
//move left
case 77:
{
erase_square(&square);
square.corner1x++;
square.corner2x++;
square.corner3x++;
square.corner3x++;
square.colour;
display_square(&square);
}
break;
//move right
case 75:
{
erase_square(&square);
square.corner1x--;
square.corner2x--;
square.corner3x--;
square.corner3x--;
square.colour;
display_square(&square);
}
break;
//move up
case 72:
{
erase_square(&square);
square.corner1y--;
square.corner2y--;
square.corner3y--;
square.corner3y--;
square.colour;
display_square(&square);
}
break;
//move down
case 80:
{
erase_square(&square);
square.corner1y++;
square.corner2y++;
square.corner3y++;
square.corner3y++;
square.colour;
display_square(&square);
}
break;
//rotate x cw
case 97: //"A"
{
erase_square(&square);
square.corner1x++;
square.corner2x--;
square.corner3x++;
square.corner3x--;
square.corner1y++;
square.corner2y--;
square.corner3y++;
square.corner3y--;
square.colour;
display_square(&square);
}
break;
//rotate x acw
case 122: // "Z"
{
erase_square(&square);
square.corner1x--;
square.corner2x++;
square.corner3x--;
square.corner3x++;
square.corner1y--;
square.corner2y++;
square.corner3y--;
square.corner3y++;
square.colour;
display_square(&square);
}
break;
//rotate y cw
case 44: //">"
{
erase_square(&square);
square.corner1x++;
square.corner2x++;
square.corner3x--;
square.corner3x--;
square.corner1y++;
square.corner2y++;
square.corner3y--;
square.corner3y--;
square.colour;
display_square(&square);
}
break;
//rotate y acw
case 46: //"<"
{
erase_square(&square);
square.corner1x--;
square.corner2x--;
square.corner3x++;
square.corner3x++;
square.corner1y--;
square.corner2y--;
square.corner3y++;
square.corner3y++;
square.colour;
display_square(&square);
}
break;
//lengthen
case 45: //"-"
{
erase_square(&square);
square.corner1x++;
square.corner2x++;
square.corner3x++;
square.corner3x++;
square.corner1y++;
square.corner2y++;
square.corner3y++;
square.corner3y++;
square.colour;
display_square(&square);
}
break;
//shorten
case 61: // "="
{
erase_square(&square);
square.corner1x--;
square.corner2x--;
square.corner3x--;
square.corner3x--;
square.corner1y--;
square.corner2y--;
square.corner3y--;
square.corner3y--;
square.colour;
display_square(&square);
}
/*
break;
//tangle rotate
case 91: // "["
{
erase_square(&square);
square.colour;
//display_square(&square);
rotate_square(&square);
display_temp_square(&square);
}
break;
//-tangle rotate
case 93: // "]"
{
erase_square(&square);
square.colour;
//display_square(&square);
rotate_square(&square);
display_temp_square(&square);
}
break;*/
} //switch
}
while(move!=13);
getch();
cleardevice();
printf("Press ctrl-c to close the programme");
getch();
//return 0;
}
/************* SQUARE DRAWING FUNCTIONS ***************/
void display_square(struct rectangle *square_pointer)
{
setcolor(square_pointer->colour);
line(square_pointer->corner1x, square_pointer->corner1y, square_pointer->corner2x, square_pointer->corner2y);
line(square_pointer->corner2x, square_pointer->corner2y, square_pointer->corner3x, square_pointer->corner3y);
line(square_pointer->corner3x, square_pointer->corner3y, square_pointer->corner4x, square_pointer->corner4y);
line(square_pointer->corner4x, square_pointer->corner4y, square_pointer->corner1x, square_pointer->corner1y);
}
void erase_square(struct rectangle *square_pointer)
{
setcolor(0);
line(square_pointer->corner1x, square_pointer->corner1y, square_pointer->corner2x, square_pointer->corner2y);
line(square_pointer->corner2x, square_pointer->corner2y, square_pointer->corner3x, square_pointer->corner3y);
line(square_pointer->corner3x, square_pointer->corner3y, square_pointer->corner4x, square_pointer->corner4y);
line(square_pointer->corner4x, square_pointer->corner4y, square_pointer->corner1x, square_pointer->corner1y);
}
void get_square(struct rectangle *square_pointer)
{
printf("Please enter co-ordinates for the corners of your square.\nThe range is (x=0-600; y=0-400): \n corner 1x: ");
scanf ("%d", &square_pointer->corner1x);
printf(" corner 1y: ");
scanf ("%d", &square_pointer->corner1y);
printf(" corner 2x: ");
scanf ("%d", &square_pointer->corner2x);
printf(" corner 2y: ");
scanf ("%d", &square_pointer->corner2y);
printf(" corner 3x: ");
scanf ("%d", &square_pointer->corner3x);
printf(" corner 3y: ");
scanf ("%d", &square_pointer->corner3y);
printf(" corner 4x: ");
scanf ("%d", &square_pointer->corner4x);
printf(" corner 4y: ");
scanf ("%d", &square_pointer->corner4y);
printf("and a number for the colour (0-15): ");
scanf ("%d", &square_pointer->colour);
printf("%d, %d, %d, %d, %d, %d, %d, %d, %d <-and there they are. \n", square_pointer->corner1x, square_pointer->corner1y, square_pointer->corner2x, square_pointer->corner2y, square_pointer->corner3x, square_pointer->corner3y, square_pointer->corner4x, square_pointer->corner4y, square_pointer->colour);
}
/****************************/
any ideas how to make it return to the main menu?
I get a shed load of warnings though, but it still runs
Quote:
--------------------Configuration: shapeshifter - Win32 Debug--------------------
Compiling...
shapeshifter.c
C:\Documents and Settings\....\shapeshifter\shapeshifter\shapeshift er.c(179) : warning C4047: 'function' : 'struct line_structure *' differs in levels of indirection from 'void (__cdecl *)(int ,int ,int ,i
nt )'
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(179) : warning C4024: 'line_menu' : different types for formal and actual parameter 1
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(183) : warning C4047: 'function' : 'struct circle *' differs in levels of indirection from 'void (__cdecl *)(int ,int ,int )'
C:\Documents and Settings\..\shapeshifter\shapeshifter\shapeshifter .c(183) : warning C4024: 'c_menu' : different types for formal and actual parameter 1
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(187) : warning C4133: 'function' : incompatible types - from 'struct circle *' to 'struct triangle *'
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(353) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(354) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(355) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(356) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(372) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(373) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(374) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(375) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(879) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(880) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(882) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(883) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(885) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
C:\Documents and Settings\...\shapeshifter\shapeshifter\shapeshifte r.c(886) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data
shapeshifter.obj - 0 error(s), 19 warning(s)
|
as nobody seems to know the trig, there's no point asking for help with filling the shape alone; but for anyone who is interested, here's some almost useful links I've been trying to use:
http://www.euclideanspace.com/maths/geometry/rotations/index.htm
http://www.euclideanspace.com/maths/geometry/rotations/euler/index.htm#sample
http://www.siggraph.org/education/materials/HyperGraph/modeling/mod_tran/2dconc.htm
|