Outils pour utilisateurs

Outils du site


wiki:projets:consoleretro

Console de jeu retro

date de début : 09/2015
Porteur de projet Fabien (contact : fabien.champalou@gmail.com)
Suivie par emmanuel (contact : emmanuel.thiery@pmclab.fr)

Réalisation d'une console de jeux rétro (type console de salon)

Le but de ce projet est d'arriver a réaliser de A à Z la console et les jeux vidéos plutot rétro,le boitier permettra de connecter une télé ou un moniteur (sortie AV ou VGA) auquel on connectera des manettes
- Particularité : retour aux sources des jeux vidéos
- Création pur de jeu vidéo (aucune base ou copie de code), retour aux sources - Inspiration :(retro gaming)

date de fin estimée : 01/2016

Machines nécessaires

Machine : imprimante 3d (Réalisation de manette et de cartouche de jeu)
Imprimante 3D (Ici makerboot replicator 2X ou Ultimaker²) avec PLA ou ABS

Matériels nécessaires

Ici il faut lister tout le matériel nécessaire, leur prix ainsi qu'une photo si possible
- Atmega 328 P
- Quartz 16 MHz
- Régulateur de tension L7805CV
- Résistance (10KΩ, 510Ω, ,,,)
- Condensateur (10μF,2x 22pF, 100μF,,,,)
- Bouton poussoir (pour les manettes)
- Potentiomètre 10KΩ
- Connecteur DIN (pour les manettes)
- Connecteur AV-VGA

Étape de fabrication

Partie 1

-Réalisation de/des manettes, lien vers les fichiers stl : https://drive.google.com/folderview?id=0B1DKn6mfGJCcMjR2bjVBQzR2VHM&usp=sharing

-réalisation du boitier de la console
-réalisation de la carte mère de la console a partir de l'Atmega 328

Partie 2

-réalisation de différents jeux vidéos couleur ou noir et blanc
-Amélioration de la console avec des passages a des cartouches de jeu
-Réalisation de cartouche avec Atmega intégré

- les schéma

Le code

#include <TVout.h>
#include <fontALL.h>
 
 
TVout TV;
 
int const pot=A0;
int zOff = 150;
int xOff = 0;
int yOff = 0;
int cSize = 50;
int view_plane = 64;
int val;
float angle = PI/60;
unsigned char cube2d[8][2];
int i=0;
int a=1;
int j=1;
int b=0;
int b2=0;
int G=0;
int c=0;
int point=0;
int vitesse =1;
int choix=0;
int rouge;
int partie=0;
int best=0;
int best_comp=0;
int hauteur=2; 
int ordinateur;
int presentation=0;
 
