⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matchdialog.java

📁 ErGo是一个很早的Java通用围棋服务器(IGS/NNGS)客户端程序。有全部源码和文档
💻 JAVA
字号:
package ergo.ui;

// $Id: MatchDialog.java,v 1.3 1999/08/13 01:20:09 sigue Exp $

/*
 *  Copyright (C) 1999  Carl L. Gay and Antranig M. Basman.
 *  See the file copyright.txt, distributed with this software,
 *  for further information.
 */

import ergo.server.*;
import ergo.util.*;
import ergo.logic.*;
import ergo.*;

import java.awt.*;
import java.awt.event.*;

/**
 * For entering all the parameters for a server game.
 */
public class MatchDialog extends ErgoDialog implements ActionListener {
  private boolean done = false;
  private ServerConnection conn = null;

  private Panel topPanel = new Panel();
  private Panel bottomPanel = new Panel();

  private TextField opponentName = new TextField(15);
  private TextField komi = new TextField("5.5", 5);
  private TextField initialTime = new TextField("15", 5);
  private TextField byoTime = new TextField("15", 5);
  private TextField size = new TextField("19", 5);
  private Button doneButton = new Button("Done");
  private Button cancelButton = new Button("Cancel");
  private Button declineButton = new Button("Decline");
  private Choice myColor = new Choice();
  private Choice handicapChooser = new Choice();
  private String username = null;

  MatchDialog (Frame frame, boolean enableDecline) {
    super(frame, "Match", false);

    doneButton.addActionListener(this);
    cancelButton.addActionListener(this);
    if (enableDecline)
      declineButton.addActionListener(this);

    myColor.addItem("Black");
    myColor.addItem("White");

    for (int i = 0; i <= 9; i++)
      handicapChooser.addItem((i == 0) ? "None" : "" + i);
    handicapChooser.select(0);


    GridBagLayout gridbag = new GridBagLayout();
    GridBagConstraints c = new GridBagConstraints();
    Label label;
    topPanel.setLayout(gridbag);
    
    // opponent row
    label = new Label("Opponent Name:");
    c.anchor = GridBagConstraints.EAST;
    c.gridwidth = 2;
    c.gridx = 0;
    c.gridy = 0;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    c.anchor = GridBagConstraints.WEST;
    c.gridx = GridBagConstraints.RELATIVE;
    gridbag.setConstraints(opponentName, c);
    topPanel.add(opponentName);

    // my color row
    label = new Label("My color:");
    c.anchor = GridBagConstraints.EAST;
    c.gridx = 0;
    c.gridy = 1;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    c.anchor = GridBagConstraints.WEST;
    c.gridx = GridBagConstraints.RELATIVE;
    c.gridwidth = 1;
    gridbag.setConstraints(myColor, c);
    topPanel.add(myColor);

    // board size row
    label = new Label("Board Size:");
    c.gridwidth = 2;
    c.anchor = GridBagConstraints.EAST;
    c.gridx = 0;
    c.gridy = 2;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    c.anchor = GridBagConstraints.WEST;
    c.gridx = GridBagConstraints.RELATIVE;
    c.gridwidth = 1;
    gridbag.setConstraints(size, c);
    topPanel.add(size);

    // initial time row
    label = new Label("Initial Time:");
    c.anchor = GridBagConstraints.EAST;
    c.gridx = 0;
    c.gridy = 3;
    c.gridwidth = 2;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    c.anchor = GridBagConstraints.WEST;
    c.gridx = GridBagConstraints.RELATIVE;
    c.gridwidth = 1;
    gridbag.setConstraints(initialTime, c);
    topPanel.add(initialTime);
    label = new Label("minutes");
    c.gridwidth = 2;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    
    // byo-yomi time row
    label = new Label("Byo-yomi:");
    c.anchor = GridBagConstraints.EAST;
    c.gridx = 0;
    c.gridy = 4;
    c.gridwidth = 2;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    c.anchor = GridBagConstraints.WEST;
    c.gridx = GridBagConstraints.RELATIVE;
    c.gridwidth = 1;
    gridbag.setConstraints(byoTime, c);
    topPanel.add(byoTime);
    label = new Label("minutes");
    c.gridwidth = 2;
    gridbag.setConstraints(label, c);
    topPanel.add(label);

    // Komi row
    label = new Label("Komi:");
    c.anchor = GridBagConstraints.EAST;
    c.gridx = 0;
    c.gridy = 5;
    c.gridwidth = 2;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    c.anchor = GridBagConstraints.WEST;
    c.gridx = GridBagConstraints.RELATIVE;
    c.gridwidth = 1;
    gridbag.setConstraints(komi, c);
    topPanel.add(komi);
    komi.setEnabled(false);

    // handicap row
    label = new Label("Handicap:");
    c.anchor = GridBagConstraints.EAST;
    c.gridx = 0;
    c.gridy = 6;
    c.gridwidth = 2;
    gridbag.setConstraints(label, c);
    topPanel.add(label);
    c.anchor = GridBagConstraints.WEST;
    c.gridx = GridBagConstraints.RELATIVE;
    c.gridwidth = 1;
    gridbag.setConstraints(handicapChooser, c);
    topPanel.add(handicapChooser);
    handicapChooser.setEnabled(false);

    add("North", topPanel);
    
    // Set up the bottom panel (Done and Cancel buttons).
    bottomPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
    bottomPanel.add(doneButton);
    if (enableDecline)
      bottomPanel.add(declineButton);
    bottomPanel.add(cancelButton);
    add("South", bottomPanel);
    
    //Initialize this dialog to its preferred size.
    if (Util.isWindows())
      setSize(350, 220);		// pack() doesn't work in Java for Windows?
    else
      pack();
  }

