使用MVC的21点Java
我正在用Java创建一个21点游戏,并试图在创建它时使用MVC设计。到目前为止,我创建了以下类: -卡片:按住创建一张卡片 -牌组:创建一个装满所有52张牌的牌组 -手牌:握一手牌 -玩家:为游戏创建一个玩家 -BlackJackTest:我正在测试游戏的所有功能,试图让一些东西正常工作 我现在已经到了可以展示全部52张牌的地步,并且一手发2张牌,然后展示这手牌。但我在接下来的步骤中遇到了很多麻烦。理想情况下,在“BlackJackTest”类中,我希望将其用作一个游戏引擎,输入X个玩家数量和他们的姓名,然后创建玩家,并在系统中循环以玩游戏 我的问题是,我完全被我下一步应该做什么所困扰,或者如果我做错了什么。我的下一个任务应该是实现一个功能,这样我就可以让最多3名玩家对抗一个庄家,但我不确定如何做到这一点……我还应该实现命中/站立功能,我不确定应该在哪里或如何编码这些功能 感谢您的帮助 这是我的密码:使用MVC的21点Java,java,model-view-controller,blackjack,Java,Model View Controller,Blackjack,我正在用Java创建一个21点游戏,并试图在创建它时使用MVC设计。到目前为止,我创建了以下类: -卡片:按住创建一张卡片 -牌组:创建一个装满所有52张牌的牌组 -手牌:握一手牌 -玩家:为游戏创建一个玩家 -BlackJackTest:我正在测试游戏的所有功能,试图让一些东西正常工作 我现在已经到了可以展示全部52张牌的地步,并且一手发2张牌,然后展示这手牌。但我在接下来的步骤中遇到了很多麻烦。理想情况下,在“BlackJackTest”类中,我希望将其用作一个游戏引擎,输入X个玩家数量和他
import java.util.Scanner;
public class BlackJackTest {
public static void main(String[] args) {
/*System.out.println(deck.getCard(0).toString());
System.out.println(deck.getCard(0).getSuit());
System.out.println(deck.getCard(0).getSuitCode());
System.out.println(deck.getCard(0).getValue());
System.out.println(deck.getCard(0).getValueCode());
System.out.println();
System.out.println(deck.cardsLeft());
hand.addCard( deck.dealCard() );
hand.addCard( deck.dealCard() );
hand.showHand();
System.out.println(deck.cardsLeft());
System.out.println(hand.getHandSize());
System.out.println(hand.getCard(0));
System.out.println(hand.getCard(1));
System.out.println(hand.getBlackJackValue());
System.out.println();
*/
Deck deck = new Deck();
Hand p1hand = new Hand();
Player player = new Player();
Scanner sc = new Scanner(System.in);
System.out.println("Enter your name: ");
player.setName(sc.nextLine());
System.out.println("Welcome " + player.getName() + "!");
player.setHand(p1hand);
p1hand.addCard( deck.dealCard() );
p1hand.addCard( deck.dealCard() );
System.out.println(player.getName() + ": ");
p1hand.showHand();
System.out.println("Score: " + p1hand.getBlackJackValue());
System.out.println();
}
}
如果您的模型类有了一个良好的开端,我将开始处理项目的视图和控制器部分。虽然您当然可以修改main()以合并多个玩家(只需实例化多个玩家对象,将它们存储在列表中,并循环处理卡),但如果/当您决定移动到非控制台视图和控制器时,您将不得不放弃很多 您的控制器设计与您如何接收和响应用户输入(即点击/站立)有很大关系。它的工作是将输入从视图(当前通过console.in)中继到模型。因此,您的视图将显示一个提示,询问用户想要做什么,读取他们的响应,并通知控制器。控制器会将此输入映射到模型类中的适当对象/方法 希望对你有帮助
史蒂夫(Steve)听起来好像一个银行级(交易商)会很有用,他会与人类玩家分享很多方法——两人都是玩家。也许第三种类型的玩家,一个机器人,可以根据规则集进行操作。哈哈,刚刚看到那是去年的。哦,好吧,我会让答案保持不变,以防其他人偶然发现这一点。
public class Card {
public enum Value {
TWO(2),
THREE(3),
FOUR(4),
FIVE(5),
SIX(6),
SEVEN(7),
EIGHT(8),
NINE(9),
TEN(10),
JACK(10),
QUEEN(10),
KING(10),
ACE(1);
public final int value;
Value(int c) {
value = c;
}
}
public enum Suit {
CLUBS('C'),
SPADES('S'),
DIAMONDS('D'),
HEARTS('H');
public final char symbol;
Suit(char c) {
symbol = c;
}
}
private Suit suit;
private Value value;
public Card(Suit suit, Value value) {
this.suit = suit;
this.value = value;
}
public Suit getSuit() {
return suit;
}
public Value getValue() {
return value;
}
public char getSuitCode() {
return suit.symbol;
}
public int getValueCode() {
return value.value;
}
public String toString() {
return value + " of " + suit;
}
}
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class Deck {
private List<Card> deck = new LinkedList<Card>();
public Deck() {
for(Card.Suit suit : Card.Suit.values()) {
for(Card.Value value : Card.Value.values()) {
deck.add(new Card(suit,value));
}
}
shuffle();
}
public void shuffle() {
Collections.shuffle(deck);
}
public int cardsLeft() {
// As cards are dealt from the deck, the number of cards left
// decreases. This function returns the number of cards that
// are still left in the deck.
return deck.size();
}
public Card dealCard() {
// Deals one card from the deck and returns it.
if (deck.size() == 52) {
shuffle();
}
Card temp;
temp = deck.get(0);
remove(0);
return temp;
}
public Card getCard(int i) {
return deck.get(i);
}
public Card remove(int i) {
Card c = deck.get(i);
deck.remove(i);
return c;
}
}
import java.util.Vector;
public class Hand {
private Vector<Card> hand;
public Hand() {
hand = new Vector<Card>();
}
public void addCard(Card c) {
if (c != null)
hand.addElement(c);
}
public void showHand() {
for(int i = 0; i < hand.size(); i++){
System.out.println(hand.elementAt(i));
}
}
public int getHandSize() {
return hand.size();
}
public Card getCard(int position) {
if(position >= 0 && position < hand.size())
return (Card)hand.elementAt(position);
else
return null;
}
public int getBlackJackValue() {
int val = 0;
boolean ace = false;
for(int i = 0; i < hand.size(); i++) {
Card card;
card = getCard(i);
val += card.getValueCode();
if(card.getValueCode() == 1) {
ace = true;
}
}
if(ace == true && val + 10 <= 21) {
val += 10;
}
return val;
}
}
public class Player {
private String name;
private Hand hand;
public Player() {
this.hand = null;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setHand(Hand h) {
this.hand = h;
}
public void getHand(){
hand.showHand();
}
}