五子棋人机大战(Java菜鸟学习笔记)

逻辑是:
1、绘制棋盘;
2、人机开始各执行一次操作,每进行一次操作就进行判断输赢
其中判断输赢主要分成四个方向,横向、纵向以及交叉向,此时可以画图来找规律实现代码(图就不展示了,画的乱七八糟了—)
代码如下(暴力解法):

package com.kaikeba.demo;import java.util.Scanner;public class Demo4 {//五子棋public static void main(String[] args) {int[][] nums = new int[16][16];//定义一个二维数组用来存放棋盘for(int i=0;i<16;i++) {for(int j=0;j<16;j++) {if(i==0) {nums[i][j] = j;}else if(j==0){nums[i][j] = i;}else {    nums[i][j] = 0;}System.out.print(nums[i][j]+"\t");//打印棋盘对应行的列}System.out.println();//换行}int heiCount = 0;//定义黑方棋子连续累计数int baiCount = 0;//定义白方棋子连续累计数while(heiCount!=5 && baiCount!=5 ) {//循环直到其中一个连续累计数为5就结束循环Scanner scanner = new Scanner(System.in);System.out.println("请黑方输入横坐标数:");int heiI = scanner.nextInt();System.out.println("请黑方输入纵坐标数:");int heiJ = scanner.nextInt();nums[heiI][heiJ] = 1;//黑方改变棋盘中对应位置for(int i=0;i<16;i++) {//打印黑方下完棋之后for(int j=0;j<16;j++) {System.out.print(nums[i][j]+"\t");}System.out.println();}    for(int i=1;i<16;i++) {//判断黑方对应行是否存在连续累计数为5的现象if(nums[heiI][i]==1) {heiCount++;if(heiCount==5) {    break;} }else{heiCount = 0;}}if(heiCount==5) {System.out.println("恭喜黑方胜出!");    break;} for(int j=1;j<16;j++) {//判断黑方对应列是否存在连续累计数为5的现象if(nums[j][heiJ]==1) {heiCount++;if(heiCount==5) {    break;}}else{heiCount = 0;}    }if(heiCount==5) {System.out.println("恭喜黑方胜出!"); break;} if(heiJ>heiI) {//纵坐标大于横坐标,判断黑方交叉方向是否存在累计连续数为5的现象for(int i=1;i<=15-(heiJ-heiI);i++) {if(nums[i][i+(heiJ-heiI)]==1) {heiCount++;if(heiCount==5) { break;} }else {heiCount=0;}}if(heiCount==5) {System.out.println("恭喜黑方胜出!"); break;}for(int i=1;i<=(heiI+heiJ)-1;i++) {if(nums[i][heiI+heiJ-i]==1) {heiCount++; if(heiCount==5) { break;}}else {heiCount=0;}} }else {//纵坐标小于等于横坐标,判断黑方交叉方向是否存在累计连续数为5的现象for(int i=1;i<=15-(heiI-heiJ);i++) {if(nums[i][heiI-heiJ+i]==1) {heiCount++;  if(heiCount==5) { break;}}else {heiCount=0;}}if(heiCount==5) {System.out.println("恭喜黑方胜出!");  break;}         for(int i=1;i<=(heiI+heiJ)-1;i++) {if(nums[i][heiI+heiJ-i]==1) {heiCount++;    if(heiCount==5) { break;}}else {heiCount=0;}} }if(heiCount==5) {System.out.println("恭喜黑方胜出!");    break;}         System.out.println("请白方输入横坐标数:");int baiI = scanner.nextInt();System.out.println("请白方输入纵坐标数:");int baiJ = scanner.nextInt();nums[baiI][baiJ] = 2;//白方改变棋盘中对应位置for(int i=0;i<16;i++) {for(int j=0;j<16;j++) {System.out.print(nums[i][j]+"\t");}System.out.println();}   //白方下完棋后打印棋盘for(int i=1;i<16;i++) {//判断白方对应行是否存在连续累计数为5的现象if(nums[baiI][i]==2) {baiCount++;if(baiCount==5) {break;}}else{baiCount = 0;}}if(baiCount==5) {System.out.println("恭喜白方胜出!"); break;}for(int j=1;j<16;j++) {//判断白方对应列是否存在连续累计数为5的现象if(nums[j][baiJ]==2) {baiCount++;if(baiCount==5) {break;}}else{baiCount = 0;}}if(baiCount==5) {System.out.println("恭喜白方胜出!");  break;}if(baiJ>baiI) {//纵坐标大于横坐标,白方交叉方向是否存在连续累计数为5的现象for(int i=baiJ-baiI+1;i<=15-(baiJ-baiI);i++) {if(nums[i][i+(baiJ-baiI)]==1) {baiCount++;if(baiCount==5) { break;} }else {baiCount=0;}}if(baiCount==5) {System.out.println("恭喜白方胜出!"); break;}for(int i=1;i<=(baiI+baiJ)-1;i++) {if(nums[i][baiI+baiJ-i]==1) {baiCount++; if(baiCount==5) { break;}}else {baiCount=0;}} }else {//纵坐标小于横坐标,白方交叉方向是否存在连续累计数为5的现象for(int i=1;i<=15-(baiI-baiJ);i++) {if(nums[i][baiI-baiJ+i]==1) {baiCount++;  if(baiCount==5) { break;}}else {baiCount=0;}}if(baiCount==5) {System.out.println("恭喜白方胜出!");  break;}         for(int i=1;i<=(baiI+baiJ)-1;i++) {if(nums[i][baiI+baiJ-i]==1) {baiCount++;    if(baiCount==5) { break;}}else {baiCount=0;}} }if(baiCount==5) {System.out.println("恭喜白方胜出!");    break;}         }       }}

写完代码自个儿玩了一小会,烦的就是要自己一次次输入坐标,仅供参考。

五子棋人机大战(Java菜鸟学习笔记)相关推荐

  1. 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)

    菜鸟学习笔记:Java提升篇12(Java动态性2--动态编译.javassist字节码操作) Java的动态编译 通过脚本引擎执行代码 Java字节码操作 JAVAssist的简单使用 常用API ...

  2. 菜鸟学习笔记:Java提升篇11(Java动态性1——注解与反射)

    Java提升篇11(Java其它高级特性--注解与反射) 注解(Annotation) JDK内置注解 自定义注解 元注解(meta-annotation) 反射(reflection) 动态语言 反 ...

  3. 菜鸟学习笔记:Java提升篇10(网络2——UDP编程、TCPSocket通信、聊天室案例)

    菜鸟学习笔记:Java提升篇10(网络2--UDP编程.TCPSocket通信) UDP编程 TCP编程(Socket通信) 单个客户端的连接 多个客户端的连接(聊天室案例) UDP编程 在上一篇中讲 ...

  4. 菜鸟学习笔记:Java提升篇9(网络1——网络基础、Java网络编程)

    菜鸟学习笔记:Java提升篇9(网络1--网络基础.Java网络编程) 网络基础 什么是计算机网络 OS七层模型 Java网络编程 InetAddress InetSocketAddress URL类 ...

  5. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)

    菜鸟学习笔记:Java提升篇8(线程2--线程的基本信息.线程安全.死锁.生产者消费者模式.任务调度) 线程的基本信息 线程同步 线程安全 死锁 生产者消费者模式 任务调度(了解) 线程的基本信息 J ...

  6. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)

    菜鸟学习笔记:Java IO流2--其他流 字节数组输入输出流 数据类型处理流 基本数据类型 引用类型 打印流 System.in.System.out.System.err 随机流RandomAcc ...

  7. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

  8. 菜鸟学习笔记:Java提升篇4(容器4——Collections工具类、其他容器)

    菜鸟学习笔记:Java容器4--Collections工具类.其他容器 Collections工具类 容器其他知识点 队列Queue Enumeration接口 Hashtable Propertie ...

  9. 菜鸟学习笔记:Java提升篇3(容器3——泛型、排序)

    菜鸟学习笔记:Java容器3--泛型.排序 泛型 泛型类 泛型接口 泛型方法 泛型继承 通配符"?" 泛型知识点补充 容器排序 Comparable接口与compareTo方法 C ...

