2014-02-12 5 views
0

Я только что начал Java неделю назад и закончил свою первую программу для блэкджека. Я хочу улучшить его, используя Java swing (ImageIcon), чтобы каждый раз, когда я рисую карту, скажем, туз, на самом деле он отображает туз как изображение на экране или мою текущую руку. Я написал эту программу, которая отображает карты я хочу:Java blackjack swing gui ImageIcon

import java.awt.FlowLayout; 
import javax.swing.*; 

public class TenCards extends JFrame { 

    public TenCards() { 

     ImageIcon[] images = new ImageIcon[10]; 
     // Saved the card images as 1,2,3...10.gif in my package 
     // looped them into the images list 
     for (int i = 1; i < images.length; i++) { 
      images[i] = new ImageIcon((getClass().getResource(i + ".gif"))); 

      // testing by displaying 7,8 and 9 cards 
     } 
     setLayout(new FlowLayout(1, 1, 1)); 
     add(new JLabel(images[7])); 
     add(new JLabel(images[8])); 
     add(new JLabel(images[9])); 

    } 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     JFrame frame = new TenCards(); 
     frame.setTitle("Testing!"); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

Теперь мой вопрос, учитывая у меня есть класс блэкджек или программу в другом файле, как я объединить оба класса, так что я могу использовать все эти изображения в моей программе для блэкджека? Я пытался копировать наклеивая мою программу TenCards в блэкджек один без толку :(Если кто-нибудь может одолжить мне руку или указать меня к следующему шагу, я очень ценю это.


EDIT I теперь включены мою программу блэкджек и удалил другой, потому что StackOverflow не будет принимать оба вместе взятые, потому что было слишком много кода.

import java.util.ArrayList; 
import java.util.Scanner; 

import javax.swing.JLabel; 

public class myblackjack { 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
    Scanner sc = new Scanner(System.in); 

    ArrayList<Integer> player = new ArrayList<Integer>(); 
    ArrayList<Integer> dealer = new ArrayList<Integer>(); 
    ArrayList<Integer> cards = new ArrayList<Integer>(); 

    // Ace is 1 as per Amos' instructions 
    for (int i =1; i <= 10; i++){ 
     cards.add(i);} 
    // The 3 face cards representing 10 
    for (int z = 0; z <= 2; z++){ 
     cards.add(10);} 


    player.add(cards.get((int) (Math.random()*12))); 
    player.add(cards.get((int) (Math.random()*12))); 
    dealer.add(cards.get((int) (Math.random()*12))); 
    dealer.add(cards.get((int) (Math.random()*12))); 
    System.out.println("Your cards: "+player); 
    boolean moreplayer = true, morecomputer = true; 
    System.out.println("Hit 0 to stop, 1 for another card"); 
    int s1 = sc.nextInt(); 
    while (moreplayer || morecomputer){ 
     int dealersum = 0, playersum = 0 ; 

     for (int p = 0; p<dealer.size(); p++){ 
      dealersum = dealersum + dealer.get(p); 
     } if (dealersum<15){ 
      morecomputer = true; 
      dealer.add(cards.get((int) (Math.random()*12))); 
       dealersum = dealersum + dealer.get(2); 
      }else{ morecomputer = false; 

     }if (s1 == 1){ 

      moreplayer = true; 
      player.add(cards.get((int) (Math.random()*12))); 
      for (int b = 0; b<player.size(); b++){ 
       playersum = playersum + player.get(b); 


      } System.out.println("Your cards: "+player); 
      System.out.println("Hit 0 to stop, 1 for another card"); 
      s1 = sc.nextInt(); 
      }else if (s1 == 0){ 
       moreplayer = false; 
       for (int b = 0; b<player.size(); b++){ 
        playersum = playersum + player.get(b); 


       }}if (playersum>21 && (moreplayer || morecomputer)){ 
       moreplayer = false; morecomputer = false; 
       System.out.println(dealer + "dealer"); 
       System.out.println("You've gone bust player, computer wins!"); 

      }if (dealersum>21 && (moreplayer || morecomputer)){ 
       moreplayer = false; morecomputer = false; 
       System.out.println(dealer + "dealer"); 
       System.out.println(player + "player"); 
       System.out.println("Computer has gone bust, player wins!"); 

      }if (playersum>dealersum && (!morecomputer && !moreplayer) && (dealersum<=21 && playersum <=21)){ 
       System.out.println("Player wins!"); 
       System.out.println(dealer + "dealer"); 


       moreplayer = false; morecomputer = false; 
      }if (dealersum>playersum && (!morecomputer && !moreplayer) && (dealersum<=21 && playersum <=21)){ 
       System.out.println("Dealer wins"); 
       System.out.println(dealer + "dealer"); 

       moreplayer = false; morecomputer = false; 
      } if ((dealersum == playersum) && (!morecomputer && !moreplayer) && (dealersum<=21 && playersum <=21)){ 
       System.out.println("TIE!"); 
       System.out.println(dealer + "dealer"); 

       moreplayer = false; morecomputer = false; 


     } 
      sc.close() ; 

    } 

    } 
    }/** I didn't consider suits, ace is value 1 and all 3 face cards are worth 10 points */ 

приветы, M

+0

До тех пор, пока ваш класс tencards находится в том же пакете, что и ваш логический класс и другой сортированный класс, вы должны легко их комбинировать. Скорее всего, так как я бы предположил, что у вас есть только пара классов, у вас, вероятно, есть только пакет defualt ... при этом вам нужно просто создать экземпляр вашего изображения, когда будет нарисована ваша новая карта. –

+0

Спасибо BigT! – spacesick

+0

Какова будет команда создания экземпляра для изображения? – spacesick

ответ

1

«Как объединить оба класса, так что я могу использовать все эти изображения вещи в моей блэкджек программе?»

Это не очень хорошая идея, чтобы попытаться объединить программу с графическим интерфейсом с помощью программы консоли (ваш первый фрагмент кода - программа GUI, а вторая - консольная программа).

Чтобы лучше изучить программирование GUI с помощью Swing, см. Creating a GUI with Swing. Несколько основных разделов, на которых я бы остановился, - это

