以下是过去可以编写的C程序的一个例子:
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void main()
{
int gd=DETECT, gm;
initgraph(&gd, &gm, "c:\\turboc\\bgi");
circle(200,100,150);
getch();
closegraph();
}
我认为这是MSDOS下的turbo C.它为您提供了一个屏幕上的绘图,可以很容易地扩展到快速动画图形,如xscreensaver hacks中的那些。
我如何在ubuntu上用gcc编写等效代码?它可以用Java完成吗?
答案 0 :(得分:3)
#include<X11/Xlib.h>
#include<stdlib.h>
/* gcc -std=gnu99 -o circle circle.c -lX11 */
int main (int argc, char *argv[])
{
/* connect to the X server and make a window */
Display *dpy = XOpenDisplay (getenv ("DISPLAY"));
Window w = XCreateSimpleWindow (dpy, DefaultRootWindow (dpy),
100, 100, 640, 480, 1,
BlackPixel (dpy, DefaultScreen (dpy)),
WhitePixel (dpy, DefaultScreen (dpy)));
/* raise it and wait */
XSelectInput (dpy, w, StructureNotifyMask);
XMapRaised (dpy, w);
for(XEvent e; ( e.type != MapNotify );
XWindowEvent (dpy, w, StructureNotifyMask, &e));
/* create a graphics context for drawing in the window */
GC g = XCreateGC (dpy, w, 0, NULL);
/* draw a circle */
XDrawArc(dpy,w,g,200,100,150,150,0,360*64);
XFlush(dpy);
/*wait for key press*/
XSelectInput (dpy, w, KeyReleaseMask);
for(XEvent e; ( e.type != KeyRelease );
XWindowEvent (dpy, w, KeyReleaseMask, &e));
/*clean up*/
XDestroyWindow( dpy, w );
XCloseDisplay (dpy);
}
答案 1 :(得分:2)
好的,关于基础知识的话很少:
但严重的是,我认为你正在寻找错误的方向。您应该专注于使用现代工具包(Gtk,Qt),现代语言(C ++,C#,Java,Python等)和OpenGL进行“特殊效果”的现代事件驱动GUI编程。
答案 2 :(得分:1)
您需要了解Linux图形通常是通过X11完成的(或许Wayland可能会在未来成为竞争对手)。
然后你应该使用一些X11工具包。如果您想要C语言,请考虑GTK或libSDL。但是如果你了解C ++,我会推荐Qt(阅读它的graphics能力)。
您可以在大约一百行中找到一些简短的Qt或Gtk或SDL示例程序。
Java至少有Swing。
请注意,Linux本质上是一个多任务系统。所以你想运行几个图形程序。换句话说,您需要几个窗口(以及窗口或桌面管理器)。因此,您需要一个事件循环,并且您需要处理调整大小和/或重叠的窗口。因此,复杂性比上个世纪的TurboC时代要大得多!
或者,考虑将您的应用程序设置为专用HTTP服务器(并在HTML5中编写图形代码),例如使用libonion作为C HTTP服务器库。