sexta-feira, 29 de outubro de 2010

Cronômetro

Wellington Moreira da Silva

No jogo, foi decidido que cada jogador terá um tempo de 2 minutos para andar pelo cenário e perder o minimo de pontos que conseguir. Para isso será inserido um cronômetro na parte interior da tela.
Os controladores lógicos seguem o mesmo padrão do velocímetro, porém o script é diferente. Aqui vai o script:

controlador = GameLogic.getCurrentController()


cronometro = controlador.owner

tempominutos = int(cronometro["Tempo"]/60)

temposegundos = int(cronometro["Tempo"]%60)

cronometro["Text"] = str(tempominutos) + ":" + str("%02i"%temposegundos)

Reta final

Vinicius Sato Jacintho
 Estamos chegando ao final do ano, e agora falta apenas uma semana para a apresentação final do projeto.
Nós estamos trabalhando nos detalhes finais, para poder entregar o projeto o mais completo possível, e neste feriado provavelmente estaremos nos reunindo para acertar os pormenores da apresentação e conferir o projeto mais uma vez para garantir que tudo dê certo.

Atividades no dia 28/10/2010


Karl Schiewaldt

Olá!

Nesta quinta, 28/10/2010, tivemos uma série se atividades na escola, para compensar a "perda" do ponto facultativo que foi transferido para o dia 11.
Tivemos atividades como futebol, rugby, basquete, música, exibição de curta,-etragens, entre outras. Estas atividades foram feitas pelos alunos, coordenados pelos professores.
Mas, em compensação, quinta-feira é o dia que mais temos aulas para desenvolvimento do projeto, ou seja, perdemos um dos dias finais para os últimos ajustes. Já estamos quase no final!

Para comentar, clique no título deste post.

