简单五子棋问题,java实现
**题目要求:**实现一个控制台下五子棋的程序。用一个二维数组模拟一个15*15路的五子棋棋盘,把每个元素赋值位“┼”可以画出棋盘, “○”代表该交叉点下了一颗白棋子,“●”代表该交叉点下了一颗黑棋子。每次用户输入要下棋的坐标,然后程序显示出下完后的棋盘,默认黑子先行。
遇到问题:
不知道如何用代码实现判断哪一方先赢。
(内心os:在网上搜的结果给出的代码完成的功能太多了,我这种渣渣的初学者根本看不懂。)
--------------------分割线------------------------------9.21号---------------------------
采用了最简单的方法来完成,每输入一个点的坐标就进行遍历,看是否有五子相连的;一开始想不明白的问题有:不知道怎末判断是不是五子相连;把五子相连的判断函数写出来之后不知道main()函数怎末写了,每输入一个点坐标就进行判断,需要循环,循环条件是什莫呢?while(!judge(x,y))?当然不对,因为这时候都没有输入坐标怎末调用方法呢,一开始写的时候把输入黑子坐标及白子坐标分开来写成两个方法了,后来发现这样不行,因为main方法里就没有点的坐标了,这样judge方法也不能调用了,于是在main方法里定义了x和Y,然后输入点的坐标,用了一个t值来控制循环。
代码如下:
/*** 五子棋游戏,二维数组* 五子相连判断算法* 每输入一个点,就遍历判断一次输赢*/
package shiyan5;
import java.util.Scanner;
public class shiyan5 {public static String [][]arr;//全局变量public static final String BLACK_CHESS="●";public static final String WHITE_CHESS="○";//棋子public static void main(String [] args) {int x;int y;int t=0;init();while(t==0) {System.out.println("输入黑子坐标");Scanner sc=new Scanner(System.in);System.out.print("请输入x:");x=sc.nextInt();System.out.print("请输入y:");y=sc.nextInt();black(x,y);if(!judge(x,y)) {t=0;}else {t=1;}System.out.println("输入白子坐标");System.out.print("请输入x:");x=sc.nextInt();System.out.print("请输入y:");y=sc.nextInt();white(x,y);if(!judge(x,y)) {t=0;}else {t=1;}}}/*** 对棋盘进行初始化*/public static void init() {arr=new String[15][15];for(int i=0;i<arr.length;i++) {for(int j=0;j<arr[i].length;j++) {arr[i][j]="+";}}}public static void show() {for(int i=0;i<arr.length;i++) {for(int j=0;j<arr[i].length;j++) {System.out.print(" "+arr[i][j]);}System.out.println();}}/** 输入黑子坐标*/public static void black(int x,int y) {arr[x][y]=BLACK_CHESS;show();}/** 输入白子的坐标*/public static void white(int x,int y) {arr[x][y]=WHITE_CHESS;show();}/** 判断输赢*/public static boolean judge(int x,int y) {int i;int j;int count=0;//计数int winflag=1;//垂直方向//向上读取for(i=x-1,j=y;i>=0&&count++<5;i--) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}//向下读取count=0;for(i=x+1,j=y;i<15&&count++<5;i++) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}count=0;if(winflag>=5) {System.out.println(arr[x][y]+"胜利");return true;}else {winflag=1;}//水平方向//向右读取for(i=x,j=y+1;j<15&&count++<5;j++) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}count=0;//向左读取for(i=x,j=y-1;j>=0&&count++<5;j--) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}count=0;if(winflag>=5) {System.out.println(arr[x][y]+"胜利");return true;}else {winflag=1;}//主对角线方向//右下for(i=x+1,j=y+1;i<15&&j<3&&count++<5;i++,j++) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}count=0;//左上for(i=x-1,j=y-1;i>=0&&j>=0&&count++<5;i--,j--) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}count=0;if(winflag>=5) {System.out.println(arr[x][y]+"胜利");return true;}else {winflag=1;}//斜对角线方向//右上for(i=x-1,j=y+1;i>=0&&j<15&&count++<5;i--,j--) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}count=0;for(i=x+1,j=y-1;i<15&&y>=0&&count++<5;i++,j--) {if(arr[x][y].equals(arr[i][j])) {winflag++;}else {break;}}count=0;if(winflag>=5) {System.out.println(arr[x][y]+"胜利");return true;}else {winflag=1;}return false;//所有方向读取完,没有}}
---------------------分割线------------------------------------------
学习java的路刚刚开始,要继续加油呀,
2019.9.21
相关文章:

Singleton 单例模板
1 // singleton.h2 3 #ifndef SINGLETON_H4 #define SINGLETON_H5 6 // 单例基类模板7 template <class T>8 class Singleton9 { 10 public: 11 static T& give_me() 12 { 13 static T s_inst; 14 return s_inst; 15 } 16 17 private: …

Oracle 7.3.4 for OpenServer 5 装配
起原:网海拾贝 1.建立oracle用户、dba组;2.调整系统中央参数:#./idtune SHMMAX 409600000#./idtune SEMMNI 153.装配SCO补丁文件 oss459A,重新毗连中央并重新启动:#/etc/conf/cf.d/link_unix -y#init 6 4.编纂oracl…

sql server中的hash应用优化
sql server很多地方用到hash,计划缓存查找,hash连接,hash聚合等。 hash查找mssql很多设计中都应用了,不过我们能在开发设计中,也可以利用这个特性。 将如果有需求对大文本进行完全匹配,比如查找产品型号&am…

JAVA猴子选大王问题
题目要求 猴子选大王。输入猴子的个数n,所有的猴子从1-n编号排成一圈,从1号猴子开始数数,数到3的倍数猴子被淘汰,最后剩下的是大王。输出是大王的猴子的编号(提示:使用数组,每个数组元素相当于一…

POJ 1185 炮兵阵地 (状压DP)
炮兵阵地Time Limit: 2000MS Memory Limit: 65536KTotal Submissions: 14869 Accepted: 5575Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示)…

不雅测发挥分析Android在美智能机市场凌驾黑莓及苹果
网易科技讯 3月4日动静,根据尼尔森公司比来宣布的陈诉发挥分析,Android操纵体系以29%的市占率在美国智好手机市场凌驾黑莓(27%)和苹果(27%)。其中,宏达电占12%,摩托罗拉占10%,三星占5%。但从厂商角度来看,苹…

Java基础-常量,变量,成员变量,局部变量
在java中,数据是以常量和变量两种方法形式进行存储和表示的(实际上,所有程序的数据都是这两种形式)。 变量 变量代表程序的状态。程序通过改变变量的值来改变整个程序的状态,或者说得更大一些,也就是实现程…
把eclipse从英文调整为中文
鼠标右键单击桌面上的快捷方式,选择文件所在位置 选择配置设置 eclipse.ini 在最后加上 -Duser.languageen 然后重启eclipse即可

关系数据理论中的范式
标准化表示从你的数据存储中移去数据冗余(redundancy)的过程。如果数据库设计达到了完全的标准化,则把所有的表通过关键字连接在一起时,不会出现任何数据的复本(repetition)。标准化的优点是明显的,它避免了数据冗余,自然就节省了…

无法在证书存储区中找到清单签名证书的解决办法
以前的一个项目今天打开忽然提示说“无法在证书存储区中找到清单签名证书”,很郁闷,不知道怎么回事。最好在 工程属性里面--签名--为Clickonce清单签名 去掉 。再次生成居然成功了。不知道具体什么原因引起…

Linux Centos 上一些常用的命令
1、查看端口被哪个进程占用 netstat -lnp | grep <端口号> 2、查看某个进程号详细信息 ps <进程号> 3、检查指定服务是否开启(例如 telnet) chkconfig --list | grep telnet chkconfig iptables on (打开某个服务器自启动&#…
eclipse提示在***类中找不到main方法
可能是因为注释加的太多了,在代码最开始的时候 这时候,把注释删掉就可以了 就像这样,这时候不要惊慌,先看一下是不是注释太多了,如果不是的话,请百度搜索解决办法

【随记】动态调用web服务
通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务。这样是使工作简单了,但是却和提供Web服务的URL、方法名、参数绑定在一起了,这是VS.NET自动…

在博客中加入“花絮”效果
在博客中加入Snap Shots Snap Shots表示“花絮”的意思,在博客中可以使用Snap Shots来添加“花絮”效果。先演示一遍效果,看是否能用:http://www.cnblogs.com/psunny内部的链接Snap Shots效果不可用 http://www.google.cn外部的链接Snap Shot…

phonegap调用摄像头
phonegap的HTML5的代码 是通用的 自己写了个 可是发现 在安卓机上市可以实现拍照的 但是iOS上却不行 这是为什么 我一直不解 document.addEventListener("deviceready", onDeviceReady, false); function onDeviceReady() { document.addEventListener(&quo…

关于JDBC中的 PreparedStatement 的使用讲解
**关于JDBC中的 PreparedStatement 的使用讲解**TOC 文章转载于博客 https://www.cnblogs.com/ysw-go/p/5459330.html 如有侵权,联系删除
SQLite数据转换成sql server数据
需要将SQLite数据库里的数据导入到SQL Server,在网上搜了好久,没有找到一个方便实用的方法。 经过本人的细心琢磨实验,终于让我给找到一好的方法:使用CSV文件作为介质来做转换。现在记录下来,一是小小庆祝一下…

Animation Override Controller动画重载器
假设游戏有很多个小人, 每一个人有2种动画站立,跑. 在通常情况下每一个人物都需要一个动画控制器。 有没有想过定义一个动画控制器 无须在定义全新的动画充值器实现每一个小人都播放自己的动画呢?没错Animation Oveeride Controller就是来解决这个问题的 1. 我们设…

java连接mysql8的坑
变化: 1.Class.forName(“com.mysql.cj.jdbc.Driver”); 2.connDriverManager.getConnection(“jdbc:mysql://localhost/数据库名字?serverTimezoneUTC”,“root”,“密码”); package chap01;import java.sql.Connection; import java.sql.DriverManager; import…

Oracle用户管理
创建用户create user–概述:在oracle中要创建一个新的用户使用 create user 语句,一般是具有dba(数据库管理员)的权限才能使用。–基本语法:create user 用户名 identified by 密码create user dbuser1 identified by dbuser1; 用户赋权grant–概述&…
UNIX网络编程--ioctl操作(十七)
一、概述 在本书中有两个地方都对这个函数进行了介绍,其实还有很多地方需要这个函数。ioclt函数传统上一直作为纳西而不适合归入其他精细定义类别的特性的系统接口。网络程序(特别是服务器程序)经常在程序启动执行后使用ioctl获取所在主机全部…

Servlert接口的doGet()、doPst()方法
Serlvet接口只定义了一个服务方法就是service,而HttpServlet类实现了该方法并且要求调用下列的方法之一: doGet:处理GET请求 doPost:处理POST请求 当发出客户端请求的时候,调用service 方法并传递一个请求和响应对象&a…

Web服务器 之 Apache 2.x 服务器中的URL重写的配置和应用
作者:北南南北来自:LinuxSir.Org摘要: 本文是关于Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的。能过URL别名规则,我们能看到一个干净的URL,比如可以重写为类似静态网页的地址。比…

杜拉拉的作者李可应北大就业指导中心之约写给大学生的一封信
本文是杜拉拉的作者李可应北大就业指导中心之约写给大学生的一封信。 北大的同学们,大家好:又到了临近毕业的日子,年复一年,在这个梦想周期性遭遇现实的季节,对一代又一代的莘莘学子而言,在精神上和身体上准…

VLC架构及流程分析
0x00 前置信息 VLC是一个非常庞大的工程,我从它的架构及流程入手进行分析,涉及到一些很细的概念先搁置一边,日后详细分析。 0x01 源码结构(Android Java相关的暂未分析) # build-android-arm-linux-androideabi/&#…

eclipse运行程序时只有run on server
最近写jsp的程序比较多,写java程序时,发现一点击运行按钮就开始启动服务器了, 这是因为没有写主函数的原因 注意这个问题

自动生成小学四则运算题目的程序.心得体会
http://t.cn/RAS67B0 源代码 #include<stdio.h> #include<stdlib.h>#include<time.h>main(){int a,b,op,os; printf(" [天天练,Baby们来挑战吧!]\n");aq1: printf("选择您想挑战的运算法则\n");printf("1.加法 2.减法 3…

试图运行项目时出错,无法启动调试。没有正确安装调试器,请运行安装程序安装或恢复调试器。...
用Visual Studio.net 2003调试项目时,出现错误对话框,显示如下:试图运行项目时出错,无法启动调试。没有正确安装调试器,请运行安装程序安装或恢复调试器。解决方法如下: 1、在命令行中尝试重新注册m…

Memcached, Redis, MongoDB区别
mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。mongodb和memcached不存在谁替换谁的问题。和memcached更为接近的是redis。它们都是内存型数据库,数据保存在内存中&…

idea使用maven创建java工程log4j的配置
错误:在pom.xml文件中 project下有下划线,报错 改正: <!-- 配置日志 --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency&g…