Merge branch 'master' of https://github.com/jsmaniac/2011-m1s2-ter
This commit is contained in:
commit
144e9dfb99
|
@ -10,11 +10,11 @@
|
|||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name=".Preference" android:label="Préférence"></activity>
|
||||
<activity android:name=".games.BaseGame"></activity>
|
||||
<activity android:label="Information" android:name=".Information"></activity>
|
||||
<activity android:name=".Score" android:label="Score"></activity>
|
||||
<activity android:name=".FrontPage"></activity>
|
||||
<activity android:name=".Preference" android:label="Préférence" android:screenOrientation="portrait"></activity>
|
||||
<activity android:name=".games.BaseGame" android:screenOrientation="portrait"></activity>
|
||||
<activity android:label="Information" android:name=".Information" android:screenOrientation="portrait"></activity>
|
||||
<activity android:name=".Score" android:label="Score" android:screenOrientation="portrait"></activity>
|
||||
<activity android:name=".FrontPage" android:screenOrientation="portrait"></activity>
|
||||
</application>
|
||||
|
||||
|
||||
|
|
|
@ -13,30 +13,28 @@
|
|||
|
||||
<ImageView android:layout_height="wrap_content"
|
||||
android:text="@string/play_label" android:layout_width="wrap_content"
|
||||
android:id="@+id/play" android:clickable="true" android:padding="30dip" android:src="@drawable/mode_normal"/>
|
||||
android:id="@+id/play" android:clickable="true" android:padding="30dip"
|
||||
android:src="@drawable/mode_normal"/>
|
||||
|
||||
<ImageView android:src="@drawable/config" android:layout_height="wrap_content" android:id="@+id/prefs"
|
||||
<ImageView android:src="@drawable/config"
|
||||
android:layout_height="wrap_content" android:id="@+id/prefs"
|
||||
android:layout_width="wrap_content" android:layout_below="@+id/play"
|
||||
android:layout_alignLeft="@+id/play" android:layout_alignRight="@+id/play" android:padding="30dip"></ImageView>
|
||||
android:layout_alignLeft="@+id/play" android:layout_alignRight="@+id/play"
|
||||
android:padding="30dip"></ImageView>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout android:id="@+id/LinearLayout01"
|
||||
android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="vertical" android:layout_weight="1">
|
||||
android:layout_height="wrap_content" android:layout_width="fill_parent"
|
||||
android:orientation="vertical" android:layout_weight="1">
|
||||
|
||||
<TextView android:layout_height="wrap_content"
|
||||
android:layout_width="fill_parent" android:textStyle="bold"
|
||||
android:gravity="center_horizontal" android:text="@+id/login"
|
||||
android:id="@+id/login"></TextView>
|
||||
<ImageView android:layout_height="wrap_content" android:id="@+id/infoButton"
|
||||
android:layout_width="wrap_content" android:layout_gravity="right" android:layout_weight="5"
|
||||
android:clickable="true" android:src="@drawable/aide"/>
|
||||
android:layout_width="wrap_content" android:layout_gravity="right"
|
||||
android:layout_weight="5" android:clickable="true" android:src="@drawable/aide" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -9,13 +9,11 @@ import org.pticlic.model.Network;
|
|||
import org.pticlic.model.Network.Mode;
|
||||
import org.pticlic.model.Relation;
|
||||
|
||||
import android.R.anim;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.view.Display;
|
||||
|
|
|
@ -229,16 +229,26 @@ function main($action) {
|
|||
} else if($action == 1) { // "Set partie"
|
||||
// Requête sql d'ajout d'informations (et calcul de résultat).
|
||||
// TODO : nettoyer, finir
|
||||
$gid = $_GET['gid']; // TODO : vérifier qu'on a bien distribué cette partie à cet utilisateur, et qu'il n'y a pas déjà répondu (répercuter ça sur le random_game).
|
||||
$userReputation = 5; // TODO : un nombre entre 0 et 5 environ. Par ex. log(pointsUtilisateur) est un bon choix.
|
||||
|
||||
$gid = $_GET['gid'];
|
||||
|
||||
if(ĝid != $db->querySingle("SELECT gid FROM played_game WHERE login='".$user."'"))
|
||||
mdie(3,"Cette partie n'est associée à votre nom d'utilisateur");
|
||||
|
||||
$userReputation = log($db->querySingle("SELECT score FROM user WHERE login='".$user."'"));
|
||||
|
||||
$db->exec("begin transaction;");
|
||||
$db->exec("insert into played_game(pgid, gid, login) values (null, $gid, null);");
|
||||
$db->exec("INSERT INTO played_game(pgid, gid, login) VALUES (null, $gid, null);");
|
||||
$pgid = $db->lastInsertRowID();
|
||||
for ($i=0; $i < 10; $i++) {
|
||||
|
||||
for($i=0; $i < 10; $i++)
|
||||
{
|
||||
$x = $_GET['$i'];
|
||||
|
||||
// TODO : calculer le score. Score = proba[réponse de l'utilisateur]*coeff - proba[autres reponses]*coeff
|
||||
// TODO : adapter le score en fonction de la réputation de l'utilisateur (plus quand il est jeune, pour le motiver, par ex. avec un terme constant qu'on ajoute).
|
||||
$score = 1;
|
||||
|
||||
$db->exec("insert into played_game_cloud(pgid, gid, type, num, relation, weight, score) values($pgid, $gid, 1, ".$c['pos'].", $r1, ".($x*$userReputation).", ".$score.");");
|
||||
// TODO : game_cloud(probaR_x_) += $réputationJoueur * $coeff
|
||||
// TODO : game_cloud(totalWeight) += $réputationJoueur * $coeff (NOTE : même coeff que pour game_cloud(probaR_x_))
|
||||
|
|
|
@ -1,3 +1,24 @@
|
|||
- Une classe Constante pour toutes les constantes ("symboles" pour les paramètres, ...).
|
||||
- Boutons pour les différents modes de jeu directement sur la "page de garde".
|
||||
- Icônes : http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
|
||||
|
||||
NOTES SUITE A LA REUNION
|
||||
- addiction -> IMPORTANT ... teasing socialisation
|
||||
- choix de la thématique : cadeau thématique
|
||||
- game with a purpose GWAP
|
||||
- espi
|
||||
- liberman (sp?)
|
||||
- indexation des images Google
|
||||
- code pour Google.com code.google.com/intl/fr~FR/apis/chart/index.html
|
||||
- qrcode
|
||||
- lire sur site pour installer appli
|
||||
- bêta testeurs externes
|
||||
- intuitivité
|
||||
- réflexion : intuitivité - prototypes -
|
||||
- bouton aide -> affiche les icônes en vertical + texte, il y a moins de place pour le mot du nuage, mais on peut continuer à jouer en cliquant sur ces "gros" boutons.
|
||||
- Modes de jeu supplémentaires payants par ex.
|
||||
|
||||
|
||||
POUR LAFOURCADE
|
||||
- lien : code.google.com/intl/fr~FR/apis/chart/index.html
|
||||
- note techniques exactes pour le serveur au LIRMM
|
||||
|
|
|
@ -60,6 +60,45 @@ Un grand nombre de développeurs ont créés des applications pour étendre la f
|
|||
|
||||
\section{Conception}
|
||||
|
||||
\begin{verbatim}
|
||||
NODE(EID integer primary key autoincrement, name string, #type (ref TYPE_NODE.num), weight);
|
||||
|
||||
RELATION(RID integer primary key autoincrement, #start (ref NODE.eid), #end (ref NODE.eid), #type (ref TYPE_RELATION.num), weight);
|
||||
|
||||
TYPE_NODE(NUM, name string);
|
||||
|
||||
TYPE_RELATION(NUM, name string, extended_name string, info string);
|
||||
|
||||
USER(LOGIN string primary key, mail string, hash_passwd string (md5sum du password), #score (contrainte : somme de tous les scores des PLAYED_GAME_CLOUD);
|
||||
|
||||
GAME(GID integer primary key autoincrement, #eid_central_word (ref NODE.eid, #relation_1 (ref RELATION.rid), #relation_2 ( (ref RELATION.rid), difficulty);
|
||||
|
||||
GAME_CLOUD(GID, NUM, difficulty, #eid_word(ref NODE.eid), totalWeight (contrainte : = somme des probas), probaR1 (contrainte : = somme des probas des PLAYED_GAME_CLOUD.weight avec la bonne relation et la même gid et num), probaR2 (idem), probaR0 (idem), probaTrash (idem));
|
||||
|
||||
PLAYED_GAME(PGID integer primary key autoincrement, #gid (ref GAME.gid), #login (ref USER.login);
|
||||
|
||||
PLAYED_GAME_CLOUD(#PGID (ref PLAYED_GAME.pgid), #GID (ref PLAYED_GAME.gid), NUM, type (contrainte : 0 = partie de référence, 1 = réponse d'un joueur), #relation (ref RELATION.rid), weight (contrainte : probabilité estimée de cette réponse pour les bots (robots), réputation du joueur sinon), score (score donné au joueur, 0 pour les bots);
|
||||
|
||||
**INT unless otherwise marked
|
||||
\end{verbatim}
|
||||
\begin{verbatim}
|
||||
create table node(eid integer primary key autoincrement, name, type, weight);
|
||||
create table relation(rid integer primary key autoincrement, start, end, type, weight);
|
||||
create table type_node(name, num);
|
||||
create table type_relation(name, num, extended_name, info);
|
||||
create table user(login primary key, mail, hash_passwd, score);
|
||||
create table game(gid integer primary key autoincrement, eid_central_word, relation_1, relation_2, difficulty);
|
||||
create table game_cloud(gid, num, difficulty, eid_word, totalWeight, probaR1, probaR2, probaR0, probaTrash);
|
||||
create table played_game(pgid integer primary key autoincrement, gid, login);
|
||||
create table played_game_cloud(pgid, gid, type, num, relation, weight, score);
|
||||
|
||||
create index i_relation_start on relation(start);
|
||||
create index i_relation_end on relation(end);
|
||||
create index i_relation_type on relation(type);
|
||||
create index i_relation_start_type on relation(start,type);
|
||||
create index i_relation_end_type on relation(end,type);
|
||||
\end{verbatim}
|
||||
|
||||
TODO: UML, diagrammes de classes, Use cases, etc...
|
||||
|
||||
|
||||
|
@ -87,6 +126,22 @@ TODO: UML, diagrammes de classes, Use cases, etc...
|
|||
\item Caractères non échappés dans le dump de la base.% gd
|
||||
\end{itemize}
|
||||
|
||||
\subsubsection{Itération 1, semaine 3}
|
||||
\begin{itemize}
|
||||
\item SQLite3 n'est pas capable d'utiliser un index pour la requête extérieure sur une requête du type
|
||||
\begin{verbatim}
|
||||
select * from (select * from table where condition) where condition
|
||||
\end{verbatim}
|
||||
Donc nécessité de ré-écrire certaines requêtes avec des jointures à priori beaucoup moins efficaces, mais qui le sont plus grâce aux index.
|
||||
\item SQLite3 tranforme les requêtes de la forme~:
|
||||
\begin{verbatim}
|
||||
select * from table limit 100 order by random();
|
||||
\end{verbatim}
|
||||
en une requête qui récupère tout le set de résultats, ajoute une colonne random(), prend les 100 premiers résultats et les trie. Mais cela
|
||||
l'oblige à récupérer tout le set de résultats, et calculer le random() pour chaque ligne, pour ensuite jeter tout ce qui dépasse la ligne
|
||||
100. Cela est évidemment très coûteux dans le cadre de requêtes avec beaucoup de résultats, et nous avons donc dû isoler la requête avec
|
||||
\verb!limit! de son \verb!order by! avec des «hacks» assez tordus.
|
||||
\end{itemize}
|
||||
|
||||
\section{Conclusions}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user