我在C ++中有一个带有头文件的源文件
#include<graphics.h>
图形库似乎不在include
文件夹中,我从互联网上下载并将graphics
和winbgim
头文件复制到{{1} }文件夹include
进入libbgi.a
文件夹,然而,当我来运行源文件时,我会收到大量错误。
这是源文件;
lib
运行时,此文件出现
# include <iostream>
# include <graphics.h>
# include <stdlib.h>
# include <conio.h>
# include <math.h>
# include <dos.h>
class Planet
{
private:
int x;
int y;
int rx;
int ry;
int color;
int radius;
int position;
float displacement;
char* Buffer;
public:
Planet( ) { x=y=rx=ry=radius=0; }
~Planet( ) { delete Buffer; }
Planet(constint,constint,constint,constfloat);
void Show( );
void Move( );
void ShowOrbit( );
void GetNextPosition( );
};
Planet::Planet(constint _rx,constint _ry,constint _radius,constfloat _displacement)
{
rx=_rx;
ry=_ry;
x=(319+rx);
y=240;
radius=_radius;
displacement=_displacement;
position=0;
}
void Planet::ShowOrbit( )
{
setcolor(1);
ellipse(320,240,0,360,rx,ry);
}
void Planet::Show( )
{
color=(random(14)+8);
if(color==8 || color==14 || color==16)
color=(random(6)+1);
Buffer=newchar[imagesize((x-(radius+3)),(y-(radius+3)),
(x+radius+3),(y+radius+3))];
getimage((x-(radius+3)),(y-(radius+3)),(x+radius+3),(y+radius+3),Buffer);
setcolor(color);
setfillstyle(1,color);
pieslice(x,y,0,360,radius);
setcolor(11);
circle(x,y,radius);
}
void Planet::Move( )
{
putimage((x-(radius+3)),(y-(radius+3)),Buffer,0);
delete Buffer;
GetNextPosition( );
Buffer=newchar[imagesize((x-(radius+3)),(y-(radius+3)),
(x+(radius+3)),(y+(radius+3)))];
getimage((x-(radius+3)),(y-(radius+3)),(x+(radius+3)),
(y+(radius+3)),Buffer);
setcolor(color);
setfillstyle(1,color);
pieslice(x,y,0,360,radius);
setcolor((15-color));
circle(x,y,radius);
}
void Planet::GetNextPosition( )
{
float angle=(displacement*position);
x=(int)(rx*cosl(angle)+320+0.5);
y=(int)(ry*sinl(angle)+240+0.5);
if((y==240 || y==239) && x>320)
position=1;
position++;
}
void main( )
{
int driver=VGA;
int mode=VGAHI;
int error_code;
initgraph(&driver,&mode,"..\\Bgi");
error_code=graphresult( );
if(error_code!=grOk)
{
restorecrtmode( );
textmode(BW80);
clrscr( );
cout<<" \n Fatal Error : Graphic Driver not initialized"<<endl;
cout<<" Error Reason : "<<grapherrormsg(error_code)<<endl;
cout<<" \n Press any key to exit...";
getch( );
exit(1);
}
setlinestyle(0,0,3);
setcolor(7);
rectangle(0,0,getmaxx( ),getmaxy( ));
setlinestyle(0,0,0);
for(int count=0;count<5000;count++)
putpixel(random(640),random(480),random(15));
settextstyle(2,0,7);
setcolor(9);
outtextxy(15,10,"Solar");
outtextxy(16,10,"Solar");
outtextxy(16,11,"Solar");
setcolor(3);
outtextxy(72,10,"System");
outtextxy(73,10,"System");
outtextxy(73,11,"System");
setcolor(11);
outtextxy(22,27,"Simulation");
outtextxy(23,27,"Simulation");
outtextxy(23,28,"Simulation");
setcolor(7);
settextstyle(2,0,4);
outtextxy(10,465,"Press any key to exit.");
setcolor(14);
setfillstyle(1,14);
pieslice(320,240,0,360,12);
setcolor(12);
circle(320,240,12);
setcolor(4);
circle(320,240,13);
Planet Mercury(50,30,8,0.0175);
Planet Venus(80,55,8,0.0155);
Planet Earth(110,80,8,0.0135);
Planet Mars(140,105,8,0.0115);
Planet Jupiter(170,130,8,0.0095);
Planet Saturn(200,155,8,0.0075);
Planet Uranus(230,180,8,0.0055);
Planet Neptune(260,205,8,0.0035);
Planet Pluto(290,230,8,0.0015);
Mercury.ShowOrbit( );
Mercury.Show( );
Venus.ShowOrbit( );
Venus.Show( );
Earth.ShowOrbit( );
Earth.Show( );
Mars.ShowOrbit( );
Mars.Show( );
Jupiter.ShowOrbit( );
Jupiter.Show( );
Saturn.ShowOrbit( );
Saturn.Show( );
Uranus.ShowOrbit( );
Uranus.Show( );
Neptune.ShowOrbit( );
Neptune.Show( );
Pluto.ShowOrbit( );
Pluto.Show( );
do
{
delay(25);
Mercury.Move( );
Venus.Move( );
Earth.Move( );
Mars.Move( );
Jupiter.Move( );
Saturn.Move( );
Uranus.Move( );
Neptune.Move( );
Pluto.Move( );
}
while(!kbhit( ));
getch( );
closegraph( );
}
错误
// The winbgim library, Version 6.0, August 9, 2004
// Written by:
// Grant Macklem (Grant.Macklem@colorado.edu)
// Gregory Schmelter (Gregory.Schmelter@colorado.edu)
// Alan Schmidt (Alan.Schmidt@colorado.edu)
// Ivan Stashak (Ivan.Stashak@colorado.edu)
// Michael Main (Michael.Main@colorado.edu)
// CSCI 4830/7818: API Programming
// University of Colorado at Boulder, Spring 2003
// ---------------------------------------------------------------------------
// Notes
// ---------------------------------------------------------------------------
// * This library is still under development.
// * Please see http://www.cs.colorado.edu/~main/bgi for information on
// * using this library with the mingw32 g++ compiler.
// * This library only works with Windows API level 4.0 and higher (Windows 95, NT 4.0 and newer)
// * This library may not be compatible with 64-bit versions of Windows
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// Macro Guard and Include Directives
// ---------------------------------------------------------------------------
#ifndef WINBGI_H
#define WINBGI_H
#include <windows.h> // Provides the mouse message types
#include <limits.h> // Provides INT_MAX
#include <sstream> // Provides std::ostringstream
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// Definitions
// ---------------------------------------------------------------------------
// Definitions for the key pad extended keys are added here. When one
// of these keys are pressed, getch will return a zero followed by one
// of these values. This is the same way that it works in conio for
// dos applications.
#define KEY_HOME 71
#define KEY_UP 72
#define KEY_PGUP 73
#define KEY_LEFT 75
#define KEY_CENTER 76
#define KEY_RIGHT 77
#define KEY_END 79
#define KEY_DOWN 80
#define KEY_PGDN 81
#define KEY_INSERT 82
#define KEY_DELETE 83
#define KEY_F1 59
#define KEY_F2 60
#define KEY_F3 61
#define KEY_F4 62
#define KEY_F5 63
#define KEY_F6 64
#define KEY_F7 65
#define KEY_F8 66
#define KEY_F9 67
// Line thickness settings
#define NORM_WIDTH 1
#define THICK_WIDTH 3
// Character Size and Direction
#define USER_CHAR_SIZE 0
#define HORIZ_DIR 0
#define VERT_DIR 1
// Constants for closegraph
#define CURRENT_WINDOW -1
#define ALL_WINDOWS -2
#define NO_CURRENT_WINDOW -3
// The standard Borland 16 colors
#define MAXCOLORS 15
enum colors { BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY,
LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE };
// The standard line styles
enum line_styles { SOLID_LINE, DOTTED_LINE, CENTER_LINE, DASHED_LINE, USERBIT_LINE };
// The standard fill styles
enum fill_styles { EMPTY_FILL, SOLID_FILL, LINE_FILL, LTSLASH_FILL, SLASH_FILL,
BKSLASH_FILL, LTBKSLASH_FILL, HATCH_FILL, XHATCH_FILL, INTERLEAVE_FILL,
WIDE_DOT_FILL, CLOSE_DOT_FILL, USER_FILL };
// The various graphics drivers
enum graphics_drivers { DETECT, CGA, MCGA, EGA, EGA64, EGAMONO, IBM8514, HERCMONO,
ATT400, VGA, PC3270 };
// Various modes for each graphics driver
enum graphics_modes { CGAC0, CGAC1, CGAC2, CGAC3, CGAHI,
MCGAC0 = 0, MCGAC1, MCGAC2, MCGAC3, MCGAMED, MCGAHI,
EGALO = 0, EGAHI,
EGA64LO = 0, EGA64HI,
EGAMONOHI = 3,
HERCMONOHI = 0,
ATT400C0 = 0, ATT400C1, ATT400C2, ATT400C3, ATT400MED, ATT400HI,
VGALO = 0, VGAMED, VGAHI,
PC3270HI = 0,
IBM8514LO = 0, IBM8514HI };
// Borland error messages for the graphics window.
#define NO_CLICK -1 // No mouse event of the current type in getmouseclick
enum graph_errors { grInvalidVersion = -18, grInvalidDeviceNum = -15, grInvalidFontNum,
grInvalidFont, grIOerror, grError, grInvalidMode, grNoFontMem,
grFontNotFound, grNoFloodMem, grNoScanMem, grNoLoadMem,
grInvalidDriver, grFileNotFound, grNotDetected, grNoInitGraph,
grOk };
// Write modes
enum putimage_ops{ COPY_PUT, XOR_PUT, OR_PUT, AND_PUT, NOT_PUT };
// Text Modes
enum horiz { LEFT_TEXT, CENTER_TEXT, RIGHT_TEXT };
enum vertical { BOTTOM_TEXT, VCENTER_TEXT, TOP_TEXT }; // middle not needed other than as seperator
enum font_names { DEFAULT_FONT, TRIPLEX_FONT, SMALL_FONT, SANS_SERIF_FONT,
GOTHIC_FONT, SCRIPT_FONT, SIMPLEX_FONT, TRIPLEX_SCR_FONT,
COMPLEX_FONT, EUROPEAN_FONT, BOLD_FONT };
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// Structures
// ---------------------------------------------------------------------------
// This structure records information about the last call to arc. It is used
// by getarccoords to get the location of the endpoints of the arc.
struct arccoordstype
{
int x, y; // Center point of the arc
int xstart, ystart; // The starting position of the arc
int xend, yend; // The ending position of the arc.
};
// This structure defines the fill style for the current window. Pattern is
// one of the system patterns such as SOLID_FILL. Color is the color to
// fill with
struct fillsettingstype
{
int pattern; // Current fill pattern
int color; // Current fill color
};
// This structure records information about the current line style.
// linestyle is one of the line styles such as SOLID_LINE, upattern is a
// 16-bit pattern for user defined lines, and thickness is the width of the
// line in pixels.
struct linesettingstype
{
int linestyle; // Current line style
unsigned upattern; // 16-bit user line pattern
int thickness; // Width of the line in pixels
};
// This structure records information about the text settings.
struct textsettingstype
{
int font; // The font in use
int direction; // Text direction
int charsize; // Character size
int horiz; // Horizontal text justification
int vert; // Vertical text justification
};
// This structure records information about the viewport
struct viewporttype
{
int left, top, // Viewport bounding box
right, bottom;
int clip; // Whether to clip image to viewport
};
// This structure records information about the palette.
struct palettetype
{
unsigned char size;
signed char colors[MAXCOLORS + 1];
};
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// API Entries
// ---------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
// Drawing Functions
void arc( int x, int y, int stangle, int endangle, int radius );
void bar( int left, int top, int right, int bottom );
void bar3d( int left, int top, int right, int bottom, int depth, int topflag );
void circle( int x, int y, int radius );
void cleardevice( );
void clearviewport( );
void drawpoly(int n_points, int* points);
void ellipse( int x, int y, int stangle, int endangle, int xradius, int yradius );
void fillellipse( int x, int y, int xradius, int yradius );
void fillpoly(int n_points, int* points);
void floodfill( int x, int y, int border );
void line( int x1, int y1, int x2, int y2 );
void linerel( int dx, int dy );
void lineto( int x, int y );
void pieslice( int x, int y, int stangle, int endangle, int radius );
void putpixel( int x, int y, int color );
void rectangle( int left, int top, int right, int bottom );
void sector( int x, int y, int stangle, int endangle, int xradius, int yradius );
// Miscellaneous Functions
int getdisplaycolor( int color );
int converttorgb( int color );
void delay( int msec );
void getarccoords( arccoordstype *arccoords );
int getbkcolor( );
int getcolor( );
void getfillpattern( char *pattern );
void getfillsettings( fillsettingstype *fillinfo );
void getlinesettings( linesettingstype *lineinfo );
int getmaxcolor( );
int getmaxheight( );
int getmaxwidth( );
int getmaxx( );
int getmaxy( );
bool getrefreshingbgi( );
int getwindowheight( );
int getwindowwidth( );
int getpixel( int x, int y );
void getviewsettings( viewporttype *viewport );
int getx( );
int gety( );
void moverel( int dx, int dy );
void moveto( int x, int y );
void refreshbgi(int left, int top, int right, int bottom);
void refreshallbgi( );
void setbkcolor( int color );
void setcolor( int color );
void setfillpattern( char *upattern, int color );
void setfillstyle( int pattern, int color );
void setlinestyle( int linestyle, unsigned upattern, int thickness );
void setrefreshingbgi(bool value);
void setviewport( int left, int top, int right, int bottom, int clip );
void setwritemode( int mode );
// Window Creation / Graphics Manipulation
void closegraph( int wid=ALL_WINDOWS );
void detectgraph( int *graphdriver, int *graphmode );
void getaspectratio( int *xasp, int *yasp );
char *getdrivername( );
int getgraphmode( );
int getmaxmode( );
char *getmodename( int mode_number );
void getmoderange( int graphdriver, int *lomode, int *himode );
void graphdefaults( );
char *grapherrormsg( int errorcode );
int graphresult( );
void initgraph( int *graphdriver, int *graphmode, char *pathtodriver );
int initwindow
( int width, int height, const char* title="Windows BGI", int left=0, int top=0, bool dbflag=false, bool closeflag=true );
int installuserdriver( char *name, int *fp ); // Not available in WinBGI
int installuserfont( char *name ); // Not available in WinBGI
int registerbgidriver( void *driver ); // Not available in WinBGI
int registerbgifont( void *font ); // Not available in WinBGI
void restorecrtmode( );
void setaspectratio( int xasp, int yasp );
unsigned setgraphbufsize( unsigned bufsize ); // Not available in WinBGI
void setgraphmode( int mode );
void showerrorbox( const char *msg = NULL );
// User Interaction
int getch( );
int kbhit( );
// User-Controlled Window Functions (winbgi.cpp)
int getcurrentwindow( );
void setcurrentwindow( int window );
// Double buffering support (winbgi.cpp)
int getactivepage( );
int getvisualpage( );
void setactivepage( int page );
void setvisualpage( int page );
void swapbuffers( );
// Image Functions (drawing.cpp)
unsigned imagesize( int left, int top, int right, int bottom );
void getimage( int left, int top, int right, int bottom, void *bitmap );
void putimage( int left, int top, void *bitmap, int op );
void printimage(
const char* title=NULL,
double width_inches=7, double border_left_inches=0.75, double border_top_inches=0.75,
int left=0, int right=0, int right=INT_MAX, int bottom=INT_MAX,
bool active=true, HWND hwnd=NULL
);
void readimagefile(
const char* filename=NULL,
int left=0, int top=0, int right=INT_MAX, int bottom=INT_MAX
);
void writeimagefile(
const char* filename=NULL,
int left=0, int top=0, int right=INT_MAX, int bottom=INT_MAX,
bool active=true, HWND hwnd=NULL
);
// Text Functions (text.cpp)
void gettextsettings(struct textsettingstype *texttypeinfo);
void outtext(char *textstring);
void outtextxy(int x, int y, char *textstring);
void settextjustify(int horiz, int vert);
void settextstyle(int font, int direction, int charsize);
void setusercharsize(int multx, int divx, int multy, int divy);
int textheight(char *textstring);
int textwidth(char *textstring);
extern std::ostringstream bgiout;
void outstream(std::ostringstream& out=bgiout);
void outstreamxy(int x, int y, std::ostringstream& out=bgiout);
// Mouse Functions (mouse.cpp)
void clearmouseclick( int kind );
void clearresizeevent( );
void getmouseclick( int kind, int& x, int& y );
bool ismouseclick( int kind );
bool isresizeevent( );
int mousex( );
int mousey( );
void registermousehandler( int kind, void h( int, int ) );
void setmousequeuestatus( int kind, bool status=true );
// Palette Functions
palettetype *getdefaultpalette( );
void getpalette( palettetype *palette );
int getpalettesize( );
void setallpalette( palettetype *palette );
void setpalette( int colornum, int color );
void setrgbpalette( int colornum, int red, int green, int blue );
// Color Macros
#define IS_BGI_COLOR(v) ( ((v) >= 0) && ((v) < 16) )
#define IS_RGB_COLOR(v) ( (v) & 0x03000000 )
#define RED_VALUE(v) int(GetRValue( converttorgb(v) ))
#define GREEN_VALUE(v) int(GetGValue( converttorgb(v) ))
#define BLUE_VALUE(v) int(GetBValue( converttorgb(v) ))
#undef COLOR
int COLOR(int r, int g, int b); // No longer a macro
#ifdef __cplusplus
}
#endif
// ---------------------------------------------------------------------------
#endif // WINBGI_H
答案 0 :(得分:0)
设置Project Options
- &gt; Parameters
- &gt; Linker
为
-lbgi
-lgdi32
-lcomdlg32
-luuid
-loleaut32
-lole32
答案 1 :(得分:0)
您正在使用file
,而不是project
首先下载graphics.h并将此标题添加到C:\Dev-Cpp\include
第二次下载Libraries,提取文件并将文件放到C:\Dev-Cpp\lib
现在,打开Dev C ++,在File菜单中选择new&amp;新项目 粘贴代码并转到链接器参数的项目选项
lbgi
lgdi32
lcomdlg32
luuid
loleaut32
lole32
我建议您使用Visual Studio and the same library进行图形编程
另请参阅this page以获取有关graphics.h
答案 2 :(得分:0)
我无法发表评论,因为我没有足够的声誉,我不得不留下答案,即使可能没有人需要这个。
其他答案都是正确的,但我看到没有解决我遇到graphics.h
遇到的一个问题:它在第302行有一个错误(在我的版本中,似乎与你的相同) )在以下声明中:
void printimage(
...
int left=0, int right=0, int right=INT_MAX, int bottom=INT_MAX,
...
);
为清楚起见,我只留下了错误。请参阅:int right=0, int right=INT_MAX
?重新定义。您可以在帖子中搜索它,然后就可以找到它。
实际应该是:
void printimage(
...
int left=0, int top=0, int right=INT_MAX, int bottom=INT_MAX,
...
);