
「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 ///

—————————————————————————————————————
//// PR ///
youme mobile でスマホ永年無料になる方法が公開されています。いまだけ(3万人限定)で年間スマホ基本料金8万~10万をタダにしましょう! これはyoume mobile が既存ユーザーからの招待制によって契約出来るのでぜひ一度ごらんください。
※ 申し込みボタンで紹介コード付状態になりますので、登録が簡単です。
————————————————————————————————————–
//// PR /// 弊工房オフィシャルネットショップ(スズリ)です。ぜひご来店ください。

//// PR ///
//// PR /// 弊工房オフィシャルネットショップ(BASE)です。ぜひご来店ください。
ここでは著者が運営しているミリタリー工房 猫・工・艦で展開しているグッズアイテムを紹介させていただきます。

https://necokoucan.thebase.in/
————————————————————————————————————–
過去記事は下記を参照ください。2013年からミリタリー同人活動を行っています。
サイトマップ | ミリタリーグッズ工房「猫・工・艦」 (necokoucan.com)
【ブログ記事一覧】 | ミリタリーグッズ工房「猫・工・艦」 (necokoucan.com)




