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

📄 server.java

📁 用Java编写的扑克牌游戏(含代码)
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package deckofcards;

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

public class Server
    extends JFrame {
  private Player Players[] = new Player[2];
  private boolean player_connect_status[] = new boolean[2],
      player_getcard[] = new boolean[2], player_wagered[] = new boolean[2];
  private ServerSocket server;
  private Card deck[] = new Card[52];
  private int currentCard;
  private int Player1 = 0, Player2 = 1;
  private StringBuffer player_level[] = new StringBuffer[2],
      player_compare_result[] = new StringBuffer[2];
  private int player_score[] = new int[2], player_wager[] = new int[2];
  private float player_winchance[] = new float[2];
  private int card_name[][] = new int[5][2];
  private int UpdateStatus = 0, GetCard = 1, ChangeCard = 2, PeekCard = 3,
      Wager = 4;
  private String faces[] = {
      "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
      "Jack", "Queen", "King", "Ace"};
  private String suits[] = {
      "Diamonds", "Clubs", "Hearts", "Spades"};
  private int face13[][] = {
      {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
  };
  private int suit4[][] = {
      {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
      , {
      0, 0}
  };
  private int cardsum[] = {
      0, 0}
      , cardcomp[][] = {
      {
      -1, -1}
      , {
      -1, -1}
      , {
      -1, -1}
  };
  private double winchance[] = {
      1303566, 1098130, 123586, 54862, 9230, 5190, 3736, 624, 36}; //52张牌的组合里面各种情况出现的次数

  JButton button_server, button_player1_out, button_player2_out,
      button_shutdown;
  JTextField port_textf;
  JLabel port_label;
  JTextArea message_area;
  GridBagLayout gbLayout;
  GridBagConstraints gbConstraints;
  JPanel p;

  public Server() {
    super("游戏服务器");
    for (int i = 0; i < deck.length; i++) {
      deck[i] = new Card(faces[i % 13], suits[i / 13]);
    }
    currentCard = -1;
    for (int i = 0; i < Players.length; i++) {
      player_level[i] = new StringBuffer();
      player_level[i].append("新手");
      player_compare_result[i] = new StringBuffer();
      player_compare_result[i].append("");
      player_score[i] = 1000;
      player_winchance[i] = 100;
      player_wager[i] = 0; //赌注
      for (int j = 0; j < 5; j++) {
        card_name[j][i] = -1;
      }
    }
    player_connect_status[0] = false;
    player_connect_status[1] = false;
    player_getcard[0] = false;
    player_getcard[1] = false;
    player_wagered[0] = false;
    player_wagered[1] = false;
    button_server = new JButton("建立服务器");
    button_server.setBackground(Color.white);
    button_server.setFont(Font.getFont("新宋体"));
    button_player1_out = new JButton("踢除玩家1");
    button_player1_out.setEnabled(false);
    button_player1_out.setBackground(Color.lightGray);
    button_player1_out.setFont(Font.getFont("新宋体"));
    button_player2_out = new JButton("踢除玩家2");
    button_player2_out.setEnabled(false);
    button_player2_out.setBackground(Color.lightGray);
    button_player2_out.setFont(Font.getFont("新宋体"));
    button_shutdown = new JButton("断开连接");
    button_shutdown.setEnabled(false);
    button_shutdown.setBackground(Color.lightGray);
    button_shutdown.setFont(Font.getFont("新宋体"));
    port_textf = new JTextField("1617");
    message_area = new JTextArea(10, 30);
    port_label = new JLabel("<端口>: ");
    port_label.setFont(Font.getFont("新宋体"));

    gbLayout = new GridBagLayout();
    Container c = getContentPane();
    JPanel p = new JPanel();
    p.setLayout(gbLayout);
    gbConstraints = new GridBagConstraints();
    JScrollPane sp = new JScrollPane(p);
    gbConstraints.weightx = 0;
    gbConstraints.weighty = 0;
    gbConstraints.fill = GridBagConstraints.HORIZONTAL;

    addComponent(port_textf, gbLayout, gbConstraints, p, 0, 1, 1, 1);
    addComponent(port_label, gbLayout, gbConstraints, p, 0, 0, 1, 1);
    addComponent(button_server, gbLayout, gbConstraints, p, 0, 2, 1, 1);
    addComponent(button_shutdown, gbLayout, gbConstraints, p, 0, 3, 1, 1);
    addComponent(button_player1_out, gbLayout, gbConstraints, p, 0, 4, 1, 1);
    addComponent(button_player2_out, gbLayout, gbConstraints, p, 0, 5, 1, 1);
    addComponent(message_area, gbLayout, gbConstraints, p, 1, 0, 6, 1);

    c.add(sp);
    setSize(462, 240);
    this.setLocation(250, 150);
    port_textf.setColumns(4);
    message_area.setFocusable(false);
    show();

    button_server.addActionListener(
        new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        if (port_textf.getText().compareTo("") != 0) {
          try {
            server = new ServerSocket(Integer.parseInt(port_textf.getText()), 2);
            message_area.append("Server is opening\n");
            for (int i = 0; i < Players.length; i++) {
              Players[i] = new Player(server.accept(), i);
              Players[i].start();
            }
            button_server.setEnabled(false);
            button_server.setBackground(Color.lightGray);
            button_player1_out.setEnabled(true);
            button_player1_out.setBackground(Color.white);
            button_player2_out.setEnabled(true);
            button_player2_out.setBackground(Color.white);
            button_shutdown.setEnabled(true);
            button_shutdown.setBackground(Color.white);
          }
          catch (IOException E) {}
        }
      }
    }
    );
    /*
        button_shutdown.addActionListener(
            new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            try {
              for (int i = 0; i < Players.length; i++) {
                Players[i].output.writeUTF("ServerShutdown");
                Players[i].input.close();
                Players[i].output.close();
              }
              server.close();
              message_area.append("Server is shut down\n");
              button_server.setEnabled(true);
              button_server.setBackground(Color.white);
              button_player1_out.setEnabled(false);
              button_player1_out.setBackground(Color.lightGray);
              button_player2_out.setEnabled(false);
              button_player2_out.setBackground(Color.lightGray);
              button_shutdown.setEnabled(false);
              button_shutdown.setBackground(Color.lightGray);
            }
            catch (IOException E) {}
          }
        }
        );

        button_player1_out.addActionListener(
            new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            try {
              Players[0].output.writeUTF("ConnectOut");
            }
            catch (IOException E) {}
            player_connect_status[0] = false;
            message_area.append("玩家1失去连接\n");
          }
        }
        );

        button_player2_out.addActionListener(
            new ActionListener() {
          public void actionPerformed(ActionEvent e) {
            try {
              Players[0].output.writeUTF("ConnectOut");
            }
            catch (IOException E) {}
            player_connect_status[0] = false;
            message_area.append("玩家1失去连接\n");
          }
        }
        );
     */
  }

  //添加控件函数addComponent()
  public void addComponent(Component c, GridBagLayout g, GridBagConstraints gc,
                           JPanel p, int row, int column, int width, int height) {
    gc.gridx = column;
    gc.gridy = row;
    gc.gridwidth = width;
    gc.gridheight = height;
    g.setConstraints(c, gc);
    p.add(c);
  }

  //洗牌函数shuffle()
  public void shuffle() {
    currentCard = -1;
    for (int i = 0; i < deck.length; i++) {
      int j = (int) (Math.random() * 52);
      Card temp = deck[i]; // swap
      deck[i] = deck[j]; // the
      deck[j] = temp; // cards
    }
  }

  //比较牌的大小的函数cardCompare()
  public void cardCompare() {
    int comp_result;
    player_compare_result[0] = new StringBuffer();
    player_compare_result[1] = new StringBuffer();
    if (cardcomp[0][Player1] > cardcomp[0][Player2]) {
      comp_result = -1;
    }
    else if (cardcomp[0][Player1] == cardcomp[0][Player2]) {
      if (cardcomp[1][Player1] > cardcomp[1][Player2]) {
        comp_result = -1;
      }
      else if (cardcomp[1][Player1] == cardcomp[1][Player2]) {
        if (cardcomp[2][Player1] > cardcomp[2][Player2]) {
          comp_result = -1;
        }
        else if (cardcomp[2][Player1] == cardcomp[2][Player2]) {
          comp_result = 0;
        }
        else {
          comp_result = 1;
        }
      }
      else {
        comp_result = 1;
      }
    }
    else {
      comp_result = 1;
    }
    switch (comp_result) {
      case -1:
        player_compare_result[0].append("上帝保佑!你赢了!再来一次吗?");
        player_score[0] = player_score[0] + player_wager[0] + player_wager[1];
        player_compare_result[1].append("见鬼!你输了!再来一次吗?");
        break;
      case 0:
        player_compare_result[0].append("什么?竟然是平局?再来一次吗?");
        player_score[0] = player_score[0] + player_wager[0];
        player_compare_result[1].append("什么?竟然是平局?再来一次吗?");
        player_score[1] = player_score[1] + player_wager[1];
        break;
      case 1:
        player_compare_result[1].append("上帝保佑!你赢了!再来一次吗?");
        player_score[1] = player_score[1] + player_wager[0] + player_wager[1];
        player_compare_result[0].append("见鬼!你输了!再来一次吗?");
        break;
      default:
        message_area.append("程序运行错误(compare)!请赶快与程序员联系!\n");
        break;
    }
  }

  //检查是否为顺子的函数shunORnot()
  public int shunORnot(int number) {
    int num = 0;
    for (int i = 0; i < 13; i++) {
      if (face13[i][number] != 1) {
        i = i + num;
        num = 0;
      }
      else {
        num = num + 1;
        if (num == 5) {
          cardcomp[0][number] = 8;
          cardcomp[1][number] = i;
          return 1;
        }
      }
    }
    return 0;
  }

//检查拿到了什么牌的函数count()
  public String count(int number) {
    cardsum[number] = 0;
    cardcomp[0][number] = 0;
    cardcomp[1][number] = 0;
    for (int i = 0; i < 13; i++) {
      if (face13[i][number] == 1) {
        cardsum[number] = cardsum[number] + 0;
        if (cardcomp[0][number] <= 1) {
          cardcomp[0][number] = 1;
          cardcomp[2] = cardcomp[1];
          cardcomp[1][number] = i;
        }
      }
      else if (face13[i][number] == 2) {
        cardsum[number] = cardsum[number] + 3;
        if (cardcomp[0][number] < 3) {
          cardcomp[0][number] = 3;
          cardcomp[1][number] = i;
        }
        else if (cardcomp[0][number] == 3) {
          cardcomp[0][number] = 6;
          cardcomp[2][number] = cardcomp[1][number];
          cardcomp[1][number] = i;

⌨️ 快捷键说明

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