Desenvolvimento de Jogos para o Aperfeiçoamento na Aprendizagem de Disciplinas de Ciência da Computação
Conteúdo:
  1. Objetivos
  2. Coordenadores
  3. Equipe
  4. Softwares Desenvolvidos
      Jogos
      Simuladores
  5. Código Fonte Adicional
  6. Publicações
  7. Aulas e Palestras
  8. Agradecimentos

Objetivos

Este projeto visa desenvolver um ambiente computacional a ser utilizado por professores e alunos para o aperfeiçoamento no aprendizado de disciplinas ligadas à computação. O domínio “desenvolvimento jogos” foi escolhido pelos seguintes motivos: (i) por envolver os mais diversos assuntos da computação; (ii) por ser de interesse dos alunos e das empresas; (iii) por apresentar desafios científicos; e (iv) pela sua grande visibilidade para alunos do ensino médio. A seguir, cada um desses motivos é descrito.
O desenvolvimento de jogos envolve aspectos de diversas áreas da Ciência da Computação. Destacamos: (a) Engenharia de Software: projeto, implementação e testes; (b) Interface Humano-Computador: interface gráfica, aspectos de acessibilidade e jogabilidade; (c) Inteligência Artificial: representação de conhecimento; (d) algoritmos de busca para implementação de bots; (e) Sistemas Distribuídos; (f) Redes Sociais; (g) Algoritmos e Estruturas de Dados; entre outros. Cada uma destas disciplinas poderia tirar proveito deste ambiente para apresentar exemplos práticos nas aulas ou mesmo para o desenvolvimento de projetos práticos.

Coordenadores

Prof. Dr. Luciano Antonio Digiampietri
Diogo Ditzel Kropiwiec

Equipe


Softwares Desenvolvidos

Diversos softwares foram desenvolvidos para ajudar no ensino de disciplinas de computação. Alguns são usados apenas para ilustrar conceitos e algoritmos vistos em sala (por exemplo, os softwares da subseção Simuladores) enquanto outros foram desenvolvidos junto com os alunos (durante as aulas) ou pelos alunos (em trabalhos práticos) para o aprofundamento de algum conceito. Este desenvolvimento seguiu duas abordagens: a colaborativa (todos trabalhando juntos para obter um sistemas) e a competitiva (cada grupo trabalhava com o objetivo de construir um sistema [por exemplo, um bot]) mais eficiente do que o sistema dos demais grupos [veja o sistema Torneio de Truco]).
Atenção, todo o conteúdo desta página foi desenvolvido com objetivos didáticos e pode ser utilizado livremente por qualquer pessoa desde que sua utilização seja sem fins lucrativos. Ao utilizar qualquer parte do conteúdo deste projeto, favor referenciar o projeto e/ou qualquer publicação produzida a partir do mesmo.
As páginas deste projeto estão sendo constantemente atualizadas. Em breve novos códigos fontes, aplicações e manuais serão disponibilizados.

Jogos

