ccdb 0.9.0

A small terminal based game engine
# THE OLD TUTORIAL  
  
```rust

extern crate ccdb;
use ccdb::acore::{core,screen}; // there are 2 diffrent Acores there is Acore and there is banana both work the same way when talking to them 
use ccdb::loader::{load,toMap};// this is the loader which makes it so you can load a map from file or load a map from string 
use ccdb::keyin; // For key input
use ccdb::cursor; // for moving the cursor
use ccdb::keycode; // for key codes (work in progress)
use ccdb::sprite; // for sprites
use ccdb::collision; // for collision

pub fn main() {
    
    cursor::clear(); // clears the screen
    cursor::hideCursor(); // hides the cursor
    let assets = loader::loadFromFolder("./maps/".to_string(),".rmap".to_string(),".rsprite".to_string());//you can load assets using loadFromFolder you will be rewarded with a folder struct 
    let map1 = assets.loadAssetMap("map");// you can get your map using assets.loadAssetMap for getting the map
    let psprite = assets.loadAssetSprite("sprite");// sprite can be found using this 

    let x = Acore{
        name: "Test project".to_string(), // name of the project 
        desc: " - A test project".to_string(), // descirption (short )
        linelenght: 20,// how many charecters per line
        lines: 4, // how many lines
        debug: true, // This will make it so that CCDB (VERSION) is not shown
        threads: 2, // How many threads 
        output_string: false,// if you want the output to be in string form or if you want it to just print to the console

    };
    
    
    let mut f = screen{
        chars: vec!("0".to_string(),"1".to_string()), // these are the different ascii "items" that get renderd X and Y are the cordinates 
        x: vec!(1,2),
        y: vec!(1,2),
        delay: 10,// delay between each frame for
        sprite: Vec::new(),// the sprite vector contains all the sprites that are going to be renderd 

    };
    
    let mut a = x.setup(); // set up the Acore struct 
    //! map loading stuff
    f.loadmap(load("./maps/map.rmap")); // loads in the map
    let player = f.findX("@".to_string()); // gets the player position in the screen.chars section findAllOfX works the same but returns a vector 
    f.loadmap(toMap("#####\n33333".to_string()));//if you want to make a map out of a string 

    //! physics stuff
    a.addphysics(player); // adds phycis to an object 
    a.addphysicsForAllX(&f,"I".to_string());// adds physics to all objects with the correct char
    a.removephysics(player); // remove physics form an object 
    a.changePhysics(-1); // change the gravity constant to make gravity stronger or weaker or upside down 
    let mut sprite = sprite::load("./maps/sprite.rsprite"); // loads the sprite from a text file 
    f.sprite.push(sprite);//push the sprite to the sprite vector 
    f.sprite[0].setxy(2,-2);//sets the position of the sprite 
    loop {
        
        cursor::clear();// clear the screen
        a.render(&mut f);// renders it all does not work with Bcore
        println!("{}",a.render(&mut f););// if you are using Bcore the output gets output in a string ( Does not work with Acore )
        f.sprite[0].movexy(1, 0); // moves the sprite to the side 

        if keyin::keydown(){ // checks if there is a keydown

        
            match keyin::getkey(){// gets said keycode
                97 =>{
                    f.x[player as usize] -= 1;
                }
                100 =>{
                    f.x[player as usize] += 1;
                }
                119 =>{
                    f.y[player as usize] -= 1;
                }
                115 =>{
                    f.y[player as usize] += 1;
                }
                _ =>{

            }
        }
      

    }

  
}
```