javaでブラックジャックを作っています。ゲーム終了時にお互いの手札の合計と勝敗値を表示するコードを描きたいです
java
1 2 3/* 4 * To change this license header, choose License Headers in Project Properties. 5 * To change this template file, choose Tools | Templates 6 * and open the template in the editor. 7 */ 8package BlackJack; 9 10/* 11 * To change this license header, choose License Headers in Project Properties. 12 * To change this template file, choose Tools | Templates 13 * and open the template in the editor. 14 */ 15import java.util.ArrayList; 16import java.io.IOException; 17import java.io.PrintWriter; 18import static java.lang.System.out; 19import java.util.Random; 20import javax.servlet.ServletException; 21import javax.servlet.http.HttpServlet; 22import javax.servlet.http.HttpServletRequest; 23import javax.servlet.http.HttpServletResponse; 24 25/** 26 * 27 * @author ichinosemasahiro 28 */ 29public class BlackJack3 extends HttpServlet { 30 31 abstract class Human{ 32 33 abstract protected int open();//abstractには何も処理を書かない合計値を返す! 34 35 abstract protected void setcard(ArrayList<Integer> a);// 36 37 abstract protected boolean checksum(); 38 39 40 41 42 } 43 ArrayList<Integer> myCards = new ArrayList<>(); 44 45 46 class Dealer extends Human{ 47 ArrayList<Integer> cards = new ArrayList<>();//allcardsの中に書くと他のメソッドで使えないのでメソッド外に書く 48 public void allcards (){//カードの山札 49 50 for(int n = 1; n<=4; n++){//for文の中にfor文を書くことによって13枚のカードをcardsにaddする処理を4回繰り返すことができる 51 for (int i = 1; i <= 13; i++ ){//13枚のトランプをプリントしてcardsに入れる処理 52 //addの前に書かないとaddしてからiに代入するから答えが少しずれてしまう、 53 cards.add(i); 54 } 55 } 56 } 57 public ArrayList<Integer> deal(){ 58 ArrayList<Integer> data1 = new ArrayList<>();//ArrayListにdata1のカード情報を入れる 59 Random rand = new Random(); 60 Integer index = rand.nextInt(cards.size());//cardsを使いたい場合はcardsをメソッドの外に書く 61 data1.add(cards.get(index));//ランダムの要素を二つ追加するための処理 62 63 Integer index1 = rand.nextInt(cards.size());//3 64 data1.add(cards.get(index1)); 65 return data1; 66 } 67 68 public ArrayList<Integer> hit(){ 69 Random rand = new Random(); 70 Integer index = rand.nextInt(cards.size());//cardsの全要素をランダムにしている 71 ArrayList<Integer> data2 = new ArrayList<>();//これはArrayListの書き方覚える 72 data2.add(index);//cardsを入れないと要素番号が表示される。get 73 return data2; 74 } 75 public void setcard(ArrayList<Integer> a){//ArrayListで受けたカードをmyCardsに入れる処理 76 //仮定の話 もし渡してくれたらの話 77 for (int i= 0; i < a.size(); i++){ 78 //aに引いたカードが入っているものとして進む 79 myCards.add(a.get(i));//同じ方だからaddできる 80//かっこの中から実行 81 } 82 83 } 84 85 public int open(){//mycardの合計値 86 87 int sum = 0; 88 for(int i = 0;i< myCards.size(); i++){ 89 sum+=myCards.get(i); 90 } 91 return sum; 92 } 93 public boolean checksum(){//16より少ないとtrueを返す 94 int sum = 0; 95 for(int i = 0;i< myCards.size(); i++){ 96 sum+=myCards.get(i); 97 } 98 if (sum <= 16 ){//合計してから処理する 99 return true; 100 } 101 else{ 102 return false; 103 } 104 } 105 106 107 } 108 class user extends Human{ 109 110 ArrayList<Boolean> trueorfalse = new ArrayList<Boolean>(); 111 112 public void setcard(ArrayList<Integer> a){// 113 for(int i =1 ; i > a.size(); i++) 114 myCards.add(a.get(i)); 115 } 116 117 public int open(){ 118 int sum = 0; 119 for(int i = 0;i< myCards.size(); i++){ 120 sum+=myCards.get(i); 121 } 122 return sum; 123 124 } 125 public boolean checksum(){ 126 int sum = 0; 127 for(int i = 0;i< myCards.size(); i++){ 128 sum+=myCards.get(i); 129 } 130 if (sum <= 16 ){//合計してから処理する 131 return true; 132 } 133 else{ 134 return false; 135 } 136 137 138 } 139 } 140 /*int sum = 0 141 for (int i = 0 ; i<6; i++) 142 sum+=i//入れる先は左、もらう方は右!!! 143 */ 144 145 146 147 148 149 150 /** 151 * Processes requests for both HTTP <code>GET</code> and <code>POST</code> 152 * methods. 153 * 154 * @param request servlet request 155 * @param response servlet response 156 * @throws ServletException if a servlet-specific error occurs 157 * @throws IOException if an I/O error occurs 158 */ 159 protected void processRequest(HttpServletRequest request, HttpServletResponse response) 160 throws ServletException, IOException { 161 response.setContentType("text/html;charset=UTF-8"); 162 try (PrintWriter out = response.getWriter()) { 163 /* TODO output your page here. You may use following sample code. */ 164 Dealer D = new Dealer(); 165 D.deal(); 166 out.print(D.deal()); 167 168 } 169 170 } 171 172 173//1.山札を作る 174//2,山札をシャッフル、ランダムにする。 175//3,ランダムの中から二枚受け取る 176//4,受け取った二枚のカードを足し算して合計値を出す 177//5,その合計値が基準値未満だとfalse 178//6,trueだと何もせずfalseの場合はもう一枚追加する 179//7,もう一枚追加の処理はhitを使う、 180//呼び出しただけでは何もしない 181 182 // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code."> 183 /** 184 * Handles the HTTP <code>GET</code> method. 185 * 186 * @param request servlet request 187 * @param response servlet response 188 * @throws ServletException if a servlet-specific error occurs 189 * @throws IOException if an I/O error occurs 190 */ 191 @Override 192 protected void doGet(HttpServletRequest request, HttpServletResponse response) 193 throws ServletException, IOException { 194 processRequest(request, response); 195 } 196 197 /** 198 * Handles the HTTP <code>POST</code> method. 199 * 200 * @param request servlet request 201 * @param response servlet response 202 * @throws ServletException if a servlet-specific error occurs 203 * @throws IOException if an I/O error occurs 204 */ 205 @Override 206 protected void doPost(HttpServletRequest request, HttpServletResponse response) 207 throws ServletException, IOException { 208 processRequest(request, response); 209 } 210 211 /** 212 * Returns a short description of the servlet. 213 * 214 * @return a String containing servlet description 215 */ 216 @Override 217 public String getServletInfo() { 218 return "Short description"; 219 }// </editor-fold> 220 221} 222
大まかな処理の内容は書けたのですがその次のステップでprocessRequestの中にインスタンス化して動かしたいのですが何をどうすればいいのかわかりません、初心者にもわかりやすくお願いします。
質問ですが、このブラックジャックはplayer数の指定などはありますか?
Dealer対Userで二人です。よろしくお願いします。
ありがとうございます。あともう一つ質問ですが、本来のブラックジャックは和が21に近いかどうか競うのですが「柄なしです」ということは21にはできないということですか?質問ばかりですみません。
こちらこそ言葉足らずですいません。ハート、スペードといった絵柄がなしで数字はありでお願いします。説明が下手ですいません
こちらこそ勘違いをしてすいません。
柄がないというのがJ,Q,Kがないということだと勘違いしていました...
いや、自分の説明が下手なので、、、他の説明は大丈夫でしょうか??
後は大丈夫です 実はインスタンス化はしたことがないので時間がかかるかもしれません。(もっと効率的なコードが書けたらそちらを書くかもしれません すみません。)
ありがとうございます、よろしくお願いいたします!
絵札なしでも123456や777で21でそうが
山札からカードを引いても、山札に変化がないのが気になる。同じ数が五枚以上出る余地がありますよね。
それにAは1あるいは11どちらか選択できるはずですし、J, Q, K は本来10ですよね。
回答3件
あなたの回答
tips
プレビュー