void setup(){
  Serial.begin(9600);
  TV.begin(PAL,120,96);
  pinMode(2,INPUT);
  pinMode(8,INPUT);
  TV.select_font(font6x8);
  TV.print(40,00,"PONG");
  TV.select_font(font6x8);
  TV.print(00,30,"Partie classique");
  TV.print(00,60,"Mode survie");
  TV.print(00,90,"Copyright Fabien");
 
}
 
 
void loop(){
  choix = digitalRead(2);
  rouge=digitalRead(8);
 
  if(rouge==HIGH){
    partie++;
    delay(1000);
  }
  if(partie>2){
    partie=1;
  }
  if(partie==1){
    TV.print(00,20,"->");
    TV.draw_line(00,50,12,50,BLACK);
    TV.draw_line(00,52,12,52,BLACK);
    TV.draw_line(00,54,12,54,BLACK);
    TV.draw_line(00,51,12,51,BLACK);
    TV.draw_line(00,53,12,53,BLACK);
    TV.draw_line(00,55,12,55,BLACK);
    TV.draw_line(00,56,12,56,BLACK);
  }
  if(partie==2){
    TV.draw_line(00,20,12,20,BLACK);
    TV.draw_line(00,22,12,22,BLACK);
    TV.draw_line(00,24,12,24,BLACK);
    TV.draw_line(00,21,12,21,BLACK);
    TV.draw_line(00,23,12,23,BLACK);
    TV.draw_line(00,25,12,25,BLACK);
    TV.draw_line(00,26,12,26,BLACK);
    TV.print(00,50,"->");
  }
  if(choix==HIGH && partie ==1){
 
    TV.clear_screen();
        TV.print(50,00,"3");
    delay(1500);
    TV.draw_line(50,00,60,00,BLACK);
    TV.print(50,00,"2");
    delay(1500);
    TV.draw_line(50,00,60,00,BLACK);
    TV.print(50,00,"1");
    delay(1500);
    TV.clear_screen();
    G=0;
    point=0;
    best_comp=0;
    i=0;
    j=1;
    b=0;
    b2=0;
    c=0;
    vitesse=1;
    hauteur=2;
    presentation=0;
    while(G==0){
      val= analogRead(pot);
      if(val>800){
        val=810;
      }
  if((hauteur*(i)+8)-15<8){
    ordinateur=8;
  }
  else{
    ordinateur=(hauteur*(i)+8)-15;
  }
  TV.draw_line(03,8+(87/100)*(val/10),03,38+(87/100)*(val/10),WHITE);
  TV.draw_line(03,9,03,8+(val/10),BLACK);
  TV.draw_line(03,38+val/10,03,94,BLACK);
  TV.draw_line(vitesse*(j)+3,hauteur*(i)+8,vitesse*(j)+3,hauteur*(i)+8,WHITE);
 
 if(j>(60/vitesse)){
    TV.draw_line(115,ordinateur,115,(hauteur*(i)+8)+15,WHITE);
    TV.draw_line(115,0,115,(hauteur*(i)+8)-15,BLACK);
    TV.draw_line(115,(hauteur*(i)+8)+15,115,95,BLACK);
 }
 
  TV.draw_line(00,8,00,95,WHITE);
  TV.draw_line(118,8,118,95,WHITE);
  TV.draw_line(00,95,118,95,WHITE);
  TV.draw_line(00,8,118,8,WHITE);
 
  TV.draw_line(55,8,55,15,WHITE);
  TV.draw_line(55,23,55,31,WHITE);
  TV.draw_line(55,39,55,47,WHITE);
  TV.draw_line(55,55,55,63,WHITE);
  TV.draw_line(55,71,55,79,WHITE);
  TV.draw_line(55,87,55,95,WHITE);
 
  TV.select_font(font6x8);
  TV.print(00,00,"J1:");
  TV.print(20,00,point);
  TV.print(80,00,"J2:");
  TV.print(100,00,best_comp);
  Serial.print("potVal: \n");
  Serial.print(val);
 
 
 
    if(((hauteur*i)+8 < 8+(val/10) || (hauteur*i)+8> 38+val/10 )&& j==0 && G==0 && c==1){
      G=1;
      point--;
      if(point>best){
        best=point;
      }
      choix=0;
      TV.clear_screen();
      TV.select_font(font8x8);
      TV.println("\nSCORES :  \n");
      TV.println(point);
      delay (5000);
      TV.select_font(font6x8);
      TV.println("\n Nouvelle partie ?\n");
      if(point>6){
        TV.println("\n Bon score\n");
      }
      delay (5000);
      delay(9000);
      TV.clear_screen();
      TV.select_font(font6x8);
      TV.print(40,00,"PONG ");
      TV.print(00,30,"Partie classique");
      TV.print(00,60,"Mode survie");
      TV.print(00,90,"Best Score :");
      TV.print(80,90,best);
    }
 
  if(i<(88/hauteur) && b==0){
    i=i+a;
  }
  else{
    i=i-a;
    b=1;
  }
 
  if((vitesse*j)+3<115 && b2==0 && G==0 ){
    if(j!=0 ){
     TV.draw_line(vitesse*(j+3)-(vitesse-1)*3,9,vitesse*(j+3)-(vitesse-1)*3,94,BLACK);
    }
     j++;
  }
 
  if(i==0){
    b=0;
  }
 
  if(j==112/vitesse){
    b2=1;
    best_comp ++;
  }
 
  if(b2==1){
    if(j!=0){
    TV.draw_line(vitesse*(j+3)-(vitesse-1)*3,9,vitesse*(j+3)-(vitesse-1)*3,94,BLACK);
    }
    j--;
    c=1;
  }
  if(j==0){
    b2=0;
    point++;
  }
 
  }
  }
 
 
  if(choix==HIGH && partie ==2){
 
    TV.clear_screen();
        TV.print(50,00,"3");
    delay(1500);
    TV.draw_line(50,00,60,00,BLACK);
    TV.print(50,00,"2");
    delay(1500);
    TV.draw_line(50,00,60,00,BLACK);
    TV.print(50,00,"1");
    delay(1500);
    TV.clear_screen();
    G=0;
    point=0;
    best_comp=0;
    i=0;
    j=1;
    b=0;
    b2=0;
    c=0;
    vitesse=1;
    hauteur=2;
    presentation=0;
    while(G==0){
      val= analogRead(pot);
      if(val>800){
        val=810;
      }
  if((hauteur*(i)+8)-15<8){
    ordinateur=8;
  }
  else{
    ordinateur=(hauteur*(i)+8)-15;
  }
  TV.draw_line(03,8+(val/10),03,38+val/10,WHITE);
  TV.draw_line(03,9,03,8+(val/10),BLACK);
  TV.draw_line(03,38+val/10,03,94,BLACK);
  TV.draw_line(vitesse*(j)+3,hauteur*(i)+8,vitesse*(j)+3,hauteur*(i)+8,WHITE);
 
 if(j>(60/vitesse)){
    TV.draw_line(115,ordinateur,115,(hauteur*(i)+8)+15,WHITE);
    TV.draw_line(115,0,115,(hauteur*(i)+8)-15,BLACK);
    TV.draw_line(115,(hauteur*(i)+8)+15,115,95,BLACK);
 }
 
  TV.draw_line(00,8,00,95,WHITE);
  TV.draw_line(118,8,118,95,WHITE);
  TV.draw_line(00,95,118,95,WHITE);
  TV.draw_line(00,8,118,8,WHITE);
 
  TV.draw_line(55,8,55,15,WHITE);
  TV.draw_line(55,23,55,31,WHITE);
  TV.draw_line(55,39,55,47,WHITE);
  TV.draw_line(55,55,55,63,WHITE);
  TV.draw_line(55,71,55,79,WHITE);
  TV.draw_line(55,87,55,95,WHITE);
 
  TV.select_font(font6x8);
  TV.print(00,00,"J1:");
  TV.print(20,00,point);
  TV.print(80,00,"J2:");
  TV.print(100,00,best_comp);
  Serial.print("potVal: \n");
  Serial.print(val);
 
 
 
    if(((hauteur*i)+8 < 8+(val/10) || (hauteur*i)+8> 38+val/10 )&& j==0 && G==0 && c==1){
      G=1;
      point--;
      if(point>best){
        best=point;
      }
      choix=0;
      TV.clear_screen();
      TV.select_font(font8x8);
      TV.println("\nSCORES :  \n");
      TV.println(point);
      delay (5000);
      TV.select_font(font6x8);
      TV.println("\n Nouvelle partie ?\n");
      if(point>6){
        TV.println("\n Bon score\n");
      }
      delay (5000);
      delay(9000);
      TV.clear_screen();
      TV.select_font(font6x8);
      TV.print(40,00,"PONG ");
      TV.print(00,30,"Partie classique");
      TV.print(00,60,"Mode survie");
      TV.print(00,90,"Best Score :");
      TV.print(80,90,best);
    }
 
  if(i<(88/hauteur) && b==0){
    i=i+a;
  }
  else{
    i=i-a;
    b=1;
  }
 
  if((vitesse*j)+3<115 && b2==0 && G==0 ){
    if(j!=0 ){
     TV.draw_line(vitesse*(j+3)-(vitesse-1)*3,9,vitesse*(j+3)-(vitesse-1)*3,94,BLACK);
    }
     j++;
  }
 
  if(i==0){
    b=0;
  }
 
  if(j==112/vitesse){
    b2=1;
    best_comp ++;
  }
 
  if(b2==1){
    if(j!=0){
    TV.draw_line(vitesse*(j+3)-(vitesse-1)*3,9,vitesse*(j+3)-(vitesse-1)*3,94,BLACK);
    }
    j--;
    c=1;
  }
  if(j==0){
    b2=0;
    point++;
  }
    if(point>=5 && j>0){
    vitesse =2;
    hauteur=3;
  }
 
  if(point>=10 && j>0){
    vitesse=4;
    hauteur=4;
 
  }
 
  }
  }
 
 
}

Journal de bord

wiki/projets/consoleretro.txt · Dernière modification: 2016/09/11 12:59 (modification externe)