graphics.c
来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 125 行
C
125 行
#include <u.h>#include <libc.h>#include <draw.h>#include <event.h>#include "sokoban.h"voiddrawscreen(void){ draw(screen, screen->r, img, nil, ZP); flushimage(display, 1);}voiddrawglenda(void){ Rectangle r; Point p; p = level.glenda; p.x *= BoardX; p.y *= BoardY; /* leave some room from the edge of the window */ p = addpt(p, Pt(1, 1)); r = Rpt(p, Pt(p.x + BoardX, p.y+BoardY)); draw(img, r, glenda, nil, ZP);}voiddrawwin(void){ Rectangle r; Point p; p = level.glenda; p.x *= BoardX; p.y *= BoardY; p = addpt(p, Pt(6, 6)); p = addpt(p, Pt(1, 1)); r = Rpt(p, Pt(p.x + BoardX, p.y+BoardY)); draw(img, r, text, win, ZP);}voiddrawboard(Point p){ Rectangle r; uint square = level.board[p.x][p.y]; p.x *= BoardX; p.y *= BoardY; /* leave some room from the edge of the window */ p = addpt(p, Pt(1, 1)); r = Rpt(p, Pt(p.x + BoardX, p.y+BoardY)); switch(square) { case Background: draw(img, r, bg, nil, ZP); break; case Empty: draw(img, r, empty, nil, ZP); break; case Wall: draw(img, r, wall, nil, ZP); break; case Cargo: draw(img, r, cargo, nil, ZP); break; case Goal: draw(img, r, goal, nil, ZP); break; case GoalCargo: draw(img, r, goalcargo, nil, ZP); break; }}voidresize(Point p){ /* resize to the size of the current level */ int fd; fd = open("/dev/wctl", OWRITE); if(fd >= 0){ fprint(fd, "resize -dx %d -dy %d", p.x*BoardX+10, p.y*BoardY+10); close(fd); }}Pointboardsize(Point p){ return Pt(p.x*BoardX+2, p.y*BoardY+2);}voiddrawlevel(void){ int x, y; resize(level.max); if(img) freeimage(img); img = eallocimage(Rpt(Pt(0, 0), boardsize(level.max)), 0, 0); draw(img, insetrect(img->r, 1), empty, nil, ZP); for(x = 0; x < MazeX; x++) { for(y = 0; y < MazeY; y++) { drawboard(Pt(x, y)); } } drawglenda();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?