Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разработка игры "Территория" (Точки), Java, с нуля 
:(
    Опции темы
Qawra
Дата 31.12.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



есть кнопка , есть класс  для выбора игроком цвета
Код

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

class ColorChooser extends JFrame implements ActionListener 
{
  private Player player;
  
  public void actionPerformed(ActionEvent e) {
    // Args are parent component, title, initial color
    Color color
      = JColorChooser.showDialog(this,"Choose your color",
                                                  player.getColor());
    if (color != null) {
      player.setColor(color);
    }
  }
}
 и есть класс игрок .
При нажатии кнопки должен выходить диалог выбора цвета  для игрока .
Я думала что достаточно при нажатии кнопки 
Код

if(e.getSource().equals(firstPlayerButton))
{ Player  first = new Player(1); 
}

 создать  игрока из конструктора класса Игрок  который уже выберет себе цвет но не знаю как этот конструктор прописать  что-бы он выбирал цвет .
Мой конструктор видимо в принципе ошибочный.Он ничего не выбирает поэтому я его здесь и не отображаю . 

PM MAIL   Вверх
Rpahut
Дата 31.12.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 5
Всего: 7



Если цвет выбирается в момент создания игрока, то:
Код

class ColorChooser extends JFrame implements ActionListener 
{
  // private Player player; // класс работает с Цветом, а не с Игроком
  // private Color color; // сохранять цвет, впрочем, тоже не обязательно
  
  // просим пользователя выбрать цвет...
  public Color ShowChooser(Color defaultColor) {
    // ...и возвращаем его
    return JColorChooser.showDialog(this, "Choose your color",  defaultColor);
  }
}


В конструкторе класса Игрок:
Код

  // ОБЯЗАТЕЛЬНО нужно сначала назначить игроку какой-то уникальный цвет
  // иначе после отказа пользователя выбрать цвет, игрок будет рисоваться черным
  // (?) насчет черного не уверен, но ничего хорошего точно не выйдет
  ColorChooser cchooser;
  Color tmpcolor = cchooser.ShowChooser(color); // параметр color - цвет игрока по умолчанию
  if(tmpcolor != null) color = tmpcolor; // меняем цвет, только если получили обратно не-null


Добавлено @ 18:59
Если цвет хочется менять во время игры, то:
1. Создаем кнопки или пункты меню "Поменять цвет Игрока1" "Поменять цвет Игрока2"
2. Клеим их к основному окну
3. В класс Игрок добавляем метод смены цвета:
Код

public void ChangeColor() {
  ColorChooser cchooser;
  Color tmpcolor = cchooser.ShowChooser(color); // параметр color - текущий цвет игрока
  if(tmpcolor != null) color = tmpcolor; // меняем цвет, только если получили обратно не-null
}

4. В основном окне отслеживаем нажатие кнопок (или выбор пункта меню) и вызываем метод ChangeColor() соответствующего игрока.


ЗЫ
С Праздником!

Это сообщение отредактировал(а) Rpahut - 31.12.2008, 19:03
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 1.1.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



C Наступившим ...и ещё с наступающими !
получился у меня такой синтакс на кнопке
Код

if (e.getSource().equals(firstPlayerButton)) 
    {  
         Color playerColor  = Color.blue;
          Player first= new Player(1);
      }


такой ColorChooser
Код

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

class ColorChooser extends JFrame implements ActionListener 
{
  
 
  public Color ShowChooser(Color defaultColor) {
      
    return JColorChooser.showDialog(this, "Choose your color",  defaultColor);
  }
  
   public void actionPerformed(ActionEvent e) {
    
  }
}



проблема сейчас с игроком
Код

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

public class Player 
 {
  private Color playerColor;
  private  ColorChooser cchooser;
  private int orderOfPlayers ;
  
  public Player(int orderOfPlayers) // constructor 
  {    
      this.orderOfPlayers=orderOfPlayers;
      
     
     this.playerColor = this.cchooser.ShowChooser(Color playerColor ); 
                                                  
     if(tmpcolor != null) 
     playercolor = tmpcolor;                     
                                           

    }
 }



на строчке
 this.playerColor = this.cchooser.ShowChooser(Color playerColor ); 
компайлер ругается что ему нужна ещё  ")" 
Я пробовала различные варианты написания , но ему всё равно нужна ещё одна скобка.
PM MAIL   Вверх
Rpahut
Дата 1.1.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 5
Всего: 7



Код

... .ShowChooser(playerColor);


И еще:

Код

if (e.getSource().equals(firstPlayerButton)) 
    {  
          Player first= new Player(1, Color.blue); // передаем цвет
      }

Код

public Player(int orderOfPlayers, Color color) // constructor 
  {    
      this.orderOfPlayers=orderOfPlayers;
      this.playerColor=color; // принимаем цвет

      // кстати, переменную playerColor удобнее назвать просто color
      // потому как  переменная color класса Player может означать только цвет игрока
      // уточнять что это именно playerColor не требуется
      // можно сэкономить несколько букв =Ъ
      
      // не забываем - возвращаемый цвет сначала кладем во временную переменную
      Color tmpcolor = this.cchooser.ShowChooser(playerColor);
      // слово this в предыдущей строчке можно убрать
      if(tmpcolor != null) playerСolor = tmpcolor;
      /* Или без временной переменной, тогда вот так:
      playerColor = cchooser.ShowChooser(Color playerColor );
      if(playerColor==null) playerColor = color; // если не выбран цвет - присваиваем цвет по умолчанию
      */
      /*
      Или - еще лучше - вставить эту проверку в метод ShowChooser(). Т.е. если showDialog возвращает
      null, ShowChooser() должен вернуть defaultColor.
      Тогда здесь можно будет просто написать
      playerColor = cchooser.ShowChooser(playerColor );
      */
    }

--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 3.1.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



почему-то компайлер хочет ещё одну круглую скобку. Видимо ему что-то другое не нравится в этом варианте конструктора 
Код

 public Player(int orderOfPlayers,Color color ) 
  {    
      this.orderOfPlayers=orderOfPlayers;
      this.playerColor = color; 
      
      playerColor = cchooser.ShowChooser(Color playerColor );
      if(playerColor==null)
      {playerColor = color;
        }
}

но пишет он что нужна ещё одна круглая скобка в строчке playerColor = cchooser.ShowChooser(Color playerColor );
Я уже видела   "лишнии" с моей точки зрения  круглые скобки в примерах с Java кодом , но как и почему их ставят - не знаю. Они бывают не парные !!! и откуда они берутся не понятно . В данном случае я попробовала поставить лишнию скобку - компайлер  всё равно пишет что скобки не хватает .Значит дело не в ней а в чём то другом ...
PM MAIL   Вверх
Rpahut
Дата 3.1.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 5
Всего: 7



Ваша ошибка тут:
playerColor = cchooser.ShowChooser( smile Color smile  playerColor);

Цитата

Я уже видела   "лишнии" с моей точки зрения  круглые скобки в примерах с Java кодом

Скобки, кавычки и прочие знаки, используемые для отделения части текста, всегда парные - одна указывает начало куска, вторая конец.
При большом нагромождении скобок бывает трудно определить на глаз, все ли в коде правильно. Небольшие куски кода часто пишутся "из головы" и не проверяются на корректность - так что там могут быть и ошибки.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 4.1.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



Вы правы .. Это конечно объест класса Color но в данном случае он используется как аргумент ... Перестраховалась я  smile 
Теперь всё скомпилировалось но при нажатии на кнопку компайлер как ни странно  находит кучу exceptions типа java.lang.NullPointerException .
Код

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Player.<init>(Player.java:16)
    at Window.mouseClicked(Window.java:65)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
    at java.awt.Component.processMouseEvent(Component.java:6044)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5806)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4413)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2440)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Player.<init>(Player.java:16)
    at Window.mouseClicked(Window.java:62)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
    at java.awt.Component.processMouseEvent(Component.java:6044)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5806)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4413)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2440)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Player.<init>(Player.java:16)
    at Window.mouseClicked(Window.java:65)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
    at java.awt.Component.processMouseEvent(Component.java:6044)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5806)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4413)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2440)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Player.<init>(Player.java:16)
    at Window.mouseClicked(Window.java:62)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
    at java.awt.Component.processMouseEvent(Component.java:6044)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5806)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4413)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3995)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2440)
    at java.awt.Component.dispatchEvent(Component.java:4243)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


 Нам показывали exceptions которые возникают при вводе данных . А  здесь мы пока ещё ничего не  вводили .. Я что-то неправильно импортировала ?
