欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

模仿五子棋类似小游戏升级版(含界面)

程序员文章站 2022-06-24 19:02:36
模仿五子棋类似小游戏(升级版含界面)运行截图代码运行截图代码Wzq.javapackage com.zjw20200221;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import javax.swing....

模仿五子棋类似小游戏(升级版含界面)

运行截图

模仿五子棋类似小游戏升级版(含界面)

代码

Wzq.java

package com.zjw20200221;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

// 继承JFrame来一个背景图片,那么,我们最快捷的操作,是让类,继承JFrame
public class Wzq extends JFrame{
	public static int[][] qp = new int[15][15];
	public static int flag = 1; // 0是白旗 1黑旗


	// 先来创建JFrame
	public void start() {
		// this this指向,指当前对象 ——> Wzq ——> extends JFrame  ——> JFrame
		this.setTitle("五子棋");
		this.setSize(768, 796);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setIconImage(
				Toolkit.getDefaultToolkit().getImage(
						Wzq.class.getResource("/image/yc.png")));

		// 可见
		this.setVisible(true);

		// 获取到绘图对象
		Graphics g = this.getGraphics();

		// 添加鼠标的点击事件
		this.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				// 得到我们的坐标位置 在我们数组里面,x代表行,y代表列 ,与坐标抽的xy恰恰相反
				int x = (e.getY() - 38) / 50;
				int y = (e.getX() - 10) / 50;
				// System.out.println(x + "-" + y);

				// 每次下棋先判断一下,这个地方有没有被下过
				if (qp[x][y] != 0) { // Wzq.this   ->  this  this的应用指向
					JOptionPane.showMessageDialog(Wzq.this, "此处已经有子", "警告", JOptionPane.WARNING_MESSAGE);
					return; // 不让代码继续往下了
				}

				// 如果没有子了,那就开始下棋
				if (flag == 1) { // 说明是白子
					qp[x][y] = 1;
					g.setColor(Color.WHITE);
				} else {
					qp[x][y] = 2;
					g.setColor(Color.BLACK);
				}
				// 开始画图,还是上面说的,xy跟我们的xy是相反的
				g.fillOval(y * 50 + 10, x * 50 +38, 50, 50);

				// 
				if (isWin(x, y)) {
					// 胜利
					String str = flag == 1 ? "白子" : "黑子";// 三元运算符
					int index = JOptionPane.showConfirmDialog(Wzq.this,
							"游戏结束," + str + "获取胜利!\n是否再来一局", "游戏结束",
							JOptionPane.YES_NO_OPTION);
					if (index == 1) {
						// 1代表否
						System.exit(0); // 强行终止程序
					}
					// 再来一局
					flag = 2;
					// 数组全部改成0
					for (int i = 0; i < qp.length; i++) {
						for (int j = 0; j < qp[i].length; j++) {
							qp[i][j] = 0;
						}
					}
					// 重绘棋盘
					Wzq.this.repaint();
				}
				// 没有赢,则继续,换另一个玩家下棋
				flag = flag % 2 + 1;
			}
		});
	}

	// 判断输赢
	private static boolean isWin(int x, int y) {
		// 如何判断赢了
		// 以自身为原点,向上,向下,向左,向右,都扩4列,最极限的情况下,我们下的位置,是第五子
		// 先看横的
		int count = 0;
		for (int i = y - 4; i <= y + 4; i++) {
			// i 不能小于0 	i 不能大于等于12 	不能超过边界
			if (i < 0 || i >= qp[0].length) {
				continue;
			}
			// 判断,是否有连的5个值
			if (qp[x][i] == flag) {
				count ++;
				if (count >= 5) {
					// 胜利
					return true;
				}
			} else {
				// 中间制药有一个不相等,累积就清空,变成0
				count = 0;
			}
		}
		// 接着判断竖的
		for (int i = x - 4; i <= x + 4; i++) {
			// i 不能小于0 	i不能大于等于12 	不能超过边界
			if (i < 0 || i >= qp.length) {
				continue;
			}
			if (qp[i][y] == flag) {
				count ++;
				if (count >= 5) {
					// 胜利
					return true;
				}
			} else {
				// 中间只要有一个不相等, 累积就清空,变成0
				count = 0;
			}
		}

		// 二个对角,襒 	重点: x , y 都要改变
		for (int i = x - 4, j = y - 4 ; i <= y + 4 && j <= y + 4; i++, j++) {
			if (i < 0 || i >= qp.length || j < 0 || j >= qp[0].length) {
				continue;
			}
			if (qp[i][j] == flag) {
				count ++;
				if (count >= 5) {
					// 胜利
					return true;
				}
			} else {
				// 中间只要有一个不相等, 累积就清空,变成0
				count = 0;
			}
		}

		count = 0;

		// 捺
		for (int i = x + 4, j = y - 4; i >= x - 4 && j <= y + 4; i--, j++) {
			if (i < 0 || i >= qp.length || j < 0 || j > qp[0].length) {
				continue;
			}
			if (qp[i][j] == flag) {
				count ++;
				if (count >= 5) {
					// 胜利
					return true;
				}
			} else {
				// 中间只要有一个不相等,累积就清空,变成0
				count = 0;
			}
		}

		return false;
	}
	
	// 继承JFrame,那么,在创建的时候,会自动的调用这个方法
	public void paint(Graphics g) {
		// 定义背景图片
		Image bgImage = Toolkit.getDefaultToolkit().getImage(
				Wzq.class.getResource("/image/chessboard.jpg"));
		// 画图
		g.drawImage(bgImage, 4, 32, 760, 760, this);

		g.dispose();

	}
}


Test.java

package com.zjw20200221;

public class Test {
	public static void main(String[] args) {
		// 实例化对象
		Wzq wzq = new Wzq();
		// 调用这个对象里面的方法
		wzq.start();
	}
}

gitee源代码下载:https://gitee.com/zhangjiawei88/wuziqi.git

本文地址:https://blog.csdn.net/qq_43414422/article/details/109919860

相关标签: 项目 java