Пример #1
0
void MainWindow::move()
{
    auto s_head = getHead();
    auto s_food = QPoint(food_pos.x(), food_pos.y());
    auto s_foot = getFoot();
    state_now = find_way(s_head, s_food);
    if(state_now == -1){
        state_now = find_way(s_head, s_foot);
    }
    if(state_now == to_left)
    {
        go_left();
    }else if(state_now == to_right){
        go_right();
    }else if(state_now == to_up){
        go_up();
    }else if(state_now == to_down){
        go_down();
    }else{
        state_now = getRandomStep(s_head);
        if(state_now == -1){
            QMessageBox::information(0, "", "end");
            gameover();
        }else if(state_now == to_left){
            go_left();
        }else if(state_now == to_right){
            go_right();
        }else if(state_now == to_up){
            go_up();
        }else if(state_now == to_down){
            go_down();
        }
    }
    update();
}
Пример #2
0
int				check_lemin(char *line, t_check *check, t_cells **cells)
{
	FT_INIT(int, nb_args, check_nb_args(line));
	if (!line)
		return (find_way(check));
	if (ft_strchr(line, '#') &&
	(ft_strcmp(line, "##start") && ft_strcmp(line, "##end")))
		return (1);
	if (!check->ants && nb_args == 1 && nb_ants(line, check, 1))
		return (1);
	if (check->ants && start_end_min(line, check))
		return (nb_args == 1 ? 1 : 0);
	if (check->ants && nb_args == 3
	&& (check->start || check->end || !(*cells)))
	{
		build_list(cells, check, line);
		if (check->start)
			check->start_cell = ft_strdup((*cells)->name);
		else if (check->end)
			check->end_cell = ft_strdup((*cells)->name);
		MULTI(check->start, check->end, 0);
		return (1);
	}
	if (check->ants && check->start_list
	&& nb_args <= 3 && !build_list(cells, check, line))
		return (0);
	return (1);
}
Пример #3
0
/*
typedef struct stack
{
	char ch[MAXSIZE];
	int top;
}SeqStack;

SeqStack * init_stack ()
{
	SeqStack *p;

	p = (SeqStack *)malloc(sizeof(SeqStack));

	p->top = -1;
}

void push_stack (SeqStack * p, char data)
{
	if (p->top == MAXSIZE)
	{
		printf("栈满\n");
		exit;
	}

	printf("压入%c\n", data);

	p->top++;
	p->ch[p->top] = data;
}

void pop_stack(SeqStack * p, char * data)
{
	if (p->top == -1)
	{
		printf("栈为空\n");
		exit;
	}

	printf("弹出%c\n", p->ch[p->top]);

	*data = p->ch[p->top];
	p->top--;
}

void get_stack(SeqStack * p, char * data)
{
	if (p->top == -1)
	{
		printf("栈为空\n");
		exit ;
	}

	*data = p->ch[p->top];
}
*/
void find_way(SeqStack * p, BiTree * root)
{
	char tmp;

	if (root->Lchild == NULL && root->Rchild == NULL)
	{
		pop_stack (p, &tmp);
		printf("%c\t", tmp);
	}

	push_stack(p, root->data);

	find_way(p, root->Lchild);
	find_way(p, root->Rchild);

}
Пример #4
0
int main(int argc, char *argv[])
{
	BiTree *root1, *root2;
	BiTree *tmp;
//	SeqStack *p;
	int flag = 0;

	printf("请输入第一棵书\n");
	root1 = CreatTree_char(root1);
	printf("创建成功\n");
/*
	printf("请输入第二棵树\n");

	getchar();

	root2 = CreatTree_char(root2);
	printf("创建成功\n");

	printf("相似度为%d\n", like(root1, root2));

	PrintTree(root1, PostTreeDepth(root1));

	tmp = find_child(root1, 'f');

	printf("当前节点%c\n", tmp->data);
	printf("双亲是%c\n", parent(root1,tmp)->data);

	count_parent(root1, &flag);

	printf("度为二的节点的数目为%d\n", flag);

	PrintTree (root1, 1);

	change_tree(root1);

	PrintTree(root1, 1);
*/

//	p = init_stack();

	find_way(p, root1);

	return EXIT_SUCCESS;
}
Пример #5
0
int			my_compute(t_filler *f)
{
	int	x;
	int	y;

	y = -1;
	while (++y < f->grid.hig && (x = -1))
		while (++x < f->grid.wid)
			if (f->grid.g[y][x] == f->mychars[0])
				f->grid.g[y][x] = f->mychars[1];
	while (1)
	{
		find_way(f);
		if (test_form(f, &f->grid, &x, &y))
			break ;
		f->grid.g[f->y][f->x] = f->mychars[0];
		if (!find_next_case(f, &f->grid))
			return (0);
	}
	ft_printf("%d %d\n", y, x);
	return (1);
}