みなさんこんにちは。
そして初めまして!
プログラミングど素人のdk_masuと申します。
色々とあって今回アドベントカレンダーの記事を書かせていただくことになりました。
Qiita自体登録して間もない感じなので
ちょっと色々とアレな部分もあるとは思うんですけれども
一生懸命やりますので、生暖かい目でご覧いただけると幸いでございます。
#あなたどの位Java書いたことあるの?#
「プログラミング未経験者がじゃんけんのプログラムを書いてみる」
と題しましたが、全くもって今から初めて触るというわけではありません。
ちょうど1ヶ月ほど前に「Javaのプログラムを書きたい!」と思い
コチラのサイト
http://www.gamecradle.net/document/main/content/doki/introduction.html#list
を参考にクイズ形式のプログラムを書きながら2週間ほど勉強しました。
(書いたと言ってもほぼ丸写しですが・・・)
つまり「自分で考えながら書くのは初めて」
ということになりますね!
いや〜書けるかな〜・・・
何あともあれ、とりあえずやっていきましょう。
・・・とは言っても一体何から始めればいいんだ????
色々と考えた結果、コードは置いといてとりあえずコメントだけ書いてみることにしました。
#コメントだけ書いてみる#
//グー、チョキ、パーの定数
//CPUが出す役
//プレイヤー打ち込んだ文字を受け取る
//役を判定
ふんふん!なんだか出来そうだぞ!(すくなっ!4行て)
細かいことは置いておいて
とりあえずカタカタと書き進めていきます。
とココで問題発生。
「も・・・文字の比較が出来ない!」
「一体どうなってるんだ!」
あれ・・・?ちゃんとグーって打ち込んでるのになんで・・・?
どうしちゃったのJavaちゃん・・・
まさかこんなに早くお別れ?(挫折しそうw)
#文字列の比較が出来ない#
実際のコード
//プレイヤー打ち込んだ文字を受け取る
try{
while(true){
//プレイヤーが打ち込む文字
String gu = "グー";
String cho = "チョキ";
String pa = "パー";
//入力ストリームの生成
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//「グー」「チョキ」「パー」のどれかを打ち込んで下さいと表示。
System.out.println("「グー」「チョキ」「パー」のどれかを打ち込んで下さい ⇒ ");
String player = br.readLine();
if(gu.equals(player) || cho.equals(player) || pa.equals(player)){
System.out.println("あなたが出したのは「" + player + "」です。");
break;
}else{
System.out.println("「グー」「チョキ」「パー」以外は打ち込まないで下さい");
}
}
}catch(IOException e){
System.out.println("Exception :" + e);
}
何が原因なのか全くわからない・・・
とりあえず、ちゃんと出力されるかどうか見てみることに。
あれ!?なんか文字化けしてる・・・なんかこれが原因っぽいな。
色々と調べたがまったくもってわからない。
友人に訪ねてみたところ
「文字コードの違いですねこれは」
とのこと。
文字コードねぇ・・・
「文字コードってなんだよ!バカヤロー!」
・・・と心のなかで叫びながら、ネットの海を徘徊すること1時間・・・。
ネットビーンズのプロジェクトからエンコーディングを変更すれば行けるかな?
NetBeansの出力ウィンドウの日本語が文字化けしてしまった場合の対処法
さーて出来るかな・・・
できたーー!IDEが原因だったんだね・・・。
おいちゃん入力ストリームの書き方が悪いもんだと思ってずーっとそっちばっかり調べてたよ・・・。
よーし、この勢いで勝敗数をカウントするコードもいれちゃおう!
#個人的ビッグトラブルも解決し遂に完成#
おおー!ちゃんと動いてるーー( ´ ▽ ` )ノ
(コマンドプロンプトで動かしています)
最初にコメントで考えていたものだけでは明らかに足りませんでしたね。
っていうか4行って少なすぎるよね 笑
実際のコードは最終的にこんな感じになりました。
package janken;
import java.io.*;
public class Janken {
//勝敗数をカウントする変数
private static int win = 0;
private static int lose =0;
//もう一度やるか
private static boolean retry = true;
public static void main(String[] args) {
// TODO code application logic here
//「グー」「チョキ」「パー」の定数
final int GU = 0;
final int CHO = 1;
final int PA = 2;
//プレイヤーが打ち込む文字
String gu = "グー";
String cho = "チョキ";
String pa = "パー";
System.out.println("さあ、私とじゃんけんしましょう!!勝負ですよー!!");
//プレイヤー打ち込んだ文字を受け取る
while(retry){
try{
//入力ストリームの生成
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String player;
while(true){
//「グー」「チョキ」「パー」のどれかを打ち込んで下さいと表示。
System.out.println("「グー」「チョキ」「パー」のどれかを打ち込んで下さい ⇒ ");
player = br.readLine();
if(gu.equals(player) || cho.equals(player) || pa.equals(player)){
System.out.println("あなたが出したのは「" + player + "」です。");
break;
}else{
System.out.println("「グー」「チョキ」「パー」以外は打ち込まないで下さい");
}
}
int cpu =(int)(Math.random()*3);
//cpuが出す役
if(cpu == GU){
System.out.println("私が出したのは「グー」です!!");
}else if(cpu == CHO){
System.out.println("私が出したのは「チョキ」です!!");
}else if(cpu == PA){
System.out.println("私が出したのは「パー」です!!");
}
switch(cpu){
case 0:
if(gu.equals(player)){
System.out.println("あーいこーで?");
}else if(cho.equals(player)){
System.out.println("あなたの負けです!ざんねん!");
System.out.println("***************************");
lose += 1;
winlose();
retry();
}else if(pa.equals(player)){
System.out.println("あなたの勝ちです!やったね!!");
System.out.println("***************************");
win += 1;
winlose();
retry();
}
break;
case 1:
if(gu.equals(player)){
System.out.println("あなたの勝ちです!やったね!!");
System.out.println("***************************");
win += 1;
winlose();
retry();
}else if(cho.equals(player)){
System.out.println("あーいこーで?");
}else if(pa.equals(player)){
System.out.println("あなたの負けです!ざんねん!");
System.out.println("***************************");
lose += 1;
winlose();
retry();
}
break;
case 2:
if(gu.equals(player)){
System.out.println("あなたの負けです!ざんねん!");
System.out.println("***************************");
lose += 1;
winlose();
retry();
}else if(cho.equals(player)){
System.out.println("あなたの勝ちです!やったね!!");
System.out.println("***************************");
win += 1;
winlose();
retry();
}else if(pa.equals(player)){
System.out.println("あーいこーで?");
}
break;
}
}catch(IOException e){
System.out.println("Exception :" + e);
}
}
}
private static void retry(){
//入力ストリームの生成
try{
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("もう一度続ける場合は「1」を入力して下さい");
int re = sc.nextInt();
if(re == 1){
System.out.println("よし!もう一回勝負しましょう!");
}else{
retry = false;
}
}catch(Exception e){
retry = false;
}
}
private static void winlose(){
System.out.println("あなたの勝敗数");
System.out.println("勝ち:" + win + "回");
System.out.println("負け:" + lose + "回");
System.out.println("***************************");
}
}
たぶん見る人がみたらすごいアレな感じの書き方なんだろうな・・・。
思ったよりも時間もかかったし、理解が浅いところも多々ありますが
人生初めて自分で考えて書いたじゃんけんプログラムが完成しました!
最後までお読みいただきありがとうございました!