Java小项目之:五子棋,你下棋下得过电脑吗?
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小项目之五子棋
五子棋V1.0 功能: 人人对战,人机对战(初级) 记录双方分数: 主要知识点: 二维坐标系中,各方向坐标的关系及规律. 效果图: 主框架类: package com.gxlee.wzq; /** * ...
- Java小项目--坦克大战(version1.0)
Java小项目--坦克大战<TankWar1.0> 这个小项目主要是练习j2se的基础内容和面向对象的思想.项目实现了基本的简单功能,我方一辆坦克,用上下左右键控制移动方向,按F键为发射炮 ...
- java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码
Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁 ...
- Java学习笔记三十:Java小项目之租车系统
Java小项目之租车系统 一:项目背景介绍: 根据所学知识,编写一个控制台版的“呱呱租车系统” 功能: 1.展示所有可租车辆: 2.选择车型.租车量: 3.展示租车清单,包含:总金额.总载货量以及其车 ...
- Java小项目之:教你做个聊天系统!
Java小项目之:聊天系统 今天给大家带来的java练手小项目是一个简单的聊天室,界面简单,操作不难. 分为注册系统,登录系统和聊天系统三部分,很适合java小白练手. 完整的源码和素材请关注并私信我 ...
- java小项目之:扫雷,这游戏没有你想的那么简单!
扫雷 我之前分享的小项目和小游戏,电影购票.坦克大战.捕鱼达人.贪吃蛇等,虽然已经是耳熟能详人尽皆知的项目和游戏,但是保不齐真的有人没接触过. 今天分享的这个项目,我不相信没人接触过(仅限80后-00 ...
- Python小项目之五子棋
1.项目简介 在刚刚学习完python套接字的时候做的一个五子棋小游戏,可以在局域网内双人对战,也可以和电脑对战 2.实现思路 局域网对战 对于局域网功能来说,首先建立连接(tcp),然后每次下棋时将 ...
- java web项目中 获取resource路径下的文件路径
public GetResource{ String path = GetResource.class.getClassLoader().getResource("xx/xx.txt&quo ...
- java web项目中classes文件夹下的class和WEB-INF/lib中jar里的class文件加载顺序
如果是发布到weblogic的话,可以在WebContent\WEB-INF\weblogic.xml里面配置.参考配置如下:<?xml version="1.0" enco ...
随机推荐
- lodap问题集锦
1.分页打印时,同一行显示在不同页内 ,调整行分页粒度 LODOP.SET_PRINT_STYLEA(0, "TableRowThickNess", 40);
- MVC插件式开发平台
---恢复内容开始--- 经过DyOS.BraveOS1.0再到BraveOS2.0,系统现在已经开发了下载. 我们的目标是,网页版操作系统,可以在线安装更新软件,并提供二次开发平台,提供基础的逻辑和 ...
- WebService 基础知识点和用Postman调试
阅读连接:Retrofit 用Soap协议访问WebService 详解 参考 1.java发HTTP POST请求(内容为xml格式) 2. android解析XML总结(SAX.Pull.Dom三 ...
- 【codeforces 761B】Dasha and friends
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- HDU 2454"Degree Sequence of Graph G"(度序列可图性判断)
传送门 参考资料: [1]:图论-度序列可图性判断(Havel-Hakimi定理) •题意 给你 n 个非负整数列,判断这个序列是否为可简单图化的: •知识支持 握手定理:在任何无向图中,所有顶点的度 ...
- P1082 数列分段
题目描述 对于给定的一个长度为 \(N\) 的正整数数列 \(A_i\) ,现要将其分成连续的若干段,并且每段和不超过 \(M\) (可以等于 \(M\) ),问最少能将其分成多少段使得满足要求. 输 ...
- PowerShell 通过 WMI 获取系统服务
本文告诉大家如何通过 WMI 获取系统服务 通过 Win32_Service 可以获取系统启动的服务 Get-WmiObject Win32_Service | Format-List Caption ...
- poj2826 An Easy Problem?!(计算几何)
传送门 •题意 两根木块组成一个槽,给定两个木块的两个端点 雨水竖直下落,问槽里能装多少雨水, •思路 找不能收集到雨水的情况 我们令线段较高的点为s点,较低的点为e点 ①两条木块没有交点 ②平行或重 ...
- ios设备iframe无法滚动
在使用IFRAME,你需要使用一个元素(如DIV)来包装他们 <div class="scroll-wrapper"> <iframe src="&qu ...
- [竞赛]Beat Matching(对拍)
对拍的基本理论这里恕我不一一叙述,不会的请转身到这里:http://blog.csdn.net/code12hour/article/details/51252457 分为以下几个部分: 1.暴力伪标 ...