五子棋
最编程
2024-06-26 12:24:16
...
【直播预告】大模型会取代程序员吗?”
五子棋的编写
分析:
构成元素:
欢迎界面 下棋界面 结束界面
棋子---黑+白两种棋子
棋盘--动态棋盘--15X15 32X32
下棋--两个用户切换
已经下过的地方不能重复下
判断五子相连规则
横向 纵向 斜向[左右]
业务流程分析:
1.创建一个类
2.主函数--程序入口
3.欢迎界面
4.菜单选择
新手入门
选择菜单
开始游戏
生成棋盘
提示用户操作
形成五子相连--新手指导结束
返回菜单
退出新手入门模块
结束当前模块回到主菜单
玩家对抗
模块欢迎界面
选择菜单
开始游戏
生成棋盘
切换用户
开始下棋
判断是否连城五子
如果是--结束游戏
如果不是继续游戏
结束此模块
人机对战【类似玩家对抗】
import java.util.Scanner;
public class WZQ{
public static void main(String[] args){
//获取对象
Scanner scan=new Scanner(System.in);
//欢迎界面
System.out.println("##########################################");
System.out.println("#######==========================#########");
System.out.println("#######==欢迎来到小王五子棋游戏==#########");
System.out.println("#######==========================#########");
System.out.println("##########################################");
//控制程序一直执行
while(true){
//编写菜单
System.out.println("##########################################");
System.out.println("#### A 新手入门 B 玩家对抗 #####");
System.out.println("#### C 人机对战 其他 退出游戏 #####");
System.out.println("##########################################");
//提示用户输入信息
System.out.println("请输入菜单前面的字符进入对应模块:");
//键盘接收
String zmenu=scan.next();
//================菜单判断开始=============
//进行判断
if("A".equals(zmenu)){
//模块菜单
System.out.println("************欢迎进入新手入门***************");
}else if("B".equals(zmenu)){
//模块菜单
System.out.println("************欢迎进入玩家对抗***************");
//循环控制游戏的运行
while(true){
//菜单
System.out.println("****** Y 开始游戏 其他 回到主页 ******");
//提示用户输入
System.out.println("请输入您的操作选择:");
//接收输入的信息
String wmenu=scan.next();
//判断
if("Y".equals(wmenu)){
//定义变量
boolean kg=true;//开关状态
String name="王妍";
String qz="@";
//定义变量存储坐标
int x=0;
int y=0;
//控制器游戏结束
boolean gameover=false;
//=========显示棋盘===========
//动态输入一个数组确定棋盘的大小
//提示
System.out.println("请输入一个数字确定棋盘大小:");
//键盘接收
int qpsize=scan.nextInt();
//定义数组存储棋盘的信息
String[][] qipan=new String[qpsize][qpsize];
//添加一行标号
System.out.print(" ");
for(int shb=0;shb<qpsize;shb++){
//输出
System.out.print((char)('A'+shb)+" ");
}
//换行
System.out.println();
//使用+表示棋盘节点打印棋盘
for(int h=0;h<qpsize;h++){
//添加标号
System.out.print((char)('A'+h)+" ");
for(int l=0;l<qpsize;l++){//每一行数据
System.out.print("+"+" ");
//存入数组
qipan[h][l]="+";
}
//添加标号
System.out.print((char)('A'+h)+" ");
//换行
System.out.println();
}
//添加一行标号
System.out.print(" ");
for(int xib=0;xib<qpsize;xib++){
//输出
System.out.print((char)('A'+xib)+" ");
}
//换行
System.out.println();
while(true){//一直下棋 直到结束
//=======切换用户=========
//判断
if(kg){
name="小胖胖";
qz="@";
//切换开关
kg=false;
}else{
name="王悦";
qz="#";
//切换开关
kg=true;
}
//提示下棋
System.out.println("请示用户【"+name+"】输入坐标下棋:(例如:AB A-行号 B列号)");
while(true){//坐标输入
//接收用户下棋的坐标
String zb=scan.next();
//=======棋盘落子========
//判断
if(zb!=null&&zb!=""&&zb.length()==2){
//获取坐标
char[] zbs=zb.toCharArray();
//打印
y=zbs[0]-65;
x=zbs[1]-65;
//判断坐标是不在范围
if(x>=0&&x<qpsize&&y>=0&&y<qpsize){
//判断此位置是否有棋子
if("+".equals(qipan[y][x])){
//下棋:
qipan[y][x]=qz;
//结束下棋的循环
break;
}else{
//此处已经下了棋子
System.out.println("你输入的坐标处已经下过棋,请【"+name+"】重新输入:");
}
}else{
//不在范围
System.out.println("你输入的坐标超出棋盘范围,请【"+name+"】重新输入:");
}
}else{
//不合法
System.out.println("您输入的坐标不合法,请【"+name+"】重新输入:");
}
}//坐标输入的while
//===========================显示棋盘=================
//添加一行标号
System.out.print(" ");
for(int shb=0;shb<qpsize;shb++){
//输出
System.out.print((char)('A'+shb)+" ");
}
//换行
System.out.println();
//使用+表示棋盘节点打印棋盘
for(int h=0;h<qpsize;h++){
//添加标号
System.out.print((char)('A'+h)+" ");
for(int l=0;l<qpsize;l++){//每一行数据
//显示内容
System.out.print(qipan[h][l]+" ");
}
//添加标号
System.out.print((char)('A'+h)+" ");
//换行
System.out.println();
}
//添加一行标号
System.out.print(" ");
for(int xib=0;xib<qpsize;xib++){
//输出
System.out.print((char)('A'+xib)+" ");
}
//换行
System.out.println();
//========================显示棋盘结束=======================
//===================判断是否结束游戏====================
//赢了
//横向五子相连
//获取最大最小横坐标
int minx1=0;//一行形成五子最小可能坐标
int maxx1=0;//一行形成五子最大可能坐标
int my1=y;//行
int count1=0; //计数
//判断
if(x-4<0){
minx1=0;
}else{
minx1=x-4;
}
if(x+4<qpsize){
maxx1=x+4;
}else{
maxx1=qpsize-1;
}
//遍历最大和最小极限范围内是否有五个一样的棋子
for(int m=minx1;m<=maxx1;m++){
//判断是否有五个棋子相连
if(qipan[my1][m].equals(qz)){
//计数器++
count1++;
}else{
//重新统计
count1=0;
}
//判断计数器
if(count1==5){
gameover=true;
//结束循环
break;
}
}
//纵向五子相连
//获取最大最小纵坐标
int miny1=0;//形成五子最小可能坐标
int maxy1=0;//形成五子最大可能坐标
int mx1=x;//列
int count2=0; //计数
//判断
if(y-4<0){
miny1=0;
}else{
miny1=y-4;
}
if(y+4<qpsize){
maxy1=y+4;
}else{
maxy1=qpsize-1;
}
//遍历最大和最小极限范围内是否有五个一样的棋子
for(int m=miny1;m<=maxy1;m++){
//判断是否有五个棋子相连
if(qipan[mx1][m].equals(qz)){
//计数器++
count2++;
}else{
//重新统计
count2=0;
}
//判断计数器
if(count2==5){
gameover=true;
//结束循环
break;
}
}
//斜向五子相连【四种】
//定义坐标
int minxx1=0;//斜向x最小值
int minxy1=0;//斜向Y最小值
int maxxx1=0;//斜向x最大值
int maxxy1=0;//斜向Y最大值
int count3=0;//计数器
//判断最小坐标
if(x-4>=0&&y-4>=0){
//最小
minxx1=x-4;
minxy1=y-4;
}else if(x-4>=0&&y-4<0){
minxy1=0;
minxx1=x-y;
}else if(x-4<0&&y-4>=0){
minxx1=0;
minxy1=y-x;
}else{
if(x>=y){
minxx1=x-y;
minxy1=0;
}else{
minxx1=0;
minxy1=y-x;
}
}
//最大可能坐标
if(x+4<qpsize&&y+4<qpsize){
maxxx1=x+4;
maxxy1=y+4;
}else if(x+4<qpsize&&y+4>=qpsize){
maxxx1=x+(qpsize-1-y);
maxxy1=qpsize-1;
}else if(x+4>=qpsize&&y+4<qpsize){
maxxy1=y+(qpsize-1-x);
maxxx1=qpsize-1;
}else{
if(x>=y){
maxxx1=x+(qpsize-1-y);
maxxy1=qpsize-1;
}else{
maxxy1=y+(qpsize-1-x);
maxxx1=qpsize-1;
}
}
//遍历判定
for(int m=0; m<=maxx1-minxx1;m++){
//判断棋子
if(qipan[minxy1+m][minxx1+m].equals(qz)){
//计数
count3++;
}else{
count3=0;
}
//判断是否五子相连
if(count3==5){
gameover=true;
//结束
break;
}
}
//定义五子相连斜向【二】
int minxx2=0;//斜向x最小值
int minxy2=0;//斜向Y最小值
int maxxx2=0;//斜向x最大值
int maxxy2=0;//斜向Y最大值
int count4=0;//计数器
//判断最小坐标
//平局---棋盘满了---且不形成五子相连---遍历棋盘如果没有+号
//======游戏结束======
if(gameover){
//输出
System.out.println("==========游戏结束==========");
System.out.println("==恭喜【"+name+"】赢了此局游戏==");
//结束循环
break;
}
}//控制下棋的while结束
}else{
//结束此模块回到主页
System.out.println("您退出了玩家对抗模块!!!!返回主页!!!!");
//结束当前循环
break;
}
}//玩家对象菜单while的结束
}else if("C".equals(zmenu)){
//模块菜单
System.out.println("************欢迎进入人机对战***************");
}else{
//提示结束游戏
System.out.println("【【【【【您是否需要离开五子棋游戏?如果是输入y,不是输入其他】】】】】");
//接盘接收
String gover=scan.next();
//判断
if("y".equals(gover)){
//输出
System.out.println("【】【】您已经退出游戏,欢迎下次再来!!【】【】");
//结束循环
break;
}
}
//================菜单判断结束=============
}//主菜单while循环结束
}
}
import java.util.Scanner;
public class WZQ{
public static void main(String[] args){
//获取对象
Scanner scan=new Scanner(System.in);
//欢迎界面
System.out.println("##########################################");
System.out.println("#######==========================#########");
System.out.println("#######==欢迎来到小王五子棋游戏==#########");
System.out.println("#######==========================#########");
System.out.println("##########################################");
//控制程序一直执行
while(true){
//编写菜单
System.out.println("##########################################");
System.out.println("#### A 新手入门 B 玩家对抗 #####");
System.out.println("#### C 人机对战 其他 退出游戏 #####");
System.out.println("##########################################");
//提示用户输入信息
System.out.println("请输入菜单前面的字符进入对应模块:");
//键盘接收
String zmenu=scan.next();
//================菜单判断开始=============
//进行判断
if("A".equals(zmenu)){
//模块菜单
System.out.println("************欢迎进入新手入门***************");
}else if("B".equals(zmenu)){
//模块菜单
System.out.println("************欢迎进入玩家对抗***************");
//循环控制游戏的运行
while(true){
//菜单
System.out.println("****** Y 开始游戏 其他 回到主页 ******");
//提示用户输入
System.out.println("请输入您的操作选择:");
//接收输入的信息
String wmenu=scan.next();
//判断
if("Y".equals(wmenu)){
//定义变量
boolean kg=true;//开关状态
String name="王妍";
String qz="@";
//定义变量存储坐标
int x=0;
int y=0;
//控制器游戏结束
boolean gameover=false;
//=========显示棋盘===========
//动态输入一个数组确定棋盘的大小
//提示
System.out.println("请输入一个数字确定棋盘大小:");
//键盘接收
int qpsize=scan.nextInt();
//定义数组存储棋盘的信息
String[][] qipan=new String[qpsize][qpsize];
//添加一行标号
System.out.print(" ");
for(int shb=0;shb<qpsize;shb++){
//输出
System.out.print((char)('A'+shb)+" ");
}
//换行
System.out.println();
//使用+表示棋盘节点打印棋盘
for(int h=0;h<qpsize;h++){
//添加标号
System.out.print((char)('A'+h)+" ");
for(int l=0;l<qpsize;l++){//每一行数据
System.out.print("+"+" ");
//存入数组
qipan[h][l]="+";
}
//添加标号
System.out.print((char)('A'+h)+" ");
//换行
System.out.println();
}
//添加一行标号
System.out.print(" ");
for(int xib=0;xib<qpsize;xib++){
//输出
System.out.print((char)('A'+xib)+" ");
}
//换行
System.out.println();
while(true){//一直下棋 直到结束
//=======切换用户=========
//判断
if(kg){
name="小胖胖";
qz="@";
//切换开关
kg=false;
}else{
name="王悦";
qz="#";
//切换开关
kg=true;
}
//提示下棋
System.out.println("请示用户【"+name+"】输入坐标下棋:(例如:AB A-行号 B列号)");
while(true){//坐标输入
//接收用户下棋的坐标
String zb=scan.next();
//=======棋盘落子========
//判断
if(zb!=null&&zb!=""&&zb.length()==2){
//获取坐标
char[] zbs=zb.toCharArray();
//打印
y=zbs[0]-65;
x=zbs[1]-65;
//判断坐标是不在范围
if(x>=0&&x<qpsize&&y>=0&&y<qpsize){
//判断此位置是否有棋子
if("+".equals(qipan[y][x])){
//下棋:
qipan[y][x]=qz;
//结束下棋的循环
break;
}else{
//此处已经下了棋子
System.out.println("你输入的坐标处已经下过棋,请【"+name+"】重新输入:");
}
}else{
//不在范围
System.out.println("你输入的坐标超出棋盘范围,请【"+name+"】重新输入:");
}
}else{
//不合法
System.out.println("您输入的坐标不合法,请【"+name+"】重新输入:");
}
}//坐标输入的while
//===========================显示棋盘=================
//添加一行标号
System.out.print(" ");
for(int shb=0;shb<qpsize;shb++){
//输出
System.out.print((char)('A'+shb)+" ");
}
//换行
System.out.println();
//使用+表示棋盘节点打印棋盘
for(int h=0;h<qpsize;h++){
//添加标号
System.out.print((char)('A'+h)+" ");
for(int l=0;l<qpsize;l++){//每一行数据
//显示内容
System.out.print(qipan[h][l]+" ");
}
//添加标号
System.out.print((char)('A'+h)+" ");
//换行
System.out.println();
}
//添加一行标号
System.out.print(" ");
for(int xib=0;xib<qpsize;xib++){
//输出
System.out.print((char)('A'+xib)+" ");
}
//换行
System.out.println();
//========================显示棋盘结束=======================
//===================判断是否结束游戏====================
//赢了
//横向五子相连
//获取最大最小横坐标
int minx1=0;//一行形成五子最小可能坐标
int maxx1=0;//一行形成五子最大可能坐标
int my1=y;//行
int count1=0; //计数
//判断
if(x-4<0){
minx1=0;
}else{
minx1=x-4;
}
if(x+4<qpsize){
maxx1=x+4;
}else{
maxx1=qpsize-1;
}
//遍历最大和最小极限范围内是否有五个一样的棋子
for(int m=minx1;m<=maxx1;m++){
//判断是否有五个棋子相连
if(qipan[my1][m].equals(qz)){
//计数器++
count1++;
}else{
//重新统计
count1=0;
}
//判断计数器
if(count1==5){
gameover=true;
//结束循环
break;
}
}
//纵向五子相连
//获取最大最小纵坐标
int miny1=0;//形成五子最小可能坐标
int maxy1=0;//形成五子最大可能坐标
int mx1=x;//列
int count2=0; //计数
//判断
if(y-4<0){
miny1=0;
}else{
miny1=y-4;
}
if(y+4<qpsize){
maxy1=y+4;
}else{
maxy1=qpsize-1;
}
//遍历最大和最小极限范围内是否有五个一样的棋子
for(int m=miny1;m<=maxy1;m++){
//判断是否有五个棋子相连
if(qipan[mx1][m].equals(qz)){
//计数器++
count2++;
}else{
//重新统计
count2=0;
}
//判断计数器
if(count2==5){
gameover=true;
//结束循环
break;
}
}
//斜向五子相连【四种】
//定义坐标
int minxx1=0;//斜向x最小值
int minxy1=0;//斜向Y最小值
int maxxx1=0;//斜向x最大值
int maxxy1=0;//斜向Y最大值
int count3=0;//计数器
//判断最小坐标
if(x-4>=0&&y-4>=0){
//最小
minxx1=x-4;
minxy1=y-4;
}else if(x-4>=0&&y-4<0){
minxy1=0;
minxx1=x-y;
}else if(x-4<0&&y-4>=0){
minxx1=0;
minxy1=y-x;
}else{
if(x>=y){
minxx1=x-y;
minxy1=0;
}else{
minxx1=0;
minxy1=y-x;
}
}
//最大可能坐标
if(x+4<qpsize&&y+4<qpsize){
maxxx1=x+4;
maxxy1=y+4;
}else if(x+4<qpsize&&y+4>=qpsize){
maxxx1=x+(qpsize-1-y);
maxxy1=qpsize-1;
}else if(x+4>=qpsize&&y+4<qpsize){
maxxy1=y+(qpsize-1-x);
maxxx1=qpsize-1;
}else{
if(x>=y){
maxxx1=x+(qpsize-1-y);
maxxy1=qpsize-1;
}else{
maxxy1=y+(qpsize-1-x);
maxxx1=qpsize-1;
}
}
//遍历判定
for(int m=0; m<=maxx1-minxx1;m++){
//判断棋子
if(qipan[minxy1+m][minxx1+m].equals(qz)){
//计数
count3++;
}else{
count3=0;
}
//判断是否五子相连
if(count3==5){
gameover=true;
//结束
break;
}
}
//定义五子相连斜向【二】
int minxx2=0;//斜向x最小值
int minxy2=0;//斜向Y最小值
int maxxx2=0;//斜向x最大值
int maxxy2=0;//斜向Y最大值
int count4=0;//计数器
//判断最小坐标
//平局---棋盘满了---且不形成五子相连---遍历棋盘如果没有+号
//======游戏结束======
if(gameover){
//输出
System.out.println("==========游戏结束==========");
System.out.println("==恭喜【"+name+"】赢了此局游戏==");
//结束循环
break;
}
}//控制下棋的while结束
}else{
//结束此模块回到主页
System.out.println("您退出了玩家对抗模块!!!!返回主页!!!!");
//结束当前循环
break;
}
}//玩家对象菜单while的结束
}else if("C".equals(zmenu)){
//模块菜单
System.out.println("************欢迎进入人机对战***************");
}else{
//提示结束游戏
System.out.println("【【【【【您是否需要离开五子棋游戏?如果是输入y,不是输入其他】】】】】");
//接盘接收
String gover=scan.next();
//判断
if("y".equals(gover)){
//输出
System.out.println("【】【】您已经退出游戏,欢迎下次再来!!【】【】");
//结束循环
break;
}
}
//================菜单判断结束=============
}//主菜单while循环结束
}
}
上一篇: C 语言编程基础、简单的西洋双陆棋小游戏
下一篇: Linux 网络功能发送错误导致进程退出