PM MAIL   Вверх
arilou
Дата 5.1.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Видимо ошибка вот тут

Цитата

  at Player.<init>(Player.java:16)


т.е. в 16 строке в файле Player.java. Судя по всему, член класса

Цитата

private  ColorChooser cchooser;


нигде не инициализируется, т.е. ему ничего не присваивается, поэтому происходит java.lang.NullPointerException smile 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Qawra
Дата 5.1.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



private  ColorChooser cchooser  был инициализирован но ему действительно ничего не присваивалось
Код

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

public class Player 
 {
  private Color playerColor;
  private  ColorChooser cchooser;
  private int orderOfPlayers ;
  
  public Player(int orderOfPlayers,Color color ) // constructor 
  {    
      this.orderOfPlayers=orderOfPlayers;
      this.playerColor = color; 
      
      playerColor = cchooser.ShowChooser( playerColor );
      if(playerColor==null)
      {playerColor = color;
        }
    }
 }
 
Надо   было  видимо создать обьект класса 
ColorChooser cchooser = new ColorChooser (); Только что ему присваивать как цвет если сразу у двух игроков есть предустановленные цвета  . .. null видимо ..

Ничего присваивать оказалось не нужно .Просто оставить пустые  скобочки и всё работает ! 

Это сообщение отредактировал(а) Qawra - 5.1.2009, 13:55
PM MAIL   Вверх
arilou
Дата 5.1.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 6
Всего: 61



