IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Projets Discussion :

Puzzle Game : Papi Commando's TIRE GAME - Jeu de Réflexion et adresse réalisé en QB64.


Sujet :

Projets

  1. #1
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut Puzzle Game : Papi Commando's TIRE GAME - Jeu de Réflexion et adresse réalisé en QB64.


    Bonjour à tous !!

    Dans le cadre de mes tutoriels avec QB64, j'ai eu l'idée de réaliser un petit jeu de réflexion et d'adresse simple et addictif : TIRE GAME !

    Dans ce jeu, vous devrez aider Papi a, d'une part trouver dans le tableau, le seul pneu que Papi pourra bouger, et d'autre part, le pousser vers la sortie du tableau !

    Comme vous pouvez le voir ici au dessous du HI SCORE :



    En cas de succès, vous passerez au tableau suivant avec plus de pneu à résoudre.
    Toute la subtilité et de ne pas bloquer le pneu dans un coin ou contre d'autres pneus d'autant plus que votre temps est compté !

    En cas d'échec, vous serez invité à relancer une nouvelle partie ou quitter le jeu :



    Si vous ne pouvez pas résoudre un tableau, vous pouvez accélérer le temps en appuyant sur la touche "R" !
    Pour contrôler Papi, il suffit d'utiliser les touches fléchées.

    Au niveau technique le jeu gère :
    - HitBox fixe et mouvante.
    - Génération de tableau avec difficulté croissante.
    - Z.Ordering.
    - Gestion du Score.
    - Gestion d'un TIMER.

    - Résolution unique de 320 x 200.
    - Mode fenêtré.

    L'avantage de ce petit jeu est qu'il est très léger en ressources, et devrait tourner même sur des machines modestes.

    Le code source est d'ordre pédagogique dans la démarche de mes tutoriels et vous pourrez le modifier à souhait pour changer des aspects de Gameplay ou autre.

    Lien du jeu ( Version Windows ):
    https://dl.dropboxusercontent.com/u/...ire%20Game.zip

    Code source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
    796
    797
    798
    799
    800
    801
    802
    803
    804
    805
    806
    807
    808
    809
    810
    811
    812
    813
    814
    815
    '==================
    '= Papi's TIRE    =
    '=      GAME      =
    '=     2014       =
    '==================
     
    'Chargement de la librairie
    '$INCLUDE:'Ressources\Lib\spritetop.bi'
     
     
    '///// R‚solution de notre fenˆtre principale /////
    SCREEN _NEWIMAGE(320, 200, 32) 'X - 320 & Y - 200, 32 Millions de couleur
     
    _SCREENMOVE _MIDDLE 'On centre l'‚cran en mode fenˆtr‚
     
    CLS 'on efface l'‚cran
     
    'Titre de la fenˆtre
    _TITLE "Tire GAME (c) 2014 Vetea" 'L'‚cran de notre fenˆtre
     
    _FULLSCREEN _OFF 'Mode fenˆtr‚ _ON ' Mode plein ‚cran
     
     
    '///// D‚claration de nos variables principales /////
    CONST FALSE = 0, TRUE = NOT FALSE ' Constante bool‚enne
     
    ' Les diff‚rentes type de variables : SINGLE ( +-2.802597E-45, +-3.402823E+38 ) = variable virgule flottante de 4 bits, INTEGER ( -32768, + 32768 ) = variable type entier de 2 bits
    ' _BYTE ( -128,128 )= Variable type entier de 1 bit, LONG ( -2 147 483 648, 2 147 483 647 ) = Variable type entier de 4 bits
     
    TYPE SpriteT
        CoordX AS SINGLE 'Coordonn‚es X du sprite
        CoordY AS SINGLE 'Coordonn‚es Y du sprite
        Visible AS _BYTE 'Visibilit‚ du sprite
        Tile AS LONG 'Table graphique principale - TileSet
        Vitesse AS _BYTE 'Vitesse de notre sprite
        Frame AS INTEGER 'Frame d'animation courante
        FrameMax AS INTEGER 'Frame d'animation maxi par mouvement
        SensAnimation AS INTEGER 'Sens de la frame d'animation
        SensDeplacement AS STRING * 2 'Sens de d‚placement de notre sprite
        NumeroAnimation AS INTEGER 'Num‚ro du sprite pour l'animation
        TempoAnimation AS INTEGER 'Tempo pour la vitesse d'animation
     
        'Le gabarit de nos objets
        IntervalleXmin AS INTEGER
        IntervalleXmax AS INTEGER
        IntervalleYmin AS INTEGER
        IntervalleYmax AS INTEGER
     
        'Le type de notre objet
        Obstacle AS _BYTE '1 si obstacle, 2 obstacle mouvant, 0 rien
        HIT AS _BYTE 'Test de collision du pneu mouvant avec les obstacles
        ID AS _BYTE 'ID de notre sprite
        Target AS _BYTE 'Est ce que le sprite est la cible ?!
    END TYPE
     
    'Notre Tableau de carte en 2 Dimensions de 1024 x 1024, vous pourrez changer ces valeurs pour gagner un peu plus de m‚moire.
    DIM SHARED Obstacle(-512 TO 512, -512 TO 512) AS _BYTE ' 1 si obstacle, 0 si rien
     
    'Les variables de ressources
    'Les sprites
    DIM SHARED Spritetableau(100) AS SpriteT 'Nos sprites seront stock‚s ici ! On ira jusqu'20 ‚l‚ments pour la scŠne
    DIM SHARED SpriteBackGround AS SpriteT 'Notre BackGround
    DIM SHARED SpriteTableauTampon(100) AS SpriteT 'Variable "Tampon" qui stockera toutes les coordonn‚es Y et information pour le traitement du Z-Ordering de notre variable SpriteTableau.
    DIM SHARED SpriteEcran AS SpriteT 'Notre ‚cran de pr‚sentation
     
    'Les Textures
    DIM SHARED TableSprite AS LONG 'Notre table ou sera stock‚ notre sprite
    DIM SHARED TableBackGround AS LONG 'Notre table ou sera stock‚ notre BackGround
    DIM SHARED TablePneu AS LONG 'Notre table ou sera stock‚ notre pneu
    DIM SHARED TableEcran AS LONG 'notre ‚cran de pr‚sentation
     
    'La variable de test clavier
    DIM SHARED ModeClavier AS _BYTE
     
    'La Variable du nombre d'‚l‚ment de la scŠne
    DIM SHARED IDMax AS INTEGER
     
    'La Variable qui d‚finira Papi
    DIM SHARED IDPapi AS INTEGER
     
    'Variable de la zone de sortie
    DIM SHARED Sortie AS INTEGER
     
    'Variables Diverses
    DIM SHARED I, J, K, L AS INTEGER 'On les utilisera pour certaine boucle FOR NEXT
     
    'Le Nombre de Pneu de la scŠne
    DIM SHARED NombrePneu AS INTEGER, ComptagePneuEncadrement AS INTEGER
     
    'Score de Papi
    DIM SHARED Score AS INTEGER
    DIM SHARED Hiscore AS INTEGER 'Le Hi Score !
     
    'Le Temps restant
    DIM SHARED Time AS LONG
    DIM SHARED Delay AS LONG
    DIM SHARED CompteurJeu AS INTEGER
    DIM SHARED Tempo AS INTEGER
    DIM SHARED Speed AS _BYTE
     
    'Difficult‚ progressive du jeu en cas de succŠs
    DIM SHARED Difficulte AS INTEGER
     
    'Game Over & Partie R‚ussie
    DIM SHARED GameOver AS _BYTE
    DIM SHARED Sucess AS _BYTE
     
    'Les variables qui d‚finiront les d‚placements de notre sprite
    DIM SHARED Droite AS _BYTE, Gauche AS _BYTE, Haut AS _BYTE, Bas AS _BYTE, BGauche AS _BYTE, BDroite AS _BYTE, HGauche AS _BYTE, HDroite AS _BYTE
    DIM SHARED MoveRight AS LONG, MoveLeft AS LONG, MoveDown AS LONG, MoveUp AS LONG
    DIM SHARED DirectionHaut AS _BYTE, DirectionBas AS _BYTE, DirectionDroite AS _BYTE, DirectionGauche AS _BYTE
     
     
    '///// Chargement de nos Ressources /////
    ChargementGraphiques
    ChargementDonnees
     
    '///// Ecran de Pr‚sentation du jeu /////
    Ecranpresentation
     
    '///// Tableau de jeu et scŠne principale /////
    BouclePrincipale
     
    '///// Ecran de pr‚sentation du jeu /////
    SUB Ecranpresentation
    CLS
    DO
        _LIMIT 60 'INDISPENSABLE !! On limite l'affichage … 60 im/s
     
        AffichageSol
     
        SPRITEPUT 170, 155, SpriteEcran.Tile
     
        LOCATE 10, 15: PRINT "S TO START !"
     
        _DISPLAY 'INDISPENSABLE !!! Elimine le Flickering, et fluidifie notre rafraichisement d'‚cran.
     
    LOOP UNTIL (_KEYDOWN(83) OR _KEYDOWN(115)) 'On quitte en appuyant sur la touche Escape.
     
     
    END SUB
     
    '///// Boucle Principale /////
    SUB BouclePrincipale
    DO
        _LIMIT 60 'INDISPENSABLE !! On limite l'affichage … 60 im/s
     
        'Gestion du temps de jeu
        TempJeu
     
        'Voici les diff‚rentes proc‚dures qui gŠrent notre d‚mo :
        ToucheClavier 'Gestion physique Clavier
     
        'Voyons si notre pneu mouvant atteint notre zone de sortie et Papi Gagne un point !
        IF HITBOXSORTIE = 1 THEN Sucess = TRUE
     
        'Traitement du ZOrdering
        ZOrdering
     
        'Gestion du d‚placement de Papi
        GestionDeplacement
     
        'Gestion des limites du tableau de Papi
        LimiteZone
     
        AnimationUnite 'Animation du sprite
     
        AffichageScene
     
        _DISPLAY 'INDISPENSABLE !!! Elimine le Flickering, et fluidifie notre rafraichisement d'‚cran.
     
    LOOP UNTIL (_KEYDOWN(27)) 'On quitte en appuyant sur la touche Escape.
     
    SYSTEM 'Retour bureau
    END SUB
     
    '///// Gestion du Clavier - Touche /////
    SUB ToucheClavier
     
    'Association des variables / touches
     
    'Notez que si une touche n'est plus appuy‚e, on r‚initialise la variable de direction pour ‚viter que le personnage continue de se d‚placer si on relache la touce.
     
    'Init Clavier
    ModeClavier = FALSE 'Par d‚faut, le clavier est inactif si aucune touche n'est activ‚e.
     
    'Touches principales ( fl‚ch‚es )
    IF _KEYDOWN((MoveDown)) THEN DirectionBas = 1 ELSE DirectionBas = 0 'En bas
    IF _KEYDOWN((MoveUp)) THEN DirectionHaut = 1 ELSE DirectionHaut = 0 'En Haut
    IF _KEYDOWN((MoveLeft)) THEN DirectionGauche = 1 ELSE DirectionGauche = 0 'A gauche
    IF _KEYDOWN((MoveRight)) THEN DirectionDroite = 1 ELSE DirectionDroite = 0 'A droite
     
    'Gestion des diagonales
    IF DirectionBas = 1 AND DirectionGauche = 1 THEN BGauche = 1 ELSE BGauche = 0
    IF DirectionBas = 1 AND DirectionDroite = 1 THEN BDroite = 1 ELSE BDroite = 0
    IF DirectionHaut = 1 AND DirectionGauche = 1 THEN HGauche = 1 ELSE HGauche = 0
    IF DirectionHaut = 1 AND DirectionDroite = 1 THEN HDroite = 1 ELSE HDroite = 0
     
    'Gestion du reset Tableau , on augmente la vitesse du timer
    IF _KEYDOWN(82) OR _KEYDOWN(114) THEN
        Speed = TRUE
        Difficulte = 0
    END IF
     
    'cas du GameOver, on demande au joueur s'il d‚sire faire une autre partie
    IF GameOver = TRUE THEN
     
        IF _KEYDOWN(89) OR _KEYDOWN(121) THEN 'Si oui, on relance une nouvelle partie
            IF Score > Hiscore THEN Hiscore = Score
            Score = 0
            Difficulte = 0
            Speed = FALSE
            Sucess = FALSE
            Tempo = 0
            GameOver = FALSE
            CompteurJeu = 0
            Delay = 0
            ChargementDonnees
        END IF
     
        IF _KEYDOWN(78) OR _KEYDOWN(110) THEN 'Si Non, alors on quitte le jeu
            SYSTEM
        END IF
     
    END IF
     
     
    END SUB
     
    '///// Gestion des collisions avec le d‚cor /////
    FUNCTION HITBOX (coordx, coordy)
    IF Obstacle(coordx, coordy) = 1 THEN HITBOX = 1 ELSE HITBOX = 0 'Obstacle normal
     
    END FUNCTION
     
    '///// Gestion Limite Zone /////
    SUB LimiteZone
     
    'Dans le cadre des limites du tableau, on prend en compte la taille du sprite ( Hauteur : 48px, Largeur : 32px ) que l'on divise par 2 pour ne pas que le sprite d‚borde des limites.
    IF Spritetableau(IDPapi).CoordX > 320 THEN Spritetableau(IDPapi).CoordX = 320
    IF Spritetableau(IDPapi).CoordX < 0 THEN Spritetableau(IDPapi).CoordX = 0
    IF Spritetableau(IDPapi).CoordY > 200 THEN Spritetableau(IDPapi).CoordY = 200
    IF Spritetableau(IDPapi).CoordY < 0 THEN Spritetableau(IDPapi).CoordY = 0
    END SUB
     
     
    '///// Collision de notre pneu mouvant avec la Cible /////
    FUNCTION HITBOXSORTIE
     
    IF Spritetableau(1).CoordX > 320 OR Spritetableau(1).CoordX < -16 OR Spritetableau(1).CoordY < 0 OR Spritetableau(1).CoordY > 200 THEN HITBOXSORTIE = 1 ELSE HITBOXSORTIE = 0
     
    END FUNCTION
     
    '///// Gestion du pneu mouvant /////
    SUB PneuMouvant (SpeedPapi AS _BYTE)
     
    IF (ABS(Spritetableau(1).CoordX - Spritetableau(IDPapi).CoordX) <= 24 AND ABS((Spritetableau(1).CoordY - 8) - (Spritetableau(IDPapi).CoordY)) <= 16) THEN
     
        SELECT CASE Spritetableau(IDPapi).SensDeplacement
     
            CASE "H "
                IF Tirage = 0 THEN Spritetableau(1).CoordY = Spritetableau(1).CoordY - SpeedPapi
                IF HITBOX(Spritetableau(1).CoordX, Spritetableau(1).CoordY - 16) = 1 THEN
                    Spritetableau(1).HIT = 1
                ELSE
                    Spritetableau(1).HIT = 0
                END IF
     
            CASE "B "
                IF Tirage = 0 THEN Spritetableau(1).CoordY = Spritetableau(1).CoordY + SpeedPapi
                IF HITBOX(Spritetableau(1).CoordX, Spritetableau(1).CoordY - 16) = 1 THEN
                    Spritetableau(1).HIT = 1
                END IF
     
            CASE "D "
                IF Tirage = 0 THEN Spritetableau(1).CoordX = Spritetableau(1).CoordX + SpeedPapi
                IF HITBOX(Spritetableau(1).CoordX, Spritetableau(1).CoordY - 16) = 1 THEN
                    Spritetableau(1).HIT = 1
                ELSE
                    Spritetableau(1).HIT = 0
                END IF
     
            CASE "G "
                IF Tirage = 0 THEN Spritetableau(1).CoordX = Spritetableau(1).CoordX - SpeedPapi
                IF HITBOX(Spritetableau(1).CoordX, Spritetableau(1).CoordY - 16) = 1 THEN
                    Spritetableau(1).HIT = 1
                ELSE
                    Spritetableau(1).HIT = 0
                END IF
     
        END SELECT
     
    END IF
     
    END SUB
     
    '///// Gestion d‚placement du Sprite /////
    SUB GestionDeplacement
     
    'Si Game Over ou Succ‚s de la mission, Jeu en pause !
    IF Sucess = TRUE OR GameOver = TRUE THEN EXIT SUB
     
    'D‚finition des directions H,B,G,D
    IF DirectionBas = 1 THEN
        ModeClavier = TRUE 'Clavier actif !
        Spritetableau(IDPapi).NumeroAnimation = 0 'On attribue la frame de d‚part du sprite relatif … son d‚placement.
        Spritetableau(IDPapi).SensDeplacement = "B " 'On lui attribue ensuite la direction … prendre ( inutile dans le cadre de notre d‚mo, mais fort utile pour diverses am‚liorations et ajouts annexes. )
        Spritetableau(IDPapi).CoordY = Spritetableau(IDPapi).CoordY + (Spritetableau(IDPapi).Vitesse)
     
        'Gestion du pneu mouvant
        PneuMouvant Spritetableau(IDPapi).Vitesse
     
        'On teste s'il n'y a pas d'obstacles
        IF HITBOX(Spritetableau(IDPapi).CoordX, Spritetableau(IDPapi).CoordY) = 1 OR Spritetableau(1).HIT = 1 THEN
            Spritetableau(IDPapi).CoordY = Spritetableau(IDPapi).CoordY - (Spritetableau(IDPapi).Vitesse)
            IF Spritetableau(1).HIT = 1 THEN Spritetableau(1).CoordY = Spritetableau(1).CoordY - (Spritetableau(IDPapi).Vitesse)
            Spritetableau(1).HIT = 0
        END IF
     
    END IF
     
     
    IF DirectionHaut = 1 THEN
        ModeClavier = TRUE
        Spritetableau(IDPapi).NumeroAnimation = 9
        Spritetableau(IDPapi).SensDeplacement = "H "
        Spritetableau(IDPapi).CoordY = Spritetableau(IDPapi).CoordY - (Spritetableau(IDPapi).Vitesse)
     
        'Gestion du pneu mouvant
        PneuMouvant Spritetableau(IDPapi).Vitesse
     
        'On teste s'il n'y a pas d'obstacles
        IF HITBOX(Spritetableau(IDPapi).CoordX, Spritetableau(IDPapi).CoordY) = 1 OR Spritetableau(1).HIT = 1 THEN
            Spritetableau(IDPapi).CoordY = Spritetableau(IDPapi).CoordY + (Spritetableau(IDPapi).Vitesse)
            IF Spritetableau(1).HIT = 1 THEN Spritetableau(1).CoordY = Spritetableau(1).CoordY + (Spritetableau(IDPapi).Vitesse)
            Spritetableau(1).HIT = 0
        END IF
     
    END IF
     
    IF DirectionGauche = 1 THEN
        ModeClavier = TRUE
        Spritetableau(IDPapi).NumeroAnimation = 3
        Spritetableau(IDPapi).SensDeplacement = "G "
        Spritetableau(IDPapi).CoordX = Spritetableau(IDPapi).CoordX - (Spritetableau(IDPapi).Vitesse)
     
        'Gestion du pneu mouvant
        PneuMouvant Spritetableau(IDPapi).Vitesse
     
        'On teste s'il n'y a pas d'obstacles
        IF HITBOX(Spritetableau(IDPapi).CoordX, Spritetableau(IDPapi).CoordY) = 1 OR Spritetableau(1).HIT = 1 THEN
            Spritetableau(IDPapi).CoordX = Spritetableau(IDPapi).CoordX + (Spritetableau(IDPapi).Vitesse)
            IF Spritetableau(1).HIT = 1 THEN Spritetableau(1).CoordX = Spritetableau(1).CoordX + (Spritetableau(IDPapi).Vitesse)
            Spritetableau(1).HIT = 0
        END IF
     
    END IF
     
    IF DirectionDroite = 1 THEN
        ModeClavier = TRUE
        Spritetableau(IDPapi).NumeroAnimation = 6
        Spritetableau(IDPapi).SensDeplacement = "D "
        Spritetableau(IDPapi).CoordX = Spritetableau(IDPapi).CoordX + (Spritetableau(IDPapi).Vitesse)
     
        'Gestion du pneu mouvant
        PneuMouvant Spritetableau(IDPapi).Vitesse
     
        'On teste s'il n'y a pas d'obstacles
        IF HITBOX(Spritetableau(IDPapi).CoordX, Spritetableau(IDPapi).CoordY) = 1 OR Spritetableau(1).HIT = 1 THEN
            Spritetableau(IDPapi).CoordX = Spritetableau(IDPapi).CoordX - (Spritetableau(IDPapi).Vitesse)
            IF Spritetableau(1).HIT = 1 THEN Spritetableau(1).CoordX = Spritetableau(1).CoordX - (Spritetableau(IDPapi).Vitesse)
            Spritetableau(1).HIT = 0
        END IF
     
    END IF
     
    'Selection des sprite d'animations si d‚placement en diagonale
     
    IF HGauche = 1 THEN
        ModeClavier = TRUE
        Spritetableau(IDPapi).NumeroAnimation = 21
        Spritetableau(IDPapi).SensDeplacement = "HG"
    END IF
     
    IF HDroite = 1 THEN
        ModeClavier = TRUE
        Spritetableau(IDPapi).NumeroAnimation = 18
        Spritetableau(IDPapi).SensDeplacement = "HD"
    END IF
     
    IF BDroite = 1 THEN
        ModeClavier = TRUE
        Spritetableau(IDPapi).NumeroAnimation = 15
        Spritetableau(IDPapi).SensDeplacement = "BD"
    END IF
     
    IF BGauche = 1 THEN
        ModeClavier = TRUE
        Spritetableau(IDPapi).NumeroAnimation = 12
        Spritetableau(IDPapi).SensDeplacement = "BG"
    END IF
     
    END SUB
     
    '///// Gestion de l'animation du sprite /////
    SUB AnimationUnite
     
    'Si aucun appui touche, alors on r‚initialise la frame d'animation et on quitte la proc‚dure.
    IF ModeClavier = FALSE THEN
        Spritetableau(IDPapi).Frame = 2
        EXIT SUB
     
    ELSE
     
        'Si appui touche, on fait tourner les 3 frames d'animations ( Spritetableau(IDPapi).FrameMax = 3 ) de notre sprite.
     
        Spritetableau(IDPapi).TempoAnimation = Spritetableau(IDPapi).TempoAnimation + 1 'On incr‚mente notre tempo d'animation
     
        IF Spritetableau(IDPapi).TempoAnimation > 4 THEN
     
            Spritetableau(IDPapi).Frame = Spritetableau(IDPapi).Frame + 1 * Spritetableau(IDPapi).SensAnimation 'Routine principale de l'animation
     
            IF Spritetableau(IDPapi).Frame > Spritetableau(IDPapi).FrameMax THEN
                Spritetableau(IDPapi).Frame = Spritetableau(IDPapi).FrameMax
                Spritetableau(IDPapi).SensAnimation = -1 'Si l'on arrive … la fin des frame maxi alors on d‚cr‚mente le sens de l'animation
            END IF
     
     
            IF Spritetableau(IDPapi).Frame < 1 THEN 'Quand on arrive … la frame 1 on change … nouveau le sens de l'animation
                Spritetableau(IDPapi).Frame = 1
                Spritetableau(IDPapi).SensAnimation = 1
            END IF
     
            Spritetableau(IDPapi).TempoAnimation = 0 'Init du timer en fin de frame
     
        END IF
     
    END IF
     
    END SUB
     
    '///// Gestion de l'affichage du sprite /////
    SUB AffichageSprite (CoordX AS SINGLE, CoordY AS SINGLE, Animation AS INTEGER, ID AS INTEGER)
     
    'On s‚lectionne les diff‚rentes frame de notre table principal
    SPRITESET Spritetableau(ID).Tile, Animation 'S‚lection du sprite dans la table
     
    'On affiche notre joli sprite … l'‚cran
    SPRITESTAMP CoordX, CoordY, Spritetableau(ID).Tile 'Affichage du sprite
     
    END SUB
     
    '///// Affichage du BackGround /////
    SUB AffichageSol
    SPRITEPUT 256, 0, SpriteBackGround.Tile
    END SUB
     
    '///// Gestion du temps /////
    SUB TempJeu
     
    'Init du timer
    Time = TIMER
    IF Time > TIMER THEN
        IF Speed = TRUE THEN Delay = Delay + 20 ELSE Delay = Delay + 1
    END IF
     
    'Gestion des secondes
    IF Delay >= 32 THEN
        'Gestion du temps restant
        IF (GameOver = FALSE AND Sucess = FALSE) THEN CompteurJeu = CompteurJeu - 1
     
        'Gestion de la tempo si GameOver
        IF (GameOver = TRUE OR Sucess = TRUE) THEN Tempo = Tempo + 1
     
        Delay = 0
    END IF
     
    'Si le temps de jeu = 0 alors Game Over
    IF CompteurJeu <= 0 THEN
        GameOver = TRUE
        CompteurJeu = 0
        Speed = FALSE
    END IF
     
    'Si partie r‚ussie lors on affiche le statut de la partie et on attend 4 secondes
    IF Sucess = TRUE AND Tempo >= 4 THEN
     
        'Cas du succ‚s d'une partie, Papi gagne un point  et on augmente la difficult‚
        IF Sucess = TRUE THEN
            Score = Score + 1
            Difficulte = Difficulte + 1
        END IF
     
        Speed = FALSE
        Sucess = FALSE
        Tempo = 0
        GameOver = FALSE
        CompteurJeu = 0
        Delay = 0
        ChargementDonnees
     
    END IF
     
    END SUB
     
    '///// Affichage de notre Scene /////
    SUB AffichageScene
     
    'En premier lieu, on affichage notre Background '1ere couche
    AffichageSol
     
    'On affiche tous nos sprites avec le traitement du ZOrdering par le tri de leur ID - Spritetableau(Id).ID en lieu et place de I '2eme et derniere couche
    FOR I = 1 TO IDMax
        IF Spritetableau(Spritetableau(I).ID).Visible = TRUE THEN
            AffichageSprite Spritetableau(Spritetableau(I).ID).CoordX, Spritetableau(Spritetableau(I).ID).CoordY, Spritetableau(Spritetableau(I).ID).Frame + Spritetableau(Spritetableau(I).ID).NumeroAnimation, Spritetableau(I).ID 'Affichage du sprite
        END IF
    NEXT I
     
    'On affiche le score, Hiscore, Temps restant,Game Over et succ‚s de la partie !
    LOCATE 1, 1: PRINT "SCORE :" + STR$(Score)
    LOCATE 1, 28: PRINT "HI SCORE :" + STR$(Hiscore)
    LOCATE 1, 14: PRINT "Temps : " + STR$(CompteurJeu)
     
    IF GameOver = TRUE THEN
        LOCATE 5, 14: PRINT "GAME OVER !!!"
        LOCATE 7, 10: PRINT "ANOTHER GAME Y / N ??"
    END IF
     
    IF Sucess = TRUE THEN LOCATE 6, 16: PRINT "SUCESS !!!"
     
    _DISPLAY
     
    END SUB
     
    '////// Chargement Graphiques /////
    SUB ChargementGraphiques
     
    TableSprite = SPRITESHEETLOAD("Papi Tuto - HitBox Game\Ressources\Textures\PapiCommandoSprite32x48.png", 32, 48, AUTOTRANSPARENCY) 'Ici on charge notre table de sprite qui est compos‚ de rectangle de 11 px X 16 px avec un canal alpha.
    TableBackGround = SPRITESHEETLOAD("Papi Tuto - HitBox Game\Ressources\Textures\BackGround_512x512.png", 512, 512, AUTOTRANSPARENCY) 'On charge notre fond d'‚cran d'une taille unique de 512x512
    TablePneu = SPRITESHEETLOAD("Papi Tuto - HitBox Game\Ressources\Textures\Pneu_32x32.png", 32, 32, AUTOTRANSPARENCY) 'On charge notre pneu d'une taille de 32x32
    TableEcran = SPRITESHEETLOAD("Papi Tuto - HitBox Game\Ressources\Textures\TireGame.png", 320, 320, AUTOTRANSPARENCY) 'On charge notre pneu d'une taille de 32x32
     
    END SUB
     
     
    '///// Chargement Donn‚es /////
    SUB ChargementDonnees
     
    DIM DoublonX(5) AS INTEGER, DoublonY(5) AS INTEGER, Chevauchement AS _BYTE, Test AS INTEGER, ComptageEncadrement AS INTEGER
     
    'L'‚cran de pr‚sentation
    SpriteEcran.Tile = SPRITENEW(TableEcran, 1, SAVE)
     
    'Debut du Process
    Start:
     
    'Init de notre tableau
    CLS 'On efface l'‚cran
    ERASE Obstacle 'On efface notre tableau principal
    ERASE Spritetableau
    Test = 0
    Chevauchement = FALSE
    CompteurJeu = 0
    Delay = 0
     
    'Traitement de nos pneus
    RANDOMIZE TIMER 'On r‚g‚nŠre notre compteur RND
     
    'On d‚finit le nombre de pneus de la scŠne en fonction du niveau de difficult‚
    IF Difficulte > 15 THEN Difficulte = 16 'on limite le nombre de nos pneus pour ‚viter que le jeu plante
    NombrePneu = 2 + Difficulte
     
    'Calcul du temps total pour r‚soudre notre tableau, fonction du nombre de pneus du tableau
    CompteurJeu = NombrePneu * 5
     
    'Les pneus seront les premiers ‚l‚ments de la scŠne.
    FOR I = 1 TO NombrePneu
     
        Spritetableau(I).Tile = SPRITENEW(TablePneu, I, SAVE) 'On stocke le pneu avec nos 5 sprites
        Spritetableau(I).Obstacle = 1 'Notre pneu est un obstacle
        Spritetableau(1).Obstacle = 2 'Notre premier pneu pourra ˆtre boug‚ !
        Spritetableau(I).ID = I 'ID de nos pneus
        Spritetableau(I).Frame = 1
        Spritetableau(I).NumeroAnimation = 0
        Spritetableau(I).Visible = TRUE 'Le sprite sera visible
     
        'Le gabarit de notre pneu, vous pouvez peaufiner vos r‚glages en modifiant le rectangle de collision ( Xmin -> Xmax, Ymin -> Ymax ), le pneu mouvant aura un autre traitement
        Spritetableau(I).IntervalleXmin = -22
        Spritetableau(I).IntervalleXmax = 22
        Spritetableau(I).IntervalleYmin = -23
        Spritetableau(I).IntervalleYmax = 0
     
        Debut:
     
        Spritetableau(I).CoordX = INT((RND * 320) + 1) 'Nos coordonn‚es X seront comprises entre 0 et 320 et converties en ENTIER avec INT
        Spritetableau(I).CoordY = INT((RND * 200) + 1) 'Nos coordonn‚es X seront comprises entre 0 et 200 et converties en ENTIER avec INT
     
        'On va effectuer un petit algorithme qui va v‚rifier que nos pneus ne se chevaucheront pas
        FOR J = 1 TO NombrePneu
            IF I <> J THEN
                IF ABS(Spritetableau(J).CoordX - Spritetableau(I).CoordX) <= 40 AND ABS(Spritetableau(J).CoordY - Spritetableau(I).CoordY) <= 40 THEN Chevauchement = TRUE ELSE Chevauchement = FALSE
                IF Chevauchement = TRUE THEN GOTO Debut: 'Si les pneus se chevauchent, alors on relance le tirage
            END IF
        NEXT J
     
        'Gestion des limites des pneus du jeu
        'Cas des pneus "Obstacles" on veille … ce que ces pneus ne d‚passe pas du cadre du jeu sinon on relance le tirage
        IF I > 1 THEN
            IF Spritetableau(I).CoordX > 320 - 40 OR Spritetableau(I).CoordX < 0 + 40 THEN Chevauchement = TRUE
            IF Spritetableau(I).CoordY < 40 OR Spritetableau(I).CoordY > 200 - 40 THEN Chevauchement = TRUE
        ELSE
            'Cas du pneu mouvant, on laissera une marge de 64 px afin que ce pneu ne puisse pas ˆtre bloqu‚ contre le cadre
            IF Spritetableau(I).CoordX > 320 - 64 OR Spritetableau(I).CoordX < 0 + 64 THEN Chevauchement = TRUE
            IF Spritetableau(I).CoordY < 64 OR Spritetableau(I).CoordY > 200 - 64 THEN Chevauchement = TRUE
        END IF
     
        IF Chevauchement = TRUE THEN
            Test = Test + 1 'Test de v‚rification au cas ou l'algo prendrait trop de temps
            IF Test >= 5000 THEN GOTO Start: 'Si c'est le cas, alors on relance tout le process !
            GOTO Debut:
        END IF
     
        Chevauchement = FALSE
        'Calcul de notre Hitbox par rapport aux coordonn‚es du pneu  ( Seulement dans le cas d'un Pneu fixe )
        IF Spritetableau(I).Obstacle = 1 THEN
            FOR J = Spritetableau(I).IntervalleXmin TO Spritetableau(I).IntervalleXmax
                FOR K = Spritetableau(I).IntervalleYmin TO Spritetableau(I).IntervalleYmax
                    Obstacle((Spritetableau(I).CoordX + J), (Spritetableau(I).CoordY + K)) = 1
                NEXT K
            NEXT J
        ELSEIF Spritetableau(I).Obstacle = 2 THEN
            FOR J = Spritetableau(I).IntervalleXmin TO Spritetableau(I).IntervalleXmax
                FOR K = Spritetableau(I).IntervalleYmin TO Spritetableau(I).IntervalleYmax
                    Obstacle((Spritetableau(I).CoordX + J), (Spritetableau(I).CoordY + K)) = 2
                NEXT K
            NEXT J
     
        END IF
     
    NEXT I
     
    'La zone de sortie !
    Sortie = INT((RND * (NombrePneu + 36) + 1))
     
    'Nous allons v‚rifier que notre sortie soient bien visible dans notre tableau
    IF Sortie <= NombrePneu + 2 THEN Sortie = NombrePneu + 3
    IF Sortie >= NombrePneu + 32 THEN Sortie = NombrePneu + 30
     
    'Gestion de notre encadrement de pneu - Coordonn‚es X
    ComptagePneuEncadrement = 0
    FOR I = NombrePneu + 1 TO (NombrePneu + 1) + 18
        Spritetableau(I).Tile = SPRITENEW(TablePneu, I, SAVE) 'On stocke le pneu avec nos 5 sprites
        Spritetableau(I).Obstacle = 1 'Notre pneu est un obstacle
        Spritetableau(I).Visible = TRUE 'Le sprite sera visible
        IF I = Sortie THEN Spritetableau(I).Visible = FALSE
        Spritetableau(I).ID = I 'ID de nos pneus
        Spritetableau(I).Frame = 1
        Spritetableau(I).NumeroAnimation = 0
     
        ComptagePneuEncadrement = ComptagePneuEncadrement + 1 'Comptage du nombre de pneu de l'encadrement
     
        'Le gabarit de notre pneu, vous pouvez peaufiner vos r‚glages en modifiant le rectangle de collision ( Xmin -> Xmax, Ymin -> Ymax ), le pneu mouvant aura un autre traitement
        IF Spritetableau(I).Visible = TRUE THEN
            Spritetableau(I).IntervalleXmin = -21
            Spritetableau(I).IntervalleXmax = 21
            Spritetableau(I).IntervalleYmin = -22
            Spritetableau(I).IntervalleYmax = 0
        END IF
     
        'Traitement de notre encadrement du haut et du bas
        IF ComptagePneuEncadrement <= 9 THEN 'les 9 pneus du haut de l'‚cran
            Spritetableau(I).CoordY = 16
            Spritetableau(I).CoordX = ComptagePneuEncadrement * 32
        ELSEIF ComptagePneuEncadrement > 9 THEN 'Les 9 pneus en bas de l'‚cran
            Spritetableau(I).CoordY = 186
            Spritetableau(I).CoordX = ABS((9 - ComptagePneuEncadrement)) * 32
        END IF
     
        'Calcul de notre Hitbox par rapport aux coordonn‚es du pneu  ( Seulement dans le cas d'un Pneu fixe )
        IF Spritetableau(I).Visible = TRUE THEN
            FOR J = Spritetableau(I).IntervalleXmin TO Spritetableau(I).IntervalleXmax
                FOR K = Spritetableau(I).IntervalleYmin TO Spritetableau(I).IntervalleYmax
                    Obstacle((Spritetableau(I).CoordX + J), (Spritetableau(I).CoordY + K)) = 1
                NEXT K
            NEXT J
        END IF
     
    NEXT I
     
    'Gestion de notre encadrement de pneu - Coordonn‚es Y
    ComptagePneuEncadrement = 0
     
    FOR I = (NombrePneu + 1) + 18 TO ((NombrePneu + 1) + 18) + 14
        Spritetableau(I).Tile = SPRITENEW(TablePneu, I, SAVE) 'On stocke le pneu avec nos 5 sprites
        Spritetableau(I).Obstacle = 1 'Notre pneu est un obstacle
        Spritetableau(I).ID = I 'ID de nos pneus
        Spritetableau(I).Frame = 1
        Spritetableau(I).NumeroAnimation = 0
        Spritetableau(I).Visible = TRUE 'Le sprite sera visible
        IF I = Sortie THEN Spritetableau(I).Visible = FALSE
     
        ComptagePneuEncadrement = ComptagePneuEncadrement + 1 'Comptage du nombre de pneu de l'encadrement
     
        'Le gabarit de notre pneu, vous pouvez peaufiner vos r‚glages en modifiant le rectangle de collision ( Xmin -> Xmax, Ymin -> Ymax ), le pneu mouvant aura un autre traitement
        IF Spritetableau(I).Visible = TRUE THEN
            Spritetableau(I).IntervalleXmin = -21
            Spritetableau(I).IntervalleXmax = 21
            Spritetableau(I).IntervalleYmin = -22
            Spritetableau(I).IntervalleYmax = 0
        END IF
     
        'Traitement de notre encadrement Gauche et Droite
        IF ComptagePneuEncadrement <= 7 THEN 'les 7 pneus cot‚ droit
            Spritetableau(I).CoordY = ComptagePneuEncadrement * 24
            Spritetableau(I).CoordX = 16
        ELSEIF ComptagePneuEncadrement > 7 THEN 'Les 7 pneus cot‚ gauche
            Spritetableau(I).CoordY = ABS((7 - ComptagePneuEncadrement)) * 24
            Spritetableau(I).CoordX = 304
        END IF
     
        'Calcul de notre Hitbox par rapport aux coordonn‚es du pneu  ( Seulement dans le cas d'un Pneu fixe )
        IF Spritetableau(I).Visible = TRUE THEN
            FOR J = Spritetableau(I).IntervalleXmin TO Spritetableau(I).IntervalleXmax
                FOR K = Spritetableau(I).IntervalleYmin TO Spritetableau(I).IntervalleYmax
                    Obstacle((Spritetableau(I).CoordX + J), (Spritetableau(I).CoordY + K)) = 1
                NEXT K
            NEXT J
        END IF
    NEXT I
     
     
    'Sprite de notre Background
    SpriteBackGround.Tile = SPRITENEW(TableBackGround, 1, SAVE)
     
    'Sprite de notre papi
    'ID de notre Papi
    IDPapi = NombrePneu + 1 + 32 '32 est le nombre total de pneu de l'encadrement 18 + 14
     
    Spritetableau(IDPapi).ID = IDPapi 'ID de Papi
    Spritetableau(IDPapi).Tile = SPRITENEW(TableSprite, IDPapi, SAVE)
    Spritetableau(IDPapi).Obstacle = 0 'Notre sprite n'est pas un obstacle
    Spritetableau(IDPapi).NumeroAnimation = 9 'Frame d'animation de d‚part ( Sprite vu de derriŠre )
    Spritetableau(IDPapi).Visible = TRUE 'Sprite visible … l'‚cran
    Spritetableau(IDPapi).Vitesse = 2 'Vitesse du sprite
    Spritetableau(IDPapi).SensAnimation = 1
    Spritetableau(IDPapi).FrameMax = 3
    Spritetableau(IDPapi).Frame = 1
     
    'Position de notre Papi au d‚part de notre d‚mo, on va v‚rifier qu'il n'est pas sur un obstacle et n'est pas non plus aux extremes limite du tableau
    Calcul:
    Spritetableau(IDPapi).CoordX = INT((RND * 320) + 1)
    Spritetableau(IDPapi).CoordY = INT((RND * 200) + 1)
     
    IF Spritetableau(IDPapi).CoordX > 320 - 32 OR Spritetableau(IDPapi).CoordX < 0 + 32 THEN GOTO Calcul: 'Test de limite coordX
    IF Spritetableau(IDPapi).CoordY < 32 OR Spritetableau(IDPapi).CoordY > 200 - 32 THEN GOTO Calcul: 'Test de limite Coordy
    IF HITBOX(Spritetableau(IDPapi).CoordX, Spritetableau(IDPapi).CoordY) = 1 THEN GOTO Calcul: 'Test avec la pr‚sence d'obstacle
    IF Obstacle(Spritetableau(IDPapi).CoordX, Spritetableau(IDPapi).CoordY) = 2 THEN GOTO Calcul: 'Test avec le pneu mouvant
     
    'D‚finition du nombre maxi d'‚l‚ments de notre scŠne
    IDMax = IDPapi
     
    'D‚finition des touches de d‚placement ( Touches fl‚ch‚es ) - Il s'agit du code des touches. Vous pourrez les trouver sur le Wiki ou bien dans l'onglet "Help"
    MoveUp = 18432
    MoveDown = 20480
    MoveLeft = 19200
    MoveRight = 19712
     
    END SUB
     
    '///// Traitement du ZOrdering /////
    SUB ZOrdering
     
    DIM TamponID AS INTEGER
    DIM TamponY AS SINGLE
    DIM TamponCible AS INTEGER
     
    'Copie de nos donn‚es dans notre tableau tampon
    FOR I = 1 TO IDMax
        SpriteTableauTampon(I).CoordY = Spritetableau(I).CoordY
        SpriteTableauTampon(I).ID = I
        SpriteTableauTampon(I).Target = Spritetableau(I).Target
    NEXT I
     
    'Algorithme de traitement
    FOR I = 1 TO IDMax
        FOR J = I + 1 TO IDMax
     
            'Les hauteurs les plus basses seront mis en bas de liste et on ignore notre cible
            IF ((SpriteTableauTampon(J).CoordY) < (SpriteTableauTampon(I).CoordY)) AND SpriteTableauTampon(I).Target <> 1 THEN
                'Taitement des ID
                TamponID = SpriteTableauTampon(I).ID
                SpriteTableauTampon(I).ID = SpriteTableauTampon(J).ID
                SpriteTableauTampon(J).ID = TamponID
     
                'Traitement des coordonn‚es Y
                TamponY = SpriteTableauTampon(I).CoordY
                SpriteTableauTampon(I).CoordY = SpriteTableauTampon(J).CoordY
                SpriteTableauTampon(J).CoordY = TamponY
     
                'Traitement de la cible
                TamponCible = SpriteTableauTampon(I).Target
                SpriteTableauTampon(I).Target = SpriteTableauTampon(J).Target
                SpriteTableauTampon(J).Target = TamponCible
            END IF
        NEXT J
     
        'Apres Traitement, copie des ID traitées dans notre tableau d'origine
        Spritetableau(I).ID = SpriteTableauTampon(I).ID
     
    NEXT I
     
    END SUB
     
     
    '$INCLUDE:'Ressources\Lib\sprite.bi'
    Il m'a fallut 5 heures pour réaliser TIRE GAME avec QB64.
    Voila, pour vous montrer que l'on peut facilement réaliser des petits jeux sympathiques en très peu de temps avec cette fabuleuse technologie !

    En espérant que ce petit Puzzle Game vous plaise !

    Bon jeu à tous.
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

  2. #2
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut Version Linux & Windows.
    Bonjour à tous,

    Comme promis, voici la version Linux ( avec la version Windows ) dans le même lien que le post précédent :
    https://dl.dropboxusercontent.com/u/...ire%20Game.zip

    Vous y trouverez les deux .exe pour chaque version :
    Tire Game_Windows.exe & Tire Game_Linux

    Voila, amusez vous bien et si le concept vous plait, j'y ajouterai un peu de contenu avec grand plaisir.

    A bientôt.
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Bah dis donc t'es vachement productif toi

  4. #4
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut
    Citation Envoyé par bombseb Voir le message
    Bah dis donc t'es vachement productif toi
    Si peu ... Dire que j'en voulais faire mon métier étant jeune.

    Question à MoDDiB :
    Penses tu qu'un tel projet serait faisable sous Unity pour un débutant ?!

    Sinon, y avez vous joué ?!
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

  5. #5
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Citation Envoyé par Vetea Voir le message
    Question à MoDDiB :
    Penses tu qu'un tel projet serait faisable sous Unity pour un débutant ?!
    Lance toi au lieu de poser des questions, au pire tu auras la réponse où tu bloques dans les 20 mins sur le forum
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  6. #6
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut Petite Mise à jour !
    Bonsoir,

    Voila, je me suis amusé à améliorer quelque peu TIRE GAME !

    Voici les améliorations :
    - Vitesse réduite sous Linux.
    - Nouveau sprite de Papi lorsqu'il pousse quelque chose.
    - Le système de Scoring a été modifié : désormais le temps restant d'un stage sera ajouté au score total.
    - Ajustement des HitBox.
    - Amélioration de la génération de tableau.
    - Modification des informations en jeu.

    Quelques Screenshot :

    Ecran de présentation :


    Avant de commencer un Tableau :


    Papi en plein effort :


    Le lien reste toujours le même ( Windows et Linux ) :
    https://dl.dropboxusercontent.com/u/...ire%20Game.zip

    Bon jeu à tous !

    PS :
    @MoDDiB : Oui, je sais bien que les actes valent mieux que de longs discours. Mais j'ai déjà du mal à déplacer un sprite avec animation sous Unity pour le moment alors j'imagine avec un code plus complexe ... Je vais fermer, pour le moment, le chapitre Unity et te remercie encore de tous tes précieux conseils.
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Hep Vetea, tu a déja éssayé Purebasic ?

    Pas mal du tout aussi....

  8. #8
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut Petite vidéo de démonstration.
    Bonsoir,

    Voici une petite vidéo de démonstration de mon dernier jeu pour mieux vous le faire connaitre :



    Réalisé en plein écran avec le mode 320x200, l'immersion rétro est complète !!
    C'est un petit jeu simple et addictif qui, je pense, pourra être améliorer pour plus tard.

    Bonne visionnage.

    @BombSeb :
    Oui, je m'était même inscrit à l'époque sur le forum officiel et essayé le soft ...
    1/ J'ai pas DU TOUT accroché.
    2/ La version complète est payante.
    3/ QB64 est meilleur en tout point. ( Je ne suis pas objectif ?! )
    4/ QB64 est totalement gratuit et open source.
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    690
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2005
    Messages : 690
    Points : 1 647
    Points
    1 647
    Par défaut
    Oui c'est sur Purebasic n'est pas open source et c'est payant...en même temps 75€ quand tu es passionné c'est pas la fin du monde....
    Je le trouve bien, je trouve que ca fait des exe vraiment minuscule et qu'il est près de la machine

  10. #10
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut Derniers correctifs.
    Derniers correctifs de TIRE GAME avant la reprise des champs de bataille :

    - Possibilité de passer en mode plein écran ON / OFF avec la touche "F" ( indisponible sous Linux )
    - Résolution d'un bug qui faisait quitter le jeu.
    - Optimisation de la génération des tableaux.


    Le lien reste le même :
    https://dl.dropboxusercontent.com/u/...ire%20Game.zip

    Bon "pneu" !

    @Bombseb :
    Je suis parfaitement d'accord, 75 euros n'est pas la mer à boire mais le fait est que je n'ai pas accroché à ce Basic.
    QB64 est plus austère au niveau interface, mais une fois bien pris en main, on peut réaliser des "merveilles" !
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

  11. #11
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut
    Score du soir :



    Pas terrible ...
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

  12. #12
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut
    Bonsoir à tous,
    Je ressors du placard ce vieux projet vu qu'il colle un peu dans le WE-JV4.
    Je l'ai réalise en 8h en comptant les correctifs.
    C'est un puzzle game des plus simples sans sons et musiques.
    En tout cas, si j'avais eu l'occasion de participer, cela aurait été le jeu présenté.
    Bon jeu !
    Développeur - Créateur Amateur de Jeux vidéos
    Visitez ma page dédiée
    Visitez mon espace Itch.io
    Mon canal Discord

Discussions similaires

  1. [Projet terminé] Papi Commando et le COMMOSTRAD perdu !
    Par Vetea dans le forum Projets
    Réponses: 1326
    Dernier message: 29/05/2015, 08h04
  2. [Projet terminé] Papi Commando's Map Viewer !
    Par Vetea dans le forum Projets
    Réponses: 18
    Dernier message: 24/07/2014, 11h47
  3. [Recrutement] Papi Commando a besoin de BETA testeurs !
    Par Vetea dans le forum Projets
    Réponses: 7
    Dernier message: 02/04/2014, 10h07
  4. Réponses: 4
    Dernier message: 19/03/2014, 09h55
  5. Réponses: 1
    Dernier message: 08/03/2014, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo