- 浏览: 517425 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (310)
- PHP (46)
- Java (50)
- Perl (0)
- Bash (5)
- C# (9)
- JavaScript (5)
- InDesign (7)
- 百宝箱 (5)
- 排错 (3)
- 招聘 (5)
- PHP他山之石 (3)
- SQL(DML) (10)
- Flex (15)
- LAMP (1)
- DIV+CSS (1)
- C#2008 (4)
- LOGO (7)
- WorkLog (1)
- 工作 (26)
- Groovy (7)
- 海量数据 (4)
- C/C++ (1)
- Android (1)
- PYTHON (13)
- Java开发实战1200例 (1)
- Java枚举与泛型 (16)
- Java基础应用 (24)
- poj (3)
- Java数组与集合 (18)
- 疑难解析 (3)
- JavaWeb (8)
- Jython (2)
- 成功之路 (0)
- Golang (2)
- Spring (2)
- 微信小程序 (0)
最新评论
-
DawnBells:
...
java.util.concurrent 之六:使用Future类和Callable类 -
kanglecjr:
http://tieba.baidu.com/f?kz=101 ...
泰语字母好看的手写体 -
zxjlwt:
学习了。http://surenpi.com
java.util.concurrent 之六:使用Future类和Callable类 -
spring_springdata:
java jsoup开源框架demo使用实例教程源代码下载:h ...
JSOUP获取网页数据返回403错误(403 error loading URL,connection类) -
narochids:
MARK!
JavaScript+Ajax实例大全(1521例以上),可以随编辑随执行
package org.crazyit.gobang; import java.io.BufferedReader; import java.io.InputStreamReader; /** * 五子棋游戏类 * * @author yangenxiong yangenxiong2009@gmail.com * @author Kelvin Mak kelvin.mak125@gmail.com * @version 1.0 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br>Copyright (C), 2009-2010, yangenxiong * <br>This program is protected by copyright laws. */ public class GobangGame { // 定义达到赢条件的棋子数目 private final int WIN_COUNT = 5; // 定义用户输入的X坐标 private int posX = 0; // 定义用户输入的X坐标 private int posY = 0; // 定义棋盘 private Chessboard chessboard; /** * 空构造器 */ public GobangGame() { } /** * 构造器,初始化棋盘和棋子属性 * * @param chessboard * 棋盘类 */ public GobangGame(Chessboard chessboard) { this.chessboard = chessboard; } /** * 检查输入是否合法。 * * @param inputStr * 由控制台输入的字符串。 * @return 字符串合法返回true,反则返回false。 */ public boolean isValid(String inputStr) { // 将用户输入的字符串以逗号(,)作为分隔,分隔成两个字符串 String[] posStrArr = inputStr.split(","); try { posX = Integer.parseInt(posStrArr[0]) - 1; posY = Integer.parseInt(posStrArr[1]) - 1; } catch (NumberFormatException e) { chessboard.printBoard(); System.out.println("请以(数字,数字)的格式输入:"); return false; } // 检查输入数值是否在范围之内 if (posX < 0 || posX >= Chessboard.BOARD_SIZE || posY < 0 || posY >= Chessboard.BOARD_SIZE) { chessboard.printBoard(); System.out.println("X与Y坐标只能大于等于1,与小于等于" + Chessboard.BOARD_SIZE + ",请重新输入:"); return false; } // 检查输入的位置是否已经有棋子 String[][] board = chessboard.getBoard(); if (board[posX][posY] != "十") { chessboard.printBoard(); System.out.println("此位置已经有棋子,请重新输入:"); return false; } return true; } /** * 开始下棋 */ public void start() throws Exception { // true为游戏结束 boolean isOver = false; chessboard.initBoard(); chessboard.printBoard(); // 获取键盘的输入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String inputStr = null; // br.readLine:每当键盘输入一行内容按回车键,则输入的内容被br读取到 while ((inputStr = br.readLine()) != null) { isOver = false; if (!isValid(inputStr)) { // 如果不合法,要求重新输入,再继续 continue; } // 把对应的数组元素赋为"●" String chessman = Chessman.BLACK.getChessman(); chessboard.setBoard(posX, posY, chessman); // 判断用户是否赢了 if (isWon(posX, posY, chessman)) { isOver = true; } else { // 计算机随机选择位置坐标 int[] computerPosArr = computerDo(); chessman = Chessman.WHITE.getChessman(); chessboard.setBoard(computerPosArr[0], computerPosArr[1], chessman); // 判断计算机是否赢了 if (isWon(computerPosArr[0], computerPosArr[1], chessman)) { isOver = true; } } // 如果产生胜者,询问用户是否继续游戏 if (isOver) { // 如果继续,重新初始化棋盘,继续游戏 if (isReplay(chessman)) { chessboard.initBoard(); chessboard.printBoard(); continue; } // 如果不继续,退出程序 break; } chessboard.printBoard(); System.out.println("请输入您下棋的坐标,应以x,y的格式输入:"); } } /** * 是否重新开始下棋。 * * @param chessman * "●"为用户,"○"为计算机。 * @return 开始返回true,反则返回false。 */ public boolean isReplay(String chessman) throws Exception { chessboard.printBoard(); String message = chessman.equals(Chessman.BLACK.getChessman()) ? "恭喜您,您赢了," : "很遗憾,您输了,"; System.out.println(message + "再下一局?(y/n)"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); if (br.readLine().equals("y")) { // 开始新一局 return true; } return false; } /** * 计算机随机下棋 */ public int[] computerDo() { int posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); int posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); String[][] board = chessboard.getBoard(); while (board[posX][posY] != "十") { posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); } int[] result = { posX, posY }; return result; } /** * 判断输赢 * * @param posX * 棋子的X坐标。 * @param posY * 棋子的Y坐标 * @param ico * 棋子类型 * @return 如果有五颗相邻棋子连成一条直接,返回真,否则相反。 */ public boolean isWon(int posX, int posY, String ico) { // 直线起点的X坐标 int startX = 0; // 直线起点Y坐标 int startY = 0; // 直线结束X坐标 int endX = Chessboard.BOARD_SIZE - 1; // 直线结束Y坐标 int endY = endX; // 同条直线上相邻棋子累积数 int sameCount = 0; int temp = 0; // 计算起点的最小X坐标与Y坐标 temp = posX - WIN_COUNT + 1; startX = temp < 0 ? 0 : temp; temp = posY - WIN_COUNT + 1; startY = temp < 0 ? 0 : temp; // 计算终点的最大X坐标与Y坐标 temp = posX + WIN_COUNT - 1; endX = temp > Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1 : temp; temp = posY + WIN_COUNT - 1; endY = temp > Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1 : temp; // 从左到右方向计算相同相邻棋子的数目 String[][] board = chessboard.getBoard(); for (int i = startY; i < endY; i++) { if (board[posX][i] == ico && board[posX][i + 1] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } } if (sameCount == 0) { // 从上到下计算相同相邻棋子的数目 for (int i = startX; i < endX; i++) { if (board[i][posY] == ico && board[i + 1][posY] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } } } if (sameCount == 0) { // 从左上到右下计算相同相邻棋子的数目 int j = startY; for (int i = startX; i < endX; i++) { if (j < endY) { if (board[i][j] == ico && board[i + 1][j + 1] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } j++; } } } return sameCount == WIN_COUNT - 1 ? true : false; } public static void main(String[] args) throws Exception { GobangGame gb = new GobangGame(new Chessboard()); gb.start(); } }
package org.crazyit.gobang; /** * 棋子枚举类 * * @author yangenxiong yangenxiong2009@gmail.com * @author Kelvin Mak kelvin.mak125@gmail.com * @version 1.0 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br>Copyright (C), 2009-2010, yangenxiong * <br>This program is protected by copyright laws. */ public enum Chessman { BLACK("●"), WHITE("○"); private String chessman; /** * 私有构造器 */ private Chessman(String chessman) { this.chessman = chessman; } /** * @return String 黑棋或者白棋 */ public String getChessman() { return this.chessman; } }
package org.crazyit.gobang; /** * 棋盘对象 * * @author yangenxiong yangenxiong2009@gmail.com * @author Kelvin Mak kelvin.mak125@gmail.com * @version 1.0 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br>Copyright (C), 2009-2010, yangenxiong * <br>This program is protected by copyright laws. */ public class Chessboard { // 定义一个二维数组来充当棋盘 private String[][] board; // 定义棋盘的大小 public static final int BOARD_SIZE = 22; /** * 初始化棋盘 * * @return void */ public void initBoard() { // 初始化棋盘数组 board = new String[BOARD_SIZE][BOARD_SIZE]; // 把每个元素赋值为“十”,用于控制台输出棋盘 for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { board[i][j] = "十"; } } } public void test() { Object[][] array = new Object[10][10]; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { array[i][j] = new Object(); } } } /** * 在控制台输出棋盘的方法 */ public void printBoard() { // 打印每个数组元素 for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { // 打印后不换行 System.out.print(board[i][j]); } // 每打印完一行数组元素就换行一次 System.out.print("\n"); } } /** * 给棋盘位置赋值 * * @param posX * X坐标 * @param posY * Y坐标 * @param chessman * 棋子 */ public void setBoard(int posX, int posY, String chessman) { this.board[posX][posY] = chessman; } /** * 返回棋盘 * * @return 返回棋盘 */ public String[][] getBoard() { return this.board; } }
isWon() 必须加入这段代码(随书代码无此段代码),否则,撇方向(斜杠/)方向的同色棋子不会得到检测
if (sameCount == 0) { int j=1; for(int i = posX; i <= endX; i++){ if((posX + j <= endX) && (posY - j >= startY)){ if (board[posX][posY] == ico && board[posX + j][posY - j] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } j++; } } j=1; for(int i = posX; i >= startX; i--){ if((posX - j >= startX) && (posY + j <= endY)){ if (board[posX][posY] == ico && board[posX - j][posY + j] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } j++; } } }
发表评论
-
2-02 Spring的Java配置方式
2018-09-07 05:25 6231) 在Eclipse中新建一个Maven项目。 2 ... -
多位置控制系统 以及 在线诊断系统 之设计
2015-05-29 08:01 918利用 Groovy 生成输入数据: def f = new ... -
管理密码集中化
2015-03-28 17:13 1218项目需求:把指定的Spring配置文件的指定密码提取出来, ... -
更改eclipse中java和jsp文件字体的大小
2014-11-27 07:15 14551.更改java文件大小设置 Window->pre ... -
14.8 Struts2 基础之 实践与练习
2014-11-25 08:32 72514.8 实践与练习 1. 实现用户的中间退出 ... -
Gradle 之插件 gretty 入门
2014-11-23 22:42 12711英文来源: http://akhikhl.github. ... -
Gradle学习系列之三——读懂Gradle语法
2014-11-23 20:15 2143在本系列的上篇文章中 ... -
Gradle学习系列之二——创建Task的多种方法
2014-11-23 19:46 724在本系列的上篇文章中 ... -
Gradle学习系列之一——Gradle快速入门
2014-11-23 19:24 1644这是一个关于Gradle的学习系列,其中包含以下文章: ... -
使用Maven2 原型(Archetype) 建立Struts程序框架(骨架)
2014-11-25 07:35 646使用Maven2 原型(Archet ... -
maven学习(上)- 基本入门用法
2014-11-25 07:35 856一、下载及安装 1.1 下载maven 3.1.1 ... -
JDBC连接MySQL
2014-11-18 08:05 1171前期准备工作,安好JDK,MyEclipse。 下载JDB ... -
Maven usage
2014-10-23 09:27 667P:\>mvn --help usage: m ... -
第1章 初识Java7
2014-10-22 08:17 892第1章 初识Java 7 本章内容: Java 既 ... -
eclipse性能优化
2014-10-19 02:34 751=>启动优化 Window > Prefer ... -
ora-01950:对表空间XXX无权限
2014-10-16 13:30 6292以前执行了grant dba to 用户 查了一下dba角 ... -
Missing artifact com.sun:tools:jar:1.5.0:system (转)
2014-10-16 09:41 991记得以前写过这个错误的解决方案,找了很长时间,自己都没找到 ... -
Mockito(一) -- 入门篇
2014-10-13 20:32 988Mockito是一种mock工具/ ... -
1.14 标准注解
2014-10-10 08:11 5361.14.1 The Built-In Annotation ... -
用Ant实现Java项目的自动构建和部署
2014-10-09 20:16 776原文地址:http://tech.it168.com/j/2 ...
相关推荐
基于springboot教育资源共享平台源码数据库文档.zip
linux开发篇,配套视频:https://www.bilibili.com/list/474327672?sid=4493702&spm_id_from=333.999.0.0&desc=1
ReadEra 这个阅读应用能够打开下列任何格式的文档: EPUB, PDF, DOC, RTF, TXT, DJVU, FB2, MOBI, 和 CHM. 基本上来说,你可以用它阅读你的设备内存中的任何书籍或者文本文档。 这个应用与划分成章节的文档兼。,有一个书签功能,可以在你阅读的时候,自动保存你的进度。另外,它让你更改页面模式,从几种不同的主题中进行挑选(夜间,白天,棕黑色调,还有控制台)。
软件环境:KEIL4 硬件环境:STM32单片机+舵机 控制原理:通过控制输出信号的占空比调节舵机旋转的角度
基于springboot仓库管理系统源码数据库文档.zip
酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 酒店管理系统源码C++实现的毕业设计项目源码.zip,酒店管理系统源码C++实现的毕业设计项目源码.zip个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。酒店管理系统源码C++实现的毕业设计项目源码.zip,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分98.5分。主要针对计算机相关专业的正在做毕
58商铺全新UI试客试用平台网站源码
springboot vue3前后端分离 基于SpringBoot+Vue的轻量级定时任务管理系统.zip
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
4D毫米波雷达点云数据处理方法研究.caj
S M 2 2 5 8 X T 量产工具供大家下载使用
基于springboot的文物管理系统源码数据库文档.zip
基于springboot的电影院售票管理系统源码数据库文档.zip
基于Java web 实现的仓库管理系统源码,适用于初学者了解Java web的开发过程以及仓库管理系统的实现。
美容美发项目,使用django框架,前后端一体化项目
在线票务:2023年中国在线票务行业市场规模约为24.99亿元,挖掘市场蓝海新机遇 在数字浪潮的席卷下,传统的票务销售模式正经历着前所未有的变革。纸质门票逐渐淡出人们的视野,取而代之的是便捷、高效的数字和移动票务。这一转变不仅为消费者带来了前所未有的购票体验,更为在线票务平台开辟了广阔的发展空间和市场机遇。随着国民经济的持续增长和文体娱乐行业的蓬勃发展,中国在线票务行业正站在时代的风口浪尖,等待着每一位有志之士的加入。那么,这片蓝海市场究竟蕴藏着怎样的潜力?又该如何把握机遇,实现突破?让我们一同探索。 市场概况: 近年来,中国在线票务行业市场规模持续扩大,展现出强劲的增长势头。据QYResearch数据显示,2023年中国在线票务行业市场规模约为24.99亿元,尽管受到宏观经济的影响,市场规模增速放缓,但整体趋势依然向好。这一增长主要得益于国民人均收入的不断提高、电影及演出行业的快速发展以及政府政策的支持。例如,2023年财政部、国家电影局发布的《关于阶段性免征国家电影事业发展专项资金政策的公告》,为电影行业注入了强劲动力,进而推动了在线票务市场规模的扩大。 技术创新与趋势: 技术进步
基于SpringBoot的养老院管理系统源码数据库文档.zip
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过严格测试运行成功才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
内容概要:本文档是一份详细的Go语言教程,从基础概念介绍到高级主题均有覆盖。主要内容包括Go语言的基础语法、数据类型、控制结构、函数、结构体、接口和并发编程等方面。通过具体示例介绍了如何使用Go语言进行开发。 适合人群:初学者和有一定经验的程序员都可以从这篇教程中受益,特别是那些想要快速掌握Go语言并应用于实际项目的开发者。 使用场景及目标:适用于初学者系统学习Go语言的基础知识和常用功能;也可以作为已有开发经验者的参考资料,帮助他们解决具体的编程问题,提高开发效率。 其他说明:本教程不仅包含了Go语言的基本知识点,还重点讲解了其独特的并发编程模型。读者在学习过程中应该注重理论与实践相结合,通过实际编写代码来加深理解和记忆。
基于springboot计算机基础网上考试系统源码数据库文档.zip