Qawra, 
Цитата

нигде не инициализируется


это и значит, что "ничего не присваивалось"  smile по крайней мере, в твоем коде я не нашел.
Цитата(Qawra @  5.1.2009,  13:50 Найти цитируемый пост)
Ничего присваивать оказалось не нужно .Просто оставить пустые  скобочки и всё работает ! 

ничего не понял, ну да ладно.

Цитата

  if(playerColor==null)
      {playerColor = color;
        }


также, вызывает сомнение этот код. Что ты им хотела сказать? 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Rpahut
Дата 5.1.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 5
Всего: 7



Цитата(arilou @ 5.1.2009,  15:48)
Цитата

  if(playerColor==null)
      {playerColor = color;
        }


также, вызывает сомнение этот код. Что ты им хотела сказать?

Здесь если cchooser.ShowChooser(playerColor) возвращает null, игроку присваивается цвет по умолчанию.

Код

java.lang.NullPointerException

И это при том, что в яве указателей нету smile ...

ColorChooser не нужно делать членом класса, потому как после выполнения конструктора класса Player он уже не будет нужен.
Лучше создать его там где он используется:
Код

  public Player(int orderOfPlayers,Color color ) // constructor 
  {    
      this.orderOfPlayers=orderOfPlayers;
      //this.playerColor = color; 
      
      ColorChooser cchooser = new ColorChooser(); //<----
      playerColor = cchooser.ShowChooser(color);
      if(playerColor==null)
      {playerColor = color;
        }
    }

--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 5.1.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



 да.. так оно тоже работает . А когда мы отключаем 
//this.playerColor = color;  то как  быть с  цветом для игрока заданным по умолчанию ? Мы ведь с ним теперь не работаем в конструкторе .
Я правда не могу это сейчас практически проверить .
Попробовать нарисовать точки без выбора цвета игрока  пока нечем .Нужен отдельный класс Points где точки будут рисоваться по очереди цветами игроков и только в углах клеток решётки . Вызывается решётка кодом на кнопке 
Код

if (e.getSource().equals(startButton)) 
    {new Grids("Points", 800, 800, 20, 20).setVisible(true);

есть по умолчанию  два цвета для игроков red и blue  . Но ведь если игрок не станет выбирать цвет то он не запустит  конструктор и цвета по умолчанию тоже не будет .. Хотелось бы написать 
Код

public void mouseClicked(MouseEvent e) {
    if (e.getSource().equals(startButton)) 
    {new Grids("Points", 800, 800, 20, 20).setVisible(true);
       Player first= new Player(1, Color.blue); 
       Player second = new Player(2,Color.red);  

    } else if (e.getSource().equals(firstPlayerButton)) 
    {  Player first= new Player(1, Color.blue);
              
    } else if (e.getSource().equals(secondPlayerButton)) 
    {  Player second = new Player(2,Color.red);  
   } 
  }   
 Но тогда игроку никогда не выбрать себе цвет smile
Как при нажатии кнопки старт проверить что были нажаты firstPlayerButton и
secondPlayerButton ? 
PM MAIL   Вверх
Rpahut
Дата 5.1.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 5
Всего: 7



Цитата

А когда мы отключаем 
//this.playerColor = color;  то как  быть с  цветом для игрока заданным по умолчанию ?


Цвет по умолчанию мы передаем в ColorChooser:
playerColor = cchooser.ShowChooser(color);
так что либо пользователь изменит и выберет цвет - тогда его мы присвоим игроку,
либо пользователь откажется от выбора - тогда срабатывает проверка на null и цвет по умолчанию записывается в playerColor.

Конструктор вызывается автоматически при создании экземпляра объекта.
Код

Player first= new Player(1, Color.blue);
// создается новый экземпляр Player
// сам собой вызывается метод Player() этого экземпляра

Вручную конструкторы вызывать не стоит. Они существуют для инициализации объектов при создании - в случае класса Player для инициализации его переменных playerColor и orderOfPlayers.

Цитата

Хотелось бы написать...

Так у вас при нажатии кнопки Старт создаются оба игрока, т.е. для каждого из них будет выполнен конструктор, а значит два раза на экране появится ColorChooser с предложением поменять цвет. Вполне приемлимый вариант, только firstPlayerButton и secondPlayerButton в таком случае можно убрать.

Если вы желаете выбирать цвет для игроков перед началом игры, нужно:
1. При нажатии кнопок firstPlayerButton и secondPlayerButton показывать ColorChooser, запоминать выбранный цвет.
2. При нажатии кнопки Start создавать Игроков и передавать им (их конструкторам) цвета.
3. В конструкторе класса Player в таком случае ColorChooser показывать не нужно, просто записываем полученный цвет в playerColor.
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Qawra
Дата 6.1.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



что бы изменить код на кнопках мне пришлось дополнительно  декларировать в этом классе  две переменные 
Код
private Color playerColor;
  private  ColorChooser cchooser = new ColorChooser ();
 Код на кнопках теперь выглядит так 
Код

if (e.getSource().equals(startButton)) 
    {new Grids("Points", 800, 800, 20, 20).setVisible(true);
        Player first= new Player(1, playerColor);
        Player second = new Player(2,playerColor);  
        
    } else if (e.getSource().equals(firstPlayerButton)) 
    {  playerColor = cchooser.ShowChooser( playerColor );
      if(playerColor==null)
      {playerColor = Color.blue;
        }
              
    } else if (e.getSource().equals(secondPlayerButton)) 
    { playerColor = cchooser.ShowChooser( playerColor );
      if(playerColor==null)
      {playerColor = Color.red;
        }  
    } 
    }

