Para começar, vamos precisar de alguma estrutura da tabela de partida e de dados:
CREATE TABLE usuários ( id int NOT NULL AUTO_INCREMENT, nome varchar(250), senha varchar(50), PRIMARY KEY(id) ); CREATE TABLE Estatísticas ( id int NOT NULL AUTO_INCREMENT, o texto display_name, SHORT_NAME varchar(10), PRIMARY KEY(id) ); INSERT INTO Estatísticas(display_name,nome abreviado) VALUES ('Magic','mag'); INSERT INTO Estatísticas(display_name,nome abreviado) VALUES ('Ataque','atk'); CREATE TABLE user_stats ( int id NÃO NULL AUTO_INCREMENT, user_id int, int stat_id, texto de valor, PRIMARY KEY(id) );
E agora que isso é feito, podemos começar realmente a escrever código.
Primeiro, precisamos de uma maneira de recuperar o valor de status para uma identificação de usuário em particular. O SQL para esta consulta fica assim:
SELECT valor FROM user_stats WHERE stat_id = <foo> E user_id = <bar>
Tudo bem, mas não exatamente ideal - se quiséssemos recuperar o valor de uma estatística particular, nós primeiro precisamos descobrir o que foi sua identificação (usando seu nome ou apelido), e depois usar isso para descobrir a valor do stat. Felizmente, podemos encurtar a para baixo a apenas uma pergunta:
SELECT valor FROM user_stats WHERE stat_id = (SELECT id FROM estatísticas WHERE display_name = <foo> OU SHORT_NAME = <foo>) e user_id = <bar>
Ao usar a consulta acima, podemos recuperar o valor estatístico baseado no nome do stat e identificação do usuário - que é muito mais fácil para nós como um colaborador para trabalhar, porque podemos nos referir ao nosso estatísticas como "atk", ou "ataque "- em vez de precisar descobrir que" atk "na verdade significa" 1 ". Usando este sub-consulta, recuperando o valor estatístico para um jogador é fácil:
1 2 3 4 5 6 7 8 9 10 11 | sub getStat { meu (statName $,$ userid) = @ _; uso config; minha $ dbh = DBI->contato("DBI: mysql: $ dbname: dbhost $",$ dbuser,$ dbpass,{RaiseError => 1}); minha $ sth = $ dbh->prepare("SELECT FROM WHERE valor user_stats stat_id = (SELECT id estatísticas ONDE display_name = OR? SHORT_NAME?) e user_id =?"); $ sth->executar($ statName,statName $,$ userid); meu valor de $, $ sth->bind_columns(\ $ value); $ sth->buscar; retornar valor de US $; } |
E isso é tudo que precisamos fazer para recuperar um stat. Mas o que se quiséssemos armazenar um novo valor para uma estatística?
Como se vê, que é muito fácil também - é praticamente o mesmo código:
1 2 3 4 5 6 7 | sub setStat { meu (statName $,$ userid,$ statValue) = @ _; uso config; minha $ dbh = DBI->contato("DBI: mysql: $ dbhost: $ dbname",$ dbuser,$ dbpass,{RaiseError => 1}); minha $ sth = $ dbh->prepare("user_stats UPDATE SET valor = SHORT_NAME Onde stat_id = (SELECT FROM WHERE id estatísticas display_name =? OR =?) e user_id =?"); $ sth- >executar($ statValue,$ statName,statName $,$ userid); } |
E isso é tudo que há para atualizar o status! Você pode fazer o que as transformações que pretende executar no stat (como a adição, subtração, multipling) antes de salvá-lo de volta para o banco de dados.
E isso é todo o código que você precisará usar para executar músicas em Perl! É tão simples quanto parece - e ao fazê-lo desta maneira, você pode adicionar gratuitamente a qualquer momento que você precisa sem se preocupar em ter que fazer alterações no seu banco de dados - basta adicionar o stat e escrever o novo código para lidar com isso.Aqui está todo o código em um local (que é perfeito para colocá-lo em seu próprio módulo - stats.pm gosta ou algo assim):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | sub getStat { meu (statName $,$ userid) = @ _; uso config; minha $ dbh = DBI->contato("DBI: mysql: $ dbname: dbhost $",$ dbuser,$ dbpass,{RaiseError => 1}); minha $ sth = $ dbh->prepare("SELECT FROM WHERE valor user_stats stat_id = (SELECT id estatísticas ONDE display_name = OR? SHORT_NAME?) e user_id =?"); $ sth->executar($ statName,statName $,$ userid); meu valor de $, $ sth->bind_columns(\ $ value); $ sth->buscar; retornar valor de US $; } sub setStat { meu (statName $,$ userid,$ statValue) = @ _; uso config; minha $ dbh = DBI->contato("DBI: mysql: $ dbname: dbhost $",$ dbuser,$ dbpass,{RaiseError => 1}); minha $ sth = $ dbh->preparar("SET user_stats = valor? UPDATE WHERE stat_id = (SELECT id estatísticas ONDE display_name = OR? SHORT_NAME?) e user_id =?"); $ sth->executar($ statValue,$ statName,statName $,$ userid); } |
0 Response to "Criar Browser Game - 7# Implementação de um sistema de estatísticas flexível (Perl)"
Postar um comentário