LoginSignup
5
2

More than 3 years have passed since last update.

300回プログラムじゃんけんでを戦わせるWebアプリを作った

Last updated at Posted at 2019-12-15

作ったアプリ

遊び方

これはじゃんけんの出す"手"をプログラミングして戦わせるアプリです。

例えばグーだけを出すA君のプログラムと
グーとパーを交互に出すB君のプログラム
を300回戦わせると

B君が勝ちます

こんな感じでじゃんけんのアルゴリズムを考えて戦わせるアプリです

A君のプログラム

HAND = 0

B君のプログラム

HAND = 1
if COUNT % 2 == 0:
    HAND = 0

戦わせると・・・
スクリーンショット 2019-12-10 12.36.10.png
こんな結果になります。

これをWebで遊べるアプリです。

システム構成

今回使ったものは以下の通りになりました。

  • Vue.js
  • Buefy
  • AWS
  • serverless framework
  • dynamodb
  • firebase
  • circleCI

フロントエンドの部分はVueとBeufyを使いました。
同じような画面を作ることが多かったのでサクサク作れました。

バックエンドではAWSのサービスをserverless frameworkで構築しました。
アクセスが不安定なサービスになりそうなのでこちらのフレームワークを使いました。

ホスティングと認証にはfirebaseを使用しました。
本当はAWSなのですべてまとめたほうがいいのかもしれませんが
firebaseは無料で結構使えるのでこちらを採用しました。

無料枠などもあり、すべて無料でできました。
本当はRDBを使いたかったのですが、お金がないので無理やりdynamodbで作りました(反省)

機能

じゃんけんプログラム

じゃんけんのアルゴリズムを実装するにあたり、システム変数的なものを用意することにしました。

変数名 概要
HAND Intger 0~2 の数値を代入することでグーチョキパーを出せる
WIN Intger 勝った数
LOSE Intger 負けた数
DROW Intger あいこの数
P List 自分が出した手の履歴
E List 相手が出した手の履歴
COUNT Intger 対戦数

これを実装したことにより100回負けたらグーを出すみたいなプログラムを書けます

HAND = 1
if LOSE >= 100:
    HAND = 0

コーディング画面

ハイライトやインデントの機能が欲しかったため今回は「Codemirror」を使用させていただきました。

Vueで使用する場合は「vue-codemirror」を使うと単一コンポーネントで使用できるため、気持ちよく作れました。

ランキング機能

ランキングの実装には「イロレーティング」を使いました。

イロレーティングは対戦型の競技に使用されており、相対的な強さを評価します。

そのため、今回のランキングではこちらを使用し投稿されたプログラムを総当たりさせて順位を決定しました。

引用:イロレーティング
https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%AD%E3%83%AC%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0

認証機能

今回は一人が複数のプログラムを投稿できないように認証機能を追加しました。

Firebase Authenticationを使用しGithubで認証できるようにしました。

感想

自分の想定しているものが一通りできたので、だいぶ満足しています。

ただセキュリティやじゃんけんのプログラムに不備があるかもしれないのでこれからも運営、開発をしていきたいと思います。

5
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2