Page 1 sur 1

Oldskull II, le retour !

Publié : jeu. 30/juil./2009 5:00
par Huitbit
Hello la compagnie !

Vous vous souvenez du jeu énervant :lol: !
http://www.purebasic.fr/french/viewtopic.php?t=9543

Voici encore plus énervant :lol:

L'histoire : Après avoir fait des découvertes inquiétantes sur le dossier secret "Livret A à 8% et mon doigt dans l'oeil tu l'as vu?", l'agent Oldskull a été jeté au fond d'un volcan en activité(la lave remonte!) peuplé de chauve-souris désagréables(mais "pas touche" car espèce protégée!). Objectif, remonter à la surface et faire éclater le scandale !

Je vais essayer de le purepuncher mais pour l'instant voici la version lisible.

J'espère que ça servira à ceux qui bossent sur des jeux de plateformes.

J'ai fait une découverte énorme !
Ca fait pas mal de temps que je m'obstine à afficher les sprites à la fin de la boucle principale
Comme mes sprites ne se déplacent quasiment jamais de manière uniforme, j'ai droit à :
-des problèmes avec les collisions
-des ploblèmes de localisation des sprites (dans le code avec les icebergs, la partie finit alors que le crâne n'a pas tout à fait touché l'eau)
J'ai tout mis au début et ça a changé ma vie :D

Fini les bidouilles, les tests... :P

Le code a été crée dans l'esprit purepunch, c'est pour cela qu'il y a pas mal de choses à améliorer !
-Une IA pour les chauves-souris
-J'avais pensé rajouter des bonus (anneaux d'or jetés par je ne sais quel malade).
-Etc...

Pour augmenter la taille du volcan(ici 480*10 pixels et 150 plateaux), le nombre de bestioles, c'est au début !
La vitesse de la lave, c'est plus loin.

Code : Tout sélectionner