Até mais (:

Tela de Cadastro de Usuário

Maria Luíza Santinho Lima Monteiro

A tela de cadastro de usuário está finalizada e pode ser visualizada funcionando no vídeo abaixo.

Semana da Ciência e Tecnologia - Bauru SESI 2010

Isabella Fontes dos Santos

Olá novamente!


Na semana passada, como a Maria Luiza citou em um dos seus post anteriores fomos convidados pelos professores a participar da Feira de Ciências e de Tecnologia que neste ano foi realizada no SESI de Bauru, proximo ao Horto Florestal.

Em termos de projeto, nossa equipe representada por Ananda, Maria Luiza,Wellington e eu na feira, pode encontrar erros / bugs e ter mais ideias e soluções para o nosso jogo.
Na feira teve muitos experimentos bem legais!

Abaixo segue algumas fotos do dia.As fotos foram tiradas pela Maria Luiza ( e a mãe dela, rsrs) e a camera do meu celular, entao perdoe-me pela resolução hehe.


Grupo Aparattus e Spectrum - Da esquerda para direita: Maisa,Wellington, Juliana,Maria Luiza, Paula Fiorini e eu.

Grupo Apparattus e Spectrum - Da esquerda para direita: Maisa,Wellington, Juliana,Maria Luiza, Eu e a Paula Fiorini .

Nosso banner, que a Maria Luiza trouxe.Ficou lindo!

Nosso Banner e o 'Stand' que ficamos.

Equipe Apparattus e Spectrum, junto com nosso orientador, Professor Vitor Simeão.




E mais fotos! Dessa vez, são de outras instituições como o SESI, com a robótica e a ITE com ciencias aeronautica.Também há algumas fotos do projeto do Zoologico, para educação ambiental em parceria com o proprio SESI ( pata de uma onça pintada e um cranio de animal) alem de algumas próteses que são feitas no Centrinho.











Criar Arquivo Temporario no Python para leitura no jogo

Isabella Fontes dos Santos

Olá,

Estamos na reta final !

No jogo, através das ações do usuario ele adquire determinada pontuacao e para que o Blender consiga ler essa informaçao [ no caso, o nome do usuario e o valor da sua pontuacao] criamos um arquivo temporario no diretorio do nosso jogo e a partir disto é feita  a leitura.

No python há um tipo especifico de arquivo I/O para esta finalidade, arquivos temporarios.No entanto, segue abaixo alguns dados importantissimos:

  • Evita colisões com nomes de arquivos que estão em uso;
  • Identifica a área apropriada do sistema de arquivos para temporários (que varia conforme o sistema operacional);
  • Expoe a aplicação a riscos (a área de temporários é utilizada por outros processos).


OBS: O módulo "os" implementa algumas funções para facilitar a criação de arquivos temporários, liberando o desenvolvedor de algumas preocupações, e por isso achei muito mais simples e facil usa-lo.

Para teste, abaixo há o codigo que lê o arquivo e tambem o escreve.É sempre importante lembrar que em todos os projeto o uso de padrões é a forma mais correta e também agradavel, deixando o codigo mais compreensivel.Logo, para este arquivo temporario haverá um cabeçalho.Ex:


            #Spectrum Educar - Arquivo Temporario - NAO REMOVA
            User: Isabella Fontes dos Santos
            Pontuacao: 876


* A função "os.getcwd()" retorna o diretorio corrente.



class CriarArquivoTemporario(object):
    def __init__(self):
        self.name = os.sep.join((os.getcwd(), 'spectrum-educar2010.txt'))
  
    def criar(self):
        """
            TODO: Quando o usuario aluno resolver abrir o exe do blender
            enquanto carrega o jogo e as dlls, criar um arquivo temporario
            de texto com o cabecalho:
          
            file: spectrum-educar2010.txt                      
        """
        arquivo = open(self.name,"w")
        arquivo.write("#Spectrum Educar - Arquivo Temporario - NAO REMOVA\n")
        arquivo.write("User: %s \n" % str(usuario))
        arquivo.write("Pontuacao: %i \n" % pontos)
        arquivo.close()
            
  
    def ler(self):
       try:
        with open(self.name, "r") as arquivo:
            lista_informacoes = [line for line in arquivo.readlines() if not
                    line.startswith("#")]          
            for x in lista_informacoes:              
                if not x.find("Pontuacao:"):
                    a = x.split()              
                    print(a[1])              
       except IOError:
            pass
 

sexta-feira, 22 de outubro de 2010

Alteração no calendário

Karl Schiewaldt

Olá!

Nesta última aula, o professor Vítor veio nos informar uma alteração no calendário do projeto.
Devido ao ENEM, que será realizado nos dias 6 e 7 de novembro, as apresentações do projeto foram adiantadas para os dias 4 e 5 de novembro. A ordem das apresentações se mantém a mesma.

Estmaos chegando ao fim!

Até mais
Karl

Finalização do cenário

Ananda Brasolotto De Santis

Para a apresentação do projeto na Feira de Ciências e Tecnologia, usei os objetos de cenário que já estavam prontos. É suficiente, mas enquanto posso, continuo modificando os outros objetos para deixar o cenário mais variado.
Abaixo está um print da visão de cima da cidade:

PyQt - como adicionar valores num objeto QTable

Isabella Fontes dos Santos

Olá,

Ainda sobre a interface grafica, utilizando PyQt, encontrei dificuldades em achar materiais e informações sobre objetos do tipo QTable. Porem, na tentativa e erro consegui compreender um pouco, e criei uma função que insere os valores encontrados no nosso banco e preenche a tabela para mostrar por exemplo, os usuarios na tela de Ranking ou mesmo na tela de pesquisar os usuarios.

Segue abaixo a função.


Bibliotecas usadas:

from PyQt4.QtCore import *
from PyQt4.QtGui import *



def preencher_table(self,indice,nome,pontuacao,colocacao):      
        item = QTableWidgetItem()
        self.tableWidget.setItem(indice, 0, item)
        item = QTableWidgetItem()
        self.tableWidget.setItem(indice, 1, item)
        item = QTableWidgetItem()
        self.tableWidget.setItem(indice, 2, item)
        self.tableWidget.item(indice, 0).setText(QApplication.translate("MainWindow", nome, None, QApplication.UnicodeUTF8))
        self.tableWidget.item(indice, 1).setText(QApplication.translate("MainWindow", str(pontuacao), None, QApplication.UnicodeUTF8))
        self.tableWidget.item(indice, 2).setText(QApplication.translate("MainWindow", str(colocacao), None, QApplication.UnicodeUTF8))

Semana de Ciência e Tecnologia

Maria Luíza Santinho Lima Monteiro

Bom dia! Hoje nós iremos expor nosso projeto no evento da Semana de Ciência e Tecnologia, que está acontecendo no Sesi próximo ao Horto Florestal. O evento começa desde de manhã, porém como temos aulas, apenas compareceremos a partir das 14h. Para que o computador não fique em desuso na feira, criamos uma apresentação em Power Point a ser apresentada durante o período da manhã.
Segue abaixo o link da apresentação.
Download da Apresentação

sexta-feira, 15 de outubro de 2010

Design Inspiration

Vinicius Sato Jacintho
 Hoje eu vou flar sobre o Design Inspiration.

O thedesigninspiration.com/, é um site atualizado diariamente com conteúdo artístico, seja ele pinturas, designs de websites ou até mesmo fotos.
 Extremamente útil  para quando a pessoa está tendo um bloqueio criativo, esse site ajuda a suar algo como inspiração, ou até mesmo como base para um novo projeto.

Alterações no site

Karl Schiewaldt

Olá!

Como sugerido pelo professor de Aplicativos, esta semana fiz algumas correções no site, como a troca das imagens .png por imagens .gif sem a perda daqualidade, para reduzir o peso das imagens, a colocação das tags alt e title em tudos os links do site, assim como a finalização da página Jogo, onde nós falamos a respeito do jogo que estamos desenvolvendo,

Novamente, o endereço do nosso site é: http://ctilinux2.feb.unesp.br/spectrum/site

Pata comentários, clique no título deste post.

Até a próxima! :D

960 Grid System

Vinicius Sato Jacintho
960 Grid System, é um framework para CSS, O frame work, divide a tela em 12 colunas de 60 pixels cada, e ajuda a fazer o posicionamento das
's do seu código.Entre cada coluna de 60 pixels existe um espaçamento de 20 pixels  para seprar uma coluna da outra.
Um bom exemplo de uso do 960GS, é o site  http://thingsthatarebrown.com/
Pelo pouco que eu usei do 960GS, eu achei que ele acelera bastante o processo de codificação do PSD para o html/css, mas necessita prática até o usuário saber como ele irá posicionar cada elemento usando o 960GS.

Mini mapa

Wellington Moreira da Silva

Bom dia!
O mini mapa que será apresentado no game EduCAR foi finalizado. Ele ficará localizado no canto direito superior da tela.
Ele foi desenvolvido através da renderização das imagens capturadas por uma das cameras durante o jogo. Um script renderiza essa imagens e através de um mapeamento UV pré-realizado, tranforma em textura. Pode ser considerada um textura de vídeo.


Imagem do jogo com o mini-mapa (jogo ainda no cenario teste).

processo de arrumação do cenário

Ananda Brasolotto De Santis

Como eu já vinha postando nas semanas anteriores, estou "consertando" as partes do cenário que davam algum tipo de erro por causa das texturas, ou da falta delas.

Agora eu pego cada casa, prédio, etc, que já estava fixado no lugar certo do cenário que estava pronto, importo para um novo arquivo, onde seleciono cada face para adicionar a elas as texturas certas. Assim, todas as partes aparecem quando o jogo é executado. Depois que os objetos são "consertados", são salvos em arquivos separados, e mandados para um outro arquivo, onde ficam nos lugares corretos.

Esses procedimentos levam tempo, mas creio que neste final de semana termino de arrumar todos os objetos e colocamos para rodar o cenário definitivo.

Telas de Informações sobre Transito.

Isabella Fontes

Olá,



Figura 1:  Aluno Visualiza Informações educacionais - Nesta página ele apenas lê a materia cadastrada.



 Figura 2:  Aluno Visualiza Informações educacionais - Nesta página ele assiste a vídeos cadastrados.



 Figura 3:  Orientador cadastra as informções sobre o Trânsito, para alunos visualizarem.


Python:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from commons.InformacoesCadastroBuilding import Ui_MainWindow
from commons.Database import Pessoa, Usuario
import traceback

import logging
import sys
import os
import time

class InformacoesCadastro(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        app = QApplication(sys.argv)
        Ui_MainWindow.__init__(self)
        QMainWindow.__init__(self, parent)       
        self.setupUi(self)
        """
            TODO: LINKAR COM TODAS AS TELAS
        """           
        self.show()
        sys.exit(app.exec_())      
       
  
if __name__ == '__main__':
    infoCad = InformacoesCadastro()

Finalização da Pasta de TSPD

Maria Luíza Santinho Lima Monteiro

Bom dia!
Após todas as alterações necessárias serem feitas, semana passada, finalizamos a pasta de TSPD. Nela também estão contidos todos os níveis do DFD postados anteriormente (01/10 e 08/10).

A pasta pode ser acessada e baixada no seguinte link:
Download da Pasta

sexta-feira, 8 de outubro de 2010

Semáforo Finalizado

Wellington Moreira da Silva

Bom dia!

Depois de bastante trabalho, o semáforo foi finalizado. Ele ficará na parte superior da tela e será unico, cabendo ao usuário ficar atento nele para que não perca pontos.

Aqui vai uma imagem do jogo com o semáforo implantado:

ColorZilla

 Vinicius Sato Jacintho

Hoje eu vou falar im pouco sobre o add-on para FireFox, o ColorZilla.

O ColorZilla é um add-on que permite que o usuário identifique a cor de um ponto no navegador.
Após escolher o ponto é possivel copiar o código hexadecimal ou em r,g,b do ponto determinado.
Isso torna o ColorZilla um add-on essencial para qualquer um que trabalhe com a área de design ou webdesign.

link para o ColorZilla:Add-on ColorZilla

Calendário de atividades - Novembro

Karl Schiewaldt

Olá!

Bom, nosso projeto está chegando ao fim, e durante a aula, o professor Vítor veio nos informar as datas de apresentação. Assim, conciliando com as outras datas de vestibulares, ENEM e provas, temos nosso calendário de novembro

NOVEMBRO
ENEM:
06/11
07/11

Provas 4º Bimestre:
08/11 até 13/11

Apresentações do projeto:
10/11 (tarde)
14h - Stay Company
16h - Spectrum

11/11 (manhã)
08h - Índigo
10h - Apparatus

Unesp:
14/11

Unicamp:
21/11

Reapresentação do projeto:
27/11 (manhã)

Fuvest:
28/11

Pois é, finalmente, estamos chegando ao fim do projeto, e tudo está correndo para dar tudo certo no fim! :D

Até mais! (:

Solução do problema com as faixas

Ananda Brasolotto De Santis

Como eu havia dito na postagem anterior (01/10), as faixas de pedestre estavam "piscando". Para solucionar este problema, mexi no objeto base, que envolve as quadras com suas elevações, as ruas, as faixas, etc. Excluí os pedaços de rua com textura de asfalto que estavam embaixo de cada face com textura de faixa de pedestre.
Agora, como temos apenas uma faixa com apenas uma textura, ela não pisca mais. Foi mais um contorno que fiz para resolver esses probleminhas de cenário.

Nível Um - DFD

Maria Luíza Santinho Lima Monteiro

Como prometido na semana passada (01/10), hoje postarei o Nível Um do DFD. Segue a imagem abaixo:

Término de interfaces

Vinicius Sato Jacintho

Esta semana eu terminei mais duas interfaces do projeto a tela de orientador e a de admnistrador.
Aqui vai uma prévia de como elas deverão ficar no menu do jogo.




Aqui elas estão sem os textos debaixo dos ícones pois isso vai ser implantado quando nós importarmos para o qtDesigner.

quinta-feira, 7 de outubro de 2010

Problemas com Sqlite3 no windows!

Isabella Fontes

Olá,

Problemas com Sqlite3 no windows!

Nosso banco é feito todo em sqlite3 e quanto a sua validação era preciso checar se o arquivo local existia, caso contrario seria recriado.Até esse passo, ok.O problema começou qaundo o windows (XP,Vista  e Seven) toda vez que verificava se a função 'os.path.exists' era True ou False, ele recriava o arquivo database.db e sempre retornava que o arquivo existia!

Mas conseguimos a solução!Segue abaixo o que foi feito para solucionar:

Bibliotecas usadas:

import sqlite3
import time
import os
import traceback

Funcoes dentro da Classe Database.py:

""" Nesta função pega-se o cursor e a conexao com o path / endereco do banco"""
def conectar_banco_de_dados():  
    db_connect = sqlite3.connect(config.path_db())
    db_cursor = db_connect.cursor()
    return db_connect, db_cursor   

""" Nesta função é feita a verificação do banco, caso exista verifica o numero de tabelas senao recria-o"""
def verificar_banco_de_dados():
    db_name = config.path_db()  
    logging.warning("Verificar banco de dados")
    if not os.path.isfile(db_name):
        logging.warning("Nao encontrado banco de dados.Criar banco de dados.")       
        try:           
            criar_banco_de_dados()
        except sqlite3.OperationalError:
            trace = traceback.format_exc()
            logging.exception(trace)
    else:         
        """
            TODO: VERIFICAR QTDE DE TABELAS.SE O BANCO NAO FOI CORROMPIDO.
        """
        try:
            logging.warning("Verificando integridade do banco de dados.")
            db_connect, db_cursor = conectar_banco_de_dados()
            query = "select tbl_name from sqlite_master where type='table'"
            db_cursor.execute(query)
            db_connect.commit()
            tables = 0
            for row in db_cursor:
                tables += 1
            print (tables)
            if tables != 8:
                raise sqlite3.IntegrityError
            else:
                logging.warning("Banco esta Ok.")                                          
        except:
            trace = traceback.format_exc()
            logging.error("Erro foi encontrado")
            logging.exception(trace)

sexta-feira, 1 de outubro de 2010

Problemas com as faixas

Ananda Brasolotto De Santis

Bem, quando o jogo roda, temos um probleminha com as faixas de pedestres, que começam a piscar enquanto o carro passa. Elas somem e aparecem pouco a pouco.
Isso incomoda um pouco, então busquei uma solução para esse problema. Percebi então que as faixas "piscavam" porque elas eram uma face diferente da rua, e com uma textura diferente, e estavam sobrepostas à rua, no mesmo nível. Então, conforme o movimento da câmera, a face mostrada alternava entre a face da faixa e a da rua.
Abaixo está um vídeo de um teste feito com carros programados para analisar o cenário parte a parte, onde o problema das faixas fica bem visível.

Tela do Orientador e Aluno - Qt e Python

Isabella Fontes

Olá,


Figura 1: Tela do Aluno



Codigo em Python:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from AlunoBuilding import Ui_MainWindow
from commons.DadosCadastrais import TelaUsuario

import logging
import sys
import os


class Aluno(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        app = QApplication(sys.argv)
        Ui_MainWindow.__init__(self)
        QMainWindow.__init__(self, parent)       
        self.setupUi(self)
        """
            TODO: LINKAR COM TODAS AS TELAS
        """       
        self.connect(self.btnDadosCadastrais, SIGNAL("pressed()"), self.abrir_dados_cadastrais)
        self.connect(self.btnInfo, SIGNAL("pressed()"), self.abrir_info)
        self.connect(self.btnJogar, SIGNAL("pressed()"), self.abrir_jogo)
        self.connect(self.btnRanking, SIGNAL("pressed()"), self.abrir_tela_ranking)       
        self.show()
        sys.exit(app.exec_())



Figura 2 : Tela do Orientador






Codigo em Python:

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from orientador.OrientadorBuilding import Ui_MainWindow
from commons.Database import Pessoa, Usuario
import traceback

import logging
import sys
import os
import time

class TelaOrientador(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        app = QApplication(sys.argv)
        Ui_MainWindow.__init__(self)
        QMainWindow.__init__(self, parent)      
        self.setupUi(self)
        """
            TODO: LINKAR COM TODAS AS TELAS
        """
        self.connect(self.btnCadastrarInfo, SIGNAL("pressed()"), self.abrir_tela_cadastro_info)
        self.connect(self.btnConfiguracoes, SIGNAL("pressed()"), self.abrir_tela_configuracoes)
        self.connect(self.btnListagemUsuarios, SIGNAL("pressed()"), self.abrir_tela_listagem_alunos)
        self.connect(self.btnRanking, SIGNAL("pressed()"), self.abrir_tela_ranking)              
        self.show()
        sys.exit(app.exec_())

Fontes utilizadas

Vinicius Sato Jacintho

Hoje eu vou falar um pouco sobre as duas fontes utilizadas na maior parte do projeto.

Uma delas é a fonte Rockwell, uma fonte muito antiga sendo que a sua primeira versão data de 1910, é serifada e com slab.


A segunda, é a fonte Museo Sans, eu gosto de usá-la quando eu quero dar um sensação mais simples para o projeto em questão.

Edição do Diagrama de Fluxo de Dados

Maria Luíza Santinho Lima Monteiro

Bom dia!
Conforme a correção realizada pelo professor André Dalastti, fiz alterações no DFD (Diagrama de Fluxo de Dados). A seguir é possível visualizar o Diagrama de Contexto e o Nível Zero. Em breve postarei o Nível Um, que ainda será elaborado.



Finalização do documento de ajuda

Karl Schiewaldt

Olá!
Como postado anteriormente, estamos desenvolvendo a documentação de ajuda do jogo, contendo instruções básicas para que qualquer um possa jogar sem dificuldades.
Nele explicamos os comandos, grupos de usuários, como se cadastrar, etc.
Até agora, temos todos os textos que estarão no help prontos, só nos falta algumas imagens das telas do sistema, as quais ainda não estão prontas. Ainda estilizaremos o arquivo, com imagens da empresa e marcas d'água.

Para acessar o arquivo, o link é:
http://200.145.153.91/spectrum/aplicativos/help.pdf

Para comentários, clique no título deste post.

Até a próxima! :D