2016-12-21 7 views
1

申し訳ありませんので、私は非常に初心者で、接続4ゲームをプログラミングしています。 2人のプレイヤーがお互いに対戦できるようにすべてコード化されていますが、コンピューターをプレイする機能を追加したいと思っています。コンピュータと4を接続してください

私はちょうどそれを置くためにランダム関数のような単純なものを使用する必要があり、実際にスマートにして作品をドロップするように最高の場所を把握するためにそれを必要としないが、私はこれを行う方法に迷ってしまいました。

はここでゲームの基本的な構造のための私のコードは次のようになります。

{ 
    makeBoard(); 

    System.out.println("Choose 0 - 5 to pick which column to drop your piece!"); 
    System.out.println("R is red and Y is yellow."); 
    System.out.println("Player 1, you are red. Player 2, you are yellow."); 
    System.out.println("Good luck!"); 

    printBoard(); 

    boolean flag = true; 

    while(flag) 
    { 
     dropRed(); 
     printBoard(); 

     if(!redCheck()) 
     { 
      flag = false; 
      break; 
     } //check r 


     dropYellow(); 
     printBoard(); 


     if(!yellowCheck()) 
     { 
      flag = false; 
      break; 
     } //check y 

    } // closes while 

どれガイダンスが高く評価され、そしてちょうどあなたがより多くのコードを見たいなら、私に知らせて、ありがとうございました!

+0

よろしくお願いいたします。あなたの質問は明確ではありません。投稿とhttp://stackoverflow.com/help/mcve Read http://stackoverflow.com/help/how-to-ask – vels4j

答えて

2

私はちょうどパブリックJava APIでそれを探すために良いアイデアかもしれません

ランダム関数のような単純なものを使用する必要があります。私は自由に利用できる、本当に! https://docs.oracle.com/javase/8/docs/api/java/util/Random.html

次のステップでは、無料の場所を見つける方法を決定することです。

明白な方法は、単純にランダムクラスを使用していくつかの座標を取得し、それらがまだ空いているかどうかを確認することです。これにはいくつかの欠点があります。特に、利用できる場所があるにもかかわらず決して成功しない可能性があります。結局のところランダムな選択です...

私はより多くのアプローチを提案します。

つまり、利用可能な座標のリスト(配列ではありません)を保持しています。これには、XYの値を保持するカスタムクラス(データ転送オブジェクトDTO)が必要です。

実際のプレイヤーが自分のターンをすると、あなたはこのリストから自分のターンを削除します。

ランダムプレイヤーは、リストsize()ゲッターと組み合わせてnextInt(LIMIT)メソッドを使用して、使用可能な位置のリストからランダムな値を取得できます。

各ターンは、リストを短縮し、リストが空の場合(あなたがempty()方法で確認することができます)ganeは終わりました。

+0

ありがとう!私は今APIに入れようとします! –

0

最初に「PvP/PvE」を選択して、状態を(プライベート変数に)保存してください ドロップ方法の1つでは、状態を確認したり、コンソール(プレーヤー)からの入力を受けたり、 PCが1つを選択しました。

ヒント:あなたのコードをより明確にする:コードの読みやすさを測定するための最良の方法です私の「WTF」瞬間、:

フラグ:「フラグを示して...何かを...私が推測します」

dropRed():「私は、いくつかの休暇が必要OMG ...笑死んでドロップ... EHM、それは実際に赤い石を落としていませんか?誰も落ちる場所を選んだのは誰ですか? !

redCheck():「なぜ彼はredcheckを否定されたが、彼は黄色のチェックを否定されたの下に、なぜ彼は削除されません! 2つの方法を切り替えますか?フラグはfalseに設定され、ループは中断します。うーん、大丈夫、redCheck()は、赤いプレーヤーが勝ったかどうかを調べる!'

//チェックr:'ああ、rは赤だと思うけど...でも、彼はすでにifステートメントで赤をチェックしています、これは重要ですか? '

dropYellow():「誰かがループの外に勝ったとなれば大丈夫ああ、それは、すべてのドロップした後、黄色そして、常にドロップされた色とは無関係に、赤だし、それは、チェック」

yellowCheck(): 「大丈夫、赤いチェックと同じです。

//閉じる中: 'Nooooo ***、Sherlock!'

コードの可読性を向上させるために、少し変更する必要があります。たとえば、 'flag'を 'gameWon'に、dropRed()をplayerRedsTurn()に、redCheck()をhasPlayerRedWon()に変更します。あなたのコメントも削除してください。if節の文は、コメントがなくても理解できるはずです。また、 'close while while'は時代遅れです。

関連する問題