




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java五子棋小程序简介:Java五子棋小程序,送给Java初学者学习提高兴趣与学习所用,希望能给大家带来一些帮助。此程序用Java语言编写,采用swing技术开发界面,采用触发模式进行键盘事件监听,原本设计与台式机全键盘使用,所以白棋选手落子采用数字键盘0键,经过本人改进后,也可使用/键进行落子。如出现运行后无图案现象,请双击标题栏最大化后方可出现图案,然后再还原。最后感谢大家支持!1.程序运行效果2.Myeclipse根目录3.所有应用图片1)black.png 2)white.png3)space.gif 4)num0.gif 5)red.png 6)mbi_user.gif 7)mbi_D.gif 8)mbi_L.gif 9)mbi_R.gif 10)mbi_U.gif 11)qipan.jpg 4.所有类1)运行类package com.dhl.wuziqi;public class RunGame /* * param args */public static void main(String args) new Game();System.out.println(程序运行);2)主程序类package com.dhl.wuziqi;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.ImageIcon;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.KeyStroke;import javax.swing.Timer;public class Game extends JFrame implements KeyListener, ActionListenerprivate JPanel mainPanel = null;private JLabel baizi = null;private JLabel heizi = null;private MyLabel biankuang = null;private Position pos = null;private JLabel user = null;private JPanel rightPanel = null;private JLabel hei, heiU, heiD, heiL, heiR, heiC;private JLabel bai, baiU, baiD, baiL, baiR, baiC;private JLabel timeL, time;/显示 时间private Timer timer;private int mnt = 0, scd = 0;/分、秒private JMenuBar menuBar;private JMenu menuE, menuH;private JMenuItem menuItemCZ;/* * 初始化主视窗 * */private void InitLabel() Container con = this.getContentPane();con.setLayout(null);this.mainPanel = new MainPanel();this.mainPanel.setBounds(0, 0, 609, 608);this.mainPanel.setLayout(null);con.add(this.mainPanel);this.rightPanel = new JPanel();this.rightPanel.setBounds(610, 0, 180, 608);this.rightPanel.setBackground(Color.GRAY);this.rightPanel.setLayout(null);con.add(this.rightPanel);this.user = new JLabel(new ImageIcon(./img/mbi_user.gif);this.user.setBounds(40, 25, 40, 40);this.rightPanel.add(this.user);/* * 初始化所有点 * 给每个点上都放置一个黑子、一个白子,设置棋子为不可见 */this.pos = new Position1313;this.heizi = new JLabel1313;this.baizi = new JLabel1313;for (int i = 0; i 13; i+) for (int j = 0; j = 60) scd = 0;mnt+;String str = ;if(mnt 10) str = 0 + mnt + :;elsestr = mnt + :;if(scd 10) str = str + 0 + scd;elsestr = str +scd;time.setText(str);this.timer = new Timer(1000, keepTime);this.timer.start();/菜单初始化private void initMenu() this.menuBar = new JMenuBar();this.menuE = new JMenu(菜单(E);this.menuH = new JMenu(帮助(H);this.menuItemCZ = new JMenuItem(重置);this.menuItemCZ.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK);this.menuItemCZ.addActionListener(this);this.menuE.add(this.menuItemCZ);this.menuBar.add(this.menuE);this.menuBar.add(this.menuH);setJMenuBar(this.menuBar);/* * 当从键盘得到响应时改变边框位置 * */private void setBiankuang() this.biankuang.setLocation(69 + 36 * this.biankuang.getXX(), 64 + 36 * this.biankuang.getYY();/* * 重新初始化,隐藏所有棋子,所有位置状态清零,边框回到原来位置 * */private void initAll() this.mnt = 0;this.scd = 0;for (int i = 0; i 13; i+) for (int j = 0; j 13; j+) posij.setLabel_Status(0);this.heiziij.setVisible(false);this.baiziij.setVisible(false);this.biankuang.setBounds(285, 280, 45, 45);this.biankuang.returnMyLabel(); /边框初始化this.user.setLocation(40, 25);this.timer.start();/重新开始计时/* * 胜利显示 * */private void showOver() this.timer.stop();if(this.biankuang.getLabel_Status() = 1) JOptionPane.showMessageDialog(this, 黑方获胜!); else if(this.biankuang.getLabel_Status() = 2) JOptionPane.showMessageDialog(this, 白方获胜!); int flag = JOptionPane.showConfirmDialog(this, 再来一局吧!, 消息, JOptionPane.YES_NO_OPTION);if(flag = JOptionPane.YES_OPTION) this.initAll();else this.dispose();/* * 判断游戏是否结束 * param x 当前落子x坐标 * param y 当前落子y坐标 */private void gameOver(int x, int y) int staNum = 0;/* * 向右下方检查是否形成五连子 */for (int i = x - 4, j = y - 4; i = 0 & i = 0 & j = 12) if(this.posij.getLabel_Status() = this.biankuang.getLabel_Status() staNum+;System.out.println(staNum = + staNum);if(staNum = 5) this.showOver();/this.timer.stop();/if(this.posij.getLabel_Status() = 1) /JOptionPane.showMessageDialog(this, 黑方获胜!);/System.out.println(黑子获胜!);/if(this.posij.getLabel_Status() = 2) /JOptionPane.showMessageDialog(this, 白方获胜!);/System.out.println(白子获胜!);/ else staNum = 0;/* * 向右方检查是否形成五连子 */for (int i = x - 4, j = y ; i = 0 & i = 0 & j = 12) if(this.posij.getLabel_Status() = this.biankuang.getLabel_Status() staNum+;System.out.println(staNum = + staNum);if(staNum = 5) this.showOver();/this.timer.stop();/if(this.posij.getLabel_Status() = 1) /JOptionPane.showMessageDialog(this, 黑方获胜!);/System.out.println(黑子获胜!);/if(this.posij.getLabel_Status() = 2) /JOptionPane.showMessageDialog(this, 白方获胜!);/System.out.println(白子获胜!);/ else staNum = 0;/* * 向右上方检查是否形成五连子 */for (int i = x - 4, j = y + 4; i = 0 & i = 0 & j = 12) if(this.posij.getLabel_Status() = this.biankuang.getLabel_Status() staNum+;System.out.println(staNum = + staNum);if(staNum = 5) this.showOver();/this.timer.stop();/if(this.posij.getLabel_Status() = 1) /JOptionPane.showMessageDialog(this, 黑方获胜!);/System.out.println(黑子获胜!);/if(this.posij.getLabel_Status() = 2) /JOptionPane.showMessageDialog(this, 白方获胜!);/System.out.println(白子获胜!);/ else staNum = 0;/* * 向下方检查是否形成五连子 */for (int i = x, j = y - 4 ; j = 0 & i = 0 & j 0) this.biankuang.moveYY(-1);this.setBiankuang();break;case KeyEvent.VK_S:if(this.biankuang.getYY() 0) this.biankuang.moveXX(-1);this.setBiankuang();break;case KeyEvent.VK_D:if(this.biankuang.getXX() 0) this.biankuang.moveYY(-1);this.setBiankuang();break;case KeyEvent.VK_DOWN:if(this.biankuang.getYY() 0) this.biankuang.moveXX(-1);this.setBiankuang();break;case KeyEvent.VK_RIGHT:if(this.biankuang.getXX() 12) this.biankuang.moveXX(1);this.setBiankuang();break;case KeyEvent.VK_NUMPAD0:if(this.posthis.biankuang.getXX()this.biankuang.getYY().getLabel_Status() = 0) this.baizithis.biankuang.getXX()this.biankuang.getYY().setVisible(true);this.repaint();this.posthis.biankuang.getXX()this.biankuang.getYY().setLabel_Status(2);this.gameOver(this.biankuang.getXX(), this.biankuang.getYY();this.biankuang.setLabel_Status(1);this.user.setLocation(40, 25);break;case KeyEvent.VK_SLASH:if(this.posthis.biankuang.getXX()this.biankuang.getYY().getLabel_Status() = 0) this.baizithis.biankuang.getXX()this.biankuang.getYY().setVisible(true);this.repaint();this.posthis.biankuang.getXX()this.biankuang.getYY().setLabel_Status(2);this.gameOver(this.biankuang.getXX(), this.biankuang.getYY();this.biankuang.setLabel_Status(1);this.user.setLocation(40, 25);break;default:break;public void keyReleased(KeyEvent e) / TODO Auto-generated method stubpublic void keyTyped(KeyEvent e) / TODO Auto-generated method stubpublic void actionPerformed(ActionEvent e) if(e.getSource() = menuItemCZ) this.initAll();3)JPanel封装类package com.dhl.wuziqi;import java.awt.Graphics;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JPanel;public class MainPanel extends JPanel private ImageIcon welcomImageIcon = null;public MainPanel()this.welcomImageIcon = new ImageIcon(./img/qipan.jpg); public void paintComponent(Graphics g) g.drawImage(this.welcomImageIcon.getImage(), 0, 0, this.getWidth(), this.getHeight(), this); 4)JLabel封装了package com.dhl.wuziqi;import javax.swing.ImageIcon;import javax.swing.JLabel;public class MyLabel extends JLabel private int xx;private int yy;private int Label_Status;public int getLabel_Status() return Label_Status;public void setLabel_Status(int l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西省吕梁市第一中学2025-2026学年高一上学期基础过关(一)物理试题(无答案)
- 2024-2025学年江西省赣州市高二(下)期末物理试卷(含答案)
- 边防军人知识培训课件
- 机器学习算法在健康保险精算模型中的优化-洞察及研究
- 国产高导热材料在监视器箱散热系统中的替代路径
- 含氟硼酸酯类化合物生物代谢路径与食品安全风险评估的关联性研究
- 反射式筒灯与智能建筑光环境协同控制的算法优化路径
- 反光织带与智能穿戴设备的柔性集成技术瓶颈突破
- 双碳目标下刮板系统余热回收与能源梯级利用技术突破
- 半导体级副门锁芯片在电磁脉冲环境下的自毁保护机制
- 道路工程施工团队职责分工
- 《人工智能:AIGC基础与应用》高职全套教学课件
- 工程造价信息化管理中的问题与发展趋势
- 燃气管道工程竣工资料
- 室性心动过速护理查房
- 2025届上海市(春秋考)高考英语考纲词汇对照表清单
- 教务处精细化常规管理
- 培训课件:医患沟通技巧
- 广东省四校2024-2025学年高三上学期期末联考英语试题(无答案)
- 《解剖学》课程标准
- 2025年新劳动合同范本
评论
0/150
提交评论