⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 levels.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <draw.h>#include "sudoku.h"voidconsumeline(Biobuf *b){	while(Bgetc(b) != '\n')		;}voidfprettyprintbrd(Cell *board){	int x, y, fd;	fd = create("/tmp/sudoku-print", OWRITE|OTRUNC, 0600);	if(fd < 0) {		perror("can not open save file /tmp/sudoku-save");		return;	}	for(x = 0; x < Brdsize; x++) {		for(y = 0; y < Brdsize; y++) {			fprint(fd, " ");			if(board[y*Brdsize + x].digit == -1)				fprint(fd, ".");			else				fprint(fd, "%d", board[y*Brdsize + x].digit+1);			if(((x*Brdsize + y + 1) % Brdsize) == 0 || (x*Brdsize + y + 1) == Psize)				fprint(fd, "\n");			if(((x*Brdsize + y + 1) % 3) == 0 && ((x*Brdsize + y + 1) % Brdsize) != 0)				fprint(fd, "|");			if(((x*Brdsize + y + 1) % 27) == 0 && ((x*Brdsize + y + 1) % Psize) != 0)				fprint(fd, " -------------------\n");		}	}	close(fd);}voidfprintbrd(int fd, Cell *board){	int i;		for(i = 0; i < Psize; i++) {		if(board[i].digit == -1)			fprint(fd, ".");		else			fprint(fd, "%d", board[i].digit+1);		if((i + 1) % Brdsize == 0)			fprint(fd, "\n");	}	for(i = 0; i < Psize; i++) {		fprint(fd, "%d", board[i].solve+1);		if((i + 1) % Brdsize == 0)			fprint(fd, "\n");	}	close(fd);}intloadlevel(char *name, Cell *board){	Biobuf *b;	char c;	int i;		b = Bopen(name, OREAD);	if(b == nil) {		fprint(2, "could not open file %s: %r\n", name);		return -1;	}	i = 0;	while((c = Bgetc(b)) > 0) {		switch(c) {		case '.':			board[i].digit = -1;			board[i].locked = 0;			if(++i == 81)				goto next;			break;		case 0x31:		case 0x32:		case 0x33:		case 0x34:		case 0x35:		case 0x36:		case 0x37:		case 0x38:		case 0x39:			board[i].digit = c - 0x31;			board[i].locked = 1;			if(++i == 81)				goto next;			break;		case '\n':			break;		default:			fprint(2, "unknown character in initial board: %c\n", c);			goto done;		}	}next:	i = 0;	while((c = Bgetc(b)) > 0) {		switch(c) {		case 0x31:		case 0x32:		case 0x33:		case 0x34:		case 0x35:		case 0x36:		case 0x37:		case 0x38:		case 0x39:			board[i].solve = c - 0x31;			if(++i == 81)				goto done;			break;		case '\n':			break;		default:			fprint(2, "unknown character in board solution: %c\n", c);			goto done;		}	}done:	Bterm(b);	return i < 81 ? 0 : 1;}voidprintboard(Cell *board){	int fd;		fd = create("/tmp/sudoku-board", OWRITE|OTRUNC, 0600);	if(fd < 0) {		perror("can not open save file /tmp/sudoku-save");		return;	}	fprintbrd(fd, board);	close(fd);}voidsavegame(Cell *board){	int fd;		fd = create("/tmp/sudoku-save", OWRITE|OTRUNC, 0600);	if(fd < 0) {		perror("can not open save file /tmp/sudoku-save");		return;	}	if(write(fd, board, Psize * sizeof(Cell)) != Psize * sizeof(Cell)) {		perror("could not save to file");		close(fd);	}	close(fd);}intloadgame(Cell *board){	int fd;	fd = open("/tmp/sudoku-save", OREAD);	if(fd < 0) {		perror("can not open save file /tmp/sudoku-save");		return -1;	}	if(read(fd, board, Psize * sizeof(Cell)) != Psize * sizeof(Cell)) {		perror("insufficient data in save file");		close(fd);		return -1;	}		close(fd);	return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -