Nantes Université

Skip to content
Extraits de code Groupes Projets

Comparer les révisions

Les modifications sont affichées comme si la révision source était fusionnée avec la révision cible. En savoir plus sur la comparaison des révisions.

Source

Sélectionner le projet cible
No results found
Sélectionner une révision Git

Cible

Sélectionner le projet cible
  • jezequel-l/introdev
1 résultat
Sélectionner une révision Git
Afficher les modifications
Validations sur la source (2)
Affichage de
avec 214 ajouts et 60 suppressions
...@@ -17,4 +17,5 @@ cours-manu/* ...@@ -17,4 +17,5 @@ cours-manu/*
*.xdv *.xdv
*.xcf *.xcf
projet-particules/correction/* projet-particules/correction/*
projet-quadtree/correction/*
feedback* feedback*
package main
import "fmt"
// t1 et t2 sont deux tableaux triés, la fonction fusion
// construit un nouveau tableau res qui contient tous les
// éléments de t1 et t2 et qui est trié.
func fusion(t1, t2 []int) (res []int) {
// res doit pouvoir contenir tous les éléments.
res = make([]int, len(t1)+len(t2))
// tant qu'il reste des éléments dans t1 et dans t2
// on les consomme un par un par ordre croissant, pour
// cela il suffit de comparer le premier élément de t1
// et le premier élément de t2.
var pos int
for len(t1) > 0 && len(t2) > 0 {
if t1[0] < t2[0] {
res[pos] = t1[0]
t1 = t1[1:]
} else {
res[pos] = t2[0]
t2 = t2[1:]
}
pos++
}
// après la boucle il ne reste des éléments que dans
// un seul tableau, soit t1, soit t2. On ajoute tous
// ces éléments dans res (ils sont nécessairement plus
// grand que les éléments déjà dans res) en tirant partie
// du fait qu'une boucle sur un tableau vide ne fait rien.
for len(t1) > 0 {
res[pos] = t1[0]
t1 = t1[1:]
pos++
}
for len(t2) > 0 {
res[pos] = t2[0]
t2 = t2[1:]
pos++
}
return res
}
// triFusion est une fonction récursive qui tri un tableau
// en le séparant en deux, puis en triant les deux parties
// (en refaisant un tri fusion) et en les fusionnant à l'aide
// de la fonction fusion.
// Le cas d'arrêt est quand on rencontre un tableau de 0 ou
// une case (un tel tableau est déjà trié).
func triFusion(t []int) (res []int) {
if len(t) <= 1 {
return t
}
res = fusion(
triFusion(t[:len(t)/2]),
triFusion(t[len(t)/2:]),
)
return
}
func main() {
var t1 []int = []int{5, 2, 35, 14, 87, 52, 45, 69, 2, 5, 8, 9, 6, 48, 57, 23}
fmt.Println(triFusion(t1))
var t2 []int = []int{1, -2, -5, 9, 8, 7, -9, -6, 3, 5, 6, 8}
fmt.Println(triFusion(t2))
}
Ce diff est replié.
...@@ -11,6 +11,6 @@ type Camera struct { ...@@ -11,6 +11,6 @@ type Camera struct {
// types de caméra disponibles // types de caméra disponibles
const ( const (
static int = iota Static int = iota
followCharacter FollowCharacter
) )
package camera package camera
// Init met en place une caméra. Pour le moment import "gitlab.univ-nantes.fr/jezequel-l/quadtree/configuration"
// cette fonction n'a aucun effet, mais vous aurez
// peut-être besoin de changer cela. // Init met en place une caméra.
func (c *Camera) Init() {} func (c *Camera) Init() {
if configuration.Global.CameraMode == Static {
c.X = configuration.Global.ScreenCenterTileX
c.Y = configuration.Global.ScreenCenterTileY
}
}
...@@ -7,9 +7,9 @@ import "gitlab.univ-nantes.fr/jezequel-l/quadtree/configuration" ...@@ -7,9 +7,9 @@ import "gitlab.univ-nantes.fr/jezequel-l/quadtree/configuration"
func (c *Camera) Update(characterPosX, characterPosY int) { func (c *Camera) Update(characterPosX, characterPosY int) {
switch configuration.Global.CameraMode { switch configuration.Global.CameraMode {
case static: case Static:
c.updateStatic() c.updateStatic()
case followCharacter: case FollowCharacter:
c.updateFollowCharacter(characterPosX, characterPosY) c.updateFollowCharacter(characterPosX, characterPosY)
} }
} }
......
package character package character
import (
"gitlab.univ-nantes.fr/jezequel-l/quadtree/camera"
"gitlab.univ-nantes.fr/jezequel-l/quadtree/configuration"
)
// Init met en place un personnage. Pour le moment // Init met en place un personnage. Pour le moment
// cela consiste simplement à initialiser une variable // cela consiste simplement à initialiser une variable
// responsable de définir l'étape d'animation courante. // responsable de définir l'étape d'animation courante.
func (c *Character) Init() { func (c *Character) Init() {
c.animationStep = 1 c.animationStep = 1
if configuration.Global.CameraMode == camera.Static {
c.X = configuration.Global.ScreenCenterTileX
c.Y = configuration.Global.ScreenCenterTileY
}
} }
Fichier ajouté
{ {
"DebugMode": false,
"NumTileX": 9, "NumTileX": 9,
"NumTileY": 9, "NumTileY": 9,
"TileSize": 16, "TileSize": 16,
......
...@@ -14,9 +14,6 @@ import ( ...@@ -14,9 +14,6 @@ import (
func main() { func main() {
var debug bool
flag.BoolVar(&debug, "debug", false, "toggle debug information")
var configFileName string var configFileName string
flag.StringVar(&configFileName, "config", "config.json", "select configuration file") flag.StringVar(&configFileName, "config", "config.json", "select configuration file")
...@@ -27,7 +24,7 @@ func main() { ...@@ -27,7 +24,7 @@ func main() {
assets.Load() assets.Load()
g := &game.Game{} g := &game.Game{}
g.Init(debug) g.Init()
ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled) ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
......
...@@ -11,6 +11,7 @@ import ( ...@@ -11,6 +11,7 @@ import (
// suffit d'ajouter un champs dans cette structure. // suffit d'ajouter un champs dans cette structure.
// //
// Les champs directement lus dans le fichier de configuration sont : // Les champs directement lus dans le fichier de configuration sont :
// - DebugMode : indique si on est en mode debug ou pas
// - NumTileX, NumTileY : les nombres de cases affichées à l'écran // - NumTileX, NumTileY : les nombres de cases affichées à l'écran
// en largeur et hauteur. // en largeur et hauteur.
// - TileSize : la taille en pixels du côté d'une case. // - TileSize : la taille en pixels du côté d'une case.
...@@ -34,6 +35,7 @@ import ( ...@@ -34,6 +35,7 @@ import (
// - ScreenCenterTileX, ScreenCenterTileY : les coordonnées de la case // - ScreenCenterTileX, ScreenCenterTileY : les coordonnées de la case
// au centre de l'écran, où sera placé la caméra. // au centre de l'écran, où sera placé la caméra.
type Configuration struct { type Configuration struct {
DebugMode bool
NumTileX, NumTileY int NumTileX, NumTileY int
TileSize int TileSize int
NumCharacterAnimImages int NumCharacterAnimImages int
......
...@@ -19,7 +19,7 @@ func (g *Game) Draw(screen *ebiten.Image) { ...@@ -19,7 +19,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
g.floor.Draw(screen) g.floor.Draw(screen)
g.character.Draw(screen, g.camera.X, g.camera.Y) g.character.Draw(screen, g.camera.X, g.camera.Y)
if g.debug { if configuration.Global.DebugMode {
g.drawDebug(screen) g.drawDebug(screen)
} }
} }
......
...@@ -10,12 +10,10 @@ import ( ...@@ -10,12 +10,10 @@ import (
// Aucun champs n'est exporté pour le moment. // Aucun champs n'est exporté pour le moment.
// //
// Les champs non exportés sont : // Les champs non exportés sont :
// - debug : indique si les informations de debug doivent être affichées ou non
// - camera : la représentation de la caméra // - camera : la représentation de la caméra
// - floor : la représentation du terrain // - floor : la représentation du terrain
// - character : la représentation du personnage // - character : la représentation du personnage
type Game struct { type Game struct {
debug bool
camera camera.Camera camera camera.Camera
floor floor.Floor floor floor.Floor
character character.Character character character.Character
......
...@@ -3,8 +3,7 @@ package game ...@@ -3,8 +3,7 @@ package game
// Init initialise les données d'un jeu. Il faut bien // Init initialise les données d'un jeu. Il faut bien
// faire attention à l'ordre des initialisation car elles // faire attention à l'ordre des initialisation car elles
// pourraient dépendre les unes des autres. // pourraient dépendre les unes des autres.
func (g *Game) Init(debug bool) { func (g *Game) Init() {
g.debug = debug
g.character.Init() g.character.Init()
g.camera.Init() g.camera.Init()
g.floor.Init() g.floor.Init()
......
...@@ -9,7 +9,7 @@ import "gitlab.univ-nantes.fr/jezequel-l/quadtree/configuration" ...@@ -9,7 +9,7 @@ import "gitlab.univ-nantes.fr/jezequel-l/quadtree/configuration"
func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) { func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
screenWidth = configuration.Global.ScreenWidth screenWidth = configuration.Global.ScreenWidth
screenHeight = configuration.Global.ScreenHeight screenHeight = configuration.Global.ScreenHeight
if g.debug { if configuration.Global.DebugMode {
screenWidth += configuration.Global.NumTileForDebug * configuration.Global.TileSize screenWidth += configuration.Global.NumTileForDebug * configuration.Global.TileSize
screenHeight += configuration.Global.TileSize screenHeight += configuration.Global.TileSize
} }
......
...@@ -3,6 +3,7 @@ package game ...@@ -3,6 +3,7 @@ package game
import ( import (
"github.com/hajimehoshi/ebiten/v2" "github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil" "github.com/hajimehoshi/ebiten/v2/inpututil"
"gitlab.univ-nantes.fr/jezequel-l/quadtree/configuration"
) )
// Update met à jour les données du jeu à chaque 1/60 de seconde. // Update met à jour les données du jeu à chaque 1/60 de seconde.
...@@ -13,7 +14,7 @@ import ( ...@@ -13,7 +14,7 @@ import (
func (g *Game) Update() error { func (g *Game) Update() error {
if inpututil.IsKeyJustPressed(ebiten.KeyD) { if inpututil.IsKeyJustPressed(ebiten.KeyD) {
g.debug = !g.debug configuration.Global.DebugMode = !configuration.Global.DebugMode
} }
g.character.Update(g.floor.Blocking(g.character.X, g.character.Y, g.camera.X, g.camera.Y)) g.character.Update(g.floor.Blocking(g.character.X, g.character.Y, g.camera.X, g.camera.Y))
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
Faire des trucs avec des "main" pour créer des exécutables (on ne le fait jamais en réalité, à part au projet final) Faire des trucs avec des "main" pour créer des exécutables (on ne le fait jamais en réalité, à part au projet final)
Récursivité : montrer l'intuition avec plein de fonctions au lieu d'une seule : f(n) récursive c'est comme avoir une fonction f5 qui appelle f4, f4 qui appelle f3, etc
## Implem du cours ## Implem du cours
- pour la couverture, appeler le fichier out et pas quelquechose.out (le point a l'air de poser problème… sous Windows ?) - pour la couverture, appeler le fichier out et pas quelquechose.out (le point a l'air de poser problème… sous Windows ?)
......
%!LW recipe=latexmk (xelatex)
\documentclass[a4paper]{article} \documentclass[a4paper]{article}
\usepackage{fullpage} \usepackage{fullpage}
...@@ -5,12 +6,29 @@ ...@@ -5,12 +6,29 @@
\usepackage[french]{babel} \usepackage[french]{babel}
\usepackage[hyperfootnotes=false]{hyperref} \usepackage[hyperfootnotes=false]{hyperref}
\usepackage{helvet} % Polices
\renewcommand{\familydefault}{\sfdefault} % Très grand
% \def\helpstyle{0}
%\usepackage[fontsize=18pt]{scrextend} % Police dyslexie
%\usepackage{setspace} \def\helpstyle{1}
%\onehalfspacing \ifx\helpstyle\undefined
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}
\else
\if\helpstyle0
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[fontsize=18pt]{scrextend}
\usepackage{setspace}
\onehalfspacing
\else
\usepackage{fontspec}
\setmainfont{OpenDyslexic3}
\usepackage[fontsize=12pt]{scrextend}
\usepackage{setspace}
\onehalfspacing
\fi
\fi
%boxes %boxes
\newcounter{saveFootnote} \newcounter{saveFootnote}
......
%!LW recipe=latexmk (xelatex)
\documentclass[a4paper]{article} \documentclass[a4paper]{article}
\usepackage{fullpage} \usepackage{fullpage}
...@@ -5,12 +6,29 @@ ...@@ -5,12 +6,29 @@
\usepackage[french]{babel} \usepackage[french]{babel}
\usepackage[hyperfootnotes=false]{hyperref} \usepackage[hyperfootnotes=false]{hyperref}
\usepackage{helvet} % Polices
\renewcommand{\familydefault}{\sfdefault} % Très grand
% \def\helpstyle{0}
%\usepackage[fontsize=18pt]{scrextend} % Police dyslexie
%\usepackage{setspace} \def\helpstyle{1}
%\onehalfspacing \ifx\helpstyle\undefined
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}
\else
\if\helpstyle0
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[fontsize=18pt]{scrextend}
\usepackage{setspace}
\onehalfspacing
\else
\usepackage{fontspec}
\setmainfont{OpenDyslexic3}
\usepackage[fontsize=12pt]{scrextend}
\usepackage{setspace}
\onehalfspacing
\fi
\fi
%boxes %boxes
\newcounter{saveFootnote} \newcounter{saveFootnote}
......