Класс  Player совсем укоротился и выглядит так 
Код

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

public class Player 
 {
  private Color playerColor;
  private int orderOfPlayers ;
  
  public Player(int orderOfPlayers,Color color ) // constructor 
  {    
      this.orderOfPlayers=orderOfPlayers;
      this.playerColor = color;   
    }
 }



переменную private Color playerColor; пришлось прописать дважды в двух разных классах , иначе не компелировалось . А что будет если игрок сразу нажмёт кнопку старт ? У него не будет предустановленного цвета ? Может быть приравнять в начале класса private Color playerColor = Color.white ;
и на кнопке старт сделать проверку playerColor.Если он всё ещё white значит игроки отказываются выбирать цвет и мы им назначим цвет по умолчанию прямо здесь на кнопке старт ... сейчас  пытаюсь сообразить как построить класс Points  что-бы проверить каким цветом будет рисоваться .
Пока только сам процесс рисования скомпоновался. 
Код

import javax.swing.*;
import java.awt.*;
import java.awt.geom.Point2D;

class DrawablePoint extends Component{

    private Color playerColor;
    private int radius =6;

    DrawablePoint(Color playerColor, int radius) {
        this.playerColor = playerColor ;
        this.radius = radius;
    }

    private void   drawCircle(int x, int y, int radius, Graphics g)
    {
    g.drawOval(x - radius, y - radius, radius*2, radius*2);
   }

    public int getRadius() {
        return radius;
    }

    public void setRadius(int radius) {
        this.radius = radius;
    }
}


Там самый ужас что надо ставить точки только в углах решётки . Причем нужен небольшой зазор в координатах иначе человек должен будет " целится"
в определённый пиксель..
Решётка в двух классах выглядит так 
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class GridsCanvas extends Canvas {

    int rows;
    int cols;

    GridsCanvas(int r, int c) {
        rows = r;
        cols = c;
    }

    public void paint(Graphics g) {
        int i;
        int width = getSize().width;
        int height = getSize().height;
        // draw the rows
        int rowHt = height / (rows);
        for (i = 0; i < rows; i++)
            g.drawLine(0, i * rowHt, width, i * rowHt);
        // draw the columns
        int rowWid = width / (cols);
        for (i = 0; i < cols; i++)
            g.drawLine(i * rowWid, 0, i * rowWid, height);
    }
}

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class Grids extends Frame {

    Grids(String title, int w, int h, int rows, int cols) // constractor
    {
        setTitle(title);
        // Now create a Canvas and add it to the Frame.
        GridsCanvas canvas = new GridsCanvas(rows, cols);
        canvas.setSize(w, h);

        add(canvas);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                int exitCode = JOptionPane.showConfirmDialog(Grids.this, "Exit " + getTitle() + "?", "Confirm exit", JOptionPane.YES_NO_OPTION);
                if (exitCode == JOptionPane.OK_OPTION) {
                    System.exit(0);
                }
            }
        });
        pack();

        //Set this windown in the center
        setLocationRelativeTo(null);

        // Set it not resizable
        setResizable(false);
    }    
}



Это сообщение отредактировал(а) Qawra - 6.1.2009, 16:37
PM MAIL   Вверх
Qawra
Дата 6.1.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 188
Регистрация: 6.3.2007

Репутация: 3
Всего: 4



Извините что вопрос про решётку не выделила в отдельную тему   smile

Это сообщение отредактировал(а) Qawra - 6.1.2009, 16:43
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0671 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.