五子棋的实现 Java课程设计

效果图

先来看一下效果图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

功能

悔棋,和棋不做详细说明。

胜场数在效果展示中有相关。

背景可以根据自己的喜好在文件夹中更换,改变背景图片。

落子和触发功能按键时伴有音效。

运行环境说明

编码时使用IDE: eclipse 2020-03
JDK 版本: JDK 1.8

源码

Board

import java.util.Stack;
import java.applet.Applet;
import java.applet.AudioClip;
import java.io.*;
import java.net.*;
class Previous{
	int x;
	int y;
	Previous(int x,int y)
	{
		this.x=x;
		this.y=y;
	}
}
public class Board 
{
	int sum=1;
    int  chess[][];
    int  step[][];
    //创建一个栈用来存放每一步的走式;
    Stack<Previous> all;
    public Board() {
    	chess=new int [15][15];
    	step=new int[15][15];
    	all=new Stack<>();
    }
    //检查是否能放棋子
    boolean CheckPut(int x,int y) {
    	if(chess[x][y]==0) return true;
    	return false;
    }
    //判断输赢
    public int CanWin(int x,int y,int clr) {              //根据五子棋规则,黑子先手,则应该有clr=1为黑棋,clr=2为白棋
    	int win=0;
    	//横向判断输赢
    	for(int i=x-4;i<x+5;i++) {
    		if(i<0) continue;             //左右两边出界
    		if(i>14) break;
    		if(chess[i][y]==clr) win++;
    		else win=0;
    		if(win==5) return clr;
    	}
    	win=0;
    	//纵向判断
    	for(int j=y-4;j<y+5;j++) {
    		if(j<0) continue;
    		if(j>14) break;
    		if(chess[x][j]==clr) win++;
    		else win=0;
    		if(win==5) return clr;
    	}
    	win=0;
       //副对角线判断
        for(int i=x-4,j=y+4;i<x+5&&j>y-5;i++,j--) {
        if(i<0||j<0||i>14||j>14) continue;
        if(chess[i][j]==clr) win++;
        else  win=0;
        if(win==5) return clr;
        }
        win=0;
        //主对角线判断
        for(int i=x-4,j=y-4;i<x+5&&j<y+5;i++,j++) {
            if(i<0||j<0) continue;
            if(i>14||j>14) break;
            if(chess[i][j]==clr)   win++;
            else  win=0;
            if(win==5) return clr;
        }
        return 0;
    }
    
        //此处下棋,并检查下棋后是否胜利
    public int ChessHere(int x,int y,int clr) {
    	if(CheckPut(x,y)) {
    		step[x][y]=sum++;
    		chess[x][y]=clr;
    		Previous p=new Previous(x,y);
    		all.push(p);
    		return CanWin(x,y,clr);          //检查此时是否胜利
    	}
    	else return -1;    //CanWin中return 0,在后面会有条件判断
    }
    
      //获取棋盘当前落子状态
    public int[][] GetChess(){
        return chess;
    }
     //获取步数
    public int[][] GetStep(){
        return step;
    }  
      //重开
    public void ReStart() {
        for(int i=0;i<15;i++) {
            for(int j=0;j<15;j++) {
                chess[i][j]=0;
                //step[i][j]=0;    //步数置零与否都可
            }
        }
        all.clear();
        sum=1;
    }
     //悔棋
    public void Regret() {
    	if(all.isEmpty()) return ;
    	Previous c=all.pop();
    	chess[c.x][c.y]=0;
    }

public void Music(String s) 
{   
	try {
	 File f;
	 URI  uri;
	 URL url;
	 AudioClip music; 
     f = new File("src/"+s+".wav"); 
	 uri = f.toURI();
	 url = uri.toURL();
     music = Applet.newAudioClip(url);
	 music.play(); 
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}  //解析地址
}
}

还有一个 Game , 组合即可

源文件

需要的话点击,迷宫 五子棋 源码 + 报告
在这里插入图片描述
笔者邮箱: lzzy604@126.com

对您有帮助的话,就点赞,评论支持一下作者吧。

有疑问看这里

有疑问的话,请在评论区留言或私信笔者。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值