Beispiel #1
0
/*
   主程序,控制游戏流程。
 */
int main (int argc, char * argv[])
{
	int put;
	int in_x,in_y;
	int judge=0;

	/*显示欢迎语句,清空并显示棋盘。*/
	printf ("Welcome to play!\n");
	board_clear();
	board_display();
	while (1)//主循环,由内部break语句控制退出。或许有更好的处理方式。
	{
		/*用户输入落子坐标*/
		scanf("%d",&in_x);
		scanf("%d",&in_y);
		printf("your input number is x=%d, y=%d\n",in_x,in_y);

		/*调用落子函数,由用户落下一子*/
		//这里,落子函数接受的有效坐标为0~2,为了照顾人类习惯,人类输入的坐标有效值为1~3,在此转换
		board_put(in_x-1,in_y-1,USER);
		/*用户落子后显示棋盘*/
		board_display();
		/*判断是否取胜*/
		judge=board_judge();
		if (judge!=0)//如果取胜,打印并退出
		{
			printf("User %d win!\n",judge);
			break;
		}

		/*有AI计算落子位置*/
		put=ai_think(&in_x,&in_y);
		printf("AI put: x=%d,y=%d\n",in_x,in_y);
		/*调用落子函数,由AI落下一子*/
		board_put(in_x,in_y,AI);
		/*AI落子后显示棋盘*/
		board_display();
		/*判断是否取胜*/
		judge=board_judge();
		if (judge!=0)//如果取胜,打印并退出
		{
			printf("User %d win!\n",judge);
			break;
		}
	}
	return 0;
}
Beispiel #2
0
int main(int argc, char **argv)
{
    board *board = board_new();
    FILE *f;
    if (argc < 2 || strcmp(argv[argc-1], "--") == 0)
    {
        f = stdin;
    }
    else
    {
        f = fopen(argv[argc-1], "r");
        if (f == NULL)
        {
            perror("open");
            return 1;
        }
    }
    if (strcmp(argv[1], "-d") == 0 || strcmp(argv[1], "--debug") == 0)
        debugflag = 1;
    char c;
    int x = 0;
    int y = 0;
    while ((c = fgetc(f)) != EOF)
    {
        if (c == '\n')
        {
            y++;
            x = 0;
            continue;
        }
        else
        {
            board_put(board, x, y, c);
        }
        if (x > BOARD_WIDTH || y > BOARD_HEIGHT)
        {
            fprintf(stderr, "Error: File too large (%i, %i)", x, y);
            return 1;
        }
        x++;
    }
    if (f != stdin)
    {
        fclose(f);
    }
    if (debugflag)
    {
        debugstream = tmpfile();
    }
    process(board);
    if (debugflag)
    {
        fclose(debugstream);
    }
    return 0;
}
Beispiel #3
0
void process(board *board)
{
    FILE *out;
    if (debugflag)
        out = debugstream;
    else
        out = stdout;
    while (1)
    {
        char c = board_get(board, board->pointer->x, board->pointer->y);
        if (board->pointer->strmode && c != '"')
        {
            stack_push(board->pointer->stack, c);
        }
        else
        {
        switch (c)
        {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            stack_push(board->pointer->stack, (char) atoi(&c));
            break;
        case '+':
        {
            char a = stack_pop(board->pointer->stack);
            char b = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, a + b);
            break;
        }
        case '-':
        {
            char a = stack_pop(board->pointer->stack);
            char b = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, b - a);
            break;
        }
        case '*':
        {
            char a = stack_pop(board->pointer->stack);
            char b = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, a * b);
            break;
        }
        case '/':
        {
            char a = stack_pop(board->pointer->stack);
            char b = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, b / a);
            break;
        }
        case '%':
        {
            char a = stack_pop(board->pointer->stack);
            char b = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, b % a);
            break;
        }
        case '!':
            stack_push(board->pointer->stack, !stack_pop(board->pointer->stack));
            break;
        case '`':
        {
            char a = stack_pop(board->pointer->stack);
            char b = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, (b > a));
            break;
        }
        case '>':
            board->pointer->dx = 1;
            board->pointer->dy = 0;
            break;
        case '<':
            board->pointer->dx = -1;
            board->pointer->dy = 0;
            break;
        case '^':
            board->pointer->dx = 0;
            board->pointer->dy = -1;
            break;
        case 'v':
            board->pointer->dx = 0;
            board->pointer->dy = 1;
            break;
        case '?':
        {
            srand((unsigned)time(NULL));
            int r = rand() % 4;
            switch (r)
            {
            case 0:
                board->pointer->dx = 1;
                board->pointer->dy = 0;
                break;
            case 1:
                board->pointer->dx = -1;
                board->pointer->dy = 0;
                break;
            case 2:
                board->pointer->dx = 0;
                board->pointer->dy = -1;
                break;
            case 3:
                board->pointer->dx = 0;
                board->pointer->dy = 1;
                break;
            }
            break;
        }
        case '_':
        {
            char x = stack_pop(board->pointer->stack);
            if (x == 0)
            {
                board->pointer->dx = 1;
                board->pointer->dy = 0;
            }
            else
            {
                board->pointer->dx = -1;
                board->pointer->dy = 0;
            }
            break;
        }
        case '|':
        {
            char x = stack_pop(board->pointer->stack);
            if (x == 0)
            {
                board->pointer->dx = 0;
                board->pointer->dy = 1;
            }
            else
            {
                board->pointer->dx = 0;
                board->pointer->dy = -1;
            }
            break;
        }
        case '"':
            board->pointer->strmode = !board->pointer->strmode;
            break;
        case ':':
            stack_push(board->pointer->stack, stack_peek(board->pointer->stack));
            break;
        case '\\':
        {
            char a = stack_pop(board->pointer->stack);
            char b = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, a);
            stack_push(board->pointer->stack, b);
            break;
        }
        case '$':
            stack_pop(board->pointer->stack);
            break;
        case '.':
            fprintf(out, "%i ", stack_pop(board->pointer->stack));
            break;
        case ',':
            fprintf(out, "%c", stack_pop(board->pointer->stack));
            break;
        case '#':
            pointer_move(board->pointer);
            break;
        case 'p':
        {
            int y = stack_pop(board->pointer->stack);
            int x = stack_pop(board->pointer->stack);
            char v = stack_pop(board->pointer->stack);
            board_put(board, x, y, v);
            break;
        }
        case 'g':
        {
            int y = stack_pop(board->pointer->stack);
            int x = stack_pop(board->pointer->stack);
            stack_push(board->pointer->stack, board_get(board, x, y));
            break;
        }
        case '&':
        {
            int i;
            scanf("%d", &i);
            stack_push(board->pointer->stack, (char) i);
            break;
        }
        case '~':
            stack_push(board->pointer->stack, getchar());
            break;
        case '@':
            return;
        }
        }
        pointer_move(board->pointer);
        if (board->pointer->x < 0)
        {
            board->pointer->x += BOARD_WIDTH;
        }
        if (board->pointer->x >= BOARD_WIDTH)
        {
            board->pointer->x -= BOARD_WIDTH;
        }
        if (board->pointer->y < 0)
        {
            board->pointer->y += BOARD_HEIGHT;
        }
        if (board->pointer->y >= BOARD_HEIGHT)
        {
            board->pointer->y -= BOARD_HEIGHT;
        }
        if (debugflag)
        {
            debug(board);
        }
    }
}