Java小项目之:五子棋,你下棋下得过电脑吗?

Java五子棋功能要求:

1.创建窗口和设计一个棋盘界面

2.实现鼠标点击,棋子出现,黑白棋轮流下

3.能够判断五子相连输赢

4.添加重新开始,悔棋,退出按钮功能

这个java五子棋玩法丰富,但是界面简陋,十分适合java小白上手。界面是这样子的:

代码:

package fivechess1;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.Arrays;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

public class GamePanel extends JPanel {

/**

*

*/

private static final long serialVersionUID = 5372121135068238487L;

private final int w = 20, h = 20, s = 20;

private int X, Y;

private int[] x = {}, y = {};

private Color[] c = {};

private String[][] str = new String[w][h];

private String white = "w", black = "b";

private String display = "开始游戏,黑棋先下";

private Controller controller;

public void setController(Controller controller) {

this.controller = controller;

}

public void init() {

display = "开始游戏,黑棋先下";

x = Arrays.copyOf(x, 0);

y = Arrays.copyOf(y, 0);

c = Arrays.copyOf(c, 0);

getStr();

}

public int getW() {

return w;

}

public int getH() {

return h;

}

public int getS() {

return s;

}

public GamePanel() {

this.setSize(w * s, h * s + 50);

getStr();

repaint();

this.addMouseListener(new MouseListener() {

@Override

public void mouseReleased(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mousePressed(MouseEvent e) {

// TODO Auto-generated method stub

X = e.getX();

Y = e.getY();

startGame();

}

@Override

public void mouseExited(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseEntered(MouseEvent e) {

// TODO Auto-generated method stub

}

@Override

public void mouseClicked(MouseEvent e) {

// TODO Auto-generated method stub

}

});

}

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

g.setColor(Color.RED);

for (int x = 0; x < w; x++) {

for (int y = 0; y < h; y++) {

g.fill3DRect(x * s, y * s, s, s, true);

}

}

if (x.length > 0 && y.length > 0) {

for (int i = 0; i < x.length; i++) {

g.setColor(c[i]);

g.fillOval(x[i] / s * s, y[i] / s * s, s, s);

}

}

Font f = new Font("楷书", Font.PLAIN, 20);

g.setColor(Color.BLUE);

g.setFont(f);

g.drawString(display, 10, h * s + 25);

}

public void startGame() {

if (c.length % 2 == 0) {

if (str[X / s][Y / s].equals("*")) {

display = "黑方已下子,请白方下子";

str[X / s][Y / s] = black;

x = Arrays.copyOf(x, x.length + 1);

x[x.length - 1] = X;

y = Arrays.copyOf(y, y.length + 1);

y[y.length - 1] = Y;

c = Arrays.copyOf(c, c.length + 1);

c[c.length - 1] = Color.BLACK;

repaint();

if (isSuccess(black)) {

int options = JOptionPane.showConfirmDialog(GamePanel.this,

"黑方胜,是否新开一局");

if (options == JOptionPane.YES_OPTION) {

controller.returnButton();

} else if (options == JOptionPane.NO_OPTION) {

System.exit(0);

}

}

}

else if (str[X / s][Y / s].equals(white)) {

display = "所下位置被白方所占,请黑方重新下子";

repaint();

} else {

display = "所下位置黑方已经占了,请黑方重新下子";

repaint();

}

} else {

if (str[X / s][Y / s].equals("*")) {

display = "白方已下子,请黑方下子";

str[X / s][Y / s] = white;

x = Arrays.copyOf(x, x.length + 1);

x[x.length - 1] = X;

y = Arrays.copyOf(y, y.length + 1);

y[y.length - 1] = Y;

c = Arrays.copyOf(c, c.length + 1);

c[c.length - 1] = Color.WHITE;

repaint();

if (isSuccess(white)) {

int option = JOptionPane.showConfirmDialog(GamePanel.this,

"白方胜,是否新开一局");

if (option == JOptionPane.YES_OPTION) {

controller.returnButton();

} else if (option == JOptionPane.NO_OPTION) {

System.exit(0);

}

}

}

else if (str[X / s][Y / s].equals(black)) {

display = "所下位置被黑方所占,请白方重新下子";

repaint();

} else {

display = "所下位置白方已經占了,请白方重新下子";

repaint();

}

}

}

public void getStr() {

for (int i = 0; i < str.length; i++) {

for (int j = 0; j < str[i].length; j++) {

str[i][j] = "*";

}

}

}

public boolean isSuccess(String player) {

int left, right, up, down, lu, rd, ld, ru;

left = getLeft(player);

right = getRight(player);

up = getUp(player);

down = getDown(player);

lu = getLU(player);

rd = getRD(player);

ld = getLD(player);

ru = getRU(player);

return left + right >= 4 || up + down >= 4 || lu + rd >= 4

|| ld + ru >= 4;

}

public int getLeft(String player) {

int left = 0;

int i = X / s, j = Y / s;

while (true) {

if (i == 0) {

break;

}

i--;

if (!str[i][j].equals(player)) {

break;

}

left++;

}

return left;

}

public int getRight(String player) {

int right = 0;

int i = X / s, j = Y / s;

while (true) {

if (i == w - 1) {

break;

}

i++;

if (!str[i][j].equals(player)) {

break;

}

right++;

}

return right;

}

public int getUp(String player) {

int up = 0;

int i = X / s, j = Y / s;

while (true) {

if (j == 0) {

break;

}

j--;

if (!str[i][j].equals(player)) {

break;

}

up++;

}

return up;

}

public int getDown(String player) {

int down = 0;

int i = X / s, j = Y / s;

while (true) {

if (j == h - 1) {

break;

}

j++;

if (!str[i][j].equals(player)) {

break;

}

down++;

}

return down;

}

public int getLU(String player) {

int lu = 0;

int i = X / s, j = Y / s;

while (true) {

if (i == 0 || j == 0) {

break;

}

i--;

j--;

if (!str[i][j].equals(player)) {

break;

}

lu++;

}

return lu;

}

public int getRD(String player) {

int rd = 0;

int i = X / s, j = Y / s;

while (true) {

if (i == w - 1 || j == h - 1) {

break;

}

i++;

j++;

if (!str[i][j].equals(player)) {

break;

}

rd++;

}

return rd;

}

public int getRU(String player) {

int ru = 0;

int i = X / s, j = Y / s;

while (true) {

if (j == 0 || i == w - 1) {

break;

}

i++;

j--;

if (!str[i][j].equals(player)) {

break;

}

ru++;

}

return ru;

}

public int getLD(String player) {

int ld = 0;

int i = X / s, j = Y / s;

while (true) {

if (i == 0 || j == h - 1) {

break;

}

i--;

j++;

if (!str[i][j].equals(player)) {

break;

}

ld++;

}

return ld;

}

}

完整源码与素材可以私信我领取!

喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!

祝关注我的人都:身体健康,财源广进,福如东海,寿比南山,早生贵子,从不掉发!

java五子棋难度_Java小项目之:五子棋,你下棋下得过电脑吗?相关推荐

