رفتن به مطلب
انجمن تیم امنیتی گارد ایران

Game of Life به زبان Rust


R3XCR4PY
 اشتراک گذاری

ارسال های توصیه شده

Game of Life

extern crate rand;

use std::{thread, time::Duration};
use rand::Rng;

fn initiate_cells(width:usize, height:usize) -> Vec<Vec<bool>> {
    let mut world = vec![vec![false; width]; height];

    for x in world.iter_mut() {
        for y in x.iter_mut() {
            *y = rand::thread_rng().gen_range(0..5) == 0;
        }
    }

    return world;
}

fn display_world(world: &Vec<Vec<bool>>) {
    print!("\x1b[0;0H");

    for x in world.iter() {
        for y in x.iter() {
            print!("{}", if *y {'@'} else {' '});
        }
        println!();
    }
}

fn evolution(world: &mut Vec<Vec<bool>>) -> Vec<Vec<bool>> {
    let width = world.len();
    let height = world[0].len();

    let mut future = vec![vec![false; height]; width];

    for x in 0..width {
        for y in 0..height {

            let mut lives = 0;

            for i in -1..=1 {
                for j in -1..=1 {
                    let xr = ((x+width) as isize -i) as usize % width;
                    let yr = ((y+height) as isize -j) as usize % height;

                    if world[xr][yr] {
                        lives += 1;     
                    }
                }
            }
            
            if world[x][y] {
                lives -= 1;
            }

            if world[x][y] {
                // Any live cell with fewer than two live neighbours dies, as if by underpopulation.
                // Any live cell with more than three live neighbours dies, as if by overpopulation.
                if lives < 2 || lives > 3 {
                    future[x][y] = false;
                }
                // Any live cell with two or three live neighbours lives on to the next generation.
                else if lives == 2 || lives == 3 {
                    future[x][y] = true;
                }
            }
            // Any dead cell with exactly three live neighbours becomes a live cell, as if by reproduction.
            else if !world[x][y] && lives == 3 {
                future[x][y] = true;
            }
        }
    }

    future
}

fn main() {
    if cfg!(unix) {
        std::process::Command::new("clear").status().unwrap();
    } else if cfg!(windows) {
        std::process::Command::new("cls").status().unwrap();
    }

    let mut world = initiate_cells(40, 40);

    loop {
        display_world(&world);
        thread::sleep(Duration::from_millis(400));
        world = evolution(&mut world);
    }
    
}

 

پسورد فایل فشرده: guardiran.org

game_of_life.zip

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری
 اشتراک گذاری

انجمن تیم امنیتی گارد ایران

تیم امنیتی گارد ایران یک گروه مستقل است که قوانین آن با خط مشی جمهوری اسلامی ایران مغایرت ندارد. تیم امنیتی گارد ایران از سال 1393 فعالیت خود را آغاز کرد و هدف این تیم تامین امنیت سایت ها و سرورهای ایرانی است. تیم ما همیشه برای دفاع از مرزهای سایبری سرزمین عزیزمان ایران آماده است.

شبکه های اجتماعی

×
×
  • اضافه کردن...