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

📄 level.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <bio.h>#include <draw.h>#include "sokoban.h"voidconsumeline(Biobuf *b){	while(Bgetc(b) != '\n')		;}/* parse a level file */intloadlevels(char *path){	Biobuf *b;	int x = 0, y = 0, lnum = 0;	char c;			if(path == nil)		return 0;	b = Bopen(path, OREAD);	if(b == nil) {		fprint(2, "could not open file %s: %r\n", path);		return 0;	}	memset(levels, 0, Maxlevels*sizeof(Level));		while((c = Bgetc(b)) > 0) {		switch(c)  {		case ';':			consumeline(b); 	/* no ';'-comments in the middle of a level */			break;		case '\n':			levels[lnum].index = lnum;			levels[lnum].done = 0;			x = 0;			levels[lnum].max.y = ++y;			c = Bgetc(b);			if(c == '\n' || c == Beof) {				/* end of level */				if(++lnum == Maxlevels)					goto Done;				x = 0;				y = 0;			} else				Bungetc(b);			break;		case '#':			levels[lnum].board[x][y] = Wall;			x++;			break;		case ' ':			levels[lnum].board[x][y] = Empty;			x++;			break;		case '$':			levels[lnum].board[x][y] = Cargo;			x++;			break;		case '*':			levels[lnum].board[x][y] = GoalCargo;			x++;			break;		case '.':			levels[lnum].board[x][y] = Goal;			x++;			break;		case '@':			levels[lnum].board[x][y] = Empty;			levels[lnum].glenda = Pt(x, y);			x++;			break;		case '+':			levels[lnum].board[x][y] = Goal;			levels[lnum].glenda = Pt(x, y);			x++;			break;		default:			fprint(2, "impossible character for level %d: %c\n", lnum+1, c);			return 0;		}		if(x > levels[lnum].max.x)			levels[lnum].max.x = x;		levels[lnum].max.y = y;	}Done:	Bterm(b);	level = levels[0];	numlevels = lnum;	return 1;}

⌨️ 快捷键说明

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