From 3cf07e5d8f5579893a43a4300d44d4dbab90ba81 Mon Sep 17 00:00:00 2001 From: Andinus Date: Thu, 29 Apr 2021 20:46:30 +0530 Subject: Initial implementation --- lib/Antlia/CLI.rakumod | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 lib/Antlia/CLI.rakumod (limited to 'lib/Antlia/CLI.rakumod') diff --git a/lib/Antlia/CLI.rakumod b/lib/Antlia/CLI.rakumod new file mode 100644 index 0000000..581bfe8 --- /dev/null +++ b/lib/Antlia/CLI.rakumod @@ -0,0 +1,52 @@ +use Terminal::Boxer; + +class Player is export { + has Str $.name; + has $.throw is rw; + has $.score is rw = 0; +} + +#| text based Rock paper scissors game +multi sub MAIN( + Int :$players where * == 2 = 2, #= Number of players (default: 2) +) is export { + say "Antlia - text based Rock paper scissors game"; + say "--------------------------------------------\n"; + + my Player $player1 = Player.new(name => prompt("[Player 1] Name: ").trim); + my Player $player2 = Player.new(name => prompt("[Player 2] Name: ").trim); + + my %ascii-art = ( + rock => %?RESOURCES.slurp, + paper => %?RESOURCES.slurp, + scissor => %?RESOURCES.slurp, + ); + + my %score-against = ( + rock => "scissor", + paper => "rock", + scissor => "paper" + ); + + loop { + print "\n"; + say "- " x 40; + + $player1.throw = %ascii-art.pick[0].key; + $player2.throw = %ascii-art.pick[0].key; + + $player1.score += 1 if $player2.throw eq %score-against{$player1.throw}; + $player2.score += 1 if $player1.throw eq %score-against{$player2.throw}; + + say ss-box(:40cw, %ascii-art{$player1.throw}, + %ascii-art{$player2.throw}); + say ss-box(:40cw, "{$player1.name} ({$player1.score})", + "{$player2.name} ({$player2.score})"); + + sink prompt ""; + } +} + +multi sub MAIN( + Bool :$version #= print version +) is export { say "Antlia v" ~ $?DISTRIBUTION.meta; } -- cgit 1.4.1-2-gfad0