108 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Brainfuck
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Brainfuck
		
	
	
	
	
	
| #
 | |
| 
 | |
| buffer[6];
 | |
| PlayerName[6];
 | |
| 
 | |
| /* Taken intact from the B reference manual. */
 | |
| strcopy(sl ,s2)
 | |
| {
 | |
| 	auto i;
 | |
| 
 | |
| 	i = 0;
 | |
| 	while (lchar(sl, i, char(s2, i)) != '*e')
 | |
| 		i++;
 | |
| }
 | |
| 
 | |
| reads()
 | |
| {
 | |
| 	extrn buffer;
 | |
| 
 | |
| 	putstr("> ");
 | |
| 	flush();
 | |
| 	getstr(buffer);
 | |
| }
 | |
| 
 | |
| atoi(s)
 | |
| {
 | |
| 	auto value, sign, i, c;
 | |
| 
 | |
| 	i = 0;
 | |
| 	if (char(s, i) == '-')
 | |
| 	{
 | |
| 		sign = -1;
 | |
| 		i++;
 | |
| 	}
 | |
| 	else
 | |
| 		sign = 1;
 | |
| 
 | |
| 	value = 0;
 | |
| 	while ((c = char(s, i++)) != '*e')
 | |
| 		value = value*10 + (c - '0');
 | |
| 
 | |
| 	return(value * sign);
 | |
| }
 | |
| 
 | |
| rand()
 | |
| {
 | |
| 	/* Genuinely random; retrieved from random.org */
 | |
| 	return(57);
 | |
| }
 | |
| 
 | |
| game()
 | |
| {
 | |
| 	extrn buffer;
 | |
| 	auto Number, Attempts;
 | |
| 	auto guess;
 | |
| 
 | |
| 	printf("See if you can guess my number.*n");
 | |
| 
 | |
| 	Number = rand() % 100;
 | |
| 	Attempts = 1;
 | |
| 	
 | |
| 	while (1)
 | |
| 	{
 | |
| 		reads();
 | |
| 		guess = atoi(buffer);
 | |
| 		
 | |
| 		if (guess == Number)
 | |
| 		{
 | |
| 			printf("*nYou got it right in only %d %s!*n", Attempts,
 | |
| 				(Attempts == 1) ? "go" : "goes");
 | |
| 			return;
 | |
| 		}
 | |
| 		
 | |
| 		if (guess < Number)
 | |
| 			printf("*nTry a bit higher.*n");
 | |
| 		if (guess > Number)
 | |
| 			printf("*nTry a bit lower.*n");
 | |
| 		Attempts++;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| main()
 | |
| {
 | |
| 	extrn buffer, PlayerName;
 | |
| 
 | |
| 	printf("*nHi there! I'm written in B. Before we start, what is your name?*n");
 | |
| 	reads();
 | |
| 	strcopy(PlayerName, buffer);
 | |
| 	printf("*nHello, %s! ", PlayerName);
 | |
| 	
 | |
| 	while (1)
 | |
| 	{
 | |
| 		game();
 | |
| 		printf("*nWould you like another go?*n");
 | |
| 		reads();
 | |
| 		
 | |
| 		if ((char(buffer, 0) == 'n') | (char(buffer, 0) == 'N'))
 | |
| 		{
 | |
| 			printf("*nThanks for playing --- goodbye!*n");
 | |
| 			break;
 | |
| 		}
 | |
| 		
 | |
| 		printf("*nExcellent! ");
 | |
| 	}
 | |
| 	
 | |
| 	return(0);
 | |
| }
 | |
| 
 |