关键词:
该项目为Java编程语言编写的五子棋游戏(控制台版),用到二维数组、for循环、if语句、while()语句、Scanner Until包,此项目主要是对数组的使用。该项目的功能有落子、输出棋盘、判断输赢。
代码条:
package edu.qizi.gam;
import java.util.Scanner;
public class GobangTest
public static void main(String[] args)
int BoardSize = 20;
// 棋盘的实现
String[][] board = new String[BoardSize][BoardSize];
for (int i = 0; i < board.length; i++)
for (int j = 0; j < board[i].length; j++)
board[i][j] = "+";
//输出棋盘
PrintBoard(board);
while(true)
//黑棋落子
System.out.println("黑棋落子");
BlackMoveLater(board);
// 每下一步黑棋要输出一下棋盘
PrintBoard(board);
// 行判断黑棋
BlackRow(BoardSize, board);
// 列判断黑棋
BlackLine(BoardSize, board);
// 自左上--->右下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法
BlackTopLeftToBottomRight_Line(BoardSize, board);
// 自左上--->右下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法
BlackTopLeftToBottomRight_Row(BoardSize, board);
// 自右上--->左下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法
BlackTopRightToBottomLeft_Line(BoardSize, board);
// 自右上--->左下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法
BlackTopRightToBottomLeft_Row(BoardSize, board);
// 白棋落子
System.out.println("白棋落子");
WhiteMoveLater(board);
// 每下一步白棋要输出一下棋盘
PrintBoard(board);
// 行判断白棋
WhiteRow(BoardSize, board);
// 列判断白棋
WhiteLine(BoardSize, board);
// 自左上--->右下判断白棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法
WhiteTopLeftToBottomRight_Line(BoardSize, board);
// 自左上--->右下判断白棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法
WhiteTopLeftToBottomRight_Row(BoardSize, board);
// 自右上--->左下判断白棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法
WhiteTopRightToBottomLeft_Line(BoardSize, board);
// 自右上--->左下判断白棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法
WhiteTopRightToBottomLeft_Row(BoardSize, board);
下面是实现的方法
//实现棋盘输出的方法
public static void PrintBoard(String[][] board)
for (int i = 0; i < board.length; i++)
for (int j = 0; j < board[i].length; j++)
System.out.print( board[i][j]+" ");
System.out.println();
实现黑棋落子
// 实现黑棋落子的方法
public static void BlackMoveLater(String[][] board)
while(true)
Scanner sc1=new Scanner(System.in);
System.out.println("请输入黑棋落子的横坐标[1---20]:");
int BlackBoard_x=sc1.nextInt();
//判断横坐标是否数组越界
if(BlackBoard_x<1 || BlackBoard_x>20)
System.out.println("你输入的坐标范围有误 ,横坐标取1到20,请正确输入:\\n");
continue;
Scanner sc2=new Scanner(System.in);
System.out.println("请输入黑棋落子的纵坐标[1---20]:");
int BlackBoard_y=sc2.nextInt();
//判断纵坐标是否数组越界
if(BlackBoard_y<1 || BlackBoard_y>20)
System.out.println("你输入的坐标范围有误,纵坐标取1到20,请正确输入:\\n");
continue;
//判断此位置是否可以落入棋子
if(board[BlackBoard_x-1][BlackBoard_y-1]=="○")
System.out.println("此位置已经有棋子了,请你将棋子下到空位置");
continue;
else
board[BlackBoard_x-1][BlackBoard_y-1]="●";
break;
实现白棋落子
// 实现白棋落子的方法
public static void WhiteMoveLater(String[][] board)
while(true)
Scanner sc1=new Scanner(System.in);
System.out.println("请输入白棋落子的横坐标[1---20]:");
int WhiteBoard_x=sc1.nextInt();
//判断横坐标是否数组越界
if(WhiteBoard_x<1 || WhiteBoard_x>20)
System.out.println("你输入的坐标范围有误 ,横坐标取1到20,请正确输入:\\n");
continue;
Scanner sc2=new Scanner(System.in);
System.out.println("请输入白棋落子的纵坐标[1---20]:");
int WhiteBoard_y=sc2.nextInt();
//判断纵坐标是否数组越界
if(WhiteBoard_y<1 || WhiteBoard_y>20)
System.out.println("你输入的坐标范围有误,纵坐标取1到20,请正确输入:\\n");
continue;
//判断此位置是否可以落入棋子
if(board[WhiteBoard_x-1][WhiteBoard_y-1]=="●")
System.out.println("此位置已经有棋子了,请你将棋子下到空位置\\n");
continue;
else
board[WhiteBoard_x-1][WhiteBoard_y-1]="○";
break;
判定输赢以黑棋为例(有六个方法),下面一一列举
// 实现行判断黑棋子
public static void BlackRow(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 一行一行的读取数组中的元素
for(int row=0;row<BoardSize;row++)
for(int line=0;line<BoardSize;line++)
// 如果此行中有元素为黑棋则number+1
if(board[row][line]=="●")
number++;
// 当number为5的时候则黑棋一方的胜
while(number==5)
System.out.println("黑棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此行中虽有五个黑棋但是并不相连,不能说是黑棋方胜,需将number置为0
if(board[row][line]=="○"|| board[row][line]=="+")
number=0;
// 每一行读取数组元素后未能分出胜负需要将number置为0
number=0;
展现第一个方法的结果
第二个方法代码
// 实现列判断黑棋子
public static void BlackLine(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 一列一列的读取数组中的元素
for(int Line=0;Line<BoardSize;Line++)
for(int row=0;row<BoardSize;row++)
// 如果此列中有元素为黑棋则number+1
if(board[row][Line]=="●")
number++;
// 当number为5的时候则黑棋一方的胜
while(number==5)
System.out.println("黑棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( Line = 0; Line < board[row].length; Line++)
System.out.print( board[row][Line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此列中虽有五个黑棋但是并不相连,不能说是黑棋方胜,需将number置为0
if(board[row][Line]=="○"|| board[row][Line]=="+")
number=0;
// 每一列读取数组元素后未能分出胜负需要将number置为0
number=0;
展现第二个方法的结果
第三个方法代码
// 实现自左上--->右下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法
public static void BlackTopLeftToBottomRight_Line(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候列line总是从0开始
for(int row=0;row<BoardSize;row++)
// 执行这个for循环的时候每一次行+1,列+1,数据元素呈现阶梯分布,阶梯逼近左下
for(int line=0,i=row;line<BoardSize-row;line++,i++)
// 如果此阶梯中有元素为黑棋则number+1
if(board[i][line]=="●")
number++;
// 当number为5的时候则黑棋一方的胜
while(number==5)
System.out.println("黑棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[i].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个黑棋但是并不相连,不能说是黑方胜,需将number置为0
if(board[i][line]=="○"|| board[i][line]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
展现第三种方法的结果
第四个方法代码
// 实现自左上--->右下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法
public static void BlackTopLeftToBottomRight_Row(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候行row总是从0开始
for(int line=0;line<BoardSize;line++)
// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右上
for(int row=0,i=line;row<BoardSize-line;row++,i++)
// 如果此阶梯中有元素为黑棋则number+1
if(board[row][i]=="●")
number++;
// 当number为5的时候则黑棋一方的胜
while(number==5)
System.out.println("黑棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个黑棋但是并不相连,不能说是黑方胜,需将number置为0
if(board[row][i]=="○"|| board[row][i]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
第四个方法结果展示
第五个方法的代码
// 实现自右上--->左下判断黑棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法
public static void BlackTopRightToBottomLeft_Line(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候列line总是从最后一列开始
for(int row=0;row<BoardSize;row++)
// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右下
for(int line=BoardSize-1,i=row;line>=0+row;line--,i++)
// 如果此阶梯中有元素为黑棋则number+1
if(board[i][line]=="●")
number++;
// 当number为5的时候则黑棋一方的胜
while(number==5)
System.out.println("黑棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个黑棋但是并不相连,不能说是黑方胜,需将number置为0
if(board[i][line]=="○"|| board[i][line]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
第五个方法结果展示
第六个方法的代码
// 实现自右上--->左下判断黑棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法
public static void BlackTopRightToBottomLeft_Row(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候行row总是从最后一列开始
for(int line=BoardSize-1;line>=0;line--)
// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近左上
for(int row=0,j=line;row<line;j--,row++)
// 如果此阶梯中有元素为黑棋则number+1
if(board[row][j]=="●")
number++;
// 当number为5的时候则黑棋一方的胜
while(number==5)
System.out.println("黑棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个黑棋但是并不相连,不能说是黑方胜,需将number置为0
if(board[row][j]=="○"|| board[row][j]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
第六个方法结果展示
后面是白棋的判断方法的代码,与黑棋一样
// 实现行判断白棋
public static void WhiteRow(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 一行一行的读取数组中的元素
for(int row=0;row<BoardSize;row++)
for(int line=0;line<BoardSize;line++)
// 如果此行中有元素为白棋则number+1
if(board[row][line]=="○")
number++;
// 当number为5的时候则白棋一方的胜
while(number==5)
System.out.println("白棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此行中虽有五个白棋但是并不相连,不能说是白棋方胜,需将number置为0
if(board[row][line]=="●"|| board[row][line]=="+")
number=0;
// 每一行读取数组元素后未能分出胜负需要将number置为0
number=0;
// 实现列判断白棋
public static void WhiteLine(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 一列一列的读取数组中的元素
for(int line=0;line<BoardSize;line++)
for(int row=0;row<BoardSize;row++)
// 如果此列中有元素为白棋则number+1
if(board[row][line]=="○")
number++;
// 当number为5的时候则白棋一方的胜
while(number==5)
System.out.println("白棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此列中虽有五个白棋但是并不相连,不能说是白棋方胜,需将number置为0
if(board[row][line]=="●"|| board[row][line]=="+")
number=0;
// 每一列读取数组元素后未能分出胜负需要将number置为0
number=0;
// 实现自左上--->右下判断白棋,每次第二个for循环最开始列不变,阶梯逼近左下的方法
public static void WhiteTopLeftToBottomRight_Line(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候列line总是从0开始
for(int row=0;row<BoardSize;row++)
// 执行这个for循环的时候每一次行+1,列+1,数据元素呈现阶梯分布,阶梯逼近左下
for(int line=0,i=row;line<BoardSize-row;line++,i++)
// 如果此阶梯中有元素为白棋则number+1
if(board[i][line]=="○")
number++;
// 当number为5的时候则白棋一方的胜
while(number==5)
System.out.println("白棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[i].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个白棋但是并不相连,不能说是黑白方胜,需将number置为0
if(board[i][line]=="●"|| board[i][line]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
// 实现自左上--->右下判断白棋,每次第二个for循环最开始行不变,阶梯逼近右上的方法
public static void WhiteTopLeftToBottomRight_Row(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候行row总是从0开始
for(int line=0;line<BoardSize;line++)
// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右上
for( int row=0,i=line;row<BoardSize-line;row++,i++)
// 如果此阶梯中有元素为白棋则number+1
if(board[row][i]=="○")
number++;
// 当number为5的时候则白棋一方的胜
while(number==5)
System.out.println("白棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个白棋但是并不相连,不能说是白方胜,需将number置为0
if(board[row][i]=="●"|| board[row][i]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
// 实现自右上--->左下判断白棋,每次第二个for循环最开始列不变,阶梯逼近右下的方法
public static void WhiteTopRightToBottomLeft_Line(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候列line总是从最后一列开始
for(int row=0;row<BoardSize;row++)
// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近右下
for(int line=BoardSize-1,i=row;line>=0+row;line--,i++)
if(board[i][line]=="○")
// 如果此阶梯中有元素为白棋则number+1
number++;
// 当number为5的时候则白棋一方的胜
while(number==5)
System.out.println("白棋方胜!");
//胜出后输出棋盘
for ( row = 0; row < board.length; row++)
for ( line = 0; line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个白棋但是并不相连,不能说是白方胜,需将number置为0
if(board[i][line]=="●"|| board[i][line]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
// 实现自右上--->左下判断白棋,每次第二个for循环最开始行不变,阶梯逼近左上的方法
public static void WhiteTopRightToBottomLeft_Row(int BoardSize, String[][] board)
// 先定义一个数number,以此来计数
int number=0;
// 每当执行第二个for循环的时候行row总是从最后一列开始
for(int line=BoardSize-1;line>=0;line--)
// 执行这个for循环的时候每一次列+1,行+1,数据元素呈现阶梯分布,阶梯逼近左上
for(int row=0,j=line;row<line;j--,row++)
// 如果此阶梯中有元素为白棋则number+1
if(board[row][j]=="○")
number++;
// 当number为5的时候则白棋一方的胜
while(number==5)
System.out.println("白棋方胜!");
//胜出后输出棋盘
for ( row = 0;row < board.length; row++)
for ( line = 0;line < board[row].length; line++)
System.out.print( board[row][line]+" ");
System.out.println();
//胜后退出系统
System.exit(0);
// 如果此阶梯中虽有五个白棋但是并不相连,不能说是白方胜,需将number置为0
if(board[row][j]=="●"|| board[row][j]=="+")
number=0;
// 每当第二个for循环完毕后需要将number置为0
number=0;
java五子棋(人机版),昨天买的棋子今天就用不上了(代码片段)
Java五子棋,老程序员也花了3天作者简介作者名:编程界明世隐简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广... 查看详情
基于easyx的五子棋小游戏。(代码片段)
EasyX下载地址EasyX下载地址//五子棋.cpp:定义控制台应用程序的入口点。//#include"stdafx.h"#include<graphics.h>#include<conio.h>#include<stdio.h>#include<windows.h>#include<time.h>#include< 查看详情
java项目开发----五子棋(代码片段)
java项目开发(一)----五子棋项目(一)------五子棋开发思路五子棋的要素两个用户黑白棋子棋盘游戏的几个界面---登录、模式选择、胜负弹窗、游戏界面游戏规则游戏窗口的创建创建窗口对象窗口创建思路代码... 查看详情
《游戏学习》java实现连珠五子棋完整代码(代码片段)
游戏介绍五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。五子棋有两种玩法。玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。玩... 查看详情
《游戏学习》java实现连珠五子棋完整代码(代码片段)
游戏介绍五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。五子棋有两种玩法。玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜。玩... 查看详情
c语言小项目--五子棋小游戏(通用版)(代码片段)
目录1、game.h2、test.c3、game.c4、游戏功能详解(1)、棋盘初始化(2)、棋盘的打印(3)、玩家下棋(4)、电脑下棋(5)、判断游戏输赢(6)、判断棋盘是否满了1、game.hgame.h:自定义头文件,用于:库函数头文件的包含符号与结构的... 查看详情
c语言项目:一天时间写出《五子棋项目》,包含源码分享(代码片段)
一天时间开发出老师说需要一星期的C语言游戏:五子棋项目!给大家分享一下~为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验。所以在编程初期选择了控制台小游戏《单机五... 查看详情
java初学者练习之五子棋游戏教程(附源码)(代码片段)
1.图形化界面的创建1.1创建JFrame窗体容器 1)JFrame窗体需要设置基本的大小、布局、默认的关闭方式,以及最重要的设置可见。1.2在JFrame上添加组件,用来绘制棋盘棋子和游戏操作。 1)棋盘棋子的... 查看详情
万字解析:带你走进五子棋(普通版)和三子棋的世界(c语言)(代码片段)
今天,我们来再来实现一个大家都不陌生的小项目:三子棋。1,三子棋1,思路分析写一个小项目,必不可少的是思路的构建。写一个游戏,我们首先需要一个菜单,这是最基本的,让用户来选择是... 查看详情
java五子棋(人机版),昨天买的棋子今天就用不上了(代码片段)
Java五子棋,老程序员也花了3天作者简介作者名:编程界明世隐简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广... 查看详情
c语言——五子棋游戏(代码片段)
...、作者遇到的坑点十、完整的代码一、前言本文将先介绍五子棋运行所需要的函数,最后串联成完整代码。我们需要实现的功能有:1.菜单menu函数 2.初始化棋盘I 查看详情
[教你做小游戏]用177行代码写个体验超好的五子棋(代码片段)
1.需求描述支持本地双人对战的五子棋游戏。对于刚下的一步棋,要有标记。要有提示:五联珠后提示谁赢了。支持重新开局。适配多种分辨率的屏幕。面对这样一个五子棋游戏的需求,你会怎么做呢?2.技术选型参考掘金文章... 查看详情
[教你做小游戏]《五子棋》怎么存棋局信息?(代码片段)
1.问题描述如果让你做个联机《五子棋》游戏,你会怎么存储棋盘上的棋子信息呢?我的意思是,根据你存储的这些信息,就可以知道:谁是黑棋?谁是白棋?现在游戏结束了吗?若游戏结束,谁赢了?若没结束,现在该谁下棋... 查看详情
游戏五子棋含matlab源码078期(代码片段)
...代码方式1:完整代码已上传我的资源:【游戏】五子棋【含Matlab源码078期】获取代码方式2:通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。获取代码方式3:通过订阅紫极... 查看详情
pythonpygame制作简单五子棋游戏(详细代码+解释)(代码片段)
这里只想简单演示下一个简单的五子棋界面和落子等操作,主要为了后面设计AI对战方便演示,AI算法后面设计吧,最近事太多了,,,,。希望本文有助于你制作自己期望的简单的五子棋。一、pygame初... 查看详情
用c++基础语句写一个五子棋游戏(代码片段)
(这是一个颜色会变化的呦) #include<iostream>usingnamespacestd;intb[20][20];intn;intm;voidqipan()system("cls");intk=1;for(intk=0;k<n;++k)for(intj=0;j<m;++j)cout<<"----";cout& 查看详情
基于javaswing五子棋小游戏设计和实现(代码片段)
订阅专栏获取源码前言: 五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,... 查看详情
基于javaswing五子棋小游戏设计和实现(代码片段)
订阅专栏获取源码前言: 五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。有关早期五子棋的文史资料与围棋有相似之处,... 查看详情