#include #include #include #include "klondike.h" void drawcard(Card *c) { draw(bb, cardrect(c), c->img[c->up], nil, ZP); } void drawstack(Cardstack *cs) { int i; Rectangle cr; if(cs->n == 0){ cr = Rect(0, 0, Cwid, Cht); border(bb, rectaddpt(cr, cs->p), 1, display->black, ZP); } else{ if(cs->dpad != 0 && cs->upad != 0) for(i = 0; i < cs->n; i++) drawcard(cs->c[i]); else drawcard(top(cs)); } } void drawtable(Image *img) { int i; tablemath(); draw(bb, bb->r, display->white, nil, ZP); drawstack(stock); drawstack(waste); for(i = 0; i < nelem(foundation); i++) drawstack(foundation[i]); for(i = 0; i < nelem(tableau); i++) drawstack(tableau[i]); draw(img, bb->r, bb, nil, bb->r.min); } void translate(Card *ca[], Point dt) { Rectangle cr; Card *c, **cp; cr = cardrect(ca[0]); for(cp = ca; *cp != nil; cp++) combinerect(&cr, cardrect(*cp)); draw(bb, cr, bb2, nil, cr.min); for(cp = ca; (c = *cp); cp++) { c->p = addpt(c->p, dt); drawcard(c); combinerect(&cr, cardrect(c)); } draw(screen, cr, bb, nil, cr.min); } Image* openimage(char *path) { int fd; Image *img; if((fd = open(path, OREAD)) < 0) sysfatal("open %s: %r", path); img = readimage(display, fd, 0); if(img == nil) sysfatal("readimage %s: %r", path); close(fd); return img; }