Loading...

simple car game


simple car game this is one of my project name :- simple car game


material needed:-

  • Arduino uno
  • 16x2 lcd
  • battery
  • 10k potentiometer(2 pcs.)
  • switch (if needed for backlight)
  • jumper wire
  • breadbord(not necessary)



instructions:-


  • first connect arduino 5v & gnd to breadboard

  • _________________________________________________________________________________________

  • connect lcd to arduino


    you should connect arduino to lcd
    connections are as follow from left to right
    • lcd--->arduino
    • 1--->gnd
    • 2--->5v
    • 3--->potentiometer(as shown in picture)
    • 4--->D8
    • 5--->gnd
    • 6--->D9
    • 7--->leave
    • 8--->leave
    • 9--->leave
    • 10--->leave
    • 11--->D6
    • 12--->D5
    • 13--->D4
    • 14--->D3
    • 15--->5v(using switch)
    • 16--->gnd
  • ________________________________________________________________________________________
  • connect potentiometer to A1



    do as shown in image it will use to control the game
  • ________________________________________________________________________________________
  • upload the code on the arduino
  • /*  Simple Car game   
     *  by AREEBURRUB
     *  Website   http://areeburrub.page.tl
     */
    #include <LiquidCrystal.h>
    // LiquidCrystal display
    // You can use any Hitachi HD44780 compatible. Wiring explained at
    // http://www.arduino.cc/en/Tutorial/LiquidCrystal
    LiquidCrystal lcd(8, 9, 6, 5, 4, 3);
    
    // Steering wheel potentiometer
    const int POTPIN = A1;
    const int MAXPOT = 690; // no need to turn the wheel all the way to 1023 
    
    // Piezo speaker
    const int SPEAKERPIN = A9;
    
    const int RANDSEEDPIN = A0; // an analog pin that isn't connected 
                                //to anything it is used for more random result
    
    const int MAXSTEPDURATION = 300; // Start slowly, each step is 1 millisec shorter.
    const int MINSTEPDURATION = 150; // This is as fast as it gets
    
    const int NGLYPHS = 6;
    // the glyphs will be defined starting from 1 (not 0),
    // to enable lcd.print() of null-terminated strings
    byte glyphs[NGLYPHS][8] = {
      // 1: car up
      { B00000,
        B01110,
        B11111,
        B01010,
        B00000,
        B00000,
        B00000,
        B00000}
      // 2: car down
      ,{B00000,
        B00000,
        B00000,
        B00000,
        B01110,
        B11111,
        B01010,
        B00000}
      // 3: truck up
      ,{B00000,
        B11110,
        B11111,
        B01010,
        B00000,
        B00000,
        B00000,
        B00000}
      // 4: truck down
      ,{B00000,
        B00000,
        B00000,
        B00000,
        B11110,
        B11111,
        B01010,
        B00000}
      // 5: crash up
      ,{B10101,
        B01110,
        B01110,
        B10101,
        B00000,
        B00000,
        B00000,
        B00000}
      // 6: crash down
      ,{B00000,
        B00000,
        B00000,
        B10101,
        B01110,
        B01110,
        B10101,
        B00000}
    };
    
    const int NCARPOSITIONS = 4;
    
    // Each position is mapped to a column of 2 glyphs
    // Used to make sense when I had a 5th position
    // where car or crash was drawn as 2 glyphs
    // (can't do that since 0 terminates strings),
    // so it's kinda silly now, but it ain't broke 
    const char BLANK=32;
    char car2glyphs[NCARPOSITIONS][2] = {
      {1,BLANK},{2,BLANK},{BLANK,1},{BLANK,2}
    };
    char truck2glyphs[NCARPOSITIONS][2] = {
      {3,BLANK},{4,BLANK},{BLANK,3},{BLANK,4}
    };
    char crash2glyphs[NCARPOSITIONS][2] = {
      {5,BLANK},{6,BLANK},{BLANK,5},{BLANK,6}
    };
    
    const int ROADLEN = 15; // LCD width (not counting our car)
    int road[ROADLEN]; // positions of other cars
    char line_buff[2+ROADLEN]; // aux string for drawRoad()
    int road_index;
    int car_pos;
    // Off-the-grid position means empty column, so MAXROADPOS
    // determines the probability of a car in a column
    // e.g. 3*NCARPOSITIONS gives p=1/3
    const int MAXROADPOS = 3*NCARPOSITIONS;
    int step_duration;
    
    int crash; // true if crashed
    unsigned int crashtime; // millis() when crashed
    const int CRASHSOUNDDURATION = 250;
    const char *INTRO1="Trucks by Areeb-ur-Rub";//don't change it 
    
    const int INTRODELAY = 2000;//don't change it 
    
    void setup()
    {
      crash = crashtime = road_index = 0;
      step_duration = MAXSTEPDURATION;
      line_buff[1+ROADLEN] = '\0'; // null terminate it
      randomSeed(analogRead(RANDSEEDPIN));
      for (int i=0; i<NGLYPHS; i++) {
        lcd.createChar(i+1,glyphs[i]);
      }
      for (int i=0; i<ROADLEN; i++) {
        road[i]=-1;
      }
      pinMode(SPEAKERPIN,OUTPUT);
      analogWrite(SPEAKERPIN,0); // to be on the safe side
      lcd.begin(16,2);
      getSteeringWheel();
      drawRoad();
      lcd.setCursor(1,0);
      lcd.print(INTRO1);
      for (int positionCounter = 0; positionCounter < 40; positionCounter++) {
      // scroll one position right:
      lcd.scrollDisplayLeft();
      // wait a bit:
        delay(250);
      }
      delay(INTRODELAY);
    }
    
    void loop() {
      unsigned long now = millis()-INTRODELAY;
      
      if (!crash) {
        drawRoad();
        getSteeringWheel();
        crash = (car_pos==road[road_index]);  
          
      }
      if (crash) {
        if (!crashtime) {
          crashtime=now;
          // Game over text
          // (keep first 2 "crash" columns intact)
          lcd.clear();
          lcd.setCursor(0,0);
          lcd.print("Crash in");
          lcd.setCursor(9,0);
          lcd.print(now/1000);
          lcd.print("sec");
        }
        if ((now-crashtime)<CRASHSOUNDDURATION) {
          analogWrite(SPEAKERPIN,random(255)); // white noise
        } 
        else {
          analogWrite(SPEAKERPIN,0); // dramatic post-crush silence    
        }
        delay(10); // Wait a bit between writes
      } 
      else {
    
        int prev_pos = road[(road_index-1)%ROADLEN];
        int this_pos = random(MAXROADPOS);
        while (abs(this_pos-prev_pos)<2) { // don't jam the road
          this_pos = random(MAXROADPOS);
        }
        road[road_index] = this_pos;
        road_index = (road_index+1)%ROADLEN;
        drawRoad();
        delay(step_duration);
        if (step_duration>MINSTEPDURATION) {
          step_duration--; // go faster
        }
      }
    }
    void getSteeringWheel() {
      car_pos = map(analogRead(POTPIN),0,1023,0,NCARPOSITIONS);
    }
    
    void drawRoad() {
      for (int i=0; i<2; i++) {
        if (crash) {
          line_buff[0]=crash2glyphs[car_pos][i];
        } 
        else {
          line_buff[0]=car2glyphs[car_pos][i];
        }
        for (int j=0; j<ROADLEN; j++) {
          int pos = road[(j+road_index)%ROADLEN];
          line_buff[j+1] = pos>=0 && pos<NCARPOSITIONS ? truck2glyphs[pos][i] : BLANK;
        }
        lcd.setCursor(0,i);
        lcd.print(line_buff);
      }
    }
    
    
    __________________________________________________________________________________________
  • checkout how i did it goto here