已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
介绍:这是一款很简单的人机对战五子棋,只实现了简单的防守功能,适合刚开始设计五子棋的朋友参考。程序执行结果:框架程序:package wuziqi;import java.awt.BorderLayout;import java.awt.Color;import javax.swing.JFrame;/* * 五子棋 */public class MainFrame extends JFrame public static void main(String args) MainPanel panel = new MainPanel();MainFrame frame = new MainFrame(五子棋);frame.setSize(680,680); panel.setBackground(Color.LIGHT_GRAY);frame.add(panel,BorderLayout.CENTER);panel.addMouseListener(panel);frame.setVisible(true);frame.setDefaultCloseOperation(3);frame.setLocationRelativeTo(null); public MainFrame() super(); public MainFrame(String str) super(str); 面板设计:package wuziqi;import java.awt.*;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;/* * JFrame中的层次分布及相对关系是:最底层是:JRootPane; * 第二层是:JlayerPane;最上层就是ContentPane,也正是我们常说的内容面板。 * 所以一般我们拖放的控件就是在ContentPane层上。 */import javax.swing.JOptionPane;/* * 五子棋的面板设计 */public class MainPanel extends Panel implements MouseListener private static final int COLUMN = 16;/ 列数private static final int ROW = 16;/ 行数private static final int GAP = 40;/ 间距private static boolean isBlack = true; / 判断是否是黑棋private static int click_X; / 点击时候的x坐标private static int click_Y; / 点击时候的y坐标private char allChess = new charROWCOLUMN; / 存下了旗子的位置public MainPanel() super();for (int i = 0; i allChess.length; i+) for (int j = 0; j allChessi.length; j+) allChessij = *; / 初始化数组allChess,*表示没有棋子存在/* 画棋盘要放在paint(Graphics g)里面 */public void paint(Graphics g) for (int i = 0; i ROW; i+) / 划横线g.setColor(Color.BLACK); / 画线为黑色,g.drawLine(20, 20 + i * GAP, 640 - 20, 20 + i * GAP);/ 棋盘间隔分布for (int i = 0; i COLUMN; i+) / 划纵线g.setColor(Color.BLACK);g.drawLine(20 + i * GAP, 20, 20 + i * GAP, 640 - 20); / 棋盘间隔分布/ 画棋子 w表示白棋 b表示黑棋for (int i = 0; i allChess.length; i+) / allChess.length是行数for (int j = 0; j = 0 & allChessRLastXy = ch) RLastX-;int LRLastX=RLastX; /标记最左边的位置int RNum = 0;/ 统计横向相同的棋子数RLastX+;while (RLastX = 0 & allChessxLLastY = ch) LLastY-;int LLLastY=LLastY;/标记最上面棋盘的位置int LNum = 0;/ 统计纵向相同的棋子数LLastY+;while ( LLastY = 0 & RULastY = 0& LDLastX = 0 & LDLastY = 0 & allChessRULastXLDLastY = ch) RULastX-;LDLastY-;int LRULastX=RULastX;/记录左上棋子的横坐标int ULDLastY=LDLastY;/记录左上棋子的横坐标int RUNum = 0;RULastX+;LDLastY+;while (RULastX = 0 & RULastX allChess.length& LDLastY allChessx.length& allChessRULastXLDLastY = ch) RULastX+;LDLastY+;RUNum+;/取最大值也就是最危险的状况int max=0;if(maxRNum) max=RNum;if(maxLNum) max=LNum;if(maxLDNum) max=LDNum;if(max0)allChessx-1y=w;isBlack=true;return;elseif(allChessx+1y=*)allChessx+1y=w;isBlack=true;return;elsedo x = (int) (Math.round(float) (Math.random() * 15);y = (int) (Math.round(float) (Math.random() * 15); while(allChessxy != *); allChessxy = w;/ 令棋盘(x,y)设置为白棋 isBlack = true; isBlack=true;return;elseif(allChessLRLastXy=*)allChessLRLastXy=w;isBlack=true;return;else if(allChessRLastXy=*)allChessRLastXy=w;isBlack=true;return;/上下判断else if(max=LNum)if(allChessxLLLastY=*)/最上方的棋盘是否是空的allChessxLLLastY=w;isBlack=true;return;else if(allChessxLLastY=*)/最下方棋盘是否为空allChessxLLastY=w;isBlack=true;return;/左上右下else if(max=LDNum)if(allChessLLDLastXDRULastY=*)/最上方的棋盘是否是空的allChessLLDLastXDRULastY=w;isBlack=true;return;else if(allChessLDLastXRULastY=*)/最下方棋盘是否为空allChessLDLastXRULastY=w;isBlack=true;return;/左下右上else if(max=RUNum)if(allChessLRULastXULDLastY=*)/最上方的棋盘是否是空的allChessLRULastXULDLastY=w;isBlack=true;return;else if(allChessRULastXLDLastY=*)/最下方棋盘是否为空allChessRULastXLDLastY=w;isBlack=true;return;/ 判断是否为5个相同的棋子,是返回true,否返回falsepublic boolean isWin(int x, int y, boolean isColor) char ch = allChessxy;/* 横向判断 */int RLastX = x;/ 横向判断是否到达5个相同的棋子,先向左回溯相同颜色,再向右搜索是否有连续5个while (RLastX = 0 & allChessRLastXy = ch) RLastX-;int RNum = 0;/ 统计横向相同的棋子数RLastX+;int itemRLastx = RLastX + 5;while (RLastX itemRLastx & RLastX = 0 & allChessxLLastY = ch) LLastY-;int LNum = 0;/ 统计纵向相同的棋子数LLastY+;int itemLLastY = LLastY + 5;while (LLastY itemLLastY & LLastY = 0 & RULastY allChessx.length& allChessLDLastXRULastY = ch) LDLastX-;RULastY+;int LDNum = 0;LDLastX+;RULastY-;int itemLDLastX = LDLastX + 5;while (LDLastX = 0& LDLastX = 0 & LDLastY = 0 & allChessRULastXLDLastY = ch) RULastX-;LDLastY-;int RUNum = 0;RULastX+;LDLastY+;int itemLDLastY = LDLastY + 5;while (RULastX = 0 & RULastX allChess.length& LDLastY itemLDLastY & LDLastY allChessx.length& allChessRULastXLDLastY = ch) RULastX+;LDLastY+;RUNum+;if (RNum = 5 | LNum = 5 | RUNum = 5 | LDNum = 5) return true;return false;Overridepublic void mouseClicked(MouseEvent e) / 鼠标按下时候画出棋子public void mousePressed(MouseEvent e) / 鼠标点击事件处理过程/ 获取点击位置坐标int click_x = e.getX();int click_y = e.getY();/* * 返回x最接近的整数,如果x的小数部分大于等于0.5,返回值是大于x的最小整数, 否则round函数返回小于等于x的最大整数 */int chess_x = Math.round(float) (click_x - 20) / GAP);int chess_y = Math.round(float) (click_y - 20) / GAP);click_X = chess_x; / 获得点击后的横坐标click_Y = chess_y; / 获得点击后的纵坐标/ 玩家执黑棋if (isBlack = true & allChesschess_xchess_y = *) allChesschess_xchess_y = b;/ 令棋盘(x,y)设置为黑棋isBlack = false;repaint();if (isWin(chess_x, chess_y, isBlack) if (isBlack) / 弹出对话框JOptionPane.showMessageDialog(null, 白棋赢了);System.exit(0); else JOptionPane.showMessageDialog(null, 黑棋赢了);System.exit(0);if (isBlack = false) / 防止再次点击已有棋子区域时下了白棋isCon(chess_x, chess_y);/* * do chess_x = (int) (Math.round(float) (Math.random() * 15); * chess_y = (int) (Math.round(float) (Math.random() * 15); * System.out.println(chess_x + + chess_y); while * (allChesschess_xchess_y != *); * System.out.println(allChesschess_xchess_y); * allChesschess_xchess_y = w;/ 令棋盘(x,y)设置为白棋 isBlack = true; * * /* if(isBlack=false&allChesschess_xchess_y=*) * allChesschess_xchess_y = w; isBlack = true; /令棋盘(x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大理州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)有完整答案详解
- 双鸭山市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(考试直接用)
- 2026年嘉兴市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(综合题)
- 德阳市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(必刷)
- 白城市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及参考答案详解一套
- 郴州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(基础+提升)
- 宿迁市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(全优)
- 西安市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及参考答案详解1套
- 益阳市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及完整答案详解1套
- 潼南县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(基础题)
- GB/T 44871-2024纺织品二异氰酸酯类化合物的测定
- 《小学劳动教育研究的文献综述》3800字
- 航空器租赁合同模板
- 物业项目开办物资明细表(参考)
- GB/T 44577-2024商用电动洗碗机性能测试方法
- 口腔颌面部间隙感染-颞、舌下、颏下、咽旁间隙感染
- 重度哮喘诊断与处理中国专家共识(2024)解读
- 2024-2030年中国光纤激光器行业发展趋势及投资风险分析研究报告
- 2024广东珠海市强制隔离戒毒所招聘3人易考易错模拟试题(共500题)试卷后附参考答案
- 4.2.1 共面直线(课件)-【中职专用】高二数学(高教版2021拓展模块一上册)
- DL-T-5161.5-2018电气装置安装工程质量检验及评定规程第5部分:电缆线路施工质量检验
评论
0/150
提交评论