代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
五子棋小游戏
作者:
编程爱好者1
/ 发布于
2015/1/4
/
484
package org.shmtu.gobang; public class Chessboard { //定义一个二维数组来充当棋盘 private String [][] board; //定义棋盘大小 public static final int BOARD_SIZE=22; 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 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"); } } /*给棋盘的位置赋值*/ public void setBoard(int posX, int posY, String chessman) { this.board[posX][posY]=chessman; } /*返回棋盘*/ public String [][] getBoard() { return this.board; } } 2. [文件] Chessman.java ~ 293B 下载(11) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package org.shmtu.gobang; public enum Chessman { BLACK("●"),WHITE("○"); private String chessman; // 私有构造函数 private Chessman(String chessman) { this.chessman=chessman; } // 返回黑棋或者白棋 public String getChessman() { return this.chessman; } } 3. [文件] GobangGame.java ~ 5KB 下载(9) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 package org.shmtu.gobang; import java.io.*; public class GobangGame { // 定义到达赢条件的棋子数目 private final int WIN_COUNT=5; // 定义用户输入的坐标 private int posX=0; private int posY=0; // 定义棋盘 private Chessboard chessboard; // 构造函数 public GobangGame(Chessboard chessboard) { this.chessboard=chessboard; } /*检查用户输入是否合理 */ 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) { // TODO: handle exception chessboard.printBoard(); System.out.println("请输入(数字,数字)格式"); return false; } //检查输入的数字是否在允许范围里 if(posX<1||posX>chessboard.BOARD_SIZE||posY<1||posY>chessboard.BOARD_SIZE) { chessboard.printBoard(); System.out.println("输入的坐标超过棋盘范围,请重新输入!"); return false; } //检查输入的位置是否有棋子 String [][] board=chessboard.getBoard(); if(board[posX][posY]!="+") { chessboard.printBoard(); System.out.println("输入的位置已经有棋子,请输入到其他位置!"); return false; } return true; } /** * 开始下棋 * @param true 为游戏结束 */ public void start() throws Exception { boolean isOver=false; //isOver标记游戏是否胜利 //初始化和打印棋盘 chessboard.initBoard(); chessboard.printBoard(); //获取从键盘输入 BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String inputStr=null; 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 ico 棋子类型 * @return 如果有相邻五颗棋子在一条直线上则返回true,否则返回false */ public boolean isWon(int posX,int posY, String ico) { //直线起点和终点坐标 int startX=0; int startY=0; int endX=chessboard.BOARD_SIZE-1; int endY=endX; //同一条直线上相邻棋子的数目 int sameCount=0; int temp=0; //计算起点最小坐标 temp=posX-WIN_COUNT+1; startX=temp<0?0:temp; temp=posY-WIN_COUNT+1; startY=temp<0?0:temp; //计算终点最大坐标 temp=posX+chessboard.BOARD_SIZE-1; endX=temp>chessboard.BOARD_SIZE?chessboard.BOARD_SIZE:temp; temp=posY+chessboard.BOARD_SIZE-1; endY=temp>chessboard.BOARD_SIZE?chessboard.BOARD_SIZE: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(); } }
试试其它关键字
五子棋
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
编程爱好者1
贡献的其它代码
(
1
)
.
五子棋小游戏
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3