続きを読む "Rust言語でAIコパイロットと作るゲームプログラミング・テトリス風ゲームを作ってみる話 No-R010"

"> Rust言語でAIコパイロットと作るゲームプログラミング・テトリス風ゲームを作ってみる話 No-R010 - ミリタリーグッズ工房「猫・工・艦」

Rust言語でAIコパイロットと作るゲームプログラミング・テトリス風ゲームを作ってみる話 No-R010

「Rust言語でコンソール画面にて、テトリスゲームを作りたいです。プログラムを考えてください」

とコパイロット君に尋ねてみました。

いつものようにコパイロット君の回答は秀逸です。

「テトリスゲームをRust言語で作るのは素晴らしいプロジェクトですね!以下は、コンソール画面で動作するシンプルなテトリスゲームの基本的な構造を示すコードの例です。これを基にして、さらに機能を追加していくことができます。」

では提案しただいた、ソースコードを見てみましょう。

use crossterm::{
    cursor,
    event::{self, Event, KeyCode},
    execute,
    terminal::{self, ClearType},
};
use rand::Rng;
use std::io::{stdout, Write};
use std::time::{Duration, Instant};

const WIDTH: usize = 10;
const HEIGHT: usize = 20;

#[derive(Copy, Clone)]
enum Tetromino {
    I, O, T, S, Z, J, L,
}

impl Tetromino {
    fn new() -> Self {
        match rand::thread_rng().gen_range(0..7) {
            0 => Tetromino::I,
            1 => Tetromino::O,
            2 => Tetromino::T,
            3 => Tetromino::S,
            4 => Tetromino::Z,
            5 => Tetromino::J,
            _ => Tetromino::L,
        }
    }

    fn shape(&self) -> [[u8; 4]; 4] {
        match self {
            Tetromino::I => [[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]],
            Tetromino::O => [[1, 1], [1, 1]],
            Tetromino::T => [[0, 1, 0], [1, 1, 1], [0, 0, 0]],
            Tetromino::S => [[0, 1, 1], [1, 1, 0], [0, 0, 0]],
            Tetromino::Z => [[1, 1, 0], [0, 1, 1], [0, 0, 0]],
            Tetromino::J => [[1, 0, 0], [1, 1, 1], [0, 0, 0]],
            Tetromino::L => [[0, 0, 1], [1, 1, 1], [0, 0, 0]],
        }
    }
}

struct Game {
    board: [[u8; WIDTH]; HEIGHT],
    current_tetromino: Tetromino,
    position: (usize, usize),
}

impl Game {
    fn new() -> Self {
        Game {
            board: [[0; WIDTH]; HEIGHT],
            current_tetromino: Tetromino::new(),
            position: (0, WIDTH / 2 - 2),
        }
    }

    fn draw(&self) {
        let mut stdout = stdout();
        execute!(stdout, cursor::MoveTo(0, 0), terminal::Clear(ClearType::All)).unwrap();
        for row in &self.board {
            for &cell in row {
                if cell == 0 {
                    print!(" ");
                } else {
                    print!("#");
                }
            }
            println!();
        }
        stdout.flush().unwrap();
    }

    fn update(&mut self) {
        // ゲームロジックをここに追加
    }
}

fn main() {
    let mut game = Game::new();
    let mut last_update = Instant::now();

    loop {
        if event::poll(Duration::from_millis(100)).unwrap() {
            if let Event::Key(key_event) = event::read().unwrap() {
                match key_event.code {
                    KeyCode::Esc => break,
                    _ => {}
                }
            }
        }

        if last_update.elapsed() >= Duration::from_millis(500) {
            game.update();
            game.draw();
            last_update = Instant::now();
        }
    }
}

「このコードは、基本的なゲームループとテトリミノの描画を行います。update関数にゲームロジックを追加して、テトリスの動作を実装していくことができます。コードは、基本的なゲームループとテトリミノの描画を行います。update関数にゲームロジックを追加して、テトリスの動作を実装していくことができます。」

これが「基本パッケージ」であるということです。これに骨肉を加え、形にしていきましょうということです。

/// PR ///

毎日を豊かにするためのスキルを学ぼう。対象コースが最大95%OFF。

—————————————————————————————————————

//// PR ///

youme mobile でスマホ永年無料になる方法が公開されています。いまだけ(3万人限定)で年間スマホ基本料金8万~10万をタダにしましょう! これはyoume mobile が既存ユーザーからの招待制によって契約出来るのでぜひ一度ごらんください。

※ 申し込みボタンで紹介コード付状態になりますので、登録が簡単です。

————————————————————————————————————–

//// PR /// 弊工房オフィシャルネットショップ(スズリ)です。ぜひご来店ください。

//// PR ///

//// PR /// 弊工房オフィシャルネットショップ(BASE)です。ぜひご来店ください。

ここでは著者が運営しているミリタリー工房 猫・工・艦で展開しているグッズアイテムを紹介させていただきます。

https://necokoucan.thebase.in/

————————————————————————————————————–

過去記事は下記を参照ください。2013年からミリタリー同人活動を行っています。

サイトマップ | ミリタリーグッズ工房「猫・工・艦」 (necokoucan.com)

【ブログ記事一覧】 | ミリタリーグッズ工房「猫・工・艦」 (necokoucan.com)

ミリタリーランキング
ブログランキング・にほんブログ村へにほんブログ村
— OFFICIAL STORE —
FIELD TO STREET // 着る、戦術。
NECOKOUCAN SHOP
ミリタリーグッズ・オリジナルTシャツ・全アイテムはこちら
T-TRINITY| PREMIUM TEE| ¥4,400〜
ENTER SHOP →
ttrinity.jp
NECOKOUCAN — EST. 2023 — FUKUOKA