Skip to content

Latest commit

 

History

History
115 lines (85 loc) · 2.47 KB

8-7-最后的小作业.md

File metadata and controls

115 lines (85 loc) · 2.47 KB

C语言最后的小作业

如果你已经完成了本repo的其他所有内容(可以不包括拓展),那么就可以认为你已经掌握基本的C语言了!下面来完成本期最后的小作业吧。

ACLLib是一个专门用于教学用途的,完全开源的纯C语言库,它的结构很简单,不能用于很复杂的图形问题。

ACLLib基于MS Windows的win32API,可以在所有Windows下运行。因此不能在其他平台使用。

Windows下visual studio,Dev C++和CodeBlocks都可以使用,也可以直接由MinGW编译器以Makefile方式编译。

ACCLib的基础使用文档已经上传至QQ群。

最后的小作业的内容就是自己用ACCLib来实现一个小游戏。大家可以自己在网上找一些使用ACCLib的项目做参考。例如:简单的画图工具,坦克大战,贪吃蛇,五子棋一类都在网上有现成的代码,可以自己思考写一个新奇的,也允许改写别人的代码自己重新实现一个。

下面是官方案例,一个简单的时钟。

#include "acllib.h"

#include <stdlib.h>
#include <math.h>

#define RAD(x) ((x)/360.0*2*3.1415926535)

int h = 0;
int m = 0;
int s = 0;

void paint()
{
static const int ox = 150;
static const int oy = 150;

static const int hl = 46;
static const int ml = 74;
static const int sl = 120;

int i;

beginPaint();

clearDevice();

// circle
setPenWidth(2);
setPenColor(BLACK);
setBrushColor(WHITE);
ellipse(25,25,275,275);

// label
setPenWidth(1);
setPenColor(BLACK);
for(i=0;i<12;++i)
{
moveTo(ox+115*sin(RAD(180-i*30)),oy+115*cos(RAD(180-i*30)));
lineTo(ox+125*sin(RAD(180-i*30)),oy+125*cos(RAD(180-i*30)));
}

// hour
setPenWidth(8);
setPenColor(BLACK);
moveTo(ox,oy);
lineTo(ox+hl*sin(RAD(180-h*30)),oy+hl*cos(RAD(180-h*30)));

// minute
setPenWidth(4);
setPenColor(GREEN);
moveTo(ox,oy);
lineTo(ox+ml*sin(RAD(180-m*6)),oy+ml*cos(RAD(180-m*6)));

// second
setPenWidth(2);
setPenColor(RED);
moveTo(ox,oy);
lineTo(ox+sl*sin(RAD(180-s*6)),oy+sl*cos(RAD(180-s*6)));

endPaint();
}

void timerEvent(int tid)
{
++s;
if(s==60)
{
s = 0;
++m;
}
if(m==60)
{
m = 0;
++h;
}
if(h==12)
h = 0;
paint();
}

int Setup()
{
initWindow("Clock",DEFAULT,DEFAULT,300,300);

registerTimerEvent(timerEvent);

startTimer(0,1000);
//startTimer(0,100);
//startTimer(0,10);
//startTimer(0,1);


return 0;
}

另外我找到一篇很不错的acllib教程