Servidor de Jogos de Tabuleiro: composto por diversos sub-sistemas para a criação, gerenciamento e interação com jogos de tabuleiro criados num servidor (potencialmente) remoto. No site sobre o Servidor de Jogos de Tabuleiro você encontrará três versões do servidor de jogos remoto (uma em Java e duas em Visual C#) além de algumas ferramentas para se interagir com o servidor (criar novos jogos, entrar nos jogos, jogar, etc). Além disso, estas ferramentas podem implementar bots (softwares "inteligentes" aptos a jogar de maneira automática alguns dos jogos do servidor) de forma a disponibilizar jogadores automáticos (por exemplo, o sistema JogadorJogoDaVelha possui um bot baseado em regras - sistema especialista).
Cada sub-sistema contém um link para seu código-fonte e para um breve manual.

Sistema Torneio de Truco: possui as classes básicas para se executar um torneio de truco entre dois ou mais bots. Além disso, possui a interface Jogador que, ao ser implementada, produz os jogadores participantes do torneio. Este sistema pode ser utilizado para se fazer um competição, na disciplina de Inteligência Artificial, entre os alunos para verificar quais alunos (ou grupos) produzem os melhores bots. Inclui duas implementações da interface Jogador (uma com um jogador que age de maneira aleatória e outra com um jogador que segue algumas regras simples [além de ter parte do comportamento aleatório]). Este sistema foi desenvolvido em Java, e o projeto Eclipse dele pode ser encontrado no seguinte link: [zip].

Jogador de Joga da Velha (automático): utiliza aprendizado por tentativa e erro para aprender a jogar sabendo apenas quando perdeu ou não e usando esse conhecimento para jogar melhor o próximo jogo. Está desenvolvido em Perl (são dois jogadores: um é sempre o primeiro a jogar e o outro sempre o segundo).

Jogador de Damas (interativo): aplicativo local feito em Prolog, o jogador automático (bot) utiliza a busca MiniMax (Inteligência Artificial) para decidir quais são as melhores jogadas.

Jogador de Truco (interativo): aplicativo Web (desenvolvido em CGI/Perl) é um sistema especialista para jogar truco.

Newmings: jogo dinâmico baseado em Lemings, onde você deve ajudar os pinguins a encontrar a saída. Desenvolvido em C++, no Linux.

Jogador de Joga da Velha II (automático): utiliza diversos algoritmos da Inteligência Artificial (busca MiniMax, sistema especialista e dicionário de jogadas) para executar a “melhor” jogada. Por se tratar de um jogo simples, todo o espaço de busca é analisado por alguns dos algoritmos. Implementado em C.

Tetris: convencional, implementado em C++ no Linux.

Campo Minado: com um bot para tentar resolver automaticamente (de maneira iterativa), implementado em Visual C#.

Robot Algorithm: robô que conta com o auxílio do usuário para desenvolver um percurso passando por todas as regiões vermelhas e acendendo sua luz sobre essas regiões. O Robô pode executar 7 diferentes ações que podem ser estruturas em três conjuntos de funções: a principal (caixa Agir das figuras abaixo), f(x) e g(x). Este sistema serve para ensinar conceitos básicos de programação estruturada. [.exe]


Simuladores

Torres de Hanoi: simulação automática e manual do algoritmo. Implementado em C#, utilizando a recursão clássica para este algoritmo (indução) [.exe].

Passeio do Cavalo/Cavaleiro: simulação automática e manual do algoritmo do Passeio do Cavalo (Knight Tour). O objetivo é, dado um tabuleiro quadrado n por n e uma posição inicial para o cavalo, percorrer todas as casas do tabuleiro apenas uma vez (respeitando o movimento de xadrez de um cavalo [andar em "L"]). Implementado em C#, utilizando a técnica tentativa e erro/backtracking [.exe].

Problema das Rainhas (8 Rainhas): simulação automática do algoritmo do Problema das Rainhas para um tabuleiro n x n. O objetivo é, dado um tabuleiro quadrado n por n, encontrar todas as posições das n rainhas no tabuleiro de forma que cada rainha não ameace as demais. Implementado em C#, utilizando a técnica tentativa e erro/backtracking [.exe].


Publicações

  1. Digiampietri, Luciano A. ; PERES, S. M. ; Nakano, F. ; Roman, N.T. ; Silva, B. ; Teodoro, B. ; Silva-Junior, D. F. P. ; Pereira, G. V. A. ; Borges, G. O. ; Santos, M. V. ; Baklizky, M. ; Wagner, P. K. ; Barros, V. A. . Complementando o Aprendizado em Programação: Experiências no Curso de Sistemas de Informação da USP. In: VIII Simpósio Brasileiro de Sistemas de Informação (SBSI 2012), 2012, São Paulo. Anais do VIII Simpósio Brasileiro de Sistemas de Informação (SBSI 2012), 2012. [resumo] [bibtex]
  2. Digiampietri, L.A., Kropiwiec, D.D., Silva, R. A. C. O uso de jogos como fator motivacional em cursos de computação. In: XVIII Workshop sobre Educação em Computação (WEI), 2010, Belo Horizonte. Anais do XXX Congresso da Sociedade Brasileira de Computação (CSBC 2010). , 2010. p.768 - 777. [resumo] [bibtex]
  3. Luciano A. Digiampietri, D.D. Kropiwiec. Desenvolvimento de Jogos para o Aperfeiçoamento na Aprendizagem de Disciplinas de Ciência da Computação. In: VII Simpósio Brasileiro de Jogos para Computadores e Entretenimento Digital (SBGames), 2008, Belo Horizonte, MG, Brasil. Anais do VII Simpósio Brasileiro de Jogos para Computadores e Entretenimento Digital, 2008. p. 49-52.


Aulas e Palestras

Aulas

Esta seção contéma alguns exemplos de aulas que podem ser usadas (em conjunto com os sistemas desenvolvidos) em disciplinas como Introdução a Ciência da Computação, Algoritmos e Estruturas de Dados e Inteligência Artificial. Cada conjunto de slides contém uma descrição do contexto onde pode ser aplicado, seus objetivos e atividades práticas relacionadas.

Criando um Novo Jogo no Servidor de Jogos. Esta aula ensina como utilizar conceitos de orientação a objetos e estruturas de dados para criar um novo jogo no servidor de jogos por meio da extensão de classes básicas do servidor [pdf].

Técnicas de Inteligência Artificial. Esta aula resume alguns conceitos de Inteligência Artificial (relacionados a busca por soluções, sistemas baseados em regras, descoberta, armazenamento e recuperação de conhecimento, etc) e aplica estes conceitos no desenvolvimento de quatro diferentes bots jogadores de Jogo da Velha [pdf].

Torneio de Truco. Esta aula propõe uma atividade prática (a ser desenvolvida individualmente ou em grupo) relacionada ao desenvolvimento de um sistema especialista. Estes sistema especialista deve implementar um jogador de truco (cuja interface está disponibilizada no pacote TorneioDeTruco). O sistema desenvolvido permite que todas as implementações dos jogadores participem de um torneio de truco (jogando todas contra todas) [pdf].

Palestras

Plataforma de Jogos como Ferramenta Multidisciplinar. Microsoft Faculty Summit Brasil, Dezembro de 2008. Esta palestra motiva e descreve a utilização da plataforma de jogos aqui desenvolvida como ferramenta para o auxílio ao ensino de computação [pdf].

Agradecimentos

Agradecemos a Escola de Artes Ciências e Humanidades da Universidade de São Paulo (EACH-USP) que fornece o espaço físico para o desenvolvimento deste projeto, a Microsoft por financiar parte do desenvolvimento do conteúdo aqui disponibilizado e pelas bolsas de iniciação científicas: Ensinar com Pesquisa (institucionais) e PIBIC-CNPq.

Informações adicionais

Se você precisar de qualquer código fonte que ainda não esteja disponível no site, favor contactar o prof. Luciano Antonio Digiampietri: .