Ccmmutty logo
Commutty IT
3 min read

第14話 V言語で超簡単なゲームを作る4

https://cdn.magicode.io/media/notebox/blob_cLO88r0
カサレリア。katzenです。
前回、V言語の配列2として、2話に渡り配列を紹介しました。 少し癖のある部分もありましたが大丈夫だったでしょうか。
では、引き続き第7話 V言語で超簡単なゲームを作るをすすめていきましょう。
  1. 「じゃんけん...(1.ぐー,2.ちょき,3.ぱー)」と表示して
  2. 数字1〜3を入力してもらうことにします。
  3. それ以外が入力された場合、「数字の1か2か3を入力してね。」と表示して2.へ
  4. ランダムでNPCの手(1,2,3)を決めて
  5. 「あなた:(手) (手):NPC」 と表示して
  6. 1は2に勝ち、2は3に勝ち、3は1に勝ち、同じ数字ならあいこ
  7. 「あなたの勝ち」 or 「あなたの負け」 or 「あいこで...(1.ぐー,2.ちょき,3.ぱー)」と表示して
  8. あいこなら2.へ戻る
  9. 終了
これの4まで終わっています。 今まで見てきたもので残りのすべてクリアできるはずです。一気に書いてしまいましょう。
// day7.v
import os
import rand

// 1. 「じゃんけん...(1.ぐー,2.ちょき,3.ぱー)」と表示して
print('じゃんけん...')

retry: for {
	println('(1.ぐー,2.ちょき,3.ぱー,q.終了)')

	// 2. 数字1〜3を入力してもらうことにします。
	line := os.get_line()
	you := line.trim_space()

	// 3. それ以外が入力された場合、「数字の1か2か3を入力してね。」と表示して2.へ
	// + qを入れたら終了
	match you {
		'1', '2', '3' {}
		'q' {break retry} // 終了
		else {
			println('数字の1か2か3を入力してね。qで終了だよ。')
			continue retry
		}
	}

	// 計算しやすいように内部的には0,1,2にする
	player := you.int() - 1 // 数値に直しておく

	// 4. ランダムでNPCの手(0,1,2)を決めて
	cpu := rand.intn(3) ? // ?はエラーを無視します

	// 5. 「あなた:(手) (手):NPC」 と表示して
	lut := ['ぐー', 'ちょき', 'ぱー']! // !を指定することで固定長にします。
	println('あなた:${lut[player]} vs ${lut[cpu]}:NPC')

	// 6. 1は2に勝ち、2は3に勝ち、3は1に勝ち、同じ数字ならあいこ 内部的には-1
	// 7. 「あなたの勝ち」 or 「あなたの負け」 or 「あいこで...(1.ぐー,2.ちょき,3.ぱー)」と表示して
	// 8. あいこなら2.へ戻る
	if player == cpu {
		print('あいこで...')
		continue retry
	}

	result := match true {
		(player + 1) % 3 == cpu { 'あなたの勝ち' }
		else { 'あなたの負け' }
	}
	println(result)

	// 9. 終了
	break
}
愚直に仕様どおり書きました。 (q入力で終了を追加しました。)
関数処理などを知っていればもっとスッキリ書けるでしょう。
また、1度きりで終わってしまい、面白くありません。
qが入力されるまでじゃんけんを続けられたり、勝率を出せたり、ランキングなどを入れるともう少し楽しくなるかもしれませんね。
ですが「超簡単なゲームを作る」はこれでひとまず完成です!
長いようで短い戦いが終わりました。
単純計算や入出力処理、条件分枝、ループ処理、配列など限られた処理でゲームを完成させることに成功したのです。
ここまで、お付き合いありがとうございました。
次回からはAPIもしくはWASMあたりをやっていきたいと思います。是非見てください!

Discussion

コメントにはログインが必要です。