📄 shinterface.java
字号:
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/02Overview: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 foreseenin 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 source2. 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 themselves3. 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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -