Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Ao processo de definição de um
projeto é dado o nome de pré-
produção ou planejamento.
Definindo um objetivo
Antes de qualquer coisa, faça uma
pergunta a si mesmo:
O que mais?
Pense por alguns minutos nas características básicas...
Dando forma ao objetivo
Também é necessário fazer um
planejamento mais detalhado. Pode não
parecer, mas isso nos economizará
tempo no futuro.
http://www.grungetextures.com/ (texturas)
http://www.jamendo.com/br/ (músicas)
http://www.blender-materials.org/ (materiais)
http://e2-productions.com/repository/index.
php (modelos)
http://opengameart.org/ (mix)
Pronto? Ainda não!
Agora que temos o plano
completo (espero que sim), eu
devo lhe fazer uma pergunta:
"1 Modo de raciocinar tal como de fato se exerce:Lógica natural. 2 Filos Estudo que tem
por objeto determinar quais as operações que são válidas e quais as que não o são:
Lógica formal, que trata dos conceitos, juízos e raciocínios, independentemente de seu
conteúdo. Mais modernamente, análise das formas e leis do pensamento, seja do ponto
de vista racionalista e crítico, seja daquele em que se descreve a experiência: Lógica
genética, lógica das ciências, lógica simbólica, lógica matemática."
Lógica de programação
Você pode não ter percebido, mas foi exatamente isso que
fizemos no planejamento do nosso jogo. Tratamos as coisas
separadamente de forma a cobrir nosso jogo completo.
Entretando, não acaba por aí. Como vamos fazer para carregar
a fase correta que o jogador escolher em nosso jogo, por
exemplo?
Lógica de programação
Note que o Se não termina com ponto e vírgula, pois ele não é
uma instrução e sim uma condição.
Lógica de programação
Inteiro x = 2;
Inteiro y = 3;
Inteiro z = x + y;
A regra aqui é:
Sempre colocar o tipo de dado antes do nome da variável,
usar o símbolo de igualdade para atribuir o valor e terminar
com ponto e vírgula.
Lógica de programação
Inteiro x = 2;
Inteiro xis = x;
Caractere letraA = 'a';
Lógico mentira = Falso;
Decimal real = 1.45;
Início Algoritmo
Inteiro a = 10;
Se (a > 10) então
Escreva (a, " é maior do que 10");
Fim Se
Fim Algoritmo
Note que o bloco Se não tem um Início. A regra diz que o início
do bloco Se é a palavra então. Outra regra é: exceto para o
bloco principal (Algoritmo), toda instrução dentro de bloco deve
ser identada (4 espaços em branco, ou 1 tabulação antes).
Lógica de programação
Igualmente temos:
Leia (a);
Se (a == b e b == 2) então
Se (a ==b ou b == 2) então
a == 10 é igual a Verdadeiro
a != 10 é igual a Falso
Lógica de programação
Igualmente temos:
Repita
a = a - 1;
Escreva (a);
até que (a < 10);
Caso não haja uma condição para o bloco parar, o código irá
se repetir eternamente podendo haver perdas consideráveis de
desempenho
Lógica de programação
Inicio Algoritmo
Inteiro Função somaInteiros (Inteiro a, Inteiro b)
Retorne a + b;
Fim Função
Inteiro x = 2;
Inteiro y = 7;
Escreva (somaInteiros (x, y) - 3);
Fim Algoritmo
Inteiro x = 2;
Inteiro y = 7;
Escreva (somaInteiros (x, y) - 3);
Inicio Algoritmo
Decimal Função somaInteiros (Decimal a, Decimal b)
Retorne a + b;
Fim Função
Escreva (a[0]);
Início Algoritmo
Decimal Função soma (Decimal a, Decimal b)
Retorne a + b;
Fim Função
continua...
Lógica de programação
Decimal a = 0.0;
Decimal b = 0.0;
Inteiro opcao = 0;
Leia (operacao);
Escreva ("Informe o primeiro número: ");
Leia (a);
Escreva ("Informe o segundo número: ");
Leia (b);
Se (operacao == 1) então
Escreva ("Resultado: ", soma (a, b));
Fim Se
continua...
Lógica de programação
Mas e como fica a divisão por zero? Basta alterar o trecho que
trata a operação número 4:
Na OO, o desenvolvedor
"molda" um "universo" a partir
de suas abstrações.
Classe Carro
Caractere marca;
Caractere modelo;
Caractere cor;
Inteiro ano;
Caractere combustivel;
Caractere chassi;
Lógico ligado = Falso;
Orientação a Objetos
fordFocus.cor = 'vermelho';
fordFocus.ligado = Verdadeiro;
fordFocus.liga();
Orientação a Objetos
Porque vai até 9 e não até 10? Porque a função range tem seu
primeiro parâmetro inclusivo e o segundo exclusivo, ou seja, o
valor informado no primeiro parâmetro é incluído no vetor e o
segundo não.
range (10)
Python
if a in vetor:
print a, ' está dentro do vetor'
Python
a = 0.0
b = 0.0
operacao = 1
if operacao == 1:
print 'Resultado: ', soma (a, b)
elif operacao == 2:
print 'Resultado: ', subtrai (a, b)
elif operacao == 3:
print 'Resultado: ', multiplica (a, b)
elif operacao == 4:
if b == 0:
print 'Não é possível dividir um número por zero'
else :
print 'Resultado: ', divide (a, b)
class Humano:
nome = None
idade = None
sexo = None
altura = None
peso = None
def mostraDados(self):
print 'Nome: ' + self.nome
print 'Idade: ' + str(self.idade)
print 'Sexo: ' + self.sexo
print 'Altura: ' + str(self.altura)
print 'Peso: ' + str(self.peso)
humano1.mostraDados()
humano2.mostraDados()
Python
class Humano:
nome = None
idade = None
sexo = None
altura = None
peso = None
nome = nome
print novoNome
print nome
def mostraDados(self):
print 'Nome: ' + self.nome
print 'Idade: ' + str(self.idade)
print 'Sexo: ' + self.sexo
print 'Altura: ' + str(self.altura)
print 'Peso: ' + str(self.peso)
Python
humano1.mostraDados()
humano2.mostraDados()
import datetime
print datetime.datetime.now()
def funcao1():
print 'Primeira funcao'
def funcao2():
print 'Segunda funcao'
import minhasFuncoes
minhasFuncoes.funcao1()
raw_input()
Python
import datetime as dt
print dt.datetime.now()
numero = 5
resultado = igualADez (numero)
if (resultado):
print numero, ' é igual a 10'
else:
print numero, ' é diferente de 10'
Python
if (igualADez(5)):
print '5 é igual a 10'
else:
print '5 é diferente de 10'
continua...
Python
contatos = []
op = 0
while op != 5:
print u'Escolha uma opção:'
print '1- Visualizar contatos'
print '2- Adicionar contato'
print '3- Editar contato'
print '4- Remover contato'
print '5- Sair'
try:
op = int(raw_input())
except:
print u'Esolha uma opção de 1 a 5'
raw_input()
continua...
Python
if op == 1:
for contato in contatos:
print u'Código: ', contato.codigo
print 'Nome: ', contato.nome
print 'Telefone: ', contato.telefone
print '\n'
elif op == 2:
print u'Código: '
codigo = raw_input()
for contato in contatos:
if contato.codigo == codigo:
print u'Esse código já existe'
break
print 'Nome: '
nome = raw_input()
print 'Telefone: '
telefone = raw_input()
contatos.append(Contato(codigo, nome, telefone))
continua...
Python
elif op == 3:
print u'Código: '
codigo = raw_input()
for contato in contatos:
if contato.codigo == codigo:
print u'Novo código: '
contato.codigo = raw_input()
print 'Novo nome: '
contato.nome = raw_input()
print 'Novo telefone: '
contato.telefone = raw_input()
break
continua...
Python
elif op == 4:
print u'Código: '
codigo = raw_input()
for contato in contatos:
if contato.codigo == codigo:
contatos.remove(contato)
print 'Contato removido!'
break
Nenhuma surpresa aqui, exceto pela primeira linha. Ela nos diz
que a codificação do nosso arquivo .py é UTF-8, ou seja, que
queremos ser capazes de mostrar acentos e outros caracteres
especiais nas nossas mensagens.
Python
contatos = []
op = 0
while op != 5:
print u'Escolha uma opção:'
print '1- Visualizar contatos'
print '2- Adicionar contato'
print '3- Editar contato'
print '4- Remover contato'
print '5- Sair'
try:
op = int(raw_input())
except:
print u'Esolha uma opção de 1 a 5'
raw_input()
try:
op = int(raw_input())
except:
print u'Esolha uma opção de 1 a 5'
raw_input()
if op == 1:
for contato in contatos:
print u'Código: ', contato.codigo
print 'Nome: ', contato.nome
print 'Telefone: ', contato.telefone
print '\n'
O 'u' antes de uma string, significa que ela deve ser convertida
para Unicode. Assim os caracteres especiais e de acentuação
aparecem corretamente. O '\n' é um caractere especial que
serve para pular uma linha.
Python
elif op == 2:
print u'Código: '
codigo = raw_input()
for contato in contatos:
if contato.codigo == codigo:
print u'Esse código já existe'
break
print 'Nome: '
nome = raw_input()
print 'Telefone: '
telefone = raw_input()
contatos.append(Contato(codigo, nome, telefone))
elif op == 3:
print u'Código: '
codigo = raw_input()
for contato in contatos:
if contato.codigo == codigo:
print u'Novo código: '
contato.codigo = raw_input()
print 'Novo nome: '
contato.nome = raw_input()
print 'Novo telefone: '
contato.telefone = raw_input()
break
elif op == 4:
print u'Código: '
codigo = raw_input()
for contato in contatos:
if contato.codigo == codigo:
contatos.remove(contato)
print 'Contato removido!'
break
Vamos parar para analisar a teoria por trás do que fizemos (ou
melhor, o Base fez para nós).
SELECT *
FROM Contato
SELECT *
FROM Contato
WHERE codigo = 2
SELECT *
FROM Contato
WHERE nome LIKE '%de Tal'
O símbolo '%' quer dizer que não importa o que venha antes
de 'de Tal'. Contanto que o registro termine assim, ele deve ser
mostrado.
Banco de dados
SELECT *
FROM Contato
WHERE nome LIKE '%de Tal'
AND telefone LIKE '(42)%'
A tabela Pessoa teria uma relação 1-N com essa tabela, assim
como essa nova tabela teria uma relação N-1 com a tabela
Loja.
Banco de dados
SELECT *
FROM Contato c
INNER JOIN Endereco e ON e.codigo = c.codEndereco
UPDATE Contato
SET telefone = '(33) 3333-3333'
WHERE codigo = 1
UPDATE Contato
SET telefone = '(33) 3333-3333',
nome = 'Não sou mais Fulano de Tal'
WHERE codigo = 1
Banco de dados
O Base nos foi muito útil até agora, mas apenas como
ferramenta de aprendizado. Chegou a hora de partir para algo
novo e mais completo.
Banco de dados
Para isto:
#-*- coding: utf-8 -*-
import sqlite3
import os
class Contato:
codigo = None
nome = None
telefone = None
Abaixo do trecho:
contatos = []
op = 0
Adicione:
Isso é tudo que você precisa saber por enquanto sobre banco
de dados. Recomendo que reveja as partes que não entendeu
antes de prosseguir.
Type: tipo de verificação. Pode ser equal (igual a), not equal
(diferente de), interval (está entre) e changed (mudou)
O parâmetro que aparece abaixo disso depende do tipo de
verificação escolhido. Value é um valor determinado, min e
max definem a faixa de comparação para o tipo interval.
BGE
Tipo Ping Pong: irá alternar entre animação para frente (Sta
para End) e para trás (End para Sta) sempre que for
verdadeiro
Child: aplica o atuador aos objetos que têm parent com o
ator
Force: converte o Ipo em força (física)
Add: soma os valores da Ipo ao atuais do objeto.
BGE
Os parâmetros são:
Para o tipo Start new games temos o parâmetro File que deve
conter o nome de um arquivo .blend a ser carregado e iniciado.
cont = g.getCurrentController()
obj = cont.owner
BGE
Simplificando:
cont = g.getCurrentController()
obj = cont.owner
mov = cont.actuators['movimento']
import GameLogic as g
cont = g.getCurrentController()
obj = cont.owner
mov = cont.actuators['movimento']
mov.dLoc = [0, 0.02, 0]
cont.activate(mov)
Logo:
import GameLogic as g
cont = g.getCurrentController()
obj = cont.owner
mov = cont.actuators['movimento']
esp = cont.sensors['espaco']
Como o sensor do tipo Always faz com que nosso script seja
executado o tempo todo, logo nosso cubo irá se mover o
tempo todo. Para movê-lo apenas quando a barra de espaços
for pressionada, podemos fazer:
import GameLogic as g
cont = g.getCurrentController()
obj = cont.owner
mov = cont.actuators['movimento']
esp = cont.sensors['espaco']
if esp.positive:
mov.dLoc = [0, 0.02, 0]
cont.activate(mov)
else:
cont.deactivate(mov)
BGE
Algumas mudanças:
cont = g.getCurrentController()
obj = cont.owner
mov = cont.actuators['movimento']
teclado = cont.sensors['teclado']
cont = g.getCurrentController()
obj = cont.owner
mov = cont.actuators['movimento']
teclado = cont.sensors['espaco']
Portanto:
import GameLogic as g
import GameKeys as k
cont = g.getCurrentController()
obj = cont.owner
mov = cont.actuators['movimento']
teclado = cont.sensors['teclado']
continua...
BGE
Altere o trecho que trata cada tecla para que fique assim:
if teclado.getKeyStatus(k.UPARROWKEY) in [1, 2]:
mov.dLoc = [0, 0.02, 0]
cont.activate(mov)
obj.tecla = 'PARA CIMA'
elif teclado.getKeyStatus(k.DOWNARROWKEY) in [1, 2]:
mov.dLoc = [0, -0.02, 0]
cont.activate(mov)
obj.tecla = 'PARA BAIXO'
elif teclado.getKeyStatus(k.LEFTARROWKEY) in [1, 2]:
mov.dLoc = [-0.02, 0, 0]
cont.activate(mov)
obj.tecla = 'PARA A ESQUERDA'
elif teclado.getKeyStatus(k.RIGHTARROWKEY) in [1, 2]:
mov.dLoc = [0.02, 0, 0]
cont.activate(mov)
obj.tecla = 'PARA A DIREITA'
else:
cont.deactivate(mov)
obj.tecla = None
BGE