📄 server.java
字号:
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 + -