  1. java植物僵尸_Java小项目之:植物大战僵尸,这个僵尸不太冷!内附素材

    Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...

  2. java 拼图游戏_Java小项目之:拼图游戏!

    Java小项目之:拼图游戏! 今天教大家用java做出一个拼图游戏,很适合java初学者练手. 所用素材: 部分代码: package picture_mosical; import java.awt ...

  3. java 迷宫游戏_Java小项目之迷宫游戏的实现方法

    项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格.任何时候都不能在有 ...

  4. python五子棋游戏_python小项目之五子棋游戏

    本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 1.项目简介 在刚刚学习完python套接字的时候做的一个五子棋小游戏,可以在局域网内双人对战,也可以和电脑对战 2.实 ...

  5. 植物大战僵尸java版视频_Java小项目之:植物大战僵尸,这个僵尸不太冷!

    植物卡片框 */ public class PlantsBar implements GuiConstnat { // 卡片格子数量 private int plantSum; // 太阳数量和卡片选 ...

  6. java编写家庭收支记录,Java家庭收支记账小项目(java基础)

    Java家庭收支记账小项目(java基础) Java家庭收支记账小项目(java基础) 需求说明: 模拟实现基于文本界面的<家庭记账软件>. 该软件能够记录家庭的收入.支出,并能够打印收支 ...

  7. 【源码+教程】Java桌球游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发

    今天分享的Java开源游戏项目是桌球游戏,初学者也可以用来练习喔~课程详细讲解了一个桌球游戏的编写思路和流程,即使你刚学Java没多久,也可以跟随该教程视频完成属于你自己的桌球游戏!同时,还可以加深和 ...

  8. java项目逻辑重要吗_JAVA小项目,逻辑+感觉+总结?java小白你做到了吗(源码+教程)...

    俗话说的好,一如JAVA深似海.听起来好像胡说八道,其实却是很实在. 学过java的人都知道,java分支多,知识点十分丰富,单单论基础知识,也够学一壶的了,很多人在学习基础的时候已经被基础知识烦倒, ...

  9. java课设小迷宫含代码_Java小项目之迷宫游戏的实现方法

    项目要求: 一个网格迷宫由n行n列的单元格组成,每个大院个要么是空地(用0表示),要么是障碍物(用1表示),你的任务是找一条从起点到终点的移动序列,其中只能上下左右移动到相邻单元格.任何时候都不能在有 ...

最新文章

  1. iOS12系统应用发送普通邮实现发送
  2. cacti忘记密码怎么办
  3. WinPcap获取网卡的更多信息
  4. .NET 的过去、现在和未来
  5. 华为光伏usb适配器_华为系列原装充电器拆解第三弹:比亚迪版华为10W充电器
  6. 算法(23)-leetcode-剑指offer7
  7. 牛!这个省明确:科研人员平均薪酬水平 要高于企业管理人员!
  8. 《汇编语言》王爽—实验五详解
  9. 新能源补贴退坡 广汽新能源、比亚迪不涨价 蔚来最狠!
  10. Docker 简易搭建 ElasticSearch 集群教程
  11. 蓝牙学习笔记(九)——BLE超过20字节数据包传输(MTU)
  12. Atitit.Atiposter 发帖机 信息发布器 v7 q516
  13. 基金行业数据安全保障体系建设探析
  14. 关于sqlite多线程
  15. SQLyog的下载与安装
  16. iOS远程推送--APNs详解
  17. 疯狂的 Web 应用开源项目
  18. winehq-stable-5.0 Download For Mac 在Mac上运行exe文件
  19. Flash 游戏制作一些资源
  20. vue常用方法封装-一键安装使用(赠送免费工具)

热门文章

  1. Dreammail中设置@yahoo.cn邮箱的方法
  2. html大作业网页代码 计——美食餐饮管理(8页) HTML+CSS+JavaScript 美食餐饮商品设计 食物海鲜网页
  3. 倾听客户声音 华为无线亮相美国CTIA展
  4. Java实现文件的拆分合并
  5. 麒麟系统软 raid 创建
  6. Python+Django 实现MVT页面
  7. 这才是http错误的最精准表达.....
  8. H5界面长按保存图片到图库(base64去掉头部带data:image/png)
  9. 2020年最快的dns_这家日企卖的不是车是技术 马自达发布多款全新发动机 最快2020年搭载...
  10. bzoj1191[HNOI2006]超级英雄Hero