  1. Using Swing Components Здесь вы найдете все доступные для вас компоненты.
  2. Writing Event Listeners как свинг (все GUI рамки для этого вопроса) управляются событиями, а это означает одно событие, такие как кнопки, чтобы нарисовать карту нажат, вызывает ярлык с карты изображения, которые будут добавлены к игроку руки
  3. Laying out Components within a Container где вы узнаете, как использовать разные менеджеры макетов, чтобы придать вашему интерфейсу чистый структурированный вид со всеми вашими компонентами.

Вопросы, которые вы задаете, - это очень широкий вопрос .. и только на самом деле можно ответить, если кто-то потратит время на изучение всей вашей программы и потратит время на размышления о том, как реорганизовать всю программу. У большинства из нас нет роскоши того времени, или для того, чтобы быть тупым, просто все равно, чтобы вложить эти усилия. Преобразование консольной программы в программу GUI - непростая задача.

Итак, я предлагаю вам потратить время, чтобы изучить Свинг, пройдя связанные с ним учебные пособия. Тогда, если у вас есть конкретный вопрос, например «Почему моя кнопка не рисует карту?», мы можем с уверенностью помочь вам, учитывая, что вы предоставили необходимый код, показанное усилие и подробное описание и понимание проблемы.

Удачи!

+0

Спасибо вам, что-то вроде вас! – spacesick

1

Короткий ответ ...не ...

Вы переходите от парадигм. Я имею в виду, что вы оригинальная программа с использованием командной строки/процедурной ведомой парадигмы, которые происходят в четко определенном порядке), где, когда вы пытаетесь перейти к парадигме, основанной на графическом интерфейсе/событии.

В среде, управляемой событиями, все может случиться в любом порядке и вам нужно быть готовым к ее обработке.

Одним из наиболее важных сдвигов в парадигме, с которыми вы столкнетесь, является разделение вашей модели/виртуального представления игры с физическим/пользовательским представлением игры.

Это важная концепция, так как она не только упростит вашу программу, но и изменится.

Это лучше всего описано в Model-View-Controller и свинг реализует эту концепцию (не затягивая)

Потратьте время, чтобы прочитать Creating a GUI With JFC/Swing, разработать модель (игры) и понять, какие вещи вам нужно будет сообщить вид и какие вещи контроллер может изменить об игре.