Game of Set program, need help with for loop nesting and more

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • falconsx23
    New Member
    • Nov 2008
    • 55

    #31
    So far I got my game to ask a user to input a card to determine a set. It first asks the user to enter one card (0 - eleven making 12). It asks the user to enter one card and then another and then a third card.

    What I am stuck on is how do I get my program to ask the user to enter again if the user enters the wrong data. For instance the only way you can enter card one is by typing one. If the user enters 1 or fg instead of one, how do I get my program to ask the user to enter another card.

    As you can see my program has tons of else if statements. I could not find an easier way to create that data. If you guys see a better and easier way can you let me know.

    Code:
     public void playGame()
          {
             ArrayList<Card> randomCards = createRandomNumberOfCards();
              for(int i= 0; i < randomCards.size(); i++)   //checking for every  card in the randomCard ArrayList
              {
                  
              
                  String cardDetails = randomCards.get(i).toString();    //using the toString of the Card method (which converts the details of the cards into a String 
                  System.out.println(i + " " + cardDetails);   //prints out the cards (details of the cards) into the terminal window 
                 
     
    
            }
            
              //These cards are set to a varabiable to 
              //make it easier for the user to input
              Card zero = randomCards.get(0);
              Card one = randomCards.get(1);
              Card two = randomCards.get(2);
              Card three = randomCards.get(3);
              Card four = randomCards.get(4);
              Card five = randomCards.get(5);
              Card six = randomCards.get(6);
              Card seven = randomCards.get(7);
              Card eight = randomCards.get(8);
              Card nine = randomCards.get(9);
              Card ten = randomCards.get(10);
              Card eleven = randomCards.get(11);
            
             
              System.out.println("Pick your 1st card for the set  ");
              Scanner in = new Scanner(System.in);
              String setH = in.nextLine();
              
              if(setH.equals("one" ))
              {
                 System.out.println(one);
              //    System.out.println("Pick your second card for the set ");
                //  String setJ = in.nextLine();
                 // if(setJ.equals("two"))
                  //{
                    //  System.out.println(two);
                   //}
                   
              }
                else if(setH.equals("three"))
                {
                    System.out.println(three);
                }
                 else if(setH.equals("four"))
                {
                    System.out.println(four);
                }
                 else if(setH.equals("four"))
                {
                    System.out.println(four);
                }
                 else if(setH.equals("five"))
                {
                    System.out.println(five);
                }
                 else if(setH.equals("six"))
                {
                    System.out.println(six);
                }
                 else if(setH.equals("seven"))
                {
                    System.out.println(seven);
                }
                 else if(setH.equals("eight"))
                {
                    System.out.println(eight);
                }
                 else if(setH.equals("nine"))
                {
                    System.out.println(nine);
                }
                 else if(setH.equals("ten"))
                {
                    System.out.println(ten);
                }
                 else if(setH.equals("eleven"))
                {
                    System.out.println(eleven);
                }
               
                
            
                  System.out.println("Pick your second card for the set ");
                  String setJ = in.nextLine();
                   if(setJ.equals("zero"))
                   {
                       System.out.println(zero);
                    }
                      else if(setJ.equals("one"))
                      {
                          System.out.println(one);
                        }
                  else if(setJ.equals("two"))
                  {
                      System.out.println(two);
                    }
                  else if(setJ.equals("three"))
                  {
                      System.out.println(three);
                    }
                    else if(setJ.equals("four"))
                    {
                        System.out.println(five);
                    }
                      else if(setJ.equals("six"))
                      {
                          System.out.println(six);
                        }
                  else if(setJ.equals("seven"))
                    {
                        System.out.println(seven);
                    }
                  else if(setJ.equals("eight"))
                  {
                      System.out.println(eight);
                    }
                  else if(setJ.equals("eight"))
                  {
                      System.out.println(eight);
                    }
                  else if(setJ.equals("eight"))
                  {
                     System.out.println(eight);
                    }
                  else if(setJ.equals("nine"))
                  {
                        System.out.println(nine);
                    }
                  else if(setJ.equals("ten"))
                  {
                      System.out.println(ten);
                    }
                      else if(setJ.equals("eleven"))
                {
                    System.out.println(eleven);
                }
                
                 System.out.println("Pick your third card for a set ");
                  String setF = in.nextLine();
                   if(setF.equals("zero"))
                   {
                       System.out.println(zero);
                    }
                    else if(setF.equals("one"))
                    {
                        System.out.println(one);
                    }
                    else if(setF.equals("two"))
                    {
                        System.out.println(two);
                    }
                    else if(setF.equals("three"))
                    {
                        System.out.println(three);
                    }
                    else if(setF.equals("four"))
                    {
                        System.out.println(four);
                    }
                    else if(setF.equals("five"))
                    {
                        System.out.println(five);
                    }
                    else if(setF.equals("six"))
                    {
                        System.out.println(six);
                    }
                    else if(setF.equals("seven"))
                    {
                        System.out.println(seven);
                    }
                    else if(setF.equals("eight"))
                    {
                        System.out.println(eight);
                    }
                    else if(setF.equals("nine"))
                    {
                        System.out.println(nine);
                    }
                    else if(setF.equals("ten"))
                    {
                        System.out.println(ten);
                    }
                    else if(setF.equals("eleven"))
                    {
                        System.out.println(eleven);
                    }

    Comment

    • falconsx23
      New Member
      • Nov 2008
      • 55

      #32
      ok I figured that part. I just placed my program in a while loop using a Boolean.
      Now I need help with how can I actually determine a set. I just dont see how can I say if card one's color, number, and pattern equals card two's color , number, and pattern Then it is a set.

      By the look of this I know I have to use an if statement. I'm just dont know how to code it.

      Code:
        public void playGame()
            {
               ArrayList<Card> randomCards = createRandomNumberOfCards();
                for(int i= 0; i < randomCards.size(); i++)   //checking for every  card in the randomCard ArrayList
                {
                    
                
                    String cardDetails = randomCards.get(i).toString();    //using the toString of the Card method (which converts the details of the cards into a String 
                    System.out.println(i + " " + cardDetails);   //prints out the cards (details of the cards) into the terminal window 
                   
       
      
              }
              
                //These cards are set to a varabiable to 
                //make it easier for the user to input
                Card zero = randomCards.get(0);
                Card one = randomCards.get(1);
                Card two = randomCards.get(2);
                Card three = randomCards.get(3);
                Card four = randomCards.get(4);
                Card five = randomCards.get(5);
                Card six = randomCards.get(6);
                Card seven = randomCards.get(7);
                Card eight = randomCards.get(8);
                Card nine = randomCards.get(9);
                Card ten = randomCards.get(10);
                Card eleven = randomCards.get(11);
                
                Boolean correct = false;
                while (!correct){
                    System.out.println("Pick your 1st card for the set  ");
                      Scanner in = new Scanner(System.in);
                      String setH = in.nextLine();
                      if (setH.equals( "zero")){
                          
                          correct = true;
                          System.out.println(zero);
                      }
                      else if(setH.equals( "one"))
                      {
                          System.out.println(one);
                          correct = true;
                      }
                      
                        else if(setH.equals( "two"))
                      {
                          System.out.println(two);
                          correct = true;
                      }
                        else if(setH.equals( "three"))
                      {
                          System.out.println(three);
                          correct = true;
                      }
                        else if(setH.equals( "four"))
                      {
                          System.out.println(four);
                          correct = true;
                      }
                        else if(setH.equals( "five"))
                      {
                          System.out.println(five);
                          correct = true;
                      }
                        else if(setH.equals( "six"))
                      {
                          System.out.println(six);
                          correct = true;
                      }
                        else if(setH.equals( "seven"))
                      {
                          System.out.println(seven);
                          correct = true;
                      }
                        else if(setH.equals( "eight"))
                      {
                          System.out.println(eight);
                          correct = true;
                      }
                        else if(setH.equals( "nine"))
                      {
                          System.out.println(nine);
                          correct = true;
                      }
                        else if(setH.equals( "ten"))
                      {
                          System.out.println(ten);
                          correct = true;
                      }
                        else if(setH.equals( "eleven"))
                      {
                          System.out.println(eleven);
                          correct = true;
                      }
                      
                      else {
                          correct = false;
                          System.out.println("That is not a correct card please enter again");
                      }
      I followed this procedure two more times to allow the user to select up to three cards.

      Comment

      • falconsx23
        New Member
        • Nov 2008
        • 55

        #33
        Ok I finished my game of set. If anyone is still looking at this thread I just wanna say thanks for the help.

        GameOfSet Class
        Code:
        import java.util.Scanner;
        import java.util.*;
        import javax.swing.*;
        import java.awt.*;
        
        /**
         * Write a description of class GameOfSet here.
         * @author (Michael Brown) 
         * @version (a version number or a date)
         */
        public class GameOfSet
        {
            
            ArrayList<Card> deckOfCards;   //An array list of card objects
             
            
            /**
             * Constructor for objects of class GameOfSet
             * @param String to determine Shape and String to determine color
             * @param number can be 1-3
             * @param color can be red, green, purple
             * @param pattern can be solid, stripped, open
             * @param shape can be diamond, squiggle, oval
             * 
             */
            public GameOfSet()
            {
                deckOfCards = new ArrayList<Card>(81);          //"Card" is what the arraylist is made up of
              
              ArrayList<String> number = new ArrayList<String>(3);                     //ArrayList of numbers
              number.add("1");
              number.add("2");
              number.add("3");
              
              ArrayList<String>  color = new ArrayList<String>(3);                     //ArrayList of colors
              color.add("red");
              color.add("green");
              color.add("purple ");
              
              ArrayList<String> pattern = new ArrayList<String>(3);                 //ArrayList of patterns
              pattern.add("solid");
              pattern.add("striped");
              pattern.add("open");
              
              ArrayList<String> shape = new ArrayList<String>(3);                   //ArrayList of Shapes
               shape.add("diamond");
               shape.add("squiggle");
               shape.add("oval");
              
              Card theCard = null;
                 for(int i = 0; i < number.size(); i++)
                 {
                                  
                     for(int j = 0; j < color.size(); j++)
                     {
                             
                          for(int k = 0; k < pattern.size(); k++)
                          {
                             
                                for(int m = 0; m < shape.size(); m++)
                                {
                                     theCard = new Card(number.get(i),color.get(j),pattern.get(k),shape.get(m));
                                     deckOfCards.add(theCard);    // adds the new card that is being created to the deck of cards array list
                              }
                                
                        }
                    }                     
                
                  }   
            }
        
             /**
              * To allow 12 cards from the deckOfCards ArrayList  to be choosen at random 
              * Then laid out in a grid of 3 rows with 4 cards each
              */
             public ArrayList<Card> createRandomNumberOfCards()
             {
                 Random generator = new Random();                       //Creating the random class
                 ArrayList <Integer> list = new ArrayList <Integer>();
                 int randomIndex = 0;                //A random interger (range 1 to 12) so random class creates 12 random cards
                 int x = 12;
                 ArrayList <Card> randomCards = new ArrayList <Card>();         //Another ArrayList, when a card is pulled from the deckOfCard ArrayList, it is stored into the randomCards arrayList
                 while(x>0) 
                 {
                     randomIndex = generator.nextInt(81);               //randomIndex is a random number ranging from 0 to 81 cards 
                     
                     while(list.contains(new Integer(randomIndex)))  //this is a nested list that make sure that there is more then one of the same random card being returned. 
                     {
                        randomIndex = generator.nextInt(81);               //If there is one of the same card being returned then it will simply make a new random card 
                    }
                    list.add(randomIndex);                                         // value at randomIndex is being added to the list of integers
                    x--;
                   
                              
                 }
                      for(int y= 0; y < 12; y++)
                     {
                                                                                                                   //gets a number from the "list" ArrayList. Then deckOfCards
                         randomCards.add(deckOfCards.get(list.get(y)));  //uses that number to get the value from the deckOfcards ArraysList and places it into the random card 
                         
                     }
                 
                     return  randomCards;                                                       //This is the random card being returned 
              }
             
             
              /**
               * To create a grid that contains 12 cards
               * 3 rows and 4 columns
               */
              
              public void playGame()
              {
                 ArrayList<Card> randomCards = createRandomNumberOfCards();
                  for(int i= 0; i < randomCards.size(); i++)   //checking for every  card in the randomCard ArrayList
                  {
                      
                  
                      String cardDetails = randomCards.get(i).toString();    //using the toString of the Card method (which converts the details of the cards into a String 
                      System.out.println(i + " " + cardDetails);   //prints out the cards (details of the cards) into the terminal window 
                     
         
        
                }
                
                  //These cards are set to a varabiable to 
                  //make it easier for the user to input
                  Card zero = null;
                  Card one = null;
                  Card two = null;
                  
                  Boolean correct = false;
                  while (!correct){
                      System.out.println("Pick your 1st card for the set  ");
                        Scanner in = new Scanner(System.in);
                        String setH = in.nextLine();
                        int number = Integer.parseInt(setH);
                        if (number >= 0 && number <= 11){
                            
                            correct = true;
                            System.out.println(randomCards.get(number));
                            zero = randomCards.get(number);
                            
                        }
                   
                        
                        else {
                            correct = false;
                            System.out.println("That is not a correct card please enter again");
                        }
        
                    }
                
                 
                 
                   Boolean correcta = false;
                  while (!correcta){
                      System.out.println("Pick your second card for the set  ");
                        Scanner in = new Scanner(System.in);
                        String setJ = in.nextLine();
                        int number = Integer.parseInt(setJ);
                        if ( number >= 0 && number <= 11){
                            
                            correcta = true;
                            System.out.println(randomCards.get(number));
                            one = randomCards.get(number);
                        }
                        
                        
                        else
                        {
                            correct = false;
                            System.out.println("That is not a correct card please enter again");
                        }
                    }
                    
                     Boolean correctb = false;
                  while (!correctb){
                      System.out.println("Pick your third card for the set  ");
                        Scanner in = new Scanner(System.in);
                        String setV = in.nextLine();
                         int number = Integer.parseInt(setV);
                        if ( number >= 0 && number <= 11){
                            
                            correctb = true;
                            System.out.println(randomCards.get(number));
                            two = randomCards.get(number);
                        }
                        
                        else
                        {
                               correct = false;
                            System.out.println("That is not a correct card please enter again");
                        }
                        
                       
                      
                    }
               
                   //setV
                   //setH
                   //setJ
                   int same = 0;
                   
                   if(zero.getNumber().equals(one.getNumber()) && one.getNumber().equals(two.getNumber()))
                   {
                       same ++;
                    } 
                       
                   if(zero.getColor().equals(one.getColor()) && one.getColor().equals(two.getNumber()))
                   {
                       same ++;
                    }
                     if(zero.pattern().equals(one.pattern()) && one.pattern().equals(two.pattern()))
                      {
                          same ++;
                        }
                     if(zero.shape().equals(one.shape()) && one.shape().equals(two.shape()))
                       {
                           same ++;
                        }
                        
                        if( same >= 3)
                        {
                            System.out.println("This is a set you win");
                        } 
                
                    if(! zero.getNumber().equals(one.getNumber()) && ! one.getNumber().equals(two.getNumber()))
                    {
                        same ++;
                    }
                     if(! zero.getColor().equals(one.getColor()) && ! one.getColor().equals(two.getNumber()))
                     {
                         same ++;
                      }
                    
                      if(! zero.pattern().equals(one.pattern()) && ! one.pattern().equals(two.pattern()))
                       {
                           same ++;
                        }
                       if(zero.shape().equals(one.shape()) && one.shape().equals(two.shape()))
                        {
                            same ++;
                        }
                        if(same >= 3)
                        {
                          System.out.println("This is a set you win");
                      }
                              
                
                }
        
        
        
        }


        Card Class



        Code:
        public class Card
        {
            public String number;        
            public String color;   
            public String pattern;
            public String shape;
            
             /**
              * a deck of cards 
              * @param number of objects on cards
              * @param color of shape and pattern
              * @param what type of pattern
              * @param what type of shape
              */
            public Card(String number, String color, String pattern, String shape)
            {
                this.number = number;
                this.color = color;
                this. pattern = pattern;
                this.shape = shape;   
            }
            
            /**
             * number of objects
             * only 1-3
             */
            public String getNumber()
            {
                
                return number;
            }
            
            /**
             * returns color
             */
             
            public String getColor()
           {
                return color;
            }
            
            /**
             * returns pattern
             */
            public String pattern()
            {
                
                return pattern;
            }
            
            /**
             * returns shape
             */
            public String shape()
            {  
                return shape;
            }
            
            public String toString()
            {
             
              // return Card(String number, String color, String pattern, String shape);
                 StringBuilder theOutput=new StringBuilder();
                 theOutput.append(" number:");
                 theOutput.append(number);
                 theOutput.append(" color:");
                 theOutput.append(color);
                 theOutput.append(" pattern:");
                 theOutput.append(pattern);
                 theOutput.append(" shape:");
                 theOutput.append(shape);
                 theOutput.append(" "); 
               //  System.out.println(theOutput);
                 return theOutput.toString();
                 
            }
            
        }

        Comment

        Working...