Java开发实战:仿QQ游戏大厅五子棋

您所在的位置:网站首页 java写五子棋 Java开发实战:仿QQ游戏大厅五子棋

Java开发实战:仿QQ游戏大厅五子棋

#Java开发实战:仿QQ游戏大厅五子棋| 来源: 网络整理| 查看: 265

本篇主要讲本科时学习Java时写的一个小游戏。五子棋对于锻炼Java初级编程很有帮助。

素材搜集与设计 棋盘

五子棋的游戏算法就不说了,当时写的比较一般。这里讲一讲游戏设计吧。首先是棋盘,我花了一早上用PPT画了个棋盘,主要是不会PS啊。效果如图:

蓝色棋盘

棕色棋盘

默认棋盘

这里写图片描述

这里写图片描述

这里写图片描述

画了各种颜色的棋盘,最后再画个棋子:

这里写图片描述

以及棋子选框:

这里写图片描述

大功告成!

玩家形象

我觉得QQ大厅的形象挺好看的,就扒下来了一些:

这里写图片描述

这里写图片描述

哈哈!

声音

从百度里找了几段短的片段。

聊天窗口

为了防止无聊,从好多人的QQ签名上摘了一些话下来。写了个聊天线程。

代码实现

就一个类从头到尾,全都写在一起了。当时刚学Java,啥也不懂哈。

package chenweiliang; import java.applet.Applet; import java.applet.AudioClip; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.MalformedURLException; import java.net.URL; import java.sql.Time; import java.util.Calendar; import java.util.Random; import javax.imageio.ImageIO; import javax.management.timer.Timer; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButtonMenuItem; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.border.LineBorder; import javax.swing.plaf.metal.MetalIconFactory.FileIcon16; public class ChessFive { //计时开始标志 private static int timerFlag=0; //下棋步数 private static int steps=0; // private int highestGrade=0; //棋盘、棋子 BufferedImage table; BufferedImage black; BufferedImage white; BufferedImage playerImg; BufferedImage comImg; BufferedImage starImg; //鼠标选择框 BufferedImage selected; //棋盘大小 private static int BOARD_SIZE=15; //棋盘宽高 private final int TABLE_WIDTH=612; private final int TABLE_HEIGHT=612; //棋盘边框 private final int X_OFFSET=12; private final int Y_OFFSET=12; //像素与棋盘数组之间的比率 private final int rate=(TABLE_WIDTH-X_OFFSET*3)/(BOARD_SIZE); //棋子 private final int CHESS_BLACK=1; private final int CHESS_WHITE=2; private final int CHESS_NONE=0; //静态变量 static private int[][] board=new int[BOARD_SIZE][BOARD_SIZE]; //游戏窗口 JFrame f=new JFrame("五子棋游戏"); //棋盘 ChessBoard chessBoard=new ChessBoard(); //当前点 private int selectedX=-1; private int selectedY=-1; //创建菜单 JMenuBar mb=new JMenuBar(); JMenu gameMenu=new JMenu("游戏"); JMenu helpMenu=new JMenu("帮助"); JMenuItem newGameItem=new JMenuItem("新游戏"); JMenuItem inforItem=new JMenuItem("统计信息"); JMenuItem optionItem=new JMenuItem("选项"); JMenuItem exitItem=new JMenuItem("退出"); JMenuItem lookHelpItem=new JMenuItem("查看帮助"); JMenuItem aboutItem=new JMenuItem("关于五子棋"); //******************创建游戏双方窗口部件************************* PlayBoard player=new PlayBoard(); PlayBoard computer=new PlayBoard(); JLabel pJLabel=new JLabel("玩家"); JLabel cJLabel=new JLabel("计算机"); Box rightBox=new Box(BoxLayout.Y_AXIS); //聊天窗口 JTextField pJField=new JTextField(20); JTextArea cJArea=new JTextArea(1,20); //计时器 static JTextField cTime=new JTextField(10); //*********************创建选项窗口**************************** JDialog opJDialog=new JDialog(f,"选项"); JRadioButtonMenuItem easyItem=new JRadioButtonMenuItem("容易",true); JRadioButtonMenuItem middleItem=new JRadioButtonMenuItem("中等",true); Box bBox=new Box(BoxLayout.Y_AXIS); //*******************主程序初始化****************************** public void init()throws Exception{ new File("./data").mkdir(); File userFile=new File("./data/user.dat"); File finalFile=new File("./data/final.dat"); final RandomAccessFile userRaf=new RandomAccessFile(userFile, "rw"); final RandomAccessFile finalRaf=new RandomAccessFile(finalFile, "rw"); if(userRaf.length()==0){ highestGrade=0; } else{ highestGrade=userRaf.readInt(); } if(finalRaf.length()!=15*15*4){ //初始化 begin(); } else{ for(int i=0;ihighestGrade?grade:highestGrade; JOptionPane.showMessageDialog(f, s); } else if(playerWin){ winMusic.play(); int grade=10000-TimerThread.getTimer()-steps*10; String s=grade>highestGrade?("游戏结束!\n你赢了!\n最高分:" +grade+"分!"): ("游戏结束!\n你赢了!\n最后分数:" +grade+"分"); highestGrade=grade>highestGrade?grade:highestGrade; JOptionPane.showMessageDialog(f, s); } } //鼠标退出棋盘 public void mouseExited(MouseEvent e){ selectedX=-1; selectedY=-1; chessBoard.repaint(); } }); chessBoard.addMouseMotionListener(new MouseMotionListener() { @Override public void mouseMoved(MouseEvent e) { // TODO Auto-generated method stub //鼠标移动时改变选中点坐标 selectedX=e.getX(); selectedY=e.getY(); chessBoard.repaint(); } @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub } }); f.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub try { userRaf.seek(0); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { userRaf.writeInt(highestGrade); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { userRaf.close(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { finalRaf.seek(0); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3