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

📄 shinterface.java

📁 一个非常不错的java纸牌游戏源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.net.*;
import javax.swing.JComponent.*;
import java.awt.geom.*;
import java.io.*;

/*-------------------------------
 This is a Shithead(card game) Program

 @Author Sam Cavenagh

 @Date 1/11/02

 Overview:
 I develop this program to extend my java skills and to implement something that to the 
 best of my knowledge had not been done before.  I spend a good few months of my life 
 working on this project and have implemented most of the functionality that I had foreseen
 in my initial plans.  However, Shithead is a very adaptable game and many different versions 
 of it exist.  I have received several emails requesting source code or changes to the 
 program.  I myself feel I have spent enough time on this project and its time to move onto 
 other work (such as uni).  Thus I am making the source code available to all who are brave 
 enough to attempt to improve this program!!

 Important Note:
 I will be the first to admit that the code is not in the best form and large aspect of the 
 program need to be re-architectured, however I do not have time to do this myself but if 
 someone else wants to do it great.  I only have a few requests listed below.

 1.	Any new versions of the program I would like to remain open source
 2.	Improved versions are emailed to me so that can be added to my site for Shithead player 
 that don抰 have the time or skill to implement changes themselves
 3.	I'm still given some form of credit for the program's creation (even if only as a footnote)

 Website: http://home.pacific.net.au/~cavenagh/SH/

 Email: cavenaghweb@hotmail.com

 -------------------------------*/

class SHinterface extends JFrame implements ActionListener,
		MouseMotionListener, MouseListener, WindowListener {

	JLabel image;

	JTextArea msg;

	JPanel panel;

	JTextField input;

	JScrollPane scrollPane;

	int mouseX, mouseY;

	JMenuBar menuBar;

	JMenu menu;

	JMenuItem menuItem;

	JRadioButtonMenuItem rbMenuItem;

	Image cardspic;

	Image back;

	Image backSW;

	Image title;

	Image pointer[] = new Image[4];

	Image burntPic;

	// Graphics buffer stuff
	Graphics g;

	BufferedImage offscreen;

	ImageIcon imageI;

	// for smaller screens
	Image offscreen2;

	Graphics g2;

	Graphics2D g2d;

	boolean player1 = false; // is 1 player game running

	boolean player2 = false; // is 2 player game running

	boolean myTurn = false; // is it my turn

	boolean imServer = false;

	ServerMessage servermsg = null;

	Message message = null;

	Dealer dealer = null;

	Player player = null;

	Score score;

	String playersName = "unknown";

	Hand hand;

	// Points where to place cards
	Point pointplayer1[] = new Point[3];

	Point pointplayer2[] = new Point[3];

	Point pointplayer3[] = new Point[3];

	Point pointplayer4[] = new Point[3];

	Point centre1;

	Dimension screenSize;

	SHinterface() {

		// Loading Images
		MediaTracker tracker = new MediaTracker(this);// Used to track loading
														// of image
		Toolkit toolkit = Toolkit.getDefaultToolkit();

		// loading images from jar file
		cardspic = toolkit.getImage(this.getClass().getResource("cards.gif"));
		back = toolkit.getImage(this.getClass().getResource("back.gif"));
		backSW = toolkit.getImage(this.getClass().getResource("backSW.gif"));
		title = toolkit.getImage(this.getClass().getResource("SHtitle.jpg"));
		pointer[0] = toolkit.getImage(this.getClass()
				.getResource("pointer.gif"));
		burntPic = toolkit.getImage(this.getClass().getResource("burnt.jpg"));

		tracker.addImage(cardspic, 1);
		tracker.addImage(back, 1);
		tracker.addImage(backSW, 1);
		tracker.addImage(title, 1);
		tracker.addImage(pointer[0], 1);
		tracker.addImage(burntPic, 1);

		try {
			// Waiting until image loaded.
			tracker.waitForAll();
		} catch (InterruptedException e) {
			msg.setText("Load Error " + e);
		}

		pointer[3] = rotatePointer(pointer[0]);
		pointer[2] = rotatePointer(pointer[3]);
		pointer[1] = rotatePointer(pointer[2]);

		offscreen = new BufferedImage(450, 550, BufferedImage.TYPE_3BYTE_BGR);
		g = offscreen.getGraphics();
		g.drawImage(title, -40, 120, this);
		g.setColor(Color.white);
		g.drawLine(0, 450, 450, 450);

		hand = new Hand(this, back, g);

		// screen resolution
		screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		// screenSize.width = 800;

		if (screenSize.width < 1024) {// resizing image if to big for screen
			offscreen2 = new BufferedImage(338, 413,
					BufferedImage.TYPE_3BYTE_BGR);
			// offscreen2 = offscreen;

			g2 = offscreen2.getGraphics();
			g2d = (Graphics2D) g2;
			AffineTransform at = new AffineTransform();
			at.scale(0.75, 0.75);
			// AffineTransform toCenterAt = new AffineTransform();
			// toCenterAt.concatenate(at);
			// toCenterAt.translate(-(r.width/2), -(r.height/2));
			g2d.transform(at);
			g2d.drawImage(offscreen, 0, 0, null);
			// g2.drawImage(offscreen, 0, 0, 338, 413, null);
			// offscreen2 = offscreen.getScaledInstance(338, 413,
			// Image.SCALE_FAST);
			imageI = new ImageIcon(offscreen2);
			// offscreen2 = this.createImage(338, 413);
			// setImageSize(338, 413);
			// repaint();
			// imageI = new ImageIcon(offscreen.getScaledInstance(338, 413,
			// Image.SCALE_SMOOTH));
		} else
			imageI = new ImageIcon(offscreen);

		image = new JLabel(imageI);

		addMouseMotionListener(this);
		addMouseListener(this);
		requestFocus();

		// Construction Menu

		menuBar = new JMenuBar();

		// Build the first menu.
		menu = new JMenu("File");
		menu.setMnemonic(KeyEvent.VK_F);
		menu.getAccessibleContext().setAccessibleDescription(
				"Game Options Can Be Found Here");
		menuBar.add(menu);

		// File group of JMenuItems
		menuItem = new JMenuItem("1 Player", KeyEvent.VK_P);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Start Single Player Game");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("Multi Player Server", KeyEvent.VK_S);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Be the server for a Multi player game");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("Multi Player Client", KeyEvent.VK_C);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Connect to another Multi player Game");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("Close Connections", KeyEvent.VK_L);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Close Game Connection");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("Scoreboard", KeyEvent.VK_B);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Veiw Scoreboard");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("Quit", KeyEvent.VK_Q);
		menuItem.getAccessibleContext().setAccessibleDescription("Quit Game");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		// Build second menu in the menu bar.
		menu = new JMenu("Options");
		menu.getAccessibleContext().setAccessibleDescription("Game Options");
		menuBar.add(menu);

		menuItem = new JMenuItem("Redeal", KeyEvent.VK_R);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Redeal the deck");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("Start Game", KeyEvent.VK_S);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Start game now");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("AI Speed", KeyEvent.VK_A);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"Time it takes for GameAI to make a move");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		// Build 3rd menu in the menu bar.
		menu = new JMenu("About");
		menu.getAccessibleContext().setAccessibleDescription("About the Game");
		menuBar.add(menu);

		menuItem = new JMenuItem("Rules", KeyEvent.VK_R);
		menuItem.getAccessibleContext().setAccessibleDescription("Who to play");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("Home Page", KeyEvent.VK_H);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"View Home Page");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		menuItem = new JMenuItem("About", KeyEvent.VK_A);
		menuItem.getAccessibleContext().setAccessibleDescription(
				"About the Game");
		menuItem.addActionListener(this);
		menu.add(menuItem);

		addWindowListener(this);

		msg = new JTextArea("Welcome to Shithead the card game\n", 4, 20);
		msg.setLineWrap(true);
		msg.setEditable(false);
		msg.setDisabledTextColor(Color.black);

		input = new JTextField();
		input.addActionListener(this);

		scrollPane = new JScrollPane(msg,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		// Testing if images loaded correctly - doesnt need to do this with jar
		// file
		// File f = new File("cards.gif");
		// if (!f.exists() || !f.isFile() || !f.canRead())
		// addMsg("Unable to load file " +f.getAbsolutePath());

		panel = new JPanel();
		GridBagLayout gridbag = new GridBagLayout();
		GridBagConstraints c = new GridBagConstraints();
		panel.setLayout(gridbag);
		c.anchor = GridBagConstraints.WEST;
		c.fill = GridBagConstraints.BOTH;
		panel.setBackground(Color.white);
		getContentPane().add(panel);

		panel.add(menuBar, c);
		c.gridy = 1;
		panel.add(image, c);
		c.gridy = 2;
		panel.add(scrollPane, c);
		c.gridy = 3;
		panel.add(input, c);

		addMsg("Detected Screen Size: " + screenSize.width + "x"
				+ screenSize.height);
		if (screenSize.width < 1024)
			addMsg("For optimal graphics use 1024x768 resolution");

		score = new Score(this);

	}

	public void actionPerformed(ActionEvent event) {
		String label = event.getActionCommand();

		if (label.equals("Quit")) {

			// Closing Sockets on Quiting
			if (servermsg != null)
				servermsg.endConnection();
			if (message != null)
				message.endConnection();
			if (dealer != null)
				dealer.endConnection();
			if (player != null)
				player.endConnection();

			System.exit(0); // terminates the program
		}

⌨️ 快捷键说明

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