使用二维数组,实现五子棋功能

注意:我们使用的是纯面向过程的思想!!!

我们先来看一下棋盘长什么样

知道了模样,我们还需要知道程序需要哪些功能,根据这些功能写出相应的方法.那既然用到方法,我们需要确定有什么全局变量

    static String white = "☆";//白棋子static String black = "★";//黑棋子static String[][] qp = new String[15][15];//棋盘数组static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};//棋盘格线标识static String line = "十";//可下子位置

1.棋盘的初始化,init

首先棋盘肯定是要进行初始化,也就是在这个二维数组中存储数据,这个当然要需要用到二维数组的遍历来赋值,也就是二重循环.我们给这个方法命名为init.那需不需要初始化后直接打印.很明显不行,因为每下一个棋子都需要打印.所以还需要一个打印的方法

public static void init() {//棋盘初始化for (int i = 0; i < qp.length; i++) {for (int j = 0; j < qp[i].length; j++) {qp[i][j] = line;}}//此时得到的全是格子线for (int j = 0; j < qp.length; j++) {for (int k = 0; k < qp[j].length; k++) {if (k == qp[j].length - 1) {qp[j][k] = num[j];}if (j == qp.length - 1) {qp[j][k] = num[k];}}}//将格子线边界变成数字}

2.打印棋盘,print

这个就比较简单,直接遍历输出即可

public static void print() {//打印棋盘for (int i = 0; i < qp.length; i++) {for (int j = 0; j < qp[i].length; j++) {System.out.print(qp[i][j]);}System.out.println();}}

3.开始游戏,startGame

这里其实就可以说是主函数了,我们打印出棋盘以后,肯定要进行下子,首先肯定要注意的是下子的位置是否正确如果不正确那么就继续重新下.很明显是先执行再判断

判断下子位置是否合法

public static boolean checkPoint(int x, int y) {//判断棋子是否可以落子if (x<15 && y<15 && qp[x - 1][y - 1] == line ){//不能超出棋盘并且这个位置是"+"return true;}else return false;}

每下一次就需要判断输赢

这个比较麻烦,纯面向过程的话需要考虑三个方向

public static boolean isWin(int x, int y) {//判断输赢boolean a1 = Homework.ord(x,y);boolean a2 = Homework.abs(x,y);boolean a3 = Homework.sla(x,y);if(a1==true||a2==true||a3==true){//斜向横向纵向只要有一个成立就赢return true;}else{return false;}}

判断三个方向也很简单,思路是一样的.我们拿横向来说

首先下子.我们判断横向有没有五子连棋.只需要创造一个计数器.计数器的值初始为一(因为已经下了一个字).之后左边利用for循环减一,有相同的计数器就加一,没有就用break结束此循环.右边同理.只要循环下来计数器的值为5.那么就赢了.

public static boolean ord(int x,int y){//判断纵向有没有五子连棋int num = 1;for (int i = 1; x-1+i < qp.length; i++) {if(qp[x-1+i][y-1]==qp[x-1][y-1]){num += 1;}else{break;}}for (int i = 1; x-1-i >= 0; i++){if(qp[x-i-1][y-1]==qp[x-1][y-1]){num += 1;}else{break;}}if(num==5){return true;}else{return false;}}public static boolean abs(int x,int y){//判断横向有没有五子连棋int num = 1;for (int i = 1; y-1+i < qp.length; i++) {if(qp[x-1][y-1+i]==qp[x-1][y-1]){num ++;}else{break;}}for (int i = 1; y-1-i >= 0; i++){if(qp[x-1][y-1-i]==qp[x-1][y-1]){num ++;}else{break;}}if(num==5){return true;}else{return false;}}public static boolean sla(int x,int y){//判断斜向有没有五子连棋int num = 1;for (int i = 1; x-1+i< qp.length && y-1-i>=0; i++) {if(qp[x-1+i][y-1-i]==qp[x-1][y-1]){num ++;}else{break;}}for (int i = 1; y-1+i <qp[i].length && x-1-i>=0; i++){if(qp[x-1-i][y-1+i]==qp[x-1][y-1]){num ++;}else{break;}}if(num==5){return true;}else{num = 1;for (int i = 1; x-1+i < qp.length && y-1+i<qp[i].length; i++) {if(qp[x-1+i][y-1+i]==qp[x-1][y-1]){num ++;}else{break;}}for (int i = 1; x-1-i >=0 && y-1-i>=0; i++) {if(qp[x-1-i][y-1-i]==qp[x-1][y-1]){num ++;}}if(num==5){return true;}else{return false;}}}

!!!

!!!

!!!

这里当然还有一些细节,比如怎么让两人重复下子.或者说有人赢了怎么结束,这些细节方法都很简单,就不做过多强调.程序整体参下

import java.util.Scanner;public class Homework {static String white = "☆";static String black = "★";static String[][] qp = new String[15][15];static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};static String line = "十";static boolean check = true;public static void main(String[] args) {Homework.init();Homework.print();Homework.startGame();}public static void startGame() {//开始游戏int x=0,y=0;Scanner scanner = new Scanner(System.in);a:while (true) {do {System.out.println("请黑棋下子");System.out.println("请输入行");x = scanner.nextInt();System.out.println("请输入列");y = scanner.nextInt();check = Homework.checkPoint(x, y);} while (check == false);qp[x-1][y-1] = black;Homework.print();boolean win1 = Homework.isWin(x,y);if(win1==true){System.out.println("黑棋胜利");break a;}do{System.out.println("请白棋下子");System.out.println("请输入行");x = scanner.nextInt();System.out.println("请输入列");y = scanner.nextInt();check = Homework.checkPoint(x, y);}while (check == false);qp[x-1][y-1] = white;Homework.print();boolean win2 = Homework.isWin(x,y);if(win2==true){System.out.println("白棋胜利");break a;}}}public static boolean checkPoint(int x, int y) {//判断棋子是否可以落子if (x<15 && y<15 && qp[x - 1][y - 1] == line ){return true;}else return false;}public static boolean isWin(int x, int y) {//判断输赢boolean a1 = Homework.ord(x,y);boolean a2 = Homework.abs(x,y);boolean a3 = Homework.sla(x,y);if(a1==true||a2==true||a3==true){return true;}else{return false;}}public static boolean ord(int x,int y){//判断纵向有没有五子连棋int num = 1;for (int i = 1; x-1+i < qp.length; i++) {if(qp[x-1+i][y-1]==qp[x-1][y-1]){num += 1;}else{break;}}for (int i = 1; x-1-i >= 0; i++){if(qp[x-i-1][y-1]==qp[x-1][y-1]){num += 1;}else{break;}}if(num==5){return true;}else{return false;}}public static boolean abs(int x,int y){//判断横向有没有五子连棋int num = 1;for (int i = 1; y-1+i < qp.length; i++) {if(qp[x-1][y-1+i]==qp[x-1][y-1]){num ++;}else{break;}}for (int i = 1; y-1-i >= 0; i++){if(qp[x-1][y-1-i]==qp[x-1][y-1]){num ++;}else{break;}}if(num==5){return true;}else{return false;}}public static boolean sla(int x,int y){//判断斜向有没有五子连棋int num = 1;for (int i = 1; x-1+i< qp.length && y-1-i>=0; i++) {if(qp[x-1+i][y-1-i]==qp[x-1][y-1]){num ++;}else{break;}}for (int i = 1; y-1+i <qp[i].length && x-1-i>=0; i++){if(qp[x-1-i][y-1+i]==qp[x-1][y-1]){num ++;}else{break;}}if(num==5){return true;}else{num = 1;for (int i = 1; x-1+i < qp.length && y-1+i<qp[i].length; i++) {if(qp[x-1+i][y-1+i]==qp[x-1][y-1]){num ++;}else{break;}}for (int i = 1; x-1-i >=0 && y-1-i>=0; i++) {if(qp[x-1-i][y-1-i]==qp[x-1][y-1]){num ++;}}if(num==5){return true;}else{return false;}}}public static void init() {//棋盘初始化for (int i = 0; i < qp.length; i++) {for (int j = 0; j < qp[i].length; j++) {qp[i][j] = line;}}for (int j = 0; j < qp.length; j++) {for (int k = 0; k < qp[j].length; k++) {if (k == qp[j].length - 1) {qp[j][k] = num[j];}if (j == qp.length - 1) {qp[j][k] = num[k];}}}}public static void print() {//打印棋盘for (int i = 0; i < qp.length; i++) {for (int j = 0; j < qp[i].length; j++) {System.out.print(qp[i][j]);}System.out.println();}}
}

使用二维数组,实现五子棋功能相关推荐

  1. java二维数组矩阵_java使用二维数组开发五子棋

    主要使用到的技术: java基础语法 java面向对象思想 java数组,二维数组 java异常处理 主要步骤和思路: 1,制作一个棋盘类.棋盘类里面有行属性,列属性,二维数组属性. 有一个打印棋盘的 ...

  2. 利用二维数组编程实现功能:输入一个整数n(n不超过10),输出n行的杨辉三角形

    杨辉三角形的用处与构成 11幂次方的值 二项式系数 相加为2幂次方的值 构成为下一行数为上面临近的两个数相加 遇到的问题 该使用哪个数组 先赋值再输出还是边赋值边赋值 如何控制首位均为1 如何使输出变 ...

  3. 浅谈:稀疏数组与二维数组之间的转换

    学习笔记 二维数组简介 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩阵称为方阵.对 ...

  4. java二维数组模拟用户登录_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)...

    这里分享三道编程题, 下面是我个人的视频讲解我的解题思路以及代码运行演示https://www.zhihu.com/video/1253424180936724480 1. 编程实现以下需求: 定义一 ...

  5. 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)

    原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...

  6. 数组--如何通过【二维数组+稀疏数组】实现五子棋盘,并且保存记忆功能?

    一.应用场景 通过Java + 二维数组 + 稀疏数组实现一个五子棋盘功能,并且具有保存记忆功能. 二.实现原理 2.1 二维数组 大家都知道一维数组,不过一维数组的属于线性结构,而二维数组则属于非线 ...

  7. php 数组与数组之间去重,PHP开发中一维数组与二维数组去重功能实现教程

    本篇文章讲述了PHP实现一维数组与二维数组去重功能示例.希望对在php学习和开发的同学有所帮助! 数组中重复项的去除 一维数组的重复项: 使用array_unique函数即可,使用实例如下: ? $a ...

  8. php 二维数组中去重,PHP实现二维数组去重功能示例

    PHP实现二维数组去重功能示例 发布于 2017-08-07 21:05:17 | 68 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Prep ...

  9. C#泛型列表List实现二维数组的功能(令附C#泛型列表List基本用法总结)

    在决定使用 List<T> 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List<T> 类在大多数情况下执行得更好并且是类型安全的. 如果对 List< ...

最新文章

  1. Spring MVC POST中文乱码解决方案
  2. java 做计算器 百度云_用Java做一个简单的计算器
  3. 当IntelliJ IDEA2020.1遇上JDK14:所有美好环环相扣
  4. #pragma warning(pop) 和 #pragma warning(push)的作用
  5. 面象对象设计6大原则之四:接口隔离原则
  6. PAT——1018. 锤子剪刀布
  7. (最小生成树)prim算法
  8. LINQ to DataSet
  9. 【原创】.Net4.0中使用Razor制作多风格网站
  10. js中的date操作
  11. WMI 脚本入门:第二部分 (MSDN)
  12. 去除点击链接时出现的虚线框
  13. 优化设计二维鲍威尔c语言,潘隆武-B0310524-机制09-5-鲍威尔法.doc
  14. 三种非递归遍历二叉树的方法
  15. cisco路由器设置时间同步
  16. 年金系数用计算机怎么算,年金系数是什么?怎么计算?
  17. 音视频入门系列-音视频基础知识篇(录播、点播、直播)
  18. 三菱系统四轴正反转参数_三菱第四轴参数
  19. 2018/02/12
  20. pytorch中torch.isnan()和torch.isfinite()

热门文章

  1. MFC 获取外网IP地址和MAC地址
  2. 一键还原奥运版_大P星名册“神的火焰”迈克尔乔丹(92版)
  3. Linux学习--09
  4. 安徽省计算机二级vpf,计算机二级VPF 表单试题
  5. float之文字环绕问题
  6. k8s kubectl expose命令使用详解
  7. Storm自定义调度器实现--DirectScheduler
  8. 中国石油大学《化工设计概论》第三阶段在线作业
  9. 智能语音助手的工作原理是?先了解自然语言处理(NLP)与自然语言生成(NLG)
  10. 夏日保鲜需知 这些东西不能放冰箱