最新文章

  1. graphviz绘制决策树
  2. 索引存储和散列存储(哈希)的区别吧
  3. 【转载】深度学习数学基础(二)~随机梯度下降(Stochastic Gradient Descent, SGD)
  4. CSDN-markdown编辑器使用方法
  5. python怎么创建方法_python中的__new__方法
  6. “云计算的前世今生·从阿里看云计算”内蒙古师范大学刘晨旭博士专题报告会顺利召开...
  7. 前端学习(702):while循环
  8. html5登录界面源代码_最新版本尤娜博客已更新源代码(速拿!!!)
  9. 杂:(4)NE555
  10. 操作系统期末复习【超实用】
  11. 彻底关闭Windows更新
  12. C语言调试教程总结(以visual studio和Dev C++为例)
  13. 回忆--上海滩奋斗的日子
  14. 较为精细的陆地和海洋掩膜
  15. 找不到该项目 请确认该项目的位置_裕同拟在上海投7亿建包装新项目;可回收、可再用、可降解的生物基涂层雪糕包装来了;利安德巴塞尔美国50万吨/年PE新装置试车...
  16. HUAWEI PAP认证
  17. 游戏硬件负载测试软件,Charlemagne(硬件测试软件)
  18. 三·八节,菊厂程序员用“运动轨迹绘制”向女神表白
  19. mysql调优之sql调优
  20. 绘声绘影——视影成双(2)

热门文章

  1. 异同移动平均线原理(macd)
  2. 如何在微搭低代码平台自定义组件
  3. 计算机网络自顶向下第一章知识点总结(上)
  4. 生成学习算法.高斯判别分析(GDA).GDA与Logistic模型
  5. Docker 入门终极指南,这是我见过最好的教程!
  6. linux修改英文设置密码,linux 如何修改passwd的密码 设置密码
  7. 数字化经济带领各行各业迎来碧海蓝天
  8. 大数据论文_03_BigTable(个人总结)
  9. c语言编写一个程序计算某年某月有几天,c语言编写程序,输入某年某月,求该月的天数...
  10. 羽毛球规则之羽毛球场地尺寸(球场、网柱、球网)