;Escape  from Hell (an Oldskull's adventure) 
;auteur Huitbit 
;pb v4.31 
;********************************* 
#l=640 
#h=480 
nbr_tableaux=10;hauteur totale du volcan 10*480 pixels 
nbr_platform=nbr_tableaux*15-1 
meilleur_niveau_min=nbr_platform;pour la sauvegarde du highscore 
nbr_bat=nbr_tableaux*7-1;nombre total de chauve-souris 

Enumeration 
  #skull 
  #bat 
  #platform 
  #lava 
EndEnumeration 

skull$="|þˉþþU";crâne 
bat$="BfçZZf";chauve-souris 

Structure info 
  x.w 
  y.w 
  phi.w 
EndStructure 

Dim platform.info(nbr_platform) 
Dim bat.info(nbr_bat) 
;-************************************** 
;-PROGRAMME PRINCIPAL 
;-************************************** 
InitSprite() 
InitKeyboard() 
OpenWindow(0,0,0,#l,#h,"Volcano" ) 
OpenWindowedScreen(WindowID(0),0,0,#l,#h,0,0,0) 
;-création des sprites 
CreateSprite(#skull,16,16) 
StartDrawing(SpriteOutput(#skull)) 
For j=1 To 8 
  For i=1 To 8 
    If Mid(RSet(Bin(Asc(Mid(skull$,j,1))),8,"0"),i,1)="1" 
      Box(i*2-2,j*2-2,2,2,$FF) 
    EndIf 
  Next i 
Next j 
StopDrawing() 

CreateSprite(#bat,16,16) 
StartDrawing(SpriteOutput(#bat)) 
For j=1 To 8 
  For i=1 To 8 
    If Mid(RSet(Bin(Asc(Mid(bat$,j,1))),8,"0"),i,1)="1" 
      Box(i*2-2,j*2-2,2,2,$FF8080) 
    EndIf 
  Next i 
Next j 
StopDrawing() 

CreateSprite(#platform,32,16) 
StartDrawing(SpriteOutput(#platform)) 
Ellipse(16,0,16,16,RGB(178, 117, 27)) 
For i=0 To 20 
  Box(Random(32),Random(16),1,1) 
Next i 
StopDrawing() 

CreateSprite(#lava,#l,#h*0.5) 
StartDrawing(SpriteOutput(#lava)) 
Box(0,0,#l,#h*0.5,RGB(248, 65, 7)) 
StopDrawing() 

;-label pour le GOTO pour recommencer une partie 
jeu: 
;-initialisation des variables pour un nouveau jeu 
For n=0 To nbr_platform 
  platform(n)\x=(6+Random(26))*16 
  platform(n)\phi=Random(359) 
Next n 

For n=0 To nbr_bat 
  bat(n)\x=Random(#l) 
  bat(n)\y=Random(nbr_tableaux*#h) 
  bat(n)\phi=Random(359) 
Next n 

x=15*16 
ay=1 
dt.b=1 
y=(nbr_tableaux-1)*#h; lâcher du crâne dans l'avant-dernier tableau 
y_lava.f=nbr_tableaux*#h 
niveau_min=nbr_platform 

;-************************************* 
;-BOUCLE PRINCIPALE 
;-************************************* 
Repeat 
  
  ;calcul des numéros extrêmes des plateformes qui doivent apparaître à l'écran 
  n_haut=Int(y/32)-7 
  n_bas=Int(y/32)+7 
  If n_haut<0 
    n_haut=0 
  EndIf 
  If n_bas>nbr_platform 
    n_bas=nbr_platform 
  EndIf 
  
  ;-affichage 
  FlipBuffers() 
  ClearScreen(0) 
  ;plateformes 
  For n=n_haut To n_bas 
    DisplaySprite(#platform,platform(n)\x+96*Sin((angle+platform(n)\phi)*#PI/180),2*n*16-y+#h*0.5) 
  Next n 
  StartDrawing(ScreenOutput()) 
  DrawingMode(#PB_2DDrawing_Transparent) 
  DrawText(platform(n_skull)\x+96*Sin((angle+platform(n_skull)\phi)*#PI/180)+4,2*n_skull*16-y+#h*0.5,Str(n_skull),RGB(255,255,0)) 
  StopDrawing() 
  
  ;chauve-souris 
  For n=0 To nbr_bat 
    DisplaySprite(#bat,bat(n)\x+96*Sin((2*angle+bat(n)\phi)*#PI/180),bat(n)\y+96*Sin(3*angle*#PI/180)-y+#h*0.5) 
  Next n 
  
  DisplaySprite(#skull,x,0.5*#h) 
  
  DisplaySprite(#lava,0,y_lava-y+#h*0.5) 
  
  ;-collision skull~bat 
  For n=0 To nbr_bat 
    If SpriteCollision(#skull,x,y,#bat,bat(n)\x+96*Sin((2*angle+bat(n)\phi)*#PI/180),bat(n)\y+96*Sin(3*angle*#PI/180)) 
      contact=0 
      x=x+8-16*Random(1) 
    EndIf 
  Next n 
  
  ;-collision skull~lava 
  If y_lava-y<15 
    If niveau_min<meilleur_niveau_min 
      meilleur_niveau_min=niveau_min 
    EndIf 
    messageRequester("GAME OVER","Niveau minimum atteint : "+Str(niveau_min)+"  Meilleur score : "+Str(meilleur_niveau_min),#PB_MessageRequester_Ok) 
    Goto jeu 
  EndIf 
  ;-collision skull~blocs 
  For n=n_haut To n_bas 
    
    If  vy>0 And SpriteCollision(#skull,x+vx*dt,y+vy*dt,#platform,platform(n)\x+96*Sin((angle+platform(n)\phi)*#PI/180),2*n*16) 
      contact=1 
      If n=0 
        MessageRequester("MISSION COMPLETED","",#PB_MessageRequester_Ok) 
        Goto jeu 
      ElseIf n<niveau_min 
        niveau_min=n 
      EndIf 
      n_skull=n 
      dx_skull=x-(platform(n)\x+96*Sin((angle+platform(n)\phi)*#PI/180)); décalage à l'aterrissage 
      Break 
    EndIf 
  Next n 
  
  angle=angle+1 
  If angle>360 
    angle=0 
  EndIf 
  y_lava=y_lava-0.2 
  
  ;-équations du mouvement de skull 
  If contact=0 ;chute libre 
    If vy<16 
      vy=vy+ay*dt 
    EndIf 
    x=x+vx*dt 
    y=y+vy*dt 
  ElseIf contact=1;sur palier 
    dx_skull=dx_skull+vx*dt 
    vy=0 
    ;-chute si le décalage est plus grand que le palier 
    If dx_skull<-16 Or dx_skull>32 
      contact=0 
    EndIf 
    ;-déplacement avec le palier 
    x=platform(n_skull)\x+96*Sin((angle+platform(n_skull)\phi)*#PI/180)+dx_skull 
    y=2*n_skull*16-16 
  EndIf 
  
  ExamineKeyboard() 
  If  KeyboardPushed(#PB_Key_Up) 
    If contact=1 
      vy=-16 
      ay=1 
      contact=0 
    EndIf 
  EndIf 
  
  ;vitesse différente selon la situation 
  If contact =0 
    v=3 
  Else 
    v=1 
  EndIf 
  
  If KeyboardPushed(#PB_Key_Left) 
    vx=-v 
  ElseIf  KeyboardPushed(#PB_Key_Right) 
    vx=v 
  Else 
    vx=0 
  EndIf  
  
  Delay(1) 
Until  WindowEvent() = #PB_Event_CloseWindow

Hasta la vista

[EDIT] Lors du changement de forum ce code a disparu 8O alors, j'en remets une couche ![EDIT]

Publié : jeu. 30/juil./2009 9:05
par kelebrindae
Génial ! :D J'adore ce genre de petits jeux!
(ça me rappelle mon enfance et les listings à taper dans Tilt)

Publié : ven. 31/juil./2009 4:29
par Huitbit
Merci,

AaahaaaAAA TILT :roll: , ils parlaient encore du MSX alors que les jeux étaient introuvables :lol: :lol: . Ils étaient sympas, ils laissaient des listings.

Ce petit jeu, c'était juste pour faire avancer le schmilblick !
La section jeu manque de gameplay ces temps-ci !
En plus, c'est un jeu que je suis capable de finir :lol: :lol:

La 2D a encore de beaux jours devant elle :P

Vous vous souvenez de La-Mulana(dernier jeu du site donné par Sieur beauregard)
http://indygamer.blogspot.com/2007/01/t ... -2006.html

Nintendo n'a pas peur de la 2D
http://www.indiegames.com/blog/2009/07/ ... his_w.html

Les anciens concepteurs de jeux MSX ont la vie dure :lol: :lol: :lol:


Idem pour Cave story
Avant :
http://www.caiman.us/scripts/fw/f1699.html

Après :
http://jeutu.com/nggallery/post/cave-story/page/1675/



Et comme par hasard :
http://wiiware.nintendolife.com/news/20 ... oin_forces

Hasta la vista2D !

Publié : ven. 31/juil./2009 19:53
par Ar-S
Ouai très sympa :P

Publié : dim. 02/août/2009 10:32
par lionel_om
Sympa, 74 !!! :D

Publié : sam. 08/août/2009 23:43
par beauregard
Huitbit a écrit :Vous vous souvenez de La-Mulana
j'avais un peu oublié, chuis content pour eux. :)
Et puis la Wii aura ainsi quelques vrai jeux ;)