  // Which field will get the initial focus when the dialog
  // is opened.  This overrides the method in ErgoDialog.
  public Component getInitialFocus () {
    if (opponentName.getText().trim().equals(""))
      return opponentName;
    else
      return doneButton;
  }

  public String matchCommandString () {
    return ("match " + opponentName() + " " + myColor() + " "
	    + boardSize() + " " + initialTime() + " " + byoTime());
  }

  public String cgobanTellString () {
    return ("tell " + opponentName()
	    + " CLIENT: <Ergo " + Ergo.version()
	    + "> match " + username 
	    + " wants handicap " + handicap()
	    + ", komi " + komi());
  }

  public void open (ServerConnection sc) {
    open(sc, null, null, null, null, null, null);
  }

  public void open (ServerConnection sc, String username, String opponent,
		    String color, String boardsize, String time,
		    String byotime) {
    conn = sc;
    this.username = username;
    if (opponent != null) 
      opponentName.setText(opponent);
    if (color != null) {
      String c = color.trim();
      myColor.select(c.equals("B") ? "Black" : "White");
    }
    if (boardsize != null) {
      String bs = boardsize.trim();
      size.setText(bs);
    }
    if (time != null)     initialTime.setText(time.trim());
    if (byotime != null)  byoTime.setText(byotime.trim());

    open();
  }

  private String opponentName () {
    String text = opponentName.getText().trim();
    return text.equals("") ? "?" : text;
  }

  public void setOpponent (String oppname) {
    opponentName.setText(oppname);
  }

  private String myColor () {
    return myColor.getSelectedItem().substring(0, 1);
  }

  private String komi () {
    String s = komi.getText().trim();
    return (s.equals("") ? "5.5" : s);
  }

  // This is needed to handle komi requests sent by Ergo and
  // CGoban in a tell which arrives after the match request.
  public void setKomi (String k) {
    if (k != null)
      komi.setText(k);
  }

  private String handicap () {
    String hcap = handicapChooser.getSelectedItem();
    return (hcap.equalsIgnoreCase("None") ? "0" : hcap);
  }

  public void setHandicap (int hcap) {
    handicapChooser.select(hcap);
  }

  private String boardSize () {
    return size.getText().trim();
  }

  private String initialTime () {
    String s = initialTime.getText().trim();
    return s.equals("") ? "20" : s;
  }

  private String byoTime () {
    String s = byoTime.getText().trim();
    return s.equals("") ? "20" : s;
  }

  public void actionPerformed (ActionEvent event) {
    String cmd = event.getActionCommand();
    if ("cancel".equalsIgnoreCase(cmd)) {
      done = true;
      close();
    }
    else if ("done".equalsIgnoreCase(cmd)) {
      done = true;
      close();
      if (conn != null) {
	conn.send(matchCommandString());
	// +++ Don't send this until we finish implementing it.
	// conn.send(cgobanTellString());
      }
    }
    else if ("decline".equalsIgnoreCase(cmd)) {
      done = true;
      close();
      if (conn != null)
	conn.send("decline " + opponentName());
    }
  }

} // end class MatchDialog

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -